From 44cf66e5d4a76cd9e148e3db6e52712a111cb0b1 Mon Sep 17 00:00:00 2001 From: Liam Nichols Date: Tue, 19 Oct 2021 21:34:28 +0200 Subject: [PATCH 1/5] Delete webp target (and libwebp source code) --- Extended/libwebp/AUTHORS | 45 - Extended/libwebp/Android.mk | 280 - Extended/libwebp/CMakeLists.txt | 675 - Extended/libwebp/COPYING | 30 - Extended/libwebp/ChangeLog | 4054 ---- Extended/libwebp/Makefile | 840 - Extended/libwebp/Makefile.am | 9 - Extended/libwebp/Makefile.in | 840 - Extended/libwebp/Makefile.vc | 522 - Extended/libwebp/NEWS | 242 - Extended/libwebp/PATENTS | 23 - Extended/libwebp/README | 789 - Extended/libwebp/README.mux | 256 - Extended/libwebp/README.webp_js | 80 - Extended/libwebp/aclocal.m4 | 1201 -- Extended/libwebp/ar-lib | 270 - Extended/libwebp/autogen.sh | 2 - Extended/libwebp/build.gradle | 439 - Extended/libwebp/cmake/WebPConfig.cmake.in | 11 - Extended/libwebp/cmake/config.h.in | 153 - Extended/libwebp/cmake/cpu.cmake | 136 - Extended/libwebp/cmake/deps.cmake | 170 - Extended/libwebp/codereview.settings | 4 - Extended/libwebp/compile | 348 - Extended/libwebp/config.guess | 1480 -- Extended/libwebp/config.log | 1855 -- Extended/libwebp/config.status | 2035 -- Extended/libwebp/config.sub | 1801 -- Extended/libwebp/configure | 17357 ---------------- Extended/libwebp/configure.ac | 777 - Extended/libwebp/depcomp | 791 - Extended/libwebp/doc/README | 29 - Extended/libwebp/doc/template.html | 94 - Extended/libwebp/doc/webp-container-spec.txt | 823 - .../doc/webp-lossless-bitstream-spec.txt | 1090 - .../examples/.deps/anim_diff-anim_diff.Po | 1 - .../examples/.deps/anim_diff-anim_util.Po | 1 - .../examples/.deps/anim_diff-gifdec.Po | 1 - .../examples/.deps/anim_dump-anim_dump.Po | 1 - .../examples/.deps/anim_dump-anim_util.Po | 1 - .../examples/.deps/anim_dump-gifdec.Po | 1 - .../libwebp/examples/.deps/cwebp-cwebp.Po | 1 - .../libwebp/examples/.deps/dwebp-dwebp.Po | 1 - .../libwebp/examples/.deps/example_util.Plo | 1 - .../examples/.deps/gif2webp-gif2webp.Po | 1 - .../libwebp/examples/.deps/gif2webp-gifdec.Po | 1 - .../examples/.deps/img2webp-img2webp.Po | 1 - .../libwebp/examples/.deps/vwebp-vwebp.Po | 1 - .../examples/.deps/webpinfo-webpinfo.Po | 1 - .../libwebp/examples/.deps/webpmux-webpmux.Po | 1 - Extended/libwebp/examples/Android.mk | 93 - Extended/libwebp/examples/Makefile | 1096 - Extended/libwebp/examples/Makefile.am | 119 - Extended/libwebp/examples/Makefile.in | 1096 - Extended/libwebp/examples/anim_diff.c | 317 - Extended/libwebp/examples/anim_dump.c | 121 - Extended/libwebp/examples/anim_util.c | 779 - Extended/libwebp/examples/anim_util.h | 73 - Extended/libwebp/examples/cwebp.c | 1183 -- Extended/libwebp/examples/dwebp.c | 420 - Extended/libwebp/examples/example_util.c | 135 - Extended/libwebp/examples/example_util.h | 70 - Extended/libwebp/examples/gif2webp.c | 604 - Extended/libwebp/examples/gifdec.c | 416 - Extended/libwebp/examples/gifdec.h | 116 - Extended/libwebp/examples/img2webp.c | 324 - Extended/libwebp/examples/stopwatch.h | 63 - Extended/libwebp/examples/test.webp | Bin 4880 -> 0 bytes Extended/libwebp/examples/test_ref.ppm | 4 - Extended/libwebp/examples/unicode.h | 102 - Extended/libwebp/examples/unicode_gif.h | 75 - Extended/libwebp/examples/vwebp.c | 641 - Extended/libwebp/examples/webpinfo.c | 1182 -- Extended/libwebp/examples/webpmux.c | 1165 -- .../extras/.deps/get_disto-get_disto.Po | 1 - .../extras/.deps/libwebpextras_la-extras.Plo | 1 - .../libwebpextras_la-quality_estimate.Plo | 1 - .../extras/.deps/vwebp_sdl-vwebp_sdl.Po | 1 - .../extras/.deps/vwebp_sdl-webp_to_sdl.Po | 1 - .../extras/.deps/webp_quality-webp_quality.Po | 1 - Extended/libwebp/extras/Makefile | 784 - Extended/libwebp/extras/Makefile.am | 44 - Extended/libwebp/extras/Makefile.in | 784 - Extended/libwebp/extras/extras.c | 162 - Extended/libwebp/extras/extras.h | 77 - Extended/libwebp/extras/get_disto.c | 355 - Extended/libwebp/extras/quality_estimate.c | 129 - Extended/libwebp/extras/vwebp_sdl.c | 101 - Extended/libwebp/extras/webp_quality.c | 54 - Extended/libwebp/extras/webp_to_sdl.c | 110 - Extended/libwebp/extras/webp_to_sdl.h | 22 - Extended/libwebp/gradle.properties | 14 - .../libwebp/gradle/wrapper/gradle-wrapper.jar | Bin 53556 -> 0 bytes .../gradle/wrapper/gradle-wrapper.properties | 6 - Extended/libwebp/gradlew | 164 - Extended/libwebp/gradlew.bat | 90 - .../libwebp/imageio/.deps/imageio_util.Plo | 1 - .../.deps/libimagedec_la-image_dec.Plo | 1 - .../imageio/.deps/libimagedec_la-jpegdec.Plo | 1 - .../imageio/.deps/libimagedec_la-metadata.Plo | 1 - .../imageio/.deps/libimagedec_la-pngdec.Plo | 1 - .../imageio/.deps/libimagedec_la-pnmdec.Plo | 1 - .../imageio/.deps/libimagedec_la-tiffdec.Plo | 1 - .../imageio/.deps/libimagedec_la-webpdec.Plo | 1 - .../imageio/.deps/libimagedec_la-wicdec.Plo | 1 - .../.deps/libimageenc_la-image_enc.Plo | 1 - Extended/libwebp/imageio/Android.mk | 54 - Extended/libwebp/imageio/Makefile | 753 - Extended/libwebp/imageio/Makefile.am | 32 - Extended/libwebp/imageio/Makefile.in | 753 - Extended/libwebp/imageio/image_dec.c | 66 - Extended/libwebp/imageio/image_dec.h | 67 - Extended/libwebp/imageio/image_enc.c | 604 - Extended/libwebp/imageio/image_enc.h | 96 - Extended/libwebp/imageio/imageio_util.c | 160 - Extended/libwebp/imageio/imageio_util.h | 64 - Extended/libwebp/imageio/jpegdec.c | 360 - Extended/libwebp/imageio/jpegdec.h | 37 - Extended/libwebp/imageio/metadata.c | 49 - Extended/libwebp/imageio/metadata.h | 47 - Extended/libwebp/imageio/pngdec.c | 365 - Extended/libwebp/imageio/pngdec.h | 37 - Extended/libwebp/imageio/pnmdec.c | 258 - Extended/libwebp/imageio/pnmdec.h | 37 - Extended/libwebp/imageio/tiffdec.c | 281 - Extended/libwebp/imageio/tiffdec.h | 37 - Extended/libwebp/imageio/webpdec.c | 244 - Extended/libwebp/imageio/webpdec.h | 67 - Extended/libwebp/imageio/wicdec.c | 399 - Extended/libwebp/imageio/wicdec.h | 34 - Extended/libwebp/install-sh | 518 - Extended/libwebp/iosbuild.sh | 150 - Extended/libwebp/libtool | 11743 ----------- Extended/libwebp/ltmain.sh | 11249 ---------- Extended/libwebp/m4/ax_pthread.m4 | 332 - Extended/libwebp/m4/libtool.m4 | 8388 -------- Extended/libwebp/m4/ltoptions.m4 | 437 - Extended/libwebp/m4/ltsugar.m4 | 124 - Extended/libwebp/m4/ltversion.m4 | 23 - Extended/libwebp/m4/lt~obsolete.m4 | 99 - Extended/libwebp/makefile.unix | 500 - Extended/libwebp/man/Makefile | 551 - Extended/libwebp/man/Makefile.am | 17 - Extended/libwebp/man/Makefile.in | 551 - Extended/libwebp/man/cwebp.1 | 318 - Extended/libwebp/man/dwebp.1 | 149 - Extended/libwebp/man/gif2webp.1 | 164 - Extended/libwebp/man/img2webp.1 | 105 - Extended/libwebp/man/vwebp.1 | 101 - Extended/libwebp/man/webpinfo.1 | 80 - Extended/libwebp/man/webpmux.1 | 260 - Extended/libwebp/missing | 215 - Extended/libwebp/src/Makefile | 882 - Extended/libwebp/src/Makefile.am | 55 - Extended/libwebp/src/Makefile.in | 882 - .../dec/.deps/libwebpdecode_la-alpha_dec.Plo | 1 - .../dec/.deps/libwebpdecode_la-buffer_dec.Plo | 1 - .../dec/.deps/libwebpdecode_la-frame_dec.Plo | 1 - .../dec/.deps/libwebpdecode_la-idec_dec.Plo | 1 - .../src/dec/.deps/libwebpdecode_la-io_dec.Plo | 1 - .../dec/.deps/libwebpdecode_la-quant_dec.Plo | 1 - .../dec/.deps/libwebpdecode_la-tree_dec.Plo | 1 - .../dec/.deps/libwebpdecode_la-vp8_dec.Plo | 1 - .../dec/.deps/libwebpdecode_la-vp8l_dec.Plo | 1 - .../dec/.deps/libwebpdecode_la-webp_dec.Plo | 1 - Extended/libwebp/src/dec/Makefile | 796 - Extended/libwebp/src/dec/Makefile.am | 29 - Extended/libwebp/src/dec/Makefile.in | 796 - Extended/libwebp/src/dec/alpha_dec.c | 232 - Extended/libwebp/src/dec/alphai_dec.h | 54 - Extended/libwebp/src/dec/buffer_dec.c | 312 - Extended/libwebp/src/dec/common_dec.h | 54 - Extended/libwebp/src/dec/frame_dec.c | 803 - Extended/libwebp/src/dec/idec_dec.c | 908 - Extended/libwebp/src/dec/io_dec.c | 649 - Extended/libwebp/src/dec/quant_dec.c | 115 - Extended/libwebp/src/dec/tree_dec.c | 537 - Extended/libwebp/src/dec/vp8_dec.c | 724 - Extended/libwebp/src/dec/vp8_dec.h | 185 - Extended/libwebp/src/dec/vp8i_dec.h | 319 - Extended/libwebp/src/dec/vp8l_dec.c | 1739 -- Extended/libwebp/src/dec/vp8li_dec.h | 135 - Extended/libwebp/src/dec/webp_dec.c | 845 - Extended/libwebp/src/dec/webpi_dec.h | 133 - .../libwebp/src/demux/.deps/anim_decode.Plo | 1 - Extended/libwebp/src/demux/.deps/demux.Plo | 1 - Extended/libwebp/src/demux/Makefile | 747 - Extended/libwebp/src/demux/Makefile.am | 18 - Extended/libwebp/src/demux/Makefile.in | 747 - Extended/libwebp/src/demux/anim_decode.c | 454 - Extended/libwebp/src/demux/demux.c | 967 - Extended/libwebp/src/demux/libwebpdemux.pc | 11 - Extended/libwebp/src/demux/libwebpdemux.pc.in | 11 - Extended/libwebp/src/demux/libwebpdemux.rc | 41 - .../.deps/libwebpdsp_la-alpha_processing.Plo | 1 - .../src/dsp/.deps/libwebpdsp_la-cost.Plo | 1 - .../src/dsp/.deps/libwebpdsp_la-cpu.Plo | 1 - .../src/dsp/.deps/libwebpdsp_la-dec.Plo | 1 - .../.deps/libwebpdsp_la-dec_clip_tables.Plo | 1 - .../src/dsp/.deps/libwebpdsp_la-enc.Plo | 1 - .../src/dsp/.deps/libwebpdsp_la-filters.Plo | 1 - .../src/dsp/.deps/libwebpdsp_la-lossless.Plo | 1 - .../dsp/.deps/libwebpdsp_la-lossless_enc.Plo | 1 - .../src/dsp/.deps/libwebpdsp_la-rescaler.Plo | 1 - .../src/dsp/.deps/libwebpdsp_la-ssim.Plo | 1 - .../dsp/.deps/libwebpdsp_la-upsampling.Plo | 1 - .../src/dsp/.deps/libwebpdsp_la-yuv.Plo | 1 - .../libwebpdsp_mips32_la-cost_mips32.Plo | 1 - .../.deps/libwebpdsp_mips32_la-enc_mips32.Plo | 1 - ...bwebpdsp_mips32_la-lossless_enc_mips32.Plo | 1 - ...ebpdsp_mips_dsp_r2_la-cost_mips_dsp_r2.Plo | 1 - ...webpdsp_mips_dsp_r2_la-enc_mips_dsp_r2.Plo | 1 - ...ips_dsp_r2_la-lossless_enc_mips_dsp_r2.Plo | 1 - .../dsp/.deps/libwebpdsp_msa_la-enc_msa.Plo | 1 - .../libwebpdsp_msa_la-lossless_enc_msa.Plo | 1 - .../.deps/libwebpdsp_neon_la-cost_neon.Plo | 1 - .../dsp/.deps/libwebpdsp_neon_la-enc_neon.Plo | 1 - .../libwebpdsp_neon_la-lossless_enc_neon.Plo | 1 - .../.deps/libwebpdsp_sse2_la-cost_sse2.Plo | 1 - .../dsp/.deps/libwebpdsp_sse2_la-enc_sse2.Plo | 1 - .../libwebpdsp_sse2_la-lossless_enc_sse2.Plo | 1 - .../.deps/libwebpdsp_sse2_la-ssim_sse2.Plo | 1 - .../.deps/libwebpdsp_sse41_la-enc_sse41.Plo | 1 - ...libwebpdsp_sse41_la-lossless_enc_sse41.Plo | 1 - .../libwebpdspdecode_la-alpha_processing.Plo | 1 - .../src/dsp/.deps/libwebpdspdecode_la-cpu.Plo | 1 - .../src/dsp/.deps/libwebpdspdecode_la-dec.Plo | 1 - .../libwebpdspdecode_la-dec_clip_tables.Plo | 1 - .../dsp/.deps/libwebpdspdecode_la-filters.Plo | 1 - .../.deps/libwebpdspdecode_la-lossless.Plo | 1 - .../.deps/libwebpdspdecode_la-rescaler.Plo | 1 - .../.deps/libwebpdspdecode_la-upsampling.Plo | 1 - .../src/dsp/.deps/libwebpdspdecode_la-yuv.Plo | 1 - .../libwebpdspdecode_mips32_la-dec_mips32.Plo | 1 - ...ebpdspdecode_mips32_la-rescaler_mips32.Plo | 1 - .../libwebpdspdecode_mips32_la-yuv_mips32.Plo | 1 - ...dsp_r2_la-alpha_processing_mips_dsp_r2.Plo | 1 - ...pdecode_mips_dsp_r2_la-dec_mips_dsp_r2.Plo | 1 - ...ode_mips_dsp_r2_la-filters_mips_dsp_r2.Plo | 1 - ...de_mips_dsp_r2_la-lossless_mips_dsp_r2.Plo | 1 - ...de_mips_dsp_r2_la-rescaler_mips_dsp_r2.Plo | 1 - ..._mips_dsp_r2_la-upsampling_mips_dsp_r2.Plo | 1 - ...pdecode_mips_dsp_r2_la-yuv_mips_dsp_r2.Plo | 1 - .../.deps/libwebpdspdecode_msa_la-dec_msa.Plo | 1 - .../libwebpdspdecode_msa_la-filters_msa.Plo | 1 - .../libwebpdspdecode_msa_la-lossless_msa.Plo | 1 - .../libwebpdspdecode_msa_la-rescaler_msa.Plo | 1 - ...libwebpdspdecode_msa_la-upsampling_msa.Plo | 1 - ...spdecode_neon_la-alpha_processing_neon.Plo | 1 - .../libwebpdspdecode_neon_la-dec_neon.Plo | 1 - .../libwebpdspdecode_neon_la-filters_neon.Plo | 1 - ...libwebpdspdecode_neon_la-lossless_neon.Plo | 1 - ...libwebpdspdecode_neon_la-rescaler_neon.Plo | 1 - ...bwebpdspdecode_neon_la-upsampling_neon.Plo | 1 - .../libwebpdspdecode_neon_la-yuv_neon.Plo | 1 - ...spdecode_sse2_la-alpha_processing_sse2.Plo | 1 - .../libwebpdspdecode_sse2_la-dec_sse2.Plo | 1 - .../libwebpdspdecode_sse2_la-filters_sse2.Plo | 1 - ...libwebpdspdecode_sse2_la-lossless_sse2.Plo | 1 - ...libwebpdspdecode_sse2_la-rescaler_sse2.Plo | 1 - ...bwebpdspdecode_sse2_la-upsampling_sse2.Plo | 1 - .../libwebpdspdecode_sse2_la-yuv_sse2.Plo | 1 - ...decode_sse41_la-alpha_processing_sse41.Plo | 1 - .../libwebpdspdecode_sse41_la-dec_sse41.Plo | 1 - ...ebpdspdecode_sse41_la-upsampling_sse41.Plo | 1 - .../libwebpdspdecode_sse41_la-yuv_sse41.Plo | 1 - Extended/libwebp/src/dsp/Makefile | 1783 -- Extended/libwebp/src/dsp/Makefile.am | 185 - Extended/libwebp/src/dsp/Makefile.in | 1783 -- Extended/libwebp/src/dsp/alpha_processing.c | 472 - .../src/dsp/alpha_processing_mips_dsp_r2.c | 228 - .../libwebp/src/dsp/alpha_processing_neon.c | 191 - .../libwebp/src/dsp/alpha_processing_sse2.c | 343 - .../libwebp/src/dsp/alpha_processing_sse41.c | 92 - Extended/libwebp/src/dsp/common_sse2.h | 194 - Extended/libwebp/src/dsp/common_sse41.h | 132 - Extended/libwebp/src/dsp/cost.c | 411 - Extended/libwebp/src/dsp/cost_mips32.c | 154 - Extended/libwebp/src/dsp/cost_mips_dsp_r2.c | 107 - Extended/libwebp/src/dsp/cost_neon.c | 122 - Extended/libwebp/src/dsp/cost_sse2.c | 119 - Extended/libwebp/src/dsp/cpu.c | 222 - Extended/libwebp/src/dsp/dec.c | 887 - Extended/libwebp/src/dsp/dec_clip_tables.c | 369 - Extended/libwebp/src/dsp/dec_mips32.c | 587 - Extended/libwebp/src/dsp/dec_mips_dsp_r2.c | 994 - Extended/libwebp/src/dsp/dec_msa.c | 1020 - Extended/libwebp/src/dsp/dec_neon.c | 1659 -- Extended/libwebp/src/dsp/dec_sse2.c | 1227 -- Extended/libwebp/src/dsp/dec_sse41.c | 46 - Extended/libwebp/src/dsp/dsp.h | 678 - Extended/libwebp/src/dsp/enc.c | 830 - Extended/libwebp/src/dsp/enc_mips32.c | 677 - Extended/libwebp/src/dsp/enc_mips_dsp_r2.c | 1517 -- Extended/libwebp/src/dsp/enc_msa.c | 896 - Extended/libwebp/src/dsp/enc_neon.c | 938 - Extended/libwebp/src/dsp/enc_sse2.c | 1381 -- Extended/libwebp/src/dsp/enc_sse41.c | 339 - Extended/libwebp/src/dsp/filters.c | 287 - .../libwebp/src/dsp/filters_mips_dsp_r2.c | 402 - Extended/libwebp/src/dsp/filters_msa.c | 202 - Extended/libwebp/src/dsp/filters_neon.c | 329 - Extended/libwebp/src/dsp/filters_sse2.c | 335 - Extended/libwebp/src/dsp/lossless.c | 662 - Extended/libwebp/src/dsp/lossless.h | 229 - Extended/libwebp/src/dsp/lossless_common.h | 204 - Extended/libwebp/src/dsp/lossless_enc.c | 1048 - .../libwebp/src/dsp/lossless_enc_mips32.c | 397 - .../src/dsp/lossless_enc_mips_dsp_r2.c | 281 - Extended/libwebp/src/dsp/lossless_enc_msa.c | 148 - Extended/libwebp/src/dsp/lossless_enc_neon.c | 144 - Extended/libwebp/src/dsp/lossless_enc_sse2.c | 686 - Extended/libwebp/src/dsp/lossless_enc_sse41.c | 148 - .../libwebp/src/dsp/lossless_mips_dsp_r2.c | 696 - Extended/libwebp/src/dsp/lossless_msa.c | 356 - Extended/libwebp/src/dsp/lossless_neon.c | 641 - Extended/libwebp/src/dsp/lossless_sse2.c | 708 - Extended/libwebp/src/dsp/mips_macro.h | 200 - Extended/libwebp/src/dsp/msa_macro.h | 1392 -- Extended/libwebp/src/dsp/neon.h | 101 - Extended/libwebp/src/dsp/quant.h | 85 - Extended/libwebp/src/dsp/rescaler.c | 250 - Extended/libwebp/src/dsp/rescaler_mips32.c | 295 - .../libwebp/src/dsp/rescaler_mips_dsp_r2.c | 314 - Extended/libwebp/src/dsp/rescaler_msa.c | 443 - Extended/libwebp/src/dsp/rescaler_neon.c | 192 - Extended/libwebp/src/dsp/rescaler_sse2.c | 366 - Extended/libwebp/src/dsp/ssim.c | 159 - Extended/libwebp/src/dsp/ssim_sse2.c | 165 - Extended/libwebp/src/dsp/upsampling.c | 327 - .../libwebp/src/dsp/upsampling_mips_dsp_r2.c | 291 - Extended/libwebp/src/dsp/upsampling_msa.c | 688 - Extended/libwebp/src/dsp/upsampling_neon.c | 285 - Extended/libwebp/src/dsp/upsampling_sse2.c | 267 - Extended/libwebp/src/dsp/upsampling_sse41.c | 239 - Extended/libwebp/src/dsp/yuv.c | 308 - Extended/libwebp/src/dsp/yuv.h | 210 - Extended/libwebp/src/dsp/yuv_mips32.c | 103 - Extended/libwebp/src/dsp/yuv_mips_dsp_r2.c | 134 - Extended/libwebp/src/dsp/yuv_neon.c | 288 - Extended/libwebp/src/dsp/yuv_sse2.c | 874 - Extended/libwebp/src/dsp/yuv_sse41.c | 613 - .../enc/.deps/libwebpencode_la-alpha_enc.Plo | 1 - .../.deps/libwebpencode_la-analysis_enc.Plo | 1 - ...encode_la-backward_references_cost_enc.Plo | 1 - ...bwebpencode_la-backward_references_enc.Plo | 1 - .../enc/.deps/libwebpencode_la-config_enc.Plo | 1 - .../enc/.deps/libwebpencode_la-cost_enc.Plo | 1 - .../enc/.deps/libwebpencode_la-filter_enc.Plo | 1 - .../enc/.deps/libwebpencode_la-frame_enc.Plo | 1 - .../.deps/libwebpencode_la-histogram_enc.Plo | 1 - .../.deps/libwebpencode_la-iterator_enc.Plo | 1 - .../libwebpencode_la-near_lossless_enc.Plo | 1 - .../libwebpencode_la-picture_csp_enc.Plo | 1 - .../.deps/libwebpencode_la-picture_enc.Plo | 1 - .../libwebpencode_la-picture_psnr_enc.Plo | 1 - .../libwebpencode_la-picture_rescale_enc.Plo | 1 - .../libwebpencode_la-picture_tools_enc.Plo | 1 - .../.deps/libwebpencode_la-predictor_enc.Plo | 1 - .../enc/.deps/libwebpencode_la-quant_enc.Plo | 1 - .../enc/.deps/libwebpencode_la-syntax_enc.Plo | 1 - .../enc/.deps/libwebpencode_la-token_enc.Plo | 1 - .../enc/.deps/libwebpencode_la-tree_enc.Plo | 1 - .../enc/.deps/libwebpencode_la-vp8l_enc.Plo | 1 - .../enc/.deps/libwebpencode_la-webp_enc.Plo | 1 - Extended/libwebp/src/enc/Makefile | 961 - Extended/libwebp/src/enc/Makefile.am | 42 - Extended/libwebp/src/enc/Makefile.in | 961 - Extended/libwebp/src/enc/alpha_enc.c | 443 - Extended/libwebp/src/enc/analysis_enc.c | 535 - .../src/enc/backward_references_cost_enc.c | 790 - .../libwebp/src/enc/backward_references_enc.c | 945 - .../libwebp/src/enc/backward_references_enc.h | 234 - Extended/libwebp/src/enc/config_enc.c | 152 - Extended/libwebp/src/enc/cost_enc.c | 342 - Extended/libwebp/src/enc/cost_enc.h | 82 - Extended/libwebp/src/enc/filter_enc.c | 235 - Extended/libwebp/src/enc/frame_enc.c | 890 - Extended/libwebp/src/enc/histogram_enc.c | 1249 -- Extended/libwebp/src/enc/histogram_enc.h | 128 - Extended/libwebp/src/enc/iterator_enc.c | 459 - Extended/libwebp/src/enc/near_lossless_enc.c | 151 - Extended/libwebp/src/enc/picture_csp_enc.c | 1210 -- Extended/libwebp/src/enc/picture_enc.c | 296 - Extended/libwebp/src/enc/picture_psnr_enc.c | 258 - .../libwebp/src/enc/picture_rescale_enc.c | 309 - Extended/libwebp/src/enc/picture_tools_enc.c | 278 - Extended/libwebp/src/enc/predictor_enc.c | 772 - Extended/libwebp/src/enc/quant_enc.c | 1372 -- Extended/libwebp/src/enc/syntax_enc.c | 388 - Extended/libwebp/src/enc/token_enc.c | 262 - Extended/libwebp/src/enc/tree_enc.c | 504 - Extended/libwebp/src/enc/vp8i_enc.h | 518 - Extended/libwebp/src/enc/vp8l_enc.c | 1917 -- Extended/libwebp/src/enc/vp8li_enc.h | 118 - Extended/libwebp/src/enc/webp_enc.c | 410 - Extended/libwebp/src/libwebp.pc | 11 - Extended/libwebp/src/libwebp.pc.in | 11 - Extended/libwebp/src/libwebp.rc | 41 - Extended/libwebp/src/libwebpdecoder.pc | 11 - Extended/libwebp/src/libwebpdecoder.pc.in | 11 - Extended/libwebp/src/libwebpdecoder.rc | 41 - .../libwebp/src/mux/.deps/anim_encode.Plo | 1 - Extended/libwebp/src/mux/.deps/muxedit.Plo | 1 - .../libwebp/src/mux/.deps/muxinternal.Plo | 1 - Extended/libwebp/src/mux/.deps/muxread.Plo | 1 - Extended/libwebp/src/mux/Makefile | 755 - Extended/libwebp/src/mux/Makefile.am | 22 - Extended/libwebp/src/mux/Makefile.in | 755 - Extended/libwebp/src/mux/anim_encode.c | 1581 -- Extended/libwebp/src/mux/animi.h | 43 - Extended/libwebp/src/mux/libwebpmux.pc | 12 - Extended/libwebp/src/mux/libwebpmux.pc.in | 12 - Extended/libwebp/src/mux/libwebpmux.rc | 41 - Extended/libwebp/src/mux/muxedit.c | 657 - Extended/libwebp/src/mux/muxi.h | 234 - Extended/libwebp/src/mux/muxinternal.c | 548 - Extended/libwebp/src/mux/muxread.c | 558 - .../src/utils/.deps/bit_reader_utils.Plo | 1 - .../src/utils/.deps/bit_writer_utils.Plo | 1 - .../src/utils/.deps/color_cache_utils.Plo | 1 - .../libwebp/src/utils/.deps/filters_utils.Plo | 1 - .../src/utils/.deps/huffman_encode_utils.Plo | 1 - .../libwebp/src/utils/.deps/huffman_utils.Plo | 1 - .../utils/.deps/quant_levels_dec_utils.Plo | 1 - .../src/utils/.deps/quant_levels_utils.Plo | 1 - .../libwebp/src/utils/.deps/random_utils.Plo | 1 - .../src/utils/.deps/rescaler_utils.Plo | 1 - .../libwebp/src/utils/.deps/thread_utils.Plo | 1 - Extended/libwebp/src/utils/.deps/utils.Plo | 1 - Extended/libwebp/src/utils/Makefile | 756 - Extended/libwebp/src/utils/Makefile.am | 51 - Extended/libwebp/src/utils/Makefile.in | 756 - .../libwebp/src/utils/bit_reader_inl_utils.h | 195 - Extended/libwebp/src/utils/bit_reader_utils.c | 298 - Extended/libwebp/src/utils/bit_reader_utils.h | 194 - Extended/libwebp/src/utils/bit_writer_utils.c | 347 - Extended/libwebp/src/utils/bit_writer_utils.h | 154 - .../libwebp/src/utils/color_cache_utils.c | 49 - .../libwebp/src/utils/color_cache_utils.h | 89 - Extended/libwebp/src/utils/endian_inl_utils.h | 93 - Extended/libwebp/src/utils/filters_utils.c | 76 - Extended/libwebp/src/utils/filters_utils.h | 32 - .../libwebp/src/utils/huffman_encode_utils.c | 417 - .../libwebp/src/utils/huffman_encode_utils.h | 60 - Extended/libwebp/src/utils/huffman_utils.c | 235 - Extended/libwebp/src/utils/huffman_utils.h | 90 - .../src/utils/quant_levels_dec_utils.c | 291 - .../src/utils/quant_levels_dec_utils.h | 35 - .../libwebp/src/utils/quant_levels_utils.c | 140 - .../libwebp/src/utils/quant_levels_utils.h | 36 - Extended/libwebp/src/utils/random_utils.c | 43 - Extended/libwebp/src/utils/random_utils.h | 63 - Extended/libwebp/src/utils/rescaler_utils.c | 148 - Extended/libwebp/src/utils/rescaler_utils.h | 101 - Extended/libwebp/src/utils/thread_utils.c | 369 - Extended/libwebp/src/utils/thread_utils.h | 90 - Extended/libwebp/src/utils/utils.c | 335 - Extended/libwebp/src/utils/utils.h | 178 - Extended/libwebp/src/webp/config.h | 164 - Extended/libwebp/src/webp/config.h.in | 149 - Extended/libwebp/src/webp/decode.h | 503 - Extended/libwebp/src/webp/demux.h | 363 - Extended/libwebp/src/webp/encode.h | 546 - Extended/libwebp/src/webp/format_constants.h | 87 - Extended/libwebp/src/webp/mux.h | 530 - Extended/libwebp/src/webp/mux_types.h | 98 - Extended/libwebp/src/webp/stamp-h1 | 1 - Extended/libwebp/src/webp/types.h | 69 - Extended/libwebp/swig/README | 56 - Extended/libwebp/swig/libwebp.go | 45 - Extended/libwebp/swig/libwebp.jar | Bin 2150 -> 0 bytes Extended/libwebp/swig/libwebp.py | 235 - Extended/libwebp/swig/libwebp.swig | 438 - Extended/libwebp/swig/libwebp_gc.c | 52 - Extended/libwebp/swig/libwebp_go_wrap.c | 274 - Extended/libwebp/swig/libwebp_java_wrap.c | 1765 -- Extended/libwebp/swig/libwebp_python_wrap.c | 5628 ----- Extended/libwebp/swig/setup.py | 40 - Extended/libwebp/webp_js/index.html | 75 - Extended/libwebp/webp_js/index_wasm.html | 90 - Extended/libwebp/webp_js/test_webp_js.webp | Bin 1321542 -> 0 bytes Extended/libwebp/webp_js/test_webp_wasm.webp | Bin 1321542 -> 0 bytes .../project.pbxproj | 865 - 484 files changed, 185374 deletions(-) delete mode 100644 Extended/libwebp/AUTHORS delete mode 100644 Extended/libwebp/Android.mk delete mode 100644 Extended/libwebp/CMakeLists.txt delete mode 100644 Extended/libwebp/COPYING delete mode 100644 Extended/libwebp/ChangeLog delete mode 100644 Extended/libwebp/Makefile delete mode 100644 Extended/libwebp/Makefile.am delete mode 100644 Extended/libwebp/Makefile.in delete mode 100644 Extended/libwebp/Makefile.vc delete mode 100644 Extended/libwebp/NEWS delete mode 100644 Extended/libwebp/PATENTS delete mode 100644 Extended/libwebp/README delete mode 100644 Extended/libwebp/README.mux delete mode 100644 Extended/libwebp/README.webp_js delete mode 100644 Extended/libwebp/aclocal.m4 delete mode 100755 Extended/libwebp/ar-lib delete mode 100755 Extended/libwebp/autogen.sh delete mode 100644 Extended/libwebp/build.gradle delete mode 100644 Extended/libwebp/cmake/WebPConfig.cmake.in delete mode 100644 Extended/libwebp/cmake/config.h.in delete mode 100644 Extended/libwebp/cmake/cpu.cmake delete mode 100644 Extended/libwebp/cmake/deps.cmake delete mode 100644 Extended/libwebp/codereview.settings delete mode 100755 Extended/libwebp/compile delete mode 100755 Extended/libwebp/config.guess delete mode 100644 Extended/libwebp/config.log delete mode 100755 Extended/libwebp/config.status delete mode 100755 Extended/libwebp/config.sub delete mode 100755 Extended/libwebp/configure delete mode 100644 Extended/libwebp/configure.ac delete mode 100755 Extended/libwebp/depcomp delete mode 100644 Extended/libwebp/doc/README delete mode 100644 Extended/libwebp/doc/template.html delete mode 100644 Extended/libwebp/doc/webp-container-spec.txt delete mode 100644 Extended/libwebp/doc/webp-lossless-bitstream-spec.txt delete mode 100644 Extended/libwebp/examples/.deps/anim_diff-anim_diff.Po delete mode 100644 Extended/libwebp/examples/.deps/anim_diff-anim_util.Po delete mode 100644 Extended/libwebp/examples/.deps/anim_diff-gifdec.Po delete mode 100644 Extended/libwebp/examples/.deps/anim_dump-anim_dump.Po delete mode 100644 Extended/libwebp/examples/.deps/anim_dump-anim_util.Po delete mode 100644 Extended/libwebp/examples/.deps/anim_dump-gifdec.Po delete mode 100644 Extended/libwebp/examples/.deps/cwebp-cwebp.Po delete mode 100644 Extended/libwebp/examples/.deps/dwebp-dwebp.Po delete mode 100644 Extended/libwebp/examples/.deps/example_util.Plo delete mode 100644 Extended/libwebp/examples/.deps/gif2webp-gif2webp.Po delete mode 100644 Extended/libwebp/examples/.deps/gif2webp-gifdec.Po delete mode 100644 Extended/libwebp/examples/.deps/img2webp-img2webp.Po delete mode 100644 Extended/libwebp/examples/.deps/vwebp-vwebp.Po delete mode 100644 Extended/libwebp/examples/.deps/webpinfo-webpinfo.Po delete mode 100644 Extended/libwebp/examples/.deps/webpmux-webpmux.Po delete mode 100644 Extended/libwebp/examples/Android.mk delete mode 100644 Extended/libwebp/examples/Makefile delete mode 100644 Extended/libwebp/examples/Makefile.am delete mode 100644 Extended/libwebp/examples/Makefile.in delete mode 100644 Extended/libwebp/examples/anim_diff.c delete mode 100644 Extended/libwebp/examples/anim_dump.c delete mode 100644 Extended/libwebp/examples/anim_util.c delete mode 100644 Extended/libwebp/examples/anim_util.h delete mode 100644 Extended/libwebp/examples/cwebp.c delete mode 100644 Extended/libwebp/examples/dwebp.c delete mode 100644 Extended/libwebp/examples/example_util.c delete mode 100644 Extended/libwebp/examples/example_util.h delete mode 100644 Extended/libwebp/examples/gif2webp.c delete mode 100644 Extended/libwebp/examples/gifdec.c delete mode 100644 Extended/libwebp/examples/gifdec.h delete mode 100644 Extended/libwebp/examples/img2webp.c delete mode 100644 Extended/libwebp/examples/stopwatch.h delete mode 100644 Extended/libwebp/examples/test.webp delete mode 100644 Extended/libwebp/examples/test_ref.ppm delete mode 100644 Extended/libwebp/examples/unicode.h delete mode 100644 Extended/libwebp/examples/unicode_gif.h delete mode 100644 Extended/libwebp/examples/vwebp.c delete mode 100644 Extended/libwebp/examples/webpinfo.c delete mode 100644 Extended/libwebp/examples/webpmux.c delete mode 100644 Extended/libwebp/extras/.deps/get_disto-get_disto.Po delete mode 100644 Extended/libwebp/extras/.deps/libwebpextras_la-extras.Plo delete mode 100644 Extended/libwebp/extras/.deps/libwebpextras_la-quality_estimate.Plo delete mode 100644 Extended/libwebp/extras/.deps/vwebp_sdl-vwebp_sdl.Po delete mode 100644 Extended/libwebp/extras/.deps/vwebp_sdl-webp_to_sdl.Po delete mode 100644 Extended/libwebp/extras/.deps/webp_quality-webp_quality.Po delete mode 100644 Extended/libwebp/extras/Makefile delete mode 100644 Extended/libwebp/extras/Makefile.am delete mode 100644 Extended/libwebp/extras/Makefile.in delete mode 100644 Extended/libwebp/extras/extras.c delete mode 100644 Extended/libwebp/extras/extras.h delete mode 100644 Extended/libwebp/extras/get_disto.c delete mode 100644 Extended/libwebp/extras/quality_estimate.c delete mode 100644 Extended/libwebp/extras/vwebp_sdl.c delete mode 100644 Extended/libwebp/extras/webp_quality.c delete mode 100644 Extended/libwebp/extras/webp_to_sdl.c delete mode 100644 Extended/libwebp/extras/webp_to_sdl.h delete mode 100644 Extended/libwebp/gradle.properties delete mode 100644 Extended/libwebp/gradle/wrapper/gradle-wrapper.jar delete mode 100644 Extended/libwebp/gradle/wrapper/gradle-wrapper.properties delete mode 100755 Extended/libwebp/gradlew delete mode 100644 Extended/libwebp/gradlew.bat delete mode 100644 Extended/libwebp/imageio/.deps/imageio_util.Plo delete mode 100644 Extended/libwebp/imageio/.deps/libimagedec_la-image_dec.Plo delete mode 100644 Extended/libwebp/imageio/.deps/libimagedec_la-jpegdec.Plo delete mode 100644 Extended/libwebp/imageio/.deps/libimagedec_la-metadata.Plo delete mode 100644 Extended/libwebp/imageio/.deps/libimagedec_la-pngdec.Plo delete mode 100644 Extended/libwebp/imageio/.deps/libimagedec_la-pnmdec.Plo delete mode 100644 Extended/libwebp/imageio/.deps/libimagedec_la-tiffdec.Plo delete mode 100644 Extended/libwebp/imageio/.deps/libimagedec_la-webpdec.Plo delete mode 100644 Extended/libwebp/imageio/.deps/libimagedec_la-wicdec.Plo delete mode 100644 Extended/libwebp/imageio/.deps/libimageenc_la-image_enc.Plo delete mode 100644 Extended/libwebp/imageio/Android.mk delete mode 100644 Extended/libwebp/imageio/Makefile delete mode 100644 Extended/libwebp/imageio/Makefile.am delete mode 100644 Extended/libwebp/imageio/Makefile.in delete mode 100644 Extended/libwebp/imageio/image_dec.c delete mode 100644 Extended/libwebp/imageio/image_dec.h delete mode 100644 Extended/libwebp/imageio/image_enc.c delete mode 100644 Extended/libwebp/imageio/image_enc.h delete mode 100644 Extended/libwebp/imageio/imageio_util.c delete mode 100644 Extended/libwebp/imageio/imageio_util.h delete mode 100644 Extended/libwebp/imageio/jpegdec.c delete mode 100644 Extended/libwebp/imageio/jpegdec.h delete mode 100644 Extended/libwebp/imageio/metadata.c delete mode 100644 Extended/libwebp/imageio/metadata.h delete mode 100644 Extended/libwebp/imageio/pngdec.c delete mode 100644 Extended/libwebp/imageio/pngdec.h delete mode 100644 Extended/libwebp/imageio/pnmdec.c delete mode 100644 Extended/libwebp/imageio/pnmdec.h delete mode 100644 Extended/libwebp/imageio/tiffdec.c delete mode 100644 Extended/libwebp/imageio/tiffdec.h delete mode 100644 Extended/libwebp/imageio/webpdec.c delete mode 100644 Extended/libwebp/imageio/webpdec.h delete mode 100644 Extended/libwebp/imageio/wicdec.c delete mode 100644 Extended/libwebp/imageio/wicdec.h delete mode 100755 Extended/libwebp/install-sh delete mode 100755 Extended/libwebp/iosbuild.sh delete mode 100755 Extended/libwebp/libtool delete mode 100644 Extended/libwebp/ltmain.sh delete mode 100644 Extended/libwebp/m4/ax_pthread.m4 delete mode 100644 Extended/libwebp/m4/libtool.m4 delete mode 100644 Extended/libwebp/m4/ltoptions.m4 delete mode 100644 Extended/libwebp/m4/ltsugar.m4 delete mode 100644 Extended/libwebp/m4/ltversion.m4 delete mode 100644 Extended/libwebp/m4/lt~obsolete.m4 delete mode 100644 Extended/libwebp/makefile.unix delete mode 100644 Extended/libwebp/man/Makefile delete mode 100644 Extended/libwebp/man/Makefile.am delete mode 100644 Extended/libwebp/man/Makefile.in delete mode 100644 Extended/libwebp/man/cwebp.1 delete mode 100644 Extended/libwebp/man/dwebp.1 delete mode 100644 Extended/libwebp/man/gif2webp.1 delete mode 100644 Extended/libwebp/man/img2webp.1 delete mode 100644 Extended/libwebp/man/vwebp.1 delete mode 100644 Extended/libwebp/man/webpinfo.1 delete mode 100644 Extended/libwebp/man/webpmux.1 delete mode 100755 Extended/libwebp/missing delete mode 100644 Extended/libwebp/src/Makefile delete mode 100644 Extended/libwebp/src/Makefile.am delete mode 100644 Extended/libwebp/src/Makefile.in delete mode 100644 Extended/libwebp/src/dec/.deps/libwebpdecode_la-alpha_dec.Plo delete mode 100644 Extended/libwebp/src/dec/.deps/libwebpdecode_la-buffer_dec.Plo delete mode 100644 Extended/libwebp/src/dec/.deps/libwebpdecode_la-frame_dec.Plo delete mode 100644 Extended/libwebp/src/dec/.deps/libwebpdecode_la-idec_dec.Plo delete mode 100644 Extended/libwebp/src/dec/.deps/libwebpdecode_la-io_dec.Plo delete mode 100644 Extended/libwebp/src/dec/.deps/libwebpdecode_la-quant_dec.Plo delete mode 100644 Extended/libwebp/src/dec/.deps/libwebpdecode_la-tree_dec.Plo delete mode 100644 Extended/libwebp/src/dec/.deps/libwebpdecode_la-vp8_dec.Plo delete mode 100644 Extended/libwebp/src/dec/.deps/libwebpdecode_la-vp8l_dec.Plo delete mode 100644 Extended/libwebp/src/dec/.deps/libwebpdecode_la-webp_dec.Plo delete mode 100644 Extended/libwebp/src/dec/Makefile delete mode 100644 Extended/libwebp/src/dec/Makefile.am delete mode 100644 Extended/libwebp/src/dec/Makefile.in delete mode 100644 Extended/libwebp/src/dec/alpha_dec.c delete mode 100644 Extended/libwebp/src/dec/alphai_dec.h delete mode 100644 Extended/libwebp/src/dec/buffer_dec.c delete mode 100644 Extended/libwebp/src/dec/common_dec.h delete mode 100644 Extended/libwebp/src/dec/frame_dec.c delete mode 100644 Extended/libwebp/src/dec/idec_dec.c delete mode 100644 Extended/libwebp/src/dec/io_dec.c delete mode 100644 Extended/libwebp/src/dec/quant_dec.c delete mode 100644 Extended/libwebp/src/dec/tree_dec.c delete mode 100644 Extended/libwebp/src/dec/vp8_dec.c delete mode 100644 Extended/libwebp/src/dec/vp8_dec.h delete mode 100644 Extended/libwebp/src/dec/vp8i_dec.h delete mode 100644 Extended/libwebp/src/dec/vp8l_dec.c delete mode 100644 Extended/libwebp/src/dec/vp8li_dec.h delete mode 100644 Extended/libwebp/src/dec/webp_dec.c delete mode 100644 Extended/libwebp/src/dec/webpi_dec.h delete mode 100644 Extended/libwebp/src/demux/.deps/anim_decode.Plo delete mode 100644 Extended/libwebp/src/demux/.deps/demux.Plo delete mode 100644 Extended/libwebp/src/demux/Makefile delete mode 100644 Extended/libwebp/src/demux/Makefile.am delete mode 100644 Extended/libwebp/src/demux/Makefile.in delete mode 100644 Extended/libwebp/src/demux/anim_decode.c delete mode 100644 Extended/libwebp/src/demux/demux.c delete mode 100644 Extended/libwebp/src/demux/libwebpdemux.pc delete mode 100644 Extended/libwebp/src/demux/libwebpdemux.pc.in delete mode 100644 Extended/libwebp/src/demux/libwebpdemux.rc delete mode 100644 Extended/libwebp/src/dsp/.deps/libwebpdsp_la-alpha_processing.Plo delete mode 100644 Extended/libwebp/src/dsp/.deps/libwebpdsp_la-cost.Plo delete mode 100644 Extended/libwebp/src/dsp/.deps/libwebpdsp_la-cpu.Plo delete mode 100644 Extended/libwebp/src/dsp/.deps/libwebpdsp_la-dec.Plo delete mode 100644 Extended/libwebp/src/dsp/.deps/libwebpdsp_la-dec_clip_tables.Plo delete mode 100644 Extended/libwebp/src/dsp/.deps/libwebpdsp_la-enc.Plo delete mode 100644 Extended/libwebp/src/dsp/.deps/libwebpdsp_la-filters.Plo delete mode 100644 Extended/libwebp/src/dsp/.deps/libwebpdsp_la-lossless.Plo delete mode 100644 Extended/libwebp/src/dsp/.deps/libwebpdsp_la-lossless_enc.Plo delete mode 100644 Extended/libwebp/src/dsp/.deps/libwebpdsp_la-rescaler.Plo delete mode 100644 Extended/libwebp/src/dsp/.deps/libwebpdsp_la-ssim.Plo delete mode 100644 Extended/libwebp/src/dsp/.deps/libwebpdsp_la-upsampling.Plo delete mode 100644 Extended/libwebp/src/dsp/.deps/libwebpdsp_la-yuv.Plo delete mode 100644 Extended/libwebp/src/dsp/.deps/libwebpdsp_mips32_la-cost_mips32.Plo delete mode 100644 Extended/libwebp/src/dsp/.deps/libwebpdsp_mips32_la-enc_mips32.Plo delete mode 100644 Extended/libwebp/src/dsp/.deps/libwebpdsp_mips32_la-lossless_enc_mips32.Plo delete mode 100644 Extended/libwebp/src/dsp/.deps/libwebpdsp_mips_dsp_r2_la-cost_mips_dsp_r2.Plo delete mode 100644 Extended/libwebp/src/dsp/.deps/libwebpdsp_mips_dsp_r2_la-enc_mips_dsp_r2.Plo delete mode 100644 Extended/libwebp/src/dsp/.deps/libwebpdsp_mips_dsp_r2_la-lossless_enc_mips_dsp_r2.Plo delete mode 100644 Extended/libwebp/src/dsp/.deps/libwebpdsp_msa_la-enc_msa.Plo delete mode 100644 Extended/libwebp/src/dsp/.deps/libwebpdsp_msa_la-lossless_enc_msa.Plo delete mode 100644 Extended/libwebp/src/dsp/.deps/libwebpdsp_neon_la-cost_neon.Plo delete mode 100644 Extended/libwebp/src/dsp/.deps/libwebpdsp_neon_la-enc_neon.Plo delete mode 100644 Extended/libwebp/src/dsp/.deps/libwebpdsp_neon_la-lossless_enc_neon.Plo delete mode 100644 Extended/libwebp/src/dsp/.deps/libwebpdsp_sse2_la-cost_sse2.Plo delete mode 100644 Extended/libwebp/src/dsp/.deps/libwebpdsp_sse2_la-enc_sse2.Plo delete mode 100644 Extended/libwebp/src/dsp/.deps/libwebpdsp_sse2_la-lossless_enc_sse2.Plo delete mode 100644 Extended/libwebp/src/dsp/.deps/libwebpdsp_sse2_la-ssim_sse2.Plo delete mode 100644 Extended/libwebp/src/dsp/.deps/libwebpdsp_sse41_la-enc_sse41.Plo delete mode 100644 Extended/libwebp/src/dsp/.deps/libwebpdsp_sse41_la-lossless_enc_sse41.Plo delete mode 100644 Extended/libwebp/src/dsp/.deps/libwebpdspdecode_la-alpha_processing.Plo delete mode 100644 Extended/libwebp/src/dsp/.deps/libwebpdspdecode_la-cpu.Plo delete mode 100644 Extended/libwebp/src/dsp/.deps/libwebpdspdecode_la-dec.Plo delete mode 100644 Extended/libwebp/src/dsp/.deps/libwebpdspdecode_la-dec_clip_tables.Plo delete mode 100644 Extended/libwebp/src/dsp/.deps/libwebpdspdecode_la-filters.Plo delete mode 100644 Extended/libwebp/src/dsp/.deps/libwebpdspdecode_la-lossless.Plo delete mode 100644 Extended/libwebp/src/dsp/.deps/libwebpdspdecode_la-rescaler.Plo delete mode 100644 Extended/libwebp/src/dsp/.deps/libwebpdspdecode_la-upsampling.Plo delete mode 100644 Extended/libwebp/src/dsp/.deps/libwebpdspdecode_la-yuv.Plo delete mode 100644 Extended/libwebp/src/dsp/.deps/libwebpdspdecode_mips32_la-dec_mips32.Plo delete mode 100644 Extended/libwebp/src/dsp/.deps/libwebpdspdecode_mips32_la-rescaler_mips32.Plo delete mode 100644 Extended/libwebp/src/dsp/.deps/libwebpdspdecode_mips32_la-yuv_mips32.Plo delete mode 100644 Extended/libwebp/src/dsp/.deps/libwebpdspdecode_mips_dsp_r2_la-alpha_processing_mips_dsp_r2.Plo delete mode 100644 Extended/libwebp/src/dsp/.deps/libwebpdspdecode_mips_dsp_r2_la-dec_mips_dsp_r2.Plo delete mode 100644 Extended/libwebp/src/dsp/.deps/libwebpdspdecode_mips_dsp_r2_la-filters_mips_dsp_r2.Plo delete mode 100644 Extended/libwebp/src/dsp/.deps/libwebpdspdecode_mips_dsp_r2_la-lossless_mips_dsp_r2.Plo delete mode 100644 Extended/libwebp/src/dsp/.deps/libwebpdspdecode_mips_dsp_r2_la-rescaler_mips_dsp_r2.Plo delete mode 100644 Extended/libwebp/src/dsp/.deps/libwebpdspdecode_mips_dsp_r2_la-upsampling_mips_dsp_r2.Plo delete mode 100644 Extended/libwebp/src/dsp/.deps/libwebpdspdecode_mips_dsp_r2_la-yuv_mips_dsp_r2.Plo delete mode 100644 Extended/libwebp/src/dsp/.deps/libwebpdspdecode_msa_la-dec_msa.Plo delete mode 100644 Extended/libwebp/src/dsp/.deps/libwebpdspdecode_msa_la-filters_msa.Plo delete mode 100644 Extended/libwebp/src/dsp/.deps/libwebpdspdecode_msa_la-lossless_msa.Plo delete mode 100644 Extended/libwebp/src/dsp/.deps/libwebpdspdecode_msa_la-rescaler_msa.Plo delete mode 100644 Extended/libwebp/src/dsp/.deps/libwebpdspdecode_msa_la-upsampling_msa.Plo delete mode 100644 Extended/libwebp/src/dsp/.deps/libwebpdspdecode_neon_la-alpha_processing_neon.Plo delete mode 100644 Extended/libwebp/src/dsp/.deps/libwebpdspdecode_neon_la-dec_neon.Plo delete mode 100644 Extended/libwebp/src/dsp/.deps/libwebpdspdecode_neon_la-filters_neon.Plo delete mode 100644 Extended/libwebp/src/dsp/.deps/libwebpdspdecode_neon_la-lossless_neon.Plo delete mode 100644 Extended/libwebp/src/dsp/.deps/libwebpdspdecode_neon_la-rescaler_neon.Plo delete mode 100644 Extended/libwebp/src/dsp/.deps/libwebpdspdecode_neon_la-upsampling_neon.Plo delete mode 100644 Extended/libwebp/src/dsp/.deps/libwebpdspdecode_neon_la-yuv_neon.Plo delete mode 100644 Extended/libwebp/src/dsp/.deps/libwebpdspdecode_sse2_la-alpha_processing_sse2.Plo delete mode 100644 Extended/libwebp/src/dsp/.deps/libwebpdspdecode_sse2_la-dec_sse2.Plo delete mode 100644 Extended/libwebp/src/dsp/.deps/libwebpdspdecode_sse2_la-filters_sse2.Plo delete mode 100644 Extended/libwebp/src/dsp/.deps/libwebpdspdecode_sse2_la-lossless_sse2.Plo delete mode 100644 Extended/libwebp/src/dsp/.deps/libwebpdspdecode_sse2_la-rescaler_sse2.Plo delete mode 100644 Extended/libwebp/src/dsp/.deps/libwebpdspdecode_sse2_la-upsampling_sse2.Plo delete mode 100644 Extended/libwebp/src/dsp/.deps/libwebpdspdecode_sse2_la-yuv_sse2.Plo delete mode 100644 Extended/libwebp/src/dsp/.deps/libwebpdspdecode_sse41_la-alpha_processing_sse41.Plo delete mode 100644 Extended/libwebp/src/dsp/.deps/libwebpdspdecode_sse41_la-dec_sse41.Plo delete mode 100644 Extended/libwebp/src/dsp/.deps/libwebpdspdecode_sse41_la-upsampling_sse41.Plo delete mode 100644 Extended/libwebp/src/dsp/.deps/libwebpdspdecode_sse41_la-yuv_sse41.Plo delete mode 100644 Extended/libwebp/src/dsp/Makefile delete mode 100644 Extended/libwebp/src/dsp/Makefile.am delete mode 100644 Extended/libwebp/src/dsp/Makefile.in delete mode 100644 Extended/libwebp/src/dsp/alpha_processing.c delete mode 100644 Extended/libwebp/src/dsp/alpha_processing_mips_dsp_r2.c delete mode 100644 Extended/libwebp/src/dsp/alpha_processing_neon.c delete mode 100644 Extended/libwebp/src/dsp/alpha_processing_sse2.c delete mode 100644 Extended/libwebp/src/dsp/alpha_processing_sse41.c delete mode 100644 Extended/libwebp/src/dsp/common_sse2.h delete mode 100644 Extended/libwebp/src/dsp/common_sse41.h delete mode 100644 Extended/libwebp/src/dsp/cost.c delete mode 100644 Extended/libwebp/src/dsp/cost_mips32.c delete mode 100644 Extended/libwebp/src/dsp/cost_mips_dsp_r2.c delete mode 100644 Extended/libwebp/src/dsp/cost_neon.c delete mode 100644 Extended/libwebp/src/dsp/cost_sse2.c delete mode 100644 Extended/libwebp/src/dsp/cpu.c delete mode 100644 Extended/libwebp/src/dsp/dec.c delete mode 100644 Extended/libwebp/src/dsp/dec_clip_tables.c delete mode 100644 Extended/libwebp/src/dsp/dec_mips32.c delete mode 100644 Extended/libwebp/src/dsp/dec_mips_dsp_r2.c delete mode 100644 Extended/libwebp/src/dsp/dec_msa.c delete mode 100644 Extended/libwebp/src/dsp/dec_neon.c delete mode 100644 Extended/libwebp/src/dsp/dec_sse2.c delete mode 100644 Extended/libwebp/src/dsp/dec_sse41.c delete mode 100644 Extended/libwebp/src/dsp/dsp.h delete mode 100644 Extended/libwebp/src/dsp/enc.c delete mode 100644 Extended/libwebp/src/dsp/enc_mips32.c delete mode 100644 Extended/libwebp/src/dsp/enc_mips_dsp_r2.c delete mode 100644 Extended/libwebp/src/dsp/enc_msa.c delete mode 100644 Extended/libwebp/src/dsp/enc_neon.c delete mode 100644 Extended/libwebp/src/dsp/enc_sse2.c delete mode 100644 Extended/libwebp/src/dsp/enc_sse41.c delete mode 100644 Extended/libwebp/src/dsp/filters.c delete mode 100644 Extended/libwebp/src/dsp/filters_mips_dsp_r2.c delete mode 100644 Extended/libwebp/src/dsp/filters_msa.c delete mode 100644 Extended/libwebp/src/dsp/filters_neon.c delete mode 100644 Extended/libwebp/src/dsp/filters_sse2.c delete mode 100644 Extended/libwebp/src/dsp/lossless.c delete mode 100644 Extended/libwebp/src/dsp/lossless.h delete mode 100644 Extended/libwebp/src/dsp/lossless_common.h delete mode 100644 Extended/libwebp/src/dsp/lossless_enc.c delete mode 100644 Extended/libwebp/src/dsp/lossless_enc_mips32.c delete mode 100644 Extended/libwebp/src/dsp/lossless_enc_mips_dsp_r2.c delete mode 100644 Extended/libwebp/src/dsp/lossless_enc_msa.c delete mode 100644 Extended/libwebp/src/dsp/lossless_enc_neon.c delete mode 100644 Extended/libwebp/src/dsp/lossless_enc_sse2.c delete mode 100644 Extended/libwebp/src/dsp/lossless_enc_sse41.c delete mode 100644 Extended/libwebp/src/dsp/lossless_mips_dsp_r2.c delete mode 100644 Extended/libwebp/src/dsp/lossless_msa.c delete mode 100644 Extended/libwebp/src/dsp/lossless_neon.c delete mode 100644 Extended/libwebp/src/dsp/lossless_sse2.c delete mode 100644 Extended/libwebp/src/dsp/mips_macro.h delete mode 100644 Extended/libwebp/src/dsp/msa_macro.h delete mode 100644 Extended/libwebp/src/dsp/neon.h delete mode 100644 Extended/libwebp/src/dsp/quant.h delete mode 100644 Extended/libwebp/src/dsp/rescaler.c delete mode 100644 Extended/libwebp/src/dsp/rescaler_mips32.c delete mode 100644 Extended/libwebp/src/dsp/rescaler_mips_dsp_r2.c delete mode 100644 Extended/libwebp/src/dsp/rescaler_msa.c delete mode 100644 Extended/libwebp/src/dsp/rescaler_neon.c delete mode 100644 Extended/libwebp/src/dsp/rescaler_sse2.c delete mode 100644 Extended/libwebp/src/dsp/ssim.c delete mode 100644 Extended/libwebp/src/dsp/ssim_sse2.c delete mode 100644 Extended/libwebp/src/dsp/upsampling.c delete mode 100644 Extended/libwebp/src/dsp/upsampling_mips_dsp_r2.c delete mode 100644 Extended/libwebp/src/dsp/upsampling_msa.c delete mode 100644 Extended/libwebp/src/dsp/upsampling_neon.c delete mode 100644 Extended/libwebp/src/dsp/upsampling_sse2.c delete mode 100644 Extended/libwebp/src/dsp/upsampling_sse41.c delete mode 100644 Extended/libwebp/src/dsp/yuv.c delete mode 100644 Extended/libwebp/src/dsp/yuv.h delete mode 100644 Extended/libwebp/src/dsp/yuv_mips32.c delete mode 100644 Extended/libwebp/src/dsp/yuv_mips_dsp_r2.c delete mode 100644 Extended/libwebp/src/dsp/yuv_neon.c delete mode 100644 Extended/libwebp/src/dsp/yuv_sse2.c delete mode 100644 Extended/libwebp/src/dsp/yuv_sse41.c delete mode 100644 Extended/libwebp/src/enc/.deps/libwebpencode_la-alpha_enc.Plo delete mode 100644 Extended/libwebp/src/enc/.deps/libwebpencode_la-analysis_enc.Plo delete mode 100644 Extended/libwebp/src/enc/.deps/libwebpencode_la-backward_references_cost_enc.Plo delete mode 100644 Extended/libwebp/src/enc/.deps/libwebpencode_la-backward_references_enc.Plo delete mode 100644 Extended/libwebp/src/enc/.deps/libwebpencode_la-config_enc.Plo delete mode 100644 Extended/libwebp/src/enc/.deps/libwebpencode_la-cost_enc.Plo delete mode 100644 Extended/libwebp/src/enc/.deps/libwebpencode_la-filter_enc.Plo delete mode 100644 Extended/libwebp/src/enc/.deps/libwebpencode_la-frame_enc.Plo delete mode 100644 Extended/libwebp/src/enc/.deps/libwebpencode_la-histogram_enc.Plo delete mode 100644 Extended/libwebp/src/enc/.deps/libwebpencode_la-iterator_enc.Plo delete mode 100644 Extended/libwebp/src/enc/.deps/libwebpencode_la-near_lossless_enc.Plo delete mode 100644 Extended/libwebp/src/enc/.deps/libwebpencode_la-picture_csp_enc.Plo delete mode 100644 Extended/libwebp/src/enc/.deps/libwebpencode_la-picture_enc.Plo delete mode 100644 Extended/libwebp/src/enc/.deps/libwebpencode_la-picture_psnr_enc.Plo delete mode 100644 Extended/libwebp/src/enc/.deps/libwebpencode_la-picture_rescale_enc.Plo delete mode 100644 Extended/libwebp/src/enc/.deps/libwebpencode_la-picture_tools_enc.Plo delete mode 100644 Extended/libwebp/src/enc/.deps/libwebpencode_la-predictor_enc.Plo delete mode 100644 Extended/libwebp/src/enc/.deps/libwebpencode_la-quant_enc.Plo delete mode 100644 Extended/libwebp/src/enc/.deps/libwebpencode_la-syntax_enc.Plo delete mode 100644 Extended/libwebp/src/enc/.deps/libwebpencode_la-token_enc.Plo delete mode 100644 Extended/libwebp/src/enc/.deps/libwebpencode_la-tree_enc.Plo delete mode 100644 Extended/libwebp/src/enc/.deps/libwebpencode_la-vp8l_enc.Plo delete mode 100644 Extended/libwebp/src/enc/.deps/libwebpencode_la-webp_enc.Plo delete mode 100644 Extended/libwebp/src/enc/Makefile delete mode 100644 Extended/libwebp/src/enc/Makefile.am delete mode 100644 Extended/libwebp/src/enc/Makefile.in delete mode 100644 Extended/libwebp/src/enc/alpha_enc.c delete mode 100644 Extended/libwebp/src/enc/analysis_enc.c delete mode 100644 Extended/libwebp/src/enc/backward_references_cost_enc.c delete mode 100644 Extended/libwebp/src/enc/backward_references_enc.c delete mode 100644 Extended/libwebp/src/enc/backward_references_enc.h delete mode 100644 Extended/libwebp/src/enc/config_enc.c delete mode 100644 Extended/libwebp/src/enc/cost_enc.c delete mode 100644 Extended/libwebp/src/enc/cost_enc.h delete mode 100644 Extended/libwebp/src/enc/filter_enc.c delete mode 100644 Extended/libwebp/src/enc/frame_enc.c delete mode 100644 Extended/libwebp/src/enc/histogram_enc.c delete mode 100644 Extended/libwebp/src/enc/histogram_enc.h delete mode 100644 Extended/libwebp/src/enc/iterator_enc.c delete mode 100644 Extended/libwebp/src/enc/near_lossless_enc.c delete mode 100644 Extended/libwebp/src/enc/picture_csp_enc.c delete mode 100644 Extended/libwebp/src/enc/picture_enc.c delete mode 100644 Extended/libwebp/src/enc/picture_psnr_enc.c delete mode 100644 Extended/libwebp/src/enc/picture_rescale_enc.c delete mode 100644 Extended/libwebp/src/enc/picture_tools_enc.c delete mode 100644 Extended/libwebp/src/enc/predictor_enc.c delete mode 100644 Extended/libwebp/src/enc/quant_enc.c delete mode 100644 Extended/libwebp/src/enc/syntax_enc.c delete mode 100644 Extended/libwebp/src/enc/token_enc.c delete mode 100644 Extended/libwebp/src/enc/tree_enc.c delete mode 100644 Extended/libwebp/src/enc/vp8i_enc.h delete mode 100644 Extended/libwebp/src/enc/vp8l_enc.c delete mode 100644 Extended/libwebp/src/enc/vp8li_enc.h delete mode 100644 Extended/libwebp/src/enc/webp_enc.c delete mode 100644 Extended/libwebp/src/libwebp.pc delete mode 100644 Extended/libwebp/src/libwebp.pc.in delete mode 100644 Extended/libwebp/src/libwebp.rc delete mode 100644 Extended/libwebp/src/libwebpdecoder.pc delete mode 100644 Extended/libwebp/src/libwebpdecoder.pc.in delete mode 100644 Extended/libwebp/src/libwebpdecoder.rc delete mode 100644 Extended/libwebp/src/mux/.deps/anim_encode.Plo delete mode 100644 Extended/libwebp/src/mux/.deps/muxedit.Plo delete mode 100644 Extended/libwebp/src/mux/.deps/muxinternal.Plo delete mode 100644 Extended/libwebp/src/mux/.deps/muxread.Plo delete mode 100644 Extended/libwebp/src/mux/Makefile delete mode 100644 Extended/libwebp/src/mux/Makefile.am delete mode 100644 Extended/libwebp/src/mux/Makefile.in delete mode 100644 Extended/libwebp/src/mux/anim_encode.c delete mode 100644 Extended/libwebp/src/mux/animi.h delete mode 100644 Extended/libwebp/src/mux/libwebpmux.pc delete mode 100644 Extended/libwebp/src/mux/libwebpmux.pc.in delete mode 100644 Extended/libwebp/src/mux/libwebpmux.rc delete mode 100644 Extended/libwebp/src/mux/muxedit.c delete mode 100644 Extended/libwebp/src/mux/muxi.h delete mode 100644 Extended/libwebp/src/mux/muxinternal.c delete mode 100644 Extended/libwebp/src/mux/muxread.c delete mode 100644 Extended/libwebp/src/utils/.deps/bit_reader_utils.Plo delete mode 100644 Extended/libwebp/src/utils/.deps/bit_writer_utils.Plo delete mode 100644 Extended/libwebp/src/utils/.deps/color_cache_utils.Plo delete mode 100644 Extended/libwebp/src/utils/.deps/filters_utils.Plo delete mode 100644 Extended/libwebp/src/utils/.deps/huffman_encode_utils.Plo delete mode 100644 Extended/libwebp/src/utils/.deps/huffman_utils.Plo delete mode 100644 Extended/libwebp/src/utils/.deps/quant_levels_dec_utils.Plo delete mode 100644 Extended/libwebp/src/utils/.deps/quant_levels_utils.Plo delete mode 100644 Extended/libwebp/src/utils/.deps/random_utils.Plo delete mode 100644 Extended/libwebp/src/utils/.deps/rescaler_utils.Plo delete mode 100644 Extended/libwebp/src/utils/.deps/thread_utils.Plo delete mode 100644 Extended/libwebp/src/utils/.deps/utils.Plo delete mode 100644 Extended/libwebp/src/utils/Makefile delete mode 100644 Extended/libwebp/src/utils/Makefile.am delete mode 100644 Extended/libwebp/src/utils/Makefile.in delete mode 100644 Extended/libwebp/src/utils/bit_reader_inl_utils.h delete mode 100644 Extended/libwebp/src/utils/bit_reader_utils.c delete mode 100644 Extended/libwebp/src/utils/bit_reader_utils.h delete mode 100644 Extended/libwebp/src/utils/bit_writer_utils.c delete mode 100644 Extended/libwebp/src/utils/bit_writer_utils.h delete mode 100644 Extended/libwebp/src/utils/color_cache_utils.c delete mode 100644 Extended/libwebp/src/utils/color_cache_utils.h delete mode 100644 Extended/libwebp/src/utils/endian_inl_utils.h delete mode 100644 Extended/libwebp/src/utils/filters_utils.c delete mode 100644 Extended/libwebp/src/utils/filters_utils.h delete mode 100644 Extended/libwebp/src/utils/huffman_encode_utils.c delete mode 100644 Extended/libwebp/src/utils/huffman_encode_utils.h delete mode 100644 Extended/libwebp/src/utils/huffman_utils.c delete mode 100644 Extended/libwebp/src/utils/huffman_utils.h delete mode 100644 Extended/libwebp/src/utils/quant_levels_dec_utils.c delete mode 100644 Extended/libwebp/src/utils/quant_levels_dec_utils.h delete mode 100644 Extended/libwebp/src/utils/quant_levels_utils.c delete mode 100644 Extended/libwebp/src/utils/quant_levels_utils.h delete mode 100644 Extended/libwebp/src/utils/random_utils.c delete mode 100644 Extended/libwebp/src/utils/random_utils.h delete mode 100644 Extended/libwebp/src/utils/rescaler_utils.c delete mode 100644 Extended/libwebp/src/utils/rescaler_utils.h delete mode 100644 Extended/libwebp/src/utils/thread_utils.c delete mode 100644 Extended/libwebp/src/utils/thread_utils.h delete mode 100644 Extended/libwebp/src/utils/utils.c delete mode 100644 Extended/libwebp/src/utils/utils.h delete mode 100644 Extended/libwebp/src/webp/config.h delete mode 100644 Extended/libwebp/src/webp/config.h.in delete mode 100644 Extended/libwebp/src/webp/decode.h delete mode 100644 Extended/libwebp/src/webp/demux.h delete mode 100644 Extended/libwebp/src/webp/encode.h delete mode 100644 Extended/libwebp/src/webp/format_constants.h delete mode 100644 Extended/libwebp/src/webp/mux.h delete mode 100644 Extended/libwebp/src/webp/mux_types.h delete mode 100644 Extended/libwebp/src/webp/stamp-h1 delete mode 100644 Extended/libwebp/src/webp/types.h delete mode 100644 Extended/libwebp/swig/README delete mode 100644 Extended/libwebp/swig/libwebp.go delete mode 100644 Extended/libwebp/swig/libwebp.jar delete mode 100644 Extended/libwebp/swig/libwebp.py delete mode 100644 Extended/libwebp/swig/libwebp.swig delete mode 100644 Extended/libwebp/swig/libwebp_gc.c delete mode 100644 Extended/libwebp/swig/libwebp_go_wrap.c delete mode 100644 Extended/libwebp/swig/libwebp_java_wrap.c delete mode 100644 Extended/libwebp/swig/libwebp_python_wrap.c delete mode 100644 Extended/libwebp/swig/setup.py delete mode 100644 Extended/libwebp/webp_js/index.html delete mode 100644 Extended/libwebp/webp_js/index_wasm.html delete mode 100644 Extended/libwebp/webp_js/test_webp_js.webp delete mode 100644 Extended/libwebp/webp_js/test_webp_wasm.webp diff --git a/Extended/libwebp/AUTHORS b/Extended/libwebp/AUTHORS deleted file mode 100644 index 32ff2fb..0000000 --- a/Extended/libwebp/AUTHORS +++ /dev/null @@ -1,45 +0,0 @@ -Contributors: -- Aidan O'Loan (aidanol at gmail dot com) -- Alan Browning (browning at google dot com) -- Charles Munger (clm at google dot com) -- Cheng Yi (cyi at google dot com) -- Christian Duvivier (cduvivier at google dot com) -- Djordje Pesut (djordje dot pesut at imgtec dot com) -- Hui Su (huisu at google dot com) -- James Zern (jzern at google dot com) -- Jan Engelhardt (jengelh at medozas dot de) -- Jehan (jehan at girinstud dot io) -- Johann Koenig (johann dot koenig at duck dot com) -- Jovan Zelincevic (jovan dot zelincevic at imgtec dot com) -- Jyrki Alakuijala (jyrki at google dot com) -- Konstantin Ivlev (tomskside at gmail dot com) -- Lode Vandevenne (lode at google dot com) -- Lou Quillio (louquillio at google dot com) -- Mans Rullgard (mans at mansr dot com) -- Marcin Kowalczyk (qrczak at google dot com) -- Martin Olsson (mnemo at minimum dot se) -- Mikołaj Zalewski (mikolajz at google dot com) -- Mislav Bradac (mislavm at google dot com) -- Nico Weber (thakis at chromium dot org) -- Noel Chromium (noel at chromium dot org) -- Oliver Wolff (oliver dot wolff at qt dot io) -- Owen Rodley (orodley at google dot com) -- Parag Salasakar (img dot mips1 at gmail dot com) -- Pascal Massimino (pascal dot massimino at gmail dot com) -- Paweł Hajdan, Jr (phajdan dot jr at chromium dot org) -- Pierre Joye (pierre dot php at gmail dot com) -- Sam Clegg (sbc at chromium dot org) -- Scott Hancher (seh at google dot com) -- Scott LaVarnway (slavarnway at google dot com) -- Scott Talbot (s at chikachow dot org) -- Slobodan Prijic (slobodan dot prijic at imgtec dot com) -- Somnath Banerjee (somnath dot banerjee at gmail dot com) -- Sriraman Tallam (tmsriram at google dot com) -- Tamar Levy (tamar dot levy at intel dot com) -- Timothy Gu (timothygu99 at gmail dot com) -- Urvang Joshi (urvang at google dot com) -- Vikas Arora (vikasa at google dot com) -- Vincent Rabaud (vrabaud at google dot com) -- Vlad Tsyrklevich (vtsyrklevich at chromium dot org) -- Yang Zhang (yang dot zhang at arm dot com) -- Yannis Guyon (yguyon at google dot com) diff --git a/Extended/libwebp/Android.mk b/Extended/libwebp/Android.mk deleted file mode 100644 index 8f0cb75..0000000 --- a/Extended/libwebp/Android.mk +++ /dev/null @@ -1,280 +0,0 @@ -LOCAL_PATH := $(call my-dir) - -WEBP_CFLAGS := -Wall -DANDROID -DHAVE_MALLOC_H -DHAVE_PTHREAD -DWEBP_USE_THREAD -WEBP_CFLAGS += -fvisibility=hidden - -ifeq ($(APP_OPTIM),release) - WEBP_CFLAGS += -finline-functions -ffast-math \ - -ffunction-sections -fdata-sections - ifeq ($(findstring clang,$(NDK_TOOLCHAIN_VERSION)),) - WEBP_CFLAGS += -frename-registers -s - endif -endif - -# mips32 fails to build with clang from r14b -# https://bugs.chromium.org/p/webp/issues/detail?id=343 -ifeq ($(findstring clang,$(NDK_TOOLCHAIN_VERSION)),clang) - ifeq ($(TARGET_ARCH),mips) - clang_version := $(shell $(TARGET_CC) --version) - ifneq ($(findstring clang version 3,$(clang_version)),) - WEBP_CFLAGS += -no-integrated-as - endif - endif -endif - -ifneq ($(findstring armeabi-v7a, $(TARGET_ARCH_ABI)),) - # Setting LOCAL_ARM_NEON will enable -mfpu=neon which may cause illegal - # instructions to be generated for armv7a code. Instead target the neon code - # specifically. - NEON := c.neon - USE_CPUFEATURES := yes - WEBP_CFLAGS += -DHAVE_CPU_FEATURES_H -else - NEON := c -endif - -dec_srcs := \ - src/dec/alpha_dec.c \ - src/dec/buffer_dec.c \ - src/dec/frame_dec.c \ - src/dec/idec_dec.c \ - src/dec/io_dec.c \ - src/dec/quant_dec.c \ - src/dec/tree_dec.c \ - src/dec/vp8_dec.c \ - src/dec/vp8l_dec.c \ - src/dec/webp_dec.c \ - -demux_srcs := \ - src/demux/anim_decode.c \ - src/demux/demux.c \ - -dsp_dec_srcs := \ - src/dsp/alpha_processing.c \ - src/dsp/alpha_processing_mips_dsp_r2.c \ - src/dsp/alpha_processing_neon.$(NEON) \ - src/dsp/alpha_processing_sse2.c \ - src/dsp/alpha_processing_sse41.c \ - src/dsp/cpu.c \ - src/dsp/dec.c \ - src/dsp/dec_clip_tables.c \ - src/dsp/dec_mips32.c \ - src/dsp/dec_mips_dsp_r2.c \ - src/dsp/dec_msa.c \ - src/dsp/dec_neon.$(NEON) \ - src/dsp/dec_sse2.c \ - src/dsp/dec_sse41.c \ - src/dsp/filters.c \ - src/dsp/filters_mips_dsp_r2.c \ - src/dsp/filters_msa.c \ - src/dsp/filters_neon.$(NEON) \ - src/dsp/filters_sse2.c \ - src/dsp/lossless.c \ - src/dsp/lossless_mips_dsp_r2.c \ - src/dsp/lossless_msa.c \ - src/dsp/lossless_neon.$(NEON) \ - src/dsp/lossless_sse2.c \ - src/dsp/rescaler.c \ - src/dsp/rescaler_mips32.c \ - src/dsp/rescaler_mips_dsp_r2.c \ - src/dsp/rescaler_msa.c \ - src/dsp/rescaler_neon.$(NEON) \ - src/dsp/rescaler_sse2.c \ - src/dsp/upsampling.c \ - src/dsp/upsampling_mips_dsp_r2.c \ - src/dsp/upsampling_msa.c \ - src/dsp/upsampling_neon.$(NEON) \ - src/dsp/upsampling_sse2.c \ - src/dsp/upsampling_sse41.c \ - src/dsp/yuv.c \ - src/dsp/yuv_mips32.c \ - src/dsp/yuv_mips_dsp_r2.c \ - src/dsp/yuv_neon.$(NEON) \ - src/dsp/yuv_sse2.c \ - src/dsp/yuv_sse41.c \ - -dsp_enc_srcs := \ - src/dsp/cost.c \ - src/dsp/cost_mips32.c \ - src/dsp/cost_mips_dsp_r2.c \ - src/dsp/cost_neon.$(NEON) \ - src/dsp/cost_sse2.c \ - src/dsp/enc.c \ - src/dsp/enc_mips32.c \ - src/dsp/enc_mips_dsp_r2.c \ - src/dsp/enc_msa.c \ - src/dsp/enc_neon.$(NEON) \ - src/dsp/enc_sse2.c \ - src/dsp/enc_sse41.c \ - src/dsp/lossless_enc.c \ - src/dsp/lossless_enc_mips32.c \ - src/dsp/lossless_enc_mips_dsp_r2.c \ - src/dsp/lossless_enc_msa.c \ - src/dsp/lossless_enc_neon.$(NEON) \ - src/dsp/lossless_enc_sse2.c \ - src/dsp/lossless_enc_sse41.c \ - src/dsp/ssim.c \ - src/dsp/ssim_sse2.c \ - -enc_srcs := \ - src/enc/alpha_enc.c \ - src/enc/analysis_enc.c \ - src/enc/backward_references_cost_enc.c \ - src/enc/backward_references_enc.c \ - src/enc/config_enc.c \ - src/enc/cost_enc.c \ - src/enc/filter_enc.c \ - src/enc/frame_enc.c \ - src/enc/histogram_enc.c \ - src/enc/iterator_enc.c \ - src/enc/near_lossless_enc.c \ - src/enc/picture_enc.c \ - src/enc/picture_csp_enc.c \ - src/enc/picture_psnr_enc.c \ - src/enc/picture_rescale_enc.c \ - src/enc/picture_tools_enc.c \ - src/enc/predictor_enc.c \ - src/enc/quant_enc.c \ - src/enc/syntax_enc.c \ - src/enc/token_enc.c \ - src/enc/tree_enc.c \ - src/enc/vp8l_enc.c \ - src/enc/webp_enc.c \ - -mux_srcs := \ - src/mux/anim_encode.c \ - src/mux/muxedit.c \ - src/mux/muxinternal.c \ - src/mux/muxread.c \ - -utils_dec_srcs := \ - src/utils/bit_reader_utils.c \ - src/utils/color_cache_utils.c \ - src/utils/filters_utils.c \ - src/utils/huffman_utils.c \ - src/utils/quant_levels_dec_utils.c \ - src/utils/random_utils.c \ - src/utils/rescaler_utils.c \ - src/utils/thread_utils.c \ - src/utils/utils.c \ - -utils_enc_srcs := \ - src/utils/bit_writer_utils.c \ - src/utils/huffman_encode_utils.c \ - src/utils/quant_levels_utils.c \ - -################################################################################ -# libwebpdecoder - -include $(CLEAR_VARS) - -LOCAL_SRC_FILES := \ - $(dec_srcs) \ - $(dsp_dec_srcs) \ - $(utils_dec_srcs) \ - -LOCAL_CFLAGS := $(WEBP_CFLAGS) -LOCAL_EXPORT_C_INCLUDES += $(LOCAL_PATH)/src - -# prefer arm over thumb mode for performance gains -LOCAL_ARM_MODE := arm - -ifeq ($(USE_CPUFEATURES),yes) - LOCAL_STATIC_LIBRARIES := cpufeatures -endif - -LOCAL_MODULE := webpdecoder_static - -include $(BUILD_STATIC_LIBRARY) - -ifeq ($(ENABLE_SHARED),1) -include $(CLEAR_VARS) - -LOCAL_WHOLE_STATIC_LIBRARIES := webpdecoder_static - -LOCAL_MODULE := webpdecoder - -include $(BUILD_SHARED_LIBRARY) -endif # ENABLE_SHARED=1 - -################################################################################ -# libwebp - -include $(CLEAR_VARS) - -LOCAL_SRC_FILES := \ - $(dsp_enc_srcs) \ - $(enc_srcs) \ - $(utils_enc_srcs) \ - -LOCAL_CFLAGS := $(WEBP_CFLAGS) -LOCAL_EXPORT_C_INCLUDES += $(LOCAL_PATH)/src - -# prefer arm over thumb mode for performance gains -LOCAL_ARM_MODE := arm - -LOCAL_WHOLE_STATIC_LIBRARIES := webpdecoder_static - -LOCAL_MODULE := webp - -ifeq ($(ENABLE_SHARED),1) - include $(BUILD_SHARED_LIBRARY) -else - include $(BUILD_STATIC_LIBRARY) -endif - -################################################################################ -# libwebpdemux - -include $(CLEAR_VARS) - -LOCAL_SRC_FILES := $(demux_srcs) - -LOCAL_CFLAGS := $(WEBP_CFLAGS) -LOCAL_EXPORT_C_INCLUDES += $(LOCAL_PATH)/src - -# prefer arm over thumb mode for performance gains -LOCAL_ARM_MODE := arm - -LOCAL_MODULE := webpdemux - -ifeq ($(ENABLE_SHARED),1) - LOCAL_SHARED_LIBRARIES := webp - include $(BUILD_SHARED_LIBRARY) -else - LOCAL_STATIC_LIBRARIES := webp - include $(BUILD_STATIC_LIBRARY) -endif - -################################################################################ -# libwebpmux - -include $(CLEAR_VARS) - -LOCAL_SRC_FILES := $(mux_srcs) - -LOCAL_CFLAGS := $(WEBP_CFLAGS) -LOCAL_EXPORT_C_INCLUDES += $(LOCAL_PATH)/src - -# prefer arm over thumb mode for performance gains -LOCAL_ARM_MODE := arm - -LOCAL_MODULE := webpmux - -ifeq ($(ENABLE_SHARED),1) - LOCAL_SHARED_LIBRARIES := webp - include $(BUILD_SHARED_LIBRARY) -else - LOCAL_STATIC_LIBRARIES := webp - include $(BUILD_STATIC_LIBRARY) -endif - -################################################################################ - -WEBP_SRC_PATH := $(LOCAL_PATH) -include $(WEBP_SRC_PATH)/imageio/Android.mk -include $(WEBP_SRC_PATH)/examples/Android.mk - -ifeq ($(USE_CPUFEATURES),yes) - $(call import-module,android/cpufeatures) -endif diff --git a/Extended/libwebp/CMakeLists.txt b/Extended/libwebp/CMakeLists.txt deleted file mode 100644 index 9503daa..0000000 --- a/Extended/libwebp/CMakeLists.txt +++ /dev/null @@ -1,675 +0,0 @@ -cmake_minimum_required(VERSION 3.5) - -project(WebP C) - -# Options for coder / decoder executables. -option(WEBP_ENABLE_SIMD "Enable any SIMD optimization." ON) -option(WEBP_BUILD_ANIM_UTILS "Build animation utilities." ON) -option(WEBP_BUILD_CWEBP "Build the cwebp command line tool." ON) -option(WEBP_BUILD_DWEBP "Build the dwebp command line tool." ON) -option(WEBP_BUILD_GIF2WEBP "Build the gif2webp conversion tool." ON) -option(WEBP_BUILD_IMG2WEBP "Build the img2webp animation tool." ON) -option(WEBP_BUILD_VWEBP "Build the vwebp viewer tool." ON) -option(WEBP_BUILD_WEBPINFO "Build the webpinfo command line tool." ON) -option(WEBP_BUILD_WEBPMUX "Build the webpmux command line tool." ON) -option(WEBP_BUILD_EXTRAS "Build extras." ON) -option(WEBP_BUILD_WEBP_JS "Emscripten build of webp.js." OFF) -option(WEBP_NEAR_LOSSLESS "Enable near-lossless encoding" ON) -option(WEBP_ENABLE_SWAP_16BIT_CSP "Enable byte swap for 16 bit colorspaces." - OFF) -set(WEBP_BITTRACE "0" CACHE STRING "Bit trace mode (0=none, 1=bit, 2=bytes)") -set_property(CACHE WEBP_BITTRACE PROPERTY STRINGS 0 1 2) - -# Option needed for handling Unicode file names on Windows. -if(WIN32) - option(WEBP_UNICODE "Build Unicode executables." ON) -endif() - -if(WEBP_BUILD_WEBP_JS) - set(WEBP_ENABLE_SIMD OFF) - set(WEBP_BUILD_ANIM_UTILS OFF) - set(WEBP_BUILD_CWEBP OFF) - set(WEBP_BUILD_DWEBP OFF) - set(WEBP_BUILD_GIF2WEBP OFF) - set(WEBP_BUILD_IMG2WEBP OFF) - set(WEBP_BUILD_VWEBP OFF) - set(WEBP_BUILD_WEBPINFO OFF) - set(WEBP_BUILD_WEBPMUX OFF) - set(WEBP_BUILD_EXTRAS OFF) -endif() - -set(WEBP_DEP_LIBRARIES) -set(WEBP_DEP_INCLUDE_DIRS) - -if(NOT CMAKE_BUILD_TYPE) - set(CMAKE_BUILD_TYPE "Release" - CACHE "Build type: Release, Debug, MinSizeRel or RelWithDebInfo" STRING - FORCE) -endif() - -# Include dependencies. -include(cmake/deps.cmake) -include(GNUInstallDirs) - -# ############################################################################## -# Options. -if(WEBP_ENABLE_SWAP_16BIT_CSP) - add_definitions(-DWEBP_SWAP_16BIT_CSP=1) -endif() - -if(NOT WEBP_BITTRACE STREQUAL "0") - add_definitions(-DBITTRACE=${WEBP_BITTRACE}) -endif() - -if(WEBP_UNICODE) - # Windows recommends setting both UNICODE and _UNICODE. - add_definitions(-DUNICODE -D_UNICODE) -endif() - -set(prefix ${CMAKE_INSTALL_PREFIX}) -set(exec_prefix "\$\{prefix\}") -set(libdir "\$\{prefix\}/lib") -set(includedir "\$\{prefix\}/include") -set(PTHREAD_LIBS ${CMAKE_THREAD_LIBS_INIT}) -set(INSTALLED_LIBRARIES) - -# ############################################################################## -# Android only. -if(ANDROID) - include_directories(${ANDROID_NDK}/sources/android/cpufeatures) - add_library(cpufeatures STATIC - ${ANDROID_NDK}/sources/android/cpufeatures/cpu-features.c) - list(APPEND INSTALLED_LIBRARIES cpufeatures) - target_link_libraries(cpufeatures dl) - set(WEBP_DEP_LIBRARIES ${WEBP_DEP_LIBRARIES} cpufeatures) - set(WEBP_DEP_INCLUDE_DIRS ${WEBP_DEP_INCLUDE_DIRS} - ${ANDROID_NDK}/sources/android/cpufeatures) - add_definitions(-DHAVE_CPU_FEATURES_H=1) - set(HAVE_CPU_FEATURES_H 1) -else() - set(HAVE_CPU_FEATURES_H 0) -endif() - -function(configure_pkg_config FILE) - configure_file("${CMAKE_CURRENT_SOURCE_DIR}/${FILE}.in" - "${CMAKE_CURRENT_BINARY_DIR}/${FILE}") - - if(HAVE_MATH_LIBRARY) - # MSVC doesn't have libm - file(READ ${CMAKE_CURRENT_BINARY_DIR}/${FILE} data) - string(REPLACE "-lm" "" data ${data}) - file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/${FILE} ${data}) - endif() - - install( - FILES "${CMAKE_CURRENT_BINARY_DIR}/${FILE}" - DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig - ) -endfunction() - -# ############################################################################## -# WebP source files. Read the Makefile.am to get the source files. - -# We expect the Makefiles to define the sources as defined in the first regex. -# E.g.: libimagedec_la_SOURCES = image_dec.c image_dec.h -function(parse_Makefile_am FOLDER VAR SRC_REGEX) - file(READ ${FOLDER}/Makefile.am MAKEFILE_AM) - string(REGEX MATCHALL - "${SRC_REGEX}_SOURCES[ ]*\\+?=[ ]+[0-9a-z\\._ ]*" - FILES_PER_LINE - ${MAKEFILE_AM}) - set(SRCS ${${VAR}}) - foreach(FILES ${FILES_PER_LINE}) - string(FIND ${FILES} "=" OFFSET) - math(EXPR OFFSET "${OFFSET} + 2") - string(SUBSTRING ${FILES} - ${OFFSET} - -1 - FILES) - if(FILES) - string(REGEX MATCHALL - "[0-9a-z\\._]+" - FILES - ${FILES}) - foreach(FILE ${FILES}) - list(APPEND SRCS ${FOLDER}/${FILE}) - endforeach() - endif() - endforeach() - set(${VAR} ${SRCS} PARENT_SCOPE) -endfunction() - -set(WEBP_SRC_DIR ${CMAKE_CURRENT_SOURCE_DIR}/src) -parse_makefile_am(${WEBP_SRC_DIR}/dec "WEBP_DEC_SRCS" "") -parse_makefile_am(${WEBP_SRC_DIR}/demux "WEBP_DEMUX_SRCS" "") -parse_makefile_am(${WEBP_SRC_DIR}/dsp "WEBP_DSP_COMMON_SRCS" "COMMON") -parse_makefile_am(${WEBP_SRC_DIR}/dsp "WEBP_DSP_ENC_SRCS" "ENC") -parse_makefile_am(${WEBP_SRC_DIR}/dsp "WEBP_DSP_ENC_SRCS" "dsp_[^ ]*") -parse_makefile_am(${WEBP_SRC_DIR}/dsp "WEBP_DSP_DEC_SRCS" "decode_[^ ]*") -parse_makefile_am(${WEBP_SRC_DIR}/enc "WEBP_ENC_SRCS" "") -parse_makefile_am(${WEBP_SRC_DIR}/utils "WEBP_UTILS_COMMON_SRCS" "COMMON") -parse_makefile_am(${WEBP_SRC_DIR}/utils "WEBP_UTILS_ENC_SRCS" "ENC") -parse_makefile_am(${WEBP_SRC_DIR}/utils "WEBP_UTILS_DEC_SRCS" "decode_[^ ]*") - -# Remove the files specific to SIMD we don't use. -foreach(FILE ${WEBP_SIMD_FILES_NOT_TO_INCLUDE}) - list(REMOVE_ITEM WEBP_DSP_ENC_SRCS ${FILE}) - list(REMOVE_ITEM WEBP_DSP_DEC_SRCS ${FILE}) -endforeach() - -# Generate the config.h file. -configure_file(${CMAKE_CURRENT_LIST_DIR}/cmake/config.h.in - ${CMAKE_CURRENT_BINARY_DIR}/src/webp/config.h) -add_definitions(-DHAVE_CONFIG_H) - -# ############################################################################## -# Build the webpdecoder library. -if(MSVC) - # avoid security warnings for e.g., fopen() used in the examples. - add_definitions(-D_CRT_SECURE_NO_WARNINGS) -else() - add_definitions(-Wall) -endif() -include_directories(${WEBP_DEP_INCLUDE_DIRS}) -add_library(webpdecode OBJECT ${WEBP_DEC_SRCS}) -target_include_directories(webpdecode - PRIVATE ${CMAKE_CURRENT_BINARY_DIR} - ${CMAKE_CURRENT_SOURCE_DIR}) -add_library(webpdspdecode OBJECT ${WEBP_DSP_COMMON_SRCS} ${WEBP_DSP_DEC_SRCS}) -target_include_directories(webpdspdecode - PRIVATE ${CMAKE_CURRENT_BINARY_DIR} - ${CMAKE_CURRENT_SOURCE_DIR}) -add_library(webputilsdecode - OBJECT - ${WEBP_UTILS_COMMON_SRCS} - ${WEBP_UTILS_DEC_SRCS}) -target_include_directories(webputilsdecode - PRIVATE ${CMAKE_CURRENT_BINARY_DIR} - ${CMAKE_CURRENT_SOURCE_DIR}) -add_library(webpdecoder - $ - $ - $) -target_link_libraries(webpdecoder ${WEBP_DEP_LIBRARIES}) -target_include_directories( - webpdecoder - PRIVATE ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR} - INTERFACE $ - $) -set_target_properties( - webpdecoder - PROPERTIES PUBLIC_HEADER "${CMAKE_CURRENT_SOURCE_DIR}/src/webp/decode.h;\ -${CMAKE_CURRENT_SOURCE_DIR}/src/webp/types.h") - -configure_pkg_config("src/libwebpdecoder.pc") - -# Build the webp library. -add_library(webpencode OBJECT ${WEBP_ENC_SRCS}) -target_include_directories(webpencode - PRIVATE ${CMAKE_CURRENT_BINARY_DIR} - ${CMAKE_CURRENT_SOURCE_DIR}) -add_library(webpdsp - OBJECT - ${WEBP_DSP_COMMON_SRCS} - ${WEBP_DSP_DEC_SRCS} - ${WEBP_DSP_ENC_SRCS}) -target_include_directories(webpdsp - PRIVATE ${CMAKE_CURRENT_BINARY_DIR} - ${CMAKE_CURRENT_SOURCE_DIR}) -add_library(webputils - OBJECT - ${WEBP_UTILS_COMMON_SRCS} - ${WEBP_UTILS_DEC_SRCS} - ${WEBP_UTILS_ENC_SRCS}) -target_include_directories(webputils - PRIVATE ${CMAKE_CURRENT_BINARY_DIR} - ${CMAKE_CURRENT_SOURCE_DIR}) -add_library(webp - $ - $ - $ - $) -target_link_libraries(webp ${WEBP_DEP_LIBRARIES}) -target_include_directories(webp - PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} - ${CMAKE_CURRENT_BINARY_DIR} - PUBLIC $) -set_target_properties( - webp - PROPERTIES PUBLIC_HEADER "${CMAKE_CURRENT_SOURCE_DIR}/src/webp/decode.h;\ -${CMAKE_CURRENT_SOURCE_DIR}/src/webp/encode.h;\ -${CMAKE_CURRENT_SOURCE_DIR}/src/webp/types.h") - -# Make sure the OBJECT libraries are built with position independent code (it is -# not ON by default). -set_target_properties(webpdecode - webpdspdecode - webputilsdecode - webpencode - webpdsp - webputils - PROPERTIES POSITION_INDEPENDENT_CODE ON) -configure_pkg_config("src/libwebp.pc") - -# Build the webp demux library. -add_library(webpdemux ${WEBP_DEMUX_SRCS}) -target_link_libraries(webpdemux webp) -target_include_directories(webpdemux - PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} - ${CMAKE_CURRENT_BINARY_DIR} - PUBLIC $) -set_target_properties( - webpdemux - PROPERTIES PUBLIC_HEADER "${CMAKE_CURRENT_SOURCE_DIR}/src/webp/decode.h;\ -${CMAKE_CURRENT_SOURCE_DIR}/src/webp/demux.h;\ -${CMAKE_CURRENT_SOURCE_DIR}/src/webp/mux_types.h;\ -${CMAKE_CURRENT_SOURCE_DIR}/src/webp/types.h") - -configure_pkg_config("src/demux/libwebpdemux.pc") - -# Set the version numbers. -function(parse_version FILE NAME VAR) - file(READ ${CMAKE_CURRENT_SOURCE_DIR}/src/${FILE} SOURCE_FILE) - string(REGEX MATCH - "${NAME}_la_LDFLAGS[^\n]* -version-info [0-9:]+" - TMP - ${SOURCE_FILE}) - string(REGEX MATCH - "[0-9:]+" - TMP - ${TMP}) - string(REGEX - REPLACE ":" - "." - VERSION - ${TMP}) - set(${VAR} "${VERSION}" PARENT_SCOPE) -endfunction() -parse_version(Makefile.am webp WEBP_WEBP_SOVERSION) -set_target_properties(webp - PROPERTIES VERSION - ${PACKAGE_VERSION} - SOVERSION - ${WEBP_WEBP_SOVERSION}) -parse_version(Makefile.am webpdecoder WEBP_DECODER_SOVERSION) -set_target_properties(webpdecoder - PROPERTIES VERSION - ${PACKAGE_VERSION} - SOVERSION - ${WEBP_DECODER_SOVERSION}) -parse_version(demux/Makefile.am webpdemux WEBP_DEMUX_SOVERSION) -set_target_properties(webpdemux - PROPERTIES VERSION - ${PACKAGE_VERSION} - SOVERSION - ${WEBP_DEMUX_SOVERSION}) -file(READ ${CMAKE_CURRENT_SOURCE_DIR}/configure.ac CONFIGURE_FILE) -string(REGEX MATCH - "AC_INIT\\([^\n]*\\[[0-9\\.]+\\]" - TMP - ${CONFIGURE_FILE}) -string(REGEX MATCH - "[0-9\\.]+" - PROJECT_VERSION - ${TMP}) - -# Define the libraries to install. -list(APPEND INSTALLED_LIBRARIES webpdecoder webp webpdemux) - -# Deal with SIMD. Change the compile flags for SIMD files we use. -list(LENGTH WEBP_SIMD_FILES_TO_INCLUDE WEBP_SIMD_FILES_TO_INCLUDE_LENGTH) -math(EXPR WEBP_SIMD_FILES_TO_INCLUDE_RANGE - "${WEBP_SIMD_FILES_TO_INCLUDE_LENGTH}-1") - -foreach(I_FILE RANGE ${WEBP_SIMD_FILES_TO_INCLUDE_RANGE}) - list(GET WEBP_SIMD_FILES_TO_INCLUDE ${I_FILE} FILE) - list(GET WEBP_SIMD_FLAGS_TO_INCLUDE ${I_FILE} SIMD_COMPILE_FLAG) - set_source_files_properties(${FILE} - PROPERTIES - COMPILE_FLAGS - ${SIMD_COMPILE_FLAG}) -endforeach() - -if(WEBP_BUILD_GIF2WEBP AND NOT GIF_FOUND) - set(WEBP_BUILD_GIF2WEBP OFF) -endif() - -if(WEBP_BUILD_ANIM_UTILS AND NOT GIF_FOUND) - set(WEBP_BUILD_ANIM_UTILS OFF) -endif() - -# Build the executables if asked for. -if(WEBP_BUILD_ANIM_UTILS - OR WEBP_BUILD_CWEBP - OR WEBP_BUILD_DWEBP - OR WEBP_BUILD_GIF2WEBP - OR WEBP_BUILD_IMG2WEBP - OR WEBP_BUILD_VWEBP) - # Example utility library. - parse_makefile_am(${CMAKE_CURRENT_SOURCE_DIR}/examples "EXAMPLEUTIL_SRCS" - "example_util_[^ ]*") - list(APPEND EXAMPLEUTIL_SRCS ${CMAKE_CURRENT_SOURCE_DIR}/examples/stopwatch.h) - add_library(exampleutil STATIC ${EXAMPLEUTIL_SRCS}) - target_link_libraries(exampleutil imageioutil) - target_include_directories( - exampleutil - PUBLIC $) - - parse_makefile_am(${CMAKE_CURRENT_SOURCE_DIR}/imageio "IMAGEIOUTILS_SRCS" - "imageio_util_[^ ]*") - add_library(imageioutil STATIC ${IMAGEIOUTILS_SRCS}) - target_link_libraries(imageioutil webp) - - # Image-decoding utility library. - parse_makefile_am(${CMAKE_CURRENT_SOURCE_DIR}/imageio "IMAGEDEC_SRCS" - "imagedec_[^ ]*") - add_library(imagedec STATIC ${IMAGEDEC_SRCS}) - target_link_libraries(imagedec - imageioutil - webpdemux - webp - ${WEBP_DEP_IMG_LIBRARIES}) - - # Image-encoding utility library. - parse_makefile_am(${CMAKE_CURRENT_SOURCE_DIR}/imageio "IMAGEENC_SRCS" - "imageenc_[^ ]*") - add_library(imageenc STATIC ${IMAGEENC_SRCS}) - target_link_libraries(imageenc imageioutil webp) - - set_property(TARGET exampleutil - imageioutil - imagedec - imageenc - PROPERTY INCLUDE_DIRECTORIES ${CMAKE_CURRENT_SOURCE_DIR}/src - ${CMAKE_CURRENT_BINARY_DIR}/src) -endif() - -if(WEBP_BUILD_DWEBP) - # dwebp - parse_makefile_am(${CMAKE_CURRENT_SOURCE_DIR}/examples "DWEBP_SRCS" "dwebp") - add_executable(dwebp ${DWEBP_SRCS}) - target_link_libraries(dwebp exampleutil imagedec imageenc) - target_include_directories(dwebp PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/src) - install(TARGETS dwebp RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) -endif() - -if(WEBP_BUILD_CWEBP) - # cwebp - parse_makefile_am(${CMAKE_CURRENT_SOURCE_DIR}/examples "CWEBP_SRCS" "cwebp") - add_executable(cwebp ${CWEBP_SRCS}) - target_link_libraries(cwebp exampleutil imagedec webp) - target_include_directories(cwebp PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/src) - install(TARGETS cwebp RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) -endif() - -if(WEBP_BUILD_GIF2WEBP OR WEBP_BUILD_IMG2WEBP) - parse_makefile_am(${CMAKE_CURRENT_SOURCE_DIR}/src/mux "WEBP_MUX_SRCS" "") - add_library(libwebpmux ${WEBP_MUX_SRCS}) - target_link_libraries(libwebpmux webp) - target_include_directories(libwebpmux - PRIVATE ${CMAKE_CURRENT_BINARY_DIR} - ${CMAKE_CURRENT_SOURCE_DIR}) - parse_version(mux/Makefile.am webpmux WEBP_MUX_SOVERSION) - set_target_properties(libwebpmux - PROPERTIES VERSION - ${PACKAGE_VERSION} - SOVERSION - ${WEBP_MUX_SOVERSION}) - set_target_properties(libwebpmux - PROPERTIES PUBLIC_HEADER - "${CMAKE_CURRENT_SOURCE_DIR}/src/webp/mux.h;\ -${CMAKE_CURRENT_SOURCE_DIR}/src/webp/mux_types.h;\ -${CMAKE_CURRENT_SOURCE_DIR}/src/webp/types.h;") - set_target_properties(libwebpmux PROPERTIES OUTPUT_NAME webpmux) - list(APPEND INSTALLED_LIBRARIES libwebpmux) - configure_pkg_config("src/mux/libwebpmux.pc") -endif() - -if(WEBP_BUILD_GIF2WEBP) - # gif2webp - include_directories(${WEBP_DEP_GIF_INCLUDE_DIRS}) - parse_makefile_am(${CMAKE_CURRENT_SOURCE_DIR}/examples "GIF2WEBP_SRCS" - "gif2webp") - add_executable(gif2webp ${GIF2WEBP_SRCS}) - target_link_libraries(gif2webp - exampleutil - imageioutil - webp - libwebpmux - ${WEBP_DEP_GIF_LIBRARIES}) - target_include_directories(gif2webp PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/src) - install(TARGETS gif2webp RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) -endif() - -if(WEBP_BUILD_IMG2WEBP) - # img2webp - include_directories(${WEBP_DEP_IMG_INCLUDE_DIRS}) - parse_makefile_am(${CMAKE_CURRENT_SOURCE_DIR}/examples "IMG2WEBP_SRCS" - "img2webp") - add_executable(img2webp ${IMG2WEBP_SRCS}) - target_link_libraries(img2webp - exampleutil - imagedec - imageioutil - webp - libwebpmux) - target_include_directories(img2webp PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/src) - install(TARGETS img2webp RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) -endif() - -if(WEBP_BUILD_VWEBP) - # vwebp - find_package(GLUT) - if(GLUT_FOUND) - include_directories(${WEBP_DEP_IMG_INCLUDE_DIRS}) - parse_makefile_am(${CMAKE_CURRENT_SOURCE_DIR}/examples "VWEBP_SRCS" "vwebp") - add_executable(vwebp ${VWEBP_SRCS}) - target_link_libraries(vwebp - ${OPENGL_LIBRARIES} - exampleutil - ${GLUT_glut_LIBRARY} - imageioutil - webp - webpdemux) - target_include_directories(vwebp - PRIVATE ${GLUT_INCLUDE_DIR} - ${CMAKE_CURRENT_BINARY_DIR}/src - ${OPENGL_INCLUDE_DIR}) - install(TARGETS vwebp RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) - if(${CMAKE_SYSTEM_NAME} STREQUAL "Darwin") - check_c_compiler_flag("-Wno-deprecated-declarations" HAS_NO_DEPRECATED) - if(HAS_NO_DEPRECATED) - target_compile_options(vwebp PRIVATE "-Wno-deprecated-declarations") - endif() - endif() - endif() -endif() - -if(WEBP_BUILD_WEBPINFO) - # webpinfo - include_directories(${WEBP_DEP_IMG_INCLUDE_DIRS}) - parse_makefile_am(${CMAKE_CURRENT_SOURCE_DIR}/examples "WEBPINFO_SRCS" - "webpinfo") - add_executable(webpinfo ${WEBPINFO_SRCS}) - target_link_libraries(webpinfo exampleutil imageioutil) - target_include_directories(webpinfo PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/src) - install(TARGETS webpinfo RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) -endif() - -if(WEBP_BUILD_WEBPMUX) - # webpmux - parse_makefile_am(${CMAKE_CURRENT_SOURCE_DIR}/examples "WEBPMUX_SRCS" - "webpmux") - add_executable(webpmux ${WEBPMUX_SRCS}) - target_link_libraries(webpmux exampleutil imageioutil libwebpmux webp) - target_include_directories(webpmux PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/src) - install(TARGETS webpmux RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) -endif() - -if(WEBP_BUILD_EXTRAS) - set(EXTRAS_MAKEFILE "${CMAKE_CURRENT_SOURCE_DIR}/extras") - parse_makefile_am(${EXTRAS_MAKEFILE} "WEBP_EXTRAS_SRCS" "libwebpextras_la") - parse_makefile_am(${EXTRAS_MAKEFILE} "GET_DISTO_SRCS" "get_disto") - parse_makefile_am(${EXTRAS_MAKEFILE} "WEBP_QUALITY_SRCS" "webp_quality") - parse_makefile_am(${EXTRAS_MAKEFILE} "VWEBP_SDL_SRCS" "vwebp_sdl") - - # get_disto - add_executable(get_disto ${GET_DISTO_SRCS}) - target_link_libraries(get_disto imagedec) - target_include_directories(get_disto - PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} - ${CMAKE_CURRENT_SOURCE_DIR}/src - ${CMAKE_CURRENT_BINARY_DIR}/src) - install(TARGETS get_disto RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) - - # webp_quality - add_executable(webp_quality ${WEBP_QUALITY_SRCS} ${WEBP_EXTRAS_SRCS}) - target_link_libraries(webp_quality exampleutil imagedec) - target_include_directories(webp_quality - PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} - ${CMAKE_CURRENT_BINARY_DIR}) - install(TARGETS webp_quality RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) - - # vwebp_sdl - find_package(SDL) - if(SDL_FOUND) - add_executable(vwebp_sdl ${VWEBP_SDL_SRCS}) - target_link_libraries(vwebp_sdl ${SDL_LIBRARY} imageioutil webp) - target_include_directories(vwebp_sdl - PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} - ${CMAKE_CURRENT_SOURCE_DIR}/src - ${CMAKE_CURRENT_BINARY_DIR} - ${CMAKE_CURRENT_BINARY_DIR}/src - ${SDL_INCLUDE_DIR}) - set(WEBP_HAVE_SDL 1) - target_compile_definitions(vwebp_sdl PUBLIC WEBP_HAVE_SDL) - install(TARGETS vwebp_sdl RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) - endif() -endif() - -if(WEBP_BUILD_WEBP_JS) - # JavaScript version - add_executable(webp_js ${CMAKE_CURRENT_SOURCE_DIR}/extras/webp_to_sdl.c) - target_link_libraries(webp_js webpdecoder SDL) - target_include_directories(webp_js PRIVATE ${CMAKE_CURRENT_BINARY_DIR}) - set(WEBP_HAVE_SDL 1) - set_target_properties( - webp_js - PROPERTIES LINK_FLAGS - "-s EXPORTED_FUNCTIONS='[\"_WebpToSDL\"]' -s INVOKE_RUN=0 \ - -s EXTRA_EXPORTED_RUNTIME_METHODS='[\"cwrap\"]'") - set_target_properties(webp_js PROPERTIES OUTPUT_NAME webp) - target_compile_definitions(webp_js PUBLIC EMSCRIPTEN WEBP_HAVE_SDL) - - # WASM version - add_executable(webp_wasm ${CMAKE_CURRENT_SOURCE_DIR}/extras/webp_to_sdl.c) - target_link_libraries(webp_wasm webpdecoder SDL) - target_include_directories(webp_wasm PRIVATE ${CMAKE_CURRENT_BINARY_DIR}) - set_target_properties( - webp_wasm - PROPERTIES LINK_FLAGS "-s WASM=1 \ - -s EXPORTED_FUNCTIONS='[\"_WebpToSDL\"]' -s INVOKE_RUN=0 \ - -s EXTRA_EXPORTED_RUNTIME_METHODS='[\"cwrap\"]'") - target_compile_definitions(webp_wasm PUBLIC EMSCRIPTEN WEBP_HAVE_SDL) - - target_compile_definitions(webpdspdecode PUBLIC EMSCRIPTEN) -endif() - -if(WEBP_BUILD_ANIM_UTILS) - # anim_diff - include_directories(${WEBP_DEP_IMG_INCLUDE_DIRS} ${WEBP_DEP_GIF_INCLUDE_DIRS}) - parse_makefile_am(${CMAKE_CURRENT_SOURCE_DIR}/examples "ANIM_DIFF_SRCS" - "anim_diff") - add_executable(anim_diff ${ANIM_DIFF_SRCS}) - target_link_libraries(anim_diff - exampleutil - imagedec - imageenc - imageioutil - webp - libwebpmux - webpdemux - ${WEBP_DEP_GIF_LIBRARIES}) - target_include_directories(anim_diff PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/src) - - # anim_dump - include_directories(${WEBP_DEP_IMG_INCLUDE_DIRS} ${WEBP_DEP_GIF_INCLUDE_DIRS}) - parse_makefile_am(${CMAKE_CURRENT_SOURCE_DIR}/examples "ANIM_DUMP_SRCS" - "anim_dump") - add_executable(anim_dump ${ANIM_DUMP_SRCS}) - target_link_libraries(anim_dump - exampleutil - imagedec - imageenc - imageioutil - webp - libwebpmux - webpdemux - ${WEBP_DEP_GIF_LIBRARIES}) - target_include_directories(anim_dump PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/src) -endif() - -# Install the different headers and libraries. -include(GNUInstallDirs) -install(TARGETS ${INSTALLED_LIBRARIES} - EXPORT ${PROJECT_NAME}Targets - PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/webp - INCLUDES - DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} - ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} - LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} - RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) -set(ConfigPackageLocation ${CMAKE_INSTALL_DATADIR}/${PROJECT_NAME}/cmake/) -install(EXPORT ${PROJECT_NAME}Targets - NAMESPACE ${PROJECT_NAME}:: - DESTINATION ${ConfigPackageLocation}) - -# Create the CMake version file. -include(CMakePackageConfigHelpers) -write_basic_package_version_file( - "${CMAKE_CURRENT_BINARY_DIR}/WebPConfigVersion.cmake" - VERSION ${PACKAGE_VERSION} - COMPATIBILITY AnyNewerVersion) - -# Create the Config file. -include(CMakePackageConfigHelpers) -configure_package_config_file( - ${CMAKE_CURRENT_SOURCE_DIR}/cmake/WebPConfig.cmake.in - ${CMAKE_CURRENT_BINARY_DIR}/WebPConfig.cmake - INSTALL_DESTINATION - ${ConfigPackageLocation}) - -# Install the generated CMake files. -install(FILES "${CMAKE_CURRENT_BINARY_DIR}/WebPConfigVersion.cmake" - "${CMAKE_CURRENT_BINARY_DIR}/WebPConfig.cmake" - DESTINATION ${ConfigPackageLocation}) - -# Install the man pages. -set(MAN_PAGES - cwebp.1 - dwebp.1 - gif2webp.1 - img2webp.1 - vwebp.1 - webpmux.1 - webpinfo.1) -set(EXEC_BUILDS - "CWEBP" - "DWEBP" - "GIF2WEBP" - "IMG2WEBP" - "VWEBP" - "WEBPMUX" - "WEBPINFO") -list(LENGTH MAN_PAGES MAN_PAGES_LENGTH) -math(EXPR MAN_PAGES_RANGE "${MAN_PAGES_LENGTH} - 1") - -foreach(I_MAN RANGE ${MAN_PAGES_RANGE}) - list(GET EXEC_BUILDS ${I_MAN} EXEC_BUILD) - if(WEBP_BUILD_${EXEC_BUILD}) - list(GET MAN_PAGES ${I_MAN} MAN_PAGE) - install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/man/${MAN_PAGE} - DESTINATION ${CMAKE_INSTALL_MANDIR}/man1 - COMPONENT doc) - endif() -endforeach() diff --git a/Extended/libwebp/COPYING b/Extended/libwebp/COPYING deleted file mode 100644 index 7a6f995..0000000 --- a/Extended/libwebp/COPYING +++ /dev/null @@ -1,30 +0,0 @@ -Copyright (c) 2010, Google Inc. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - - * Neither the name of Google nor the names of its contributors may - be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - diff --git a/Extended/libwebp/ChangeLog b/Extended/libwebp/ChangeLog deleted file mode 100644 index 0a286fc..0000000 --- a/Extended/libwebp/ChangeLog +++ /dev/null @@ -1,4054 +0,0 @@ -7f006436 Makefile.vc: fix webp_quality.exe link -c074c653 update NEWS -30f09551 bump version to 1.1.0 -a76694a1 update AUTHORS -6e3ef7b3 extras: fix WEBP_SWAP_16BIT_CSP check -47178dbd extras: add WebPUnmultiplyARGB() convenience function -22cbae33 idec_dec: fix 0 offset of NULL pointer -290dd0b4 muxread: fix 0 offset of NULL pointer -0df474ac Merge "lossless_(enc_|)sse2: avoid offsetting a NULL pointer" -c6b75a19 lossless_(enc_|)sse2: avoid offsetting a NULL pointer -295e5e38 fix UBSAN warning -e2575e05 DC8_NEON,aarch64: use vaddv -b0e09e34 dec_neon: Fix build failure under some toolchains -cf0e903c dsp/lossless: Fix non gcc ARM builds -bb7bc40b Remove ubsan errors. -78881b76 CMake: fix GLUT library link -9f750f7a cmake: fix BUILD_SHARED_LIBS build on mac -17850e74 libwebp: Remove char-subscripts warning in pnmdec.c -2fa2552d Merge "Expose WebPMalloc() in addition to WebPFree()" -a4df4aae Expose WebPMalloc() in addition to WebPFree() -853ea3d8 imageio/tiff: Return error before allocating bad tile size -af650c0b Fix a Wxor-used-as-pow false positive -601ef17c libwebp.py: update to swig 3.0.12 -0e48d889 bugfix: last alpha rows were incorrectly decoded -24d2ccb4 webp: Fix imageio ReadPNM() TUPLTYPE -fab8f9cf cosmetics: normalize '*' association -94138e0e update .gitignore -0fe1a89d update ChangeLog (tag: v1.0.3-rc1, tag: v1.0.3) -2ad0916d update NEWS -1287362b bump version to 1.0.3 -7b968cc2 update AUTHORS -9d6988f4 Fix the oscillating prediction problem at low quality -312f74d0 makefile.unix: allow *_LIBS to be overridden w/EXTRA_LIBS -92dbf237 filters_sse2,cosmetics: shorten some long lines -a277d197 filters_sse2.c: quiet integer sanitizer warnings -804540f1 Fix cpufeatures in CMake. -bf00c15b Add CMake option for bittrace. -a788b498 filters_sse2.c: quiet integer sanitizer warnings -e6a92c5e filters.c: quiet integer sanitizer warnings -ec1cc40a lossless.c: remove U32 -> S8 conversion warnings -1106478f remove conversion U32 -> S8 warnings -812a6b49 lossless_enc: fix some conversion warning -4627c1c9 lossless_enc,TransformColorBlue: quiet uint32_t conv warning -c84673a6 lossless_enc_sse{2,41}: quiet signed conv warnings -776a7757 dec_sse2: quiet signed conv warnings -bd39c063 Merge "thread_utils: release mutex before signaling" -0550576f Merge "(alpha_processing,enc}_sse2: quiet signed conv warnings" -6682f2c4 thread_utils: release mutex before signaling -e78dea75 (alpha_processing,enc}_sse2: quiet signed conv warnings -9acf18ba iosbuild.sh: add WebP{Demux,Mux}.framework -b9be7e65 vwebp: remove the -fit option (and make it default) -1394a2bb Merge "README.webp_js: update Emscripten.cmake note" -dd3e7f8a README.webp_js: update Emscripten.cmake note -32cf8801 predictor_enc,GetBestGreenRedToBlue: quiet implicit conv warnings -e1c8acb5 Merge "vwebp: add a -fit option" -cbd23dd5 vwebp: add a -fit option -2e672351 bit_writer_utils,Flush: quiet implicit conversion warnings -1326988d swig: update libwebp_python_wrap.c -0e7f8548 update generated swig files -17ed1438 Merge "PutLE{16,24}: quiet implicit conversion warnings" -24686538 PutLE{16,24}: quiet implicit conversion warnings -153bb3a0 fix some clang-7 warnings: -ab2dc893 Rescaler: fix rounding error -aa65f89a HistogramCombineStochastic: fix free of uninit value -af0bac64 Merge "encode.h: mention 'exact' default in WebPEncodeLossless*" -6d2e11ec encode.h: mention 'exact' default in WebPEncodeLossless* -8c3f04fe AndroidCPUInfo: reorder terms in conditional -fcfd9c71 BitTrace: if BITTRACE is > 0, record and print syntax bits used -067031ea Speedups for unused Huffman groups. -01ac46ba libwebp: Display "libjpeg error:" in imageio/jpegdec -d9a662e1 WebPRescalerGetScaledDimensions: round scaled dimension up -62eb3f08 libwebp: Fix missing '{' in README -e05f785a Merge "unicode,INIT_WARGV: add missing cast" -63c9a69f tag the VP8LHashPix() function for potential uint roll-over -2b7214ab unicode,INIT_WARGV: add missing cast -bf424b46 tag the GetPixPairHash64() function for potential uint roll-over -7d05d6ca Have the color cache computation be u32-bit only. -6bcf8769 Remove BINARYEN_METHOD in wasm settings. -2b98df90 update ChangeLog (tag: v1.0.2-rc1, tag: v1.0.2) -61e372b7 update NEWS -7ae658a0 bump version to 1.0.2 -51c4907d update AUTHORS -666bd6c6 man/cwebp.1: refine near-lossless text -561cdce5 Clarify the doc about GetFeatures. -aec2cf02 near_lossless: fix fuzzing-detected integer overflow -928a75de webp: Fix VP8LBitWriterClone() bug -5173d4ee neon IsFlat -5b081219 IsFlat: inline when possible -381b7b54 IsFlat: use int for thresh -6ed15ea1 fix unprobable leak in webp_sdl.c -22bbb24e Merge "IsFlat: return int" -8b3fb238 Merge tag 'v1.0.1' -f435de95 IsFlat: return int -41521aed utils.h: only define WEBP_NEED_LOG_TABLE_8BIT when needed -9f4d4a3f neon: GetResidualCost -0fd7514b neon: SetResidualCoeffs -f95a996c Simpler histogram clustering. -e85d3313 update ChangeLog (tag: v1.0.1-rc2, tag: v1.0.1) -fa8210e4 Fix pair update in stochastic entropy merging. -fd198f73 add codereview.settings -825389ac README.mux: add a reference to the AnimDecoder API -3be698c3 CMake: fix webp_js compilation -485ff86f Fix pair update in stochastic entropy merging. -4cd0582d CMake: fix webp_js compilation -4cbb4caf update NEWS -f5a5918d bump version to 1.0.1 -d61385db Speed-up: Make sure we only initialize histograms when needed. -6752904b Speed-up: Make sure we only initialize histograms when needed. -0c570316 update AUTHORS -301a2dda img2webp: add help note about arguments from a file -f0abab92 Speedups for empty histograms. -f2dfd925 Split HistogramAdd to only have the high level logic in C. -06b7bc7d Fix compilation on windows and clang-cl+ninja. -b6284d82 img2webp: add help note about arguments from a file -decf6f6b Speedups for empty histograms. -dea3e899 Split HistogramAdd to only have the high level logic in C. -632798ae Merge "Fix compilation on windows and clang-cl+ninja." -dc1a9518 Merge "libwebp: Unicode command tools on Windows" -9cf9841b libwebp: Unicode command tools on Windows -98179495 remove some minor TODOs -a376e7b9 Fix compilation on windows and clang-cl+ninja. -cbf82cc0 Remove AVX2 files. -5030e902 Merge "TIFF decoder: remove unused KINV definition" -ac543311 Remove a few more useless #defines -123d3306 TIFF decoder: remove unused KINV definition -ef1094b0 Merge "- install pkg-config files during the CMake build" -b911fbc9 libwebp: Remove duplicate GIFDisplayError in anim_util -eee00b66 - install pkg-config files during the CMake build -ac3ec8c9 Merge "Clean-up the common sources in dsp." -3e13da7b Clean-up the common sources in dsp. -5c395f1d libwebp: cmake-format all -e7a69729 libwebp: Add extras targets in CMakeLists.txt -e52485d6 libwebp: Rename macros in webpmux.c -92dc0f09 clean-up MakeInputImageCopy() -39952de2 VP8IteratorImport: add missing 'const' -382af7a2 clean-up WebPBlendAlpha -14d020f6 libwebp: Use ExUtilGet*() in anim_diff -0d92ff25 libwebp: remove useless variable in gif2webp -556cb1b4 Merge "CMake: Set WEBP_BUILD_GIF2WEBP to off" -da26ee49 CMake: Set WEBP_BUILD_GIF2WEBP to off -b2a867c0 cwebp: Don't premultiply during -resize if -exact -637141bc pngdec: fix build w/libpng < 1.4.x -bc5092b1 pngdec: set memory functions -50d8345a Fix CMake math library. -6aa3e8aa Fix math library on Visual Studio. -d71df4e2 Fix math library finding in CMake. -de08d727 cosmetics: normalize include guard comment -009562b4 vwebp: Fix bug when Dispose then NoBlend frames -423f2579 Fix up CMake to create targets. -907208f9 Wait for all threads to be done in DecodeRemaining. -4649b3c4 vwebp: Add background color display option -78ad57a3 Fix bad glClearColor parameters -da96d8d9 Allow for a non-initialized alpha decompressor in DoRemap. -2563db47 fix rescaling rounding inaccuracy -211f37ee fix endian problems in pattern copy -5f0f5c07 Make sure partition #0 is read before VP8 data in IDecode. -de98732b fix GetColorf() bug -4338cd36 misc fixes in libwebpmux -e00af13e fix signatures after a9ceda7ff1 -a9ceda7f Speed-up chunk list operations. -2281bbf6 Merge "Better handling of bogus Huffman codes." -39cb9aad Better handling of bogus Huffman codes. -89cc9d37 Merge "fix read-overflow while parsing VP8X chunk" -95fd6507 fix read-overflow while parsing VP8X chunk -9e729fe1 Fix VP8IoTeardownHook being called twice on worker sync failure -29fb8562 Merge "muxread,anmf: fail on multiple image chunks" -eb82ce76 muxread,anmf: fail on multiple image chunks -1344a2e9 fix alpha-filtering crash when image width is larger than radius -be738c6d muxread,ChunkVerifyAndAssign: validate chunk_size -2c70ad76 muxread,CreateInternal: fix riff size checks -569001f1 Fix for thread race heap-use-after-free -c56a02d9 Android.mk: use LOCAL_EXPORT_C_INCLUDES w/public libs -15795596 CMakeLists.txt,cosmetics: normalize if() formatting -1a44c233 Merge "cmake: add support for webpmux" -e9569ad7 Merge "configure,*am,cosmetics: s/WANT_/BUILD_/" -35c7de6f cmake: add support for webpmux -0f25e61c WebpToSDL(): fix the return value in case of error -5d8985de configure,*am,cosmetics: s/WANT_/BUILD_/ -895fd28f Merge "man/Makefile.am: add img2webp.1" -5cf3e2af man/Makefile.am: add img2webp.1 -2a9de5b9 Add build rules for anim_diff & anim_dump utils. -71ed73cf fix invalid check for buffer size -af0e4fbb gif2webp: fix transcode of loop count=65535 -dce5d764 Limit memory allocation when reading invalid Huffman codes. -f9df0081 Merge "cmake: quiet glut deprecation warnings on OS X" -dc39b16f webpmux.1: correct grammar -c7aa1264 cwebp.c: fix a missing \n -53aa51e9 Merge tag 'v1.0.0' -698b8844 update ChangeLog (tag: v1.0.0) -8d510751 webp-container-spec: correct frame duration=0 note -e6b2164e vwebp: Copy Chrome's behavior w/frame duration == 0 -094b3b28 cmake: quiet glut deprecation warnings on OS X -71c39a06 webp-container-spec: correct frame duration=0 note -fd3d5756 vwebp: Copy Chrome's behavior w/frame duration == 0 -b0c966fb Build vwebp from CMake. -d20b7707 update ChangeLog (tag: v1.0.0-rc3) -0d5fad46 add WEBP_DSP_INIT / WEBP_DSP_INIT_FUNC -d77bf512 add WEBP_DSP_INIT / WEBP_DSP_INIT_FUNC -c1cb86af fix 16b overflow in SSE2 -e577feb7 makefile.unix: add DEBUG flag for compiling w/ debug-symbol -99be34b3 cwebp,get_disto: fix bpp output -e122e511 cwebp,get_disto: fix bpp output -f5565ca8 cmake: Make sure we use near-lossless by default. -d898dc14 fix bug in WebPImport565: alpha value was not set -1c8f358d Fix CMake with WASM. -a0215fb7 webp_js: fix webp_js demo html -882784b0 update ChangeLog (tag: v1.0.0-rc2) -2f930e08 Revert "Use proper targets for CMake." -8165e8fb Use proper targets for CMake. -3f157dd5 Remove some very hard TODOs. -abb47760 Merge "Use proper targets for CMake." -cd758a17 {de,}mux/Makefile.am: add missing headers -e155dda0 Use proper targets for CMake. -b892b8ba makefile.unix,dist: use ascii for text output -64a57d05 add -version option to anim_dump,anim_diff and img2webp -994be82d Merge "Remove some very hard TODOs." -4033e1d7 Remove some very hard TODOs. -fc1b8e3a webp_js: fix webp_js demo html -15aa48d9 update ChangeLog (tag: v1.0.0-rc1) -e607dabc update AUTHORS -38410c08 [CFI] Remove function pointer casts -978eec25 [CFI] Remove function pointer casts -c57b2736 bump version to 1.0.0 -cba28853 update NEWS -c909d531 Merge "remove some deprecation warning on MacOSX" -217443c7 remove some deprecation warning on MacOSX -b672bdfa configure: quiet glut deprecation warnings on OS X -daa9fcaf configure: use sdl-config if available -dd174cae Merge "imagedec: support metadata reading for WebP image decoding" -641cedcc imagedec: support metadata reading for WebP image decoding -065b2ce1 anim_diff: add a couple missing newlines in Help() -c4cc1147 Merge "gif2webp: force low duration frames to 100ms" -09333097 gif2webp: force low duration frames to 100ms -e03f0ec3 sharp_yuv: use 14b fixed-point precision for gamma -b2db361c image_enc,WebPWritePNG: move locals after setjmp -74e82ec6 Merge "WebPPictureDistortion: fix big-endian results order" -645d04ca Merge "cwebp,get_disto: report bpp" -120f58c3 Merge "lossless*sse2: improve non-const 16-bit vector creation" -a7fe9412 WebPPictureDistortion: fix big-endian results order -e26fe066 cwebp,get_disto: report bpp -9df64e28 Merge changes Id5b4a1a4,Ia20ce844 -8043504f lossless*sse2: improve non-const 16-bit vector creation -1e3dfc48 Import: extract condition from loop -3b07d327 Import,RGBA: fix for BigEndian import -551948e4 Remove unused argument in VP8LBitsEntropy. -3005237a ReadWebP: fix for big-endian -499c395a Merge "anim_diff: expose the -max_diff option" -f69dcd69 Merge "remove WEBP_EXPERIMENTAL_FEATURES" -07d884d5 anim_diff: expose the -max_diff option -f4dd9256 remove WEBP_EXPERIMENTAL_FEATURES -94a8377b extract the command-line parsing helpers to example_util -fc09e6e2 PNM decoder: prevent unsupported depth=2 PAM case. -6de58603 MIPS64: Fix defined-but-not-used errors with WEBP_REDUCE_CSP -cbde5728 gif2webp: add support for reading from stdin -cf1c5054 Add an SSE4 version of some lossless color transforms. -45a8b5eb Fix lint error with man page. -cff38e8f Merge "PNG decoder: handle gAMA chunk" -59cb1a48 Merge "enable dc error-diffusion always" -78318b30 PNG decoder: handle gAMA chunk -664c21dd Merge "remove some TODOs" -815652de enable dc error-diffusion always -aec45cec remove some TODOs -5715dfce fix block-count[] increment in case of large image -c2d04f3e enable DC error-diffusion always for multi-pass -96bf07c5 use DC error diffusion for U/V at low-quality -1c59020b fix missing sse41 targets in makefile.unix -7a8e814b cosmetics: s/color_space/colorspace/ -05f6fe24 upsampling: rm asserts w/REDUCE_CSP+OMIT_C_CODE -b4cf5597 Merge "Upsampling SSE2/SSE4 speedup." -ccbeb32c Makefile.vc: add missing sse41 files -55403a9a Upsampling SSE2/SSE4 speedup. -807b53c4 Implement the upsampling/yuv functions in SSE41 -84101a81 Fix wasm WebP compilation -8bebd2a3 fix warning on MSVC -a7f93fe3 webpmux: allow reading argument from a file -b69f18a7 gif2webp.1: fix -loop_compatibility layout -72d530c0 Merge "fix lossless decoding w/WEBP_REDUCE_SIZE" -296c7dc4 fix lossless decoding w/WEBP_REDUCE_SIZE -0d5d029c Merge "ImgIoUtilReadFile: fix file leak upon error" -ae568ce7 ImgIoUtilReadFile: fix file leak upon error -796b5a8a Merge tag 'v0.6.1' -6b7a95fd update ChangeLog (tag: v0.6.1) -f66955de WEBP_REDUCE_CSP: restrict colorspace support -1af0df76 Merge "WEBP_REDUCE_CSP: restrict colorspace support" -6de20df0 WEBP_REDUCE_CSP: restrict colorspace support -a289d8e7 update ChangeLog (tag: v0.6.1-rc2) -c10a493c vwebp: disable double buffering on windows & mac -0d4466c2 webp_to_sdl.c: fix file mode -1b27bf8b WEBP_REDUCE_SIZE: disable all rescaler code -126be109 webpinfo: add -version option -0df22b9e WEBP_REDUCE_SIZE: disable all rescaler code -9add62b5 bump version to 0.6.1 -d3e26144 update NEWS -2edda639 README: add webpinfo section -9ca568ef Merge "right-size some tables" -31f1995c Merge "SSE2 implementation of HasAlphaXXX" -a80c46bd SSE2 implementation of HasAlphaXXX -083507f2 right-size some tables -2e5785b2 anim_utils.c: remove warning when !defined(WEBP_HAVE_GIF) -b299c47e add WEBP_REDUCE_SIZE -f593d71a enc: disable pic->stats/extra_info w/WEBP_DISABLE_STATS -541179a9 Merge "predictor_enc: fix build w/--disable-near-lossless" -5755a7ec predictor_enc: fix build w/--disable-near-lossless -eab5bab7 add WEBP_DISABLE_STATS -8052c585 remove some petty TODOs from vwebp. -c245343d move LOAD8x4 and STORE8x2 closer to their use location -b9e734fd dec,cosmetics: normalize function naming style -c188d546 dec: harmonize function suffixes -28c5ac81 dec_sse41: harmonize function suffixes -e65b72a3 Merge "introduce WebPHasAlpha8b and WebPHasAlpha32b" -b94cee98 dec_sse2: remove HE8uv_SSE2 -44a0ee3f introduce WebPHasAlpha8b and WebPHasAlpha32b -aebf59ac Merge "WebPPictureAllocARGB: align argb allocation" -c184665e WebPPictureAllocARGB: align argb allocation -3daf7509 WebPParseHeaders: remove obsolete animation TODO -80285d97 cmake: avoid security warnings under msvc -650eac55 cmake: don't set -Wall with MSVC -c462cd00 Remove useless code. -01a98217 Merge "remove WebPWorkerImpl declaration from the header" -3c49fc47 Merge "thread_utils: fix potentially bad call to Execute" -fde2782e thread_utils: fix potentially bad call to Execute -2a270c1d remove WebPWorkerImpl declaration from the header -f1f437cc remove mention of 'lossy-only parameters' from the doc -3879074d Merge "WebPMemToUint32: remove ptr cast to int" -04b029d2 WebPMemToUint32: remove ptr cast to int -b7971d0e dsp: avoid defining _C functions w/NEON builds -6ba98764 webpdec: correct alloc size check w/use_argb -5cfb3b0f normalize include guards -f433205e Merge changes Ia17c7dfc,I75423abb,Ia2f716b4,I161caa14,I4210081a, ... -8d033b14 {dec,enc}_neon: harmonize function suffixes x2 -0295e981 upsampling_neon: harmonize function suffixes -d572c4e5 yuv_neon: harmonize function suffixes -ab9c2500 rescaler_neon: harmonize function suffixes -93e0ce27 lossless_neon: harmonize function suffixes -22fbc50e lossless_enc_neon: harmonize function suffixes -447875b4 filters_neon,cosmetics: fix indent -e51bdd43 remove unused VP8TokenToStats() function -785da7ea enc_neon: harmonize function suffixes -bc1a251f dec_neon: harmonize function suffixes -61e535f1 dsp/lossless: workaround gcc-4.8 bug on arm -68b2eab7 cwebp: fix alpha reporting w/lossless & metadata -30042faa WebPDemuxGetI: add doc details around WebPFormatFeature -0a17f471 Merge "WIP: list includes as descendants of the project dir" -a4399721 WIP: list includes as descendants of the project dir -08275708 Merge "Make sure we reach the full range for alpha blending." -d361a6a7 yuv_sse2: harmonize function suffixes -6921aa6f upsampling_sse2: harmonize function suffixes -08c67d3e ssim_sse2: harmonize function suffixes -582a1b57 rescaler_sse2: harmonize function suffixes -2c1b18ba lossless_sse2: harmonize function suffixes -0ac46e81 lossless_enc_sse2: harmonize function suffixes -bc634d57 enc_sse2: harmonize function suffixes -bcb7347c dec_sse2: harmonize function suffixes -e14ad93c Make sure we reach the full range for alpha blending. -7038ca8d demux,StoreFrame: restore hdr size check to min req -fb3daad6 cpu: fix ssse3 check -be590e06 Merge "Fix CMake redefinition for HAVE_CPU_FEATURES_H" -35f736e1 Fix CMake redefinition for HAVE_CPU_FEATURES_H -a5216efc Fix integer overflow warning. -a9c8916b decode.h,WebPIDecGetRGB: clarify output ptr validity -3c74c645 gif2webp: handle 1-frame case properly + fix anim_diff -c7f295d3 Merge "gif2webp: introduce -loop_compatibility option" -b4e04677 gif2webp: introduce -loop_compatibility option -f78da3de add LOCAL_CLANG_PREREQ and avoid WORK_AROUND_GCC w/3.8+ -01c426f1 define WEBP_USE_INTRINSICS w/gcc-4.9+ -8635973d use sdl-config (if available) to determine the link flags -e9459382 use CPPFLAGS before CFLAGS -4a9d788e Merge "Android.mk,mips: fix clang build with r15" -4fbdc9fb Android.mk,mips: fix clang build with r15 -a80fcc4a ifdef code not used by Chrome/Android. -3993af12 Fix signed integer overflows. -f66f94ef anim_dump: small tool to dump frames from animated WebP -6eba857b Merge "rationalize the Makefile.am" -c5e34fba function definition cleanup -3822762a rationalize the Makefile.am -501ef6e4 configure style fix: animdiff -> anim_diff -f8bdc268 Merge "protect against NULL dump_folder[] value in ReadAnimatedImage()" -23bfc652 protect against NULL dump_folder[] value in ReadAnimatedImage() -8dc3d71b cosmetics,ReadAnimatedWebP: correct function comment -5bd40066 Merge changes I66a64a0a,I4d2e520f -7945575c cosmetics,webpinfo: remove an else after a return -8729fa11 cosmetics,cwebp: remove an else after a return -f324b7f9 cosmetics: normalize fn proto & decl param names -869eb369 CMake cleanups. -289e62a3 Remove declaration of unimplemented VP8ApplyNearLosslessPredict -20a94186 pnmdec,PAM: validate depth before calculating bytes_per_px -34130afe anim_encode: fix integer overflow -42c79aa6 Merge "Encoder: harmonize function suffixes" -b09307dc Encoder: harmonize function suffixes -bed0456d Merge "SSIM: harmonize the function suffix" -54f6a3cf lossless_sse2.c: fix some missed suffix changes -088f1dcc SSIM: harmonize the function suffix -86fc4dd9 webpdec: use ImgIoUtilCheckSizeArgumentsOverflow -08ea9ecd imageio: add ability restrict max image size -6f9daa4a jpegdec,ReadError: fix leaks on error -a0f72a4f VP8LTransformColorFunc: drop an non-respected 'const' from the signature. -8c934902 Merge "Lossess dec: harmonize the function suffixes" -622242aa Lossess dec: harmonize the function suffixes -1411f027 Lossless Enc: harmonize the function suffixes -24ad2e3c add const to two variables -46efe062 Merge "Allow the lossless cruncher to work for alpha." -8c3f9a47 Speed-up LZ77. -1aef4c71 Allow the lossless cruncher to work for alpha. -b8821dbd Improve the box LZ77 speed. -7beed280 add missing ()s to macro parameters -6473d20b Merge "fix Android standalone toolchain build" -dcefed95 Merge "build.gradle: fix arm64 build" -0c83a8bc Merge "yuv: harmonize suffix naming" -c6d1db4b fix Android standalone toolchain build -663a6d9d unify the ALTERNATE_CODE flag usage -73ea9f27 yuv: harmonize suffix naming -c71b68ac build.gradle: fix arm64 build -c4568b47 Rescaler: harmonize the suffix naming -6cb13b05 Merge "alpha_processing: harmonize the naming suffixes to be _C()" -83a3e69a Merge "simplify WEBP_EXTERN macro" -7295fde2 Merge "filters: harmonize the suffixes naming to _SSE2(), _C(), etc." -8e42ba4c simplify WEBP_EXTERN macro -331ab34b cost*.c: harmonize the suffix namings -b161f670 filters: harmonize the suffixes naming to _SSE2(), _C(), etc. -dec5e4d3 alpha_processing: harmonize the naming suffixes to be _C() -6878d427 fix memory leak in SDL_Init() -461ae555 Merge "configure: fix warnings in sdl check" -62486a22 configure: test for -Wundef -92982609 dsp.h: fix -Wundef w/__mips_dsp_rev -0265cede configure: fix warnings in sdl check -88c73d8a backward_references_enc.h: fix WINDOW_SIZE_BITS check -4ea49f6b rescaler_sse2.c: fix WEBP_RESCALER_FIX -> _RFIX typo -1b526638 Clean-up some CMake -87f57a4b Merge "cmake: fix gif lib detection when cross compiling" -b34a9db1 cosmetics,dec_sse2: remove some redundant comments -471c5755 cmake: fix gif lib detection when cross compiling -c793417a cmake: disable gif2webp if gif lib isn't found -dcbc1c88 cmake: split gif detection from IMG deps -66ad84f0 Merge "muxread: remove unreachable code" -50ec3ab7 muxread: remove unreachable code -7d67a164 Lossy encoding: smoothen transparent areas to improve compression -e50650c7 Merge "fix signature for DISABLE_TOKEN_BUFFER compilation" -671d2567 fix signature for DISABLE_TOKEN_BUFFER compilation -d6755580 cpu.cmake: use unique flag to test simd disable flags -28914528 Merge "Remove the argb* files." -8acb4942 Remove the argb* files. -3b62347b README: correct cmake invocation note -7ca0df13 Have the SSE2 version of PackARGB use common code. -7b250459 Merge "Re-use the transformed image when trying several LZ77 in lossless." -e132072f Re-use the transformed image when trying several LZ77 in lossless. -5d7a50ef Get code to compile in C++. -7b012987 configure: test for -Wparentheses-equality -f0569adb Fix man pages for multi-threading. -f1d5a397 multithread cruncher: only copy stats when picture->stats != NULL -f8c2ac15 Multi-thread the lossless cruncher. -a88c6522 Merge "Integrate a new LZ77 looking for matches in the neighborhood of a pixel only." -8f6df1d0 Unroll Predictors 10, 11 and 12. -355c3d1b Integrate a new LZ77 looking for matches in the neighborhood of a pixel only. -a1779a01 Refactor LZ77 handling in preparation for a new method. -67de68b5 Android.mk/build.gradle: fix mips build with clang from r14b -f209a548 Use the plane code and not the distance when computing statistics. -b903b80c Split cost-based backward references in its own file. -498cad34 Cosmetic changes in backward reference. -e4eb4587 lossless, VP8LTransformColor_C: make sure no overflow happens with colors. -af6deaff webpinfo: handle alpha flag mismatch -7caef29b Fix typo that creeped in. -39e19f92 Merge "near lossless: fix unsigned int overflow warnings." -9bbc0891 near lossless: fix unsigned int overflow warnings. -e1118d62 Merge "cosmetics,FindClosestDiscretized: use uint in mask creation" -186bc9b7 Merge "webpinfo: tolerate ALPH+VP8L" -b5887297 cosmetics,FindClosestDiscretized: use uint in mask creation -f1784aee near_lossless,FindClosestDiscretized: use unsigned ops -0d20abb3 webpinfo: tolerate ALPH+VP8L -972104b3 webpmux: tolerate false positive Alpha flag -dd7e83cc tiffdec,ReadTIFF: ensure data_size is < tsize_t max -d988eb7b tiffdec,MyRead: quiet -Wshorten-64-to-32 warning -dabda707 webpinfo: add support to parse Alpha bitstream -4c117643 webpinfo: correct background color output, BGRA->ARGB -defc98d7 Doc: clarify the role of quality in WebPConfig. -d78ff780 Merge "Fix code to compile with C++." -c8f14093 Fix code to compile with C++. -497dc6a7 pnmdec: sanitize invalid header output -d78e5867 Merge "configure: test for -Wconstant-conversion" -481e91eb Merge "pnmdec,PAM: set bytes_per_px based on depth when missing" -93b12753 configure: test for -Wconstant-conversion -645f0c53 pnmdec,PAM: set bytes_per_px based on depth when missing -e9154605 Merge "vwebp: activate GLUT double-buffering" -818d795b vwebp: activate GLUT double-buffering -d63e6f4b Add a man page for webpinfo -4d708435 Merge "NEON: implement ConvertRGB24ToY/BGR24/ARGB/RGBA32ToUV/ARGBToUV" -faf42213 NEON: implement ConvertRGB24ToY/BGR24/ARGB/RGBA32ToUV/ARGBToUV -b4d576fa Install man pages with CMake. -cbc1b921 webpinfo: add features to parse bitstream header -e644c556 Fix bad bit writer initialization. -b62cdad2 Merge "Implement a cruncher for lossless at method 6." -da3e4dfb use the exact constant for the gamma transfer function -a9c701e0 Merge "tiffdec: fix EXTRASAMPLES check" -adab8ce0 Implement a cruncher for lossless at method 6. -1b92b237 Merge "Fix VP8ApplyNearLossless to respect const and stride." -1923ff02 tiffdec: fix EXTRASAMPLES check -97cce5ba tiffdec: only request EXTRASAMPLES w/> 3 samples/px -0dcd85b6 Fix VP8ApplyNearLossless to respect const and stride. -f7682189 yuv: rationalize the C/SSE2 function naming -52245424 NEON implementation of some Sharp-YUV420 functions -690efd82 Avoid several backward reference copies. -4bb1f607 src/dec/vp8_dec.h, cosmetics: fix comments -285748be cmake: build/install webpinfo -78fd199c backward_references_enc.c: clear -Wshadow warnings -ae836410 WebPLog2FloorC: clear -Wshadow warning -d0b7404e Merge "WASM support" -134e314f WASM support -c08adb6f Merge "VP8LEnc: remove use of BitsLog2Ceiling()" -28c37ebd VP8LEnc: remove use of BitsLog2Ceiling() -2cb58ab2 webpinfo: output format as a human readable string -bb175a93 Merge "rename some symbols clashing with MSVC headers" -39eda658 Remove a duplicated pixel hash implementation. -36b8274d rename some symbols clashing with MSVC headers -274daf54 Add webpinfo tool. -ec5036e4 add explicit reference to /usr/local/{lib,inc} -18f0dfac Merge "fix TIFF encoder regarding rgbA/RGBA" -4e2b0b50 Merge "webpdec.h: fix a doc typo" -e2eeabff Merge "Install binaries, libraries and headers in CMake." -836607e6 webpdec.h: fix a doc typo -9273e441 fix TIFF encoder regarding rgbA/RGBA -17e3c11f Add limited PAM decoding support -5f624871 Install binaries, libraries and headers in CMake. -976adac1 Merge "lossless incremental decoding: fix missing eos_ test" -f8fad4fa lossless incremental decoding: fix missing eos_ test -27415d41 Merge "vwebp_sdl: fix the makefile.unix" -49566182 Merge "ImgIoUtilWriteFile(): use ImgIoUtilSetBinaryMode" -6f75a51b Analyze the transform entropy on the whole image. -a5e4e3af Use palette only if we can in entropy analysis. -75a9c3c4 Improve compression by better entropy analysis. -39cf6f4f vwebp_sdl: fix the makefile.unix -699b0416 ImgIoUtilWriteFile(): use ImgIoUtilSetBinaryMode -7d985bd1 Fix small entropy analysis bug. -6e7caf06 Optimize the color cache size. -833c9219 More efficient stochastic histogram merge. -5183326b Refactor the greedy histogram merge. -99f6f462 Merge "histogram_enc.c,MyRand: s/ul/u/ for unsigned constants" -80a22186 ssim.c: remove dead include -a128dfff histogram_enc.c,MyRand: s/ul/u/ for unsigned constants -693bf74e move the SSIM calculation code in ssim.c / ssim_sse2.c -10d791ca Merge "Fix the random generator in HistogramCombineStochastic." -fa63a966 Fix the random generator in HistogramCombineStochastic. -16be192f VP8LSetBitPos: remove the eos_ setting -027151ca don't erase the surface before blitting. -4105d565 disable WEBP_USE_XXX optimisations when EMSCRIPTEN is defined -9ee32a75 Merge "WebP-JS: emscripten-based Javascript decoder" -ca9f7b7d WebP-JS: emscripten-based Javascript decoder -868aa690 Perform greedy histogram merge in a unified way. -5b393f2d Merge "fix path typo for vwebp_sdl in Makefile.vc" -e0012bea CMake: only use libwebpdecoder for building dwebp -84c2a7b0 fix path typo for vwebp_sdl in Makefile.vc -1b0e4abf Merge "Add a flag to disable SIMD optimizations." -32263250 Add a flag to disable SIMD optimizations. -b494fdec optimize the ARGB->ARGB Import to use memcpy -f1536039 Merge "ReadWebP: decode directly into a pre-allocated buffer" -e69ed291 ReadWebP: decode directly into a pre-allocated buffer -57d8de8a Merge "vwebp_sdl: simple viewer based on SDL" -5cfd4ebc LZ77 interval speedups. Faster, smaller, simpler. -1e7ad88b PNM header decoder: add some basic numerical validation -17c7890c Merge "Add a decoder only library for WebP in CMake." -be733786 Merge "Add clang build fix for MSA" -03cda0e4 Add a decoder only library for WebP in CMake. -aa893914 Add clang build fix for MSA -31a92e97 Merge "imageio: add limited PNM support for reading" -dcf9d82a imageio: add limited PNM support for reading -6524fcd6 vwebp_sdl: simple viewer based on SDL -6cf24a24 get_disto: fix reference file read -43d472aa Merge tag 'v0.6.0' -50d1a848 update ChangeLog (tag: v0.6.0, origin/0.6.0) -20a7fea0 extras/Makefile.am: fix libwebpextras.la reference -415f3ffe update ChangeLog (tag: v0.6.0-rc3) -3c6d1224 update NEWS -ee4a4141 update AUTHORS -32ed856f Fix "all|no frames are keyframes" settings. -1c3190b6 Merge "Fix "all|no frames are keyframes" settings." -f4dc56fd disable GradientUnfilter_NEON -4f3e3bbd disable GradientUnfilter_NEON -2dc0bdca Fix "all|no frames are keyframes" settings. -0d8e0588 img2webp: treat -loop as a no-op w/single images -b0450139 ReadImage(): restore size reporting -0ad3b4ef update ChangeLog (tag: v0.6.0-rc2) -6451709e img2webp,get_disto: fix image decode w/WIC builds -92504d21 get_disto: make ReadPicture() return a bool -c3e4b3a9 update NEWS -3363eb6d man/img2webp.1: fix formatting warning -4d1312f2 update NEWS -36c42ea4 bump version to 0.6.0 -bb498a51 update AUTHORS -84cef16f Makefile.vc: fix CFG=debug-dynamic build -919f9e2f Merge "add .rc files for windows dll versioning" -f1ae8af4 Merge ".gitignore: add img2webp" -4689ce16 cwebp: add a -sharp_yuv option for 'sharp' RGB->YUV conversion -79bf46f1 rename the pretentious SmartYUV into SharpYUV -eb1dc89a silently expose use_delta_palette in the WebPConfig API -c85b0dde .gitignore: add img2webp -43d3f01a add .rc files for windows dll versioning -668e1dd4 src/{dec,enc,utils}: give filenames a unique suffix -0e6b7f33 Merge "iosbuild.sh: only add required headers to framework" -29ed6f9a iosbuild.sh: only add required headers to framework -71c53f1a NEON: speed-up strong filtering -73f567ea Merge "get_disto: remove redundant reader check" -9e14276f Merge "makefiles: prune get_disto & webp_quality deps" -99965bac Merge "Makefile.vc: add get_disto.exe, webp_quality.exe" -d4912238 get_disto: remove redundant reader check -ea482409 makefiles: prune get_disto & webp_quality deps -2ede5a19 Makefile.vc: add get_disto.exe, webp_quality.exe -a345068a ARM: speed up bitreader by avoiding tables -1dc82a6b Merge "introduce a generic GetCoeffs() function pointer" -8074b89e introduce a generic GetCoeffs() function pointer -749a45a5 Merge "NEON: implement alpha-filters (horizontal/vertical/gradient)" -74c053b5 Merge "NEON: fix overflow in SSE NxN calculation" -0a3aeff7 Merge "dsp: WebPExtractGreen function for alpha decompression" -1de931c6 NEON: implement alpha-filters (horizontal/vertical/gradient) -9b3aca40 NEON: fix overflow in SSE NxN calculation -1c07a3c6 dsp: WebPExtractGreen function for alpha decompression -9ed5e3e5 use pointers for WebPRescaler's in WebPDecParams -db013a8d Merge "ARM: don't use USE_GENERIC_TREE" -fcd4784d use a 8b table for C-version for clz() -fbb5c473 ARM: don't use USE_GENERIC_TREE -8fda5612 Merge "add a kSlowSSSE3 feature for CPUInfo" -86bbd245 add a kSlowSSSE3 feature for CPUInfo -7c2779e9 Get code to fully compile in C++. -250c3586 Merge "When compiling as C++, avoid narrowing warnings." -c0648ac2 When compiling as C++, avoid narrowing warnings. -0d55f60c 40% faster ApplyAlphaMultiply_SSE2 -49d0280d NEON: implement several alpha-processing functions -48b1e85f SSE2: 15% faster alpha-processing functions -e3b8abbc fix warning from static analysis. -28fe054e SSE2: 30% faster ApplyAlphaMultiply() -f44acd25 Merge "Properly compute the optimal color cache size." -527844fe Properly compute the optimal color cache size. -be0ef639 fix a comment typo -8874b162 Fix a non-deterministic color cache size computation. -d712e20d Do not allow a color cache size bigger than the number of colors. -ecff04f6 re-introduce some comments in Huffman Cost. -259e9828 replace 'ptr + y * stride' by 'ptr += stride' -00b08c88 Merge "NEON: 5% faster conversion to RGB565 and RGBA4444" -0e7f4447 Merge "NEON: faster fancy upsampling" -b016cb91 NEON: faster fancy upsampling -1cb63801 Call the C function to finish off lossless SSE loops only when necessary. -875fafc1 Implement BundleColorMap in SSE2. -3674d49e Merge "remove Clang warnings with unused arch arguments." -f04eb376 Merge tag 'v0.5.2' -341d711c NEON: 5% faster conversion to RGB565 and RGBA4444 -abb54827 remove Clang warnings with unused arch arguments. -ece9684f update ChangeLog (tag: v0.5.2-rc2, tag: v0.5.2, origin/0.5.2) -aa7744ca anim_util: quiet implicit conv warnings in 32-bit -d9120271 jpegdec: correct ContextFill signature -24eb3940 Remove some errors when compiling the code as C++. -a4a8e5f3 vwebp: clear canvas during resize w/o animation -67c25ad5 vwebp: clear canvas during resize w/o animation -a4bbe4b3 fix indentation -31ca2a80 tiffdec: restore libtiff 3.9.x compatibility -b2f77b57 update NEWS -5ab6d9de AnimEncoder: avoid freeing uninitialized memory pointer. -f29bf582 WebPAnimEncoder: If 'minimize_size' and 'allow_mixed' on, try lossy + lossless. -3ebe1c00 AnimEncoder: avoid freeing uninitialized memory pointer. -df780e0e fix a potential overflow with MALLOC_LIMIT -58fc5078 Merge "PredictorSub: implement fully-SSE2 version" -9cc42167 PredictorSub: implement fully-SSE2 version -0aa1f35c remove dependency of imageio/ to stopwatch.h -cb9ec84b Merge "remove the dependency to stop_watch.[ch] in imageio" -dc0c01fb Merge "anim_util: quiet implicit conv warnings in 32-bit" -827d3c50 Merge "fix a potential overflow with MALLOC_LIMIT" -1e2e25b0 anim_util: quiet implicit conv warnings in 32-bit -218460cd bump version to 0.5.2 -de7d654d update AUTHORS & .mailmap -273367c1 Merge "dsp/lossless.c,cosmetics: fix indent" -76bbcf2e fix a potential overflow with MALLOC_LIMIT -8ac1abfe Merge "jpegdec: correct ContextFill signature" -cb215aed remove the dependency to stop_watch.[ch] in imageio -2423017a dsp/lossless.c,cosmetics: fix indent -74a12b10 iosbuild.sh: add WebPDecoder.framework + encoder -a9cc7621 Merge "iosbuild.sh: add WebPDecoder.framework + encoder" -fbba5bc2 optimize predictor #1 in plain-C For some reason, gcc has hard time inlining this one... -9ae0b3f6 Merge "SSE2: slightly (~2%) faster Predictor #1" -c1f97bd7 SSE2: slightly (~2%) faster Predictor #1 -ea664b89 SSE2: 10% faster Predictor #11 -be7dcc08 AnimEncoder: Correctly skip a frame when sub-rectangle is empty. -40885830 Fix assertions in WebPRescalerExportRow() -1d5046d1 iosbuild.sh: add WebPDecoder.framework + encoder -cec72014 jpegdec: correct ContextFill signature -8f38c72e fix a typo in WebPPictureYUVAToARGB's doc -33ca93f9 systematically call WebPDemuxReleaseIterator() on dec->prev_iter_ -76e19073 doc: use two's complement explicitly for uint8->int8 conversion -f91ba963 Anim_encoder: correctly handle enc->prev_candidate_undecided_ -25d74e65 WebPPictureDistortion(): free() -> WebPSafeFree() -03f1c008 mux/Makefile.am: add missing -lm -58410cd6 fix bug in RefineUsingDistortion() -e168af8c fix filtering auto-adjustment -ed9dec41 fix doc and code snippet for WebPINewDecoder() doc -3c49178f prevent 32b overflow for very large canvas_width / height -9595f290 fix anim_util.c compilation when HAVE_GIF is not defined. -7ec9552c Make gif transparent color to be transparent black -b3fb8bb6 slightly faster Predictor #11 in NEON -9871335f Add a CMake option for WEBP_SWAP_16BIT_CSP. -0ae32226 Fix missing cpu-features for Android. -ab4c8056 cpu.cmake: improve webp_check_compiler_flag output -eec5fa3a Provide support for CMake on Android studio 2.2. -004d5690 Split the main CMake file. -4fe5d588 Android.mk: use -fvisibility=hidden -bd63a31a vwebp: ensure setenv() is available in stdlib.h -363a5681 vwebp: handle window resizing properly -a0d2753f lower WEBP_MAX_ALLOCABLE_MEMORY default -31fe11a5 fix infinite loop in case of PARTITION0 overflow -532215dd Change the rule of picking UV mode in MBAnalyzeBestUVMode() -9c75dbd3 cwebp.1: improve some grammar -af2e05cb vwebp: Clear previous frame when a key triggers a redraw -26ffa296 Add descriptions of default configuration in help info. -7416280d Fix an unsigned integer overflow error in enc/cost.h -13cf1d2e Do token recording and counting in a single loop -eb9a4b97 Reset segment id if we decide not to update segment map -42ebe3b7 configure: fix NEON flag detection under gcc 6 -76ebbfff NEON: implement predictor #13 -95b12a08 Merge "Revert Average3 and Average4" -54ab2e75 Revert Average3 and Average4 -fe12330c 3-5% faster Predictor #5, #6, #7 and #10 for NEON -fbfb3bef ~2% faster predictor #10 for NEON -d4b7d801 lossless_sse2: use the local functions -a5e3b225 Lossless decoder SSE2 improvements. -58a1f124 ~2% faster predictor #12 in NEON. -906c3b63 Merge "Implement lossless transforms in NEON." -d23abe4e Implement lossless transforms in NEON. -2e6cb6f3 Give more flexibility to the predictor generating macro. -28e0bb70 Merge "Fix race condition in multi-threading initialization." -64704530 Fix race condition in multi-threading initialization. -bded7848 img2webp: fix default -lossless value and use pic.argb=1 -0e61a513 Merge "img2webp: convert a sequence of images to an animated webp" -1cc79e92 AnimEncoder: Correctly skip a frame when sub-rectangle is empty. -03f40955 img2webp: convert a sequence of images to an animated webp -ea72cd60 add missing 'extern' keyword for predictor dcl -67879e6d SSE implementation of decoding predictors. -34aee990 Merge "vwebp: make 'd' key toggle the debugging of fragments" -a41296ae Fix potentially uninitialized value. -c85adb33 vwebp: make 'd' key toggle the debugging of fragments -4239a148 Make the lossless predictors work on a batch of pixels. -bc18ebad fix extra 'const's in signatures -71e2f5ca Remove memcpy in lossless decoding. -7474d46e Do not use a register array in SSE. -67748b41 Improve latency of FTransform2. -16951b19 Merge "Provide an SSE implementation of ConvertBGRAToRGB" -6540cd0e Provide an SSE implementation of ConvertBGRAToRGB -de568abf Android.mk: use -fvisibility=hidden -3c2a61b0 remove some unneeded casts -9ac063c3 add dsp functions for SmartYUV -22efabdd Merge "smart_yuv: switch to planar instead of packed r/g/b processing" -1d6e7bf3 smart_yuv: switch to planar instead of packed r/g/b processing -0a3838ca fix bug in RefineUsingDistortion() -c0699515 webpmux -duration: set default 'end' value equal to 'start' -83cbfa09 Import: use relative pointer offsets -a1ade40e PreprocessARGB: use relative pointer offsets -fd4d090f ConvertWRGBToYUV: use relative pointer offsets -9daad459 ImportYUVAFromRGBA: use relative pointer offsets -f90c60d1 Merge "add a "-duration duration,start,end" option to webpmux" -3f182d36 add a "-duration duration,start,end" option to webpmux -342e15f0 Import: use relative pointer offsets -1147ab4e PreprocessARGB: use relative pointer offsets -e4cd4daf fix filtering auto-adjustment -e7152856 fix doc and code snippet for WebPINewDecoder() doc -de9fa507 ConvertWRGBToYUV: use relative pointer offsets -deb1b831 ImportYUVAFromRGBA: use relative pointer offsets -c284780f imageio_util: add ImgIoUtilCheckSizeArgumentsOverflow -e375080d gifdec,Remap: avoid out of bounds colormap read -c222a053 additional fix for stride type as size_t -bb233617 fix potential overflow when width * height * 4 >= (1<<32) -883d41fb gif2webp: fix crash with NULL extension data -cac9a36a gifdec,Remap: avoid out of bounds colormap read -4595e01f Revert "gifdec,Remap: avoid out of bounds colormap read" -fb52d443 gifdec: make some constants unsigned -f048d38d gifdec,Remap: avoid out of bounds colormap read -31b1e343 fix SSIM metric ... by ignoring too-dark area -2f51b614 introduce WebPPlaneDistortion to compute plane distortion -0104d730 configure: fix NEON flag detection under gcc 6 -265abbe9 Merge "additional fix for stride type as size_t" -f7601aa6 Merge "Introduce a generic WebPGetImageReader(type) function" -ce873320 Introduce a generic WebPGetImageReader(type) function -2a2773ea imageio/*dec,Read*: add input parameter checks -9f5c8eca additional fix for stride type as size_t -4eb5df28 remove unused stride fields from VP8Iterator -11bc423a MIN_LENGTH cleanups. -273d035a Merge "fix a typo in WebPPictureYUVAToARGB's doc" -4db82a17 Merge "fix potential overflow when width * height * 4 >= (1<<32)" -e2affacc fix potential overflow when width * height * 4 >= (1<<32) -dc789ada fix a typo in WebPPictureYUVAToARGB's doc -539f5a68 Fix non-included header in config.c. -aaf2a6a6 systematically call WebPDemuxReleaseIterator() on dec->prev_iter_ -20ef9915 Merge "imageio_util: add ImgIoUtilCheckSizeArgumentsOverflow" -bc86b7a8 imageio_util: add ImgIoUtilCheckSizeArgumentsOverflow -806f6279 gif2webp: fix crash with NULL extension data -68ae5b67 Add libwebp/src/mux/animi.h -28ce3043 Remove some errors when compiling the code as C++. -b34abcb8 Favor keeping the areas locally similar in spatial prediction mode selection -ba843a92 fix some SSIM calculations -51b71fd2 Merge "vwebp: ensure setenv() is available in stdlib.h" -fb01743a get_disto: fix the r/g/b order for luma calculation -bfab8947 vwebp: ensure setenv() is available in stdlib.h -9310d192 vwebp: handle window resizing properly -f79450ca Speedup ApplyMap. -cfdda7c6 Merge "prevent 32b overflow for very large canvas_width / height" -e36396ba Merge "get_disto: new option to compute SSIM map and convert to gray" -18a9a0ab Add an API to import a color-mapped image. -30d43706 Speed-up Combined entropy for palettized histograms. -36aa087b get_disto: new option to compute SSIM map and convert to gray -86a84b35 2x faster SSE2 implementation of SSIMGet -b8384b53 lower WEBP_MAX_ALLOCABLE_MEMORY default -1c364400 prevent 32b overflow for very large canvas_width / height -eee0cce1 Merge "Small LZ77 speedups." -5f1caf29 Small LZ77 speedups. -1effde7b fix anim_util.c compilation when HAVE_GIF is not defined. -a2fe9bf4 Speedup TrellisQuantizeBlock(). -573cce27 smartYUV improvements -21e7537a fix infinite loop in case of PARTITION0 overflow -053a1565 Merge "Change the rule of picking UV mode in MBAnalyzeBestUVMode()" -1377ac2e Change the rule of picking UV mode in MBAnalyzeBestUVMode() -7c1fb7d0 fix uint32_t initialization (0. -> 0) -bfff0bf3 speed-up SSIM calculation -64577de8 De-VP8L-ize GetEntropUnrefinedHelper. -a7be7328 Merge "refactor the PSNR / SSIM calculation code" -50c3d7da refactor the PSNR / SSIM calculation code -d6228aed indentation fix after I7055d3ee3bd7ed5e78e94ae82cb858fa7db3ddc0 -dd538b19 Remove unused declaration. -6cc48b17 Move some lossless logic out of dsp. -78363e9e Merge "Remove a redundant call to InitLeft() in VP8IteratorReset()" -ffd01929 Refactor VP8IteratorNext(). -c4f6d9c9 Remove a redundant call to InitLeft() in VP8IteratorReset() -c27d8210 Merge "smartYUV: simplify main loop" -07795296 smartYUV: simplify main loop -c9b45863 Split off common lossless dsp inline functions. -490ae5b1 smartYUV: improve initial state for faster convergence -894232be smartYUV: fix and simplify the over-zealous stop criterion -8de08483 Remove unused code in webpi.h -41cab7fe imageio/Android.mk: correct imagedec dependencies -82c91c70 Merge "libimageenc.a: extract image-saving code from dwebp" -af1ad3e2 libimageenc.a: extract image-saving code from dwebp -dd7309e3 Merge "doc: use two's complement explicitly for uint8->int8 conversion" -6105777e Merge "add gif2webp to CMake" -13ae011e doc: use two's complement explicitly for uint8->int8 conversion -4bda0cfb add gif2webp to CMake -6029c7fe Merge "remove mention of fragment, frgm, FRGM, etc." -545c147f remove mention of fragment, frgm, FRGM, etc. -5b46f7fc cwebp.1: improve some grammar -9e478f80 dec/vp8l.c: add assertions in EmitRescaledRowsRGBA/YUVA -43bd8958 Make gif transparent color to be transparent black -0887fc2d Merge "get_disto: add a '-o file' option to save a diff map" -0de48e18 get_disto: add a '-o file' option to save a diff map -0a57ad0d cosmetics: WebPSafeAlloc -> WebPSafeMalloc -0a4699bc Merge "WebPPictureDistortion(): free() -> WebPSafeFree()" -29fedbf5 Anim_encoder: correctly handle enc->prev_candidate_undecided_ -32dead4e WebPPictureDistortion(): free() -> WebPSafeFree() -85cd5d06 Smarter LZ77 for uniform regions. -6585075f Change PixelsAreSimilar() to handle black pixels correctly. -c0a27fd2 vwebp: Clear previous frame when a key triggers a redraw -57a5e3b6 webp_quality should return '0' in case of success. -7f1b897b Faster stochastic histogram merging. -48c810b8 Merge "remove WEBP_FORCE_ALIGNED and use memcpy() instead." -3884972e remove WEBP_FORCE_ALIGNED and use memcpy() instead. -485cac1a switch libimagedec.a and libimageio_util.a to avoid undefined symbol -005e15b1 Merge "{extras,mux}/Makefile.am: add missing -lm" -6ab496ed fix some 'unsigned integer overflow' warnings in ubsan -8a4ebc6a Revert "fix 'unsigned integer overflow' warnings in ubsan" -9d4f209f Merge changes I25711dd5,I43188fab -e44f5248 fix 'unsigned integer overflow' warnings in ubsan -27b5d991 Fix assertions in WebPRescalerExportRow() -74f6f9e7 Add descriptions of default configuration in help info. -aaf2530c {extras,mux}/Makefile.am: add missing -lm -1269dc7c Refactor VP8LColorCacheContains() -40872fb2 dec_neon,NeedsHev: micro optimization -7b54e26b Add a CMake option for WEBP_SWAP_16BIT_CSP. -d2223d8d Fix missing cpu-features for Android. -bf16a4b4 Merge "cpu.cmake: improve webp_check_compiler_flag output" -ee1057e3 cpu.cmake: improve webp_check_compiler_flag output -b551e587 cosmetics: add {}s on continued control statements -d2e4484e dsp/Makefile.am: put msa source in correct lib -c7f66c82 Merge "utils/thread.c,cosmetics: join a few lines" -98d8f295 Merge "examples/Makefile.am,cosmetics: sort binary targets" -39f4ffbc utils/thread.c,cosmetics: join a few lines -a86ce2b1 Merge "extras/Makefile.am: don't install libwebpextras" -6fa9fe24 extras/Makefile.am: don't install libwebpextras -0b2c58a9 Fix an unsigned integer overflow error in enc/cost.h -d7ce4a2e examples/Makefile.am,cosmetics: sort binary targets -386e4ba2 Reset segment id if we decide not to update segment map -7b87e848 Merge "Add MSA optimized YUV to RGB upsampling functions" -d3ddacb6 Add MSA optimized YUV to RGB upsampling functions -eb98d8d8 webp_quality: detect lossless format and features -ebee57f4 move imageio/example_util.[hc] (back to) examples/ -99542bbf webpdec: s/ExUtil// -da573cf4 imageio_util: s/ExUtil/ImgIoUtil/ -bdda5bd4 split example_util.h -15ed462b .gitignore: add extras/{get_disto,webp_quality} -7be57489 Merge "VP8EstimateQuality(): roughty estimate webp bitstream quality factor" -57020525 Makefile.vc: add missing imageio target -e8ab6a82 VP8EstimateQuality(): roughty estimate webp bitstream quality factor -fee7b3d6 Merge "'extras/get_disto' example: compute PSNR between two files" -1e7d4401 'extras/get_disto' example: compute PSNR between two files -4cecab63 pngdec.c,jpegdec.[hc]: remove unnecessary includes -259f0434 makefile.unix: normalize image decode lib name -ed34c39b fix: examples/libexample_dec.a => imageio/libexample_dec.a -33d8d0d4 Merge "move examples/{example_util,image_dec} to imageio/" -c960b82e Merge "extras.h: correct include guard" -fe3cd28a Merge ".gitignore: add .gradle, /build" -45fbeba5 Merge "Do token recording and counting in a single loop" -4f33c820 .gitignore: add .gradle, /build -c379b55a move examples/{example_util,image_dec} to imageio/ -5108d9aa extras.h: correct include guard -ad497fbc move src/extras to the top-level -0c0fb832 Do token recording and counting in a single loop -9ac74f92 Add MSA optimized rescaling functions -cb19dbc1 Add MSA optimized color transform functions -3f4042b5 WebPAnimEncoder: If 'minimize_size' and 'allow_mixed' on, try lossy + lossless. -5e2eb89e cosmetics,dsp/*msa.c: associate '*' with the type -5b60db5c FastMBAnalyze() for quick i16/i4 decision -567e6977 Add MSA optimized CollectHistogram function -c54ab8dd Add MSA optimized quantization functions -ec6f68c5 Merge "Remove QuantizeBlockWHT() in enc.c" -2a5c417c Apply the RLE heuristic to LZ77. -91b59e88 Remove QuantizeBlockWHT() in enc.c -fe572737 Add MSA optimized SSE functions -6b53ca87 cosmetics,(dec|enc)_sse2.c: fix indent -b15d00d9 Merge "Add MSA optimized encoder IntraChromaPreds function" -afe3cec8 Add MSA optimized encoder IntraChromaPreds function -fc8cad9f reduce the number of malloc/free cycles in huffman.c -7b4b05e0 Add MSA optimized encoder Intra16Preds function -c18787a0 Add MSA optimized encoder Intra4Preds function -479d1908 webpmux: Also print compression info per frame. -a80e8cfd Provide support for CMake on Android studio 2.2. -6c628410 Split the main CMake file. -bbb6ecd9 Merge "Add MSA optimized distortion functions" -7915396f Add MSA optimized distortion functions -652e944f Merge "build.gradle: remove tab" -c0991a14 io,EmitRescaledAlphaYUV: factor out a common expr -48bf5ed1 build.gradle: remove tab -bfef6c9f Merge tag 'v0.5.1' -3d97bb75 update ChangeLog (tag: v0.5.1, origin/0.5.1) -deb54d91 Clarify the expected 'config' lifespan in WebPIDecode() -435308e0 Add MSA optimized encoder transform functions -dce64bfa Add MSA optimized alpha filter functions -429120d0 Add MSA optimized color transform functions -c7e2d245 update ChangeLog (tag: v0.5.1-rc5) -55b2fede normalize the macros' "do {...} while (0)" constructs -701c772e Add MSA optimized colorspace conversion functions -c7eb06f7 Fix corner case in CostManagerInit. -f918cb10 fix rescaling bug: alpha plane wasn't filled with 0xff -ab7937a5 gif2webp: normalize the number of .'s in the help message -3cdec847 vwebp: normalize the number of .'s in the help message -bdf6241e cwebp: normalize the number of .'s in the help message -06a38c7b fix rescaling bug: alpha plane wasn't filled with 0xff -319e37be Improve lossless compression. -6a197937 Add MSA optimized intra pred chroma functions -447adbce 'our bug tracker' -> 'the bug tracker' -97b9e644 normalize the number of .'s in the help message -293d786f Added MSA optimized intra prediction 16x16 functions -0afa0ce2 Added MSA optimized intra prediction 4x4 functions -a6621bac Added MSA optimized simple edge filtering functions -bb50bf42 pngdec,ReadFunc: throw an error on invalid read -38063af1 decode.h,WebPGetInfo: normalize function comment -1ebf193c Added MSA optimized chroma edge filtering functions -9ad2352d Merge "Added MSA optimized edge filtering functions" -60751096 Added MSA optimized edge filtering functions -9e8e1b7b Inline GetResidual for speed. -7d58d1b7 Speed-up uniform-region processing. -8ec7032b simplify HistogramCombineEntropyBin() -23e29cb1 Merge "Fix a boundary case in BackwardReferencesHashChainDistanceOnly." into 0.5.1 -472a049b remove bin_map[] allocation altogether -0bb23b2c free -> WebPSafeFree() -a977b4b5 Merge "rewrite the bin_map clustering to use less memory" -3591ba66 rewrite the bin_map clustering to use less memory -e6ac450c utils.[hc]: s/MAX_COLOR_COUNT/MAX_PALETTE_SIZE/ -e7b91772 Merge "DecodeImageData(): change the incorrect assert" into 0.5.1 -2abfa54f DecodeImageData(): change the incorrect assert -5a48fcd8 Merge "configure: test for -Wfloat-conversion" -0174d18d Fix a boundary case in BackwardReferencesHashChainDistanceOnly. -6a9c262a Merge "Added MSA optimized transform functions" -cfbcc5ec Make sure to consider small distances in LZ77. -5e60c42a Added MSA optimized transform functions -3dc28d76 configure: test for -Wfloat-conversion -f2a0946a add some asserts to delimit the perimeter of CostManager's operation -9a583c66 fix invalid-write bug for alpha-decoding -f66512db make gradlew executable -6fda58f1 backward_references: quiet double->int warning -a48cc9d2 Merge "Fix a compression regression for images with long uniform regions." into 0.5.1 -cc2720c1 Merge "Revert an LZ77 boundary constant." into 0.5.1 -059aab4f Fix a compression regression for images with long uniform regions. -b0c7e49e Check more backward matches with higher quality. -a3611513 Revert an LZ77 boundary constant. -8190374c README: fix typo -7551db44 update NEWS -0fb2269c bump version to 0.5.1 -f4537610 update AUTHORS & .mailmap -3259571e Refactor GetColorPalette method. -1df5e260 avoid using tmp histogram in PreparePair() -7685123a fix comment typos -a246b921 Speedup backward references. -76d73f18 Merge "CostManager: introduce a free-list of ~10 intervals" -eab39d81 CostManager: introduce a free-list of ~10 intervals -4c59aac0 Merge "mips msa webp configuration" -043c33f1 Merge "Improve speed and compression in backward reference for lossless." -71be9b8c Merge "clarify variable names in HistogramRemap()" -0ba7fd70 Improve speed and compression in backward reference for lossless. -0481d42a CostManager: cache one interval and re-use it when possible -41b7e6b5 Merge "histogram: fix bin calculation" -96c3d624 histogram: fix bin calculation -fe9e31ef clarify variable names in HistogramRemap() -ce3c8247 disable near-lossless quantization if palette is used -e11da081 mips msa webp configuration -5f8f998d mux: Presence of unknown chunks should trigger VP8X chunk output. -cadec0b1 Merge "Sync mips32 and dsp_r2 YUV->RGB code with C verison" -d9637758 Compute the hash chain once and for all for lossless compression. -50a48665 Sync mips32 and dsp_r2 YUV->RGB code with C verison -eee788e2 Merge "introduce a common signature for all image reader function" -d77b877c introduce a common signature for all image reader function -ca8d9519 remove some obsolete TODOs -ae2a7222 collect all decoding utilities from examples/ in libexampledec.a -0b8ae852 Merge "Move DitherCombine8x8 to dsp/dec.c" -77cad885 Merge "ReadWebP: avoid conversion to ARGB if final format is YUVA" -ab8d6698 ReadWebP: avoid conversion to ARGB if final format is YUVA -f8b7ce9e Merge "test pointer to NULL explicitly" -5df6f214 test pointer to NULL explicitly -77f21c9c Move DitherCombine8x8 to dsp/dec.c -c9e6d865 Add gradle support -c65f41e8 Revert "Add gradle support" -bf731ede Add gradle support -08333b85 WebPAnimEncoder: Detect when canvas is modified, restore only when needed. -0209d7e6 Merge "speed-up MapToPalette() with binary search" -fdd29a3d speed-up MapToPalette() with binary search -cf4a651b Revert "Refactor GetColorPalette method." -0a27aca3 Merge changes Idfa8ce83,I19adc9c4 -f25c4406 WebPAnimEncoder: Restore original canvas between multiple encodes. -169004b1 Refactor GetColorPalette method. -576362ab VP8LDoFillBitWindow: support big-endian in fast path -ac49e4e4 bit_reader.c: s/VP8L_USE_UNALIGNED_LOAD/VP8L_USE_FAST_LOAD/ -d39ceb58 VP8LDoFillBitWindow: remove stale TODO -2ec2de14 Merge "Speed-up BackwardReferencesHashChainDistanceOnly." -3e023c17 Speed-up BackwardReferencesHashChainDistanceOnly. -f2e1efbe Improve near lossless compression when a prediction filter is used. -e15afbce dsp.h: fix ubsan macro name -e53c9ccb dsp.h: add WEBP_UBSAN_IGNORE_UNSIGNED_OVERFLOW -af81fdb7 utils.h: quiet -fsanitize=undefined warnings -ea0be354 dsp.h: remove utils.h include -cd276aec utils/*.c: ../utils/utils.h -> ./utils.h -c8927131 utils/Makefile.am: add some missing headers -ea24e026 Merge "dsp.h: add WEBP_UBSAN_IGNORE_UNDEF" -369e264e dsp.h: add WEBP_UBSAN_IGNORE_UNDEF -0d020a78 Merge "add runtime NEON detection" -5ee2136a Merge "add VP8LAddPixels() to lossless.h" -47435a61 add VP8LAddPixels() to lossless.h -8fa6ac68 remove two ubsan warnings -74fb56fb add runtime NEON detection -4154a839 MIPS update to new Unfilter API -c80b9fc8 Merge "cherry-pick decoder fix for 64-bit android devices" -6235147e cherry-pick decoder fix for 64-bit android devices -d41b8c43 configure: test for -Wformat-* w/-Wformat present -5f95589f Fix WEBP_ALIGN in case the argument is a pointer to a type larger than a byte. -2309fd5c replace num_parts_ by num_parts_minus_one_ (unsigned) -9629f4bc SimplifySegments: quiet -Warray-bounds warning -de47492e Merge "update the Unfilter API in dsp to process one row independently" -2102ccd0 update the Unfilter API in dsp to process one row independently -e3912d56 WebPAnimEncoder: Restore canvas before evaluating blending possibility. -6e12e1e3 WebPAnimEncoder: Fix for single-frame optimization. -602f344a Merge changes I1d03acac,Ifcb64219 -95ecccf6 only apply color-mapping for alpha on the cropped area -47dd0708 anim_diff: Add an experimental option for max inter-frame diff. -aa809cfe only allocate alpha_plane_ up to crop_bottom row -31f2b8d8 WebPAnimEncoder: FlattenSimilarPixels(): look for similar -774dfbdc perform alpha filtering within the decoding loop -a4cae68d lossless decoding: only process decoded row up to last_row -238cdcdb Only call WebPDequantizeLevels() on cropped area -cf6c713a alpha: preparatory cleanup -b95ac0a2 Merge "VP8GetHeaders(): initialize VP8Io with sane value for crop/scale dimensions" -89231394 VP8GetHeaders(): initialize VP8Io with sane value for crop/scale dimensions -5828e199 use_8b_decode -> use_8b_decode_ -8dca0247 fix bug in alpha.c that was triggering a memory error in incremental mode -9a950c53 WebPAnimEncoder: Disable filtering when blending is used with lossy encoding. -eb423903 WebPAnimEncoder: choose max diff for framerect based on quality. -ff0a94be WebPAnimEncoder lossy: ignore small pixel differences for frame rectangles. -f8040084 gif2webp: Remove the 'prev_to_prev_canvas' buffer. -6d8c07d3 Merge "WebPDequantizeLevels(): use stride in CountLevels()" -d96fe5e0 WebPDequantizeLevels(): use stride in CountLevels() -ec1b2407 WebPPictureImport*: check output pointer -c0768769 Merge "Revert "Re-enable encoding of alpha plane with color cache for next release."" -41f14bcb WebPPictureImport*: check src pointer -64eed387 Pass stride parameter to WebPDequantizeLevels() -97934e24 Revert "Re-enable encoding of alpha plane with color cache for next release." -e88c4ca0 fix -m 2 mode-cost evaluation (causing partition0 overflow) -4562e83d Merge "add extra meaning to WebPDecBuffer::is_external_memory" -abdb109f add extra meaning to WebPDecBuffer::is_external_memory -875aec70 enc_neon,cosmetics: break long comment -71e856cf GetMBSSIM,cosmetics: fix alignment -a90edffb fix missing 'extern' for SSIM function in dsp/ -423ecaf4 move some SSIM-accumulation function for dsp/ -f08e6624 Merge "Fix FindClosestDiscretized in near lossless:" -0d40cc5e enc_neon,Disto4x4: remove an unnecessary transpose -e8feb20e Fix FindClosestDiscretized in near lossless: -82006430 anim_util: quiet static analysis warning -a6f23c49 Merge "AnimEncoder: Support progress hook and user data." -a5193774 Merge "Near lossless feature: fix some comments." -da98d31c AnimEncoder: Support progress hook and user data. -33357131 Near lossless feature: fix some comments. -0beed01a cosmetics: fix indent after 2f5e898 -6753f35c Merge "FTransformWHT optimization." -6583bb1a Improve SSE4.1 implementation of TTransform. -7561d0c3 FTransformWHT optimization. -7ccdb734 fix indentation after patch #328220 -6ec0d2a9 clarify the logic of the error path when decoding fails. -8aa352b2 Merge "Remove an unnecessary transposition in TTransform." -db860884 Merge "remove useless #include" -9960c316 Remove an unnecessary transposition in TTransform. -6e36b511 Small speedup in FTransform. -9dbd4aad Merge "fix C and SIMD flags completion." -e60853ea Add missing common_sse2.h file to makefile.unix -696eb2b0 fix C and SIMD flags completion. -2b4fe33e Merge "fix multiple allocation for transform buffer" -2f5e8986 fix multiple allocation for transform buffer -bf2b4f11 Regroup common SSE code + optimization. -4ed650a1 force "-pass 6" if -psnr or -size is used but -pass isn't. -3ef1ce98 yuv_sse2: fix -Wconstant-conversion warning -a7a03e9f Merge changes I4852d18f,I51ccb85d -5e122bd6 gif2webp: set enc_options.verbose = 0 w/-quiet -ab3c2583 anim_encode,DefaultEncoderOptions: init verbose -8f0dee77 Merge "configure: fix builtin detection w/-Werror" -4a7b85a9 cmake: fix builtin detection w/-Werror -b74657fb configure: fix builtin detection w/-Werror -3661b980 Add a CMakeLists.txt -75f4af4d remove useless #include -6c1d7631 avoid Yoda style for comparison -8ce975ac SSE optimization for vector mismatch. -7db53831 Merge tag 'v0.5.0' -37f04949 update ChangeLog (tag: v0.5.0-rc1, tag: v0.5.0, origin/0.5.0) -7e7b6ccc faster rgb565/rgb4444/argb output -4c7f565f update NEWS -1f62b6b2 update AUTHORS -e224fdc8 update mailmap -71100500 bump version to 0.5.0 -230a685e README: update help text, repo link -d48e427b Merge "demux: accept raw bitstreams" -99a01f4f Merge "Unify some entropy functions." -4b025f10 Merge "configure: disable asserts by default" -92cbddf8 Merge "fix PrintBlockInfo()" -ca509a33 Unify some entropy functions. -367bf903 fix PrintBlockInfo() -b0547ff0 move back common constants for lossless_enc*.c into the .h -fb4c7832 lossless: simpler alpha cleanup preprocessing -ba7f4b68 Merge "anim_diff: add brief description of options" -47ddd5a4 Move some codec logic out of ./dsp . -b4106c44 anim_diff: add brief description of options -357f455d yuv_sse2: fix 32-bit visual studio build -b9d80fa4 configure: disable asserts by default -7badd3da cosmetic fix: sizeof(type) -> sizeof(*var) -80ce27d3 Speed up 24-bit packing / unpacking in YUV / RGB conversions. -68eebcb0 remove a TODO about rotation -2dee2966 remove few obsolete TODO about aligned loads in SSE2 -e0c0bb34 remove TODO about unused ref_lf_delta[] -9cf1cc2b remove few TODO: * 256 -> RD_DISTO_MULT * don't use TDisto for UV mode picking -79189645 Merge changes from topic 'demux-fragment-cleanup' -47399f92 demux: remove GetFragment() -d3cfb79a demux: remove dead fragment related TODO -ab714b8a demux, Frame: remove is_fragment_ field -b105921c yuv_sse2, cosmetics: fix indent -466c92e8 demux,WebPIterator: remove fragment_num/num_fragments -11714ff1 demux: remove WebPDemuxSelectFragment -c0f7cc47 fix for bug #280: UMR in next->bits -578beeb8 Merge "enc/Makefile.am: add missing headers" -1a819f00 makefile.unix: make visibility=hidden the default -d4f9c2ef enc/Makefile.am: add missing headers -846caff4 configure: check for -fvisibility=hidden -3f3ea2c5 demux: accept raw bitstreams -d6dad5d0 man cwebp: add precision about exactness of the 'lossless' mode -46bb1e34 Merge "gifdec: remove utils.h include" -2b882e94 Merge "Makefile.vc: define WEBP_HAVE_GIF for gifdec.c" -892b9238 Merge "man/*, AUTHORS: clarify origin of the tool" -e5687a18 Merge "fix optimized build with -mcmodel=medium" -e56e6859 Makefile.vc: define WEBP_HAVE_GIF for gifdec.c -4077d944 gifdec: remove utils.h include -b5e30dac man/*, AUTHORS: clarify origin of the tool -b275e598 fix optimized build with -mcmodel=medium -64da45a9 cosmetics, cwebp: fix indent -038a060d Merge "add disto-based refinement for UV mode (if method = 1 or 2)" -2835089d Provide an SSE2 implementation of CombinedShannonEntropy. -e6c93519 add disto-based refinement for UV mode (if method = 1 or 2) -04507dc9 Merge "fix undefined behaviour during shift, using a cast" -793c5261 Merge "wicdec: add support for reading from stdin" -d3d16397 Optimize the heap usage in HistogramCombineGreedy. -202a710b fix undefined behaviour during shift, using a cast -14d27a46 improve method #2 by merging DistoRefine() and SimpleQuantize() -cb1ce996 Merge "10% faster table-less SSE2/NEON version of YUV->RGB conversion" -ac761a37 10% faster table-less SSE2/NEON version of YUV->RGB conversion -79fcf29a wicdec: add support for reading from stdin -015f173f Merge "cwebp: add support for stdin input" -a9947c32 cwebp: add support for stdin input -7eb01ff3 Merge "Improved alpha cleanup for the webp encoder when prediction transform is used." -fb8c9106 Merge "introduce WebPMemToUint32 and WebPUint32ToMem for memory access" -bd91af20 Merge "bit_reader: remove aarch64 BITS TODO" -6c702b81 Speed up hash chain initialization using memset. -4c60f63c make ReadPNG and ReadJPEG take a filename instead of a FILE -464ed10f bit_reader: remove aarch64 BITS TODO -d478e589 Merge "configure: update issue tracker" -69381113 Improved alpha cleanup for the webp encoder when prediction transform is used. -2c08aac8 introduce WebPMemToUint32 and WebPUint32ToMem for memory access -010ca3d1 Fix FindMatchLength with non-aligned buffers. -a90e1e3f README: add prerequisites for an autoconf build -458f0866 configure: update issue tracker -33914595 vwebp: work around the transparent background with GLUT bug -e4a7eed4 cosmetics: fix indent -08375129 Merge "Make a separate case for low_effort in CopyImageWithPrediction" -aa2eb2d4 Merge "cosmetics: fix indent" -b7551e90 cosmetics: fix indent -5bda52d4 Make a separate case for low_effort in CopyImageWithPrediction -66fa598a Merge "configure: fix intrinsics build w/older gcc" -5ae220be backward_references.c: Fixed compiler warning -1556da09 Merge "configure: restore 2 warnings" -71a17e58 configure: restore 2 warnings -9eeabc07 configure: fix intrinsics build w/older gcc -363babe2 Merge "fix some warning about unaligned 32b reads" -a1411782 Optimization in hash chain comparison for 64 bit Arrays were compared 32 bits at a time, it is now done 64 bits at a time. Overall encoding speed-up is only of 0.2% on @skal's small PNG corpus. It is of 3% on my initial 1.3 Mp desktop screenshot image. -829bd141 Combine Huffman cost and bit entropy into one loop -a7a954c8 Merge "lossless: make prediction in encoder work per scanline" -61b605b4 Merge "fix of undefined multiply (int32 overflow)" -239421c5 lossless: make prediction in encoder work per scanline -f5ca40e0 fix of undefined multiply (int32 overflow) -5cd2ef4c Merge changes from topic 'win-threading-compat' -76ce9187 Makefile.vc: enable WEBP_USE_THREAD for windows phone -d2afe974 thread: use CreateThread for windows phone -0fd0e12b thread: use WaitForSingleObjectEx if available -63fadc9f thread: use InitializeCriticalSectionEx if available -110ad583 thread: use native windows cond var if available -912c9fdf dec/webp: use GetLE(24|32) from utils -f1694481 utils/GetLE32: correct uint32 promotion -158763de Merge "always call WebPInitSamplers(), don't try to be smart" -3770f3bb Merge "cleanup the YFIX/TFIX difference by removing some code and #define" -a40f60a9 Merge "3% speed improvement for lossless webp encoder for low effort mode:" -ed1c2bc6 always call WebPInitSamplers(), don't try to be smart -b8c44f1a 3% speed improvement for lossless webp encoder for low effort mode: -997e1038 cleanup the YFIX/TFIX difference by removing some code and #define -d73d1c8b Merge "Make discarding invisible RGB values (cleanup alpha) the default." -1f9be97c Make discarding invisible RGB values (cleanup alpha) the default. -f240117b Make dwebp listen more to the -quiet flag -b37b0179 fix for issue #275: don't compare to out-of-bound pointers -21735e06 speed-up trivial one-symbol decoding case for lossless -397863bd Refactor CopyPlane() and CopyPixels() methods: put them in utils. -6ecd72f8 Re-enable encoding of alpha plane with color cache for next release. -1f7148a4 Merge "remove unused fields from WebPDecoderOptions and WebPBitstreamFeatures" -6ae395fa Merge "use ExReadFile() for ReadYUV()" -8076a00e gitignore list: add anim_diff. -1c1702d8 use ExReadFile() for ReadYUV() -775d3a37 remove unused fields from WebPDecoderOptions and WebPBitstreamFeatures -c13245c7 AnimEncoder: Add a GetError() method. -688b265d AnimDecoder API: Add a GetDemuxer() method. -1aa4e3d6 WebPAnimDecoder: add an option to enable multi-threaded decoding. -3584abca AnimDecoder: option to decode to common color modes. -afd5a62c Merge "mux.h does NOT need to include encode.h" -8550d443 Merge "migrate anim_diff tool from C++ to C89" -96201e50 migrate anim_diff tool from C++ to C89 -945cfa3b mux.h does NOT need to include encode.h -8da07e8d Merge "~2x faster SSE2 RGB24toY, BGR24toY, ARGBToY|UV" -bfd3fc02 ~2x faster SSE2 RGB24toY, BGR24toY, ARGBToY|UV -02432427 man/cwebp.1, cosmetics: escape '-'s -96f5b423 man/cwebp: group lossy-only options -52fdbdfe extract some RGB24 to Luma conversion function from enc/ to dsp/ -ab8c2300 add missing \n -8304179a sync NEWS with 0.4.4 -5bd04a08 sync versions with 0.4.4 -8f1fcc15 Merge "Move ARGB->YUV functions from dec/vp8l.c to dsp/yuv.c" -25bf2ce5 fix some warning about unaligned 32b reads -922268fd s/TIFF/WebP -fa8927ef Move ARGB->YUV functions from dec/vp8l.c to dsp/yuv.c -9b373598 Merge "for ReadXXXX() image-readers, use the value of pic->use_argb" -f7c507a5 Merge "remove unnecessary #include "yuv.h"" -7861578b for ReadXXXX() image-readers, use the value of pic->use_argb -14e4043b remove unnecessary #include "yuv.h" -469ba2cd vwebp: fix incorrect clipping w/NO_BLEND -4b9186b2 update issue tracker url -d64d376c change WEBP_ALIGN_CST value to 31 -f717b828 vp8l.c, cosmetics: fix indent after 95509f9 -927ccdc4 Merge "fix alignment of allocated memory in AllocateTransformBuffer" -fea94b2b fix alignment of allocated memory in AllocateTransformBuffer -5aa8d61f Merge "MIPS: rescaler code synced with C implementation" -e7fb267d MIPS: rescaler code synced with C implementation -93c86ed5 Merge "format_constants.h: MKFOURCC, correct cast" -5d791d26 format_constants.h: MKFOURCC, correct cast -65726cd3 dsp/lossless: Average2, make a constant unsigned -d26d9def Use __has_builtin to check clang support -12ec204e moved ALIGN_CST into util/utils.h and renamed WEBP_ALIGN_xxx -a2640838 Merge "rescaler: ~20% faster SSE2 implementation for lossless ImportRowExpand" -3fb600d5 Merge "wicdec: fix alpha detection w/64bpp BGRA/RGBA" -67c547fd rescaler: ~20% faster SSE2 implementation for lossless ImportRowExpand -99e3f812 Merge "large re-organization of the delta-palettization code" -95509f99 large re-organization of the delta-palettization code -74fb458b fix for weird msvc warning message -ae49ad86 Merge "SSE2 implementation of ImportRowShrink" -932fd4df SSE2 implementation of ImportRowShrink -badfcbaa wicdec: fix alpha detection w/64bpp BGRA/RGBA -35cafa6c Merge "iosbuild: fix linking with Xcode 7 / iOS SDK 9" -b0c9d8af label rename: NO_CHANGE -> NoChange -b4e731cd neon-implementation for rescaler code -db1321a6 iosbuild: fix linking with Xcode 7 / iOS SDK 9 -6dfa5e3e rescaler: better handling of the fxy_scale=0 special case. -55c05293 Revert "rescaler: better handling of the fxy_scale=0 special case." -9f226bf8 rescaler: better handling of the fxy_scale=0 special case. -f7b8f907 delta_palettization.*: add copyright -c1e1b710 Changed delta palette to compress better -0dd28267 Merge "Add delta_palettization feature to WebP" -48f66b66 Add delta_palettization feature to WebP -27933e2a anim_encoder: drop a frame if it has same pixels as the prev frame. -df9f6ec8 Merge "webpmux/DisplayInfo: send non-error output to stdout" -8af4993b Merge "rescaler_mips_dsp_r2: cosmetics, fix indent" -2b9d2495 Merge "rescaler: cosmetics, join two lines" -cc020a8c webpmux/DisplayInfo: send non-error output to stdout -a288e746 configure: add -Wshorten-64-to-32 -c4c3cf2d pngdec: fix type conversion warnings -bef8e97d webpmux: fix type conversion warning -5a84460d rescaler_mips_dsp_r2: cosmetics, fix indent -acde0aae rescaler: cosmetics, join two lines -306ce4fd rescaler: move the 1x1 or 2x1 handling one level up -cced974b remove _mm_set_epi64x(), which is too specific -56668c9f fix warnings about uint64_t -> uint32_t conversion -76a7dc39 rescaler: add some SSE2 code -1df1d0ee rescaler: harmonize function protos -9ba1894b rescaler: simplify ImportRow logic -5ff0079e fix rescaler vertical interpolation -cd82440e VP8LAllocateHistogramSet: align histogram[] entries -a406b1dd Merge "fix memory over-allocation in lossless rescaler init" -0fde33e3 add missing const in VP8InitFrame signature -ac7d5e8d fix memory over-allocation in lossless rescaler init -017f8ccc Loosen the buffer size checks for Y/U/V/A too. -15ca5014 loosen the padding check on buffer size -d623a870 dec_neon: add whitespace around stringizing operator -29377d55 dsp/mips: cosmetics: add whitespace around XSTR macro -eebaf97f dsp/mips: add whitespace around stringizing operator -d39dc8f3 Create a WebPAnimDecoder API. -03fb7522 gif2webp: print output file size -14efabbf Android: limit use of cpufeatures -7b83adbe preparatory cosmetics for Rescaler code fix and clean-up -77fb41c2 dec/vp8l/DecodeAlphaData: remove redundant cast -90fcfcd9 Insert less hash chain entries from the beginnings of long copies. -bd55604d SSE2: add yuv444 converters, re-using yuv_sse2.c -41a5d99d add a -quiet option to 'dwebp' -80ab3edb Merge "README: update dwebp help output after 1e595fe" -32b71b2e README: update dwebp help output after 1e595fe -3ec11827 use the DispatchAlpha() call from dsp -c5f00621 incorporate bzero() into WebPRescalerInit() instead of call site -3ebcdd41 remove duplicate "#include " -1e595fe1 dwebp: add -resize as a synonym for -scale -24a96932 dec: allow 0 as a scaling dimension -b9187242 utils/rescaler: add WebPRescalerGetScaledDimensions -923e8eda Merge "update NEWS" -020fd099 Merge "WebPPictureDistortion: support ARGB format for 'pic' when computing distortion." -6a5292f6 update NEWS -56a2e9f5 WebPPictureDistortion: support ARGB format for 'pic' when computing distortion. -0ae582e4 configure: test and add -Wunreachable-code -c2f9dc06 bit_writer: convert VP8L macro values to immediates -b969f888 Reduce magic in palette reordering -acb297e9 anim_diff: add a -raw_comparison flag -155c1b22 Merge changes I76f4d6fe,I45434639 -717e4d5a mips32/mipsDSPr2: function ImportRow rebased -7df93893 fix rescaling bug (uninitialized read, see bug #254). -5cdcd561 lossless_enc_neon: add VP8LTransformColor -a53c3369 lossless_neon: add VP8LTransformColorInverse -99131e7f Merge changes I9fb25a89,Ibc648e9e -c4556766 simplify the main loop for downscaling -2a010f99 lossless_neon: remove predictors 5-13 -ca221bbc ll_enc_neon: enable VP8LSubtractGreenFromBlueAndRed -585d93db Container spec: clarify ordering of ALPH chunk. -01d61fd9 lossless: ~20 % speedup -f722c8f0 lossless: Speed up ComputeCacheEntropy by 40 % -1ceecdc8 add a VP8LColorCacheSet() method for color cache -17eb6099 lossless: Allow copying from prev row in rle-mode. -f3a7a5bf lossless: bit writer optimization -d97b9ff7 Merge changes from topic 'lossless-enc-improvements' -0250dfcc msvc: fix pointer type warning in BitsLog2Floor -52931fd5 lossless: combine the Huffman code with extra bits -c4855ca2 lossless: Inlining add literal -8e9c94de lossless: simplify HashChainFindCopy heuristics -888429f4 lossless: 0.5 % compression density improvement -7b23b198 lossless: Add zeroes into the predicted histograms. -85b44d8a lossless: encoding, don't compute unnecessary histo -d92453f3 lossless: Remove about 25 % of the speed degradation -2cce0317 Faster alpha coding for webp -5e75642e lossless: rle mode not to accept lengths smaller than 4. -84326e4a lossless: Less code for the entropy selection -16ab951a lossless: 0.37 % compression density improvement -822f113e add WebPFree() to the API -0ae2c2e4 SSE2/SSE41: optimize SSE_16xN loops -39216e59 cosmetics: fix indent after 32462a07 -559e54ca Merge "SSE2: slightly faster FTransformWHT" -8ef9a63b SSE2: slightly faster FTransformWHT -f27f7735 lossless_neon: enable VP8LAddGreenToBlueAndRed -36e9c4bc SSE2: minor cosmetrics on in-loop filter code -4741fac4 dsp/lossless_*sse2: remove some unnecessary inlines -1819965e fix warning ("left shift of negative value") using a cast -70170014 SSE2: speed-up some lossless-encoding functions -abcb0128 Merge "SSE2: slightly faster (~5%) AddGreenToBlueAndRed()" -2df5bd30 Merge "Speedup to HuffmanCostCombinedCount" -9e356d6b SSE2: slightly faster (~5%) AddGreenToBlueAndRed() -fc6c75a2 SSE2: 53% faster TransformColor[Inverse] -49073da6 SSE2: 46% speed-up of TransformColor[Inverse] -32462a07 Speedup to HuffmanCostCombinedCount -f3d687e3 SSE4.1 implementation of some lossless encoding functions -bfc300c7 SSE4.1 implementation of some alpha-processing functions -7f9c98f2 Merge "sse2 in-loop: simplify SignedShift8b() a bit" -ef314a5d dec_sse2/GetNotHEV: micro optimization -a729cff9 sse2 in-loop: simplify SignedShift8b() a bit -422ec9fb simplify Load8x4() a bit -8df238ec Merge "remove some duplicate FlipSign()" -751506c4 remove some duplicate FlipSign() -65ef5afc Merge "lossless: 0.13% compression density gain" -2beef2f2 lossless: 0.13% compression density gain -3033f24c lossless: 0.06 % compression density improvement -64960da9 dec_neon: add VE8uv / VE16 -14dbd87b dec_neon: add HE8uv / HE16 -ac768011 introduce FTransform2 to perform two transforms at a time. -aa6065ae dec_neon: use vld1_dup(mem) rather than vdup(mem[0]) -8b63ac78 Merge "dec_neon: add TM16" -f51be09e Merge "dec_neon/TrueMotion: simply left border load" -dc48196b dec_neon: add TM16 -ea95b305 dec_neon/TrueMotion: simply left border load -f262d612 speed-up SetResidualSSE2 -bf46d0ac fix mips2 build target -929a0fdc enc_sse2/TTransform: simplify abs calculation -17dbd058 enc_sse2/CollectHistogram: simplify abs calculation -a6c15936 dec_neon: add DC16 intra predictors -03b4f50d Makefile.vc: add anim_diff build support. -1b989874 Merge changes I9cd84125,Iee7e387f,I7548be72 -acd7b5af Introduce a test tool anim_diff. -f274a96c dsp/enc_sse2: add luma4 intra predictors -040b11bd dsp/enc_sse2: add chroma intra predictors -aee021bb dsp/enc_sse2: add luma16 intra predictors -9e00a499 makefile.unix: remove superclean target -cefc9c09 makefile.unix: clean up after extras target -4c9af023 dec_neon: add DC8uvNoTopLeft -dd55b873 Merge "doc/webp-container-spec: update repo browser link" -f0486968 doc/webp-container-spec: update repo browser link -9287761d Merge "GetResidualCostSSE2: simplify abs calculation" -0e009366 dsp/cpu.c(x86): check maximum supported cpuid feature -b243a4bc GetResidualCostSSE2: simplify abs calculation -6d4602b8 Merge "fix typo: constitutes -> constitute" -5fe1fe37 fix typo: constitutes -> constitute -b83bd7c4 Merge "populate 'libwebpextras' with: import gray, rgb565 and rgb4444 functions" -b0114a32 Merge "histogram.h: cosmetics: remove unnecessary includes" -feab45ef gifdec: Move inclusion of webp/config.h to header. -dbba67d1 histogram.h: cosmetics: remove unnecessary includes -e978fec6 Merge "VP8LBitReader: fix remaining ubsan error with large shifts" -d6fe5884 Merge "ReconstructRow: move some one-time inits out of the main loop" -a21d647c ReconstructRow: move some one-time inits out of the main loop -7a01c3c3 VP8LBitReader: fix remaining ubsan error with large shifts -7fa67c9b change GetPixPairHash64() return type to uint32_t -ec1fb9f8 Merge "dsp/enc.c: cosmetics: move DST() def closer to use" -7073bfb3 Merge "split 64-mult hashing into two 32-bit multiplies" -0768b252 dsp/enc.c: cosmetics: move DST() def closer to use -6a48b8f0 Merge "fix MSVC size_t->int conversion warning" -1db07cde Merge "anim_encode: cosmetics: fix alignment" -e28271a3 anim_encode: cosmetics: fix alignment -7fe357b8 split 64-mult hashing into two 32-bit multiplies -af74c145 populate 'libwebpextras' with: import gray, rgb565 and rgb4444 functions -61214134 remove VP8Residual::cost unused field -e2544823 fix MSVC size_t->int conversion warning -b69a6c35 vwebp: don't redefine snprintf with VS2015+ -0ac29c51 AnimEncoder API: Consistent use of trailing underscores in struct. -d4845550 AnimEncoder API: Use timestamp instead of duration as input to Add(). -9904e365 dsp/dec_sse2: DC8uv / DC8uvNoLeft speedup -7df20497 dsp/dec_sse2: DC16 / DC16NoLeft speedup -8e515dfe Merge "makefile.unix: add some missing headers" -db12250f cosmetics: vp8enci.h: break long line -bf516a87 makefile.unix: add some missing headers -b44eda3f dsp: add DSP_INIT_STUB -03e76e96 clarify the comment about double-setting the status in SetError() -9fecdd71 remove unused EmitRGB() -43f010dd move ReconstructRow to top -82d98020 add a dec/common.h header to collect common enc/dec #defines -5d4744a2 Merge "enc_sse41: add Disto4x4 / Disto16x16" -e38886a7 mux.h: Bump up ABI version -46305ca6 configure: add --disable- -2fc8b658 CPPFLAGS->CFLAGS for detecting sse4.1 in preprocessor -1a338fb3 enc_sse41: add Disto4x4 / Disto16x16 -94055503 encoding SSE4.1 stub for StoreHistogram + Quantize + SSE_16xN -c64659e1 remove duplicate variables after the lossless{_enc}.c split -67ba7c7a enc_sse2: call local FTransform in CollectHistogram -18249799 dsp: s/VP8LSetHistogramData/VP8SetHistogramData/ -ede5e158 cosmetics: dsp/lossless.h: reorder prototypes -553051f7 dsp/lossless: split enc/dec functions -9064adc8 Merge "conditionally add -msse4.1 in Makefile.unix" -cecf5096 dsp/yuv*.c: rework WEBP_USE_ ifdef -6584d398 dsp/upsampling*.c: rework WEBP_USE_ ifdef -80809422 dsp/rescaler*.c: rework WEBP_USE_ ifdef -1d93ddec dsp/lossless*.c: rework WEBP_USE_ ifdef -73805ff2 dsp/filters*.c: rework WEBP_USE_ ifdef -fbdcef24 dsp/enc*.c: rework WEBP_USE_ ifdef -66de69c1 dsp/dec*.c: rework WEBP_USE_ ifdef -48e4ffd1 dsp/cost*.c: rework WEBP_USE_ ifdef -29fd6f90 dsp/argb*.c: rework WEBP_USE_ ifdef -80ff3813 dsp/alpha*.c: rework WEBP_USE_ ifdef -bf09cf1e conditionally add -msse4.1 in Makefile.unix -e9570dd9 stub for SSE4.1 support. -4a95384b Merge "dsp: add sse4.1 detection" -cabf4bd2 dsp: add sse4.1 detection -4ecba1ab thread.h: rename interface param -b8d706c8 Merge "sync versions with 0.4.3" -ae64a711 Merge "add shell for libwebpextras" -92a5da9c sync versions with 0.4.3 -9d4e2d16 Merge "~30% faster smart-yuv (-pre 4) with early-out criterion" -b1bdbbab ~30% faster smart-yuv (-pre 4) with early-out criterion -7efb9748 Merge "Disable NEON code on Native Client" -ac4f5784 Disable NEON code on Native Client -0873f85b AnimEncoder API: Support input frames in YUV(A) format. -5c176d2d add shell for libwebpextras -44bd9561 fix signature for VP8RecordCoeffTokens() -c9b8ea0e small cosmetics on TokenBuffer. -76394c09 Merge "MIPS: dspr2: added optimization for TrueMotion" -0f773693 WebPPictureRescale: add a note about 0 width/height -241bb5d9 MIPS: dspr2: added optimization for TrueMotion -6cef0e4f examples/Android.mk: add webpmux_example target -53c16ff0 Android.mk: add webpmux target -21852a00 Android.mk: add webpdemux target -8697a3bc Android.mk: add webpdecoder{,_static} targets -4a670491 Android.mk: split source lists per-directory -b5e79422 MIPS: dspr2: Added optimization for some convert functions -0f595db6 MIPS: dspr2: Added optimization for some convert functions -8a218b4a MIPS: [mips32|dspr2]: GetResidualCost rebased -ef987500 Speedup method StoreImageToBitMask by 5%. -602a00f9 fix iOS arm64 build with Xcode 6.3 -23820507 1-2% faster encoding by removing an indirection in GetResidualCost() -eddb7e70 MIPS: dspr2: added otpimization for DC8uv, DC8uvNoTop and DC8uvNoLeft -73ba2915 MIPS: dspr2: added optimization for functions RD4 and LD4 -c7129da5 Merge "4-5% faster encoding using SSE2 for GetResidualCost" -94380d00 MIPS: dspr2: added optimizaton for functions VE4 and DC4 -2a407092 4-5% faster encoding using SSE2 for GetResidualCost -17e19862 Merge "MIPS: dspr2: added optimization for simple filtering functions" -3ec404c4 Merge "dsp: normalize WEBP_TSAN_IGNORE_FUNCTION usage" -b969f5df dsp: normalize WEBP_TSAN_IGNORE_FUNCTION usage -d7b8e711 MIPS: dspr2: added optimization for simple filtering functions -235f774e Merge "MIPS: dspr2: Added optimization for function VP8LTransformColorInverse_C" -42a8a628 MIPS: dspr2: Added optimization for function VP8LTransformColorInverse_C -b442bef3 Merge "ApplyFiltersAndEncode: only copy lossless stats" -b510fbfe doc/webp-container-spec: note MSB order for chunk diagrams -9bc0f922 ApplyFiltersAndEncode: only copy lossless stats -3030f115 Merge "dsp/mips: add some missing TSan annotations" -dfcf4593 Merge "MIPS: dspr2: Added optimization for function VP8LAddGreenToBlueAndRed_C" -55c75a25 dsp/mips: add some missing TSan annotations -2cb879f0 MIPS: dspr2: Added optimization for function VP8LAddGreenToBlueAndRed_C -e1556010 move some cost tables from enc/ to dsp/ -c3a03168 Merge "picture_csp: fix build w/USE_GAMMA_COMPRESSION undefined" -39537d7c Merge "VP8LDspInitMIPSdspR2: add missing TSan annotation" -1dd419ce picture_csp: fix build w/USE_GAMMA_COMPRESSION undefined -43fd3543 VP8LDspInitMIPSdspR2: add missing TSan annotation -c7233dfc Merge "VP8LDspInit: remove memcpy" -0ec4da96 picture_csp::InitGammaTables*: add missing TSan annotations -35579a49 VP8LDspInit: remove memcpy -97f6aff8 VP8YUVInit: add missing TSan annotation -f9016d66 dsp/enc::InitTables: add missing TSan annotation -e3d9771a VP8EncDspCostInit*: add missing TSan annotations -d97c143d Merge "doc/webp-container-spec: cosmetics" -309b7908 MIPS: mips32: Added optimization for function SetResidualCoeffs -a987faed MIPS: dspr2: added optimization for function GetResidualCost -e7d3df23 doc/webp-container-spec: cosmetics -be6635e9 Merge "VP8TBufferClear: remove some misleading const's" -02971e72 Merge "VP8EmitTokens: remove unnecessary param void cast" -3b77e5a7 VP8TBufferClear: remove some misleading const's -aa139c8f VP8EmitTokens: remove unnecessary param void cast -c24d8f14 cosmetics: upsampling_sse2: add const to some casts -1829c42c cosmetics: lossless_sse2: add const to some casts -183168f3 cosmetics: enc_sse2: add const to some casts -860badca cosmetics: dec_sse2: add const to some casts -0254db97 cosmetics: argb_sse2: add const to some casts -1aadf856 cosmetics: alpha_processing_sse2: add const to some casts -1579de3c vwebp: clear canvas at the beginning of each loop -4b9fa5d0 Merge "webp-container-spec: clarify background clear on loop" -4c82284d Updated the near-lossless level mapping. -56039479 webp-container-spec: clarify background clear on loop -19f0ba0e Implement true-motion prediction in SSE2 -774d4cb7 make VP8PredLuma16[] array non-const -d7eabb80 Merge "MIPS: dspr2: Added optimization for function CollectHistogram" -fe42739c Use integers for kmin/kmax for simplicity. -b9df35f7 AnimEncode API: kmax=0 should imply all keyframes. -6ce296da MIPS: dspr2: Added optimization for function CollectHistogram -2c906c40 vwebp: remove unnecessary static Help() prototype -be0fd1d5 Merge "dec/vp8: clear 'dither_' on skipped blocks" -e96170fe Merge "vwebp/animation: display last frame on end-of-loop" -0f017b56 vwebp/animation: display last frame on end-of-loop -c86b40cc enc/near_lossless.c: fix alignment -66935fb9 dec/vp8: clear 'dither_' on skipped blocks -b7de7946 Merge "lossless_neon: enable subtract green for aarch64" -77724f70 SSE2 version of GradientUnfilter -416e1cea lossless_neon: enable subtract green for aarch64 -72831f6b Speedup AnalyzeAndInit for low effort compression. -a6597483 Speedup Analyze methods for lossless compression. -98c81386 Enable Near-lossless feature. -c6b24543 AnimEncoder API: Fix for kmax=1 and default kmin case. -022d2f88 add SSE2 variants for alpha filtering functions -2db15a95 Temporarily disable encoding of alpha plane with color cache. -1d575ccd Merge "Lossless decoding: Remove an unnecessary if condition." -cafa1d88 Merge "Simplify backward refs calculation for low-effort." -7afdaf84 Alpha coding: reorganize the filter/unfiltering code -4d6d7285 Simplify backward refs calculation for low-effort. -ec0d1be5 Cleaup Near-lossless code. -9814ddb6 Remove the post-transform near-lossless heuristic. -4509e32e Lossless decoding: Remove an unnecessary if condition. -f2ebc4a8 Merge "Regression fix for lossless decoding" -783a8cda Regression fix for lossless decoding -9a062b8e AnimEncoder: Bugfix for kmin = 1 and kmax = 2. -0f027a72 simplify smart RGB->YUV conversion code -0d5b334e BackwardReferencesHashChainFollowChosenPath: remove unused variable -f480d1a7 Fix to near lossless artefacts on palettized images. -d4615d08 Merge changes Ia1686828,I399fda40 -cb4a18a7 rename HashChainInit into HashChainReset -f079e487 use uint16_t for chosen_path[] -da091212 MIPS: dspr2: Added optimization for function FTransformWHT -b8c20135 Merge "wicdec: (msvs) quiet some /analyze warnings" -9b228b54 wicdec: (msvs) quiet some /analyze warnings -daeb276a Merge "MIPS: dspr2: Added optimization for MultARGBRow function" -cc087424 Merge "dsp/cpu: (msvs) add include for __cpuidex" -4a82aab5 Merge changes I87544e92,I0bb6cda5 -7a191398 dwebp/WritePNG: mark png variables volatile -775dfad2 dwebp: include setjmp.h w/WEBP_HAVE_PNG -47d26be7 dwebp: correct sign in format strings -f0e0677b VP8LEncodeStream: add an assert -c5f7747f VP8LColorCacheCopy: promote an int before shifting -0de5f33e dsp/cpu: (msvs) add include for __cpuidex -7d850f7b MIPS: dspr2: Added optimization for MultARGBRow function -54875293 MIPS: dspr2: added optimization for function QuantizeBlock -4fbe9cf2 dsp/cpu: (msvs) avoid immintrin.h on _M_ARM -3fd59039 simplify/reorganize arguments for CollectColorBlueTransforms -b9e356b9 Disable costly TraceBackwards for method=0. -a7e7caa4 MIPS: dspr2: added optimization for function TransformColorRed -2cb39180 Merge "MIPS: dspr2: added optimization for function TransformColorBlue" -279e6613 Merge "dsp/cpu: add include for _xgetbv() w/MSVS" -b6c0428e dsp/cpu: add include for _xgetbv() w/MSVS -d1c4ffae gif2webp: Move GIF decoding related code to a support library. -07c39559 Merge "AnimEncoder API: Add info in README.mux" -7b161973 MIPS: dspr2: added optimization for function TransformColorBlue -d7c4b02a cpu: fix AVX2 detection for gcc/clang targets -9d299469 AnimEncoder API: Add info in README.mux -d581ba40 follow-up: clean up WebPRescalerXXX dsp function -f8740f0d dsp: s/USE_INTRINSICS/WEBP_USE_INTRINSICS/ -ce73abe0 Merge "introduce a separate WebPRescalerDspInit to initialize pointers" -ab66beca introduce a separate WebPRescalerDspInit to initialize pointers -205c7f26 fix handling of zero-sized partition #0 corner case -cbcdd5ff Merge "move rescaler functions to rescaler* files in src/dsp/" -bf586e88 Merge changes I230b3532,Idf3057a7 -6dc79dc2 Merge "anim_encode: fix type conversion warnings" -11fce25a Merge "dec_neon: remove returns from void functions" -c4e63f99 Makefile.vc: add gif2webp target -4f43d38c enable NEON for Windows ARM builds -3f6615ac Makefile.vc: add rudimentary Windows ARM support -e7c5954c dec_neon: remove returns from void functions -f79c163b anim_encode: fix type conversion warnings -0f54f1ec Remove gif2webp_util which is no longer needed. -cbcbedd0 move rescaler functions to rescaler* files in src/dsp/ -ac79ed19 webpmux: remove experimental fragment handling -e8694d4d mux: remove experimental FRGM parsing -9e92b6ea AnimEncoder API: Optimize single-frame animated images -abbae279 Merge "Move over gif2webp to the new AnimEncoder API." -a28c4b36 MIPS: move WORK_AROUND_GCC define to appropriate place -012d2c60 MIPS: dspr2: added optimization for functions SSEAxB -67720c8b Move over gif2webp to the new AnimEncoder API. -9241ecf4 MIPS: dspr2: added optimization for function Average -9422211d Merge "Tune BackwardReferencesLz77 for low_effort (m=0)." -df40057b Merge "Speedup VP8LGetHistoImageSymbols for low effort (m=0) mode." -ea08466d Tune BackwardReferencesLz77 for low_effort (m=0). -b0b973c3 Speedup VP8LGetHistoImageSymbols for low effort (m=0) mode. -c6d32927 argb_sse2: cosmetics -67f601cd make the 'last_cpuinfo_used' variable names unique -b9489861 AnimEncoder API: Init method for default options. -856f8ec1 Merge "AnimEncoder API: Remove AnimEncoderFrameOptions." -c537514d Merge "AnimEncoder API: GenerateCandidates bugfix." -dc0ce039 Merge "AnimEncoder API: Compute change rectangle for first frame too." -f00b639b Merge "AnimEncoder API: In Assemble(), always set animation parameters." -29ed796c Merge "AnimEncoder lib cleanup: prev to prev canvas not needed." -9f0dd6e5 Merge "WebPAnimEncoder API: Header and implementation" -5e56bbe0 AnimEncoder API: Remove AnimEncoderFrameOptions. -b902c3ea AnimEncoder API: GenerateCandidates bugfix. -ef3c39bb AnimEncoder API: Compute change rectangle for first frame too. -eec423ab AnimEncoder API: In Assemble(), always set animation parameters. -ae1c046e AnimEncoder lib cleanup: prev to prev canvas not needed. -4b997ae4 WebPAnimEncoder API: Header and implementation -72208bec move argb_*.o build target to encoder list -95920538 Merge "multi-thread fix: lock each entry points with a static var" -4c1b300a Merge "SSE2 implementation of VP8PackARGB" -fbcc2004 Merge "add -Wformat-nonliteral and -Wformat-security" -80d950d9 add -Wformat-nonliteral and -Wformat-security -04c20e75 Merge "MIPS: dspr2: added optimization for function Intra4Preds" -a437694a multi-thread fix: lock each entry points with a static var -ca7f60db SSE2 implementation of VP8PackARGB -72d573f6 simplify the PackARGB signature -4e2589ff demux: restore strict fragment flag check -4ba8e074 Merge "webp-container-spec: remove references to fragments" -e752f0a6 Merge "demux: remove experimental FRGM parsing" -f8abb112 Merge changes I109ec4d9,I73fe7743 -ae2188a4 MIPS: dspr2: added optimization for function Intra4Preds -1f4b8642 move VP8EncDspARGBInit() call closer to where it's needed -14108d78 dec_neon: add DC8uvNoTop / DC8uvNoLeft -d8340da7 dec_neon: add DC8uv -a66e66c7 webp-container-spec: remove references to fragments -7ce8788b MIPS: dspr2: added optimization for function MakeARGB32 -012e623d demux: remove experimental FRGM parsing -87c3d531 method=0: Don't evaluate any predictor -6f4fcb98 Merge "MIPS: dspr2: added optimization for function ImportRow" -24284459 replace unneeded calls to HistogramCopy() by swaps -bdf7b40c MIPS: dspr2: added optimization for function ImportRow -e66a9225 Merge "MIPS: dspr2: added optimization for function ExportRowC" -c279fec1 MIPS: dspr2: added optimization for function ExportRowC -31a9cf64 Speedup WebP lossless compression for low effort (m=0) mode with following: - Disable Cross-Color transform. - Evaluate predictors #11 (paeth), #12 and #13 only. -9275d91c MIPS: dspr2: added optimization for function TrueMotion -26106d66 Merge "enc_neon: fix building with non-Xcode clang (iOS)" -1c4e3efe unroll the kBands[] indirection to remove a dereference in GetCoeffs() -a3946b89 enc_neon: fix building with non-Xcode clang (iOS) -8ed9c00d Merge "simplify the Histogram struct, to only store max_value and last_nz" -bad77571 simplify the Histogram struct, to only store max_value and last_nz -3cca0dc7 MIPS: dspr2: Added optimization for DCMode function -37e395fd MIPS: fix functions to use generic BPS istead of hardcoded value -9475bef4 PickBestUV: fix VP8Copy16x8 invocation -441f273f Merge changes I55f8da52,Id73a1e96 -4a279a68 cosmetics: add some missing != NULL comparisons -66ad3725 factorize BPS definition in dsp.h and add VP8Copy16x8 -432e5b55 make ALIGN_xxx naming consistent -57606047 encoder: switch BPS to 32 instead of 16 -1b66bbe9 MIPS: dspr2: added optimization for function TransformColor_C -c6d0f9e7 histogram: cosmetics -f399d307 Merge changes I6eac17e5,I32d2b514 -9de9074c dec_neon: add TM8uv -8e517eca bit_reader/kVP8NewRange: range_t -> uint8_t -e1857139 dsp: initialize VP8PredChroma8 in VP8DspInit() -e0c809ad Move Entropy methods to lossless.c -a96ccf8f iosbuild: add x64_64 simulator support -a0df5510 Remove handling for WEBP_HINT_GRAPH -413dfc0c Move static method definition before its usage. -0f235665 Update BackwardRefsWithLocalCache. -d69e36ec Remove TODOs from lossless encoder code. -fdaac8e0 Optmize VP8LGetBackwardReferences LZ77 references. -2f0e2ba8 MIPS: dspr2: added optimization for function Select -a3e79a46 Merge "WebPEncode: Support encoding same pic twice (even if modified)" -e4f4dddb WebPEncode: Support encoding same pic twice (even if modified) -cbc3fbb4 Merge "Updated VP8LGetBackwardReferences and color cache." -95a9bd85 Updated VP8LGetBackwardReferences and color cache. -54f2c14c MIPS: dspr2: added optimization for function FTransform -aa42f423 MIPS: dspr2: Added optimization for function VP8LSubtractGreenFromBlueAndRed -11a25f75 Merge "FlattenSimilarBlocks should only be tried when blending is possible." -5cccdadf FlattenSimilarBlocks should only be tried when blending is possible. -95ca44a7 MIPS: dspr2: added optimization for Disto4x4 -4171b672 backward_references.c: reindent after c8581b0 -c8581b06 Optimize BackwardReferences for RLE encoding. -5798eee6 MIPS: dspr2: unfilters bugfix (Ie7b7387478a6b5c3f08691628ae00f059cf6d899) -4167a3f5 Optimize backwardreferences -d18554c3 Merge "webp/types.h: use inline for clang++/-std=c++11" -7489b0e7 gif2webp: Add '-min-size' option to get best compression. -77bdddf0 Speed up BackwardReferences -6638710b webp/types.h: use inline for clang++/-std=c++11 -abf04205 Enable entropy based merge histo for (q<100) -572022a3 filters_mips_dsp_r2.c: disable unfilters -a28e21b1 MIPS: dspr2: Added optimization for function ClampedAddSubtractFull -18d5a1ef MIPS: dspr2: added optimization for function ClampedAddSubtractHalf -829a8c19 MIPS: dspr2: added optimization for ITransform -c94ed49e gif2webp: Use the default hint instead of WEBP_HINT_GRAPH. -653ace55 Increase the MAX_COLOR_CACHE_BITS from 9 to 10. -919220c7 Change the logic adjusting the Histogram bits. -53b096c0 Merge "Fix bug in VP8LCalculateEstimateForCacheSize." -e912bd55 Fix bug in VP8LCalculateEstimateForCacheSize. -541d7839 Merge "dec_neon: add RD4 intra predictor" -f8cd0672 Merge "Makefile.vc: add a 'legacy' RTLIBCFG option" -22881c99 dec_neon: add RD4 intra predictor -613d281e update NEWS -1304eb34 Merge "dec_neon: DC4: use pair-wise adds for top row" -34c20c06 Makefile.vc: add a 'legacy' RTLIBCFG option -7083006b Merge "dsp/dec_{neon,sse2}: VE4: normalize variable names" -0db9031c dsp/dec_{neon,sse2}: VE4: normalize variable names -b5bc1530 dec_neon: DC4: use pair-wise adds for top row -5b90d8fe Unify the API between VP8BitWriter and VP8LBitWriter -f7ada560 Merge changes I2e06907b,Ia9ed4ca6,I782282ff -5beb6bf0 Merge "dec_neon: add VE4 intra predictor" -eba6ce06 dec_neon: add DC4 intra predictor -79abfbd9 dec_neon: add TM4 intra predictor -fe395f0e dec_neon: add LD4 intra predictor -32de385e dec_neon: add VE4 intra predictor -72395ba9 Merge "Modify CostModel to allocate optimal memory." -65e5eb8a gif2webp: Support GIF_DISPOSE_RESTORE_PREVIOUS -e4c829ef gif2webp: Handle frames with odd offsets + disposal to background. -c2b5a039 Modify CostModel to allocate optimal memory. -b7a33d7e implement VE4/HE4/RD4/... in SSE2 -97c76f1f make VP8PredLuma4[] non-const and initialize array in VP8DspInit() -0ea8c6c2 Merge "PrintReg: output to stderr" -d7ff2f97 Merge "stopwatch.h: fix includes" -f85ec712 PrintReg: output to stderr -54edbf65 stopwatch.h: fix includes -139142e4 Optimize BackwardReferenceHashChainFollowPath. -5f36b68d enc/backward_references.c: fix indent -e0e9960d Merge "sync version numbers to 0.4.2 release" -64ac5144 sync version numbers to 0.4.2 release -c24f8954 Simplify and speedup Backward refs computation. -d1c359ef fix shared object build with -fvisibility=hidden -a4c3a31b WEBP_TSAN_IGNORE_FUNCTION: fix gcc compat warning -f358eeb8 add code for testing random incremental decoding in dwebp -80247291 mark some init function as being safe for thread_sanitizer. -79b5bdbf bit_reader.h: cosmetics: fix a typo -6c673681 Improved near-lossless mode. -0ce27e71 enc_mips32: workaround gcc-4.9 bug -aca1b98f enc/vp8l.c: fix indent -ca005027 Evaluate non-palette compression for palette image -c8a87bb6 AssignSegments: quiet -Warray-bounds warning -32f67e30 Merge "enc_neon: initialize vectors w/vdup_n_u32" -fabc65da 1-3% faster encoding optimizing SSE_NxN functions -7534d716 enc_neon: initialize vectors w/vdup_n_u32 -5f813912 Merge "Fix return code of EncodeImageInternal()" -e321abe4 Fix return code of EncodeImageInternal() -f82cb06a optimize palette ordering -f545feee don't set the alpha value for histogram index image -2d9b0a44 add WebPDispatchAlphaToGreen() to dsp -1bd4c2ad Merge "Change Entropy based Histogram Combine heuristic." -e295b8f1 Merge "iosbuild: cleanup" -1be4e760 Merge "iosbuild: output autoconf req. on failure" -d5e498d4 Change Entropy based Histogram Combine heuristic. -47a2d8e1 fix MSVC float->int conversion warning -041956f6 iosbuild: cleanup -767eb402 iosbuild: output autoconf req. on failure -35ad48b8 HistoHeapInit: correct positions allocation size -45d9635f lossless: entropy clustering for high qualities. -dc37df8c fix type warning for VS9_x64 -9f7d9e6d iosbuild: make iOS 6 the minimum requirement -fdd6528b Remove unused VP8LDecoder member variable -ea3bba5a Merge "rewrite Disto4x4 in enc_neon.c with intrinsic" -f060dfc4 add lossless incremental decoding support -ab70794d rewrite Disto4x4 in enc_neon.c with intrinsic -d4471637 MIPS: dspr2: added optimization for function FilterLoop24 -2aef54d4 Merge "prepare VP8LDecodeImage for incremental decode" -aed0f5a2 Merge "MIPS: dspr2: added optimization for function FilterLoop26" -28630685 prepare VP8LDecodeImage for incremental decode -248f3aed remove br->error_ field -49e15044 MIPS: dspr2: added optimization for function FilterLoop26 -38128cb9 iobuild.sh: only install .h files in Headers -c792d412 Premultiply with alpha during U/V downsampling -0cc811d7 gif2webp: Background color correction -d7167ff7 Amend the lossless spec according to issue #205, #206 and #224 -b901416b Record the lossless size stats. -cddd3340 Add a WebPExtractAlpha function to dsp -0716a98e fix indent after I0204949917836f74c0eb4ba5a7f4052a4797833b -f9ced95a Optimize lossless decoding for trivial(ARB) codes. -924fcfd9 Merge "webpmux: simplify InitializeConfig()" -c0a462ca webpmux: simplify InitializeConfig() -6986bb5e webpmux: fix indent -f89e1690 webpmux: fix exit status on numeric value parse error -2172cb62 Merge "webpmux: fix loop_count range check" -e3b343ec Merge "examples: warn on invalid numeric parameters" -0e23c487 webpmux: fix loop_count range check -6208338a Merge "fix loop bug in DispatchAlpha()" -d51f3e40 gif2webp: Handle frames with missing graphic control extension -690b491a fix loop bug in DispatchAlpha() -96d43a87 examples: warn on invalid numeric parameters -3101f537 MIPS: dspr2: added optimization for TransformOne -a6bb9b17 SSE2 for inverse Mult(ARGB)Row and ApplyAlphaMultiply -d84a8ffd Remove default initialization of decoder status. -be70b86c configure: simplify libpng-config invocation -e0a99321 Rectify bug in lossless incremental decoding. -e2502a97 MIPS: dspr2: added optimization for TransformAC3 -24e1072a MIPS: dspr2: added optimization for TransformDC -c0e84df8 Merge "Slightly faster lossless decoding (1%)" -8dd28bb5 Slightly faster lossless decoding (1%) -f0103595 MIPS: dspr2: added optimization for ColorIndexInverseTransforms -d3242aee make VP8LSetBitPos() set br->eos_ flag -a9decb55 Lossless decoding: fix eos_ flag condition -3fea6a28 fix erroneous dec->status_ setting -80b8099f MIPS: dspr2: add some specific mips code to commit I2c3f2b12f8df15b785fad5a9c56316e954ae0c53 -e5640625 Merge "further refine the COPY_PATTERN optim for DecodeAlpha" -854509fe enc/histogram.c: reindent after f4059d0 -34421964 Merge "~3-5% faster encoding optimizing PickBestIntra*()" -865069c1 further refine the COPY_PATTERN optim for DecodeAlpha -a5956228 added C-level optimization for DecodeAlphaData function -187d379d add a fallback to ALPHA_NO_COMPRESSION -a48a2d76 ~3-5% faster encoding optimizing PickBestIntra*() -a6140194 ExUtilReadFromStdin: (windows) open stdin in bin mode -e80eab1f webpmux: (windows) open stdout in binary mode -e9bfb116 cwebp: (windows) open stdout in binary mode -5927e15b example_util: add ExUtilSetBinaryMode -30f3b75b webpmux man page: Clarify some title, descriptions and examples -77d4c7e3 address cosmetic comments from patch #71380 -f75dfbf2 Speed up Huffman decoding for lossless -637b3888 dsp/lossless: workaround gcc-4.9 bug on arm -8323a903 dsp.h: collect gcc/clang version test macros -e6c4b52f move static initialization of WebPYUV444Converters[] to the Init function. -49911d4d Merge "fix indentation" -f4059d0c Code cleanup for HistogramRemap. -e632b092 fix indentation -f5c04d64 Merge "add a DispatchAlpha() for SSE2 that handles 8 pixels at a time" -fc98edd9 add a DispatchAlpha() for SSE2 that handles 8 pixels at a time -73d361dd introduce VP8EncQuantize2Blocks to quantize two blocks at a time -0b21c30b MIPS: dspr2: added optimization for EmitAlphaRGB -953acd56 enc_neon: enable QuantizeBlock for aarch64 -f4ae1437 MIPS: mips32: code rebase -56977154 MIPS: dspr2: added optimizations for VP8YuvTo* -2523aa73 SmartRGBYUV: fix odd-width problem with pixel replication -ee52dc4e fix some MSVC64 warning about float conversion -3fca851a cpu: check for _MSC_VER before using msvc inline asm -e2a83d71 faster RGB->YUV conversion function (~7% speedup) -de2d03e1 Merge "Add smart RGB->YUV conversion option -pre 4" -3fc4c539 Add smart RGB->YUV conversion option -pre 4 -b4dc4069 MIPS: dspr2: added optimization for (un)filters -137e6090 Merge "configure: add work around for gcc-4.9 aarch64 bug" -b61c9cec MIPS: dspr2: Optimization of some simple point-sampling functions -e2b8cec0 configure: add work around for gcc-4.9 aarch64 bug -98c54107 MIPS: mips32r2: added optimization for BSwap32 -dab702b3 Update PATENTS to reflect s/VP8/WebM/g -b564f7c7 Merge "MIPS: detect mips32r6 and disable mips32r1 code" -b7e5a5c4 MIPS: detect mips32r6 and disable mips32r1 code -63c2fc02 Correctly use the AC_CANONICAL_* macros -bb07022b Merge "cosmetics" -e300c9d8 cosmetics -0e519eea Merge "cosmetics: remove some extraneous 'extern's" -3ef0f08a Merge "vp8enci.h: cosmetics: fix '*' placement" -4c6dde37 bit_writer: cosmetics: rename kFlush() -> Flush() -f7b4c48b cosmetics: remove some extraneous 'extern's -b47fb00a vp8enci.h: cosmetics: fix '*' placement -b5a36cc9 add -near_lossless [0..100] experimental option -0524d9e5 dsp: detect mips64 & disable mips32 code -d3485d96 cwebp.1: fix quality description placement -29a9fe22 Merge tag 'v0.4.1' -8af27718 update ChangeLog (tag: v0.4.1, origin/0.4.1) -e09e9ff6 Record & log the image pre-processing time. -f59c0b4b iosbuild.sh: specify optimization flags -8d34ea3e update ChangeLog (tag: v0.4.1-rc1) -dbc3da66 makefile.unix: add vwebp.1 to the dist target -89a7c83c update ChangeLog -ffe67ee9 Merge "update NEWS for the next release" into 0.4.1 -2def1fe6 gif2webp: dust up the help message -fb668d78 remove -noalphadither option from README/vwebp.1 -e49f693b update NEWS for the next release -cd013580 Merge "update AUTHORS" into 0.4.1 -268d01eb update AUTHORS -85213b9b bump version to 0.4.1 -695f80ae Merge "restore mux API compatibility" into 0.4.1 -862d296c restore mux API compatibility -8f6f8c5d remove the !WEBP_REFERENCE_IMPLEMENTATION tweak in Put8x8uv -d713a696 Merge changes If4debc15,I437a5d5f into 0.4.1 -c2fc52e4 restore encode API compatibility -793368e8 restore decode API compatibility -b8984f31 gif2webp: fix compile with giflib 5.1.0 -222f9b1a gif2webp: simplify giflib version checking -d2cc61b7 Extend MakeARGB32() to accept Alpha channel. -4595b62b Merge "use explicit size of kErrorMessages[] arrays" -157de015 Merge "Actuate memory stats for PRINT_MEMORY_INFO" -fbda2f49 JPEG decoder: delay conversion to YUV to WebPEncode() call -0b747b1b use explicit size of kErrorMessages[] arrays -3398d81a Actuate memory stats for PRINT_MEMORY_INFO -6f3202be Merge "move WebPPictureInit to picture.c" -6c347bbb move WebPPictureInit to picture.c -fb3acf19 fix configure message for multi-thread -40b086f7 configure: check for _beginthreadex -1549d620 reorder the YUVA->ARGB and ARGB->YUVA functions correctly -c6461bfd Merge "extract colorspace code from picture.c into picture_csp.c" -736f2a17 extract colorspace code from picture.c into picture_csp.c -645daa03 Merge "configure: check for -Wformat-security" -abafed86 configure: check for -Wformat-security -fbadb480 split monolithic picture.c into picture_{tools,psnr,rescale}.c -c76f07ec dec_neon/TransformAC3: initialize vector w/vcreate -bb4fc051 gif2webp: Allow single-frame animations -46fd44c1 thread: remove harmless race on status_ in End() -5a1a7264 Merge "configure: check for __builtin_bswapXX()" -6781423b configure: check for __builtin_bswapXX() -6450c48d configure: fix iOS builds -6422e683 VP8LFillBitWindow: enable fast path for 32-bit builds -4f7f52b2 VP8LFillBitWindow: respect WEBP_FORCE_ALIGNED -e458badc endian_inl.h: implement htoleXX with BSwapXX -f2664d1a endian_inl.h: add BSwap16 -6fbf5345 Merge "configure: add --enable-aligned" -dc0f479d configure: add --enable-aligned -9cc69e2b Merge "configure: support WIC + OpenGL under mingw64" -257adfb0 remove experimental YUV444 YUV422 and YUV400 code -10f4257c configure: support WIC + OpenGL under mingw64 -380cca4f configure.ac: add AC_C_BIGENDIAN -ee70a901 endian_inl.h: add BSwap64 -47779d46 endian_inl.h: add BSwap32 -d5104b1f utils: add endian_inl.h -58ab6224 Merge "make alpha-detection loop in IsKeyFrame() in good x/y order" -9d562902 make alpha-detection loop in IsKeyFrame() in good x/y order -516971b1 lossless: Remove unaligned read warning -b8b596f6 Merge "configure.ac: add an autoconf version prerequisite" -34b02f8c configure.ac: add an autoconf version prerequisite -e59f5360 neon: normalize vdup_n_* usage -6ee7160d Merge changes I0da7b3d3,Idad2f278,I4accc305 -abc02f24 Merge "fix (uncompiled) typo" -bc03670f neon: add INIT_VECTOR4 -6c1c632b neon: add INIT_VECTOR3 -dc7687e5 neon: add INIT_VECTOR2 -4536e7c4 add WebPMuxSetCanvasSize() to the mux API -824eab10 fix (uncompiled) typo -1f3e5f1e remove unused 'shift' argument and QFIX2 define -8e867051 Merge "VP8LoadNewBytes: use __builtin_bswap32 if available" -1b6a2635 Merge "Fix handling of weird GIF with canvas dimension 0x0" -1da3d461 VP8LoadNewBytes: use __builtin_bswap32 if available -1582e402 Fix handling of weird GIF with canvas dimension 0x0 -b8811dac Merge "rename interface -> winterface" -db8b8b5f Fix logic in the GIF LOOP-detection parsing -25aaddc8 rename interface -> winterface -5584d9d2 make WebPSetWorkerInterface() check its arguments -a9ef7ef9 Merge "cosmetics: update thread.h comments" -c6af9991 Merge "dust up the help message" -0a8b8863 dust up the help message -a9cf3191 cosmetics: update thread.h comments -27bfeee4 QuantizeBlock SSE2 Optimization: -2bc0dc3e Merge "webpmux: warn when odd frame offsets are used" -3114ebe4 Merge changes Id8edd3c1,Id418eb96,Ide05e3be -c0726634 webpmux: warn when odd frame offsets are used -c5c6b408 Merge "add alpha dithering for lossy" -d5146784 examples/Android.mk: add cwebp -ca0fa7c7 Android.mk: move dwebp to examples/Android.mk -73d8fca0 Android.mk: add ENABLE_SHARED flag -6e93317f muxread: fix out of bounds read -8b0f6a48 Makefile.vc: fix CFLAGS assignment w/HAVE_AVX2=1 -bbe32df1 add alpha dithering for lossy -79020767 Merge "make error-code reporting consistent upon malloc failure" -77bf4410 make error-code reporting consistent upon malloc failure -7a93c000 **/Makefile.am: remove unused AM_CPPFLAGS -24e30805 Add an interface abstraction to the WebP worker thread implementation -d6cd6358 Merge "fix orig_rect==NULL case" -2bfd1ffa fix orig_rect==NULL case -059e21c1 Merge "configure: move config.h to src/webp/config.h" -f05fe006 properly report back encoding error code in WebPFrameCacheAddFrame() -32b31379 configure: move config.h to src/webp/config.h -90090d99 Merge changes I7c675e51,I84f7d785 -ae7661b3 makefiles: define WEBP_HAVE_AVX2 when appropriate -69fce2ea remove the special casing for res->first in VP8SetResidualCoeffs -6e61a3a9 configure: test for -msse2 -b9d2efc6 rename upsampling_mips32.c to yuv_mips32.c -bdfeebaa dsp/yuv: move sse2 functions to yuv_sse2.c -46b32e86 Merge "configure: set WEBP_HAVE_AVX2 when available" -88305db4 Merge "VP8RandomBits2: prevent signed int overflow" -73fee88c VP8RandomBits2: prevent signed int overflow -db4860b3 enc_sse2: prevent signed int overflow -3fdaf4d2 Merge "real fix for longjmp warning" -385e3340 real fix for longjmp warning -230a0555 configure: set WEBP_HAVE_AVX2 when available -a2ac8a42 restore original value_/range_ field order -5e2ee56f Merge "remove libwebpdspdecode dep on libwebpdsp_avx2" -61362db5 remove libwebpdspdecode dep on libwebpdsp_avx2 -42c447ae Merge "lossy bit-reader clean-up:" -479ffd8b Merge "remove unused #include's" -9754d39a Merge "strong filtering speed-up (~2-3% x86, ~1-2% for NEON)" -158aff9b remove unused #include's -09545eea lossy bit-reader clean-up: -ea8b0a17 strong filtering speed-up (~2-3% x86, ~1-2% for NEON) -6679f899 Optimize VP8SetResidualCoeffs. -ac591cf2 fix for gcc-4.9 warnings about longjmp + local variables -4dfa86b2 dsp/cpu: NaCl has no support for xgetbv -4c398699 Merge "cwebp: fallback to native webp decode in WIC builds" -33aa497e Merge "cwebp: add some missing newlines in longhelp output" -c9b340a2 fix missing WebPInitAlphaProcessing call for premultiplied colorspace output -57897bae Merge "lossless_neon: use vcreate_*() where appropriate" -6aa4777b Merge "(enc|dec)_neon: use vcreate_*() where appropriate" -0d346e41 Always reinit VP8TransformWHT instead of hard-coding -7d039fc3 cwebp: fallback to native webp decode in WIC builds -d471f424 cwebp: add some missing newlines in longhelp output -bf0e0030 lossless_neon: use vcreate_*() where appropriate -9251c2f6 (enc|dec)_neon: use vcreate_*() where appropriate -399b916d lossy decoding: correct alpha-rescaling for YUVA format -78c12ed8 Merge "Makefile.vc: add rudimentary avx2 support" -dc5b122f try to remove the spurious warning for static analysis -ddfefd62 Makefile.vc: add rudimentary avx2 support -a8911643 Merge "simplify VP8LInitBitReader()" -fdbcd44d simplify VP8LInitBitReader() -7c004287 makefile.unix: add rudimentary avx2 support -515e35cf Merge "add stub dsp/enc_avx2.c" -a05dc140 SSE2: yuv->rgb speed-up for point-sampling -178e9a69 add stub dsp/enc_avx2.c -1b99c09c Merge "configure: add a test for -mavx2" -fe728071 configure: add a test for -mavx2 -e46a247c cpu: fix check for __cpuidex availability -176fda26 fix the bit-writer for lossless in 32bit mode -541784c7 dsp.h: add a check for AVX2 / define WEBP_USE_AVX2 -bdb151ee dsp/cpu: add AVX2 detection -ab9f2f86 Merge "revamp the point-sampling functions by processing a full plane" -a2f8b289 revamp the point-sampling functions by processing a full plane -ef076026 use decoder's DSP functions for autofilter -2b5cb326 Merge "dsp/cpu: add AVX detection" -df08e67e dsp/cpu: add AVX detection -e2f405c9 Merge "clean-up and slight speed-up in-loop filtering SSE2" -f60957bf clean-up and slight speed-up in-loop filtering SSE2 -9fc3ae46 .gitattributes: treat .ppm as binary -3da924b5 Merge "dsp/WEBP_USE_NEON: test for __aarch64__" -c7164490 Android.mk: always include *_neon.c in the build -a577b23a dsp/WEBP_USE_NEON: test for __aarch64__ -54bfffca move RemapBitReader() from idec.c to bit_reader code -34168ecb Merge "remove all unused layer code" -f1e77173 remove all unused layer code -b0757db7 Code cleanup for VP8LGetHistoImageSymbols. -5fe628d3 make the token page size be variable instead of fixed 8192 -f948d08c memory debug: allow setting pre-defined malloc failure points -ca3d746e use block-based allocation for backward refs storage, and free-lists -1ba61b09 enable NEON intrinsics in aarch64 builds -b9d2bb67 dsp/neon.h: coalesce intrinsics-related defines -b5c75258 iosbuild: add support for iOSv7/aarch64 -9383afd5 Reduce number of memory allocations while decoding lossless. -888e63ed Merge "dsp/lossless: prevent signed int overflow in left shift ops" -8137f3ed Merge "instrument memory allocation routines for debugging" -2aa18736 instrument memory allocation routines for debugging -d3bcf72b Don't allocate VP8LHashChain, but treat like automatic object -bd6b8619 dsp/lossless: prevent signed int overflow in left shift ops -b7f19b83 Merge "dec/vp8l: prevent signed int overflow in left shift ops" -29059d51 Merge "remove some uint64_t casts and use." -e69a1df4 dec/vp8l: prevent signed int overflow in left shift ops -cf5eb8ad remove some uint64_t casts and use. -38e2db3e MIPS: MIPS32r1: Added optimization for HistogramAdd. -e0609ade dwebp: fix exit code on webp load failure -bbd358a8 Merge "example_util.h: avoid forward declaring enums" -8955da21 example_util.h: avoid forward declaring enums -6d6865f0 Added SSE2 variants for Average2/3/4 -b3a616b3 make HistogramAdd() a pointer in dsp -c8bbb636 dec_neon: relocate some inline-asm defines -4e393bb9 dec_neon: enable intrinsics-only functions -ba99a922 dec_neon: use positive tests for USE_INTRINSICS -69058ff8 Merge "example_util: add ExUtilDecodeWebPIncremental" -a7828e8b dec_neon: make WORK_AROUND_GCC conditional on version -3f3d717a Merge "enc_neon: enable intrinsics-only functions" -de3cb6c8 Merge "move LOCAL_GCC_VERSION def to dsp.h" -1b2fe14d example_util: add ExUtilDecodeWebPIncremental -ca49e7ad Merge "enc_neon: move Transpose4x4 to dsp/neon.h" -ad900abd Merge "fix warning about size_t -> int conversion" -4825b436 fix warning about size_t -> int conversion -42b35e08 enc_neon: enable intrinsics-only functions -f937e012 move LOCAL_GCC_VERSION def to dsp.h -5e1a17ef enc_neon: move Transpose4x4 to dsp/neon.h -c7b92a5a dec_neon: (WORK_AROUND_GCC) delete unused Load4x8 -8e5f90b0 Merge "make ExUtilLoadWebP() accept NULL bitstream param." -05d4c1b7 Merge "cwebp: add webpdec" -ddeb6ac8 cwebp: add webpdec -35d7d095 Merge "Reduce memory footprint for encoding WebP lossless." -0b896101 Reduce memory footprint for encoding WebP lossless. -f0b65c9a make ExUtilLoadWebP() accept NULL bitstream param. -9c0a60cc Merge "dwebp: move webp decoding to example_util" -1d62acf6 MIPS: MIPS32r1: Added optimization for HuffmanCost functions. -4a0e7390 dwebp: move webp decoding to example_util -c0220460 Merge "Bugfix: Incremental decode of lossy-alpha" -8c7cd722 Bugfix: Incremental decode of lossy-alpha -7955152d MIPS: fix error with number of registers. -b1dabe37 Merge "Move the HuffmanCost() function to dsp lib" -75b12006 Move the HuffmanCost() function to dsp lib -2772b8bd MIPS: fix assembler error revealed by clang's debug build -6653b601 enc_mips32: fix unused symbol warning in debug -8dec1209 enc_mips32: disable ITransform(One) in debug builds -98519dd5 enc_neon: convert Disto4x4 to intrinsics -fe9317c9 cosmetics: -953b0746 enc_neon: cosmetics -a9fc697c Merge "WIP: extract the float-calculation of HuffmanCost from loop" -3f84b521 Merge "replace some mult-long (vmull_u8) with mult-long-accumulate (vmlal_u8)" -4ae0533f MIPS: MIPS32r1: Added optimizations for ExtraCost functions. -b30a04cf WIP: extract the float-calculation of HuffmanCost from loop -a8fe8ce2 Merge "NEON intrinsics version of CollectHistogram" -95203d2d NEON intrinsics version of CollectHistogram -7ca2e74b replace some mult-long (vmull_u8) with mult-long-accumulate (vmlal_u8) -41c6efbd fix lossless_neon.c -8ff96a02 NEON intrinsics version of FTransform -0214f4a9 Merge "MIPS: MIPS32r1: Added optimizations for FastLog2" -baabf1ea MIPS: MIPS32r1: Added optimizations for FastLog2 -3d49871d NEON functions for lossless coding -3fe02915 MIPS: MIPS32r1: Added optimizations for SSE functions. -c503b485 Merge "fix the gcc-4.6.0 bug by implementing alternative method" -abe6f487 fix the gcc-4.6.0 bug by implementing alternative method -5598bdec enc_mips32.c: fix file mode -2b1b4d5a MIPS: MIPS32r1: Add optimization for GetResidualCost -f0a1f3cd Merge "MIPS: MIPS32r1: Added optimization for FTransform" -7231f610 MIPS: MIPS32r1: Added optimization for FTransform -869eaf6c ~30% encoding speedup: use NEON for QuantizeBlock() -f758af6b enc_neon: convert FTransformWHT to intrinsics -7dad095b MIPS: MIPS32r1: Added optimization for Disto4x4 (TTransform) -2298d5f3 MIPS: MIPS32r1: Added optimization for QuantizeBlock -e88150c9 Merge "MIPS: MIPS32r1: Add optimization for ITransform" -de693f25 lossless_neon: disable VP8LConvert* functions -4143332b NEON intrinsics for encoding -0ca2914b MIPS: MIPS32r1: Add optimization for ITransform -71bca5ec dec_neon: use vst_lane instead of vget_lane -bf061052 Intrinsics NEON version of TransformOne -19c6f1ba Merge "dec_neon: use vld?_lane instead of vset?_lane" -7a94c0cf upsampling_neon: drop NEON suffix from local functions -d14669c8 upsampling_sse2: drop SSE2 suffix from local functions -2ca42a4f enc_sse2: drop SSE2 suffix from local functions -d038e619 dec_sse2: drop SSE2 suffix from local functions -fa52d752 dec_neon: use vld?_lane instead of vset?_lane -c520e77d cosmetic: fix long line -4b0f2dae Merge "add intrinsics NEON code for chroma strong-filtering" -e351ec07 add intrinsics NEON code for chroma strong-filtering -aaf734b8 Merge "Add SSE2 version of forward cross-color transform" -c90a902e Add SSE2 version of forward cross-color transform -bc374ff3 Use histogram_bits to initalize transform_bits. -2132992d Merge "Add strong filtering intrinsics (inner and outer edges)" -5fbff3a6 Add strong filtering intrinsics (inner and outer edges) -d4813f0c Add SSE2 function for Inverse Cross-color Transform -26029568 dec_neon: add strong loopfilter intrinsics -cca7d7ef Merge "add intrinsics version of SimpleHFilter16NEON()" -1a05dfa7 windows: fix dll builds -d6c50d8a Merge "add some colorspace conversion functions in NEON" -4fd7c82e SSE2 variants of Subtract-Green: Rectify loop condition -97e5fac3 add some colorspace conversion functions in NEON -b9a7a45f add intrinsics version of SimpleHFilter16NEON() -daccbf40 add light filtering NEON intrinsics -af444608 fix typo in STORE_WHT -6af6b8e1 Tune HistogramCombineBin for large images. -af93bdd6 use WebPSafe[CM]alloc/WebPSafeFree instead of [cm]alloc/free -51f406a5 lossless_sse2: relocate VP8LDspInitSSE2 proto -0f4f721b separate SSE2 lossless functions into its own file -514fc251 VP8LConvertFromBGRA: use conversion function pointers -6d2f3527 dsp/dec: TransformDCUV: use VP8TransformDC -defc8e1b Merge "fix out-of-bound read during alpha-plane decoding" -fbed3643 Merge "dsp: reuse wht transform from dec in encoder" -d8467084 Merge "Add SSE2 version of ARGB -> BGR/RGB/... conversion functions" -207d03b4 fix out-of-bound read during alpha-plane decoding -d1b33ad5 2-5% faster trellis with clang/MacOS (and ~2-3% on ARM) -369c26dd Add SSE2 version of ARGB -> BGR/RGB/... conversion functions -df230f27 dsp: reuse wht transform from dec in encoder -80e218d4 Android.mk: fix build with APP_ABI=armeabi-v7a-hard -59daf083 Merge "cosmetics:" -53622008 cosmetics: -3e7f34a3 AssignSegments: quiet array-bounds warning -3c2ebf58 Merge "UpdateHistogramCost: avoid implicit double->float" -cf821c82 UpdateHistogramCost: avoid implicit double->float -312e638f Extend the search space for GetBestGreenRedToBlue -1c58526f Fix few nits -fef22704 Optimize and re-structure VP8LGetHistoImageSymbols -068b14ac Optimize lossless decoding. -5f0cfa80 Do a binary search to get the optimum cache bits. -24ca3678 Merge "allow 'cwebp -o -' to emit output to stdout" -e12f874e allow 'cwebp -o -' to emit output to stdout -2bcad89b allow some more stdin/stout I/O -84ed4b3a fix cwebp.1 typos after patch #69199 -65b99f1c add a -z option to cwebp, and WebPConfigLosslessPreset() function -30176619 4-5% faster trellis by removing some unneeded calculations. -687a58ec histogram.c: reindent after b33e8a0 -06d456f6 Merge "~3-4% faster lossless encoding" -c60de260 ~3-4% faster lossless encoding -42eb06fc Merge "few cosmetics after patch #69079" -82af8264 few cosmetics after patch #69079 -b33e8a05 Refactor code for HistogramCombine. -ca1bfff5 Merge "5-10% encoding speedup with faster trellis (-m 6)" -5aeeb087 5-10% encoding speedup with faster trellis (-m 6) -82ae1bf2 cosmetics: normalize VP8GetCPUInfo checks -e3dd9243 Merge "Refactor GetBestPredictorForTile for future tuning." -206cc1be Refactor GetBestPredictorForTile for future tuning. -3cb84062 Merge "speed-up trellis quant (~5-10% overall speed-up)" -b66f2227 Merge "lossy encoding: ~3% speed-up" -4287d0d4 speed-up trellis quant (~5-10% overall speed-up) -390c8b31 lossy encoding: ~3% speed-up -9a463c4a Merge "dec_neon: convert TransformWHT to intrinsics" -e8605e96 Merge "dec_neon: add ConvertU8ToS16" -4aa3e412 MIPS: MIPS32r1: rescaler bugfix -c16cd99a Speed up lossless encoder. -9d6b5ff1 dec_neon: convert TransformWHT to intrinsics -2ff0aae2 dec_neon: add ConvertU8ToS16 -77a8f919 fix compilation with USE_YUVj flag -4acbec1b Merge changes I3b240ffb,Ia9370283,Ia2d28728 -2719bb7e dec_neon: TransformAC3: work on packed vectors -b7b60ca1 dec_neon: add SaturateAndStore4x4 -b7685d73 Rescale: let ImportRow / ExportRow be pointer-to-function -e02f16ef dec_neon.c: convert TransformDC to intrinsics -9cba963f add missing file -8992ddb7 use static clipping tables -0235d5e4 1-2% faster quantization in SSE2 -b2fbc36c fix VC12-x64 warning -6e37cb94 Merge "cosmetics: backward_references.c: reindent after a7d2ee3" -a42ea974 cosmetics: backward_references.c: reindent after a7d2ee3 -6c327442 Merge "fix missing __BIG_ENDIAN__ definition on some platform" -a8b6aad1 fix missing __BIG_ENDIAN__ definition on some platform -fde2904b Increase initial buffer size for VP8L Bit Writer. -a7d2ee39 Optimize cache estimate logic. -7fb6095b Merge "dec_neon.c: add TransformAC3" -bf182e83 VP8LBitWriter: use a bit-accumulator -3f40b4a5 Merge "MIPS: MIPS32r1: clang macro warning resolved" -1684f4ee WebP Decoder: Mark some truncated bitstreams as invalid -acbedac4 MIPS: MIPS32r1: clang macro warning resolved -228e4877 dec_neon.c: add TransformAC3 -393f89b7 Android.mk: avoid gcc-specific flags with clang -32aeaf11 revamp VP8LColorSpaceTransform() a bit -0c7cc4ca Merge "Don't dereference NULL, ensure HashChain fully initialized" -391316fe Don't dereference NULL, ensure HashChain fully initialized -926ff402 WEBP_SWAP_16BIT_CSP: remove code dup -1d1cd3bb Fix decode bug for rgbA_4444/RGBA_4444 color-modes. -939e70e7 update AUTHORS file -8934a622 cosmetics: *_mips32.c -dd438c9a MIPS: MIPS32r1: Optimization of some simple point-sampling functions. PATCH [6/6] -53520911 Added support for calling sampling functions via pointers. -d16c6974 MIPS: MIPS32r1: Optimization of filter functions. PATCH [5/6] -04336fc7 MIPS: MIPS32r1: Optimization of function TransformOne. PATCH [4/6] -92d8fc7d MIPS: MIPS32r1: Optimization of function WebPRescalerImportRow. PATCH [3/6] -bbc23ff3 parse one row of intra modes altogether -a2f608f9 Merge "MIPS: MIPS32r1: Optimization of function WebPRescalerExportRow. [2/6]" -88230854 MIPS: MIPS32r1: Optimization of function WebPRescalerExportRow. [2/6] -c5a5b028 decode mt+incremental: fix segfault in debug builds -9882b2f9 always use fast-analysis for all methods. -000adac0 Merge "autoconf: update ax_pthread.m4" -2d2fc37d update .gitignore -5bf4255a Merge "Make it possible to avoid automagic dependencies" -c1cb1933 disable NEON for arm64 platform -73a304e9 Make it possible to avoid automagic dependencies -4d493f8d MIPS: MIPS32r1: Decoder bit reader function optimized. PATCH [1/6] -c741183c make WebPCleanupTransparentArea work with argb picture -5da18552 add a decoding option to flip image vertically -00c3c4e1 Merge "add man/vwebp.1" -2c6bb428 add man/vwebp.1 -ea59a8e9 Merge "Merge tag 'v0.4.0'" -7574bed4 fix comments related to array sizes -0b5a90fd dwebp.1: fix option formatting -effcb0fd Merge tag 'v0.4.0' -7c76255d autoconf: update ax_pthread.m4 -fff2a11b make -short work with -print_ssim, -print_psnr, etc. -68e7901d update ChangeLog (tag: v0.4.0-rc1, tag: v0.4.0, origin/0.4.0) -256e4333 update NEWS description with new general features -29625340 Merge "gif2webp: don't use C99 %zu" into 0.4.0 -3b9f9dd0 gif2webp: don't use C99 %zu -b5b2e3c7 cwebp: fix metadata output w/lossy+alpha -ad26df1a makefile.unix: clean up libgif2webp_util.a -c3b45570 update Changelog -ca841121 Merge "bump version to 0.4.0" into 0.4.0 -8c524db8 bump version to 0.4.0 -eec2398c update AUTHORS & .mailmap -b9bbf6a1 update NEWS for 0.4.0 -c72e0811 Merge "dec/webp.c: don't wait for data before reporting w/h" -5ad65314 dec/frame.c: fix formatting -f7fc4bc8 dec/webp.c: don't wait for data before reporting w/h -66a32af5 Merge "NEON speed up" -26d842eb NEON speed up -f307f98b Merge "webpmux: let -- stop parameter parsing" -fe051da7 Merge "README: add a section on gif2webp" -6fd2bd62 Merge "manpage pedantry" -4af19007 README: add a section on gif2webp -6f36ade9 manpage pedantry -f9016cb9 README: update dwebp options -b4fa0a47 webpmux: let -- stop parameter parsing -a9a20acf gif2webp: Add a multi-threaded encode option -495bef41 fix bug in TrellisQuantize -605a7127 simplify __cplusplus ifdef -33109f99 Merge "drop: ifdef __cplusplus checks from C files" -7f9de0b9 Merge changes I994a5587,I8467bb71,I13b50688,I1e2c9c7b -5459030b gif2webp: let -- stop parameter parsing -a4b0aa06 vwebp: let -- stop parameter parsing -98af68fe cwebp: let -- stop parameter parsing -a33831e2 dwebp: let -- stop parameter parsing -36301249 add some checks on error paths -ce4c7139 Merge "autoconf: add --disable-wic" -5227d991 drop: ifdef __cplusplus checks from C files -f6453559 dwebp.1: fix typo -f91034f2 Merge "cwebp: print metadata stats when no output file is given" -d4934553 gif2webp: Backward compatibility for giflib version <= 4.1.3 -4c617d32 gif2webp: Disable output of ICC profile by default -73b731fb introduce a special quantization function for WHT -41c0cc4b Make Forward WHT transform use 32bit fixed-point calculation -a3359f5d Only compute quantization params once -70490437 cwebp: print metadata stats when no output file is given -d513bb62 * fix off-by-one zthresh calculation * remove the sharpening for non luma-AC coeffs * adjust the bias a little bit to compensate for this -ad9dec0c Merge "cosmetics: dwebp: fix local function name format" -f737f037 Merge "dwebp: remove a dead store" -3c3a70da Merge "makefile.unix: install binaries in $(DESTDIR)/bin/" -150b655f Merge "Android.mk: add some release compile flags" -dbebd33b cosmetics: dwebp: fix local function name format -27749951 dwebp: remove a dead store -a01e04fe autoconf: add --disable-wic -5009b227 makefile.unix: install binaries in $(DESTDIR)/bin/ -bab30fca Merge "fix -print_psnr / ssim options" -ebef7fb3 fix -print_psnr / ssim options -cb637855 Merge "fix bug due to overzealous check in WebPPictureYUVAToARGB()" -8189885b Merge "EstimateBestFilter: use an int to iterate WEBP_FILTER_TYPE" -4ad7d335 Android.mk: add some release compile flags -c12e2369 cosmetics: fix a few typos -6f104034 fix bug due to overzealous check in WebPPictureYUVAToARGB() -3f6c35c6 EstimateBestFilter: use an int to iterate WEBP_FILTER_TYPE -cc55790e Merge changes I8bb7a4dc,I2c180051,I021a014f,I8a224a62 -c536afb5 Merge "cosmetics: fix some typos" -cbdd3e6e add a -dither dithering option to the decoder -e8124012 Updated iosbuild.sh for XCode 5.x -4931c329 cosmetics: fix some typos -05aacf77 mux: add some missing casts -617d9348 enc/vp8l: add a missing cast -46db2865 idec: add some missing casts -b524e336 ErrorStatusLossless: correct return type -cb261f79 fix a descaling bug for vertical/horizontal U/V interpolation -bcb3955c Merge changes I48968468,I181bc736 -73f52133 gif2webp: Add a mixed compression mode -6198715e demux: split chunk parsing from ParseVP8X -d2e3f4e6 demux: add a tail pointer for chunks -87cffcc3 demux: cosmetics: s/has_frames/is_animation/ -e18e6677 demux: strictly enforce the animation flag -c4f39f4a demux: cosmetics: remove a useless break -61cb884d demux: (non-exp) fail if the fragmented flag is set -ff379db3 few % speedup of lossless encoding -df3649a2 remove all disabled code related to P-frames -6d0cb3de Merge "gif2webp: kmin = 0 should suppress key-frame addition." -36555983 gif2webp: kmin = 0 should suppress key-frame addition. -7708e609 Merge "detect flatness in blocks and favor DC prediction" -06b1503e Merge "add comment about the kLevelsFromDelta[][] LUT generation" -5935259c add comment about the kLevelsFromDelta[][] LUT generation -e3312ea6 detect flatness in blocks and favor DC prediction -ebc9b1ee Merge "VPLBitReader bugfix: Catch error if bit_pos > LBITS too." -96ad0e0a VPLBitReader bugfix: Catch error if bit_pos > LBITS too. -a014e9c9 tune quantization biases toward higher precision -1e898619 add helpful PrintBlockInfo() function -596a6d73 make use of 'extern' consistent in function declarations -c8d48c6e Merge "extract random utils to their own file util/random.[ch]" -98aa33cf extract random utils to their own file util/random.[ch] -432a723e Merge "swig: add basic go bindings" -fab618b5 Merge "rename libwebp.i -> libwebp.swig" -e4e7fcd6 swig: add basic go bindings -d3408720 Merge "fast auto-determined filtering strength" -f8bfd5cd fast auto-determined filtering strength -ac0bf951 small clean-up in ExpandMatrix() -1939607e rename libwebp.i -> libwebp.swig -43148b6c filtering: precompute ilimit and hev_threshold -18f992ec simplify f_inner calculation a little -241d11f1 add missing const -86c0031e add a 'format' field to WebPBitstreamFeatures -dde91fde Demux: Correct the extended format validation -5d6c5bd2 add entry for '-resize' option in cwebp's man -7c098d18 Use some gamma-curve range compression when computing U/V average -0b2b0504 Use deterministic random-dithering during RGB->YUV conversion -8a2fa099 Add a second multi-thread method -7d6f2da0 Merge "up to 20% faster multi-threaded decoding" -266f63ea Merge "libwebp.jar: build w/Java 1.6 for Android compat" -0532149c up to 20% faster multi-threaded decoding -38efdc2e Simplify the gif2webp tool: move the optimization details to util -de899516 libwebp.jar: build w/Java 1.6 for Android compat -cb221552 Decode a full row of bitstream before reconstructing -dca8a4d3 Merge "NEON/simple loopfilter: avoid q4-q7 registers" -9e84d901 Merge "NEON/TransformWHT: avoid q4-q7 registers" -fc10249b NEON/simple loopfilter: avoid q4-q7 registers -2f09d63e NEON/TransformWHT: avoid q4-q7 registers -77585a2b Merge "use a macrofunc for setting NzCoeffs bits" -d155507c Merge "use HINT_GRAPH as image_hint for gif source" -9c561646 Merge "only print GIF_DISPOSE_WARNING once" -05879865 use HINT_GRAPH as image_hint for gif source -0b28d7ab use a macrofunc for setting NzCoeffs bits -f9bbc2a0 Special-case sparse transform -00125196 gif2webp: detect and flatten uniformly similar blocks -0deaf0fa only print GIF_DISPOSE_WARNING once -6a8c0eb7 Merge "small optimization in segment-smoothing loop" -f7146bc1 small optimization in segment-smoothing loop -5a7533ce small gif2webp fix -4df0c89e Merge changes Ic697660c,I27285521 -5b2e6bd3 Android.mk: add a dwebp target -f910a84e Android.mk: update build flags -63f9aba4 special-case WHT transform when there's only DC -80911aef Merge "7-8% faster decoding by rewriting GetCoeffs()" -606c4304 gif2webp: Improved compression for lossy animated WebP -fb887f7f gif2webp: Different kmin/kmax defaults for lossy and lossless -2a981366 7-8% faster decoding by rewriting GetCoeffs() -92d47e4c improve VP8L signature detection by checking the version bits too -5cd43e43 Add -incremental option to dwebp -54b8e3f6 webpmux: DisplayInfo(): remove unnecessary error checks. -40ae3520 fix memleak in WebPIDelete() -d9662658 mux.h doc: WebPMuxGetFrame() can return WEBP_MUX_MEMORY_ERROR too. -0e6747f8 webpmux -info: display dimensions and has_alpha per frame -d78a82c4 Sanity check for underflow -8498f4bf Merge "remove -Wshadow warnings" -e89c6fc8 Avoid a potential memleak -3ebe1757 Merge "break down the proba 4D-array into some handy structs" -6a44550a break down the proba 4D-array into some handy structs -2f5e8934 remove -Wshadow warnings -bf3a29b3 Merge "add proper WEBP_HAVE_GIF and WEBP_HAVE_GL flags" -2b0a7593 Merge "fix some warnings from static analysis" -22dd07ce mux.h: Some doc corrections -79ff0346 add proper WEBP_HAVE_GIF and WEBP_HAVE_GL flags -d51f45f0 fix some warnings from static analysis -d134307b fix conversion warning on MSVC -d538cea8 gif2webp: Support a 'min' and 'max' key frame interval -80b54e1c allow search with token buffer loop and fix PARTITION0 problem -b7d4e042 add VP8EstimateTokenSize() -10fddf53 enc/quant.c: silence a warning -399cd456 Merge "fix compile error on ARM/gcc" -9f24519e encoder: misc rate-related fixes -c663bb21 Merge "simplify VP8IteratorSaveBoundary() arg passing" -fa46b312 Demux.h: Correct a method name reference -f8398c9d fix compile error on ARM/gcc -f691f0e4 simplify VP8IteratorSaveBoundary() arg passing -42542be8 up to 6% faster encoding with clang compiler -93402f02 multi-threaded segment analysis -7e2d6595 Merge "remove the PACK() bit-packing tricks" -c13fecf9 remove the PACK() bit-packing tricks -2fd091c9 Merge "use NULL for lf_stats_ testing, not bool" -b11c9d62 dwebp: use default dct_method -4bb8465f Merge "(de)mux.h: wrap pseudo-code in /* */" -cfb56b17 make -pass option work with token buffers -5416aab4 (de)mux.h: wrap pseudo-code in /* */ -35dba337 use NULL for lf_stats_ testing, not bool -733a7faa enc->Iterator memory cleanup -e81fac86 Add support for "no blend" in webpmux binary -3b80bc48 gif2webp: Separate out each step into a method -bef7e9cc Add doc precision about demux object keeping pointers to data. -61405a14 dwebp: enable stdout output with WIC -6eabb886 Merge "Animated WebP: add "do no blend" option to spec" -be20decb fix compilation for BITS 24 -e58cc137 Merge "dwebp: s/unsigned char/uint8_t/" -72501d43 dwebp: s/unsigned char/uint8_t/ -2c9633e8 Merge "gif2webp: Insert independent frames at regular intervals." -f0d6a14b gif2webp: Insert independent frames at regular intervals. -b25a6fbf yuv.h: fix indent -ede3602e Merge "cosmetics: fix indent" -3a65122a dwebp: fix stdout related output -388a7249 cosmetics: fix indent -4c7322c8 Merge "dsp: msvc compatibility" -d50c7e32 Merge "5-7% faster SSE2 versions of YUV->RGB conversion functions" -b8ab7847 Merge "simplify upsampler calls: only allow 'bottom' to be NULL" -df6cebfa 5-7% faster SSE2 versions of YUV->RGB conversion functions -ad6ac32d simplify upsampler calls: only allow 'bottom' to be NULL -a5e8afaf output to stdout if file name is "-" -f358450f dsp: msvc compatibility -43a7c8eb Merge "cosmetics" -4c5f19c1 Merge "bit_reader.h: cosmetics" -f72fab70 cosmetics -14dd5e78 fix const-ness -b20aec49 Merge "Support for 'do not blend' option in vwebp" -dcf65222 Support for 'do not blend' option in vwebp -d5bad033 Animated WebP: add "do no blend" option to spec -a2f5f73d Merge "Support for "Do not blend" in mux and demux libraries" -e081f2f3 Pack code & extra_bits to Struct (VP8LPrefixCode). -6284854b Support for "Do not blend" in mux and demux libraries -f486aaa9 Merge "slightly faster ParseIntraMode" -d1718632 slightly faster ParseIntraMode -3ceca8ad bit_reader.h: cosmetics -69257f70 Create LUT for PrefixEncode. -988b7084 add WebPWorkerExecute() for convenient bypass -06e24987 Merge "VP8EncIterator clean-up" -de4d4ad5 VP8EncIterator clean-up -7bbe9529 Merge "cosmetics: thread.c: drop a redundant comment" -da411485 cosmetics: thread.c: drop a redundant comment -feb4b6e6 thread.h: #ifdef when checking WEBP_USE_THREAD -8924a3a7 thread.c: drop WebPWorker prefix from static funcs -1aed8f2a Merge "fix indent" -4038ed15 fix indent -1693fd9b Demux: A new state WEBP_DEMUX_PARSE_ERROR -8dcae8b3 fix rescaling-with-alpha inaccuracy -11249abf Merge changes I9b4dc36c,I4e0eef4d -52508a1f Mux: support parsing unknown chunks within a frame/fragment. -05db0572 WebPMuxSetChunk: remove unused variable -8ba1bf61 Stricter check for presence of alpha when writing lossless images -a03c3516 Demux: WebPIterator now also denotes if the frame has alpha. -6df743a3 Decoder: handle fragments case correctly too. -faa4b07e Support for unknown chunks in mux library -7d60bbc6 Speed up HashChainFindCopy function. -66740140 Speedup Alpha plane encoding. -b7346a1e 0.1 % speedup to decoding -c606182e webp-container-spec: Tighten language added by last -a34a5029 pngdec: output error messages from libpng -e84c625d Merge "Detect canvas and image size mismatch in decoder." -f626fe2e Detect canvas and image size mismatch in decoder. -f5fbdee0 demux: stricter image bounds check -30c8158a add extra assert in Huffman decode code -8967b9f3 SSE2 for lossless decoding (critical) functions. -699d80ea Jump-lookup for Huffman coding -c34307ab fix some VS9 warnings about type conversion -eeada35c pngdec: add missing include -54b65108 gif2webp: If aligning to even offsets, extra pixels should be transparent -0bcf5ce3 Merge "remove a malloc() in case we're using only FILTER_NONE for alpha" -2c07143b remove a malloc() in case we're using only FILTER_NONE for alpha -a4d5f59d Faster lossless decoding -fd53bb75 Merge "alternate LUT-base reverse-bits code" -d1c166ef Merge "Container spec: a clarification on background color." -fdb91779 Rename a method -5e967532 Container spec: a clarification on background color. -30e77d0f Merge branch '0.3.0' -1b631e29 alternate LUT-base reverse-bits code -24cc307a ~20% faster lossless decoding -313d853f Speedup for decoding lossless WebP photographs: -24ee098a change the bytes_per_pixels_ field into more evocative use_8b_decode -2a04b034 update ChangeLog (tag: v0.3.1-rc2, tag: v0.3.1) -7288950b Regression fix for alpha channels using color cache: -2e377b53 wicdec: silence a format warning -ad9e42a6 muxedit: silence some uninitialized warnings -3307c163 Don't set alpha-channel to 0xff for alpha->green uplift -5130770c Merge "wicdec: silence a format warning" -a37eff47 Regression fix for alpha channels using color cache: -241cf99b Merge "muxedit: silence some uninitialized warnings" -c8f9c84d Regression fix for alpha unfiltering: -14cd5c6c muxedit: silence some uninitialized warnings -a368db81 dec/vp8l: quiet vs9 x64 type conversion warning -ffae9f31 wicdec: silence a format warning -8cf0701e Alpha encoding: never filter in case of NO_COMPRESSION -825e73b1 update ChangeLog (tag: v0.3.1-rc1) -abf6f691 update NEWS -5a92c1a5 bump version to 0.3.1 -86daf77c store top Y/U/V samples in packed fashion -67bc353e Revert "add WebPBlendAlpha() function to blend colors against background" -068db59e Intertwined decoding of alpha and RGB -38cc0114 Simplify forward-WHT + SSE2 version -3fa595a5 Support decoding upto given row in DECODE_DATA_FUNC -520f005f DequantizeLevels(): Add 'row' and 'num_rows' args -47374b82 Alpha unfilter for given set of rows -f32097e0 probe input file and quick-check for WebP format. -a2aed1d0 configure: improve gl/glut library test -c7e89cbb update copyright text -a00380d2 configure: remove use of AS_VAR_APPEND -a94a88dd fix EXIF parsing in PNG -a71e5d84 add doc precision for WebPPictureCopy() and WebPPictureView() -8287012e remove datatype qualifier for vmnv -e1908430 fix a memory leak in gif2webp -0b18b9ee fix two minor memory leaks in webpmux -db5095d5 remove some cruft from swig/libwebp.jar -850e956f README: update swig notes -bddd9b0a swig/python: add minimal documentation -d573a8d5 swig: add python encode support -6b931875 swig/java: reduce wrapper function code duplication -6fe536f4 swig/java: rework uint8_t typemap -a2ea4643 Fix the bug in ApplyPalette. -7bb28d2a webp/lossless: fix big endian BGRA output -f036d4bf Speed up ApplyPalette for ARGB pixels. -8112c8cf remove some warnings: -cc128e0b Further reduce memory to decode lossy+alpha images -07db70d2 fix for big-endian -eda8a7de gif2webp: Fix signed/unsigned comparison mismatch -31f346fe Makefile.vc: fix libwebpdemux dll variable typo -6c76d28e swig: add python (decode) support -b4f5bb6c swig: cosmetics -498d4dd6 WebP-Lossless encoding improvements. -26e72442 swig: ifdef some Java specific code -8ecec686 configure: add warning related flags -e676b043 configure: add GLUT detection; build vwebp -b0ffc437 Alpha decoding: significantly reduce memory usage -20aa7a8d configure: add --enable-everything -b8307cc0 configure.ac: add some helper macros -980e7ae9 Remove the gcc compilation comments -7f25ff99 gif2webp: Fix ICC and XMP support -d8e53211 Add missing name to AUTHORS -11edf5e2 Demux: Fix a potential memleak -c7b92184 don't forward declare enums -7a650c6a prevent signed int overflow in left shift ops -31bea324 add precision about dynamic output reallocation with IDecoder -c22877f7 Add incremental support for extended format files -5051245f Makefile.vc: have 'all' target build everything -8191deca Makefile.vc: flags cleanup -b9d74735 Makefile.vc: drop /FD flag -5568dbcf update gitignore -f4c7b654 WebPEncode: An additional check. Start VP8EncLoop/VP8EncTokenLoop only if VP8EncStartAlpha succeeded. -1fb04bec pngdec: Avoid a double-free. -dcbb1ca5 add WebPBlendAlpha() function to blend colors against background -bc9f5fbe configure.ac: add AM_PROG_AR for automake >= 1.12 -bf867bf2 Tuned cross_color parameter (step) for lower qual -90e2ec5a Merge "probe input file and quick-check for WebP format." -7180d7ff Merge "update copyright text" -830f72b7 probe input file and quick-check for WebP format. -2ccf58d6 configure: improve gl/glut library test -d640614d update copyright text -c2113ad4 Merge "configure: remove use of AS_VAR_APPEND" -9326a56f configure: remove use of AS_VAR_APPEND -ea63d619 fix a type warning on VS9 x86 -bec11092 fix EXIF parsing in PNG -b6e65f3d Merge "fix warnings for vs9 x64" -438946dc fix warnings for vs9 x64 -f4710e3b collect macroblock reconstruction data in VP8MBData struct -23d28e21 add doc precision for WebPPictureCopy() and WebPPictureView() -518f2cd7 cosmetics: gif2webp: fix indent -af358e68 Merge "remove datatype qualifier for vmnv" -3fe91635 remove datatype qualifier for vmnv -764fdffa fix a memory leak in gif2webp -3e59a74d fix two minor memory leaks in webpmux -47b9862f Merge "README: update swig notes" -325d15ff remove some cruft from swig/libwebp.jar -4a7627c2 README: update swig notes -5da81e33 Merge "swig/python: add minimal documentation" -f39e08f2 Merge "swig: add python encode support" -6ca4a3e3 Merge "swig/java: reduce wrapper function code duplication" -8f8702b0 Merge "swig/java: rework uint8_t typemap" -91413be2 reduce memory for VP8MB and remove bitfields use -7413394e Fix the memory leak in ApplyFilters. -2053c2cf simplify the alpha-filter testing loop -825b64db swig/python: add minimal documentation -14677e11 swig: add python encode support -a5c297c8 swig/java: reduce wrapper function code duplication -ad4a367d swig/java: rework uint8_t typemap -0d25876b use uint8_t for inv_palette[] -afa3450c Fix the bug in ApplyPalette. -2d6ac422 Merge "webp/lossless: fix big endian BGRA output" -2ca83968 webp/lossless: fix big endian BGRA output -742110cc Speed up ApplyPalette for ARGB pixels. -2451e47d misc code cleanup -83db4043 Merge "swig: add python (decode) support" -eeeea8b5 Merge "swig: cosmetics" -d5f9b8f3 Merge "libwebp: fix vp8 encoder mem alloc offsetting" -d8edd835 libwebp: fix vp8 encoder mem alloc offsetting -8983b83e remove use of bit-fields in VP8FInfo -87a4fca2 remove some warnings: -ba8f74e2 Merge "fix for big-endian" -a65067fa Merge "Further reduce memory to decode lossy+alpha images" -64c84486 Further reduce memory to decode lossy+alpha images -332130b9 Mux: make a few methods static -44370617 fix for big-endian -5199eab5 Merge "add uncompressed TIFF output support" -a3aede97 add uncompressed TIFF output support -f975b67f Merge "gif2webp: Fix signed/unsigned comparison mismatch" -5fbc734b Merge "GetFeatures: Detect invalid VP8X/VP8/VP8L data" -d5060c87 Merge "mux.h: A comment fix + some consistency fixes" -352d0dee GetFeatures: Detect invalid VP8X/VP8/VP8L data -3ef79fef Cosmetic: "width * height" -043e1ae4 gif2webp: Fix signed/unsigned comparison mismatch -5818cff7 mux.h: A comment fix + some consistency fixes -1153f888 Merge "swig: ifdef some Java specific code" -3eeedae1 Makefile.vc: fix libwebpdemux dll variable typo -f980faf4 swig: add python (decode) support -7f5f42bb swig: cosmetics -8eae188a WebP-Lossless encoding improvements. -c7247c4c swig: ifdef some Java specific code -4cb234d5 Merge "Mux: make ValidateForSingleImage() method static" -ed6f5308 Merge "Add GetCanvasSize() method to mux" -1d530c9a Mux: make ValidateForSingleImage() method static -bba4c2b2 configure: add warning related flags -fffefd18 Add GetCanvasSize() method to mux -732da8d0 Merge "configure: add GLUT detection; build vwebp" -0e513f7a configure: add GLUT detection; build vwebp -55d1c150 Merge "Alpha decoding: significantly reduce memory usage" -13d99fb5 Merge "configure: add --enable-everything" -2bf698fe Merge "configure.ac: add some helper macros" -edccd194 Alpha decoding: significantly reduce memory usage -3cafcc9a configure: add --enable-everything -4ef14477 configure.ac: add some helper macros -a4e1cdbb Remove the gcc compilation comments -6393fe4b Cosmetic fixes -9c4ce971 Simplify forward-WHT + SSE2 version -878b9da5 fix missed optim -00046171 VP8GetInfo(): Check for zero width or height. -9bf31293 align VP8Encoder::nz_ allocation -5da165cf fix CheckMode() signature -0ece07dc Merge "explicitly pad bitfields to 32-bits" -9dbc9d19 explicitly pad bitfields to 32-bits -5369a80f Merge "prevent signed int overflow in left shift ops" -70e39712 Merge "cosmetics: remove unnecessary ';'s" -d3136ce2 Merge "don't forward declare enums" -b26e5ad5 gif2webp: Fix ICC and XMP support -46089b20 Add missing name to AUTHORS -94328d64 Demux: Fix a potential memleak -96e948d7 don't forward declare enums -f4f90880 prevent signed int overflow in left shift ops -0261545e cosmetics: remove unnecessary ';'s -7ebdf110 Merge "Fix few missing comparisons to NULL" -1579989e Fix few missing comparisons to NULL -ea1b21cf Cleaned up VP8GetHeaders() so that it parses only frame header -b66caee4 dwebp: add support for BMP output -ff885bfe add precision about dynamic output reallocation with IDecoder -79241d5a Merge "Makefile.vc: have 'all' target build everything" -ac1c729b Merge "Makefile.vc: flags cleanup" -118a055c Merge "Makefile.vc: drop /FD flag" -ecad0109 Merge "update gitignore" -a681b4f4 Rename PRE_VP8 state to WEBP_HEADER -ead4d478 Add incremental support for extended format files -69d0f926 Makefile.vc: have 'all' target build everything -52967498 Makefile.vc: flags cleanup -c61baf0c Makefile.vc: drop /FD flag -3a15125d update gitignore -5167ca47 Merge "WebPEncode: An additional check. Start VP8EncLoop/VP8EncTokenLoop only if VP8EncStartAlpha succeeded." -67708d67 WebPEncode: An additional check. Start VP8EncLoop/VP8EncTokenLoop only if VP8EncStartAlpha succeeded. -b68912af pngdec: Avoid a double-free. -82abbe12 Merge "configure.ac: add AM_PROG_AR for automake >= 1.12" -e7d9548c add WebPBlendAlpha() function to blend colors against background -ed4dc717 configure.ac: add AM_PROG_AR for automake >= 1.12 -df4a406d Merge branch '0.3.0' -1e0d4b8c Update ChangeLog (tag: v0.3.0-rc7, tag: v0.3.0) -d52b405d Cosmetic fixes -6cb4a618 misc style fix -68111ab0 add missing YUVA->ARGB automatic conversion in WebPEncode() -e9a7990b Cosmetic fixes -403bfe82 Container spec: Clarify frame disposal -2aaa423b Merge "add missing YUVA->ARGB automatic conversion in WebPEncode()" -07d87bda add missing YUVA->ARGB automatic conversion in WebPEncode() -142c4629 misc style fix -3e7a13a0 Merge "Container spec: clarify the background color field" into 0.3.0 -14af7745 container doc: add a note about the 'ANMF' payload -cc635efa Container spec: clarify the background color field -e3e33949 container doc: move RIFF description to own section -4299f398 libwebp/mux: fix double free -33f9a692 Merge "demux: keep a frame tail pointer; used in AddFrame" into 0.3.0 -a2a7b959 use WebPDataCopy() instead of re-coding it. -6f18f12f demux: keep a frame tail pointer; used in AddFrame -e5af49e9 add doc precision about WebPParseHeaders() return codes -db46daab Merge "Makefile.vc: fix dynamic builds" into 0.3.0 -53c77afc Merge "gif2webp: Bgcolor fix for a special case" into 0.3.0 -a5ebd143 gif2webp: Bgcolor fix for a special case -6378f238 Merge "vwebp/animation: fix background dispose" into 0.3.0 -3c8eb9a8 fix bad saturation order in QuantizeBlock -04c7a2ec vwebp/animation: fix background dispose -81a50695 Makefile.vc: fix dynamic builds -5f25c396 update ChangeLog (tag: v0.3.0-rc6) -14d42af2 examples: don't use C99 %zu -5ccf1fe5 update ChangeLog -2560c243 update NEWS -f43bafc3 Merge changes Iecccb09c,If5ee9fd2,I3e181ce4 into 0.3.0 -a788644f dwebp: warn when decoding animated webp's -302efcdb Decode: return more meaningful error for animation -ad452735 WebPBitstreamFeatures: add has_animation field -783dfa49 disable FRGM decoding for good in libwebpmux -4b956be0 Update ChangeLog -ad8b86d7 update NEWS -3e084f63 Merge "demux cosmetics: comments/rename internal function" into 0.3.0 -d3f8c621 Merge "move WebPFeatureFlags declaration" into 0.3.0 -7386fe50 Merge "libwebp{demux,mux}: install mux_types.h" into 0.3.0 -d6cd4e90 Merge "bump decode abi" into 0.3.0 -17f8da5c bump decode abi -97684ae2 Merge "add doc precision about WebPDemuxPartial()" into 0.3.0 -f933fd2a move WebPFeatureFlags declaration -289bc47b libwebp{demux,mux}: install mux_types.h -224e8d46 add doc precision about WebPDemuxPartial() -4c18e80c demux cosmetics: comments/rename internal function -7cfd1bf1 update AUTHORS -401f7b85 Merge "speed-up lossless (~3%) with ad-hoc histogram cost evaluation" into 0.3.0 -1fc8ffca Merge "makefile.unix: dist related changes" into 0.3.0 -8a89c6ed Merge changes I466c377f,Ib761ebd3,I694857fc into 0.3.0 -f4ffb2d5 speed-up lossless (~3%) with ad-hoc histogram cost evaluation -723847d5 gif2webp: only write error messages to stderr -701b9e2a makefile.unix: dist related changes -bb85b437 Merge "update NEWS" into 0.3.0 -59423a24 gif2webp: fix crash on open failure with libgif5 -9acb17de gif2webp: silence a unused param warning -7d9fdc23 Merge "README updates" into 0.3.0 -5621934e Merge "build: fix install race on shared headers" into 0.3.0 -70809d89 Merge "bump version to 0.3.0" into 0.3.0 -d851cd1d demux: make the parse a bit more strict -28bb4107 update NEWS -cef93882 bump version to 0.3.0 -9048494d build: fix install race on shared headers -1e67e8ef README updates -42b611a4 Merge "configure: drop experimental from mux/demux" into 0.3.0 -096a8e32 Merge "vwebp: add color profile support" into 0.3.0 -ddfee5dc vwebp: add color profile support -0d6927d3 Merge "Mark fragment options as experimental in webpmux" into 0.3.0 -5dbd4030 Mark fragment options as experimental in webpmux -a0a6648c configure: drop experimental from mux/demux -ee65bad8 Merge "add support for BITS > 32" into 0.3.0 -744930db add support for BITS > 32 -7dd288f0 cwebp: fix build -19a8dd01 Merge "Makefile.vc: add vwebp.exe target" into 0.3.0 -50eeddad Merge "examples: normalize icc related program arguments" into 0.3.0 -757f637f Merge "Makefile.vc: add libwebpdecoder target" into 0.3.0 -b65c4b7c Makefile.vc: add libwebpdecoder target -f8db7b4a Merge "vwebp: replace doubles w/floats where appropriate" into 0.3.0 -d99aa56f Makefile.vc: add vwebp.exe target -013023e7 vwebp: replace doubles w/floats where appropriate -9b3db894 README.mux: add version reference -7b6a26cf Merge "cwebp: output metadata statistics" into 0.3.0 -d8dc72a0 examples: normalize icc related program arguments -7bfc9056 Merge "make alpha unfilter work in-place" into 0.3.0 -0037b2d2 Merge "add LUT-free reference code for YUV->RGB conversion." into 0.3.0 -166bf744 Merge "demux: disable fragment parsing" into 0.3.0 -126974b4 add LUT-free reference code for YUV->RGB conversion. -0aef3ebd make alpha unfilter work in-place -14ef5005 Merge "Remove 'status: experimental' from container spec" into 0.3.0 -d40c98e1 Merge "webpmux binary: tiny style fix" into 0.3.0 -0bc42689 cwebp: output metadata statistics -bc039803 Merge "autoconf: normalize experimental define" into 0.3.0 -d1e21b13 Remove 'status: experimental' from container spec -7681bb96 webpmux binary: tiny style fix -a3dd3d0f avoid installing example_util.h -252320e2 demux: disable fragment parsing -537bde05 autoconf: normalize experimental define -5e338e0b Merge changes I33e8a613,I8e8a7b44 into 0.3.0 -d9d0ea1b Merge changes If21e3ec7,I991fc30b into 0.3.0 -627f5ca6 automake: add reference to libwebp for mux/demux -eef73d07 don't consolidate proba stats too often -05ec4cc2 libwebp{,decoder}.pc: add pthread flags -1bfcf5bf add libwebpmux.pc -26ca843d add libwebpdemux.pc -69e25906 Merge "Tune Lossless compression for lower qualities." -0478b5d2 Tune Lossless compression for lower qualities. -39f7586f add a mention of parallel alpha encoding in the NEWS -5a21d967 Merge "1.5x-2x faster encoding for method 3 and up" -9bfbdd14 1.5x-2x faster encoding for method 3 and up -27dc741b Correct frame options order in README.mux -be2fd173 Mux: fix a scenario with bad ANMF/FRGM size -19eb012c Merge "Demux: Add option to get frame count using GetI()" -7368b8cb Merge "WebPGetFeatures() out of if condition for clarity." -f604c9a4 Merge "fix windows build" -153f94e8 fix windows build -847b4924 Merge "vwebp: use magenta for 'i'nfo display" -25ea46bd Merge "vwebp: add keyboard shortcuts to help output" -bea7ccaf vwebp: use magenta for 'i'nfo display -8fab161a webpmux: correct -frame param order in help output -03cc23d6 vwebp: add keyboard shortcuts to help output -068eba8d Demux: Add option to get frame count using GetI() -988b8f56 WebPGetFeatures() out of if condition for clarity. -6933d910 Merge "gif2webp: Be lenient about background color index." -4d0f7c55 Merge "WebPGetFeatures() behavior change:" -fdeeb01d gif2webp: Be lenient about background color index. -ad250320 Merge "multi-threaded alpha encoding for lossy" -4e32d3e1 Merge "fix compilation of token.c" -f817930a multi-threaded alpha encoding for lossy -88050351 fix compilation of token.c -fc816219 code using the actual values for num_parts_, not the ones from config -72655350 Merge "move the config check from .c to .h" -dd9e76f7 move the config check from .c to .h -956b217a WebPGetFeatures() behavior change: -df02e4ce WebPDemuxGetI behavior change: -633c004d Merge "rebalance method tools (-m) for methods [0..4]" -58ca6f65 rebalance method tools (-m) for methods [0..4] -7648c3cc Merge "describe rd-opt levels introduce VP8RDLevel enum" -67fb1003 Merge "autoconf: enable silent-rules by default" -a5042a32 GetVersion() methods for mux and demux -5189957e describe rd-opt levels introduce VP8RDLevel enum -4e094ace autoconf: enable silent-rules by default -b7eaa85d inline VP8LFastLog2() and VP8LFastSLog2 for small values -5cf7792e split quant_levels.c into decoder and encoder version -e5d3ffe2 Merge "Update code example in README.mux" -ac5a9156 Update code example in README.mux -38a91e99 Add example code snippet for demux API -5f557f3c README.mux: add info about Demux API and vwebp -c0ba0903 backward_references: avoid signed integer overflow -943386db disable SSE2 for now -9479fb7d lossless encoding speedup -ec2030a8 merge two lines together -b67956c0 Merge "Remove ReadOneBit() and ReadSymbolUnsafe()" -1667bded Remove ReadOneBit() and ReadSymbolUnsafe() -3151669b wicdec + dwebp cosmetics: normalize formatting -92668da6 change default filtering parameters: * type is now 'strong' * strength is now '60' -b7490f85 introduce WEBP_REFERENCE_IMPLEMENTATION compile option -33838857 faster decoding (3%-6%) -5c3e381b Merge "add a -jpeg_like option" -c2311046 remove unused declaration of VP8Zigzag -36152957 Merge "wicdec: add alpha support for paletted formats" -c9f16490 wicdec: add alpha support for paletted formats -1262f81e Merge "wicdec: silence some warnings" -e7ea61eb wicdec: silence some warnings -23c0f354 fix missing intptr_t->int cast for MSVC -e895059a add a -jpeg_like option -1f803f64 Merge "Tune alpha quality mapping to more reasonable values." -1267d498 Tune alpha quality mapping to more reasonable values. -043076e2 Merge "speed-up lossless in BackwardTrace" -f3a44dcd remove one malloc from TraceBackwards() -0fc1a3a0 speed-up lossless in BackwardTrace -7c732e59 cwebp: centralize WebPCleanupTransparentArea() -7381254e Merge "wicdec: add ICC profile extraction" -e83ff7de wicdec: add ICC profile extraction -146c6e3b Merge "cosmetics: pngdec: normalize default label location" -a8f549d7 Merge "manpages: italicize option parameters" -e118db83 Merge "encode.h: note the need to free() WebPMemoryWriter" -1dfee6db cosmetics: pngdec: normalize default label location -14c38200 manpages: italicize option parameters -7defbfad encode.h: note the need to free() WebPMemoryWriter -88d382a0 cwebp: cleanup after memory_writer -12d6cecf fix extra space in dwebp.1 man -b01681a9 Fix for demuxer frame iteration: -56c12aa6 Demuxer creation fix: -66c810bc add a -yuv option to dwebp (very similar to -pgm) -841a3ba5 Merge "Remove -Wshadow warnings." -8fd02527 Merge "upsampling_neon.c: fix build" -6efed268 Remove -Wshadow warnings. -60904aa6 Merge "allow WebPINewRGB/YUVA to be passed a NULL output buffer." -b7adf376 allow WebPINewRGB/YUVA to be passed a NULL output buffer. -27f8f742 upsampling_neon.c: fix build -06b9cdf1 gitignore: add IOS related directories -f112221e Merge "Fix more comments for iobuild.sh" -fe4d25dd Fix more comments for iobuild.sh -1de3e252 Merge "NEON optimised yuv to rgb conversion" -090b708a NEON optimised yuv to rgb conversion -daa06476 Merge "Add ios build script for building iOS library." -79fe39e2 Add ios build script for building iOS library. -126c035f remove some more -Wshadow warnings -522e9d61 Merge "cwebp: enable '-metadata'" -76ec5fa1 cwebp: enable '-metadata' -aeb91a9d Merge "cosmetics: break a few long lines" -be7c96b0 cosmetics: break a few long lines -cff8ddb6 Merge "add libwebpdecoder.pc" -93148ab8 Merge "libwebp.pc.in: detab" -6477f955 Merge "Makefile.vc: normalize path separator" -bed1ed7c add libwebpdecoder.pc -46168b2d libwebp.pc.in: detab -a941a346 Fixed few nits in the build files. -dd7a49b2 Makefile.vc: normalize path separator -9161be86 Merge "cwebp: extract WIC decoding to its own module" -08e7c58e Merge "Provide an option to build decoder library." -0aeba528 Provide an option to build decoder library. -757ebcb1 catch malloc(0)/calloc(0) with an assert -152ec3d2 Merge "handle malloc(0) and calloc(0) uniformly on all platforms" -a452a555 cwebp: extract WIC decoding to its own module -2b252a53 Merge "Provide option to swap bytes for 16 bit colormodes" -94a48b4b Provide option to swap bytes for 16 bit colormodes -42f8f934 handle malloc(0) and calloc(0) uniformly on all platforms -8b2152c5 Merge "add an extra assert to check memory bounds" -0d19fbff remove some -Wshadow warnings -cd22f655 add an extra assert to check memory bounds -8189feda Merge "Add details and reference about the YUV->RGB conversion" -1d2702b1 Merge "Formatting fixes in lossless bitstream spec" -8425aaee Formatting fixes in lossless bitstream spec -a556cb1a Add details and reference about the YUV->RGB conversion -d8f21e0b add link to SSIM description on Wikipedia -18e9167e Merge "WebP-lossless spec clarifications:" -98e25b9b Merge "cwebp: add -metadata option" -f01c2a53 WebP-lossless spec clarifications: -f4a97970 Merge "Disto4x4 and Disto16x16 in NEON" -47b7b0ba Disto4x4 and Disto16x16 in NEON -7eaee9f1 cwebp: add -metadata option -36c52c2c tiffdec: use toff_t for exif ifd offset -7c8111e4 Merge "cwebp/tiffdec: add TIFF metadata extraction" -e6409adc Remove redundant include from dsp/lossless code. -1ab5b3a7 Merge "configure: fix --with-gifincludedir" -03c749eb configure: fix --with-gifincludedir -8b650635 multiple libgif versions support for gif2webp -476e293f gif2webp: Use DGifOpenFileName() -b50f277b tiffdec: correct format string -2b9048e3 Merge "tiffdec: check error returns for width/height" -a1b5a9a3 Merge "cwebp/tiff: use the first image directory" -079423f5 tiffdec: check error returns for width/height -d62824af Merge "cwebp/jpegdec: add JPEG metadata extraction" -03afaca4 Merge "cwebp: add PNG metadata extraction" -2c724968 cwebp/jpegdec: add JPEG metadata extraction -dba64d91 cwebp: add PNG metadata extraction -1f075f89 Lossless spec corrections/rewording/clarifications -2914ecfd cwebp/tiffdec: add TIFF metadata extraction -d82a3e33 More corrections/clarifications in lossless spec: -bd002557 cwebp/tiff: use the first image directory -df7aa076 Merge "Cleanup around jpegdec" -0f57dcc3 decoding speed-up (~1%) -bcec339b Lossless bitstream clarification: -6bf20874 add examples/metadata.c -207f89c0 Merge "configure: add libwebpdemux status to summary" -1bd287a6 Cleanup around jpegdec -91455679 Merge "cosmetics: use '== 0' in size checks" -d6b88b76 cosmetics: use '== 0' in size checks -d3dace2f cosmetics: jpegdec -2f69af73 configure: add libwebpdemux status to summary -1c1c5646 cwebp: extract tiff decoding to its own module -6a871d66 cwebp: extract jpeg decoding to its own module -2ee228f9 cwebp: extract png decoding to its own module -4679db00 Merge "cwebp: add metadata framework" -63aba3ae cwebp: add metadata framework -931bd516 lossless bitstream: block size bits correction -e4fc4c1c lossless bitstream: block size bits correction -d65ec678 fix build, move token.c to src/enc/ -657f5c91 move token buffer to its own file (token.c) -c34a3758 introduce GetLargeValue() to slim-fast GetCoeffs(). -d5838cd5 faster non-transposing SSE2 4x4 FTransform -f76191f9 speed up GetResidualCost() -ba2aa0fd Add support for BITS=24 case -2e7f6e8e makefile.unix: Dependency on libraries -dca84219 Merge "Separate out mux and demux code and libraries:" -23782f95 Separate out mux and demux code and libraries: -bd56a01f configure: add summary output -90e5e319 dwebp manual: point to webpmux, gif2webp. -540790ca gif2webp.c: add a note about prerequisites -d1edf697 cwebp man page: meaning of '-q' for lossy/lossless -79efa1d0 Add man page for gif2webp utility -2243e40c Merge "gif2webp build support with autoconf tools" -c40efca1 gif2webp build support with autoconf tools -6523e2d4 WebP Container: -4da788da Merge "simplify the fwd transform" -42c3b550 simplify the fwd transform -41a6ced9 user GLfloat instead of float -b5426119 fix indentation -68f282f7 * handle offset in anim viewer 'vwebp' * fix gif2webp to handle disposal method and odd offset correctly -118cb312 Merge "add SSE2 version of Sum of Square error for 16x16, 16x8 and 8x8 case" -8a7c3cc8 Merge "Change the order of -frame argument to be more natural" -99e0a707 Merge "Simplify the texture evaluation Disto4x4()" -0f923c3f make the bundling work in a tmp buffer -e5c3b3f5 Simplify the texture evaluation Disto4x4() -48600084 Change the order of -frame argument to be more natural -35bfd4c0 add SSE2 version of Sum of Square error for 16x16, 16x8 and 8x8 case -a7305c2e Clarification for unknown chunks -4c4398e2 Refine WebP Container Spec wrt unknown chunks. -2ca642e0 Rectify WebPMuxGetFeatures: -7caab1d8 Some cosmetic/comment fixes. -60b2651a Merge "Write a GIF to WebP converter based on libgif." -c7127a4d Merge "Add NEON version of FTransformWHT" -11b27212 Write a GIF to WebP converter based on libgif. -e9a15a37 ExUtilWriteFile() to write memory segment to file -74356eb5 Add a simple cleanup step in mux assembly: -51bb1e5d mux.h: correct WebPDemuxSelectFragment() prototype -22a0fd9d Add NEON version of FTransformWHT -fa30c863 Update mux code to match the spec wrt animation -d9c5fbef by-pass Analysis pass in case segments=1 -d2ad4450 Merge changes Ibeccffc3,Id1585b16 -5c8be251 Merge "Chunk fourCCs for XMP/EXIF" -a00a3daf Use 'frgm' instead of 'tile' in webpmux parameters -81b8a741 Design change in ANMF and FRGM chunks: -f903cbab Chunk fourCCs for XMP/EXIF -812933d6 Tune performance of HistogramCombine -52ad1979 Animation specification in container spec -001b9302 Image fragment specification in container spec -391f9db9 Ordering of description of bits in container spec -d5735776 Metadata specification in container spec -1c4609b1 Merge commit 'v0.2.1' -0ca584cb Merge "Color profile specification in container spec" -e8b41ad1 add NEON asm version for WHT inverse transform -af6f0db2 Color profile specification in container spec -a61a824b Merge "Add NULL check in chunk APIs" -0e8b7eed fix WebPPictureView() unassigned strides -75e5f17e ARM/NEON: 30% encoding speed-up -02b43568 Add NULL check in chunk APIs -a0770727 mux struct naming -6c66dde8 Merge "Tune Lossless encoder" -ab5ea217 Tune Lossless encoder -74fefc8c Update ChangeLog (tag: v0.2.1, origin/0.2.0) -92f8059c Rename some chunks: -3bb4bbeb Merge "Mux API change:" -d0c79f05 Mux API change: -abc06044 Merge "update NEWS" into 0.2.0 -57cf313b update NEWS -25f585c4 bump version to 0.2.1 -fed7c048 libwebp: validate chunk size in ParseOptionalChunks -552cd9bc cwebp (windows): fix alpha image import on XP -b14fea99 autoconf/libwebp: enable dll builds for mingw -4a8fb272 [cd]webp: always output windows errors -d6621580 fix double to float conversion warning -72b96a69 cwebp: fix jpg encodes on XP -734f762a VP8LAllocateHistogramSet: fix overflow in size calculation -f9cb58fb GetHistoBits: fix integer overflow -b30add20 EncodeImageInternal: fix uninitialized free -3de58d77 fix the -g/O3 discrepancy for 32bit compile -77aa7d50 fix the BITS=8 case -e5970bda Make *InitSSE2() functions be empty on non-SSE2 platform -ef5cc47e make *InitSSE2() functions be empty on non-SSE2 platform -c4ea259d make VP8DspInitNEON() public -8344eadf Merge "libwebp: validate chunk size in ParseOptionalChunks" -4828bb93 Merge "cwebp (windows): fix alpha image import on XP" -30763333 libwebp: validate chunk size in ParseOptionalChunks -70481898 AccumulateLSIM: fix double -> float warnings -eda8ee4b cwebp (windows): fix alpha image import on XP -c6e98658 Merge "add EXPERIMENTAL code for YUV-JPEG colorspace" -f0360b4f add EXPERIMENTAL code for YUV-JPEG colorspace -f86e6abe add LSIM metric to WebPPictureDistortion() -c3aa215a Speed up HistogramCombine for lower qualities. -1765cb1c Merge "autoconf/libwebp: enable dll builds for mingw" -a13562e8 autoconf/libwebp: enable dll builds for mingw -9f469b57 typo: no_fancy -> no_fancy_upsampling -1a27f2f8 Merge "fix double to float conversion warning" -cf1e90de Merge "cwebp: fix jpg encodes on XP" -f2b5d19b [cd]webp: always output windows errors -e855208c fix double to float conversion warning -ecd66f77 cwebp: fix jpg encodes on XP -7b3eb372 Tune lossless compression to get better gains. -ce8bff45 Merge "VP8LAllocateHistogramSet: fix overflow in size calculation" -ab5b67a1 Merge "EncodeImageInternal: fix uninitialized free" -7fee5d12 Merge "GetHistoBits: fix integer overflow" -a6ae04d4 VP8LAllocateHistogramSet: fix overflow in size calculation -80237c43 GetHistoBits: fix integer overflow -8a997235 EncodeImageInternal: fix uninitialized free -0b9e6829 minor cosmetics -a792b913 fix the -g/O3 discrepancy for 32bit compile -73ba4357 Merge "detect and merge similar segments" -fee66275 detect and merge similar segments -0c44f415 src/webp/*.h: don't forward declare enums in C++ -d7a5ac86 vwebp: use demux interface -931e0ea1 Merge "replace 'typedef struct {} X;" by "typedef struct X X; struct X {};"" -8f216f7e remove cases of equal comparison for qsort() -28d25c82 replace 'typedef struct {} X;" by "typedef struct X X; struct X {};" -2afee60a speed up for ARM using 8bit for boolean decoder -5725caba new segmentation algorithm -2cf1f815 Merge "fix the BITS=8 case" -12f78aec fix the BITS=8 case -6920c71f fix MSVC warnings regarding implicit uint64 to uint32 conversions -f6c096aa webpmux binary: Rename 'xmp' option to 'meta' -ddfe871a webpmux help correction -b7c55442 Merge "Make *InitSSE2() functions be empty on non-SSE2 platform" -1c04a0d4 Common APIs for chunks metadata and color profile. -2a3117a1 Merge "Create WebPMuxFrameInfo struct for Mux APIs" -5c3a7231 Make *InitSSE2() functions be empty on non-SSE2 platform -7c6e60f4 make *InitSSE2() functions be empty on non-SSE2 platform -c7eb4576 make VP8DspInitNEON() public -ab3234ae Create WebPMuxFrameInfo struct for Mux APIs -e3990fd8 Alignment fixes -e55fbd6d Merge branch '0.2.0' -4238bc0a Update ChangeLog (tag: v0.2.0) -c655380c dec/io.c: cosmetics -fe1958f1 RGBA4444: harmonize lossless/lossy alpha values -681cb30a fix RGBA4444 output w/fancy upsampling -f06c1d8f Merge "Alignment fix" into 0.2.0 -f56e98fd Alignment fix -6fe843ba avoid rgb-premultiply if there's only trivial alpha values -528a11af fix the ARGB4444 premultiply arithmetic -a0a48855 Lossless decoder fix for a special transform order -62dd9bb2 Update encoding heuristic w.r.t palette colors. -6f4272b0 remove unused ApplyInverseTransform() -93bf0faa Update ChangeLog (tag: v0.2.0-rc1) -5934fc59 update AUTHORS -014a711d update NEWS -43b0d610 add support for ARGB -> YUVA conversion for lossless decoder -33705ca0 bump version to 0.2.0 -c40d7ef1 fix alpha-plane check + add extra checks -a06f8023 MODE_YUVA: set alpha to opaque if the image has none -52a87dd7 Merge "silence one more warning" into 0.2.0 -3b023093 silence one more warning -f94b04f0 move some RGB->YUV functions to yuv.h -4b71ba03 README: sync [cd]webp help output -c9ae57f5 man/dwebp.1: add links to output file format details -292ec5cc quiet a few 'uninitialized' warnings -4af3f6c4 fix indentation -9b261bf5 remove the last NOT_HAVE_LOG2 instances -323dc4d9 remove use of log2(). Use VP8LFastLog2() instead. -8c515d54 Merge "harness some malloc/calloc to use WebPSafeMalloc and WebPSafeCalloc" into 0.2.0 -d4b4bb02 Merge changes I46090628,I1a41b2ce into 0.2.0 -bff34ac1 harness some malloc/calloc to use WebPSafeMalloc and WebPSafeCalloc -a3c063c7 Merge "extra size check for security" into 0.2.0 -5e796300 Merge "WebPEncode: clear stats at the start of encode" into 0.2.0 -f1edf62f Merge "rationalize use of color-cache" into 0.2.0 -c1933317 extra size check for security -906be657 rationalize use of color-cache -dd1c3873 Add image-hint for low-color images. -4eb7aa64 Merge "WebPCheckMalloc() and WebPCheckCalloc():" into 0.2.0 -80cc7303 WebPCheckMalloc() and WebPCheckCalloc(): -183cba83 check VP8LBitWriterInit return -cbfa9eec lossless: fix crash on user abort -256afefa cwebp: exit immediately on version mismatch -475d87d7 WebPEncode: clear stats at the start of encode -a7cc7291 fix type and conversion warnings -7d853d79 add stats for lossless -d39177b7 make QuantizeLevels() store the sum of squared error -5955cf5e replace x*155/100 by x*101581>>16 -7d732f90 make QuantizeLevels() store the sum of squared error -e45a446a replace x*155/100 by x*101581>>16 -159b75d3 cwebp output size consistency: -cbee59eb Merge commit 'v0.1.99' -1889e9b6 dwebp: report -alpha option -3bc3f7c0 Merge "dwebp: add PAM output support" into 0.2.0 -d919ed06 dwebp: add PAM output support -85e215d3 README/manpages/configure: update website link -c3a207b9 Update ChangeLog (tag: v0.1.99) -d1fd7826 Merge "add extra precision about default values and behaviour" into 0.2.0 -efc826e0 add extra precision about default values and behaviour -9f29635d header/doc clean up -ff9fd1ba Makefile.vc: fix webpmux.exe *-dynamic builds -8aacc7b0 remove INAM, ICOP, ... chunks from the test webp file. -2fc13015 harmonize authors as "Name (mail@address)" -4a9f37b7 Merge "update NEWS" into 0.2.0 -7415ae13 makefile.unix: provide examples/webpmux target -ce82cedc update NEWS -641e28e8 Merge "man/cwebp.1: wording, change the date" into 0.2.0 -c37c23e5 README: cosmetics -3976dcd5 man/cwebp.1: wording, change the date -3e5bbe1c Merge "rename 'use_argb_input' to 'use_argb'" into 0.2.0 -ce90847a Merge "add some padding bytes areas for later use" into 0.2.0 -2390dabc Merge "fixing the findings by Frederic Kayser to the bitstream spec" into 0.2.0 -02751591 add a very crude progress report for lossless -a4b9b1c6 Remove some unused enum values. -dd108176 rename 'use_argb_input' to 'use_argb' -90516ae8 add some padding bytes areas for later use -d03b2503 fixing the findings by Frederic Kayser to the bitstream spec -ce156afc add missing ABI compatibility checks -9d45416a Merge "Doc: container spec text tweaks" into 0.2.0 -4e2e0a8c Doc: container spec text tweaks -f7f16a29 add ABI compatibility check -2a775570 Merge "swig: add WebPEncodeLossless* wrappers" into 0.2.0 -a3ec6225 mux.h: remove '* const' from function parameters -31426eba encode.h: remove '* const' from function parameters -9838e5d5 decode.h: remove '* const' from function parameters -4972302d swig: add WebPEncodeLossless* wrappers -9ff00cae bump encoder/decoder versions -c2416c9b add lossless quick encoding functions to the public API -4c1f5d64 Merge "NEWS: mention decode_vp8.h is no longer installed" into 0.2.0 -6cb2277d NEWS: mention decode_vp8.h is no longer installed -d5e5ad63 move decode_vp8.h from webp/ to dec/ -8d3b04a2 Merge "header clean-up" into 0.2.0 -02201c35 Merge "remove one malloc() by making color_cache non dynamic" into 0.2.0 -d708ec14 Merge "move MIN/MAX_HISTO_BITS to format_constants.h" into 0.2.0 -ab2da3e9 Merge "add a malloc() check" into 0.2.0 -2d571bd8 add a malloc() check -7f0c178e remove one malloc() by making color_cache non dynamic -6569cd7c Merge "VP8LFillBitWindow: use 64-bit path for msvc x64 builds" into 0.2.0 -23d34f31 header clean-up -2a3ab6f9 move MIN/MAX_HISTO_BITS to format_constants.h -985d3da6 Merge "shuffle variables in HashChainFindCopy" into 0.2.0 -cdf885c6 shuffle variables in HashChainFindCopy -c3b014db Android.mk: add missing lossless files -8c1cc6b5 makefile.unix dist: explicitly name installed includes -7f4647ee Merge "clarify the colorspace naming and byte ordering of decoded samples" into 0.2.0 -cbf69724 clarify the colorspace naming and byte ordering of decoded samples -857650c8 Mux: Add WebPDataInit() and remove WebPImageInfo -ff771e77 don't install webp/decode_vp8.h -596dff78 VP8LFillBitWindow: use 64-bit path for msvc x64 builds -3ca7ce98 Merge "doc: remove non-finalized chunk references" into 0.2.0 -1efaa5a3 Merge "bump versions" into 0.2.0 -51fa13e1 Merge "README: update cwebp help output" into 0.2.0 -12f9aede README: update cwebp help output -f0b5defb bump versions -4c42a61b update AUTHORS -6431a1ce doc: remove non-finalized chunk references -8130c4cc Merge "build: remove libwebpmux from default targets/config" -23b44438 Merge "configure: broaden test for libpng-config" -85bff2cd Merge "doc: correct lossless prefix coding table & code" -05108f6e Merge "More spec/code matching in mux:" -6808e69d More spec/code matching in mux: -bd2b46f5 Merge "doc/webp-container-spec: light cosmetics" -20ead329 doc/webp-container-spec: light cosmetics -1d40a8bc configure: add pthread detection -b5e9067a fix some int <-> size_t mix for buffer sizes -e41a7596 build: remove libwebpmux from default targets/config -0fc2baae configure: broaden test for libpng-config -45b8272c Merge "restore authorship to lossless bitstream doc" -06ba0590 restore authorship to lossless bitstream doc -44a09a3c add missing description of the alpha filtering methods -63db87dd Merge "vwebp: add checkboard background for alpha display" -a73b8978 vwebp: add checkboard background for alpha display -939158ce Merge "vwebp: fix info display" -b35c07d9 vwebp: fix info display -48b39eb1 fix underflow for very short bitstreams -7e622984 cosmetics: param alignment, manpage wording -1bd7dd50 Merge changes I7b0afb0d,I7ecc9708 -ac69e63e Merge "Updated cwebp man's help for Alpha & Lossless." -c0e8859d Get rid of image_info_ from WebPChunk struct. -135ca69e WebP Container Spec: -eb6f9b8a Updated cwebp man's help for Alpha & Lossless. -0fa844fb cosmetic fixes on assert and 'const' where applicable -7f22bd25 check limit of width * height is 32 bits -16c46e83 autoconf/make: cosmetics: break long lines -ab22a07a configure: add helper macro to define --with-* -c17699b3 configure: add libtiff test -0e09732c Merge "cwebp: fix crash with yuv input + lossless" -88a510ff Merge "fix big-endian VP8LWriteBits" -da99e3bf Merge "Makefile.vc: split mux into separate lib" -7bda392b cwebp: fix crash with yuv input + lossless -f56a369a fix big-endian VP8LWriteBits -54169d6c Merge "cwebp: name InputFileFormat members consistently" -e2feefa9 Makefile.vc: split mux into separate lib -27caa5aa Merge "cwebp: add basic TIFF support" -d8921dd4 cwebp: name InputFileFormat members consistently -6f76d246 cwebp: add basic TIFF support -4691407b Merge changes If39ab7f5,I3658b5ae -cca7c7b8 Fixed nit: 10 -> 10.f -5d09a244 WebPMuxCreate() error handling: -777341c3 Fix a memleak in WebPMuxCreate() -61c9d161 doc: correct lossless prefix coding table & code -4c397579 Merge "mark VP8{,L}{GetInfo,CheckSignature} as WEBP_EXTERN" -e4e36cc6 Merge "Mux: Allow only some frames/tiles to have alpha." -ad2aad3c Merge "WebP Decoding error handling:" -97649c8f Mux: Allow only some frames/tiles to have alpha. -f864be3b Lower the quality settings for Alpha encoding. -3ba81bbe WebP Decoding error handling: -fcc69923 add automatic YUVA/ARGB conversion during WebPEncode() -802e012a fix compilation in non-FANCY_UPSAMPLING mode -e012dfd9 make width/height coding match the spec -228d96a5 mark VP8{,L}{GetInfo,CheckSignature} as WEBP_EXTERN -637a314f remove the now unused *KeepA variants -d11f6fcc webpmux returns error strings rather than numbers -fcec0593 makefile.unix: cwebp: fix OSX link -6b811f1b Merge "doc: remove lossless pdf" -c9634821 doc: remove lossless pdf -b9ae4f0d cosmetics after mux changes b74ed6e, b494ad5 -b494ad50 Mux: only allow adding frame/tiles at the end. -2c341b0e Merge "Added image characteristic hint for the codec." -d373076a Added image characteristic hint for the codec. -2ed2adb5 Merge "msvc: add intrinsic based BitsLog2Floor" -e595e7c5 Merge "add demux.c to the makefiles" -da47b5bd Merge "demux: add {Next,Prev}Chunk" -e5f46742 add demux.c to the makefiles -4708393c demux: add {Next,Prev}Chunk -e8a0a821 demux: quiet msvc warnings -7f8472a6 Update the WebP Container Spec. -31b68fe6 cleanup WebPPicture struct and API -9144a186 add overflow check before calling malloc() -81720c91 consistency cosmetics -2ebe8394 Merge "Add kramdown version information to README" -71443084 enc/vp8l.c: fix build -b7ac19fe Add kramdown version information to README -efdcb667 Merge "Edit for consistency, usage and grammar." -08220102 Enable alpha in vvwebp -8de9a084 Merge "Mux API change:" -b74ed6e7 Mux API change: -233a589e take picture->argb_stride into account for lossless coding -04e33f17 Edit for consistency, usage and grammar. -a575b4bc Merge "cosmetics: add missing const" -8d99b0f4 Merge "cosmetics: remove unimplemented function proto" -69d02217 cosmetics: add missing const -5b08318b cosmetics: remove unimplemented function proto -b7fb0ed5 Log warning for unsupported options for lossless. -e1f769fe msvc: add intrinsic based BitsLog2Floor -8a69c7d8 Bug-fix: Clamp backward dist to 1. -b5b6ac97 Merge "Bring the special writer 'WebPMemoryWriter' to public API" -a6a1909f Merge "Fix floating point exception with cwebp -progress" -f2cee067 Fix floating point exception with cwebp -progress -91b7a8c7 Bring the special writer 'WebPMemoryWriter' to public API -310e2972 support resize and crop for RGBA input -a89835d3 Merge changes Ice662960,Ie8d7aa90,I2d996d5e,I01c04772 -ce614c0c Merge "dec/vp8: avoid setting decoder status twice" -900285da dec/vp8: avoid setting decoder status twice -8227adc8 Merge changes I6f02b0d0,I5cbc9c0a,I9dd9d4ed,Id684d2a1 -dcda59c1 Merge "demux: rename SetTile to SelectTile" -622ef12e demux: rename SetTile to SelectTile -81ebd375 Merge "demux: add {Next,Prev}Frame" -02dd37a2 demux: add {Next,Prev}Frame -4b79fa59 Merge "Limit the maximum size of huffman Image to 16MB." -9aa34b34 Manually number "chapters," as chapter numbers are used in the narrative. -2a4c6c29 Re-wrap at <= 72 columns -a45adc19 Apply inline emphasis and monospacing, per gdoc / PDF -91011206 Incorporate gdoc changes through 2012-06-08 -7a182487 Removed CodeRay syntax declarations ... -b3ec18c5 Provide for code-block syntax highlighting. -709d7702 Replace high ASCII artifacts (curly quotes, etc.). -930e8abb Lossless WebP doc largely ported to markdown text. -18cae37b msvc: silence some build warnings -b3923084 Limit the maximum size of huffman Image to 16MB. -f180df2a Merge "libwebp/demux: add Frame/Chunk iteration" -2bbe1c9a Merge "Enable lossless encoder code" -d0601b01 Merge changes I1d97a633,I81c59093 -78f3e345 Enable lossless encoder code -d974a9cc Merge "libwebp/demux: add simple format parsing" -26bf2232 Merge "libwebp: add WebPDemux stub functions" -2f666688 Merge "modify WebPParseHeaders to allow reuse by GetFeatures" -b402b1fb libwebp/demux: add Frame/Chunk iteration -ad9ada3b libwebp/demux: add WebPDemuxGetI -2f2d4d58 libwebp/demux: add extended format parsing -962dcef6 libwebp/demux: add simple format parsing -f8f94081 libwebp: add WebPDemux stub functions -fb47bb5c Merge "NumNamedElements() should take an enum param." -7c689805 Fix asserts in Palette and BackwardReference code. -fbdcb7ea NumNamedElements() should take an enum param. -fb4943bd modify WebPParseHeaders to allow reuse by GetFeatures -3697b5ce write an ad-hoc EncodeImageInternal variant -eaee9e79 Bug-Fix: Decode small (less than 32 bytes) images. -0bceae48 Merge "cwebp: fix alpha reporting in stats output" -0424b1ef Rebase default encoding settings. -c71ff9e3 cwebp: fix alpha reporting in stats output -e2ffe446 Merge "Stop indefinite recursion for Huffman Image." -70eb2bd6 Stop indefinite recursion for Huffman Image. -f3bab8eb Update vwebp -6d5c797c Remove support for partial files in Mux. -f1df5587 WebPMuxAssemble() returns WebPData*. -814a0639 Rename 'Add' APIs to 'Set'. -bbb0218f Update Mux psuedo-code examples. -4fc4a47f Use WebPData in MUX set APIs -c67bc979 Merge "add WebPPictureImportRGBX() and WebPPictureImportBGRX()" -27519bc2 add WebPPictureImportRGBX() and WebPPictureImportBGRX() -f80cd27e factorize code in Import() -9b715026 histogram: add log2 wrapper -8c34378f Merge "fix some implicit type conversion warnings" -42f6df9d fix some implicit type conversion warnings -250c16e3 Merge "doc: update lossless pdf" -9d9daba4 Merge "add a PDF of the lossless spec" -8fbb9188 prefer webp/types.h over stdint.h -0ca170c2 doc: update lossless pdf -0862ac6e add a PDF of the lossless spec -437999fb introduce a generic WebPPictureHasTransparency() function -d2b6c6c0 cosmetic fixes after Idaba281a -b4e6645c Merge "add colorspace for premultiplied alpha" -48f82757 add colorspace for premultiplied alpha -069f903a Change in lossless bit-stream. -5f7bb3f5 Merge "WebPReportProgress: use non-encoder specific params" -f18281ff WebPReportProgress: use non-encoder specific params -9ef32283 Add support for raw lossless bitstream in decoder. -7cbee29a Fix bug: InitIo reseting fancy_upsampling flag. -880fd98c vwebp: fix exit w/freeglut -1875d926 trap two unchecked error conditions -87b4a908 no need to have mux.h as noinst clause in enc/ -88f41ec6 doc: fix bit alignment in VP8X chunk -52f5a4ef Merge "fix bug with lossy-alpha output stride" -3bde22d7 fix bug with lossy-alpha output stride -42d61b6d update the spec for the lossy-alpha compression methods. -e75dc805 Move some more defines to format_constants.h -c13f6632 Move consts to internal header format_constants.h -7f2dfc92 use a bit-set transforms_seen_ instead of looping -18da1f53 modulate alpha-compression effort according to config.method -f5f2fff6 Merge "Alpha flag fix for lossless." -c975c44e Alpha flag fix for lossless. -4f067fb2 Merge "Android: only build dec_neon with NEON support" -255c66b4 Android: only build dec_neon with NEON support -8f9117a9 cosmetics: signature fixes -39bf5d64 use header-less lossless bitstream for alpha channel -75d7f3b2 Merge "make input data be 'const' for VP8LInverseTransform()" -9a721c6d make input data be 'const' for VP8LInverseTransform() -9fc64edc Disallow re-use of same transformation. -98ec717f use a function pointer for ProcessRows() -f7ae5e37 cosmetics: join line -140b89a3 factor out buffer alloc in AllocateARGBBuffers() -a107dfa8 Rectify WebPParseOptionalChunks(). -237eab67 Add two more color-spaces for lossless decoding. -27f417ab fix orthographic typo -489ec335 add VP8LEncodeStream() to compress lossless image stream -fa8bc3db make WebPEncodingSetError() take a const picture -638528cd bitstream update for lossy alpha compression -d73e63a7 add DequantizeLevels() placeholder -ec122e09 remove arch-dependent rand() -d40e7653 fix alignment -1dd6a8b6 Merge "remove tcoder, switch alpha-plane compression to lossless" -3e863dda remove tcoder, switch alpha-plane compression to lossless -8d77dc29 Add support for lossless in mux: -831bd131 Make tile size a function of encoding method. -778c5228 Merge "remove some variable shadowing" -817c9dce Few more HuffmanTreeToken conversions. -37a77a6b remove some variable shadowing -89c07c96 Merge "normalize example header includes" -4aff411f Merge "add example_util.[hc]" -00b29e28 normalize example header includes -061263a7 add example_util.[hc] -c6882c49 merge all tree processing into a single VP8LProcessTree() -9c7a3cf5 fix VP8LHistogramNumCodes to handle the case palette_code_bits == 0 -b5551d2e Merge "Added HuffmanTreeCode Struct for tree codes." -8b85d01c Added HuffmanTreeCode Struct for tree codes. -093f76d8 Merge "Allocate single memory in GetHuffBitLengthsAndCodes." -41d80494 Allocate single memory in GetHuffBitLengthsAndCodes. -1b04f6d2 Correct size in VP8L header. -2924a5ae Makefile.vc: split object lists based on directory -c8f24165 Merge "add assert(tokens)" -43239947 add assert(tokens) -9f547450 Catch an error in DecodeImageData(). -ac8e5e42 minor typo and style fix -9f566d1d clean-up around Huffman-encode -c579a710 Introduce CHUNK_SIZE_BYTES in muxi.h. -14757f8a Make sure huffman trees always have valid symbols -41050618 makefile.unix: add support for building vwebp -48b37721 Merge "fixed signed/unsigned comparison warning" -57f696da Merge "EncodeImageInternal: fix potential leak" -d972cdf2 EncodeImageInternal: fix potential leak -5cd12c3d fixed signed/unsigned comparison warning -cdca30d0 Merge "cosmetics: shorten long line" -e025fb55 cosmetics: shorten long line -22671ed6 Merge "enc/vp8l: fix double free on error" -e1b9b052 Merge "cosmetics: VP8LCreateHuffmanTree: fix indent" -a8e725f8 enc/vp8l: fix double free on error -27541fbd cosmetics: VP8LCreateHuffmanTree: fix indent -1d38b258 cwebp/windows: use MAKE_REFGUID where appropriate -817ef6e9 Merge "cwebp: fix WIC/Microsoft SDK compatibility issue" -902d3e3b cwebp: fix WIC/Microsoft SDK compatibility issue -89d803c4 Merge "Fix a crash due to wrong pointer-integer arithmetic." -cb1bd741 Merge "Fix a crash in lossless decoder." -de2fe202 Merge "Some cleanup in VP8LCreateHuffmanTree() (and related functions CompareHuffmanTrees() and SetBitDepths()): - Move 'tree_size' initialization and malloc for 'tree + tree_pool' outside the loop. - Some renames/tweaks for readability." -ce69177a Fix a crash due to wrong pointer-integer arithmetic. -e40a3684 Fix a crash in lossless decoder. -3927ff3a remove unneeded error condition for WebPMuxNumNamedElements() -2c140e11 Some cleanup in VP8LCreateHuffmanTree() (and related functions CompareHuffmanTrees() and SetBitDepths()): - Move 'tree_size' initialization and malloc for 'tree + tree_pool' outside the loop. - Some renames/tweaks for readability. -861a5b7b add support for animation -eb5c16cc Merge "Set correct encode size in encoder's stats." -4abe04a2 fix the return value and handle missing input file case. -2fafb855 Set correct encode size in encoder's stats. -e7167a2b Provide one entry point for backward references. -c4ccab64 Print relevant lossless encoding stats in cwebp. -e3302cfd GetHuffBitLengthsAndCodes: reduce level of indirection -b5f2a9ed enc/vp8l: fix uninitialized variable warning -7885f8b2 makefile.unix: add lossless encoder files -1261a4c8 Merge "cosmetics" -3926b5be Merge "dsp/cpu.c: Android: fix crash on non-neon arm builds" -834f937f dsp/cpu.c: Android: fix crash on non-neon arm builds -126e1606 cosmetics -e38602d2 Merge branch 'lossless_encoder' -e8d3d6a0 split StoreHuffmanCode() into smaller functions -d0d88990 more consolidation: introduce VP8LHistogramSet -1a210ef1 big code clean-up and refactoring and optimization -41b5c8ff Some cosmetics in histogram.c -ada6ff77 Approximate FastLog between value range [256, 8192] -ec123ca3 Forgot to update out_bit_costs to symbol_bit_costs at one instance. -cf33ccd1 Evaluate output cluster's bit_costs once in HistogramRefine. -781c01f4 Simple Huffman code changes. -a2849bc5 Lossless decoder: remove an unneeded param in ReadHuffmanCodeLengths(). -b39e7487 Reducing emerging palette size from 11 to 9 bits. -bfc73db4 Move GetHistImageSymbols to histogram.c -889a5786 Improve predict vs no-predict heuristic. -01f50663 code-moving and clean-up -31035f3b reduce memory usage by allocating only one histo -fbb501b8 Restrict histo_bits to ensure histo_image size is under 32MB -8415ddf3 further simplification for the meta-Huffman coding -e4917299 A quick pass of cleanup in backward reference code -83332b3c Make transform bits a function of encode method (-m). -72920caa introduce -lossless option, protected by USE_LOSSLESS_ENCODER -c6ac4dfb Run TraceBackwards for higher qualities. -412222c8 Make histo_bits and transform_bits function of quality. -149b5098 Update lossless encoder strategy: -0e6fa065 cache_bits passed to EncodeImageInternal() -e38b40a9 Factorize code for clearing HtreeGroup. -6f4a16ea Removing the indirection of meta-huffman tables. -3d33ecd1 Some renaming/comments related to palette in lossless encoder. -4d02d586 Lossless encoder: correction in Palette storage -4a636235 fix a memleak in EncodeImageInternal() -0993a611 Full and final fix for prediction transform -afd2102f Fix cross-color transform in lossless encoder -b96d8740 Need to write a '0' bit at the end of transforms. -54dad7e5 Color cache size should be counted as 0 when cache bits = 0 -4f0c5caf Fix prediction transform in lossless encoder. -36dabdad Fix memory leak in method EncodeImageInternal for histogram_image. -352a4f49 Get rid of PackLiteralBitLengths() -d673b6b9 Change the predictor function to pass left pixel -b2f99465 Fix CopyTileWithPrediction() -84547f54 Add EncodeImageInternal() method. -6b38378a Guard the lossless encoder (in flux) under a flag -09f7532c Fix few nits (const qualifiers) -648be393 Added implementation for various lossless functions -32714ce3 Add VP8L prefix to backward ref & histogram methods. -fcba7be2 Fixed header file tag (WEBP_UTILS_HUFFMAN_ENCODE_H_) -bc703746 Add backward_ref, histogram & huffman encode modules from lossless. -fdccaadd Fixing nits -227110c4 libwebp interface changes for lossless encoding. -50679acf minor style fixes -b38dfccf remove unneeded reference to NUM_LITERAL_CODES -8979675b harmonize header description -c04eb7be tcoder.c: define NOT_HAVE_LOG2 for MSVC builds -9a214fa1 Merge "VP8[L]GetInfo: check input pointers" -5c5be8ba VP8[L]GetInfo: check input pointers -0c188fec Merge changes I431acdfe,I713659b7 -b3515c62 mux: drop 'chunk' from ChunkInfo member names -aea7923c muxi.h: remove some unused defines -01422492 update NEWS file for next release -29e3f7ec Merge "dec: remove deprecated WebPINew()" -4718e449 Merge "muxedit: a few more size_t changes" -82654f96 Merge "muxedit: remove a few redundant NULL checks" -02f27fbd dec: remove deprecated WebPINew() -ccddb3fc muxedit: remove a few redundant NULL checks -a6cdf710 muxedit: a few more size_t changes -a3846892 Merge "mux: remove unused LIST_ID" -11ae46ae alpha.c: quiet some size_t -> int conversion warnings -dee46692 mux: remove unused LIST_ID -03f1f493 mux: add version checked entry points -6a0abdaa Merge "doc: tile/alpha corrections" -c8139fbe Merge "few cosmetics" -68338737 Merge "lossless: remove some size_t -> int conversions" -5249e94a doc: tile/alpha corrections -d96e722b huffman: quiet int64 -> int conversion warning -532020f2 lossless: remove some size_t -> int conversions -23be6edf few cosmetics -1349edad Merge "configure: AC_ARG_* use AS_HELP_STRING" -bfbcc60a configure: AC_ARG_* use AS_HELP_STRING -1427ca8e Merge "Makefile.am: header file maintenance" -087332e3 Merge "remove unused parameter 'round' from CalcProba()" -9630e168 remove unused parameter 'round' from CalcProba() -92092eaa Merge "bit_reader.h: correct include" -a87fc3f6 Merge "mux: ensure # images = # tiles" -53af99b1 Merge "mux: use size_t consistently" -39a57dae Makefile.am: header file maintenance -1bd0bd0d bit_reader.h: correct include -326a3c6b mux: ensure # images = # tiles -95667b8d mux: use size_t consistently -231ec1fb Removing the indirection of meta-huffman tables. -15ebcbaa check return pointer from MuxImageGetListFromId -b0d6c4a7 Merge "configure: remove test for zlib.h" -8cccac50 Merge "dsp/lossless: silence some build warnings" -b08819a6 dsp/lossless: silence some build warnings -7ae22521 Android.mk: SSE2 & NEON updates -0a49e3f3 Merge "makefile.unix add missing header files" -2e75a9a1 Merge "decode.h: use size_t consistently" -fa13035e configure: remove test for zlib.h -d3adc81d makefile.unix add missing header files -262fe01b Merge "makefile.unix & Android.mk: cosmetics" -4cce137e Merge "enc_sse2 add missing stdlib.h include" -80256b85 enc_sse2 add missing stdlib.h include -9b3d1f3a decode.h: use size_t consistently -64083d3c Merge "Makefile.am: cosmetics" -dceb8b4d Merge changes If1331d3c,I86fe3847 -0e33d7bf Merge "webp/decode.h: fix prototypes" -fac0f12e rename BitReader to VP8LBitReader -fbd82b5a types.h: centralize use of stddef.h -2154835f Makefile.am: cosmetics -1c92bd37 vp8io: use size_t for buffer size -90ead710 fix some more uint32_t -> size_t typing -cbe705c7 webp/decode.h: fix prototypes -3f8ec1c2 makefile.unix & Android.mk: cosmetics -217ec7f4 Remove tabs in configure.ac -b3d35fc1 Merge "Android.mk & Makefile.vc: add new files" -0df04b9e Android.mk & Makefile.vc: add new files -e4f20c5b Merge "automake: replace 'silent-rules' w/AM_SILENT_RULES" -8d254a09 cosmetics -6860c2ea fix some uint32_t -> size_t typing -4af1858a Fix a crash due to max symbol in a tree >= alphabet size -6f01b830 split the VP8 and VP8L decoding properly -f2623dbe enable lossless decoder -b96efd7d add dec/vp8i.h changes from experimental -19f6398e add dec/vp8l{i.h,.c} from experimental -c4ae53c8 add utils/bit_reader.[hc] changes from experimental -514d0089 add dsp/lossless.[hc] from experimental -9c67291d add utils/huffman.[hc] from experimental -337914a0 add utils/color_cache.[hc] from experimental -b3bf8fe7 the read-overflow code-path wasn't reporting as an error -1db888ba take colorspace into account when cropping -61c2d51f move the rescaling code into its own file and make enc/ and dec/ use it. -efc2016a Make rescaler methods generic -3eacee81 Move rescaler methods out of io.c. -a69b893d automake: replace 'silent-rules' w/AM_SILENT_RULES -6f7bf645 issue 111: fix little-endian problem in bit-reader -ed278e22 Removed unnecessary lookup -cd8c3ba7 fix some warnings: down-cast and possibly-uninitialized variable -0a7102ba ~1% improvement of alpha compression -3bc1b141 Merge "Reformat container doc" -dc17abdc mux: cosmetics -cb5810df Merge "WebPMuxGetImage: allow image param to be NULL" -506a4af2 mux: cosmetics -135e8b19 WebPMuxGetImage: allow image param to be NULL -de556b68 Merge "README.mux: reword some descriptions" -0ee2aeb9 Makefile.vc: use batch mode rules -d9acddc0 msvc: move {i,p}db creation to object directory -237c9aa7 Merge "expose WebPFree function for DLL builds" -b3e4054f silence msvc debug build warning -45feb55d expose WebPFree function for DLL builds -11316d84 README.mux: reword some descriptions -4be52f4a factorize WebPMuxValidate -14f6b9f6 mux: light cleanup -5e96a5db add more param checks to WebPPictureDistortion() -8abaf820 Merge "silence some type size related warnings" -1601a39b silence some type size related warnings -f3abe520 Merge "idec: simplify buffer size calculation" -a9c5cd4c idec: simplify buffer size calculation -7b06bd7f Merge "configure/automake: add silent-rules option" -e9a7d145 Reformat container doc -d4e5c7f3 configure/automake: add silent-rules option -5081db78 configure/automake: no -version-info for convenience libs -85b6ff68 Merge "idec: fix WebPIUpdate failure" -7bb6a9cc idec: fix internal state corruption -89cd1bb8 idec: fix WebPIUpdate failure -01b63806 4-5% faster decoding, optimized byte loads in arithmetic decoder. -631117ea Merge "cosmetics & warnings" -a0b2736d cosmetics & warnings -f73947f4 use 32bit for storing dequant coeffs, instead of 16b. -b9600308 Merge "store prediction mode array as uint8_t[16], not int[16]." -7b67881a store prediction mode array as uint8_t[16], not int[16]. -cab8d4dc Merge "NEON TransformOne" -ba503fda NEON TransformOne -9f740e3b Merge "gcc warning fix: remove the 'const' qualifier." -f76d3587 gcc warning fix: remove the 'const' qualifier. -e78478d6 Merge "webpmux: make more use of WebPData" -f85bba3d Merge "manpages: add BUGS section" -48a43bbf Merge "makefile.unix: variable cosmetics" -c274dc96 makefile.unix: variable cosmetics -1f7b8595 re-organize the error-handling in the main loop a bit -1336fa71 Only recompute level_cost_[] when needed -771ee449 manpages: add BUGS section -0f7820e6 webpmux: make more use of WebPData -974aaff3 examples: logging updates -6c14aadd Merge "better token buffer code" -f4054250 better token buffer code -18d959fa Merge "mux: add WebPData type" -eec4b877 mux: add WebPData type -0de3096b use 16bit counters for recording proba counts -7f23678d fix for LevelCost + little speed-up -7107d544 further speed-up/cleanup of RecordCoeffs() and GetResidualCost() -fd221040 Introduce Token buffer (unused for now) -5fa148f4 Merge "speed-up GetResidualCost()" -28a9d9b4 speed-up GetResidualCost() -11e7dadd Merge "misc cosmetics" -378086bd misc cosmetics -d61479f9 add -print_psnr and -print_ssim options to cwebp. -2e3e8b2e add a WebPCleanupTransparentArea() method -552c1217 Merge "mux: plug some memory leaks on error" -a2a81f7d Merge "fix Mach-O shared library build" -b3482c43 Merge "fix gcc-4.0 apple 32-bit build" -e4e3ec19 fix gcc-4.0 apple 32-bit build -b0d2fecf mux: plug some memory leaks on error -f0d2c7a7 pass of cosmetics -b309a6f9 fix Mach-O shared library build -241ddd38 doc: delete mux container pdf -8b1ba272 doc: update VP8 decode guide link -7e4371c5 WebPMuxCreate: fix unchecked malloc -eb425586 Merge "have makefile.unix clean up src/webp/*~ too" -a85c3631 Merge "correct EncodeAlpha documentation" -a33842fd Merge "Update webp container spec with alpha filter options." -8d6490da Incremental support for some of the mux APIs. -b8375abd have makefile.unix clean up src/webp/*~ too -b5855fc7 correct EncodeAlpha documentation -dba37fea Update webp container spec with alpha filter options. -2e74ec8b fix compile under MINGW -716d1d7f fix suboptimal MAX_LEN cut-off limit -57cab7b8 Harmonize the alpha-filter predictions at boundary -3a989534 Merge "Fix bug for Alpha in RGBA_4444 color-mode." -8ca2076d Introduce a 'fast' alpha mode -221a06bb Fix bug for Alpha in RGBA_4444 color-mode. -ad1e163a cosmetics: normalize copyright headers -c77424d7 cosmetics: light include cleanup -9d0e17c9 fix msvc build breakage after 252028a -7c4c177c Some readability fixes for mux library -d8a47e66 Merge "Add predictive filtering option for Alpha." -252028aa Add predictive filtering option for Alpha. -9b69be1c Merge "Simplify mux library code" -a056170e Simplify mux library code -992187a3 improve log2 test -e852f832 update Android.mk file list -a90cb2be reduce number of copies and mallocs in alpha plane enc/dec -b1662b05 fix some more type conversion warnings w/MSVC -223d8c60 fix some uint64_t -> int conversion warnings with MSC -c1a0437b Merge "simplify checks for enabling SSE2 code" -f06817aa simplify checks for enabling SSE2 code -948d4fe9 silence a msvc build warning -91179549 vwebp: msvc build tweaks -7937b409 simple WebP viewer, based on OpenGL -6aac1df1 add a bunch of missing 'extern "C"' -421eb99d Merge "Remove assigned-but-not-used variable "br"" -91e27f45 better fitting names for upsampling functions -a5d7ed5c Remove assigned-but-not-used variable "br" -f62d2c94 remove unused 'has_alpha' from VP8GetInfo() signature -08e86582 trap alpha-decoding error -b361eca1 add cut-off to arith coder probability update. -8666a93a Some bug-fixes for images with alpha. -273a12a0 fix off-by-1 diff in case cropping and simple filtering -2f741d1e webpmux: ReadImage: fix ptr free in error case -721f3f48 fix alpha decode -60942c8c fix the has_alpha_ order -30971c9e Implement progress report (and user abort) -eda520a9 cosmetics after 9523f2a -38bd5bb5 Merge "Better alpha support in webpmux binary" -ccbaebfe Merge "Updated the includes to relative paths." -d71fbdcc fix small typo in error message array -cdf97aa2 Better alpha support in webpmux binary -885f25bc Updated the includes to relative paths. -a0ec9aac Update WebP encoder (cwebp) to support Alpha. -667b769a Fixed the include for types.h within mux.h -9523f2a5 Add Alpha Encode support from WebPEncode. -16612ddd Merge "Add Alpha Decode support from WebPDecode." -d117a940 Add Alpha Decode support from WebPDecode. -67228734 cosmetics after e1947a9 -e1947a92 Add Alpha encode/decode code. -afc4c5d6 simplify code by introducing a CopyPlane() helper func -113b3128 Merge "MUX API Updates" -c398f595 MUX API Updates -5acf04ef remove orphan source file -059f03ef Merge "dec: validate colorspace before using as array index" -70a03989 Merge "factorize some code" -9b243b3d factorize some code -372e2b46 Correct a bug in ReadPNG() with GRAY_ALPHA images -469d6eb9 Merge "Makefile.am: remove redundant noinst_HEADERS" -9fe3372f dec: validate colorspace before using as array index -8962030f remove orphan source file -ced3e3f4 Makefile.am: remove redundant noinst_HEADERS -964387ed use WEBP_INLINE for inline function declarations -90880a11 Merge "manpages: break long lines" -b5910895 Merge "manpages: minor formatting updates" -4c451e4a Merge "Rectify the Chunk parsing logic." -04e84cf1 examples: slight cleanup -099717ce manpages: break long lines -1daf39bb manpages: minor formatting updates -abd030b5 fix missing "(void)" in function signature -f6a7d758 remove useless test -f07b2138 Rectify the Chunk parsing logic. -b8634f7d webpmux: fix lib link order -42c2e682 Fix missing coma (on uncompiled code) -d8329d41 Android.mk: add missing source files -13a54df5 Merge "More aggressive copy-edit; add TODO; validate HTML5" -868b96ae More aggressive copy-edit; add TODO; validate HTML5 -767afea2 configure: check for a symbol contained in libpng -408b8918 Merge "Linewrap at 72 cols. Casual copy-edit." -3ae318c7 Merge "Restore (most) emphasis; add emphasis to normative RFC 2119 terms (MUST, etc.)" -918eb2d8 Merge "Basic container doc source clean-up; fix lists and pseudocode blocks." -03bec9e0 Linewrap at 72 cols. Casual copy-edit. -2678d819 Restore (most) emphasis; add emphasis to normative RFC 2119 terms (MUST, etc.) -428674da Basic container doc source clean-up; fix lists and pseudocode blocks. -6a77d928 Merge "Makefile.vc: cosmetics" -28c38e8c Merge "Makefile.vc: condense directory creation rules" -55be2cf8 Initial import of container spec document, from pdftotext transform. -a82a788b Makefile.vc: cosmetics -c8f41ce5 Makefile.vc: condense directory creation rules -2b877cd0 Some fixes to Makefile.vc to support the src\mux directory. -3eb969b3 Merge "Add Makefile.vc for Mux library & binary." -e78e971e Add Makefile.vc for Mux library & binary. -6aedde58 Add manual for WebPMux tool. -8a360d0a Merge "Added WebPMux Binary." -a4f32cae Added WebPMux Binary. -f3bf4c76 Added Mux Container Spec & README for MUX-API. -9f761cfa Changed function signature for WebPMuxCreate -5f31b5ec Merge "Add Mux library for manipulating WebP container." -2315785f Add Mux library for manipulating WebP container. -7e198abb update ChangeLog (tag: v0.1.3) -dfc9c1ea Harmonize the dates -28ad70c5 Fix PNG decoding bug -846e93c5 Update AUTHORS & add .mailmap -563e52d6 cosmetics after '76036f5 Refactor decoder library' -76036f54 Refactor decoder library -377ef43c configure.ac: update AC_INIT params -7a8d8762 use a user-visible MACRO for max width/height. -d4e9f559 NEON decode support in WebP -0ee683b5 update libtool version-info -fdbe02c5 windows: match _cond_destroy logic w/return variable name -206b686b README: correct advanced decode api pseudo-code -6a32a0f5 make VP8BitReader a typedef, for better re-use -b112e836 create a libwebputils under src/utils -ee697d9f harmonize the include guards and #endif comments -a1ec07a6 Fixing compiler error in non x86 arch. -dcfa509a Fixed recursive inclusion of bit_writer.h and vp8enci.h. -e06ac088 create a separate libwebpdsp under src/dsp -ebeb412a use unsigned int for bitfields -341cc56a make kNewRange a static array -227a91e5 README: minor wording update -05bd8e6a add man pages to dist -812dfa1a bump up versions in preparations for 0.1.3 -a5b78c81 wrap alpha-related options under WEBP_EXPERIMENTAL_FEATURES flag -34dc7907 regen ChangeLog for 0.1.3-rc2 -7c436630 Silence some (more) Visual Studio warnings. -60306e8c add top-level gitattributes -2aa6b80e Slience some Visual Studio warnings. -4cbbb290 Merge "bump up version for next freeze" -a3291674 bump up version for next freeze -c7e86aba cosmetics: fix comment line lengths -c9e037ab makefile.unix: add simple dist target -87d58ce9 makefile.unix: rule maintenance -d477de77 mend -fac15ec7 Update NEWS & README for next release V0.1.3 -6215595c Merge "add a -partition_limit option to limit the number of bits used by intra4x4" -3814b76c Merge "reorganize chunk-parsing code" -900286e0 add a -partition_limit option to limit the number of bits used by intra4x4 -cd12b4b0 add the missing cost for I4/I16 mode selection -dfcc2136 reorganize chunk-parsing code -3cf20306 initialize pointers to function within VP8DspInit() -d21b4795 Merge "windows: add decode threading support" -473ae953 fix hang on thread creation failure -fccca420 windows: add decode threading support -a31f843a Use the exact PNG_INCLUDES/PNG_LIBS when testing for -lpng -ad9b45f1 Merge "Makefile.vc: rule maintenance" -565a2cab Makefile.vc: rule maintenance -2d0da681 makefile.unix: disable Wvla by default -fc7815d6 multi-thread decoding: ~25-30% faster -acd8ba42 io->teardown() was not always called upon error -c85527b1 Merge "Makefile.vc: add DLL configs" -e1e9be35 cosmetics: spelling/grammar in README and lib headers -b4d0ef8f Makefile.vc: add DLL configs -998754a7 remove unused nb_i4_ and nb_i16_ fields. -9f01ce3a rename WebPDecBuffer::memory -> private_memory -fb5d659b fix an overflow bug in LUT calculation -d646d5c7 swig: add WebPDecodeARGB -78aeed40 add missing WebPDecodeARGBInto() and switch ARGB4444 to RGBA4444 as was intended -cd7c5292 explicitly mark library functions as extern -19db59f8 add support for RGB565, ARGB4444 and ARGB colorspace (decoder) -c915fb2a encoder speed-up: hardcode special level values -c558bdad Rename and improve the API to retrieve decoded area -bf599d74 Merge "makefile.unix: disable -Wvla by default" -c9ea03d7 SSE2 version of strong filtering -993af3e2 makefile.unix: disable -Wvla by default -3827e1bc Merge "examples: (windows/WIC) add alpha support" -e291fae0 SSE2 functions for the fancy upsampler. -a06bbe2e add WebPISetIOHooks() to set some custom hooks on the incremental decoder object. -7643a6f2 Merge "makefile.unix: use uname to detect OSX environment" -5142a0be export alpha channel (if present) when dumping to PGM format -14d5731c makefile.unix: use uname to detect OSX environment -08057062 examples: quiet warnings -3cfe0888 examples: (windows/WIC) add alpha support -13ed94b8 add compile warning for variable-length-array -5a18eb1a Merge "add Advanced Decoding Interface" -5c4f27f9 add missing \n -f4c4e416 80 cols fix -d2603105 add Advanced Decoding Interface -bd2f65f6 sse2 version of the complex filter -96ed9ce0 perform two idct transforms at a time when possible -01af7b69 use aligned stored -0e1d1fdf Merge "Makefile.vc: add experimental target" -2a1292a6 Makefile.vc: add experimental target -23bf351e Enable decode SSE2 for Visual Studio -131a4b7b dec/dsp_sse2: fix visual studio compile -00d9d680 swig: file reorganization -7fc7e0d9 Merge "swig/java: basic encode support" -3be57b16 fix MSVC compile for WEBP_EXPERIMENTAL_FEATURES -40a7e347 dec/dsp: disable sse2 for Visual Studio builds -e4d540c8 add SSE2 code for transform -54f2170a swig/java: basic encode support -c5d4584b call function pointers instead of C-version -ea43f045 Merge "configure: mingw32 targets: test for WIC support" -a11009d7 SSE2 version of simple in-loop filtering -42548da9 shave one unneeded filter-cache line -31f9dc6f configure: mingw32 targets: test for WIC support -19559699 Merge "split expression in two." -415dbe46 split expression in two. -e29072a8 configure: test for zlib only w/--enable-experimental -b2b0090b Simplify Visual Studio ifdefs -ca7a2fd6 Add error reporting from encoding failures. -6c9405db Merge "Makefile.vc: require CFG with clean target" -0424ecd9 Makefile.vc: require CFG with clean target -003417c7 Enable SSE2 for Visual Studio builds -af10db4a little speed up for VP8BitUpdate() -e71418f8 more MSVC files to ignore -46d90363 cosmetics -edf59ab3 typo fix -72229f5f Add support for x64 and SSE2 builds under Windows. -92e5c6e1 VP8GetInfo() + WebPResetDecParams() -416b7a6b raise the fixed-point precision for the rescaler -aa87e4e0 fix alignment -eb66670c disable WEBP_EXPERIMENTAL_FEATURES -c5ae7f65 typo fix: USE_ => WEBP_ -d041efae swig: add libwebp.jar/libwebp_java_wrap.c -f6fb3877 add swig interface -e9273902 align buffer for double too -842c009b fix -strong option -d0a70387 Merge "cosmetics" -fc0a02e5 fix the dichotomy loop -38369c03 cosmetics -8dfc4c6f factorize and unify GetAlpha() between the C and SSE2 version -6d0e66c2 prepare experimentation with yuv444 / 422 -79cc49f5 add a --enable-experimental option to './configure' -d7575238 sse2 version of CollectHistogram() -c1c728d6 add an extra #ifdef WEBP_EXPERIMENTAL_FEATURES to avoid 'unused variable' warning -60c61d2d always call VP*EncDeleteAlpha() unconditionnally, for simplicity -0f8c6384 simply don't call WriteExtensions() if WEBP_EXPERIMENTAL_FEATURES is not defined -47c661d5 rename swap -> swap_rb -10d55bbb move chunk[] declaration out of the for() loop -517cec21 fix indentation -f7d9e261 fix merge problems -8fd42b3a add a stride 'a_stride' for the alpha plane -b8dcbf2f fix alpha-plane copy and crop methods -cdef89de fix some 'unused variable' warning -fb29c262 SSE2 version of the fwd transform and the squared sum metric -2ab4b72f EXPERIMENTAL: add support for alpha channel -cfbf88a6 add SSE2 functions. ~2x faster encoding on average. -e7ff3f9a merge two ITransforms together when applicable and change the TTransform to return the sum directly. -ca554137 fix WebPIDecGetRGB() to accept any RGB(A) mode, not just MODE_RGB -8aa50efd fix some 'man' typos -d3f3bdda update ChangeLog (tag: v0.1.2) -d7e9a69c update contributor list -261abb8e add a 'superclean' section -276ae825 Remove files not mean to be in git, and update .gitignore -24868455 build: prepare libwebp.pc -14ceb6e8 add "-version" description to man pages -b247a3b2 Create the m4 directory, and also place .gitignore in there for libtool. -cdd734c9 Resolve automake warnings -c5fa726e build: add pkgconfig files -b20aaca2 build: just use autoreconf, avoid calling tools manually -4b0b0d66 cwebp: use modern functions -efbc6c41 update Android.mk -7777570b better version of ChangeLog -fa70d2b7 update version number in the DOC -f8db5d5d more C89-fixes -0de013b3 fix typos -650ffa3b add version getters for decoder and encoder -be4867d2 doc for incremental decoding -56732a1b add idec.obj in MSVC makefile -208afb5e add c++ guards -8bf76fe0 add incremental decoding -1f288328 'inline' isn't defined in strict ansi c89 -8b77c632 move the quantization function to dsp.c -b2c3575c add a 'last_y' field to WebPDecParams -2654c3da correctly pass along the exact same status returned from ParsePartitions -4704146a add missing precision in the man -6d978a6c add error messages -6463e6ab add some install instructions, and fix intel-mac flags -05fb7bfc Merge ".gitignore: initial version" -c33f0195 .gitignore: initial version -e532b9ab Makefile: allow out of tree builds -4c0da7aa enable sparse dc/ac transforms -07dbb8d5 clarify the return logic -5c69e1bb fix bigger-by-1 array -7c5267e3 fix a (harmless) typo: non_zero_ -> non_zero_ac_ -bc752135 fix missing free() -af3e2aaa remove trailing spaces -13e50da6 make the bitreader preload at least 8bits, instead of post-load them (this makes initialization easier and will be helpful for incremental decoding). Modify ParsePartitions() to accommodate for truncated input. -f4888f77 emit 9 - nb_bits trailing zeros instead of 8 -3db65255 separate block-parsing into a visible VP8DecodeMB() -a871de02 add missing extern "C" -b3ce8c52 remove a gcc warning about type pun by using a proper union'd type -e1863715 update after addition of webpi.h -3e856e2d Extract some useful functions around decoding buffer WebPDecParams. -d5bc05a4 make the filtering process match libvpx and ffvp8 -dd60138d add man pages for cwebp(1) and dwebp(1) -c4fa3644 fix header -5b70b378 * add an option to bypass_filtering in VP8Io. -b97a4003 simplify QuantizeBlock code a bit -84b58ebb add more checks around picture allocation -b65a3e10 remove absolute_delta_ field and syntax code -0744e842 Dont' open output file until we're sure the input file is valid -d5bd54c7 fix typo and buggy line -f7a9549d Add a simple top-level makefile.unix for quick & easy build. -5f36b944 update the doc for the -f option -f61d14aa a WebP encoder converts PNG & JPEG to WebP -81c96621 oops: forgotten call to Initialize() + move the error message to a more useful place -87ffa005 typo: fix a missing 'R', was confusing. -b04b857a * add decoding measurement using stopwatch.h (use -v option) * support PNG output through WIC on Win32 -746a4820 * make (*put)() hook return a bool for abort request. * add an enum for VP8Status() to make things clearer -73c973e6 * strengthen riff/chunk size checks * don't consider odd-sized chunks being an error -1dc4611a add support for PNG output (default) regularize include guards -860641df fix a typo: sizeof(kYModeProbaInter0) => sizeof(kUVModeProbaInter0) -3254fc52 fix some petty constness fix the ./configure file too -504d3393 fix eof_ mis-initialization -2bc0778f leftover Makefile.* from previous commit -d2cf04e4 move Makefile.am one level below, to src/dec fix typos here and there dwebp is now an installed program -ade92de8 typo: vp8.h -> decode_vp8.h -d7241241 forgot to declare types.h to be installed -6421a7a4 move the decoder sourcetree to a sub-location src/dec to make room for future libs sources -a9b3eab6 correct layout name is IMC4. -2330522c handle corner case of zero-dimensions -280c3658 make VP8Init() handle short buffers (< 2 bytes) correctly -b1c9e8b4 handle error cases more robustly -0e94935c Merge "table-less version of clip_8b()" -1e0a2d25 table-less version of clip_8b() -e12109ee dwebp: change -yuv option to -raw change the layout to IMC2 -d72180a4 speed-up fancy upscaler -9145f3bc reset eof_ at construction time -a7ee0559 simplify the logic of GetCoeffs() -f67b5939 lot of cosmetics -ea27d7c6 fix endian problem on PowerPC -beb0a1ba fix signature of VP8StoreBlock -b128c5e2 Merge "fancy chroma upscaling" -6a37a2aa fancy chroma upscaling -ff565edc fix two numeric typos -5a936a0a use uintptr_t for casting pointers to ints -e14a0301 for cross_compiling=yes to prevent executing any binary -83b545ee add vc9+ makefile -296f6914 fix output loop for small height -cbfbb5c3 convert to plain-C -f09f96ee Fix declaration after statement warning -5981ee55 Fix UV plane ac/dc quantizer transposition -c8d15efa convert to ANSI-C -c3f41cb4 Initial commit diff --git a/Extended/libwebp/Makefile b/Extended/libwebp/Makefile deleted file mode 100644 index 94e3953..0000000 --- a/Extended/libwebp/Makefile +++ /dev/null @@ -1,840 +0,0 @@ -# Makefile.in generated by automake 1.16.1 from Makefile.am. -# Makefile. Generated from Makefile.in by configure. - -# Copyright (C) 1994-2018 Free Software Foundation, Inc. - -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - - - -am__is_gnu_make = { \ - if test -z '$(MAKELEVEL)'; then \ - false; \ - elif test -n '$(MAKE_HOST)'; then \ - true; \ - elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ - true; \ - else \ - false; \ - fi; \ -} -am__make_running_with_option = \ - case $${target_option-} in \ - ?) ;; \ - *) echo "am__make_running_with_option: internal error: invalid" \ - "target option '$${target_option-}' specified" >&2; \ - exit 1;; \ - esac; \ - has_opt=no; \ - sane_makeflags=$$MAKEFLAGS; \ - if $(am__is_gnu_make); then \ - sane_makeflags=$$MFLAGS; \ - else \ - case $$MAKEFLAGS in \ - *\\[\ \ ]*) \ - bs=\\; \ - sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ - | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ - esac; \ - fi; \ - skip_next=no; \ - strip_trailopt () \ - { \ - flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ - }; \ - for flg in $$sane_makeflags; do \ - test $$skip_next = yes && { skip_next=no; continue; }; \ - case $$flg in \ - *=*|--*) continue;; \ - -*I) strip_trailopt 'I'; skip_next=yes;; \ - -*I?*) strip_trailopt 'I';; \ - -*O) strip_trailopt 'O'; skip_next=yes;; \ - -*O?*) strip_trailopt 'O';; \ - -*l) strip_trailopt 'l'; skip_next=yes;; \ - -*l?*) strip_trailopt 'l';; \ - -[dEDm]) skip_next=yes;; \ - -[JT]) skip_next=yes;; \ - esac; \ - case $$flg in \ - *$$target_option*) has_opt=yes; break;; \ - esac; \ - done; \ - test $$has_opt = yes -am__make_dryrun = (target_option=n; $(am__make_running_with_option)) -am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) -pkgdatadir = $(datadir)/libwebp -pkgincludedir = $(includedir)/libwebp -pkglibdir = $(libdir)/libwebp -pkglibexecdir = $(libexecdir)/libwebp -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = x86_64-apple-darwin19.6.0 -host_triplet = x86_64-apple-darwin19.6.0 -#am__append_1 = extras -subdir = . -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pthread.m4 \ - $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ - $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ - $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \ - $(am__configure_deps) $(am__DIST_COMMON) -am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ - configure.lineno config.status.lineno -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = $(top_builddir)/src/webp/config.h -CONFIG_CLEAN_FILES = -CONFIG_CLEAN_VPATH_FILES = -AM_V_P = $(am__v_P_$(V)) -am__v_P_ = $(am__v_P_$(AM_DEFAULT_VERBOSITY)) -am__v_P_0 = false -am__v_P_1 = : -AM_V_GEN = $(am__v_GEN_$(V)) -am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) -am__v_GEN_0 = @echo " GEN " $@; -am__v_GEN_1 = -AM_V_at = $(am__v_at_$(V)) -am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) -am__v_at_0 = @ -am__v_at_1 = -SOURCES = -DIST_SOURCES = -RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ - ctags-recursive dvi-recursive html-recursive info-recursive \ - install-data-recursive install-dvi-recursive \ - install-exec-recursive install-html-recursive \ - install-info-recursive install-pdf-recursive \ - install-ps-recursive install-recursive installcheck-recursive \ - installdirs-recursive pdf-recursive ps-recursive \ - tags-recursive uninstall-recursive -am__can_run_installinfo = \ - case $$AM_UPDATE_INFO_DIR in \ - n|no|NO) false;; \ - *) (install-info --version) >/dev/null 2>&1;; \ - esac -RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ - distclean-recursive maintainer-clean-recursive -am__recursive_targets = \ - $(RECURSIVE_TARGETS) \ - $(RECURSIVE_CLEAN_TARGETS) \ - $(am__extra_recursive_targets) -AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ - cscope distdir distdir-am dist dist-all distcheck -am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) -# Read a list of newline-separated strings from the standard input, -# and print each of them once, without duplicates. Input order is -# *not* preserved. -am__uniquify_input = $(AWK) '\ - BEGIN { nonempty = 0; } \ - { items[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in items) print i; }; } \ -' -# Make sure the list of sources is unique. This is necessary because, -# e.g., the same source file might be shared among _SOURCES variables -# for different programs/libraries. -am__define_uniq_tagged_files = \ - list='$(am__tagged_files)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | $(am__uniquify_input)` -ETAGS = etags -CTAGS = ctags -CSCOPE = cscope -DIST_SUBDIRS = src imageio man extras examples -am__DIST_COMMON = $(srcdir)/Makefile.in \ - $(top_srcdir)/src/webp/config.h.in AUTHORS COPYING ChangeLog \ - NEWS README ar-lib compile config.guess config.sub install-sh \ - ltmain.sh missing -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -distdir = $(PACKAGE)-$(VERSION) -top_distdir = $(distdir) -am__remove_distdir = \ - if test -d "$(distdir)"; then \ - find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ - && rm -rf "$(distdir)" \ - || { sleep 5 && rm -rf "$(distdir)"; }; \ - else :; fi -am__post_remove_distdir = $(am__remove_distdir) -am__relativize = \ - dir0=`pwd`; \ - sed_first='s,^\([^/]*\)/.*$$,\1,'; \ - sed_rest='s,^[^/]*/*,,'; \ - sed_last='s,^.*/\([^/]*\)$$,\1,'; \ - sed_butlast='s,/*[^/]*$$,,'; \ - while test -n "$$dir1"; do \ - first=`echo "$$dir1" | sed -e "$$sed_first"`; \ - if test "$$first" != "."; then \ - if test "$$first" = ".."; then \ - dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ - dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ - else \ - first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ - if test "$$first2" = "$$first"; then \ - dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ - else \ - dir2="../$$dir2"; \ - fi; \ - dir0="$$dir0"/"$$first"; \ - fi; \ - fi; \ - dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ - done; \ - reldir="$$dir2" -DIST_ARCHIVES = $(distdir).tar.gz -GZIP_ENV = --best -DIST_TARGETS = dist-gzip -distuninstallcheck_listfiles = find . -type f -print -am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ - | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' -distcleancheck_listfiles = find . -type f -print -ACLOCAL = ${SHELL} /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp/missing aclocal-1.16 -AMTAR = $${TAR-tar} -AM_CFLAGS = -fvisibility=hidden -Wall -Wconstant-conversion -Wdeclaration-after-statement -Wextra -Wfloat-conversion -Wformat -Wformat-nonliteral -Wformat -Wformat-security -Wmissing-declarations -Wmissing-prototypes -Wold-style-definition -Wparentheses-equality -Wshadow -Wshorten-64-to-32 -Wundef -Wunreachable-code -Wunused -Wvla -Wno-deprecated-declarations -AM_CPPFLAGS = -DNDEBUG -AM_DEFAULT_VERBOSITY = 0 -AR = ar -AUTOCONF = ${SHELL} /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp/missing autoconf -AUTOHEADER = ${SHELL} /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp/missing autoheader -AUTOMAKE = ${SHELL} /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp/missing automake-1.16 -AWK = awk -CC = gcc -CCDEPMODE = depmode=gcc3 -CFLAGS = -g -O2 -D_THREAD_SAFE -pthread -CPP = gcc -E -CPPFLAGS = -CYGPATH_W = echo -DEFS = -DHAVE_CONFIG_H -DEPDIR = .deps -DLLTOOL = false -DSYMUTIL = dsymutil -DUMPBIN = -ECHO_C = \c -ECHO_N = -ECHO_T = -EGREP = /usr/bin/grep -E -EXEEXT = -FGREP = /usr/bin/grep -F -GIF_INCLUDES = -GIF_LIBS = -lgif -GL_INCLUDES = -GL_LIBS = -framework GLUT -framework OpenGL -GREP = /usr/bin/grep -INSTALL = /opt/twitter_mde/homebrew_minimal/mde_bin/ginstall -c -INSTALL_DATA = ${INSTALL} -m 644 -INSTALL_PROGRAM = ${INSTALL} -INSTALL_SCRIPT = ${INSTALL} -INSTALL_STRIP_PROGRAM = $(install_sh) -c -s -JPEG_INCLUDES = -DWEBP_HAVE_JPEG -JPEG_LIBS = -ljpeg -LD = /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld -LDFLAGS = -LIBOBJS = -LIBPNG_CONFIG = /opt/twitter_mde/bin/libpng-config -LIBS = -LIBSDL_CONFIG = -LIBTOOL = $(SHELL) $(top_builddir)/libtool -LIPO = lipo -LN_S = ln -s -LTLIBOBJS = -LT_SYS_LIBRARY_PATH = -MAKEINFO = ${SHELL} /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp/missing makeinfo -MANIFEST_TOOL = : -MKDIR_P = /opt/twitter_mde/homebrew_minimal/mde_bin/gmkdir -p -NEON_FLAGS = -NM = /usr/bin/nm -B -NMEDIT = nmedit -OBJDUMP = objdump -OBJEXT = o -OTOOL = otool -OTOOL64 = : -PACKAGE = libwebp -PACKAGE_BUGREPORT = https://bugs.chromium.org/p/webp -PACKAGE_NAME = libwebp -PACKAGE_STRING = libwebp 1.1.0 -PACKAGE_TARNAME = libwebp -PACKAGE_URL = http://developers.google.com/speed/webp -PACKAGE_VERSION = 1.1.0 -PATH_SEPARATOR = : -PNG_INCLUDES = -I/opt/twitter_mde/package/twitter_dev_homebrew/current/Cellar/libpng/1.6.34/include/libpng16 -DWEBP_HAVE_PNG -PNG_LIBS = -L/opt/twitter_mde/package/twitter_dev_homebrew/current/Cellar/libpng/1.6.34/lib -lpng16 -PTHREAD_CC = gcc -PTHREAD_CFLAGS = -D_THREAD_SAFE -pthread -PTHREAD_LIBS = -RANLIB = ranlib -SDL_INCLUDES = -SDL_LIBS = -SED = /usr/bin/sed -SET_MAKE = -SHELL = /bin/sh -SSE2_FLAGS = -msse2 -SSE41_FLAGS = -msse4.1 -STRIP = strip -TIFF_INCLUDES = -DWEBP_HAVE_TIFF -TIFF_LIBS = -ltiff -USE_SWAP_16BIT_CSP = -VERSION = 1.1.0 -abs_builddir = /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp -abs_srcdir = /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp -abs_top_builddir = /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp -abs_top_srcdir = /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp -ac_ct_AR = ar -ac_ct_CC = gcc -ac_ct_DUMPBIN = -am__include = include -am__leading_dot = . -am__quote = -am__tar = $${TAR-tar} chof - "$$tardir" -am__untar = $${TAR-tar} xf - -ax_pthread_config = -bindir = ${exec_prefix}/bin -build = x86_64-apple-darwin19.6.0 -build_alias = -build_cpu = x86_64 -build_os = darwin19.6.0 -build_vendor = apple -builddir = . -datadir = ${datarootdir} -datarootdir = ${prefix}/share -docdir = ${datarootdir}/doc/${PACKAGE_TARNAME} -dvidir = ${docdir} -exec_prefix = ${prefix} -host = x86_64-apple-darwin19.6.0 -host_alias = -host_cpu = x86_64 -host_os = darwin19.6.0 -host_vendor = apple -htmldir = ${docdir} -includedir = ${prefix}/include -infodir = ${datarootdir}/info -install_sh = ${SHELL} /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp/install-sh -libdir = ${exec_prefix}/lib -libexecdir = ${exec_prefix}/libexec -localedir = ${datarootdir}/locale -localstatedir = ${prefix}/var -mandir = ${datarootdir}/man -mkdir_p = $(MKDIR_P) -oldincludedir = /usr/include -pdfdir = ${docdir} -pkgconfigdir = ${libdir}/pkgconfig -prefix = /usr/local -program_transform_name = s,x,x, -psdir = ${docdir} -runstatedir = ${localstatedir}/run -sbindir = ${exec_prefix}/sbin -sharedstatedir = ${prefix}/com -srcdir = . -sysconfdir = ${prefix}/etc -target_alias = -top_build_prefix = -top_builddir = . -top_srcdir = . -ACLOCAL_AMFLAGS = -I m4 -SUBDIRS = src imageio man $(am__append_1) examples -EXTRA_DIST = COPYING autogen.sh -all: all-recursive - -.SUFFIXES: -am--refresh: Makefile - @: -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ - $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ - && exit 0; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --foreign Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - echo ' $(SHELL) ./config.status'; \ - $(SHELL) ./config.status;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - $(SHELL) ./config.status --recheck - -$(top_srcdir)/configure: $(am__configure_deps) - $(am__cd) $(srcdir) && $(AUTOCONF) -$(ACLOCAL_M4): $(am__aclocal_m4_deps) - $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) -$(am__aclocal_m4_deps): - -src/webp/config.h: src/webp/stamp-h1 - @test -f $@ || rm -f src/webp/stamp-h1 - @test -f $@ || $(MAKE) $(AM_MAKEFLAGS) src/webp/stamp-h1 - -src/webp/stamp-h1: $(top_srcdir)/src/webp/config.h.in $(top_builddir)/config.status - @rm -f src/webp/stamp-h1 - cd $(top_builddir) && $(SHELL) ./config.status src/webp/config.h -$(top_srcdir)/src/webp/config.h.in: $(am__configure_deps) - ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) - rm -f src/webp/stamp-h1 - touch $@ - -distclean-hdr: - -rm -f src/webp/config.h src/webp/stamp-h1 - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs - -distclean-libtool: - -rm -f libtool config.lt - -# This directory's subdirectories are mostly independent; you can cd -# into them and run 'make' without going through this Makefile. -# To change the values of 'make' variables: instead of editing Makefiles, -# (1) if the variable is set in 'config.status', edit 'config.status' -# (which will cause the Makefiles to be regenerated when you run 'make'); -# (2) otherwise, pass the desired values on the 'make' command line. -$(am__recursive_targets): - @fail=; \ - if $(am__make_keepgoing); then \ - failcom='fail=yes'; \ - else \ - failcom='exit 1'; \ - fi; \ - dot_seen=no; \ - target=`echo $@ | sed s/-recursive//`; \ - case "$@" in \ - distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ - *) list='$(SUBDIRS)' ;; \ - esac; \ - for subdir in $$list; do \ - echo "Making $$target in $$subdir"; \ - if test "$$subdir" = "."; then \ - dot_seen=yes; \ - local_target="$$target-am"; \ - else \ - local_target="$$target"; \ - fi; \ - ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ - || eval $$failcom; \ - done; \ - if test "$$dot_seen" = "no"; then \ - $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ - fi; test -z "$$fail" - -ID: $(am__tagged_files) - $(am__define_uniq_tagged_files); mkid -fID $$unique -tags: tags-recursive -TAGS: tags - -tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) - set x; \ - here=`pwd`; \ - if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ - include_option=--etags-include; \ - empty_fix=.; \ - else \ - include_option=--include; \ - empty_fix=; \ - fi; \ - list='$(SUBDIRS)'; for subdir in $$list; do \ - if test "$$subdir" = .; then :; else \ - test ! -f $$subdir/TAGS || \ - set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ - fi; \ - done; \ - $(am__define_uniq_tagged_files); \ - shift; \ - if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ - test -n "$$unique" || unique=$$empty_fix; \ - if test $$# -gt 0; then \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - "$$@" $$unique; \ - else \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$unique; \ - fi; \ - fi -ctags: ctags-recursive - -CTAGS: ctags -ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) - $(am__define_uniq_tagged_files); \ - test -z "$(CTAGS_ARGS)$$unique" \ - || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$unique - -GTAGS: - here=`$(am__cd) $(top_builddir) && pwd` \ - && $(am__cd) $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) "$$here" -cscope: cscope.files - test ! -s cscope.files \ - || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS) -clean-cscope: - -rm -f cscope.files -cscope.files: clean-cscope cscopelist -cscopelist: cscopelist-recursive - -cscopelist-am: $(am__tagged_files) - list='$(am__tagged_files)'; \ - case "$(srcdir)" in \ - [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ - *) sdir=$(subdir)/$(srcdir) ;; \ - esac; \ - for i in $$list; do \ - if test -f "$$i"; then \ - echo "$(subdir)/$$i"; \ - else \ - echo "$$sdir/$$i"; \ - fi; \ - done >> $(top_builddir)/cscope.files - -distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - -rm -f cscope.out cscope.in.out cscope.po.out cscope.files - -distdir: $(BUILT_SOURCES) - $(MAKE) $(AM_MAKEFLAGS) distdir-am - -distdir-am: $(DISTFILES) - $(am__remove_distdir) - test -d "$(distdir)" || mkdir "$(distdir)" - @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - list='$(DISTFILES)'; \ - dist_files=`for file in $$list; do echo $$file; done | \ - sed -e "s|^$$srcdirstrip/||;t" \ - -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ - case $$dist_files in \ - */*) $(MKDIR_P) `echo "$$dist_files" | \ - sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ - sort -u` ;; \ - esac; \ - for file in $$dist_files; do \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - if test -d $$d/$$file; then \ - dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test -d "$(distdir)/$$file"; then \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ - else \ - test -f "$(distdir)/$$file" \ - || cp -p $$d/$$file "$(distdir)/$$file" \ - || exit 1; \ - fi; \ - done - @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ - if test "$$subdir" = .; then :; else \ - $(am__make_dryrun) \ - || test -d "$(distdir)/$$subdir" \ - || $(MKDIR_P) "$(distdir)/$$subdir" \ - || exit 1; \ - dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ - $(am__relativize); \ - new_distdir=$$reldir; \ - dir1=$$subdir; dir2="$(top_distdir)"; \ - $(am__relativize); \ - new_top_distdir=$$reldir; \ - echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ - echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ - ($(am__cd) $$subdir && \ - $(MAKE) $(AM_MAKEFLAGS) \ - top_distdir="$$new_top_distdir" \ - distdir="$$new_distdir" \ - am__remove_distdir=: \ - am__skip_length_check=: \ - am__skip_mode_fix=: \ - distdir) \ - || exit 1; \ - fi; \ - done - -test -n "$(am__skip_mode_fix)" \ - || find "$(distdir)" -type d ! -perm -755 \ - -exec chmod u+rwx,go+rx {} \; -o \ - ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ - ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ - ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ - || chmod -R a+r "$(distdir)" -dist-gzip: distdir - tardir=$(distdir) && $(am__tar) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).tar.gz - $(am__post_remove_distdir) - -dist-bzip2: distdir - tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 - $(am__post_remove_distdir) - -dist-lzip: distdir - tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz - $(am__post_remove_distdir) - -dist-xz: distdir - tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz - $(am__post_remove_distdir) - -dist-tarZ: distdir - @echo WARNING: "Support for distribution archives compressed with" \ - "legacy program 'compress' is deprecated." >&2 - @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 - tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z - $(am__post_remove_distdir) - -dist-shar: distdir - @echo WARNING: "Support for shar distribution archives is" \ - "deprecated." >&2 - @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 - shar $(distdir) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).shar.gz - $(am__post_remove_distdir) - -dist-zip: distdir - -rm -f $(distdir).zip - zip -rq $(distdir).zip $(distdir) - $(am__post_remove_distdir) - -dist dist-all: - $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:' - $(am__post_remove_distdir) - -# This target untars the dist file and tries a VPATH configuration. Then -# it guarantees that the distribution is self-contained by making another -# tarfile. -distcheck: dist - case '$(DIST_ARCHIVES)' in \ - *.tar.gz*) \ - eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).tar.gz | $(am__untar) ;;\ - *.tar.bz2*) \ - bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ - *.tar.lz*) \ - lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ - *.tar.xz*) \ - xz -dc $(distdir).tar.xz | $(am__untar) ;;\ - *.tar.Z*) \ - uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ - *.shar.gz*) \ - eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\ - *.zip*) \ - unzip $(distdir).zip ;;\ - esac - chmod -R a-w $(distdir) - chmod u+w $(distdir) - mkdir $(distdir)/_build $(distdir)/_build/sub $(distdir)/_inst - chmod a-w $(distdir) - test -d $(distdir)/_build || exit 0; \ - dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ - && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ - && am__cwd=`pwd` \ - && $(am__cd) $(distdir)/_build/sub \ - && ../../configure \ - $(AM_DISTCHECK_CONFIGURE_FLAGS) \ - $(DISTCHECK_CONFIGURE_FLAGS) \ - --srcdir=../.. --prefix="$$dc_install_base" \ - && $(MAKE) $(AM_MAKEFLAGS) \ - && $(MAKE) $(AM_MAKEFLAGS) dvi \ - && $(MAKE) $(AM_MAKEFLAGS) check \ - && $(MAKE) $(AM_MAKEFLAGS) install \ - && $(MAKE) $(AM_MAKEFLAGS) installcheck \ - && $(MAKE) $(AM_MAKEFLAGS) uninstall \ - && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ - distuninstallcheck \ - && chmod -R a-w "$$dc_install_base" \ - && ({ \ - (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ - && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ - && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ - && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ - distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ - } || { rm -rf "$$dc_destdir"; exit 1; }) \ - && rm -rf "$$dc_destdir" \ - && $(MAKE) $(AM_MAKEFLAGS) dist \ - && rm -rf $(DIST_ARCHIVES) \ - && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ - && cd "$$am__cwd" \ - || exit 1 - $(am__post_remove_distdir) - @(echo "$(distdir) archives ready for distribution: "; \ - list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ - sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' -distuninstallcheck: - @test -n '$(distuninstallcheck_dir)' || { \ - echo 'ERROR: trying to run $@ with an empty' \ - '$$(distuninstallcheck_dir)' >&2; \ - exit 1; \ - }; \ - $(am__cd) '$(distuninstallcheck_dir)' || { \ - echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ - exit 1; \ - }; \ - test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ - || { echo "ERROR: files left after uninstall:" ; \ - if test -n "$(DESTDIR)"; then \ - echo " (check DESTDIR support)"; \ - fi ; \ - $(distuninstallcheck_listfiles) ; \ - exit 1; } >&2 -distcleancheck: distclean - @if test '$(srcdir)' = . ; then \ - echo "ERROR: distcleancheck can only run from a VPATH build" ; \ - exit 1 ; \ - fi - @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ - || { echo "ERROR: files left in build directory after distclean:" ; \ - $(distcleancheck_listfiles) ; \ - exit 1; } >&2 -check-am: all-am -check: check-recursive -all-am: Makefile -installdirs: installdirs-recursive -installdirs-am: -install: install-recursive -install-exec: install-exec-recursive -install-data: install-data-recursive -uninstall: uninstall-recursive - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-recursive -install-strip: - if test -z '$(STRIP)'; then \ - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - install; \ - else \ - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ - fi -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-recursive - -clean-am: clean-generic clean-libtool mostlyclean-am - -distclean: distclean-recursive - -rm -f $(am__CONFIG_DISTCLEAN_FILES) - -rm -f Makefile -distclean-am: clean-am distclean-generic distclean-hdr \ - distclean-libtool distclean-tags - -dvi: dvi-recursive - -dvi-am: - -html: html-recursive - -html-am: - -info: info-recursive - -info-am: - -install-data-am: - -install-dvi: install-dvi-recursive - -install-dvi-am: - -install-exec-am: - -install-html: install-html-recursive - -install-html-am: - -install-info: install-info-recursive - -install-info-am: - -install-man: - -install-pdf: install-pdf-recursive - -install-pdf-am: - -install-ps: install-ps-recursive - -install-ps-am: - -installcheck-am: - -maintainer-clean: maintainer-clean-recursive - -rm -f $(am__CONFIG_DISTCLEAN_FILES) - -rm -rf $(top_srcdir)/autom4te.cache - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-recursive - -mostlyclean-am: mostlyclean-generic mostlyclean-libtool - -pdf: pdf-recursive - -pdf-am: - -ps: ps-recursive - -ps-am: - -uninstall-am: - -.MAKE: $(am__recursive_targets) install-am install-strip - -.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ - am--refresh check check-am clean clean-cscope clean-generic \ - clean-libtool cscope cscopelist-am ctags ctags-am dist \ - dist-all dist-bzip2 dist-gzip dist-lzip dist-shar dist-tarZ \ - dist-xz dist-zip distcheck distclean distclean-generic \ - distclean-hdr distclean-libtool distclean-tags distcleancheck \ - distdir distuninstallcheck dvi dvi-am html html-am info \ - info-am install install-am install-data install-data-am \ - install-dvi install-dvi-am install-exec install-exec-am \ - install-html install-html-am install-info install-info-am \ - install-man install-pdf install-pdf-am install-ps \ - install-ps-am install-strip installcheck installcheck-am \ - installdirs installdirs-am maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-generic \ - mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ - uninstall-am - -.PRECIOUS: Makefile - - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/Extended/libwebp/Makefile.am b/Extended/libwebp/Makefile.am deleted file mode 100644 index e415f6f..0000000 --- a/Extended/libwebp/Makefile.am +++ /dev/null @@ -1,9 +0,0 @@ -ACLOCAL_AMFLAGS = -I m4 -SUBDIRS = src imageio man -EXTRA_DIST = COPYING autogen.sh - -if BUILD_EXTRAS - SUBDIRS += extras -endif - -SUBDIRS += examples diff --git a/Extended/libwebp/Makefile.in b/Extended/libwebp/Makefile.in deleted file mode 100644 index e21bcda..0000000 --- a/Extended/libwebp/Makefile.in +++ /dev/null @@ -1,840 +0,0 @@ -# Makefile.in generated by automake 1.16.1 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994-2018 Free Software Foundation, Inc. - -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -@SET_MAKE@ -VPATH = @srcdir@ -am__is_gnu_make = { \ - if test -z '$(MAKELEVEL)'; then \ - false; \ - elif test -n '$(MAKE_HOST)'; then \ - true; \ - elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ - true; \ - else \ - false; \ - fi; \ -} -am__make_running_with_option = \ - case $${target_option-} in \ - ?) ;; \ - *) echo "am__make_running_with_option: internal error: invalid" \ - "target option '$${target_option-}' specified" >&2; \ - exit 1;; \ - esac; \ - has_opt=no; \ - sane_makeflags=$$MAKEFLAGS; \ - if $(am__is_gnu_make); then \ - sane_makeflags=$$MFLAGS; \ - else \ - case $$MAKEFLAGS in \ - *\\[\ \ ]*) \ - bs=\\; \ - sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ - | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ - esac; \ - fi; \ - skip_next=no; \ - strip_trailopt () \ - { \ - flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ - }; \ - for flg in $$sane_makeflags; do \ - test $$skip_next = yes && { skip_next=no; continue; }; \ - case $$flg in \ - *=*|--*) continue;; \ - -*I) strip_trailopt 'I'; skip_next=yes;; \ - -*I?*) strip_trailopt 'I';; \ - -*O) strip_trailopt 'O'; skip_next=yes;; \ - -*O?*) strip_trailopt 'O';; \ - -*l) strip_trailopt 'l'; skip_next=yes;; \ - -*l?*) strip_trailopt 'l';; \ - -[dEDm]) skip_next=yes;; \ - -[JT]) skip_next=yes;; \ - esac; \ - case $$flg in \ - *$$target_option*) has_opt=yes; break;; \ - esac; \ - done; \ - test $$has_opt = yes -am__make_dryrun = (target_option=n; $(am__make_running_with_option)) -am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) -pkgdatadir = $(datadir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkglibexecdir = $(libexecdir)/@PACKAGE@ -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = @build@ -host_triplet = @host@ -@BUILD_EXTRAS_TRUE@am__append_1 = extras -subdir = . -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pthread.m4 \ - $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ - $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ - $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \ - $(am__configure_deps) $(am__DIST_COMMON) -am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ - configure.lineno config.status.lineno -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = $(top_builddir)/src/webp/config.h -CONFIG_CLEAN_FILES = -CONFIG_CLEAN_VPATH_FILES = -AM_V_P = $(am__v_P_@AM_V@) -am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) -am__v_P_0 = false -am__v_P_1 = : -AM_V_GEN = $(am__v_GEN_@AM_V@) -am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) -am__v_GEN_0 = @echo " GEN " $@; -am__v_GEN_1 = -AM_V_at = $(am__v_at_@AM_V@) -am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) -am__v_at_0 = @ -am__v_at_1 = -SOURCES = -DIST_SOURCES = -RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ - ctags-recursive dvi-recursive html-recursive info-recursive \ - install-data-recursive install-dvi-recursive \ - install-exec-recursive install-html-recursive \ - install-info-recursive install-pdf-recursive \ - install-ps-recursive install-recursive installcheck-recursive \ - installdirs-recursive pdf-recursive ps-recursive \ - tags-recursive uninstall-recursive -am__can_run_installinfo = \ - case $$AM_UPDATE_INFO_DIR in \ - n|no|NO) false;; \ - *) (install-info --version) >/dev/null 2>&1;; \ - esac -RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ - distclean-recursive maintainer-clean-recursive -am__recursive_targets = \ - $(RECURSIVE_TARGETS) \ - $(RECURSIVE_CLEAN_TARGETS) \ - $(am__extra_recursive_targets) -AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ - cscope distdir distdir-am dist dist-all distcheck -am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) -# Read a list of newline-separated strings from the standard input, -# and print each of them once, without duplicates. Input order is -# *not* preserved. -am__uniquify_input = $(AWK) '\ - BEGIN { nonempty = 0; } \ - { items[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in items) print i; }; } \ -' -# Make sure the list of sources is unique. This is necessary because, -# e.g., the same source file might be shared among _SOURCES variables -# for different programs/libraries. -am__define_uniq_tagged_files = \ - list='$(am__tagged_files)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | $(am__uniquify_input)` -ETAGS = etags -CTAGS = ctags -CSCOPE = cscope -DIST_SUBDIRS = src imageio man extras examples -am__DIST_COMMON = $(srcdir)/Makefile.in \ - $(top_srcdir)/src/webp/config.h.in AUTHORS COPYING ChangeLog \ - NEWS README ar-lib compile config.guess config.sub install-sh \ - ltmain.sh missing -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -distdir = $(PACKAGE)-$(VERSION) -top_distdir = $(distdir) -am__remove_distdir = \ - if test -d "$(distdir)"; then \ - find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ - && rm -rf "$(distdir)" \ - || { sleep 5 && rm -rf "$(distdir)"; }; \ - else :; fi -am__post_remove_distdir = $(am__remove_distdir) -am__relativize = \ - dir0=`pwd`; \ - sed_first='s,^\([^/]*\)/.*$$,\1,'; \ - sed_rest='s,^[^/]*/*,,'; \ - sed_last='s,^.*/\([^/]*\)$$,\1,'; \ - sed_butlast='s,/*[^/]*$$,,'; \ - while test -n "$$dir1"; do \ - first=`echo "$$dir1" | sed -e "$$sed_first"`; \ - if test "$$first" != "."; then \ - if test "$$first" = ".."; then \ - dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ - dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ - else \ - first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ - if test "$$first2" = "$$first"; then \ - dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ - else \ - dir2="../$$dir2"; \ - fi; \ - dir0="$$dir0"/"$$first"; \ - fi; \ - fi; \ - dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ - done; \ - reldir="$$dir2" -DIST_ARCHIVES = $(distdir).tar.gz -GZIP_ENV = --best -DIST_TARGETS = dist-gzip -distuninstallcheck_listfiles = find . -type f -print -am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ - | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' -distcleancheck_listfiles = find . -type f -print -ACLOCAL = @ACLOCAL@ -AMTAR = @AMTAR@ -AM_CFLAGS = @AM_CFLAGS@ -AM_CPPFLAGS = @AM_CPPFLAGS@ -AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ -AR = @AR@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -CC = @CC@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -DLLTOOL = @DLLTOOL@ -DSYMUTIL = @DSYMUTIL@ -DUMPBIN = @DUMPBIN@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -FGREP = @FGREP@ -GIF_INCLUDES = @GIF_INCLUDES@ -GIF_LIBS = @GIF_LIBS@ -GL_INCLUDES = @GL_INCLUDES@ -GL_LIBS = @GL_LIBS@ -GREP = @GREP@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -JPEG_INCLUDES = @JPEG_INCLUDES@ -JPEG_LIBS = @JPEG_LIBS@ -LD = @LD@ -LDFLAGS = @LDFLAGS@ -LIBOBJS = @LIBOBJS@ -LIBPNG_CONFIG = @LIBPNG_CONFIG@ -LIBS = @LIBS@ -LIBSDL_CONFIG = @LIBSDL_CONFIG@ -LIBTOOL = @LIBTOOL@ -LIPO = @LIPO@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ -MAKEINFO = @MAKEINFO@ -MANIFEST_TOOL = @MANIFEST_TOOL@ -MKDIR_P = @MKDIR_P@ -NEON_FLAGS = @NEON_FLAGS@ -NM = @NM@ -NMEDIT = @NMEDIT@ -OBJDUMP = @OBJDUMP@ -OBJEXT = @OBJEXT@ -OTOOL = @OTOOL@ -OTOOL64 = @OTOOL64@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_URL = @PACKAGE_URL@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -PNG_INCLUDES = @PNG_INCLUDES@ -PNG_LIBS = @PNG_LIBS@ -PTHREAD_CC = @PTHREAD_CC@ -PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ -PTHREAD_LIBS = @PTHREAD_LIBS@ -RANLIB = @RANLIB@ -SDL_INCLUDES = @SDL_INCLUDES@ -SDL_LIBS = @SDL_LIBS@ -SED = @SED@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -SSE2_FLAGS = @SSE2_FLAGS@ -SSE41_FLAGS = @SSE41_FLAGS@ -STRIP = @STRIP@ -TIFF_INCLUDES = @TIFF_INCLUDES@ -TIFF_LIBS = @TIFF_LIBS@ -USE_SWAP_16BIT_CSP = @USE_SWAP_16BIT_CSP@ -VERSION = @VERSION@ -abs_builddir = @abs_builddir@ -abs_srcdir = @abs_srcdir@ -abs_top_builddir = @abs_top_builddir@ -abs_top_srcdir = @abs_top_srcdir@ -ac_ct_AR = @ac_ct_AR@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ -am__include = @am__include@ -am__leading_dot = @am__leading_dot@ -am__quote = @am__quote@ -am__tar = @am__tar@ -am__untar = @am__untar@ -ax_pthread_config = @ax_pthread_config@ -bindir = @bindir@ -build = @build@ -build_alias = @build_alias@ -build_cpu = @build_cpu@ -build_os = @build_os@ -build_vendor = @build_vendor@ -builddir = @builddir@ -datadir = @datadir@ -datarootdir = @datarootdir@ -docdir = @docdir@ -dvidir = @dvidir@ -exec_prefix = @exec_prefix@ -host = @host@ -host_alias = @host_alias@ -host_cpu = @host_cpu@ -host_os = @host_os@ -host_vendor = @host_vendor@ -htmldir = @htmldir@ -includedir = @includedir@ -infodir = @infodir@ -install_sh = @install_sh@ -libdir = @libdir@ -libexecdir = @libexecdir@ -localedir = @localedir@ -localstatedir = @localstatedir@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -oldincludedir = @oldincludedir@ -pdfdir = @pdfdir@ -pkgconfigdir = @pkgconfigdir@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -psdir = @psdir@ -runstatedir = @runstatedir@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -srcdir = @srcdir@ -sysconfdir = @sysconfdir@ -target_alias = @target_alias@ -top_build_prefix = @top_build_prefix@ -top_builddir = @top_builddir@ -top_srcdir = @top_srcdir@ -ACLOCAL_AMFLAGS = -I m4 -SUBDIRS = src imageio man $(am__append_1) examples -EXTRA_DIST = COPYING autogen.sh -all: all-recursive - -.SUFFIXES: -am--refresh: Makefile - @: -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ - $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ - && exit 0; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --foreign Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - echo ' $(SHELL) ./config.status'; \ - $(SHELL) ./config.status;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - $(SHELL) ./config.status --recheck - -$(top_srcdir)/configure: $(am__configure_deps) - $(am__cd) $(srcdir) && $(AUTOCONF) -$(ACLOCAL_M4): $(am__aclocal_m4_deps) - $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) -$(am__aclocal_m4_deps): - -src/webp/config.h: src/webp/stamp-h1 - @test -f $@ || rm -f src/webp/stamp-h1 - @test -f $@ || $(MAKE) $(AM_MAKEFLAGS) src/webp/stamp-h1 - -src/webp/stamp-h1: $(top_srcdir)/src/webp/config.h.in $(top_builddir)/config.status - @rm -f src/webp/stamp-h1 - cd $(top_builddir) && $(SHELL) ./config.status src/webp/config.h -$(top_srcdir)/src/webp/config.h.in: $(am__configure_deps) - ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) - rm -f src/webp/stamp-h1 - touch $@ - -distclean-hdr: - -rm -f src/webp/config.h src/webp/stamp-h1 - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs - -distclean-libtool: - -rm -f libtool config.lt - -# This directory's subdirectories are mostly independent; you can cd -# into them and run 'make' without going through this Makefile. -# To change the values of 'make' variables: instead of editing Makefiles, -# (1) if the variable is set in 'config.status', edit 'config.status' -# (which will cause the Makefiles to be regenerated when you run 'make'); -# (2) otherwise, pass the desired values on the 'make' command line. -$(am__recursive_targets): - @fail=; \ - if $(am__make_keepgoing); then \ - failcom='fail=yes'; \ - else \ - failcom='exit 1'; \ - fi; \ - dot_seen=no; \ - target=`echo $@ | sed s/-recursive//`; \ - case "$@" in \ - distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ - *) list='$(SUBDIRS)' ;; \ - esac; \ - for subdir in $$list; do \ - echo "Making $$target in $$subdir"; \ - if test "$$subdir" = "."; then \ - dot_seen=yes; \ - local_target="$$target-am"; \ - else \ - local_target="$$target"; \ - fi; \ - ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ - || eval $$failcom; \ - done; \ - if test "$$dot_seen" = "no"; then \ - $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ - fi; test -z "$$fail" - -ID: $(am__tagged_files) - $(am__define_uniq_tagged_files); mkid -fID $$unique -tags: tags-recursive -TAGS: tags - -tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) - set x; \ - here=`pwd`; \ - if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ - include_option=--etags-include; \ - empty_fix=.; \ - else \ - include_option=--include; \ - empty_fix=; \ - fi; \ - list='$(SUBDIRS)'; for subdir in $$list; do \ - if test "$$subdir" = .; then :; else \ - test ! -f $$subdir/TAGS || \ - set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ - fi; \ - done; \ - $(am__define_uniq_tagged_files); \ - shift; \ - if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ - test -n "$$unique" || unique=$$empty_fix; \ - if test $$# -gt 0; then \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - "$$@" $$unique; \ - else \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$unique; \ - fi; \ - fi -ctags: ctags-recursive - -CTAGS: ctags -ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) - $(am__define_uniq_tagged_files); \ - test -z "$(CTAGS_ARGS)$$unique" \ - || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$unique - -GTAGS: - here=`$(am__cd) $(top_builddir) && pwd` \ - && $(am__cd) $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) "$$here" -cscope: cscope.files - test ! -s cscope.files \ - || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS) -clean-cscope: - -rm -f cscope.files -cscope.files: clean-cscope cscopelist -cscopelist: cscopelist-recursive - -cscopelist-am: $(am__tagged_files) - list='$(am__tagged_files)'; \ - case "$(srcdir)" in \ - [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ - *) sdir=$(subdir)/$(srcdir) ;; \ - esac; \ - for i in $$list; do \ - if test -f "$$i"; then \ - echo "$(subdir)/$$i"; \ - else \ - echo "$$sdir/$$i"; \ - fi; \ - done >> $(top_builddir)/cscope.files - -distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - -rm -f cscope.out cscope.in.out cscope.po.out cscope.files - -distdir: $(BUILT_SOURCES) - $(MAKE) $(AM_MAKEFLAGS) distdir-am - -distdir-am: $(DISTFILES) - $(am__remove_distdir) - test -d "$(distdir)" || mkdir "$(distdir)" - @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - list='$(DISTFILES)'; \ - dist_files=`for file in $$list; do echo $$file; done | \ - sed -e "s|^$$srcdirstrip/||;t" \ - -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ - case $$dist_files in \ - */*) $(MKDIR_P) `echo "$$dist_files" | \ - sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ - sort -u` ;; \ - esac; \ - for file in $$dist_files; do \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - if test -d $$d/$$file; then \ - dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test -d "$(distdir)/$$file"; then \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ - else \ - test -f "$(distdir)/$$file" \ - || cp -p $$d/$$file "$(distdir)/$$file" \ - || exit 1; \ - fi; \ - done - @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ - if test "$$subdir" = .; then :; else \ - $(am__make_dryrun) \ - || test -d "$(distdir)/$$subdir" \ - || $(MKDIR_P) "$(distdir)/$$subdir" \ - || exit 1; \ - dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ - $(am__relativize); \ - new_distdir=$$reldir; \ - dir1=$$subdir; dir2="$(top_distdir)"; \ - $(am__relativize); \ - new_top_distdir=$$reldir; \ - echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ - echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ - ($(am__cd) $$subdir && \ - $(MAKE) $(AM_MAKEFLAGS) \ - top_distdir="$$new_top_distdir" \ - distdir="$$new_distdir" \ - am__remove_distdir=: \ - am__skip_length_check=: \ - am__skip_mode_fix=: \ - distdir) \ - || exit 1; \ - fi; \ - done - -test -n "$(am__skip_mode_fix)" \ - || find "$(distdir)" -type d ! -perm -755 \ - -exec chmod u+rwx,go+rx {} \; -o \ - ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ - ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ - ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ - || chmod -R a+r "$(distdir)" -dist-gzip: distdir - tardir=$(distdir) && $(am__tar) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).tar.gz - $(am__post_remove_distdir) - -dist-bzip2: distdir - tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 - $(am__post_remove_distdir) - -dist-lzip: distdir - tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz - $(am__post_remove_distdir) - -dist-xz: distdir - tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz - $(am__post_remove_distdir) - -dist-tarZ: distdir - @echo WARNING: "Support for distribution archives compressed with" \ - "legacy program 'compress' is deprecated." >&2 - @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 - tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z - $(am__post_remove_distdir) - -dist-shar: distdir - @echo WARNING: "Support for shar distribution archives is" \ - "deprecated." >&2 - @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 - shar $(distdir) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).shar.gz - $(am__post_remove_distdir) - -dist-zip: distdir - -rm -f $(distdir).zip - zip -rq $(distdir).zip $(distdir) - $(am__post_remove_distdir) - -dist dist-all: - $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:' - $(am__post_remove_distdir) - -# This target untars the dist file and tries a VPATH configuration. Then -# it guarantees that the distribution is self-contained by making another -# tarfile. -distcheck: dist - case '$(DIST_ARCHIVES)' in \ - *.tar.gz*) \ - eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).tar.gz | $(am__untar) ;;\ - *.tar.bz2*) \ - bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ - *.tar.lz*) \ - lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ - *.tar.xz*) \ - xz -dc $(distdir).tar.xz | $(am__untar) ;;\ - *.tar.Z*) \ - uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ - *.shar.gz*) \ - eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\ - *.zip*) \ - unzip $(distdir).zip ;;\ - esac - chmod -R a-w $(distdir) - chmod u+w $(distdir) - mkdir $(distdir)/_build $(distdir)/_build/sub $(distdir)/_inst - chmod a-w $(distdir) - test -d $(distdir)/_build || exit 0; \ - dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ - && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ - && am__cwd=`pwd` \ - && $(am__cd) $(distdir)/_build/sub \ - && ../../configure \ - $(AM_DISTCHECK_CONFIGURE_FLAGS) \ - $(DISTCHECK_CONFIGURE_FLAGS) \ - --srcdir=../.. --prefix="$$dc_install_base" \ - && $(MAKE) $(AM_MAKEFLAGS) \ - && $(MAKE) $(AM_MAKEFLAGS) dvi \ - && $(MAKE) $(AM_MAKEFLAGS) check \ - && $(MAKE) $(AM_MAKEFLAGS) install \ - && $(MAKE) $(AM_MAKEFLAGS) installcheck \ - && $(MAKE) $(AM_MAKEFLAGS) uninstall \ - && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ - distuninstallcheck \ - && chmod -R a-w "$$dc_install_base" \ - && ({ \ - (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ - && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ - && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ - && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ - distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ - } || { rm -rf "$$dc_destdir"; exit 1; }) \ - && rm -rf "$$dc_destdir" \ - && $(MAKE) $(AM_MAKEFLAGS) dist \ - && rm -rf $(DIST_ARCHIVES) \ - && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ - && cd "$$am__cwd" \ - || exit 1 - $(am__post_remove_distdir) - @(echo "$(distdir) archives ready for distribution: "; \ - list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ - sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' -distuninstallcheck: - @test -n '$(distuninstallcheck_dir)' || { \ - echo 'ERROR: trying to run $@ with an empty' \ - '$$(distuninstallcheck_dir)' >&2; \ - exit 1; \ - }; \ - $(am__cd) '$(distuninstallcheck_dir)' || { \ - echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ - exit 1; \ - }; \ - test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ - || { echo "ERROR: files left after uninstall:" ; \ - if test -n "$(DESTDIR)"; then \ - echo " (check DESTDIR support)"; \ - fi ; \ - $(distuninstallcheck_listfiles) ; \ - exit 1; } >&2 -distcleancheck: distclean - @if test '$(srcdir)' = . ; then \ - echo "ERROR: distcleancheck can only run from a VPATH build" ; \ - exit 1 ; \ - fi - @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ - || { echo "ERROR: files left in build directory after distclean:" ; \ - $(distcleancheck_listfiles) ; \ - exit 1; } >&2 -check-am: all-am -check: check-recursive -all-am: Makefile -installdirs: installdirs-recursive -installdirs-am: -install: install-recursive -install-exec: install-exec-recursive -install-data: install-data-recursive -uninstall: uninstall-recursive - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-recursive -install-strip: - if test -z '$(STRIP)'; then \ - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - install; \ - else \ - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ - fi -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-recursive - -clean-am: clean-generic clean-libtool mostlyclean-am - -distclean: distclean-recursive - -rm -f $(am__CONFIG_DISTCLEAN_FILES) - -rm -f Makefile -distclean-am: clean-am distclean-generic distclean-hdr \ - distclean-libtool distclean-tags - -dvi: dvi-recursive - -dvi-am: - -html: html-recursive - -html-am: - -info: info-recursive - -info-am: - -install-data-am: - -install-dvi: install-dvi-recursive - -install-dvi-am: - -install-exec-am: - -install-html: install-html-recursive - -install-html-am: - -install-info: install-info-recursive - -install-info-am: - -install-man: - -install-pdf: install-pdf-recursive - -install-pdf-am: - -install-ps: install-ps-recursive - -install-ps-am: - -installcheck-am: - -maintainer-clean: maintainer-clean-recursive - -rm -f $(am__CONFIG_DISTCLEAN_FILES) - -rm -rf $(top_srcdir)/autom4te.cache - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-recursive - -mostlyclean-am: mostlyclean-generic mostlyclean-libtool - -pdf: pdf-recursive - -pdf-am: - -ps: ps-recursive - -ps-am: - -uninstall-am: - -.MAKE: $(am__recursive_targets) install-am install-strip - -.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ - am--refresh check check-am clean clean-cscope clean-generic \ - clean-libtool cscope cscopelist-am ctags ctags-am dist \ - dist-all dist-bzip2 dist-gzip dist-lzip dist-shar dist-tarZ \ - dist-xz dist-zip distcheck distclean distclean-generic \ - distclean-hdr distclean-libtool distclean-tags distcleancheck \ - distdir distuninstallcheck dvi dvi-am html html-am info \ - info-am install install-am install-data install-data-am \ - install-dvi install-dvi-am install-exec install-exec-am \ - install-html install-html-am install-info install-info-am \ - install-man install-pdf install-pdf-am install-ps \ - install-ps-am install-strip installcheck installcheck-am \ - installdirs installdirs-am maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-generic \ - mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ - uninstall-am - -.PRECIOUS: Makefile - - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/Extended/libwebp/Makefile.vc b/Extended/libwebp/Makefile.vc deleted file mode 100644 index 886f981..0000000 --- a/Extended/libwebp/Makefile.vc +++ /dev/null @@ -1,522 +0,0 @@ -# -# Stem for static libs and DLLs -# -LIBWEBPDECODER_BASENAME = libwebpdecoder -LIBWEBP_BASENAME = libwebp -LIBWEBPMUX_BASENAME = libwebpmux -LIBWEBPDEMUX_BASENAME = libwebpdemux - -!IFNDEF ARCH -!IF ! [ cl 2>&1 | find "x86" > NUL ] -ARCH = x86 -!ELSE IF ! [ cl 2>&1 | find "x64" > NUL ] -ARCH = x64 -!ELSE IF ! [ cl 2>&1 | find "ARM" > NUL ] -ARCH = ARM -!ELSE -!ERROR Unable to auto-detect toolchain architecture! \ -If cl.exe is in your PATH rerun nmake with ARCH=. -!ENDIF -!ENDIF - -!IF "$(ARCH)" == "x86" -PLATFORM_LDFLAGS = /SAFESEH -!ENDIF - -############################################################# -## Nothing more to do below this line! - -NOLOGO = /nologo -CCNODBG = cl.exe $(NOLOGO) /O2 /DNDEBUG -CCDEBUG = cl.exe $(NOLOGO) /Od /Gm /Zi /D_DEBUG /RTC1 -CFLAGS = /I. /Isrc $(NOLOGO) /W3 /EHsc /c -CFLAGS = $(CFLAGS) /DWIN32 /D_CRT_SECURE_NO_WARNINGS /DWIN32_LEAN_AND_MEAN -LDFLAGS = /LARGEADDRESSAWARE /MANIFEST /NXCOMPAT /DYNAMICBASE -LDFLAGS = $(LDFLAGS) $(PLATFORM_LDFLAGS) -LNKDLL = link.exe /DLL $(NOLOGO) -LNKEXE = link.exe $(NOLOGO) -LNKLIB = lib.exe $(NOLOGO) -MT = mt.exe $(NOLOGO) -RCNODBG = rc.exe $(NOLOGO) /l"0x0409" # 0x409 = U.S. English -RCDEBUG = $(RCNODBG) /D_DEBUG - -!IF "$(ARCH)" == "ARM" -CFLAGS = $(CFLAGS) /DWINAPI_FAMILY=WINAPI_FAMILY_PHONE_APP /DWEBP_USE_THREAD -!ELSE -CFLAGS = $(CFLAGS) /DHAVE_WINCODEC_H /DWEBP_USE_THREAD -!ENDIF - -CFGSET = FALSE -!IF "$(OBJDIR)" == "" -OUTDIR = ..\obj\ -!ELSE -OUTDIR = $(OBJDIR) -!ENDIF - -############################################################## -# Runtime library configuration -!IF "$(RTLIBCFG)" == "static" -RTLIB = /MT -RTLIBD = /MTd -!ELSE IF "$(RTLIBCFG)" == "legacy" -RTLIBCFG = static -RTLIB = /MT -RTLIBD = /MTd -CFLAGS = $(CFLAGS) /GS- /arch:IA32 -!ELSE -RTLIB = /MD -RTLIBD = /MDd -!ENDIF -DIRBASE = $(OUTDIR)\$(CFG)\$(ARCH) -DIROBJ = $(DIRBASE)\obj -DIRLIB = $(DIRBASE)\lib -DIRINC = $(DIRBASE)\include -DIRBIN = $(DIRBASE)\bin -LIBWEBP_PDBNAME = $(DIROBJ)\$(LIBWEBP_BASENAME).pdb -OUTPUT_DIRS = $(DIRBIN) $(DIRINC) $(DIRLIB) \ - $(DIROBJ)\dec \ - $(DIROBJ)\demux \ - $(DIROBJ)\dsp \ - $(DIROBJ)\enc \ - $(DIROBJ)\examples \ - $(DIROBJ)\extras \ - $(DIROBJ)\imageio \ - $(DIROBJ)\mux \ - $(DIROBJ)\utils \ - -# Target configuration -!IF "$(CFG)" == "release-static" -CC = $(CCNODBG) -STATICLIBBUILD = TRUE -!ELSE IF "$(CFG)" == "debug-static" -CC = $(CCDEBUG) -RTLIB = $(RTLIBD) -STATICLIBBUILD = TRUE -LIBWEBPDECODER_BASENAME = $(LIBWEBPDECODER_BASENAME)_debug -LIBWEBP_BASENAME = $(LIBWEBP_BASENAME)_debug -LIBWEBPMUX_BASENAME = $(LIBWEBPMUX_BASENAME)_debug -LIBWEBPDEMUX_BASENAME = $(LIBWEBPDEMUX_BASENAME)_debug -!ELSE IF "$(CFG)" == "release-dynamic" -CC = $(CCNODBG) -RC = $(RCNODBG) -DLLBUILD = TRUE -!ELSE IF "$(CFG)" == "debug-dynamic" -CC = $(CCDEBUG) -RC = $(RCDEBUG) -RTLIB = $(RTLIBD) -DLLBUILD = TRUE -LIBWEBPDECODER_BASENAME = $(LIBWEBPDECODER_BASENAME)_debug -LIBWEBP_BASENAME = $(LIBWEBP_BASENAME)_debug -LIBWEBPMUX_BASENAME = $(LIBWEBPMUX_BASENAME)_debug -LIBWEBPDEMUX_BASENAME = $(LIBWEBPDEMUX_BASENAME)_debug -!ENDIF - -!IF "$(STATICLIBBUILD)" == "TRUE" -CC = $(CC) $(RTLIB) -CFGSET = TRUE -LIBWEBPDECODER = $(DIRLIB)\$(LIBWEBPDECODER_BASENAME).lib -LIBWEBP = $(DIRLIB)\$(LIBWEBP_BASENAME).lib -LIBWEBPMUX = $(DIRLIB)\$(LIBWEBPMUX_BASENAME).lib -LIBWEBPDEMUX = $(DIRLIB)\$(LIBWEBPDEMUX_BASENAME).lib -!ELSE IF "$(DLLBUILD)" == "TRUE" -DLLINC = webp_dll.h -CC = $(CC) /I$(DIROBJ) /FI$(DLLINC) $(RTLIB) /DWEBP_DLL -LIBWEBPDECODER = $(DIRLIB)\$(LIBWEBPDECODER_BASENAME)_dll.lib -LIBWEBP = $(DIRLIB)\$(LIBWEBP_BASENAME)_dll.lib -LIBWEBPMUX = $(DIRLIB)\$(LIBWEBPMUX_BASENAME)_dll.lib -LIBWEBPDEMUX = $(DIRLIB)\$(LIBWEBPDEMUX_BASENAME)_dll.lib -LIBWEBP_PDBNAME = $(DIROBJ)\$(LIBWEBP_BASENAME)_dll.pdb -CFGSET = TRUE -!ENDIF - -!IF "$(UNICODE)" == "1" -CFLAGS = $(CFLAGS) /D_UNICODE /DUNICODE -!ENDIF - -####################### -# Usage -# -!IF "$(CFGSET)" == "FALSE" -!MESSAGE Usage: nmake /f Makefile.vc [CFG=] -!MESSAGE . [OBJDIR=] [RTLIBCFG=] [UNICODE=1] [] -!MESSAGE -!MESSAGE where is one of: -!MESSAGE - release-static - release static library -!MESSAGE - debug-static - debug static library -!MESSAGE - release-dynamic - release dynamic link library (DLL) -!MESSAGE - debug-dynamic - debug dynamic link library (DLL) -!MESSAGE -!MESSAGE may be: -!MESSAGE - clean - perform a clean for CFG -!MESSAGE - experimental - build CFG with experimental -!MESSAGE . features enabled. -!MESSAGE - (empty) - build libwebp-based targets for CFG -!MESSAGE - all - build (de)mux-based targets for CFG -!MESSAGE - gif2webp - requires libgif & >= VS2013 -!MESSAGE - anim_diff - requires libgif & >= VS2013 -!MESSAGE - anim_dump -!MESSAGE -!MESSAGE RTLIBCFG controls the runtime library linkage - 'static' or 'dynamic'. -!MESSAGE 'legacy' will produce a Windows 2000 compatible library. -!MESSAGE OBJDIR is the path where you like to build (obj, bins, etc.), -!MESSAGE defaults to ..\obj - -!IF "$(CFG)" != "" -!MESSAGE -!ERROR please choose a valid configuration instead of "$(CFG)" -!ENDIF -!ENDIF - -####################### -# Rules -# -!IF "$(CFGSET)" == "TRUE" -# A config was provided, so the library can be built. -# - -DEC_OBJS = \ - $(DIROBJ)\dec\alpha_dec.obj \ - $(DIROBJ)\dec\buffer_dec.obj \ - $(DIROBJ)\dec\frame_dec.obj \ - $(DIROBJ)\dec\idec_dec.obj \ - $(DIROBJ)\dec\io_dec.obj \ - $(DIROBJ)\dec\quant_dec.obj \ - $(DIROBJ)\dec\tree_dec.obj \ - $(DIROBJ)\dec\vp8_dec.obj \ - $(DIROBJ)\dec\vp8l_dec.obj \ - $(DIROBJ)\dec\webp_dec.obj \ - -DEMUX_OBJS = \ - $(DIROBJ)\demux\anim_decode.obj \ - $(DIROBJ)\demux\demux.obj \ - -DSP_DEC_OBJS = \ - $(DIROBJ)\dsp\alpha_processing.obj \ - $(DIROBJ)\dsp\alpha_processing_mips_dsp_r2.obj \ - $(DIROBJ)\dsp\alpha_processing_neon.obj \ - $(DIROBJ)\dsp\alpha_processing_sse2.obj \ - $(DIROBJ)\dsp\alpha_processing_sse41.obj \ - $(DIROBJ)\dsp\cpu.obj \ - $(DIROBJ)\dsp\dec.obj \ - $(DIROBJ)\dsp\dec_clip_tables.obj \ - $(DIROBJ)\dsp\dec_mips32.obj \ - $(DIROBJ)\dsp\dec_mips_dsp_r2.obj \ - $(DIROBJ)\dsp\dec_msa.obj \ - $(DIROBJ)\dsp\dec_neon.obj \ - $(DIROBJ)\dsp\dec_sse2.obj \ - $(DIROBJ)\dsp\dec_sse41.obj \ - $(DIROBJ)\dsp\filters.obj \ - $(DIROBJ)\dsp\filters_mips_dsp_r2.obj \ - $(DIROBJ)\dsp\filters_msa.obj \ - $(DIROBJ)\dsp\filters_neon.obj \ - $(DIROBJ)\dsp\filters_sse2.obj \ - $(DIROBJ)\dsp\lossless.obj \ - $(DIROBJ)\dsp\lossless_mips_dsp_r2.obj \ - $(DIROBJ)\dsp\lossless_msa.obj \ - $(DIROBJ)\dsp\lossless_neon.obj \ - $(DIROBJ)\dsp\lossless_sse2.obj \ - $(DIROBJ)\dsp\rescaler.obj \ - $(DIROBJ)\dsp\rescaler_mips32.obj \ - $(DIROBJ)\dsp\rescaler_mips_dsp_r2.obj \ - $(DIROBJ)\dsp\rescaler_msa.obj \ - $(DIROBJ)\dsp\rescaler_neon.obj \ - $(DIROBJ)\dsp\rescaler_sse2.obj \ - $(DIROBJ)\dsp\upsampling.obj \ - $(DIROBJ)\dsp\upsampling_mips_dsp_r2.obj \ - $(DIROBJ)\dsp\upsampling_msa.obj \ - $(DIROBJ)\dsp\upsampling_neon.obj \ - $(DIROBJ)\dsp\upsampling_sse2.obj \ - $(DIROBJ)\dsp\upsampling_sse41.obj \ - $(DIROBJ)\dsp\yuv.obj \ - $(DIROBJ)\dsp\yuv_mips32.obj \ - $(DIROBJ)\dsp\yuv_mips_dsp_r2.obj \ - $(DIROBJ)\dsp\yuv_neon.obj \ - $(DIROBJ)\dsp\yuv_sse2.obj \ - $(DIROBJ)\dsp\yuv_sse41.obj \ - -DSP_ENC_OBJS = \ - $(DIROBJ)\dsp\cost.obj \ - $(DIROBJ)\dsp\cost_mips32.obj \ - $(DIROBJ)\dsp\cost_mips_dsp_r2.obj \ - $(DIROBJ)\dsp\cost_neon.obj \ - $(DIROBJ)\dsp\cost_sse2.obj \ - $(DIROBJ)\dsp\enc.obj \ - $(DIROBJ)\dsp\enc_mips32.obj \ - $(DIROBJ)\dsp\enc_mips_dsp_r2.obj \ - $(DIROBJ)\dsp\enc_msa.obj \ - $(DIROBJ)\dsp\enc_neon.obj \ - $(DIROBJ)\dsp\enc_sse2.obj \ - $(DIROBJ)\dsp\enc_sse41.obj \ - $(DIROBJ)\dsp\lossless_enc.obj \ - $(DIROBJ)\dsp\lossless_enc_mips32.obj \ - $(DIROBJ)\dsp\lossless_enc_mips_dsp_r2.obj \ - $(DIROBJ)\dsp\lossless_enc_msa.obj \ - $(DIROBJ)\dsp\lossless_enc_neon.obj \ - $(DIROBJ)\dsp\lossless_enc_sse2.obj \ - $(DIROBJ)\dsp\lossless_enc_sse41.obj \ - $(DIROBJ)\dsp\ssim.obj \ - $(DIROBJ)\dsp\ssim_sse2.obj \ - -EX_ANIM_UTIL_OBJS = \ - $(DIROBJ)\examples\anim_util.obj \ - -IMAGEIO_DEC_OBJS = \ - $(DIROBJ)\imageio\image_dec.obj \ - $(DIROBJ)\imageio\jpegdec.obj \ - $(DIROBJ)\imageio\metadata.obj \ - $(DIROBJ)\imageio\pngdec.obj \ - $(DIROBJ)\imageio\pnmdec.obj \ - $(DIROBJ)\imageio\tiffdec.obj \ - $(DIROBJ)\imageio\webpdec.obj \ - $(DIROBJ)\imageio\wicdec.obj \ - -IMAGEIO_ENC_OBJS = \ - $(DIROBJ)\imageio\image_enc.obj \ - -EX_GIF_DEC_OBJS = \ - $(DIROBJ)\examples\gifdec.obj \ - -EX_UTIL_OBJS = \ - $(DIROBJ)\examples\example_util.obj \ - -ENC_OBJS = \ - $(DIROBJ)\enc\alpha_enc.obj \ - $(DIROBJ)\enc\analysis_enc.obj \ - $(DIROBJ)\enc\backward_references_cost_enc.obj \ - $(DIROBJ)\enc\backward_references_enc.obj \ - $(DIROBJ)\enc\config_enc.obj \ - $(DIROBJ)\enc\cost_enc.obj \ - $(DIROBJ)\enc\filter_enc.obj \ - $(DIROBJ)\enc\frame_enc.obj \ - $(DIROBJ)\enc\histogram_enc.obj \ - $(DIROBJ)\enc\iterator_enc.obj \ - $(DIROBJ)\enc\near_lossless_enc.obj \ - $(DIROBJ)\enc\picture_enc.obj \ - $(DIROBJ)\enc\picture_csp_enc.obj \ - $(DIROBJ)\enc\picture_psnr_enc.obj \ - $(DIROBJ)\enc\picture_rescale_enc.obj \ - $(DIROBJ)\enc\picture_tools_enc.obj \ - $(DIROBJ)\enc\predictor_enc.obj \ - $(DIROBJ)\enc\quant_enc.obj \ - $(DIROBJ)\enc\syntax_enc.obj \ - $(DIROBJ)\enc\token_enc.obj \ - $(DIROBJ)\enc\tree_enc.obj \ - $(DIROBJ)\enc\vp8l_enc.obj \ - $(DIROBJ)\enc\webp_enc.obj \ - -EXTRAS_OBJS = \ - $(DIROBJ)\extras\extras.obj \ - $(DIROBJ)\extras\quality_estimate.obj \ - -IMAGEIO_UTIL_OBJS = \ - $(DIROBJ)\imageio\imageio_util.obj \ - -MUX_OBJS = \ - $(DIROBJ)\mux\anim_encode.obj \ - $(DIROBJ)\mux\muxedit.obj \ - $(DIROBJ)\mux\muxinternal.obj \ - $(DIROBJ)\mux\muxread.obj \ - -UTILS_DEC_OBJS = \ - $(DIROBJ)\utils\bit_reader_utils.obj \ - $(DIROBJ)\utils\color_cache_utils.obj \ - $(DIROBJ)\utils\filters_utils.obj \ - $(DIROBJ)\utils\huffman_utils.obj \ - $(DIROBJ)\utils\quant_levels_dec_utils.obj \ - $(DIROBJ)\utils\rescaler_utils.obj \ - $(DIROBJ)\utils\random_utils.obj \ - $(DIROBJ)\utils\thread_utils.obj \ - $(DIROBJ)\utils\utils.obj \ - -UTILS_ENC_OBJS = \ - $(DIROBJ)\utils\bit_writer_utils.obj \ - $(DIROBJ)\utils\huffman_encode_utils.obj \ - $(DIROBJ)\utils\quant_levels_utils.obj \ - -LIBWEBPDECODER_OBJS = $(DEC_OBJS) $(DSP_DEC_OBJS) $(UTILS_DEC_OBJS) -LIBWEBP_OBJS = $(LIBWEBPDECODER_OBJS) $(ENC_OBJS) $(DSP_ENC_OBJS) \ - $(UTILS_ENC_OBJS) $(DLL_OBJS) -LIBWEBPMUX_OBJS = $(MUX_OBJS) $(LIBWEBPMUX_OBJS) -LIBWEBPDEMUX_OBJS = $(DEMUX_OBJS) $(LIBWEBPDEMUX_OBJS) - -OUT_LIBS = $(LIBWEBPDECODER) $(LIBWEBP) -!IF "$(ARCH)" == "ARM" -ex: $(OUT_LIBS) -all: ex -!ELSE -OUT_EXAMPLES = $(DIRBIN)\cwebp.exe $(DIRBIN)\dwebp.exe -EXTRA_EXAMPLES = $(DIRBIN)\vwebp.exe $(DIRBIN)\webpmux.exe \ - $(DIRBIN)\img2webp.exe $(DIRBIN)\get_disto.exe \ - $(DIRBIN)\webp_quality.exe $(DIRBIN)\vwebp_sdl.exe \ - $(DIRBIN)\webpinfo.exe - -ex: $(OUT_LIBS) $(OUT_EXAMPLES) -all: ex $(EXTRA_EXAMPLES) -# NB: gif2webp.exe and anim_diff.exe are excluded from 'all' as libgif requires -# C99 support which is only available from VS2013 onward. -gif2webp: $(DIRBIN)\gif2webp.exe -anim_diff: $(DIRBIN)\anim_diff.exe -anim_dump: $(DIRBIN)\anim_dump.exe - -$(DIRBIN)\anim_diff.exe: $(DIROBJ)\examples\anim_diff.obj $(EX_ANIM_UTIL_OBJS) -$(DIRBIN)\anim_diff.exe: $(EX_UTIL_OBJS) $(IMAGEIO_UTIL_OBJS) -$(DIRBIN)\anim_diff.exe: $(EX_GIF_DEC_OBJS) $(LIBWEBPDEMUX) $(LIBWEBP) -$(DIRBIN)\anim_dump.exe: $(DIROBJ)\examples\anim_dump.obj $(EX_ANIM_UTIL_OBJS) -$(DIRBIN)\anim_dump.exe: $(EX_UTIL_OBJS) $(IMAGEIO_UTIL_OBJS) -$(DIRBIN)\anim_dump.exe: $(EX_GIF_DEC_OBJS) $(LIBWEBPDEMUX) $(LIBWEBP) -$(DIRBIN)\anim_dump.exe: $(IMAGEIO_ENC_OBJS) -$(DIRBIN)\cwebp.exe: $(DIROBJ)\examples\cwebp.obj $(IMAGEIO_DEC_OBJS) -$(DIRBIN)\cwebp.exe: $(IMAGEIO_UTIL_OBJS) -$(DIRBIN)\cwebp.exe: $(LIBWEBPDEMUX) -$(DIRBIN)\dwebp.exe: $(DIROBJ)\examples\dwebp.obj $(IMAGEIO_DEC_OBJS) -$(DIRBIN)\dwebp.exe: $(IMAGEIO_ENC_OBJS) -$(DIRBIN)\dwebp.exe: $(IMAGEIO_UTIL_OBJS) -$(DIRBIN)\dwebp.exe: $(LIBWEBPDEMUX) -$(DIRBIN)\gif2webp.exe: $(DIROBJ)\examples\gif2webp.obj $(EX_GIF_DEC_OBJS) -$(DIRBIN)\gif2webp.exe: $(EX_UTIL_OBJS) $(IMAGEIO_UTIL_OBJS) $(LIBWEBPMUX) -$(DIRBIN)\gif2webp.exe: $(LIBWEBP) -$(DIRBIN)\vwebp.exe: $(DIROBJ)\examples\vwebp.obj $(EX_UTIL_OBJS) -$(DIRBIN)\vwebp.exe: $(IMAGEIO_UTIL_OBJS) $(LIBWEBPDEMUX) $(LIBWEBP) -$(DIRBIN)\vwebp_sdl.exe: $(DIROBJ)\extras\vwebp_sdl.obj -$(DIRBIN)\vwebp_sdl.exe: $(DIROBJ)\extras\webp_to_sdl.obj -$(DIRBIN)\vwebp_sdl.exe: $(IMAGEIO_UTIL_OBJS) $(LIBWEBP) -$(DIRBIN)\webpmux.exe: $(DIROBJ)\examples\webpmux.obj $(LIBWEBPMUX) -$(DIRBIN)\webpmux.exe: $(EX_UTIL_OBJS) $(IMAGEIO_UTIL_OBJS) $(LIBWEBP) -$(DIRBIN)\img2webp.exe: $(DIROBJ)\examples\img2webp.obj $(LIBWEBPMUX) -$(DIRBIN)\img2webp.exe: $(IMAGEIO_DEC_OBJS) -$(DIRBIN)\img2webp.exe: $(EX_UTIL_OBJS) $(IMAGEIO_UTIL_OBJS) -$(DIRBIN)\img2webp.exe: $(LIBWEBPDEMUX) $(LIBWEBP) -$(DIRBIN)\get_disto.exe: $(DIROBJ)\extras\get_disto.obj -$(DIRBIN)\get_disto.exe: $(IMAGEIO_DEC_OBJS) $(IMAGEIO_UTIL_OBJS) -$(DIRBIN)\get_disto.exe: $(LIBWEBPDEMUX) $(LIBWEBP) -$(DIRBIN)\webp_quality.exe: $(DIROBJ)\extras\webp_quality.obj -$(DIRBIN)\webp_quality.exe: $(IMAGEIO_UTIL_OBJS) -$(DIRBIN)\webp_quality.exe: $(EXTRAS_OBJS) -# EXTRA_OBJS requires private symbols from dsp. Explicitly add those when -# building libwebp as a dll. -!IF "$(DLLBUILD)" == "TRUE" -$(DIRBIN)\webp_quality.exe: $(DSP_DEC_OBJS) -!ENDIF -$(DIRBIN)\webp_quality.exe: $(LIBWEBP) -$(DIRBIN)\webpinfo.exe: $(DIROBJ)\examples\webpinfo.obj -$(DIRBIN)\webpinfo.exe: $(IMAGEIO_DEC_OBJS) -$(DIRBIN)\webpinfo.exe: $(EX_UTIL_OBJS) $(IMAGEIO_UTIL_OBJS) -$(DIRBIN)\webpinfo.exe: $(LIBWEBPDEMUX) $(LIBWEBP) - -$(OUT_EXAMPLES): $(EX_UTIL_OBJS) $(LIBWEBP) -$(EX_UTIL_OBJS) $(IMAGEIO_UTIL_OBJS): $(OUTPUT_DIRS) -$(IMAGEIO_DEC_OBJS) $(IMAGEIO_ENC_OBJS) $(EXTRAS_OBJS): $(OUTPUT_DIRS) -!ENDIF # ARCH == ARM - -$(LIBWEBPDECODER): $(LIBWEBPDECODER_OBJS) -$(LIBWEBP): $(LIBWEBP_OBJS) -$(LIBWEBPMUX): $(LIBWEBPMUX_OBJS) -$(LIBWEBPDEMUX): $(LIBWEBPDEMUX_OBJS) - -$(LIBWEBP_OBJS) $(LIBWEBPMUX_OBJS) $(LIBWEBPDEMUX_OBJS): $(OUTPUT_DIRS) - -!IF "$(DLLBUILD)" == "TRUE" -$(LIBWEBP_OBJS) $(LIBWEBPMUX_OBJS) $(LIBWEBPDEMUX_OBJS): \ - $(DIROBJ)\$(DLLINC) - -{$(DIROBJ)}.c{$(DIROBJ)}.obj: - $(CC) $(CFLAGS) /Fd$(LIBWEBP_PDBNAME) /Fo$@ $< - -{src}.rc{$(DIROBJ)}.res: - $(RC) /fo$@ $< -{src\demux}.rc{$(DIROBJ)\demux}.res: - $(RC) /fo$@ $< -{src\mux}.rc{$(DIROBJ)\mux}.res: - $(RC) /fo$@ $< - -$(LIBWEBP): $(DIROBJ)\$(LIBWEBP_BASENAME:_debug=).res -$(LIBWEBPDECODER): $(DIROBJ)\$(LIBWEBPDECODER_BASENAME:_debug=).res -$(LIBWEBPMUX): $(LIBWEBP) $(DIROBJ)\mux\$(LIBWEBPMUX_BASENAME:_debug=).res -$(LIBWEBPDEMUX): $(LIBWEBP) $(DIROBJ)\demux\$(LIBWEBPDEMUX_BASENAME:_debug=).res - -$(LIBWEBPDECODER) $(LIBWEBP) $(LIBWEBPMUX) $(LIBWEBPDEMUX): - $(LNKDLL) /out:$(DIRBIN)\$(@B:_dll=.dll) /implib:$@ $(LFLAGS) $** - -xcopy $(DIROBJ)\*.pdb $(DIRLIB) /y - -clean:: - @-erase /s $(DIROBJ)\$(DLLINC) 2> NUL -!ELSE -$(LIBWEBPDECODER) $(LIBWEBP) $(LIBWEBPMUX) $(LIBWEBPDEMUX): - $(LNKLIB) /out:$@ $** - -xcopy $(DIROBJ)\*.pdb $(DIRLIB) /y -!ENDIF - -$(OUTPUT_DIRS): - @if not exist "$(@)" mkdir "$(@)" - -# generate a helper include to define WEBP_EXTERN suitable for the DLL build -$(DIROBJ)\$(DLLINC): - @echo #ifndef WEBP_DLL_H_ > $@ - @echo #define WEBP_DLL_H_ >> $@ - @echo #define WEBP_EXTERN __declspec(dllexport) >> $@ - @echo #endif /* WEBP_DLL_H_ */ >> $@ - -.SUFFIXES: .c .obj .res .exe -# File-specific flag builds. Note batch rules take precedence over wildcards, -# so for now name each file individually. -$(DIROBJ)\examples\anim_diff.obj: examples\anim_diff.c - $(CC) $(CFLAGS) /DWEBP_HAVE_GIF /Fd$(LIBWEBP_PDBNAME) \ - /Fo$(DIROBJ)\examples\ examples\$(@B).c -$(DIROBJ)\examples\anim_dump.obj: examples\anim_dump.c - $(CC) $(CFLAGS) /DWEBP_HAVE_GIF /Fd$(LIBWEBP_PDBNAME) \ - /Fo$(DIROBJ)\examples\ examples\$(@B).c -$(DIROBJ)\examples\anim_util.obj: examples\anim_util.c - $(CC) $(CFLAGS) /DWEBP_HAVE_GIF /Fd$(LIBWEBP_PDBNAME) \ - /Fo$(DIROBJ)\examples\ examples\$(@B).c -$(DIROBJ)\examples\gif2webp.obj: examples\gif2webp.c - $(CC) $(CFLAGS) /DWEBP_HAVE_GIF /Fd$(LIBWEBP_PDBNAME) \ - /Fo$(DIROBJ)\examples\ examples\$(@B).c -$(DIROBJ)\examples\gifdec.obj: examples\gifdec.c - $(CC) $(CFLAGS) /DWEBP_HAVE_GIF /Fd$(LIBWEBP_PDBNAME) \ - /Fo$(DIROBJ)\examples\ examples\$(@B).c -# Batch rules -{examples}.c{$(DIROBJ)\examples}.obj:: - $(CC) $(CFLAGS) /Fd$(DIROBJ)\examples\ /Fo$(DIROBJ)\examples\ $< -{extras}.c{$(DIROBJ)\extras}.obj:: - $(CC) $(CFLAGS) /Fd$(DIROBJ)\extras\ /Fo$(DIROBJ)\extras\ $< -{imageio}.c{$(DIROBJ)\imageio}.obj:: - $(CC) $(CFLAGS) /Fd$(DIROBJ)\imageio\ /Fo$(DIROBJ)\imageio\ $< -{src\dec}.c{$(DIROBJ)\dec}.obj:: - $(CC) $(CFLAGS) /Fd$(LIBWEBP_PDBNAME) /Fo$(DIROBJ)\dec\ $< -{src\demux}.c{$(DIROBJ)\demux}.obj:: - $(CC) $(CFLAGS) /Fd$(LIBWEBP_PDBNAME) /Fo$(DIROBJ)\demux\ $< -{src\dsp}.c{$(DIROBJ)\dsp}.obj:: - $(CC) $(CFLAGS) /Fd$(LIBWEBP_PDBNAME) /Fo$(DIROBJ)\dsp\ $< -{src\enc}.c{$(DIROBJ)\enc}.obj:: - $(CC) $(CFLAGS) /Fd$(LIBWEBP_PDBNAME) /Fo$(DIROBJ)\enc\ $< -{src\mux}.c{$(DIROBJ)\mux}.obj:: - $(CC) $(CFLAGS) /Fd$(LIBWEBP_PDBNAME) /Fo$(DIROBJ)\mux\ $< -{src\utils}.c{$(DIROBJ)\utils}.obj:: - $(CC) $(CFLAGS) /Fd$(LIBWEBP_PDBNAME) /Fo$(DIROBJ)\utils\ $< - -LNKLIBS = ole32.lib windowscodecs.lib shlwapi.lib -!IF "$(UNICODE)" == "1" -LNKLIBS = $(LNKLIBS) Shell32.lib -!ENDIF - -{$(DIROBJ)\examples}.obj{$(DIRBIN)}.exe: - $(LNKEXE) $(LDFLAGS) /OUT:$@ $** $(LNKLIBS) - $(MT) -manifest $@.manifest -outputresource:$@;1 - del $@.manifest - -{$(DIROBJ)\extras}.obj{$(DIRBIN)}.exe: - $(LNKEXE) $(LDFLAGS) /OUT:$@ $** $(LNKLIBS) - $(MT) -manifest $@.manifest -outputresource:$@;1 - del $@.manifest - -clean:: - @-erase /s $(DIROBJ)\*.dll 2> NUL - @-erase /s $(DIROBJ)\*.exp 2> NUL - @-erase /s $(DIROBJ)\*.idb 2> NUL - @-erase /s $(DIROBJ)\*.lib 2> NUL - @-erase /s $(DIROBJ)\*.obj 2> NUL - @-erase /s $(DIROBJ)\*.pch 2> NUL - @-erase /s $(DIROBJ)\*.pdb 2> NUL - @-erase /s $(DIROBJ)\*.res 2> NUL - -!ENDIF # End of case where a config was provided. diff --git a/Extended/libwebp/NEWS b/Extended/libwebp/NEWS deleted file mode 100644 index 46daa09..0000000 --- a/Extended/libwebp/NEWS +++ /dev/null @@ -1,242 +0,0 @@ -- 12/18/2019: version 1.1.0 - * API changes: - - libwebp: - WebPMalloc (issue #442) - - extras: - WebPUnmultiplyARGB - * alpha decode fix (issue #439) - * toolchain updates and bug fixes - (chromium: #1026858, #1027136, #1027409, #1028620, #1028716, #995200) - (oss-fuzz: #19430, #19447) - -- 7/4/2019: version 1.0.3 - This is a binary compatible release. - * resize fixes for Nx1 sizes and the addition of non-opaque alpha values for - odd sizes (issues #418, #434) - * lossless encode/decode performance improvements - * lossy compression performance improvement at low quality levels with flat - content (issue #432) - * python swig files updated to support python 3 - Tool updates: - vwebp will now preserve the aspect ratio of images that exceed monitor - resolution by scaling the image to fit (issue #433) - -- 1/14/2019: version 1.0.2 - This is a binary compatible release. - * (Windows) unicode file support in the tools (linux and mac already had - support, issue #398) - * lossless encoder speedups - * lossy encoder speedup on ARM - * lossless multi-threaded security fix (chromium:917029) - -- 11/2/2018: version 1.0.1 - This is a binary compatible release. - * lossless encoder speedups - * big-endian fix for alpha decoding (issue #393) - * gif2webp fix for loop count=65535 transcode (issue #382) - * further security related hardening in libwebp & libwebpmux - (issues #383, #385, #386, #387, #388, #391) - (oss-fuzz #9099, #9100, #9105, #9106, #9111, #9112, #9119, #9123, #9170, - #9178, #9179, #9183, #9186, #9191, #9364, #9417, #9496, #10349, - #10423, #10634, #10700, #10838, #10922, #11021, #11088, #11152) - * miscellaneous bug & build fixes (issues #381, #394, #396, #397, #400) - -- 4/2/2018: version 1.0.0 - This is a binary compatible release. - * lossy encoder improvements to avoid chroma shifts in various circumstances - (issues #308, #340) - * big-endian fixes for decode, RGBA import and WebPPictureDistortion - Tool updates: - gifwebp, anim_diff - default duration behavior (<= 10ms) changed to match - web browsers, transcoding tools (issue #379) - img2webp, webpmux - allow options to be passed in via a file (issue #355) - -- 11/24/2017: version 0.6.1 - This is a binary compatible release. - * lossless performance and compression improvements + a new 'cruncher' mode - (-m 6 -q 100) - * ARM performance improvements with clang (15-20% w/ndk r15c, issue #339) - * webp-js: emscripten/webassembly based javascript decoder - * miscellaneous bug & build fixes (issue #329, #332, #343, #353, #360, #361, - #363) - Tool updates / additions: - added webpinfo - prints file format information (issue #330) - gif2webp - loop behavior modified to match Chrome M63+ (crbug.com/649264); - '-loop_compatibility' can be used for the old behavior - -- 1/26/2017: version 0.6.0 - * lossless performance and compression improvements - * miscellaneous performance improvements (SSE2, NEON, MSA) - * webpmux gained a -duration option allowing for frame timing modification - * new img2webp utility allowing a sequence of images to be converted to - animated webp - * API changes: - - libwebp: - WebPPictureSharpARGBToYUVA - WebPPlaneDistortion - - libwebpmux / gif2webp: - WebPAnimEncoderOptions: kmax <= 0 now disables keyframes, kmax == 1 - forces all keyframes. See mux.h and the gif2webp - manpage for details. - -- 12/13/2016: version 0.5.2 - This is a binary compatible release. - This release covers CVE-2016-8888 and CVE-2016-9085. - * further security related hardening in the tools; fixes to - gif2webp/AnimEncoder (issues #310, #314, #316, #322), cwebp/libwebp (issue - #312) - * full libwebp (encoder & decoder) iOS framework; libwebpdecoder - WebP.framework renamed to WebPDecoder.framework (issue #307) - * CMake support for Android Studio (2.2) - * miscellaneous build related fixes (issue #306, #313) - * miscellaneous documentation improvements (issue #225) - * minor lossy encoder fixes and improvements - -- 6/14/2016: version 0.5.1 - This is a binary compatible release. - * miscellaneous bug fixes (issues #280, #289) - * reverted alpha plane encoding with color cache for compatibility with - libwebp 0.4.0->0.4.3 (issues #291, #298) - * lossless encoding performance improvements - * memory reduction in both lossless encoding and decoding - * force mux output to be in the extended format (VP8X) when undefined chunks - are present (issue #294) - * gradle, cmake build support - * workaround for compiler bug causing 64-bit decode failures on android - devices using clang-3.8 in the r11c NDK - * various WebPAnimEncoder improvements - -- 12/17/2015: version 0.5.0 - * miscellaneous bug & build fixes (issues #234, #258, #274, #275, #278) - * encoder & decoder speed-ups on x86/ARM/MIPS for lossy & lossless - - note! YUV->RGB conversion was sped-up, but the results will be slightly - different from previous releases - * various lossless encoder improvements - * gif2webp improvements, -min_size option added - * tools fully support input from stdin and output to stdout (issue #168) - * New WebPAnimEncoder API for creating animations - * New WebPAnimDecoder API for decoding animations - * other API changes: - - libwebp: - WebPPictureSmartARGBToYUVA() (-pre 4 in cwebp) - WebPConfig::exact (-exact in cwebp; -alpha_cleanup is now the default) - WebPConfig::near_lossless (-near_lossless in cwebp) - WebPFree() (free'ing webp allocated memory in other languages) - WebPConfigLosslessPreset() - WebPMemoryWriterClear() - - libwebpdemux: removed experimental fragment related fields and functions - - libwebpmux: WebPMuxSetCanvasSize() - * new libwebpextras library with some uncommon import functions: - WebPImportGray/WebPImportRGB565/WebPImportRGB4444 - -- 10/15/15: version 0.4.4 - This is a binary compatible release. - * rescaling out-of-bounds read fix (issue #254) - * various build fixes and improvements (issues #253, #259, #262, #267, #268) - * container documentation update - * gif2webp transparency fix (issue #245) - -- 3/3/15: version 0.4.3 - This is a binary compatible release. - * Android / gcc / iOS / MSVS build fixes and improvements - * lossless decode fix (issue #239 -- since 0.4.0) - * documentation / vwebp updates for animation - * multi-threading fix (issue #234) - -- 10/13/14: version 0.4.2 - This is a binary compatible release. - * Android / gcc build fixes - * (Windows) fix reading from stdin and writing to stdout - * gif2webp: miscellaneous fixes - * fix 'alpha-leak' with lossy compression (issue #220) - * the lossless bitstream spec has been amended to reflect the current code - -- 7/24/14: version 0.4.1 - This is a binary compatible release. - * AArch64 (arm64) & MIPS support/optimizations - * NEON assembly additions: - - ~25% faster lossy decode / encode (-m 4) - - ~10% faster lossless decode - - ~5-10% faster lossless encode (-m 3/4) - * dwebp/vwebp can read from stdin - * cwebp/gif2webp can write to stdout - * cwebp can read webp files; useful if storing sources as webp lossless - -- 12/19/13: version 0.4.0 - * improved gif2webp tool - * numerous fixes, compression improvement and speed-up - * dither option added to decoder (dwebp -dither 50 ...) - * improved multi-threaded modes (-mt option) - * improved filtering strength determination - * New function: WebPMuxGetCanvasSize - * BMP and TIFF format output added to 'dwebp' - * Significant memory reduction for decoding lossy images with alpha. - * Intertwined decoding of RGB and alpha for a shorter - time-to-first-decoded-pixel. - * WebPIterator has a new member 'has_alpha' denoting whether the frame - contains transparency. - * Container spec amended with new 'blending method' for animation. - -- 6/13/13: version 0.3.1 - This is a binary compatible release. - * Add incremental decoding support for images containing ALPH and ICCP chunks. - * Python bindings via swig for the simple encode/decode interfaces similar to - Java. - -- 3/20/13: version 0.3.0 - This is a binary compatible release. - * WebPINewRGB/WebPINewYUVA accept being passed a NULL output buffer - and will perform auto-allocation. - * default filter option is now '-strong -f 60' - * encoding speed-up for lossy methods 3 to 6 - * alpha encoding can be done in parallel to lossy using 'cwebp -mt ...' - * color profile, metadata (XMP/EXIF) and animation support finalized in the - container. - * various NEON assembly additions - Tool updates / additions: - * gif2webp added - * vwebp given color profile & animation support - * cwebp can preserve color profile / metadata with '-metadata' - -- 10/30/12: version 0.2.1 - * Various security related fixes - * cwebp.exe: fix import errors on Windows XP - * enable DLL builds for mingw targets - -- 8/3/12: version 0.2.0 - * Add support for ARGB -> YUVA conversion for lossless decoder - New functions: WebPINewYUVA, WebPIDecGetYUVA - * Add stats for lossless and alpha encoding - * Security related hardening: allocation and size checks - * Add PAM output support to dwebp - -- 7/19/12: version 0.1.99 - * This is a pre-release of 0.2.0, not an rc to allow for further - incompatible changes based on user feedback. - * Alpha channel encode/decode support. - * Lossless encoder/decoder. - * Add TIFF input support to cwebp. - Incompatible changes: - * The encode ABI has been modified to support alpha encoding. - * Deprecated function WebPINew() has been removed. - * Decode function signatures have changed to consistently use size_t over - int/uint32_t. - * decode_vp8.h is no longer installed system-wide. - * cwebp will encode the alpha channel if present. - -- 9/19/11: version 0.1.3 - * Advanced decoding APIs. - * On-the-fly cropping and rescaling of images. - * SSE2 instructions for decoding performance optimizations on x86 based - platforms. - * Support Multi-threaded decoding. - * 40% improvement in Decoding performance. - * Add support for RGB565, RGBA4444 & ARGB image colorspace. - * Better handling of large picture encoding. - -- 3/25/11: version 0.1.2 - * Incremental decoding: picture can be decoded byte-by-byte if needs be. - * lot of bug-fixes, consolidation and stabilization - -- 2/23/11: initial release of version 0.1, with the new encoder -- 9/30/10: initial release version with only the lightweight decoder diff --git a/Extended/libwebp/PATENTS b/Extended/libwebp/PATENTS deleted file mode 100644 index caedf60..0000000 --- a/Extended/libwebp/PATENTS +++ /dev/null @@ -1,23 +0,0 @@ -Additional IP Rights Grant (Patents) ------------------------------------- - -"These implementations" means the copyrightable works that implement the WebM -codecs distributed by Google as part of the WebM Project. - -Google hereby grants to you a perpetual, worldwide, non-exclusive, no-charge, -royalty-free, irrevocable (except as stated in this section) patent license to -make, have made, use, offer to sell, sell, import, transfer, and otherwise -run, modify and propagate the contents of these implementations of WebM, where -such license applies only to those patent claims, both currently owned by -Google and acquired in the future, licensable by Google that are necessarily -infringed by these implementations of WebM. This grant does not include claims -that would be infringed only as a consequence of further modification of these -implementations. If you or your agent or exclusive licensee institute or order -or agree to the institution of patent litigation or any other patent -enforcement activity against any entity (including a cross-claim or -counterclaim in a lawsuit) alleging that any of these implementations of WebM -or any code incorporated within any of these implementations of WebM -constitute direct or contributory patent infringement, or inducement of -patent infringement, then any patent rights granted to you under this License -for these implementations of WebM shall terminate as of the date such -litigation is filed. diff --git a/Extended/libwebp/README b/Extended/libwebp/README deleted file mode 100644 index 0592727..0000000 --- a/Extended/libwebp/README +++ /dev/null @@ -1,789 +0,0 @@ - __ __ ____ ____ ____ - / \\/ \/ _ \/ _ )/ _ \ - \ / __/ _ \ __/ - \__\__/\____/\_____/__/ ____ ___ - / _/ / \ \ / _ \/ _/ - / \_/ / / \ \ __/ \__ - \____/____/\_____/_____/____/v1.1.0 - -Description: -============ - -WebP codec: library to encode and decode images in WebP format. This package -contains the library that can be used in other programs to add WebP support, -as well as the command line tools 'cwebp' and 'dwebp'. - -See http://developers.google.com/speed/webp - -The latest source tree is available at -https://chromium.googlesource.com/webm/libwebp - -It is released under the same license as the WebM project. -See http://www.webmproject.org/license/software/ or the -"COPYING" file for details. An additional intellectual -property rights grant can be found in the file PATENTS. - -Building: -========= - -Windows build: --------------- - -By running: - - nmake /f Makefile.vc CFG=release-static RTLIBCFG=static OBJDIR=output - -the directory output\release-static\(x64|x86)\bin will contain the tools -cwebp.exe and dwebp.exe. The directory output\release-static\(x64|x86)\lib will -contain the libwebp static library. -The target architecture (x86/x64) is detected by Makefile.vc from the Visual -Studio compiler (cl.exe) available in the system path. - -Unix build using makefile.unix: -------------------------------- - -On platforms with GNU tools installed (gcc and make), running - - make -f makefile.unix - -will build the binaries examples/cwebp and examples/dwebp, along -with the static library src/libwebp.a. No system-wide installation -is supplied, as this is a simple alternative to the full installation -system based on the autoconf tools (see below). -Please refer to makefile.unix for additional details and customizations. - -Using autoconf tools: ---------------------- -Prerequisites: -A compiler (e.g., gcc), make, autoconf, automake, libtool. -On a Debian-like system the following should install everything you need for a -minimal build: -$ sudo apt-get install gcc make autoconf automake libtool - -When building from git sources, you will need to run autogen.sh to generate the -configure script. - -./configure -make -make install - -should be all you need to have the following files - -/usr/local/include/webp/decode.h -/usr/local/include/webp/encode.h -/usr/local/include/webp/types.h -/usr/local/lib/libwebp.* -/usr/local/bin/cwebp -/usr/local/bin/dwebp - -installed. - -Note: A decode-only library, libwebpdecoder, is available using the -'--enable-libwebpdecoder' flag. The encode library is built separately and can -be installed independently using a minor modification in the corresponding -Makefile.am configure files (see comments there). See './configure --help' for -more options. - -Building for MIPS Linux: ------------------------- -MIPS Linux toolchain stable available releases can be found at: -https://community.imgtec.com/developers/mips/tools/codescape-mips-sdk/available-releases/ - -# Add toolchain to PATH -export PATH=$PATH:/path/to/toolchain/bin - -# 32-bit build for mips32r5 (p5600) -HOST=mips-mti-linux-gnu -MIPS_CFLAGS="-O3 -mips32r5 -mabi=32 -mtune=p5600 -mmsa -mfp64 \ - -msched-weight -mload-store-pairs -fPIE" -MIPS_LDFLAGS="-mips32r5 -mabi=32 -mmsa -mfp64 -pie" - -# 64-bit build for mips64r6 (i6400) -HOST=mips-img-linux-gnu -MIPS_CFLAGS="-O3 -mips64r6 -mabi=64 -mtune=i6400 -mmsa -mfp64 \ - -msched-weight -mload-store-pairs -fPIE" -MIPS_LDFLAGS="-mips64r6 -mabi=64 -mmsa -mfp64 -pie" - -./configure --host=${HOST} --build=`config.guess` \ - CC="${HOST}-gcc -EL" \ - CFLAGS="$MIPS_CFLAGS" \ - LDFLAGS="$MIPS_LDFLAGS" -make -make install - -CMake: ------- -With CMake, you can compile libwebp, cwebp, dwebp, gif2web, img2webp, webpinfo -and the JS bindings. - -Prerequisites: -A compiler (e.g., gcc with autotools) and CMake. -On a Debian-like system the following should install everything you need for a -minimal build: -$ sudo apt-get install build-essential cmake - -When building from git sources, you will need to run cmake to generate the -makefiles. - -mkdir build && cd build && cmake ../ -make -make install - -If you also want any of the executables, you will need to enable them through -CMake, e.g.: - -cmake -DWEBP_BUILD_CWEBP=ON -DWEBP_BUILD_DWEBP=ON ../ - -or through your favorite interface (like ccmake or cmake-qt-gui). - -Use option -DWEBP_UNICODE=ON for Unicode support on Windows (with chcp 65001). - -Finally, once installed, you can also use WebP in your CMake project by doing: - -find_package(WebP) - -which will define the CMake variables WebP_INCLUDE_DIRS and WebP_LIBRARIES. - -Gradle: -------- -The support for Gradle is minimal: it only helps you compile libwebp, cwebp and -dwebp and webpmux_example. - -Prerequisites: -A compiler (e.g., gcc with autotools) and gradle. -On a Debian-like system the following should install everything you need for a -minimal build: -$ sudo apt-get install build-essential gradle - -When building from git sources, you will need to run the Gradle wrapper with the -appropriate target, e.g. : - -./gradlew buildAllExecutables - -SWIG bindings: --------------- - -To generate language bindings from swig/libwebp.swig at least swig-1.3 -(http://www.swig.org) is required. - -Currently the following functions are mapped: -Decode: - WebPGetDecoderVersion - WebPGetInfo - WebPDecodeRGBA - WebPDecodeARGB - WebPDecodeBGRA - WebPDecodeBGR - WebPDecodeRGB - -Encode: - WebPGetEncoderVersion - WebPEncodeRGBA - WebPEncodeBGRA - WebPEncodeRGB - WebPEncodeBGR - WebPEncodeLosslessRGBA - WebPEncodeLosslessBGRA - WebPEncodeLosslessRGB - WebPEncodeLosslessBGR - -See swig/README for more detailed build instructions. - -Java bindings: - -To build the swig-generated JNI wrapper code at least JDK-1.5 (or equivalent) -is necessary for enum support. The output is intended to be a shared object / -DLL that can be loaded via System.loadLibrary("webp_jni"). - -Python bindings: - -To build the swig-generated Python extension code at least Python 2.6 is -required. Python < 2.6 may build with some minor changes to libwebp.swig or the -generated code, but is untested. - -Encoding tool: -============== - -The examples/ directory contains tools for encoding (cwebp) and -decoding (dwebp) images. - -The easiest use should look like: - cwebp input.png -q 80 -o output.webp -which will convert the input file to a WebP file using a quality factor of 80 -on a 0->100 scale (0 being the lowest quality, 100 being the best. Default -value is 75). -You might want to try the -lossless flag too, which will compress the source -(in RGBA format) without any loss. The -q quality parameter will in this case -control the amount of processing time spent trying to make the output file as -small as possible. - -A longer list of options is available using the -longhelp command line flag: - -> cwebp -longhelp -Usage: - cwebp [-preset <...>] [options] in_file [-o out_file] - -If input size (-s) for an image is not specified, it is -assumed to be a PNG, JPEG, TIFF or WebP file. - -Options: - -h / -help ............. short help - -H / -longhelp ......... long help - -q ............. quality factor (0:small..100:big), default=75 - -alpha_q ......... transparency-compression quality (0..100), - default=100 - -preset ....... preset setting, one of: - default, photo, picture, - drawing, icon, text - -preset must come first, as it overwrites other parameters - -z ............... activates lossless preset with given - level in [0:fast, ..., 9:slowest] - - -m ............... compression method (0=fast, 6=slowest), default=4 - -segments ........ number of segments to use (1..4), default=4 - -size ............ target size (in bytes) - -psnr .......... target PSNR (in dB. typically: 42) - - -s ......... input size (width x height) for YUV - -sns ............. spatial noise shaping (0:off, 100:max), default=50 - -f ............... filter strength (0=off..100), default=60 - -sharpness ....... filter sharpness (0:most .. 7:least sharp), default=0 - -strong ................ use strong filter instead of simple (default) - -nostrong .............. use simple filter instead of strong - -sharp_yuv ............. use sharper (and slower) RGB->YUV conversion - -partition_limit . limit quality to fit the 512k limit on - the first partition (0=no degradation ... 100=full) - -pass ............ analysis pass number (1..10) - -crop .. crop picture with the given rectangle - -resize ........ resize picture (after any cropping) - -mt .................... use multi-threading if available - -low_memory ............ reduce memory usage (slower encoding) - -map ............. print map of extra info - -print_psnr ............ prints averaged PSNR distortion - -print_ssim ............ prints averaged SSIM distortion - -print_lsim ............ prints local-similarity distortion - -d .......... dump the compressed output (PGM file) - -alpha_method .... transparency-compression method (0..1), default=1 - -alpha_filter . predictive filtering for alpha plane, - one of: none, fast (default) or best - -exact ................. preserve RGB values in transparent area, default=off - -blend_alpha ..... blend colors against background color - expressed as RGB values written in - hexadecimal, e.g. 0xc0e0d0 for red=0xc0 - green=0xe0 and blue=0xd0 - -noalpha ............... discard any transparency information - -lossless .............. encode image losslessly, default=off - -near_lossless ... use near-lossless image - preprocessing (0..100=off), default=100 - -hint ......... specify image characteristics hint, - one of: photo, picture or graph - - -metadata ..... comma separated list of metadata to - copy from the input to the output if present. - Valid values: all, none (default), exif, icc, xmp - - -short ................. condense printed message - -quiet ................. don't print anything - -version ............... print version number and exit - -noasm ................. disable all assembly optimizations - -v ..................... verbose, e.g. print encoding/decoding times - -progress .............. report encoding progress - -Experimental Options: - -jpeg_like ............. roughly match expected JPEG size - -af .................... auto-adjust filter strength - -pre ............. pre-processing filter - -The main options you might want to try in order to further tune the -visual quality are: - -preset - -sns - -f - -m - -Namely: - * 'preset' will set up a default encoding configuration targeting a - particular type of input. It should appear first in the list of options, - so that subsequent options can take effect on top of this preset. - Default value is 'default'. - * 'sns' will progressively turn on (when going from 0 to 100) some additional - visual optimizations (like: segmentation map re-enforcement). This option - will balance the bit allocation differently. It tries to take bits from the - "easy" parts of the picture and use them in the "difficult" ones instead. - Usually, raising the sns value (at fixed -q value) leads to larger files, - but with better quality. - Typical value is around '75'. - * 'f' option directly links to the filtering strength used by the codec's - in-loop processing. The higher the value, the smoother the - highly-compressed area will look. This is particularly useful when aiming - at very small files. Typical values are around 20-30. Note that using the - option -strong/-nostrong will change the type of filtering. Use "-f 0" to - turn filtering off. - * 'm' controls the trade-off between encoding speed and quality. Default is 4. - You can try -m 5 or -m 6 to explore more (time-consuming) encoding - possibilities. A lower value will result in faster encoding at the expense - of quality. - -Decoding tool: -============== - -There is a decoding sample in examples/dwebp.c which will take -a .webp file and decode it to a PNG image file (amongst other formats). -This is simply to demonstrate the use of the API. You can verify the -file test.webp decodes to exactly the same as test_ref.ppm by using: - - cd examples - ./dwebp test.webp -ppm -o test.ppm - diff test.ppm test_ref.ppm - -The full list of options is available using -h: - -> dwebp -h -Usage: dwebp in_file [options] [-o out_file] - -Decodes the WebP image file to PNG format [Default] -Use following options to convert into alternate image formats: - -pam ......... save the raw RGBA samples as a color PAM - -ppm ......... save the raw RGB samples as a color PPM - -bmp ......... save as uncompressed BMP format - -tiff ........ save as uncompressed TIFF format - -pgm ......... save the raw YUV samples as a grayscale PGM - file with IMC4 layout - -yuv ......... save the raw YUV samples in flat layout - - Other options are: - -version ..... print version number and exit - -nofancy ..... don't use the fancy YUV420 upscaler - -nofilter .... disable in-loop filtering - -nodither .... disable dithering - -dither .. dithering strength (in 0..100) - -alpha_dither use alpha-plane dithering if needed - -mt .......... use multi-threading - -crop ... crop output with the given rectangle - -resize ......... scale the output (*after* any cropping) - -flip ........ flip the output vertically - -alpha ....... only save the alpha plane - -incremental . use incremental decoding (useful for tests) - -h ........... this help message - -v ........... verbose (e.g. print encoding/decoding times) - -quiet ....... quiet mode, don't print anything - -noasm ....... disable all assembly optimizations - -WebP file analysis tool: -======================== - -'webpinfo' can be used to print out the chunk level structure and bitstream -header information of WebP files. It can also check if the files are of valid -WebP format. - -Usage: webpinfo [options] in_files -Note: there could be multiple input files; - options must come before input files. -Options: - -version ........... Print version number and exit. - -quiet ............. Do not show chunk parsing information. - -diag .............. Show parsing error diagnosis. - -summary ........... Show chunk stats summary. - -bitstream_info .... Parse bitstream header. - -Visualization tool: -=================== - -There's a little self-serve visualization tool called 'vwebp' under the -examples/ directory. It uses OpenGL to open a simple drawing window and show -a decoded WebP file. It's not yet integrated in the automake build system, but -you can try to manually compile it using the recommendations below. - -Usage: vwebp in_file [options] - -Decodes the WebP image file and visualize it using OpenGL -Options are: - -version ..... print version number and exit - -noicc ....... don't use the icc profile if present - -nofancy ..... don't use the fancy YUV420 upscaler - -nofilter .... disable in-loop filtering - -dither dithering strength (0..100), default=50 - -noalphadither disable alpha plane dithering - -usebgcolor .. display background color - -mt .......... use multi-threading - -info ........ print info - -h ........... this help message - -Keyboard shortcuts: - 'c' ................ toggle use of color profile - 'b' ................ toggle background color display - 'i' ................ overlay file information - 'd' ................ disable blending & disposal (debug) - 'q' / 'Q' / ESC .... quit - -Building: ---------- - -Prerequisites: -1) OpenGL & OpenGL Utility Toolkit (GLUT) - Linux: - $ sudo apt-get install freeglut3-dev mesa-common-dev - Mac + XCode: - - These libraries should be available in the OpenGL / GLUT frameworks. - Windows: - http://freeglut.sourceforge.net/index.php#download - -2) (Optional) qcms (Quick Color Management System) - i. Download qcms from Mozilla / Chromium: - http://hg.mozilla.org/mozilla-central/file/0e7639e3bdfb/gfx/qcms - http://src.chromium.org/viewvc/chrome/trunk/src/third_party/qcms - ii. Build and archive the source files as libqcms.a / qcms.lib - iii. Update makefile.unix / Makefile.vc - a) Define WEBP_HAVE_QCMS - b) Update include / library paths to reference the qcms directory. - -Build using makefile.unix / Makefile.vc: -$ make -f makefile.unix examples/vwebp -> nmake /f Makefile.vc CFG=release-static \ - ../obj/x64/release-static/bin/vwebp.exe - -Animation creation tool: -======================== -The utility 'img2webp' can turn a sequence of input images (PNG, JPEG, ...) -into an animated WebP file. It offers fine control over duration, encoding -modes, etc. - -Usage: - - img2webp [file-level options] [image files...] [per-frame options...] - -File-level options (only used at the start of compression): - -min_size ............ minimize size - -loop .......... loop count (default: 0, = infinite loop) - -kmax .......... maximum number of frame between key-frames - (0=only keyframes) - -kmin .......... minimum number of frame between key-frames - (0=disable key-frames altogether) - -mixed ............... use mixed lossy/lossless automatic mode - -v ................... verbose mode - -h ................... this help - -version ............. print version number and exit - -Per-frame options (only used for subsequent images input): - -d ............. frame duration in ms (default: 100) - -lossless ........... use lossless mode (default) - -lossy ... ........... use lossy mode - -q ........... quality - -m ............. method to use - -example: img2webp -loop 2 in0.png -lossy in1.jpg - -d 80 in2.tiff -o out.webp - -Note: if a single file name is passed as the argument, the arguments will be -tokenized from this file. The file name must not start with the character '-'. - -Animated GIF conversion: -======================== -Animated GIF files can be converted to WebP files with animation using the -gif2webp utility available under examples/. The files can then be viewed using -vwebp. - -Usage: - gif2webp [options] gif_file -o webp_file -Options: - -h / -help ............. this help - -lossy ................. encode image using lossy compression - -mixed ................. for each frame in the image, pick lossy - or lossless compression heuristically - -q ............. quality factor (0:small..100:big) - -m ............... compression method (0=fast, 6=slowest) - -min_size .............. minimize output size (default:off) - lossless compression by default; can be - combined with -q, -m, -lossy or -mixed - options - -kmin ............ min distance between key frames - -kmax ............ max distance between key frames - -f ............... filter strength (0=off..100) - -metadata ..... comma separated list of metadata to - copy from the input to the output if present - Valid values: all, none, icc, xmp (default) - -loop_compatibility .... use compatibility mode for Chrome - version prior to M62 (inclusive) - -mt .................... use multi-threading if available - - -version ............... print version number and exit - -v ..................... verbose - -quiet ................. don't print anything - -Building: ---------- -With the libgif development files installed, gif2webp can be built using -makefile.unix: -$ make -f makefile.unix examples/gif2webp - -or using autoconf: -$ ./configure --enable-everything -$ make - -Comparison of animated images: -============================== -Test utility anim_diff under examples/ can be used to compare two animated -images (each can be GIF or WebP). - -Usage: anim_diff [options] - -Options: - -dump_frames dump decoded frames in PAM format - -min_psnr ... minimum per-frame PSNR - -raw_comparison ..... if this flag is not used, RGB is - premultiplied before comparison - -max_diff ..... maximum allowed difference per channel - between corresponding pixels in subsequent - frames - -h .................. this help - -version ............ print version number and exit - -Building: ---------- -With the libgif development files and a C++ compiler installed, anim_diff can -be built using makefile.unix: -$ make -f makefile.unix examples/anim_diff - -or using autoconf: -$ ./configure --enable-everything -$ make - -Encoding API: -============= - -The main encoding functions are available in the header src/webp/encode.h -The ready-to-use ones are: -size_t WebPEncodeRGB(const uint8_t* rgb, int width, int height, int stride, - float quality_factor, uint8_t** output); -size_t WebPEncodeBGR(const uint8_t* bgr, int width, int height, int stride, - float quality_factor, uint8_t** output); -size_t WebPEncodeRGBA(const uint8_t* rgba, int width, int height, int stride, - float quality_factor, uint8_t** output); -size_t WebPEncodeBGRA(const uint8_t* bgra, int width, int height, int stride, - float quality_factor, uint8_t** output); - -They will convert raw RGB samples to a WebP data. The only control supplied -is the quality factor. - -There are some variants for using the lossless format: - -size_t WebPEncodeLosslessRGB(const uint8_t* rgb, int width, int height, - int stride, uint8_t** output); -size_t WebPEncodeLosslessBGR(const uint8_t* bgr, int width, int height, - int stride, uint8_t** output); -size_t WebPEncodeLosslessRGBA(const uint8_t* rgba, int width, int height, - int stride, uint8_t** output); -size_t WebPEncodeLosslessBGRA(const uint8_t* bgra, int width, int height, - int stride, uint8_t** output); - -Of course in this case, no quality factor is needed since the compression -occurs without loss of the input values, at the expense of larger output sizes. - -Advanced encoding API: ----------------------- - -A more advanced API is based on the WebPConfig and WebPPicture structures. - -WebPConfig contains the encoding settings and is not tied to a particular -picture. -WebPPicture contains input data, on which some WebPConfig will be used for -compression. -The encoding flow looks like: - --------------------------------------- BEGIN PSEUDO EXAMPLE - -#include - - // Setup a config, starting form a preset and tuning some additional - // parameters - WebPConfig config; - if (!WebPConfigPreset(&config, WEBP_PRESET_PHOTO, quality_factor)) { - return 0; // version error - } - // ... additional tuning - config.sns_strength = 90; - config.filter_sharpness = 6; - config_error = WebPValidateConfig(&config); // not mandatory, but useful - - // Setup the input data - WebPPicture pic; - if (!WebPPictureInit(&pic)) { - return 0; // version error - } - pic.width = width; - pic.height = height; - // allocated picture of dimension width x height - if (!WebPPictureAllocate(&pic)) { - return 0; // memory error - } - // at this point, 'pic' has been initialized as a container, - // and can receive the Y/U/V samples. - // Alternatively, one could use ready-made import functions like - // WebPPictureImportRGB(), which will take care of memory allocation. - // In any case, past this point, one will have to call - // WebPPictureFree(&pic) to reclaim memory. - - // Set up a byte-output write method. WebPMemoryWriter, for instance. - WebPMemoryWriter wrt; - WebPMemoryWriterInit(&wrt); // initialize 'wrt' - - pic.writer = MyFileWriter; - pic.custom_ptr = my_opaque_structure_to_make_MyFileWriter_work; - - // Compress! - int ok = WebPEncode(&config, &pic); // ok = 0 => error occurred! - WebPPictureFree(&pic); // must be called independently of the 'ok' result. - - // output data should have been handled by the writer at that point. - // -> compressed data is the memory buffer described by wrt.mem / wrt.size - - // deallocate the memory used by compressed data - WebPMemoryWriterClear(&wrt); - --------------------------------------- END PSEUDO EXAMPLE - -Decoding API: -============= - -This is mainly just one function to call: - -#include "webp/decode.h" -uint8_t* WebPDecodeRGB(const uint8_t* data, size_t data_size, - int* width, int* height); - -Please have a look at the file src/webp/decode.h for the details. -There are variants for decoding in BGR/RGBA/ARGB/BGRA order, along with -decoding to raw Y'CbCr samples. One can also decode the image directly into a -pre-allocated buffer. - -To detect a WebP file and gather the picture's dimensions, the function: - int WebPGetInfo(const uint8_t* data, size_t data_size, - int* width, int* height); -is supplied. No decoding is involved when using it. - -Incremental decoding API: -========================= - -In the case when data is being progressively transmitted, pictures can still -be incrementally decoded using a slightly more complicated API. Decoder state -is stored into an instance of the WebPIDecoder object. This object can be -created with the purpose of decoding either RGB or Y'CbCr samples. -For instance: - - WebPDecBuffer buffer; - WebPInitDecBuffer(&buffer); - buffer.colorspace = MODE_BGR; - ... - WebPIDecoder* idec = WebPINewDecoder(&buffer); - -As data is made progressively available, this incremental-decoder object -can be used to decode the picture further. There are two (mutually exclusive) -ways to pass freshly arrived data: - -either by appending the fresh bytes: - - WebPIAppend(idec, fresh_data, size_of_fresh_data); - -or by just mentioning the new size of the transmitted data: - - WebPIUpdate(idec, buffer, size_of_transmitted_buffer); - -Note that 'buffer' can be modified between each call to WebPIUpdate, in -particular when the buffer is resized to accommodate larger data. - -These functions will return the decoding status: either VP8_STATUS_SUSPENDED if -decoding is not finished yet or VP8_STATUS_OK when decoding is done. Any other -status is an error condition. - -The 'idec' object must always be released (even upon an error condition) by -calling: WebPDelete(idec). - -To retrieve partially decoded picture samples, one must use the corresponding -method: WebPIDecGetRGB or WebPIDecGetYUVA. -It will return the last displayable pixel row. - -Lastly, note that decoding can also be performed into a pre-allocated pixel -buffer. This buffer must be passed when creating a WebPIDecoder, calling -WebPINewRGB() or WebPINewYUVA(). - -Please have a look at the src/webp/decode.h header for further details. - -Advanced Decoding API: -====================== - -WebP decoding supports an advanced API which provides on-the-fly cropping and -rescaling, something of great usefulness on memory-constrained environments like -mobile phones. Basically, the memory usage will scale with the output's size, -not the input's, when one only needs a quick preview or a zoomed in portion of -an otherwise too-large picture. Some CPU can be saved too, incidentally. - --------------------------------------- BEGIN PSEUDO EXAMPLE - // A) Init a configuration object - WebPDecoderConfig config; - CHECK(WebPInitDecoderConfig(&config)); - - // B) optional: retrieve the bitstream's features. - CHECK(WebPGetFeatures(data, data_size, &config.input) == VP8_STATUS_OK); - - // C) Adjust 'config' options, if needed - config.options.no_fancy_upsampling = 1; - config.options.use_scaling = 1; - config.options.scaled_width = scaledWidth(); - config.options.scaled_height = scaledHeight(); - // etc. - - // D) Specify 'config' output options for specifying output colorspace. - // Optionally the external image decode buffer can also be specified. - config.output.colorspace = MODE_BGRA; - // Optionally, the config.output can be pointed to an external buffer as - // well for decoding the image. This externally supplied memory buffer - // should be big enough to store the decoded picture. - config.output.u.RGBA.rgba = (uint8_t*) memory_buffer; - config.output.u.RGBA.stride = scanline_stride; - config.output.u.RGBA.size = total_size_of_the_memory_buffer; - config.output.is_external_memory = 1; - - // E) Decode the WebP image. There are two variants w.r.t decoding image. - // The first one (E.1) decodes the full image and the second one (E.2) is - // used to incrementally decode the image using small input buffers. - // Any one of these steps can be used to decode the WebP image. - - // E.1) Decode full image. - CHECK(WebPDecode(data, data_size, &config) == VP8_STATUS_OK); - - // E.2) Decode image incrementally. - WebPIDecoder* const idec = WebPIDecode(NULL, NULL, &config); - CHECK(idec != NULL); - while (bytes_remaining > 0) { - VP8StatusCode status = WebPIAppend(idec, input, bytes_read); - if (status == VP8_STATUS_OK || status == VP8_STATUS_SUSPENDED) { - bytes_remaining -= bytes_read; - } else { - break; - } - } - WebPIDelete(idec); - - // F) Decoded image is now in config.output (and config.output.u.RGBA). - // It can be saved, displayed or otherwise processed. - - // G) Reclaim memory allocated in config's object. It's safe to call - // this function even if the memory is external and wasn't allocated - // by WebPDecode(). - WebPFreeDecBuffer(&config.output); - --------------------------------------- END PSEUDO EXAMPLE - -Bugs: -===== - -Please report all bugs to the issue tracker: - https://bugs.chromium.org/p/webp -Patches welcome! See this page to get started: - http://www.webmproject.org/code/contribute/submitting-patches/ - -Discuss: -======== - -Email: webp-discuss@webmproject.org -Web: http://groups.google.com/a/webmproject.org/group/webp-discuss diff --git a/Extended/libwebp/README.mux b/Extended/libwebp/README.mux deleted file mode 100644 index 22560fe..0000000 --- a/Extended/libwebp/README.mux +++ /dev/null @@ -1,256 +0,0 @@ - __ __ ____ ____ ____ __ __ _ __ __ - / \\/ \/ _ \/ _ \/ _ \/ \ \/ \___/_ / _\ - \ / __/ _ \ __/ / / (_/ /__ - \__\__/\_____/_____/__/ \__//_/\_____/__/___/v1.1.0 - - -Description: -============ - -WebPMux: set of two libraries 'Mux' and 'Demux' for creation, extraction and -manipulation of an extended format WebP file, which can have features like -color profile, metadata and animation. Reference command-line tools 'webpmux' -and 'vwebp' as well as the WebP container specification -'doc/webp-container-spec.txt' are also provided in this package. - -WebP Mux tool: -============== - -The examples/ directory contains a tool (webpmux) for manipulating WebP -files. The webpmux tool can be used to create an extended format WebP file and -also to extract or strip relevant data from such a file. - -A list of options is available using the -help command line flag: - -> webpmux -help -Usage: webpmux -get GET_OPTIONS INPUT -o OUTPUT - webpmux -set SET_OPTIONS INPUT -o OUTPUT - webpmux -duration DURATION_OPTIONS [-duration ...] - INPUT -o OUTPUT - webpmux -strip STRIP_OPTIONS INPUT -o OUTPUT - webpmux -frame FRAME_OPTIONS [-frame...] [-loop LOOP_COUNT] - [-bgcolor BACKGROUND_COLOR] -o OUTPUT - webpmux -info INPUT - webpmux [-h|-help] - webpmux -version - webpmux argument_file_name - -GET_OPTIONS: - Extract relevant data: - icc get ICC profile - exif get EXIF metadata - xmp get XMP metadata - frame n get nth frame - -SET_OPTIONS: - Set color profile/metadata: - icc file.icc set ICC profile - exif file.exif set EXIF metadata - xmp file.xmp set XMP metadata - where: 'file.icc' contains the ICC profile to be set, - 'file.exif' contains the EXIF metadata to be set - 'file.xmp' contains the XMP metadata to be set - -DURATION_OPTIONS: - Set duration of selected frames: - duration set duration for each frames - duration,frame set duration of a particular frame - duration,start,end set duration of frames in the - interval [start,end]) - where: 'duration' is the duration in milliseconds - 'start' is the start frame index - 'end' is the inclusive end frame index - The special 'end' value '0' means: last frame. - -STRIP_OPTIONS: - Strip color profile/metadata: - icc strip ICC profile - exif strip EXIF metadata - xmp strip XMP metadata - -FRAME_OPTIONS(i): - Create animation: - file_i +di+[xi+yi[+mi[bi]]] - where: 'file_i' is the i'th animation frame (WebP format), - 'di' is the pause duration before next frame, - 'xi','yi' specify the image offset for this frame, - 'mi' is the dispose method for this frame (0 or 1), - 'bi' is the blending method for this frame (+b or -b) - -LOOP_COUNT: - Number of times to repeat the animation. - Valid range is 0 to 65535 [Default: 0 (infinite)]. - -BACKGROUND_COLOR: - Background color of the canvas. - A,R,G,B - where: 'A', 'R', 'G' and 'B' are integers in the range 0 to 255 specifying - the Alpha, Red, Green and Blue component values respectively - [Default: 255,255,255,255] - -INPUT & OUTPUT are in WebP format. - -Note: The nature of EXIF, XMP and ICC data is not checked and is assumed to be -valid. - -Note: if a single file name is passed as the argument, the arguments will be -tokenized from this file. The file name must not start with the character '-'. - -Visualization tool: -=================== - -The examples/ directory also contains a tool (vwebp) for viewing WebP files. -It decodes the image and visualizes it using OpenGL. See the libwebp README -for details on building and running this program. - -Mux API: -======== -The Mux API contains methods for adding data to and reading data from WebP -files. This API currently supports XMP/EXIF metadata, ICC profile and animation. -Other features may be added in subsequent releases. - -Example#1 (pseudo code): Creating a WebPMux object with image data, color -profile and XMP metadata. - - int copy_data = 0; - WebPMux* mux = WebPMuxNew(); - // ... (Prepare image data). - WebPMuxSetImage(mux, &image, copy_data); - // ... (Prepare ICC profile data). - WebPMuxSetChunk(mux, "ICCP", &icc_profile, copy_data); - // ... (Prepare XMP metadata). - WebPMuxSetChunk(mux, "XMP ", &xmp, copy_data); - // Get data from mux in WebP RIFF format. - WebPMuxAssemble(mux, &output_data); - WebPMuxDelete(mux); - // ... (Consume output_data; e.g. write output_data.bytes to file). - WebPDataClear(&output_data); - - -Example#2 (pseudo code): Get image and color profile data from a WebP file. - - int copy_data = 0; - // ... (Read data from file). - WebPMux* mux = WebPMuxCreate(&data, copy_data); - WebPMuxGetFrame(mux, 1, &image); - // ... (Consume image; e.g. call WebPDecode() to decode the data). - WebPMuxGetChunk(mux, "ICCP", &icc_profile); - // ... (Consume icc_profile). - WebPMuxDelete(mux); - free(data); - - -For a detailed Mux API reference, please refer to the header file -(src/webp/mux.h). - -Demux API: -========== -The Demux API enables extraction of images and extended format data from -WebP files. This API currently supports reading of XMP/EXIF metadata, ICC -profile and animated images. Other features may be added in subsequent -releases. - -Code example: Demuxing WebP data to extract all the frames, ICC profile -and EXIF/XMP metadata. - - WebPDemuxer* demux = WebPDemux(&webp_data); - uint32_t width = WebPDemuxGetI(demux, WEBP_FF_CANVAS_WIDTH); - uint32_t height = WebPDemuxGetI(demux, WEBP_FF_CANVAS_HEIGHT); - // ... (Get information about the features present in the WebP file). - uint32_t flags = WebPDemuxGetI(demux, WEBP_FF_FORMAT_FLAGS); - - // ... (Iterate over all frames). - WebPIterator iter; - if (WebPDemuxGetFrame(demux, 1, &iter)) { - do { - // ... (Consume 'iter'; e.g. Decode 'iter.fragment' with WebPDecode(), - // ... and get other frame properties like width, height, offsets etc. - // ... see 'struct WebPIterator' below for more info). - } while (WebPDemuxNextFrame(&iter)); - WebPDemuxReleaseIterator(&iter); - } - - // ... (Extract metadata). - WebPChunkIterator chunk_iter; - if (flags & ICCP_FLAG) WebPDemuxGetChunk(demux, "ICCP", 1, &chunk_iter); - // ... (Consume the ICC profile in 'chunk_iter.chunk'). - WebPDemuxReleaseChunkIterator(&chunk_iter); - if (flags & EXIF_FLAG) WebPDemuxGetChunk(demux, "EXIF", 1, &chunk_iter); - // ... (Consume the EXIF metadata in 'chunk_iter.chunk'). - WebPDemuxReleaseChunkIterator(&chunk_iter); - if (flags & XMP_FLAG) WebPDemuxGetChunk(demux, "XMP ", 1, &chunk_iter); - // ... (Consume the XMP metadata in 'chunk_iter.chunk'). - WebPDemuxReleaseChunkIterator(&chunk_iter); - WebPDemuxDelete(demux); - - -For a detailed Demux API reference, please refer to the header file -(src/webp/demux.h). - -AnimEncoder API: -================ -The AnimEncoder API can be used to create animated WebP images. - -Code example: - - WebPAnimEncoderOptions enc_options; - WebPAnimEncoderOptionsInit(&enc_options); - // ... (Tune 'enc_options' as needed). - WebPAnimEncoder* enc = WebPAnimEncoderNew(width, height, &enc_options); - while() { - WebPConfig config; - WebPConfigInit(&config); - // ... (Tune 'config' as needed). - WebPAnimEncoderAdd(enc, frame, duration, &config); - } - WebPAnimEncoderAssemble(enc, webp_data); - WebPAnimEncoderDelete(enc); - // ... (Write the 'webp_data' to a file, or re-mux it further). - - -For a detailed AnimEncoder API reference, please refer to the header file -(src/webp/mux.h). - -AnimDecoder API: -================ -This AnimDecoder API allows decoding (possibly) animated WebP images. - -Code Example: - - WebPAnimDecoderOptions dec_options; - WebPAnimDecoderOptionsInit(&dec_options); - // Tune 'dec_options' as needed. - WebPAnimDecoder* dec = WebPAnimDecoderNew(webp_data, &dec_options); - WebPAnimInfo anim_info; - WebPAnimDecoderGetInfo(dec, &anim_info); - for (uint32_t i = 0; i < anim_info.loop_count; ++i) { - while (WebPAnimDecoderHasMoreFrames(dec)) { - uint8_t* buf; - int timestamp; - WebPAnimDecoderGetNext(dec, &buf, ×tamp); - // ... (Render 'buf' based on 'timestamp'). - // ... (Do NOT free 'buf', as it is owned by 'dec'). - } - WebPAnimDecoderReset(dec); - } - const WebPDemuxer* demuxer = WebPAnimDecoderGetDemuxer(dec); - // ... (Do something using 'demuxer'; e.g. get EXIF/XMP/ICC data). - WebPAnimDecoderDelete(dec); - -For a detailed AnimDecoder API reference, please refer to the header file -(src/webp/demux.h). - - -Bugs: -===== - -Please report all bugs to the issue tracker: - https://bugs.chromium.org/p/webp -Patches welcome! See this page to get started: - http://www.webmproject.org/code/contribute/submitting-patches/ - -Discuss: -======== - -Email: webp-discuss@webmproject.org -Web: http://groups.google.com/a/webmproject.org/group/webp-discuss diff --git a/Extended/libwebp/README.webp_js b/Extended/libwebp/README.webp_js deleted file mode 100644 index e78360c..0000000 --- a/Extended/libwebp/README.webp_js +++ /dev/null @@ -1,80 +0,0 @@ - __ __ ____ ____ ____ __ ____ - / \\/ \ _ \ _ \ _ \ (__)/ __\ - \ / __/ _ \ __/ _) \_ \ - \__\__/_____/____/_/ /____/____/ - -Description: -============ - -This file describes the compilation of libwebp into a JavaScript decoder -using Emscripten and CMake. - - - install the Emscripten SDK following the procedure described at: - https://kripken.github.io/emscripten-site/docs/getting_started/downloads.html - After installation, you should have some global variable positioned to the - location of the SDK. In particular, $EMSCRIPTEN should point to the - top-level directory containing Emscripten tools. - - - make sure the file $EMSCRIPTEN/cmake/Modules/Platform/Emscripten.cmake is - accessible. This is the toolchain file used by CMake to invoke Emscripten. - If $EMSCRIPTEN is unset search for Emscripten.cmake under $EMSDK and set - $EMSCRIPTEN accordingly, for example: - unix-like environments: export EMSCRIPTEN=$EMSDK/fastcomp/emscripten - windows: set EMSCRIPTEN=%EMSDK%\fastcomp\emscripten - - - configure the project 'WEBP_JS' with CMake using: - - cd webp_js && \ - cmake -DWEBP_BUILD_WEBP_JS=ON \ - -DEMSCRIPTEN_GENERATE_BITCODE_STATIC_LIBRARIES=1 \ - -DCMAKE_TOOLCHAIN_FILE=$EMSCRIPTEN/cmake/Modules/Platform/Emscripten.cmake \ - ../ - - - compile webp.js using 'make'. - - - that's it! Upon completion, you should have the webp.js and - webp.js.mem files generated. - -The callable JavaScript function is WebPToSDL(), which decodes a raw WebP -bitstream into a canvas. See webp_js/index.html for a simple usage sample -(see below for instructions). - -Demo HTML page: -=============== - - The HTML page webp_js/index.html requires an HTTP server to serve the WebP - image example. It's easy to just use Python for that. - -cd webp_js && python -m SimpleHTTPServer 8080 - -and then navigate to http://localhost:8080 in your favorite browser. - - -Web-Assembly (WASM) version: -============================ - - CMakeLists.txt is configured to build the WASM version when using - the option WEBP_BUILD_WEBP_JS=ON. The compilation step will assemble - the files 'webp_wasm.js', 'webp_wasm.wasm' in the webp_js/ directory. - See webp_js/index_wasm.html for a simple demo page using the WASM version - of the library. - - You will need a fairly recent version of Emscripten (at least 1.37.8) and of - your WASM-enabled browser to run this version. Consider it very experimental! - -Caveat: -======= - - - First decoding using the library is usually slower, due to just-in-time - compilation. - - - Some versions of llvm produce the following compile error when SSE2 is - enabled. - -"Unsupported: %516 = bitcast <8 x i16> %481 to i128 - LLVM ERROR: BitCast Instruction not yet supported for integer types larger than 64 bits" - - The corresponding Emscripten bug is at: - https://github.com/kripken/emscripten/issues/3788 - - Therefore, SSE2 optimization is currently disabled in CMakeLists.txt. diff --git a/Extended/libwebp/aclocal.m4 b/Extended/libwebp/aclocal.m4 deleted file mode 100644 index 779b84a..0000000 --- a/Extended/libwebp/aclocal.m4 +++ /dev/null @@ -1,1201 +0,0 @@ -# generated automatically by aclocal 1.16.1 -*- Autoconf -*- - -# Copyright (C) 1996-2018 Free Software Foundation, Inc. - -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) -m4_ifndef([AC_AUTOCONF_VERSION], - [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl -m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],, -[m4_warning([this file was generated for autoconf 2.69. -You have another version of autoconf. It may work, but is not guaranteed to. -If you have problems, you may need to regenerate the build system entirely. -To do so, use the procedure documented by the package, typically 'autoreconf'.])]) - -# Copyright (C) 2002-2018 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# AM_AUTOMAKE_VERSION(VERSION) -# ---------------------------- -# Automake X.Y traces this macro to ensure aclocal.m4 has been -# generated from the m4 files accompanying Automake X.Y. -# (This private macro should not be called outside this file.) -AC_DEFUN([AM_AUTOMAKE_VERSION], -[am__api_version='1.16' -dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to -dnl require some minimum version. Point them to the right macro. -m4_if([$1], [1.16.1], [], - [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl -]) - -# _AM_AUTOCONF_VERSION(VERSION) -# ----------------------------- -# aclocal traces this macro to find the Autoconf version. -# This is a private macro too. Using m4_define simplifies -# the logic in aclocal, which can simply ignore this definition. -m4_define([_AM_AUTOCONF_VERSION], []) - -# AM_SET_CURRENT_AUTOMAKE_VERSION -# ------------------------------- -# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. -# This function is AC_REQUIREd by AM_INIT_AUTOMAKE. -AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], -[AM_AUTOMAKE_VERSION([1.16.1])dnl -m4_ifndef([AC_AUTOCONF_VERSION], - [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl -_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) - -# Copyright (C) 2011-2018 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# AM_PROG_AR([ACT-IF-FAIL]) -# ------------------------- -# Try to determine the archiver interface, and trigger the ar-lib wrapper -# if it is needed. If the detection of archiver interface fails, run -# ACT-IF-FAIL (default is to abort configure with a proper error message). -AC_DEFUN([AM_PROG_AR], -[AC_BEFORE([$0], [LT_INIT])dnl -AC_BEFORE([$0], [AC_PROG_LIBTOOL])dnl -AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl -AC_REQUIRE_AUX_FILE([ar-lib])dnl -AC_CHECK_TOOLS([AR], [ar lib "link -lib"], [false]) -: ${AR=ar} - -AC_CACHE_CHECK([the archiver ($AR) interface], [am_cv_ar_interface], - [AC_LANG_PUSH([C]) - am_cv_ar_interface=ar - AC_COMPILE_IFELSE([AC_LANG_SOURCE([[int some_variable = 0;]])], - [am_ar_try='$AR cru libconftest.a conftest.$ac_objext >&AS_MESSAGE_LOG_FD' - AC_TRY_EVAL([am_ar_try]) - if test "$ac_status" -eq 0; then - am_cv_ar_interface=ar - else - am_ar_try='$AR -NOLOGO -OUT:conftest.lib conftest.$ac_objext >&AS_MESSAGE_LOG_FD' - AC_TRY_EVAL([am_ar_try]) - if test "$ac_status" -eq 0; then - am_cv_ar_interface=lib - else - am_cv_ar_interface=unknown - fi - fi - rm -f conftest.lib libconftest.a - ]) - AC_LANG_POP([C])]) - -case $am_cv_ar_interface in -ar) - ;; -lib) - # Microsoft lib, so override with the ar-lib wrapper script. - # FIXME: It is wrong to rewrite AR. - # But if we don't then we get into trouble of one sort or another. - # A longer-term fix would be to have automake use am__AR in this case, - # and then we could set am__AR="$am_aux_dir/ar-lib \$(AR)" or something - # similar. - AR="$am_aux_dir/ar-lib $AR" - ;; -unknown) - m4_default([$1], - [AC_MSG_ERROR([could not determine $AR interface])]) - ;; -esac -AC_SUBST([AR])dnl -]) - -# AM_AUX_DIR_EXPAND -*- Autoconf -*- - -# Copyright (C) 2001-2018 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets -# $ac_aux_dir to '$srcdir/foo'. In other projects, it is set to -# '$srcdir', '$srcdir/..', or '$srcdir/../..'. -# -# Of course, Automake must honor this variable whenever it calls a -# tool from the auxiliary directory. The problem is that $srcdir (and -# therefore $ac_aux_dir as well) can be either absolute or relative, -# depending on how configure is run. This is pretty annoying, since -# it makes $ac_aux_dir quite unusable in subdirectories: in the top -# source directory, any form will work fine, but in subdirectories a -# relative path needs to be adjusted first. -# -# $ac_aux_dir/missing -# fails when called from a subdirectory if $ac_aux_dir is relative -# $top_srcdir/$ac_aux_dir/missing -# fails if $ac_aux_dir is absolute, -# fails when called from a subdirectory in a VPATH build with -# a relative $ac_aux_dir -# -# The reason of the latter failure is that $top_srcdir and $ac_aux_dir -# are both prefixed by $srcdir. In an in-source build this is usually -# harmless because $srcdir is '.', but things will broke when you -# start a VPATH build or use an absolute $srcdir. -# -# So we could use something similar to $top_srcdir/$ac_aux_dir/missing, -# iff we strip the leading $srcdir from $ac_aux_dir. That would be: -# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` -# and then we would define $MISSING as -# MISSING="\${SHELL} $am_aux_dir/missing" -# This will work as long as MISSING is not called from configure, because -# unfortunately $(top_srcdir) has no meaning in configure. -# However there are other variables, like CC, which are often used in -# configure, and could therefore not use this "fixed" $ac_aux_dir. -# -# Another solution, used here, is to always expand $ac_aux_dir to an -# absolute PATH. The drawback is that using absolute paths prevent a -# configured tree to be moved without reconfiguration. - -AC_DEFUN([AM_AUX_DIR_EXPAND], -[AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl -# Expand $ac_aux_dir to an absolute path. -am_aux_dir=`cd "$ac_aux_dir" && pwd` -]) - -# AM_CONDITIONAL -*- Autoconf -*- - -# Copyright (C) 1997-2018 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# AM_CONDITIONAL(NAME, SHELL-CONDITION) -# ------------------------------------- -# Define a conditional. -AC_DEFUN([AM_CONDITIONAL], -[AC_PREREQ([2.52])dnl - m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], - [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl -AC_SUBST([$1_TRUE])dnl -AC_SUBST([$1_FALSE])dnl -_AM_SUBST_NOTMAKE([$1_TRUE])dnl -_AM_SUBST_NOTMAKE([$1_FALSE])dnl -m4_define([_AM_COND_VALUE_$1], [$2])dnl -if $2; then - $1_TRUE= - $1_FALSE='#' -else - $1_TRUE='#' - $1_FALSE= -fi -AC_CONFIG_COMMANDS_PRE( -[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then - AC_MSG_ERROR([[conditional "$1" was never defined. -Usually this means the macro was only invoked conditionally.]]) -fi])]) - -# Copyright (C) 1999-2018 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - - -# There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be -# written in clear, in which case automake, when reading aclocal.m4, -# will think it sees a *use*, and therefore will trigger all it's -# C support machinery. Also note that it means that autoscan, seeing -# CC etc. in the Makefile, will ask for an AC_PROG_CC use... - - -# _AM_DEPENDENCIES(NAME) -# ---------------------- -# See how the compiler implements dependency checking. -# NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC". -# We try a few techniques and use that to set a single cache variable. -# -# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was -# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular -# dependency, and given that the user is not expected to run this macro, -# just rely on AC_PROG_CC. -AC_DEFUN([_AM_DEPENDENCIES], -[AC_REQUIRE([AM_SET_DEPDIR])dnl -AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl -AC_REQUIRE([AM_MAKE_INCLUDE])dnl -AC_REQUIRE([AM_DEP_TRACK])dnl - -m4_if([$1], [CC], [depcc="$CC" am_compiler_list=], - [$1], [CXX], [depcc="$CXX" am_compiler_list=], - [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'], - [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'], - [$1], [UPC], [depcc="$UPC" am_compiler_list=], - [$1], [GCJ], [depcc="$GCJ" am_compiler_list='gcc3 gcc'], - [depcc="$$1" am_compiler_list=]) - -AC_CACHE_CHECK([dependency style of $depcc], - [am_cv_$1_dependencies_compiler_type], -[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then - # We make a subdir and do the tests there. Otherwise we can end up - # making bogus files that we don't know about and never remove. For - # instance it was reported that on HP-UX the gcc test will end up - # making a dummy file named 'D' -- because '-MD' means "put the output - # in D". - rm -rf conftest.dir - mkdir conftest.dir - # Copy depcomp to subdir because otherwise we won't find it if we're - # using a relative directory. - cp "$am_depcomp" conftest.dir - cd conftest.dir - # We will build objects and dependencies in a subdirectory because - # it helps to detect inapplicable dependency modes. For instance - # both Tru64's cc and ICC support -MD to output dependencies as a - # side effect of compilation, but ICC will put the dependencies in - # the current directory while Tru64 will put them in the object - # directory. - mkdir sub - - am_cv_$1_dependencies_compiler_type=none - if test "$am_compiler_list" = ""; then - am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` - fi - am__universal=false - m4_case([$1], [CC], - [case " $depcc " in #( - *\ -arch\ *\ -arch\ *) am__universal=true ;; - esac], - [CXX], - [case " $depcc " in #( - *\ -arch\ *\ -arch\ *) am__universal=true ;; - esac]) - - for depmode in $am_compiler_list; do - # Setup a source with many dependencies, because some compilers - # like to wrap large dependency lists on column 80 (with \), and - # we should not choose a depcomp mode which is confused by this. - # - # We need to recreate these files for each test, as the compiler may - # overwrite some of them when testing with obscure command lines. - # This happens at least with the AIX C compiler. - : > sub/conftest.c - for i in 1 2 3 4 5 6; do - echo '#include "conftst'$i'.h"' >> sub/conftest.c - # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with - # Solaris 10 /bin/sh. - echo '/* dummy */' > sub/conftst$i.h - done - echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf - - # We check with '-c' and '-o' for the sake of the "dashmstdout" - # mode. It turns out that the SunPro C++ compiler does not properly - # handle '-M -o', and we need to detect this. Also, some Intel - # versions had trouble with output in subdirs. - am__obj=sub/conftest.${OBJEXT-o} - am__minus_obj="-o $am__obj" - case $depmode in - gcc) - # This depmode causes a compiler race in universal mode. - test "$am__universal" = false || continue - ;; - nosideeffect) - # After this tag, mechanisms are not by side-effect, so they'll - # only be used when explicitly requested. - if test "x$enable_dependency_tracking" = xyes; then - continue - else - break - fi - ;; - msvc7 | msvc7msys | msvisualcpp | msvcmsys) - # This compiler won't grok '-c -o', but also, the minuso test has - # not run yet. These depmodes are late enough in the game, and - # so weak that their functioning should not be impacted. - am__obj=conftest.${OBJEXT-o} - am__minus_obj= - ;; - none) break ;; - esac - if depmode=$depmode \ - source=sub/conftest.c object=$am__obj \ - depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ - $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ - >/dev/null 2>conftest.err && - grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && - grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && - grep $am__obj sub/conftest.Po > /dev/null 2>&1 && - ${MAKE-make} -s -f confmf > /dev/null 2>&1; then - # icc doesn't choke on unknown options, it will just issue warnings - # or remarks (even with -Werror). So we grep stderr for any message - # that says an option was ignored or not supported. - # When given -MP, icc 7.0 and 7.1 complain thusly: - # icc: Command line warning: ignoring option '-M'; no argument required - # The diagnosis changed in icc 8.0: - # icc: Command line remark: option '-MP' not supported - if (grep 'ignoring option' conftest.err || - grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else - am_cv_$1_dependencies_compiler_type=$depmode - break - fi - fi - done - - cd .. - rm -rf conftest.dir -else - am_cv_$1_dependencies_compiler_type=none -fi -]) -AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) -AM_CONDITIONAL([am__fastdep$1], [ - test "x$enable_dependency_tracking" != xno \ - && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) -]) - - -# AM_SET_DEPDIR -# ------------- -# Choose a directory name for dependency files. -# This macro is AC_REQUIREd in _AM_DEPENDENCIES. -AC_DEFUN([AM_SET_DEPDIR], -[AC_REQUIRE([AM_SET_LEADING_DOT])dnl -AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl -]) - - -# AM_DEP_TRACK -# ------------ -AC_DEFUN([AM_DEP_TRACK], -[AC_ARG_ENABLE([dependency-tracking], [dnl -AS_HELP_STRING( - [--enable-dependency-tracking], - [do not reject slow dependency extractors]) -AS_HELP_STRING( - [--disable-dependency-tracking], - [speeds up one-time build])]) -if test "x$enable_dependency_tracking" != xno; then - am_depcomp="$ac_aux_dir/depcomp" - AMDEPBACKSLASH='\' - am__nodep='_no' -fi -AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) -AC_SUBST([AMDEPBACKSLASH])dnl -_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl -AC_SUBST([am__nodep])dnl -_AM_SUBST_NOTMAKE([am__nodep])dnl -]) - -# Generate code to set up dependency tracking. -*- Autoconf -*- - -# Copyright (C) 1999-2018 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# _AM_OUTPUT_DEPENDENCY_COMMANDS -# ------------------------------ -AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], -[{ - # Older Autoconf quotes --file arguments for eval, but not when files - # are listed without --file. Let's play safe and only enable the eval - # if we detect the quoting. - # TODO: see whether this extra hack can be removed once we start - # requiring Autoconf 2.70 or later. - AS_CASE([$CONFIG_FILES], - [*\'*], [eval set x "$CONFIG_FILES"], - [*], [set x $CONFIG_FILES]) - shift - # Used to flag and report bootstrapping failures. - am_rc=0 - for am_mf - do - # Strip MF so we end up with the name of the file. - am_mf=`AS_ECHO(["$am_mf"]) | sed -e 's/:.*$//'` - # Check whether this is an Automake generated Makefile which includes - # dependency-tracking related rules and includes. - # Grep'ing the whole file directly is not great: AIX grep has a line - # limit of 2048, but all sed's we know have understand at least 4000. - sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \ - || continue - am_dirpart=`AS_DIRNAME(["$am_mf"])` - am_filepart=`AS_BASENAME(["$am_mf"])` - AM_RUN_LOG([cd "$am_dirpart" \ - && sed -e '/# am--include-marker/d' "$am_filepart" \ - | $MAKE -f - am--depfiles]) || am_rc=$? - done - if test $am_rc -ne 0; then - AC_MSG_FAILURE([Something went wrong bootstrapping makefile fragments - for automatic dependency tracking. Try re-running configure with the - '--disable-dependency-tracking' option to at least be able to build - the package (albeit without support for automatic dependency tracking).]) - fi - AS_UNSET([am_dirpart]) - AS_UNSET([am_filepart]) - AS_UNSET([am_mf]) - AS_UNSET([am_rc]) - rm -f conftest-deps.mk -} -])# _AM_OUTPUT_DEPENDENCY_COMMANDS - - -# AM_OUTPUT_DEPENDENCY_COMMANDS -# ----------------------------- -# This macro should only be invoked once -- use via AC_REQUIRE. -# -# This code is only required when automatic dependency tracking is enabled. -# This creates each '.Po' and '.Plo' makefile fragment that we'll need in -# order to bootstrap the dependency handling code. -AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], -[AC_CONFIG_COMMANDS([depfiles], - [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], - [AMDEP_TRUE="$AMDEP_TRUE" MAKE="${MAKE-make}"])]) - -# Do all the work for Automake. -*- Autoconf -*- - -# Copyright (C) 1996-2018 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This macro actually does too much. Some checks are only needed if -# your package does certain things. But this isn't really a big deal. - -dnl Redefine AC_PROG_CC to automatically invoke _AM_PROG_CC_C_O. -m4_define([AC_PROG_CC], -m4_defn([AC_PROG_CC]) -[_AM_PROG_CC_C_O -]) - -# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) -# AM_INIT_AUTOMAKE([OPTIONS]) -# ----------------------------------------------- -# The call with PACKAGE and VERSION arguments is the old style -# call (pre autoconf-2.50), which is being phased out. PACKAGE -# and VERSION should now be passed to AC_INIT and removed from -# the call to AM_INIT_AUTOMAKE. -# We support both call styles for the transition. After -# the next Automake release, Autoconf can make the AC_INIT -# arguments mandatory, and then we can depend on a new Autoconf -# release and drop the old call support. -AC_DEFUN([AM_INIT_AUTOMAKE], -[AC_PREREQ([2.65])dnl -dnl Autoconf wants to disallow AM_ names. We explicitly allow -dnl the ones we care about. -m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl -AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl -AC_REQUIRE([AC_PROG_INSTALL])dnl -if test "`cd $srcdir && pwd`" != "`pwd`"; then - # Use -I$(srcdir) only when $(srcdir) != ., so that make's output - # is not polluted with repeated "-I." - AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl - # test to see if srcdir already configured - if test -f $srcdir/config.status; then - AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) - fi -fi - -# test whether we have cygpath -if test -z "$CYGPATH_W"; then - if (cygpath --version) >/dev/null 2>/dev/null; then - CYGPATH_W='cygpath -w' - else - CYGPATH_W=echo - fi -fi -AC_SUBST([CYGPATH_W]) - -# Define the identity of the package. -dnl Distinguish between old-style and new-style calls. -m4_ifval([$2], -[AC_DIAGNOSE([obsolete], - [$0: two- and three-arguments forms are deprecated.]) -m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl - AC_SUBST([PACKAGE], [$1])dnl - AC_SUBST([VERSION], [$2])], -[_AM_SET_OPTIONS([$1])dnl -dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. -m4_if( - m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]), - [ok:ok],, - [m4_fatal([AC_INIT should be called with package and version arguments])])dnl - AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl - AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl - -_AM_IF_OPTION([no-define],, -[AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package]) - AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl - -# Some tools Automake needs. -AC_REQUIRE([AM_SANITY_CHECK])dnl -AC_REQUIRE([AC_ARG_PROGRAM])dnl -AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}]) -AM_MISSING_PROG([AUTOCONF], [autoconf]) -AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}]) -AM_MISSING_PROG([AUTOHEADER], [autoheader]) -AM_MISSING_PROG([MAKEINFO], [makeinfo]) -AC_REQUIRE([AM_PROG_INSTALL_SH])dnl -AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl -AC_REQUIRE([AC_PROG_MKDIR_P])dnl -# For better backward compatibility. To be removed once Automake 1.9.x -# dies out for good. For more background, see: -# -# -AC_SUBST([mkdir_p], ['$(MKDIR_P)']) -# We need awk for the "check" target (and possibly the TAP driver). The -# system "awk" is bad on some platforms. -AC_REQUIRE([AC_PROG_AWK])dnl -AC_REQUIRE([AC_PROG_MAKE_SET])dnl -AC_REQUIRE([AM_SET_LEADING_DOT])dnl -_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], - [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], - [_AM_PROG_TAR([v7])])]) -_AM_IF_OPTION([no-dependencies],, -[AC_PROVIDE_IFELSE([AC_PROG_CC], - [_AM_DEPENDENCIES([CC])], - [m4_define([AC_PROG_CC], - m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl -AC_PROVIDE_IFELSE([AC_PROG_CXX], - [_AM_DEPENDENCIES([CXX])], - [m4_define([AC_PROG_CXX], - m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl -AC_PROVIDE_IFELSE([AC_PROG_OBJC], - [_AM_DEPENDENCIES([OBJC])], - [m4_define([AC_PROG_OBJC], - m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl -AC_PROVIDE_IFELSE([AC_PROG_OBJCXX], - [_AM_DEPENDENCIES([OBJCXX])], - [m4_define([AC_PROG_OBJCXX], - m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl -]) -AC_REQUIRE([AM_SILENT_RULES])dnl -dnl The testsuite driver may need to know about EXEEXT, so add the -dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This -dnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below. -AC_CONFIG_COMMANDS_PRE(dnl -[m4_provide_if([_AM_COMPILER_EXEEXT], - [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl - -# POSIX will say in a future version that running "rm -f" with no argument -# is OK; and we want to be able to make that assumption in our Makefile -# recipes. So use an aggressive probe to check that the usage we want is -# actually supported "in the wild" to an acceptable degree. -# See automake bug#10828. -# To make any issue more visible, cause the running configure to be aborted -# by default if the 'rm' program in use doesn't match our expectations; the -# user can still override this though. -if rm -f && rm -fr && rm -rf; then : OK; else - cat >&2 <<'END' -Oops! - -Your 'rm' program seems unable to run without file operands specified -on the command line, even when the '-f' option is present. This is contrary -to the behaviour of most rm programs out there, and not conforming with -the upcoming POSIX standard: - -Please tell bug-automake@gnu.org about your system, including the value -of your $PATH and any error possibly output before this message. This -can help us improve future automake versions. - -END - if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then - echo 'Configuration will proceed anyway, since you have set the' >&2 - echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 - echo >&2 - else - cat >&2 <<'END' -Aborting the configuration process, to ensure you take notice of the issue. - -You can download and install GNU coreutils to get an 'rm' implementation -that behaves properly: . - -If you want to complete the configuration process using your problematic -'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM -to "yes", and re-run configure. - -END - AC_MSG_ERROR([Your 'rm' program is bad, sorry.]) - fi -fi -dnl The trailing newline in this macro's definition is deliberate, for -dnl backward compatibility and to allow trailing 'dnl'-style comments -dnl after the AM_INIT_AUTOMAKE invocation. See automake bug#16841. -]) - -dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not -dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further -dnl mangled by Autoconf and run in a shell conditional statement. -m4_define([_AC_COMPILER_EXEEXT], -m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) - -# When config.status generates a header, we must update the stamp-h file. -# This file resides in the same directory as the config header -# that is generated. The stamp files are numbered to have different names. - -# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the -# loop where config.status creates the headers, so we can generate -# our stamp files there. -AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], -[# Compute $1's index in $config_headers. -_am_arg=$1 -_am_stamp_count=1 -for _am_header in $config_headers :; do - case $_am_header in - $_am_arg | $_am_arg:* ) - break ;; - * ) - _am_stamp_count=`expr $_am_stamp_count + 1` ;; - esac -done -echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) - -# Copyright (C) 2001-2018 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# AM_PROG_INSTALL_SH -# ------------------ -# Define $install_sh. -AC_DEFUN([AM_PROG_INSTALL_SH], -[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl -if test x"${install_sh+set}" != xset; then - case $am_aux_dir in - *\ * | *\ *) - install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; - *) - install_sh="\${SHELL} $am_aux_dir/install-sh" - esac -fi -AC_SUBST([install_sh])]) - -# Copyright (C) 2003-2018 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# Check whether the underlying file-system supports filenames -# with a leading dot. For instance MS-DOS doesn't. -AC_DEFUN([AM_SET_LEADING_DOT], -[rm -rf .tst 2>/dev/null -mkdir .tst 2>/dev/null -if test -d .tst; then - am__leading_dot=. -else - am__leading_dot=_ -fi -rmdir .tst 2>/dev/null -AC_SUBST([am__leading_dot])]) - -# Check to see how 'make' treats includes. -*- Autoconf -*- - -# Copyright (C) 2001-2018 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# AM_MAKE_INCLUDE() -# ----------------- -# Check whether make has an 'include' directive that can support all -# the idioms we need for our automatic dependency tracking code. -AC_DEFUN([AM_MAKE_INCLUDE], -[AC_MSG_CHECKING([whether ${MAKE-make} supports the include directive]) -cat > confinc.mk << 'END' -am__doit: - @echo this is the am__doit target >confinc.out -.PHONY: am__doit -END -am__include="#" -am__quote= -# BSD make does it like this. -echo '.include "confinc.mk" # ignored' > confmf.BSD -# Other make implementations (GNU, Solaris 10, AIX) do it like this. -echo 'include confinc.mk # ignored' > confmf.GNU -_am_result=no -for s in GNU BSD; do - AM_RUN_LOG([${MAKE-make} -f confmf.$s && cat confinc.out]) - AS_CASE([$?:`cat confinc.out 2>/dev/null`], - ['0:this is the am__doit target'], - [AS_CASE([$s], - [BSD], [am__include='.include' am__quote='"'], - [am__include='include' am__quote=''])]) - if test "$am__include" != "#"; then - _am_result="yes ($s style)" - break - fi -done -rm -f confinc.* confmf.* -AC_MSG_RESULT([${_am_result}]) -AC_SUBST([am__include])]) -AC_SUBST([am__quote])]) - -# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- - -# Copyright (C) 1997-2018 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# AM_MISSING_PROG(NAME, PROGRAM) -# ------------------------------ -AC_DEFUN([AM_MISSING_PROG], -[AC_REQUIRE([AM_MISSING_HAS_RUN]) -$1=${$1-"${am_missing_run}$2"} -AC_SUBST($1)]) - -# AM_MISSING_HAS_RUN -# ------------------ -# Define MISSING if not defined so far and test if it is modern enough. -# If it is, set am_missing_run to use it, otherwise, to nothing. -AC_DEFUN([AM_MISSING_HAS_RUN], -[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl -AC_REQUIRE_AUX_FILE([missing])dnl -if test x"${MISSING+set}" != xset; then - case $am_aux_dir in - *\ * | *\ *) - MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; - *) - MISSING="\${SHELL} $am_aux_dir/missing" ;; - esac -fi -# Use eval to expand $SHELL -if eval "$MISSING --is-lightweight"; then - am_missing_run="$MISSING " -else - am_missing_run= - AC_MSG_WARN(['missing' script is too old or missing]) -fi -]) - -# Helper functions for option handling. -*- Autoconf -*- - -# Copyright (C) 2001-2018 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# _AM_MANGLE_OPTION(NAME) -# ----------------------- -AC_DEFUN([_AM_MANGLE_OPTION], -[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) - -# _AM_SET_OPTION(NAME) -# -------------------- -# Set option NAME. Presently that only means defining a flag for this option. -AC_DEFUN([_AM_SET_OPTION], -[m4_define(_AM_MANGLE_OPTION([$1]), [1])]) - -# _AM_SET_OPTIONS(OPTIONS) -# ------------------------ -# OPTIONS is a space-separated list of Automake options. -AC_DEFUN([_AM_SET_OPTIONS], -[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) - -# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) -# ------------------------------------------- -# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. -AC_DEFUN([_AM_IF_OPTION], -[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) - -# Copyright (C) 1999-2018 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# _AM_PROG_CC_C_O -# --------------- -# Like AC_PROG_CC_C_O, but changed for automake. We rewrite AC_PROG_CC -# to automatically call this. -AC_DEFUN([_AM_PROG_CC_C_O], -[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl -AC_REQUIRE_AUX_FILE([compile])dnl -AC_LANG_PUSH([C])dnl -AC_CACHE_CHECK( - [whether $CC understands -c and -o together], - [am_cv_prog_cc_c_o], - [AC_LANG_CONFTEST([AC_LANG_PROGRAM([])]) - # Make sure it works both with $CC and with simple cc. - # Following AC_PROG_CC_C_O, we do the test twice because some - # compilers refuse to overwrite an existing .o file with -o, - # though they will create one. - am_cv_prog_cc_c_o=yes - for am_i in 1 2; do - if AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext]) \ - && test -f conftest2.$ac_objext; then - : OK - else - am_cv_prog_cc_c_o=no - break - fi - done - rm -f core conftest* - unset am_i]) -if test "$am_cv_prog_cc_c_o" != yes; then - # Losing compiler, so override with the script. - # FIXME: It is wrong to rewrite CC. - # But if we don't then we get into trouble of one sort or another. - # A longer-term fix would be to have automake use am__CC in this case, - # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" - CC="$am_aux_dir/compile $CC" -fi -AC_LANG_POP([C])]) - -# For backward compatibility. -AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) - -# Copyright (C) 2001-2018 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# AM_RUN_LOG(COMMAND) -# ------------------- -# Run COMMAND, save the exit status in ac_status, and log it. -# (This has been adapted from Autoconf's _AC_RUN_LOG macro.) -AC_DEFUN([AM_RUN_LOG], -[{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD - ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD - (exit $ac_status); }]) - -# Check to make sure that the build environment is sane. -*- Autoconf -*- - -# Copyright (C) 1996-2018 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# AM_SANITY_CHECK -# --------------- -AC_DEFUN([AM_SANITY_CHECK], -[AC_MSG_CHECKING([whether build environment is sane]) -# Reject unsafe characters in $srcdir or the absolute working directory -# name. Accept space and tab only in the latter. -am_lf=' -' -case `pwd` in - *[[\\\"\#\$\&\'\`$am_lf]]*) - AC_MSG_ERROR([unsafe absolute working directory name]);; -esac -case $srcdir in - *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) - AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);; -esac - -# Do 'set' in a subshell so we don't clobber the current shell's -# arguments. Must try -L first in case configure is actually a -# symlink; some systems play weird games with the mod time of symlinks -# (eg FreeBSD returns the mod time of the symlink's containing -# directory). -if ( - am_has_slept=no - for am_try in 1 2; do - echo "timestamp, slept: $am_has_slept" > conftest.file - set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` - if test "$[*]" = "X"; then - # -L didn't work. - set X `ls -t "$srcdir/configure" conftest.file` - fi - if test "$[*]" != "X $srcdir/configure conftest.file" \ - && test "$[*]" != "X conftest.file $srcdir/configure"; then - - # If neither matched, then we have a broken ls. This can happen - # if, for instance, CONFIG_SHELL is bash and it inherits a - # broken ls alias from the environment. This has actually - # happened. Such a system could not be considered "sane". - AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken - alias in your environment]) - fi - if test "$[2]" = conftest.file || test $am_try -eq 2; then - break - fi - # Just in case. - sleep 1 - am_has_slept=yes - done - test "$[2]" = conftest.file - ) -then - # Ok. - : -else - AC_MSG_ERROR([newly created file is older than distributed files! -Check your system clock]) -fi -AC_MSG_RESULT([yes]) -# If we didn't sleep, we still need to ensure time stamps of config.status and -# generated files are strictly newer. -am_sleep_pid= -if grep 'slept: no' conftest.file >/dev/null 2>&1; then - ( sleep 1 ) & - am_sleep_pid=$! -fi -AC_CONFIG_COMMANDS_PRE( - [AC_MSG_CHECKING([that generated files are newer than configure]) - if test -n "$am_sleep_pid"; then - # Hide warnings about reused PIDs. - wait $am_sleep_pid 2>/dev/null - fi - AC_MSG_RESULT([done])]) -rm -f conftest.file -]) - -# Copyright (C) 2009-2018 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# AM_SILENT_RULES([DEFAULT]) -# -------------------------- -# Enable less verbose build rules; with the default set to DEFAULT -# ("yes" being less verbose, "no" or empty being verbose). -AC_DEFUN([AM_SILENT_RULES], -[AC_ARG_ENABLE([silent-rules], [dnl -AS_HELP_STRING( - [--enable-silent-rules], - [less verbose build output (undo: "make V=1")]) -AS_HELP_STRING( - [--disable-silent-rules], - [verbose build output (undo: "make V=0")])dnl -]) -case $enable_silent_rules in @%:@ ((( - yes) AM_DEFAULT_VERBOSITY=0;; - no) AM_DEFAULT_VERBOSITY=1;; - *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; -esac -dnl -dnl A few 'make' implementations (e.g., NonStop OS and NextStep) -dnl do not support nested variable expansions. -dnl See automake bug#9928 and bug#10237. -am_make=${MAKE-make} -AC_CACHE_CHECK([whether $am_make supports nested variables], - [am_cv_make_support_nested_variables], - [if AS_ECHO([['TRUE=$(BAR$(V)) -BAR0=false -BAR1=true -V=1 -am__doit: - @$(TRUE) -.PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then - am_cv_make_support_nested_variables=yes -else - am_cv_make_support_nested_variables=no -fi]) -if test $am_cv_make_support_nested_variables = yes; then - dnl Using '$V' instead of '$(V)' breaks IRIX make. - AM_V='$(V)' - AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' -else - AM_V=$AM_DEFAULT_VERBOSITY - AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY -fi -AC_SUBST([AM_V])dnl -AM_SUBST_NOTMAKE([AM_V])dnl -AC_SUBST([AM_DEFAULT_V])dnl -AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl -AC_SUBST([AM_DEFAULT_VERBOSITY])dnl -AM_BACKSLASH='\' -AC_SUBST([AM_BACKSLASH])dnl -_AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl -]) - -# Copyright (C) 2001-2018 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# AM_PROG_INSTALL_STRIP -# --------------------- -# One issue with vendor 'install' (even GNU) is that you can't -# specify the program used to strip binaries. This is especially -# annoying in cross-compiling environments, where the build's strip -# is unlikely to handle the host's binaries. -# Fortunately install-sh will honor a STRIPPROG variable, so we -# always use install-sh in "make install-strip", and initialize -# STRIPPROG with the value of the STRIP variable (set by the user). -AC_DEFUN([AM_PROG_INSTALL_STRIP], -[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl -# Installed binaries are usually stripped using 'strip' when the user -# run "make install-strip". However 'strip' might not be the right -# tool to use in cross-compilation environments, therefore Automake -# will honor the 'STRIP' environment variable to overrule this program. -dnl Don't test for $cross_compiling = yes, because it might be 'maybe'. -if test "$cross_compiling" != no; then - AC_CHECK_TOOL([STRIP], [strip], :) -fi -INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" -AC_SUBST([INSTALL_STRIP_PROGRAM])]) - -# Copyright (C) 2006-2018 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# _AM_SUBST_NOTMAKE(VARIABLE) -# --------------------------- -# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. -# This macro is traced by Automake. -AC_DEFUN([_AM_SUBST_NOTMAKE]) - -# AM_SUBST_NOTMAKE(VARIABLE) -# -------------------------- -# Public sister of _AM_SUBST_NOTMAKE. -AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) - -# Check how to create a tarball. -*- Autoconf -*- - -# Copyright (C) 2004-2018 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# _AM_PROG_TAR(FORMAT) -# -------------------- -# Check how to create a tarball in format FORMAT. -# FORMAT should be one of 'v7', 'ustar', or 'pax'. -# -# Substitute a variable $(am__tar) that is a command -# writing to stdout a FORMAT-tarball containing the directory -# $tardir. -# tardir=directory && $(am__tar) > result.tar -# -# Substitute a variable $(am__untar) that extract such -# a tarball read from stdin. -# $(am__untar) < result.tar -# -AC_DEFUN([_AM_PROG_TAR], -[# Always define AMTAR for backward compatibility. Yes, it's still used -# in the wild :-( We should find a proper way to deprecate it ... -AC_SUBST([AMTAR], ['$${TAR-tar}']) - -# We'll loop over all known methods to create a tar archive until one works. -_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' - -m4_if([$1], [v7], - [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], - - [m4_case([$1], - [ustar], - [# The POSIX 1988 'ustar' format is defined with fixed-size fields. - # There is notably a 21 bits limit for the UID and the GID. In fact, - # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343 - # and bug#13588). - am_max_uid=2097151 # 2^21 - 1 - am_max_gid=$am_max_uid - # The $UID and $GID variables are not portable, so we need to resort - # to the POSIX-mandated id(1) utility. Errors in the 'id' calls - # below are definitely unexpected, so allow the users to see them - # (that is, avoid stderr redirection). - am_uid=`id -u || echo unknown` - am_gid=`id -g || echo unknown` - AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format]) - if test $am_uid -le $am_max_uid; then - AC_MSG_RESULT([yes]) - else - AC_MSG_RESULT([no]) - _am_tools=none - fi - AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format]) - if test $am_gid -le $am_max_gid; then - AC_MSG_RESULT([yes]) - else - AC_MSG_RESULT([no]) - _am_tools=none - fi], - - [pax], - [], - - [m4_fatal([Unknown tar format])]) - - AC_MSG_CHECKING([how to create a $1 tar archive]) - - # Go ahead even if we have the value already cached. We do so because we - # need to set the values for the 'am__tar' and 'am__untar' variables. - _am_tools=${am_cv_prog_tar_$1-$_am_tools} - - for _am_tool in $_am_tools; do - case $_am_tool in - gnutar) - for _am_tar in tar gnutar gtar; do - AM_RUN_LOG([$_am_tar --version]) && break - done - am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' - am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' - am__untar="$_am_tar -xf -" - ;; - plaintar) - # Must skip GNU tar: if it does not support --format= it doesn't create - # ustar tarball either. - (tar --version) >/dev/null 2>&1 && continue - am__tar='tar chf - "$$tardir"' - am__tar_='tar chf - "$tardir"' - am__untar='tar xf -' - ;; - pax) - am__tar='pax -L -x $1 -w "$$tardir"' - am__tar_='pax -L -x $1 -w "$tardir"' - am__untar='pax -r' - ;; - cpio) - am__tar='find "$$tardir" -print | cpio -o -H $1 -L' - am__tar_='find "$tardir" -print | cpio -o -H $1 -L' - am__untar='cpio -i -H $1 -d' - ;; - none) - am__tar=false - am__tar_=false - am__untar=false - ;; - esac - - # If the value was cached, stop now. We just wanted to have am__tar - # and am__untar set. - test -n "${am_cv_prog_tar_$1}" && break - - # tar/untar a dummy directory, and stop if the command works. - rm -rf conftest.dir - mkdir conftest.dir - echo GrepMe > conftest.dir/file - AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) - rm -rf conftest.dir - if test -s conftest.tar; then - AM_RUN_LOG([$am__untar /dev/null 2>&1 && break - fi - done - rm -rf conftest.dir - - AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) - AC_MSG_RESULT([$am_cv_prog_tar_$1])]) - -AC_SUBST([am__tar]) -AC_SUBST([am__untar]) -]) # _AM_PROG_TAR - -m4_include([m4/ax_pthread.m4]) -m4_include([m4/libtool.m4]) -m4_include([m4/ltoptions.m4]) -m4_include([m4/ltsugar.m4]) -m4_include([m4/ltversion.m4]) -m4_include([m4/lt~obsolete.m4]) diff --git a/Extended/libwebp/ar-lib b/Extended/libwebp/ar-lib deleted file mode 100755 index 0baa4f6..0000000 --- a/Extended/libwebp/ar-lib +++ /dev/null @@ -1,270 +0,0 @@ -#! /bin/sh -# Wrapper for Microsoft lib.exe - -me=ar-lib -scriptversion=2012-03-01.08; # UTC - -# Copyright (C) 2010-2018 Free Software Foundation, Inc. -# Written by Peter Rosin . -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . - -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - -# This file is maintained in Automake, please report -# bugs to or send patches to -# . - - -# func_error message -func_error () -{ - echo "$me: $1" 1>&2 - exit 1 -} - -file_conv= - -# func_file_conv build_file -# Convert a $build file to $host form and store it in $file -# Currently only supports Windows hosts. -func_file_conv () -{ - file=$1 - case $file in - / | /[!/]*) # absolute file, and not a UNC file - if test -z "$file_conv"; then - # lazily determine how to convert abs files - case `uname -s` in - MINGW*) - file_conv=mingw - ;; - CYGWIN*) - file_conv=cygwin - ;; - *) - file_conv=wine - ;; - esac - fi - case $file_conv in - mingw) - file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` - ;; - cygwin) - file=`cygpath -m "$file" || echo "$file"` - ;; - wine) - file=`winepath -w "$file" || echo "$file"` - ;; - esac - ;; - esac -} - -# func_at_file at_file operation archive -# Iterate over all members in AT_FILE performing OPERATION on ARCHIVE -# for each of them. -# When interpreting the content of the @FILE, do NOT use func_file_conv, -# since the user would need to supply preconverted file names to -# binutils ar, at least for MinGW. -func_at_file () -{ - operation=$2 - archive=$3 - at_file_contents=`cat "$1"` - eval set x "$at_file_contents" - shift - - for member - do - $AR -NOLOGO $operation:"$member" "$archive" || exit $? - done -} - -case $1 in - '') - func_error "no command. Try '$0 --help' for more information." - ;; - -h | --h*) - cat < header file. */ -#cmakedefine HAVE_CPU_FEATURES_H 1 - -/* Define to 1 if you have the header file. */ -#cmakedefine HAVE_DLFCN_H 1 - -/* Define to 1 if you have the header file. */ -#cmakedefine HAVE_GLUT_GLUT_H 1 - -/* Define to 1 if you have the header file. */ -#cmakedefine HAVE_GL_GLUT_H 1 - -/* Define to 1 if you have the header file. */ -#cmakedefine HAVE_INTTYPES_H 1 - -/* Define to 1 if you have the header file. */ -#cmakedefine HAVE_MEMORY_H 1 - -/* Define to 1 if you have the header file. */ -#cmakedefine HAVE_OPENGL_GLUT_H 1 - -/* Have PTHREAD_PRIO_INHERIT. */ -#cmakedefine HAVE_PTHREAD_PRIO_INHERIT @HAVE_PTHREAD_PRIO_INHERIT@ - -/* Define to 1 if you have the header file. */ -#cmakedefine HAVE_SHLWAPI_H 1 - -/* Define to 1 if you have the header file. */ -#cmakedefine HAVE_STDINT_H 1 - -/* Define to 1 if you have the header file. */ -#cmakedefine HAVE_STDLIB_H 1 - -/* Define to 1 if you have the header file. */ -#cmakedefine HAVE_STRINGS_H 1 - -/* Define to 1 if you have the header file. */ -#cmakedefine HAVE_STRING_H 1 - -/* Define to 1 if you have the header file. */ -#cmakedefine HAVE_SYS_STAT_H 1 - -/* Define to 1 if you have the header file. */ -#cmakedefine HAVE_SYS_TYPES_H 1 - -/* Define to 1 if you have the header file. */ -#cmakedefine HAVE_UNISTD_H 1 - -/* Define to 1 if you have the header file. */ -#cmakedefine HAVE_WINCODEC_H 1 - -/* Define to 1 if you have the header file. */ -#cmakedefine HAVE_WINDOWS_H 1 - -/* Define to the sub-directory in which libtool stores uninstalled libraries. - */ -/* TODO: handle properly in CMake */ -#cmakedefine LT_OBJDIR "@LT_OBJDIR@" - -/* Name of package */ -#cmakedefine PACKAGE "@PROJECT_NAME@" - -/* Define to the address where bug reports for this package should be sent. */ -#cmakedefine PACKAGE_BUGREPORT "@PACKAGE_BUGREPORT@" - -/* Define to the full name of this package. */ -#cmakedefine PACKAGE_NAME "@PACKAGE_NAME@" - -/* Define to the full name and version of this package. */ -#cmakedefine PACKAGE_STRING "@PACKAGE_STRING@" - -/* Define to the one symbol short name of this package. */ -#cmakedefine PACKAGE_TARNAME "@PACKAGE_TARNAME@" - -/* Define to the home page for this package. */ -#cmakedefine PACKAGE_URL "@PACKAGE_URL@" - -/* Define to the version of this package. */ -#cmakedefine PACKAGE_VERSION "@PACKAGE_VERSION@" - -/* Define to necessary symbol if this constant uses a non-standard name on - your system. */ -#cmakedefine PTHREAD_CREATE_JOINABLE 1 - -/* Define to 1 if you have the ANSI C header files. */ -#cmakedefine STDC_HEADERS 1 - -/* Version number of package */ -#cmakedefine VERSION "@VERSION@" - -/* Set to 1 if GIF library is installed */ -#cmakedefine WEBP_HAVE_GIF 1 - -/* Set to 1 if OpenGL is supported */ -#cmakedefine WEBP_HAVE_GL 1 - -/* Set to 1 if JPEG library is installed */ -#cmakedefine WEBP_HAVE_JPEG 1 - -/* Set to 1 if NEON is supported */ -#cmakedefine WEBP_HAVE_NEON - -/* Set to 1 if runtime detection of NEON is enabled */ -/* TODO: handle properly in CMake */ -#cmakedefine WEBP_HAVE_NEON_RTCD - -/* Set to 1 if PNG library is installed */ -#cmakedefine WEBP_HAVE_PNG 1 - -/* Set to 1 if SDL library is installed */ -#cmakedefine WEBP_HAVE_SDL 1 - -/* Set to 1 if SSE2 is supported */ -#cmakedefine WEBP_HAVE_SSE2 1 - -/* Set to 1 if SSE4.1 is supported */ -#cmakedefine WEBP_HAVE_SSE41 1 - -/* Set to 1 if TIFF library is installed */ -#cmakedefine WEBP_HAVE_TIFF 1 - -/* Enable near lossless encoding */ -#cmakedefine WEBP_NEAR_LOSSLESS 1 - -/* Undefine this to disable thread support. */ -#cmakedefine WEBP_USE_THREAD 1 - -/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most - significant byte first (like Motorola and SPARC, unlike Intel). */ -#if defined AC_APPLE_UNIVERSAL_BUILD -# if defined __BIG_ENDIAN__ -# define WORDS_BIGENDIAN 1 -# endif -#else -# ifndef WORDS_BIGENDIAN -# undef WORDS_BIGENDIAN -# endif -#endif diff --git a/Extended/libwebp/cmake/cpu.cmake b/Extended/libwebp/cmake/cpu.cmake deleted file mode 100644 index da9a42a..0000000 --- a/Extended/libwebp/cmake/cpu.cmake +++ /dev/null @@ -1,136 +0,0 @@ -# Check for SIMD extensions. -include(CMakePushCheckState) - -function(webp_check_compiler_flag WEBP_SIMD_FLAG ENABLE_SIMD) - if(NOT ENABLE_SIMD) - message(STATUS "Disabling ${WEBP_SIMD_FLAG} optimization.") - set(WEBP_HAVE_${WEBP_SIMD_FLAG} 0 PARENT_SCOPE) - return() - endif() - unset(WEBP_HAVE_FLAG_${WEBP_SIMD_FLAG} CACHE) - cmake_push_check_state() - set(CMAKE_REQUIRED_INCLUDES ${CMAKE_CURRENT_SOURCE_DIR}) - check_c_source_compiles(" - #include \"${CMAKE_CURRENT_LIST_DIR}/../src/dsp/dsp.h\" - int main(void) { - #if !defined(WEBP_USE_${WEBP_SIMD_FLAG}) - this is not valid code - #endif - return 0; - } - " WEBP_HAVE_FLAG_${WEBP_SIMD_FLAG}) - cmake_pop_check_state() - if(WEBP_HAVE_FLAG_${WEBP_SIMD_FLAG}) - set(WEBP_HAVE_${WEBP_SIMD_FLAG} 1 PARENT_SCOPE) - else() - set(WEBP_HAVE_${WEBP_SIMD_FLAG} 0 PARENT_SCOPE) - endif() -endfunction() - -# those are included in the names of WEBP_USE_* in c++ code. -set(WEBP_SIMD_FLAGS "SSE41;SSE2;MIPS32;MIPS_DSP_R2;NEON;MSA") -set(WEBP_SIMD_FILE_EXTENSIONS - "_sse41.c;_sse2.c;_mips32.c;_mips_dsp_r2.c;_neon.c;_msa.c") -if(MSVC) - # MSVC does not have a SSE4 flag but AVX support implies SSE4 support. - set(SIMD_ENABLE_FLAGS "/arch:AVX;/arch:SSE2;;;;") - set(SIMD_DISABLE_FLAGS) -else() - set(SIMD_ENABLE_FLAGS - "-msse4.1;-msse2;-mips32;-mdspr2;-mfpu=neon;-mmsa") - set(SIMD_DISABLE_FLAGS - "-mno-sse4.1;-mno-sse2;;-mno-dspr2;;-mno-msa") -endif() - -set(WEBP_SIMD_FILES_TO_NOT_INCLUDE) -set(WEBP_SIMD_FILES_TO_INCLUDE) -set(WEBP_SIMD_FLAGS_TO_INCLUDE) - -if(${ANDROID}) - if(${ANDROID_ABI} STREQUAL "armeabi-v7a") - # This is because Android studio uses the configuration "-march=armv7-a - # -mfloat-abi=softfp -mfpu=vfpv3-d16" that does not trigger neon - # optimizations but should (as this configuration does not exist anymore). - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mfpu=neon ") - endif() -endif() - -list(LENGTH WEBP_SIMD_FLAGS WEBP_SIMD_FLAGS_LENGTH) -math(EXPR WEBP_SIMD_FLAGS_RANGE "${WEBP_SIMD_FLAGS_LENGTH} - 1") -unset(HIGHEST_SSE_FLAG) - -foreach(I_SIMD RANGE ${WEBP_SIMD_FLAGS_RANGE}) - list(GET WEBP_SIMD_FLAGS ${I_SIMD} WEBP_SIMD_FLAG) - - # First try with no extra flag added as the compiler might have default flags - # (especially on Android). - unset(WEBP_HAVE_${WEBP_SIMD_FLAG} CACHE) - cmake_push_check_state() - set(CMAKE_REQUIRED_FLAGS) - webp_check_compiler_flag(${WEBP_SIMD_FLAG} ${WEBP_ENABLE_SIMD}) - if(NOT WEBP_HAVE_${WEBP_SIMD_FLAG}) - list(GET SIMD_ENABLE_FLAGS ${I_SIMD} SIMD_COMPILE_FLAG) - set(CMAKE_REQUIRED_FLAGS ${SIMD_COMPILE_FLAG}) - webp_check_compiler_flag(${WEBP_SIMD_FLAG} ${WEBP_ENABLE_SIMD}) - else() - if(MSVC) - list(GET SIMD_ENABLE_FLAGS ${I_SIMD} SIMD_COMPILE_FLAG) - else() - set(SIMD_COMPILE_FLAG " ") - endif() - endif() - # Check which files we should include or not. - list(GET WEBP_SIMD_FILE_EXTENSIONS ${I_SIMD} WEBP_SIMD_FILE_EXTENSION) - file(GLOB SIMD_FILES "${CMAKE_CURRENT_LIST_DIR}/../" - "src/dsp/*${WEBP_SIMD_FILE_EXTENSION}") - if(WEBP_HAVE_${WEBP_SIMD_FLAG}) - if(${I_SIMD} LESS 2 AND NOT HIGHEST_SSE_FLAG) - set(HIGHEST_SSE_FLAG ${SIMD_COMPILE_FLAG}) - endif() - # Memorize the file and flags. - foreach(FILE ${SIMD_FILES}) - list(APPEND WEBP_SIMD_FILES_TO_INCLUDE ${FILE}) - if(${I_SIMD} LESS 2) - list(APPEND WEBP_SIMD_FLAGS_TO_INCLUDE ${HIGHEST_SSE_FLAG}) - else() - list(APPEND WEBP_SIMD_FLAGS_TO_INCLUDE ${SIMD_COMPILE_FLAG}) - endif() - endforeach() - else() - # Remove the file from the list. - foreach(FILE ${SIMD_FILES}) - list(APPEND WEBP_SIMD_FILES_NOT_TO_INCLUDE ${FILE}) - endforeach() - # Explicitly disable SIMD. - if(SIMD_DISABLE_FLAGS) - list(GET SIMD_DISABLE_FLAGS ${I_SIMD} SIMD_COMPILE_FLAG) - include(CheckCCompilerFlag) - if(SIMD_COMPILE_FLAG) - unset(HAS_COMPILE_FLAG CACHE) - check_c_compiler_flag(${SIMD_COMPILE_FLAG} HAS_COMPILE_FLAG) - if(HAS_COMPILE_FLAG) - # Do one more check for Clang to circumvent CMake issue 13194. - if(COMMAND check_compiler_flag_common_patterns) - # Only in CMake 3.0 and above. - check_compiler_flag_common_patterns(COMMON_PATTERNS) - else() - set(COMMON_PATTERNS) - endif() - set(CMAKE_REQUIRED_DEFINITIONS ${SIMD_COMPILE_FLAG}) - check_c_source_compiles("int main(void) {return 0;}" - FLAG_${SIMD_COMPILE_FLAG} - FAIL_REGEX - "warning: argument unused during compilation:" - ${COMMON_PATTERNS}) - if(NOT FLAG_${SIMD_COMPILE_FLAG}) - unset(HAS_COMPILE_FLAG CACHE) - endif() - endif() - if(HAS_COMPILE_FLAG) - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${SIMD_COMPILE_FLAG}") - endif() - endif() - endif() - endif() - cmake_pop_check_state() -endforeach() diff --git a/Extended/libwebp/cmake/deps.cmake b/Extended/libwebp/cmake/deps.cmake deleted file mode 100644 index f19c037..0000000 --- a/Extended/libwebp/cmake/deps.cmake +++ /dev/null @@ -1,170 +0,0 @@ -# Generate the config.h to compile with specific intrinsics / libs. - -# Check for compiler options. -include(CheckCSourceCompiles) -check_c_source_compiles(" - int main(void) { - (void)__builtin_bswap16(0); - return 0; - } - " HAVE_BUILTIN_BSWAP16) -check_c_source_compiles(" - int main(void) { - (void)__builtin_bswap32(0); - return 0; - } - " HAVE_BUILTIN_BSWAP32) -check_c_source_compiles(" - int main(void) { - (void)__builtin_bswap64(0); - return 0; - } - " HAVE_BUILTIN_BSWAP64) - -# Check for libraries. -find_package(Threads) -if(Threads_FOUND) - if(CMAKE_USE_PTHREADS_INIT) - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pthread") - endif() - foreach(PTHREAD_TEST HAVE_PTHREAD_PRIO_INHERIT PTHREAD_CREATE_UNDETACHED) - check_c_source_compiles(" - #include - int main (void) { - int attr = ${PTHREAD_TEST}; - return attr; - } - " ${PTHREAD_TEST}) - endforeach() - list(APPEND WEBP_DEP_LIBRARIES ${CMAKE_THREAD_LIBS_INIT}) -endif() -set(WEBP_USE_THREAD ${Threads_FOUND}) - -# TODO: this seems unused, check with autotools. -set(LT_OBJDIR ".libs/") - -# Only useful for vwebp, so useless for now. -find_package(OpenGL) -set(WEBP_HAVE_GL ${OPENGL_FOUND}) - -# Check if we need to link to the C math library. We do not look for it as it is -# not found when cross-compiling, while it is here. -check_c_source_compiles(" - #include - int main(int argc, char** argv) { - return (int)pow(argc, 2.5); - } - " HAVE_MATH_LIBRARY) -if(NOT HAVE_MATH_LIBRARY) - message(STATUS "Adding -lm flag.") - list(APPEND WEBP_DEP_LIBRARIES m) -endif() - -# Find the standard image libraries. -set(WEBP_DEP_IMG_LIBRARIES) -set(WEBP_DEP_IMG_INCLUDE_DIRS) -foreach(I_LIB PNG JPEG TIFF) - find_package(${I_LIB}) - set(WEBP_HAVE_${I_LIB} ${${I_LIB}_FOUND}) - if(${I_LIB}_FOUND) - list(APPEND WEBP_DEP_IMG_LIBRARIES ${${I_LIB}_LIBRARIES}) - list(APPEND WEBP_DEP_IMG_INCLUDE_DIRS ${${I_LIB}_INCLUDE_DIR} - ${${I_LIB}_INCLUDE_DIRS}) - endif() -endforeach() -if(WEBP_DEP_IMG_INCLUDE_DIRS) - list(REMOVE_DUPLICATES WEBP_DEP_IMG_INCLUDE_DIRS) -endif() - -# GIF detection, gifdec isn't part of the imageio lib. -include(CMakePushCheckState) -set(WEBP_DEP_GIF_LIBRARIES) -set(WEBP_DEP_GIF_INCLUDE_DIRS) -find_package(GIF) -set(WEBP_HAVE_GIF ${GIF_FOUND}) -if(GIF_FOUND) - # GIF find_package only locates the header and library, it doesn't fail - # compile tests when detecting the version, but falls back to 3 (as of at - # least cmake 3.7.2). Make sure the library links to avoid incorrect detection - # when cross compiling. - cmake_push_check_state() - set(CMAKE_REQUIRED_LIBRARIES ${GIF_LIBRARIES}) - set(CMAKE_REQUIRED_INCLUDES ${GIF_INCLUDE_DIR}) - check_c_source_compiles(" - #include - int main(void) { - (void)DGifOpenFileHandle; - return 0; - } - " GIF_COMPILES) - cmake_pop_check_state() - if(GIF_COMPILES) - list(APPEND WEBP_DEP_GIF_LIBRARIES ${GIF_LIBRARIES}) - list(APPEND WEBP_DEP_GIF_INCLUDE_DIRS ${GIF_INCLUDE_DIR}) - else() - unset(GIF_FOUND) - endif() -endif() - -# Check for specific headers. -include(CheckIncludeFiles) -check_include_files("stdlib.h;stdarg.h;string.h;float.h" STDC_HEADERS) -check_include_files(dlfcn.h HAVE_DLFCN_H) -check_include_files(GLUT/glut.h HAVE_GLUT_GLUT_H) -check_include_files(GL/glut.h HAVE_GL_GLUT_H) -check_include_files(inttypes.h HAVE_INTTYPES_H) -check_include_files(memory.h HAVE_MEMORY_H) -check_include_files(OpenGL/glut.h HAVE_OPENGL_GLUT_H) -check_include_files(shlwapi.h HAVE_SHLWAPI_H) -check_include_files(stdint.h HAVE_STDINT_H) -check_include_files(stdlib.h HAVE_STDLIB_H) -check_include_files(strings.h HAVE_STRINGS_H) -check_include_files(string.h HAVE_STRING_H) -check_include_files(sys/stat.h HAVE_SYS_STAT_H) -check_include_files(sys/types.h HAVE_SYS_TYPES_H) -check_include_files(unistd.h HAVE_UNISTD_H) -check_include_files(wincodec.h HAVE_WINCODEC_H) -check_include_files(windows.h HAVE_WINDOWS_H) - -# Windows specifics -if(HAVE_WINCODEC_H) - list(APPEND WEBP_DEP_LIBRARIES - shlwapi - ole32 - windowscodecs) -endif() - -# Check for SIMD extensions. -include(${CMAKE_CURRENT_LIST_DIR}/cpu.cmake) - -# Define extra info. -set(PACKAGE ${PROJECT_NAME}) -set(PACKAGE_NAME ${PROJECT_NAME}) - -# Read from configure.ac. -file(READ ${CMAKE_CURRENT_SOURCE_DIR}/configure.ac CONFIGURE_AC) -string(REGEX MATCHALL - "\\[([0-9a-z\\.:/]*)\\]" - CONFIGURE_AC_PACKAGE_INFO - ${CONFIGURE_AC}) -function(strip_bracket VAR) - string(LENGTH ${${VAR}} TMP_LEN) - math(EXPR TMP_LEN ${TMP_LEN}-2) - string(SUBSTRING ${${VAR}} - 1 - ${TMP_LEN} - TMP_SUB) - set(${VAR} ${TMP_SUB} PARENT_SCOPE) -endfunction() - -list(GET CONFIGURE_AC_PACKAGE_INFO 1 PACKAGE_VERSION) -strip_bracket(PACKAGE_VERSION) -list(GET CONFIGURE_AC_PACKAGE_INFO 2 PACKAGE_BUGREPORT) -strip_bracket(PACKAGE_BUGREPORT) -list(GET CONFIGURE_AC_PACKAGE_INFO 3 PACKAGE_URL) -strip_bracket(PACKAGE_URL) - -# Build more info. -set(PACKAGE_STRING "${PACKAGE_NAME} ${PACKAGE_VERSION}") -set(PACKAGE_TARNAME ${PACKAGE_NAME}) -set(VERSION ${PACKAGE_VERSION}) diff --git a/Extended/libwebp/codereview.settings b/Extended/libwebp/codereview.settings deleted file mode 100644 index ccba2ee..0000000 --- a/Extended/libwebp/codereview.settings +++ /dev/null @@ -1,4 +0,0 @@ -# This file is used by git cl to get repository specific information. -GERRIT_HOST: True -CODE_REVIEW_SERVER: chromium-review.googlesource.com -GERRIT_SQUASH_UPLOADS: False diff --git a/Extended/libwebp/compile b/Extended/libwebp/compile deleted file mode 100755 index 99e5052..0000000 --- a/Extended/libwebp/compile +++ /dev/null @@ -1,348 +0,0 @@ -#! /bin/sh -# Wrapper for compilers which do not understand '-c -o'. - -scriptversion=2018-03-07.03; # UTC - -# Copyright (C) 1999-2018 Free Software Foundation, Inc. -# Written by Tom Tromey . -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . - -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - -# This file is maintained in Automake, please report -# bugs to or send patches to -# . - -nl=' -' - -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent tools from complaining about whitespace usage. -IFS=" "" $nl" - -file_conv= - -# func_file_conv build_file lazy -# Convert a $build file to $host form and store it in $file -# Currently only supports Windows hosts. If the determined conversion -# type is listed in (the comma separated) LAZY, no conversion will -# take place. -func_file_conv () -{ - file=$1 - case $file in - / | /[!/]*) # absolute file, and not a UNC file - if test -z "$file_conv"; then - # lazily determine how to convert abs files - case `uname -s` in - MINGW*) - file_conv=mingw - ;; - CYGWIN*) - file_conv=cygwin - ;; - *) - file_conv=wine - ;; - esac - fi - case $file_conv/,$2, in - *,$file_conv,*) - ;; - mingw/*) - file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` - ;; - cygwin/*) - file=`cygpath -m "$file" || echo "$file"` - ;; - wine/*) - file=`winepath -w "$file" || echo "$file"` - ;; - esac - ;; - esac -} - -# func_cl_dashL linkdir -# Make cl look for libraries in LINKDIR -func_cl_dashL () -{ - func_file_conv "$1" - if test -z "$lib_path"; then - lib_path=$file - else - lib_path="$lib_path;$file" - fi - linker_opts="$linker_opts -LIBPATH:$file" -} - -# func_cl_dashl library -# Do a library search-path lookup for cl -func_cl_dashl () -{ - lib=$1 - found=no - save_IFS=$IFS - IFS=';' - for dir in $lib_path $LIB - do - IFS=$save_IFS - if $shared && test -f "$dir/$lib.dll.lib"; then - found=yes - lib=$dir/$lib.dll.lib - break - fi - if test -f "$dir/$lib.lib"; then - found=yes - lib=$dir/$lib.lib - break - fi - if test -f "$dir/lib$lib.a"; then - found=yes - lib=$dir/lib$lib.a - break - fi - done - IFS=$save_IFS - - if test "$found" != yes; then - lib=$lib.lib - fi -} - -# func_cl_wrapper cl arg... -# Adjust compile command to suit cl -func_cl_wrapper () -{ - # Assume a capable shell - lib_path= - shared=: - linker_opts= - for arg - do - if test -n "$eat"; then - eat= - else - case $1 in - -o) - # configure might choose to run compile as 'compile cc -o foo foo.c'. - eat=1 - case $2 in - *.o | *.[oO][bB][jJ]) - func_file_conv "$2" - set x "$@" -Fo"$file" - shift - ;; - *) - func_file_conv "$2" - set x "$@" -Fe"$file" - shift - ;; - esac - ;; - -I) - eat=1 - func_file_conv "$2" mingw - set x "$@" -I"$file" - shift - ;; - -I*) - func_file_conv "${1#-I}" mingw - set x "$@" -I"$file" - shift - ;; - -l) - eat=1 - func_cl_dashl "$2" - set x "$@" "$lib" - shift - ;; - -l*) - func_cl_dashl "${1#-l}" - set x "$@" "$lib" - shift - ;; - -L) - eat=1 - func_cl_dashL "$2" - ;; - -L*) - func_cl_dashL "${1#-L}" - ;; - -static) - shared=false - ;; - -Wl,*) - arg=${1#-Wl,} - save_ifs="$IFS"; IFS=',' - for flag in $arg; do - IFS="$save_ifs" - linker_opts="$linker_opts $flag" - done - IFS="$save_ifs" - ;; - -Xlinker) - eat=1 - linker_opts="$linker_opts $2" - ;; - -*) - set x "$@" "$1" - shift - ;; - *.cc | *.CC | *.cxx | *.CXX | *.[cC]++) - func_file_conv "$1" - set x "$@" -Tp"$file" - shift - ;; - *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO]) - func_file_conv "$1" mingw - set x "$@" "$file" - shift - ;; - *) - set x "$@" "$1" - shift - ;; - esac - fi - shift - done - if test -n "$linker_opts"; then - linker_opts="-link$linker_opts" - fi - exec "$@" $linker_opts - exit 1 -} - -eat= - -case $1 in - '') - echo "$0: No command. Try '$0 --help' for more information." 1>&2 - exit 1; - ;; - -h | --h*) - cat <<\EOF -Usage: compile [--help] [--version] PROGRAM [ARGS] - -Wrapper for compilers which do not understand '-c -o'. -Remove '-o dest.o' from ARGS, run PROGRAM with the remaining -arguments, and rename the output as expected. - -If you are trying to build a whole package this is not the -right script to run: please start by reading the file 'INSTALL'. - -Report bugs to . -EOF - exit $? - ;; - -v | --v*) - echo "compile $scriptversion" - exit $? - ;; - cl | *[/\\]cl | cl.exe | *[/\\]cl.exe | \ - icl | *[/\\]icl | icl.exe | *[/\\]icl.exe ) - func_cl_wrapper "$@" # Doesn't return... - ;; -esac - -ofile= -cfile= - -for arg -do - if test -n "$eat"; then - eat= - else - case $1 in - -o) - # configure might choose to run compile as 'compile cc -o foo foo.c'. - # So we strip '-o arg' only if arg is an object. - eat=1 - case $2 in - *.o | *.obj) - ofile=$2 - ;; - *) - set x "$@" -o "$2" - shift - ;; - esac - ;; - *.c) - cfile=$1 - set x "$@" "$1" - shift - ;; - *) - set x "$@" "$1" - shift - ;; - esac - fi - shift -done - -if test -z "$ofile" || test -z "$cfile"; then - # If no '-o' option was seen then we might have been invoked from a - # pattern rule where we don't need one. That is ok -- this is a - # normal compilation that the losing compiler can handle. If no - # '.c' file was seen then we are probably linking. That is also - # ok. - exec "$@" -fi - -# Name of file we expect compiler to create. -cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'` - -# Create the lock directory. -# Note: use '[/\\:.-]' here to ensure that we don't use the same name -# that we are using for the .o file. Also, base the name on the expected -# object file name, since that is what matters with a parallel build. -lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d -while true; do - if mkdir "$lockdir" >/dev/null 2>&1; then - break - fi - sleep 1 -done -# FIXME: race condition here if user kills between mkdir and trap. -trap "rmdir '$lockdir'; exit 1" 1 2 15 - -# Run the compile. -"$@" -ret=$? - -if test -f "$cofile"; then - test "$cofile" = "$ofile" || mv "$cofile" "$ofile" -elif test -f "${cofile}bj"; then - test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile" -fi - -rmdir "$lockdir" -exit $ret - -# Local Variables: -# mode: shell-script -# sh-indentation: 2 -# eval: (add-hook 'before-save-hook 'time-stamp) -# time-stamp-start: "scriptversion=" -# time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-time-zone: "UTC0" -# time-stamp-end: "; # UTC" -# End: diff --git a/Extended/libwebp/config.guess b/Extended/libwebp/config.guess deleted file mode 100755 index f50dcdb..0000000 --- a/Extended/libwebp/config.guess +++ /dev/null @@ -1,1480 +0,0 @@ -#! /bin/sh -# Attempt to guess a canonical system name. -# Copyright 1992-2018 Free Software Foundation, Inc. - -timestamp='2018-02-24' - -# This file is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, see . -# -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that -# program. This Exception is an additional permission under section 7 -# of the GNU General Public License, version 3 ("GPLv3"). -# -# Originally written by Per Bothner; maintained since 2000 by Ben Elliston. -# -# You can get the latest version of this script from: -# https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess -# -# Please send patches to . - - -me=`echo "$0" | sed -e 's,.*/,,'` - -usage="\ -Usage: $0 [OPTION] - -Output the configuration name of the system \`$me' is run on. - -Options: - -h, --help print this help, then exit - -t, --time-stamp print date of last modification, then exit - -v, --version print version number, then exit - -Report bugs and patches to ." - -version="\ -GNU config.guess ($timestamp) - -Originally written by Per Bothner. -Copyright 1992-2018 Free Software Foundation, Inc. - -This is free software; see the source for copying conditions. There is NO -warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." - -help=" -Try \`$me --help' for more information." - -# Parse command line -while test $# -gt 0 ; do - case $1 in - --time-stamp | --time* | -t ) - echo "$timestamp" ; exit ;; - --version | -v ) - echo "$version" ; exit ;; - --help | --h* | -h ) - echo "$usage"; exit ;; - -- ) # Stop option processing - shift; break ;; - - ) # Use stdin as input. - break ;; - -* ) - echo "$me: invalid option $1$help" >&2 - exit 1 ;; - * ) - break ;; - esac -done - -if test $# != 0; then - echo "$me: too many arguments$help" >&2 - exit 1 -fi - -trap 'exit 1' 1 2 15 - -# CC_FOR_BUILD -- compiler used by this script. Note that the use of a -# compiler to aid in system detection is discouraged as it requires -# temporary files to be created and, as you can see below, it is a -# headache to deal with in a portable fashion. - -# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still -# use `HOST_CC' if defined, but it is deprecated. - -# Portable tmp directory creation inspired by the Autoconf team. - -set_cc_for_build=' -trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; -trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; -: ${TMPDIR=/tmp} ; - { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || - { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || - { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || - { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; -dummy=$tmp/dummy ; -tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; -case $CC_FOR_BUILD,$HOST_CC,$CC in - ,,) echo "int x;" > "$dummy.c" ; - for c in cc gcc c89 c99 ; do - if ($c -c -o "$dummy.o" "$dummy.c") >/dev/null 2>&1 ; then - CC_FOR_BUILD="$c"; break ; - fi ; - done ; - if test x"$CC_FOR_BUILD" = x ; then - CC_FOR_BUILD=no_compiler_found ; - fi - ;; - ,,*) CC_FOR_BUILD=$CC ;; - ,*,*) CC_FOR_BUILD=$HOST_CC ;; -esac ; set_cc_for_build= ;' - -# This is needed to find uname on a Pyramid OSx when run in the BSD universe. -# (ghazi@noc.rutgers.edu 1994-08-24) -if (test -f /.attbin/uname) >/dev/null 2>&1 ; then - PATH=$PATH:/.attbin ; export PATH -fi - -UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown -UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown -UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown -UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown - -case "$UNAME_SYSTEM" in -Linux|GNU|GNU/*) - # If the system lacks a compiler, then just pick glibc. - # We could probably try harder. - LIBC=gnu - - eval "$set_cc_for_build" - cat <<-EOF > "$dummy.c" - #include - #if defined(__UCLIBC__) - LIBC=uclibc - #elif defined(__dietlibc__) - LIBC=dietlibc - #else - LIBC=gnu - #endif - EOF - eval "`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g'`" - - # If ldd exists, use it to detect musl libc. - if command -v ldd >/dev/null && \ - ldd --version 2>&1 | grep -q ^musl - then - LIBC=musl - fi - ;; -esac - -# Note: order is significant - the case branches are not exclusive. - -case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in - *:NetBSD:*:*) - # NetBSD (nbsd) targets should (where applicable) match one or - # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, - # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently - # switched to ELF, *-*-netbsd* would select the old - # object file format. This provides both forward - # compatibility and a consistent mechanism for selecting the - # object file format. - # - # Note: NetBSD doesn't particularly care about the vendor - # portion of the name. We always set it to "unknown". - sysctl="sysctl -n hw.machine_arch" - UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \ - "/sbin/$sysctl" 2>/dev/null || \ - "/usr/sbin/$sysctl" 2>/dev/null || \ - echo unknown)` - case "$UNAME_MACHINE_ARCH" in - armeb) machine=armeb-unknown ;; - arm*) machine=arm-unknown ;; - sh3el) machine=shl-unknown ;; - sh3eb) machine=sh-unknown ;; - sh5el) machine=sh5le-unknown ;; - earmv*) - arch=`echo "$UNAME_MACHINE_ARCH" | sed -e 's,^e\(armv[0-9]\).*$,\1,'` - endian=`echo "$UNAME_MACHINE_ARCH" | sed -ne 's,^.*\(eb\)$,\1,p'` - machine="${arch}${endian}"-unknown - ;; - *) machine="$UNAME_MACHINE_ARCH"-unknown ;; - esac - # The Operating System including object format, if it has switched - # to ELF recently (or will in the future) and ABI. - case "$UNAME_MACHINE_ARCH" in - earm*) - os=netbsdelf - ;; - arm*|i386|m68k|ns32k|sh3*|sparc|vax) - eval "$set_cc_for_build" - if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ - | grep -q __ELF__ - then - # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). - # Return netbsd for either. FIX? - os=netbsd - else - os=netbsdelf - fi - ;; - *) - os=netbsd - ;; - esac - # Determine ABI tags. - case "$UNAME_MACHINE_ARCH" in - earm*) - expr='s/^earmv[0-9]/-eabi/;s/eb$//' - abi=`echo "$UNAME_MACHINE_ARCH" | sed -e "$expr"` - ;; - esac - # The OS release - # Debian GNU/NetBSD machines have a different userland, and - # thus, need a distinct triplet. However, they do not need - # kernel version information, so it can be replaced with a - # suitable tag, in the style of linux-gnu. - case "$UNAME_VERSION" in - Debian*) - release='-gnu' - ;; - *) - release=`echo "$UNAME_RELEASE" | sed -e 's/[-_].*//' | cut -d. -f1,2` - ;; - esac - # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: - # contains redundant information, the shorter form: - # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. - echo "$machine-${os}${release}${abi}" - exit ;; - *:Bitrig:*:*) - UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` - echo "$UNAME_MACHINE_ARCH"-unknown-bitrig"$UNAME_RELEASE" - exit ;; - *:OpenBSD:*:*) - UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` - echo "$UNAME_MACHINE_ARCH"-unknown-openbsd"$UNAME_RELEASE" - exit ;; - *:LibertyBSD:*:*) - UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'` - echo "$UNAME_MACHINE_ARCH"-unknown-libertybsd"$UNAME_RELEASE" - exit ;; - *:MidnightBSD:*:*) - echo "$UNAME_MACHINE"-unknown-midnightbsd"$UNAME_RELEASE" - exit ;; - *:ekkoBSD:*:*) - echo "$UNAME_MACHINE"-unknown-ekkobsd"$UNAME_RELEASE" - exit ;; - *:SolidBSD:*:*) - echo "$UNAME_MACHINE"-unknown-solidbsd"$UNAME_RELEASE" - exit ;; - macppc:MirBSD:*:*) - echo powerpc-unknown-mirbsd"$UNAME_RELEASE" - exit ;; - *:MirBSD:*:*) - echo "$UNAME_MACHINE"-unknown-mirbsd"$UNAME_RELEASE" - exit ;; - *:Sortix:*:*) - echo "$UNAME_MACHINE"-unknown-sortix - exit ;; - *:Redox:*:*) - echo "$UNAME_MACHINE"-unknown-redox - exit ;; - mips:OSF1:*.*) - echo mips-dec-osf1 - exit ;; - alpha:OSF1:*:*) - case $UNAME_RELEASE in - *4.0) - UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` - ;; - *5.*) - UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` - ;; - esac - # According to Compaq, /usr/sbin/psrinfo has been available on - # OSF/1 and Tru64 systems produced since 1995. I hope that - # covers most systems running today. This code pipes the CPU - # types through head -n 1, so we only detect the type of CPU 0. - ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` - case "$ALPHA_CPU_TYPE" in - "EV4 (21064)") - UNAME_MACHINE=alpha ;; - "EV4.5 (21064)") - UNAME_MACHINE=alpha ;; - "LCA4 (21066/21068)") - UNAME_MACHINE=alpha ;; - "EV5 (21164)") - UNAME_MACHINE=alphaev5 ;; - "EV5.6 (21164A)") - UNAME_MACHINE=alphaev56 ;; - "EV5.6 (21164PC)") - UNAME_MACHINE=alphapca56 ;; - "EV5.7 (21164PC)") - UNAME_MACHINE=alphapca57 ;; - "EV6 (21264)") - UNAME_MACHINE=alphaev6 ;; - "EV6.7 (21264A)") - UNAME_MACHINE=alphaev67 ;; - "EV6.8CB (21264C)") - UNAME_MACHINE=alphaev68 ;; - "EV6.8AL (21264B)") - UNAME_MACHINE=alphaev68 ;; - "EV6.8CX (21264D)") - UNAME_MACHINE=alphaev68 ;; - "EV6.9A (21264/EV69A)") - UNAME_MACHINE=alphaev69 ;; - "EV7 (21364)") - UNAME_MACHINE=alphaev7 ;; - "EV7.9 (21364A)") - UNAME_MACHINE=alphaev79 ;; - esac - # A Pn.n version is a patched version. - # A Vn.n version is a released version. - # A Tn.n version is a released field test version. - # A Xn.n version is an unreleased experimental baselevel. - # 1.2 uses "1.2" for uname -r. - echo "$UNAME_MACHINE"-dec-osf"`echo "$UNAME_RELEASE" | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`" - # Reset EXIT trap before exiting to avoid spurious non-zero exit code. - exitcode=$? - trap '' 0 - exit $exitcode ;; - Amiga*:UNIX_System_V:4.0:*) - echo m68k-unknown-sysv4 - exit ;; - *:[Aa]miga[Oo][Ss]:*:*) - echo "$UNAME_MACHINE"-unknown-amigaos - exit ;; - *:[Mm]orph[Oo][Ss]:*:*) - echo "$UNAME_MACHINE"-unknown-morphos - exit ;; - *:OS/390:*:*) - echo i370-ibm-openedition - exit ;; - *:z/VM:*:*) - echo s390-ibm-zvmoe - exit ;; - *:OS400:*:*) - echo powerpc-ibm-os400 - exit ;; - arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) - echo arm-acorn-riscix"$UNAME_RELEASE" - exit ;; - arm*:riscos:*:*|arm*:RISCOS:*:*) - echo arm-unknown-riscos - exit ;; - SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) - echo hppa1.1-hitachi-hiuxmpp - exit ;; - Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) - # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. - if test "`(/bin/universe) 2>/dev/null`" = att ; then - echo pyramid-pyramid-sysv3 - else - echo pyramid-pyramid-bsd - fi - exit ;; - NILE*:*:*:dcosx) - echo pyramid-pyramid-svr4 - exit ;; - DRS?6000:unix:4.0:6*) - echo sparc-icl-nx6 - exit ;; - DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) - case `/usr/bin/uname -p` in - sparc) echo sparc-icl-nx7; exit ;; - esac ;; - s390x:SunOS:*:*) - echo "$UNAME_MACHINE"-ibm-solaris2"`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`" - exit ;; - sun4H:SunOS:5.*:*) - echo sparc-hal-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" - exit ;; - sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) - echo sparc-sun-solaris2"`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`" - exit ;; - i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) - echo i386-pc-auroraux"$UNAME_RELEASE" - exit ;; - i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) - eval "$set_cc_for_build" - SUN_ARCH=i386 - # If there is a compiler, see if it is configured for 64-bit objects. - # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. - # This test works for both compilers. - if [ "$CC_FOR_BUILD" != no_compiler_found ]; then - if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ - (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ - grep IS_64BIT_ARCH >/dev/null - then - SUN_ARCH=x86_64 - fi - fi - echo "$SUN_ARCH"-pc-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" - exit ;; - sun4*:SunOS:6*:*) - # According to config.sub, this is the proper way to canonicalize - # SunOS6. Hard to guess exactly what SunOS6 will be like, but - # it's likely to be more like Solaris than SunOS4. - echo sparc-sun-solaris3"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" - exit ;; - sun4*:SunOS:*:*) - case "`/usr/bin/arch -k`" in - Series*|S4*) - UNAME_RELEASE=`uname -v` - ;; - esac - # Japanese Language versions have a version number like `4.1.3-JL'. - echo sparc-sun-sunos"`echo "$UNAME_RELEASE"|sed -e 's/-/_/'`" - exit ;; - sun3*:SunOS:*:*) - echo m68k-sun-sunos"$UNAME_RELEASE" - exit ;; - sun*:*:4.2BSD:*) - UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` - test "x$UNAME_RELEASE" = x && UNAME_RELEASE=3 - case "`/bin/arch`" in - sun3) - echo m68k-sun-sunos"$UNAME_RELEASE" - ;; - sun4) - echo sparc-sun-sunos"$UNAME_RELEASE" - ;; - esac - exit ;; - aushp:SunOS:*:*) - echo sparc-auspex-sunos"$UNAME_RELEASE" - exit ;; - # The situation for MiNT is a little confusing. The machine name - # can be virtually everything (everything which is not - # "atarist" or "atariste" at least should have a processor - # > m68000). The system name ranges from "MiNT" over "FreeMiNT" - # to the lowercase version "mint" (or "freemint"). Finally - # the system name "TOS" denotes a system which is actually not - # MiNT. But MiNT is downward compatible to TOS, so this should - # be no problem. - atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) - echo m68k-atari-mint"$UNAME_RELEASE" - exit ;; - atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) - echo m68k-atari-mint"$UNAME_RELEASE" - exit ;; - *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) - echo m68k-atari-mint"$UNAME_RELEASE" - exit ;; - milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) - echo m68k-milan-mint"$UNAME_RELEASE" - exit ;; - hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) - echo m68k-hades-mint"$UNAME_RELEASE" - exit ;; - *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) - echo m68k-unknown-mint"$UNAME_RELEASE" - exit ;; - m68k:machten:*:*) - echo m68k-apple-machten"$UNAME_RELEASE" - exit ;; - powerpc:machten:*:*) - echo powerpc-apple-machten"$UNAME_RELEASE" - exit ;; - RISC*:Mach:*:*) - echo mips-dec-mach_bsd4.3 - exit ;; - RISC*:ULTRIX:*:*) - echo mips-dec-ultrix"$UNAME_RELEASE" - exit ;; - VAX*:ULTRIX*:*:*) - echo vax-dec-ultrix"$UNAME_RELEASE" - exit ;; - 2020:CLIX:*:* | 2430:CLIX:*:*) - echo clipper-intergraph-clix"$UNAME_RELEASE" - exit ;; - mips:*:*:UMIPS | mips:*:*:RISCos) - eval "$set_cc_for_build" - sed 's/^ //' << EOF > "$dummy.c" -#ifdef __cplusplus -#include /* for printf() prototype */ - int main (int argc, char *argv[]) { -#else - int main (argc, argv) int argc; char *argv[]; { -#endif - #if defined (host_mips) && defined (MIPSEB) - #if defined (SYSTYPE_SYSV) - printf ("mips-mips-riscos%ssysv\\n", argv[1]); exit (0); - #endif - #if defined (SYSTYPE_SVR4) - printf ("mips-mips-riscos%ssvr4\\n", argv[1]); exit (0); - #endif - #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) - printf ("mips-mips-riscos%sbsd\\n", argv[1]); exit (0); - #endif - #endif - exit (-1); - } -EOF - $CC_FOR_BUILD -o "$dummy" "$dummy.c" && - dummyarg=`echo "$UNAME_RELEASE" | sed -n 's/\([0-9]*\).*/\1/p'` && - SYSTEM_NAME=`"$dummy" "$dummyarg"` && - { echo "$SYSTEM_NAME"; exit; } - echo mips-mips-riscos"$UNAME_RELEASE" - exit ;; - Motorola:PowerMAX_OS:*:*) - echo powerpc-motorola-powermax - exit ;; - Motorola:*:4.3:PL8-*) - echo powerpc-harris-powermax - exit ;; - Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) - echo powerpc-harris-powermax - exit ;; - Night_Hawk:Power_UNIX:*:*) - echo powerpc-harris-powerunix - exit ;; - m88k:CX/UX:7*:*) - echo m88k-harris-cxux7 - exit ;; - m88k:*:4*:R4*) - echo m88k-motorola-sysv4 - exit ;; - m88k:*:3*:R3*) - echo m88k-motorola-sysv3 - exit ;; - AViiON:dgux:*:*) - # DG/UX returns AViiON for all architectures - UNAME_PROCESSOR=`/usr/bin/uname -p` - if [ "$UNAME_PROCESSOR" = mc88100 ] || [ "$UNAME_PROCESSOR" = mc88110 ] - then - if [ "$TARGET_BINARY_INTERFACE"x = m88kdguxelfx ] || \ - [ "$TARGET_BINARY_INTERFACE"x = x ] - then - echo m88k-dg-dgux"$UNAME_RELEASE" - else - echo m88k-dg-dguxbcs"$UNAME_RELEASE" - fi - else - echo i586-dg-dgux"$UNAME_RELEASE" - fi - exit ;; - M88*:DolphinOS:*:*) # DolphinOS (SVR3) - echo m88k-dolphin-sysv3 - exit ;; - M88*:*:R3*:*) - # Delta 88k system running SVR3 - echo m88k-motorola-sysv3 - exit ;; - XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) - echo m88k-tektronix-sysv3 - exit ;; - Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) - echo m68k-tektronix-bsd - exit ;; - *:IRIX*:*:*) - echo mips-sgi-irix"`echo "$UNAME_RELEASE"|sed -e 's/-/_/g'`" - exit ;; - ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. - echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id - exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' - i*86:AIX:*:*) - echo i386-ibm-aix - exit ;; - ia64:AIX:*:*) - if [ -x /usr/bin/oslevel ] ; then - IBM_REV=`/usr/bin/oslevel` - else - IBM_REV="$UNAME_VERSION.$UNAME_RELEASE" - fi - echo "$UNAME_MACHINE"-ibm-aix"$IBM_REV" - exit ;; - *:AIX:2:3) - if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then - eval "$set_cc_for_build" - sed 's/^ //' << EOF > "$dummy.c" - #include - - main() - { - if (!__power_pc()) - exit(1); - puts("powerpc-ibm-aix3.2.5"); - exit(0); - } -EOF - if $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` - then - echo "$SYSTEM_NAME" - else - echo rs6000-ibm-aix3.2.5 - fi - elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then - echo rs6000-ibm-aix3.2.4 - else - echo rs6000-ibm-aix3.2 - fi - exit ;; - *:AIX:*:[4567]) - IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` - if /usr/sbin/lsattr -El "$IBM_CPU_ID" | grep ' POWER' >/dev/null 2>&1; then - IBM_ARCH=rs6000 - else - IBM_ARCH=powerpc - fi - if [ -x /usr/bin/lslpp ] ; then - IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | - awk -F: '{ print $3 }' | sed s/[0-9]*$/0/` - else - IBM_REV="$UNAME_VERSION.$UNAME_RELEASE" - fi - echo "$IBM_ARCH"-ibm-aix"$IBM_REV" - exit ;; - *:AIX:*:*) - echo rs6000-ibm-aix - exit ;; - ibmrt:4.4BSD:*|romp-ibm:4.4BSD:*) - echo romp-ibm-bsd4.4 - exit ;; - ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and - echo romp-ibm-bsd"$UNAME_RELEASE" # 4.3 with uname added to - exit ;; # report: romp-ibm BSD 4.3 - *:BOSX:*:*) - echo rs6000-bull-bosx - exit ;; - DPX/2?00:B.O.S.:*:*) - echo m68k-bull-sysv3 - exit ;; - 9000/[34]??:4.3bsd:1.*:*) - echo m68k-hp-bsd - exit ;; - hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) - echo m68k-hp-bsd4.4 - exit ;; - 9000/[34678]??:HP-UX:*:*) - HPUX_REV=`echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//'` - case "$UNAME_MACHINE" in - 9000/31?) HP_ARCH=m68000 ;; - 9000/[34]??) HP_ARCH=m68k ;; - 9000/[678][0-9][0-9]) - if [ -x /usr/bin/getconf ]; then - sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` - sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` - case "$sc_cpu_version" in - 523) HP_ARCH=hppa1.0 ;; # CPU_PA_RISC1_0 - 528) HP_ARCH=hppa1.1 ;; # CPU_PA_RISC1_1 - 532) # CPU_PA_RISC2_0 - case "$sc_kernel_bits" in - 32) HP_ARCH=hppa2.0n ;; - 64) HP_ARCH=hppa2.0w ;; - '') HP_ARCH=hppa2.0 ;; # HP-UX 10.20 - esac ;; - esac - fi - if [ "$HP_ARCH" = "" ]; then - eval "$set_cc_for_build" - sed 's/^ //' << EOF > "$dummy.c" - - #define _HPUX_SOURCE - #include - #include - - int main () - { - #if defined(_SC_KERNEL_BITS) - long bits = sysconf(_SC_KERNEL_BITS); - #endif - long cpu = sysconf (_SC_CPU_VERSION); - - switch (cpu) - { - case CPU_PA_RISC1_0: puts ("hppa1.0"); break; - case CPU_PA_RISC1_1: puts ("hppa1.1"); break; - case CPU_PA_RISC2_0: - #if defined(_SC_KERNEL_BITS) - switch (bits) - { - case 64: puts ("hppa2.0w"); break; - case 32: puts ("hppa2.0n"); break; - default: puts ("hppa2.0"); break; - } break; - #else /* !defined(_SC_KERNEL_BITS) */ - puts ("hppa2.0"); break; - #endif - default: puts ("hppa1.0"); break; - } - exit (0); - } -EOF - (CCOPTS="" $CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null) && HP_ARCH=`"$dummy"` - test -z "$HP_ARCH" && HP_ARCH=hppa - fi ;; - esac - if [ "$HP_ARCH" = hppa2.0w ] - then - eval "$set_cc_for_build" - - # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating - # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler - # generating 64-bit code. GNU and HP use different nomenclature: - # - # $ CC_FOR_BUILD=cc ./config.guess - # => hppa2.0w-hp-hpux11.23 - # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess - # => hppa64-hp-hpux11.23 - - if echo __LP64__ | (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | - grep -q __LP64__ - then - HP_ARCH=hppa2.0w - else - HP_ARCH=hppa64 - fi - fi - echo "$HP_ARCH"-hp-hpux"$HPUX_REV" - exit ;; - ia64:HP-UX:*:*) - HPUX_REV=`echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//'` - echo ia64-hp-hpux"$HPUX_REV" - exit ;; - 3050*:HI-UX:*:*) - eval "$set_cc_for_build" - sed 's/^ //' << EOF > "$dummy.c" - #include - int - main () - { - long cpu = sysconf (_SC_CPU_VERSION); - /* The order matters, because CPU_IS_HP_MC68K erroneously returns - true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct - results, however. */ - if (CPU_IS_PA_RISC (cpu)) - { - switch (cpu) - { - case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; - case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; - case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; - default: puts ("hppa-hitachi-hiuxwe2"); break; - } - } - else if (CPU_IS_HP_MC68K (cpu)) - puts ("m68k-hitachi-hiuxwe2"); - else puts ("unknown-hitachi-hiuxwe2"); - exit (0); - } -EOF - $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` && - { echo "$SYSTEM_NAME"; exit; } - echo unknown-hitachi-hiuxwe2 - exit ;; - 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:*) - echo hppa1.1-hp-bsd - exit ;; - 9000/8??:4.3bsd:*:*) - echo hppa1.0-hp-bsd - exit ;; - *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) - echo hppa1.0-hp-mpeix - exit ;; - hp7??:OSF1:*:* | hp8?[79]:OSF1:*:*) - echo hppa1.1-hp-osf - exit ;; - hp8??:OSF1:*:*) - echo hppa1.0-hp-osf - exit ;; - i*86:OSF1:*:*) - if [ -x /usr/sbin/sysversion ] ; then - echo "$UNAME_MACHINE"-unknown-osf1mk - else - echo "$UNAME_MACHINE"-unknown-osf1 - fi - exit ;; - parisc*:Lites*:*:*) - echo hppa1.1-hp-lites - exit ;; - C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) - echo c1-convex-bsd - exit ;; - C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) - if getsysinfo -f scalar_acc - then echo c32-convex-bsd - else echo c2-convex-bsd - fi - exit ;; - C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) - echo c34-convex-bsd - exit ;; - C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) - echo c38-convex-bsd - exit ;; - C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) - echo c4-convex-bsd - exit ;; - CRAY*Y-MP:*:*:*) - echo ymp-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*[A-Z]90:*:*:*) - echo "$UNAME_MACHINE"-cray-unicos"$UNAME_RELEASE" \ - | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ - -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ - -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*TS:*:*:*) - echo t90-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*T3E:*:*:*) - echo alphaev5-cray-unicosmk"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*SV1:*:*:*) - echo sv1-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' - exit ;; - *:UNICOS/mp:*:*) - echo craynv-cray-unicosmp"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' - exit ;; - F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) - FUJITSU_PROC=`uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` - FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` - FUJITSU_REL=`echo "$UNAME_RELEASE" | sed -e 's/ /_/'` - echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" - exit ;; - 5000:UNIX_System_V:4.*:*) - FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` - FUJITSU_REL=`echo "$UNAME_RELEASE" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/'` - echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" - exit ;; - i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) - echo "$UNAME_MACHINE"-pc-bsdi"$UNAME_RELEASE" - exit ;; - sparc*:BSD/OS:*:*) - echo sparc-unknown-bsdi"$UNAME_RELEASE" - exit ;; - *:BSD/OS:*:*) - echo "$UNAME_MACHINE"-unknown-bsdi"$UNAME_RELEASE" - exit ;; - *:FreeBSD:*:*) - UNAME_PROCESSOR=`/usr/bin/uname -p` - case "$UNAME_PROCESSOR" in - amd64) - UNAME_PROCESSOR=x86_64 ;; - i386) - UNAME_PROCESSOR=i586 ;; - esac - echo "$UNAME_PROCESSOR"-unknown-freebsd"`echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`" - exit ;; - i*:CYGWIN*:*) - echo "$UNAME_MACHINE"-pc-cygwin - exit ;; - *:MINGW64*:*) - echo "$UNAME_MACHINE"-pc-mingw64 - exit ;; - *:MINGW*:*) - echo "$UNAME_MACHINE"-pc-mingw32 - exit ;; - *:MSYS*:*) - echo "$UNAME_MACHINE"-pc-msys - exit ;; - i*:PW*:*) - echo "$UNAME_MACHINE"-pc-pw32 - exit ;; - *:Interix*:*) - case "$UNAME_MACHINE" in - x86) - echo i586-pc-interix"$UNAME_RELEASE" - exit ;; - authenticamd | genuineintel | EM64T) - echo x86_64-unknown-interix"$UNAME_RELEASE" - exit ;; - IA64) - echo ia64-unknown-interix"$UNAME_RELEASE" - exit ;; - esac ;; - i*:UWIN*:*) - echo "$UNAME_MACHINE"-pc-uwin - exit ;; - amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) - echo x86_64-unknown-cygwin - exit ;; - prep*:SunOS:5.*:*) - echo powerpcle-unknown-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" - exit ;; - *:GNU:*:*) - # the GNU system - echo "`echo "$UNAME_MACHINE"|sed -e 's,[-/].*$,,'`-unknown-$LIBC`echo "$UNAME_RELEASE"|sed -e 's,/.*$,,'`" - exit ;; - *:GNU/*:*:*) - # other systems with GNU libc and userland - echo "$UNAME_MACHINE-unknown-`echo "$UNAME_SYSTEM" | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"``echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`-$LIBC" - exit ;; - i*86:Minix:*:*) - echo "$UNAME_MACHINE"-pc-minix - exit ;; - aarch64:Linux:*:*) - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" - exit ;; - aarch64_be:Linux:*:*) - UNAME_MACHINE=aarch64_be - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" - exit ;; - alpha:Linux:*:*) - case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in - EV5) UNAME_MACHINE=alphaev5 ;; - EV56) UNAME_MACHINE=alphaev56 ;; - PCA56) UNAME_MACHINE=alphapca56 ;; - PCA57) UNAME_MACHINE=alphapca56 ;; - EV6) UNAME_MACHINE=alphaev6 ;; - EV67) UNAME_MACHINE=alphaev67 ;; - EV68*) UNAME_MACHINE=alphaev68 ;; - esac - objdump --private-headers /bin/sh | grep -q ld.so.1 - if test "$?" = 0 ; then LIBC=gnulibc1 ; fi - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" - exit ;; - arc:Linux:*:* | arceb:Linux:*:*) - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" - exit ;; - arm*:Linux:*:*) - eval "$set_cc_for_build" - if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ - | grep -q __ARM_EABI__ - then - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" - else - if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ - | grep -q __ARM_PCS_VFP - then - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"eabi - else - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"eabihf - fi - fi - exit ;; - avr32*:Linux:*:*) - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" - exit ;; - cris:Linux:*:*) - echo "$UNAME_MACHINE"-axis-linux-"$LIBC" - exit ;; - crisv32:Linux:*:*) - echo "$UNAME_MACHINE"-axis-linux-"$LIBC" - exit ;; - e2k:Linux:*:*) - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" - exit ;; - frv:Linux:*:*) - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" - exit ;; - hexagon:Linux:*:*) - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" - exit ;; - i*86:Linux:*:*) - echo "$UNAME_MACHINE"-pc-linux-"$LIBC" - exit ;; - ia64:Linux:*:*) - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" - exit ;; - k1om:Linux:*:*) - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" - exit ;; - m32r*:Linux:*:*) - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" - exit ;; - m68*:Linux:*:*) - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" - exit ;; - mips:Linux:*:* | mips64:Linux:*:*) - eval "$set_cc_for_build" - sed 's/^ //' << EOF > "$dummy.c" - #undef CPU - #undef ${UNAME_MACHINE} - #undef ${UNAME_MACHINE}el - #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) - CPU=${UNAME_MACHINE}el - #else - #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) - CPU=${UNAME_MACHINE} - #else - CPU= - #endif - #endif -EOF - eval "`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU'`" - test "x$CPU" != x && { echo "$CPU-unknown-linux-$LIBC"; exit; } - ;; - mips64el:Linux:*:*) - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" - exit ;; - openrisc*:Linux:*:*) - echo or1k-unknown-linux-"$LIBC" - exit ;; - or32:Linux:*:* | or1k*:Linux:*:*) - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" - exit ;; - padre:Linux:*:*) - echo sparc-unknown-linux-"$LIBC" - exit ;; - parisc64:Linux:*:* | hppa64:Linux:*:*) - echo hppa64-unknown-linux-"$LIBC" - exit ;; - parisc:Linux:*:* | hppa:Linux:*:*) - # Look for CPU level - case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in - PA7*) echo hppa1.1-unknown-linux-"$LIBC" ;; - PA8*) echo hppa2.0-unknown-linux-"$LIBC" ;; - *) echo hppa-unknown-linux-"$LIBC" ;; - esac - exit ;; - ppc64:Linux:*:*) - echo powerpc64-unknown-linux-"$LIBC" - exit ;; - ppc:Linux:*:*) - echo powerpc-unknown-linux-"$LIBC" - exit ;; - ppc64le:Linux:*:*) - echo powerpc64le-unknown-linux-"$LIBC" - exit ;; - ppcle:Linux:*:*) - echo powerpcle-unknown-linux-"$LIBC" - exit ;; - riscv32:Linux:*:* | riscv64:Linux:*:*) - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" - exit ;; - s390:Linux:*:* | s390x:Linux:*:*) - echo "$UNAME_MACHINE"-ibm-linux-"$LIBC" - exit ;; - sh64*:Linux:*:*) - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" - exit ;; - sh*:Linux:*:*) - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" - exit ;; - sparc:Linux:*:* | sparc64:Linux:*:*) - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" - exit ;; - tile*:Linux:*:*) - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" - exit ;; - vax:Linux:*:*) - echo "$UNAME_MACHINE"-dec-linux-"$LIBC" - exit ;; - x86_64:Linux:*:*) - if objdump -f /bin/sh | grep -q elf32-x86-64; then - echo "$UNAME_MACHINE"-pc-linux-"$LIBC"x32 - else - echo "$UNAME_MACHINE"-pc-linux-"$LIBC" - fi - exit ;; - xtensa*:Linux:*:*) - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" - exit ;; - i*86:DYNIX/ptx:4*:*) - # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. - # earlier versions are messed up and put the nodename in both - # sysname and nodename. - echo i386-sequent-sysv4 - exit ;; - i*86:UNIX_SV:4.2MP:2.*) - # Unixware is an offshoot of SVR4, but it has its own version - # number series starting with 2... - # I am not positive that other SVR4 systems won't match this, - # I just have to hope. -- rms. - # Use sysv4.2uw... so that sysv4* matches it. - echo "$UNAME_MACHINE"-pc-sysv4.2uw"$UNAME_VERSION" - exit ;; - i*86:OS/2:*:*) - # If we were able to find `uname', then EMX Unix compatibility - # is probably installed. - echo "$UNAME_MACHINE"-pc-os2-emx - exit ;; - i*86:XTS-300:*:STOP) - echo "$UNAME_MACHINE"-unknown-stop - exit ;; - i*86:atheos:*:*) - echo "$UNAME_MACHINE"-unknown-atheos - exit ;; - i*86:syllable:*:*) - echo "$UNAME_MACHINE"-pc-syllable - exit ;; - i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) - echo i386-unknown-lynxos"$UNAME_RELEASE" - exit ;; - i*86:*DOS:*:*) - echo "$UNAME_MACHINE"-pc-msdosdjgpp - exit ;; - i*86:*:4.*:*) - UNAME_REL=`echo "$UNAME_RELEASE" | sed 's/\/MP$//'` - if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then - echo "$UNAME_MACHINE"-univel-sysv"$UNAME_REL" - else - echo "$UNAME_MACHINE"-pc-sysv"$UNAME_REL" - fi - exit ;; - i*86:*:5:[678]*) - # UnixWare 7.x, OpenUNIX and OpenServer 6. - case `/bin/uname -X | grep "^Machine"` in - *486*) UNAME_MACHINE=i486 ;; - *Pentium) UNAME_MACHINE=i586 ;; - *Pent*|*Celeron) UNAME_MACHINE=i686 ;; - esac - echo "$UNAME_MACHINE-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}{$UNAME_VERSION}" - exit ;; - i*86:*:3.2:*) - if test -f /usr/options/cb.name; then - UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then - UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` - (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 - (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ - && UNAME_MACHINE=i586 - (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ - && UNAME_MACHINE=i686 - (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ - && UNAME_MACHINE=i686 - echo "$UNAME_MACHINE"-pc-sco"$UNAME_REL" - else - echo "$UNAME_MACHINE"-pc-sysv32 - fi - exit ;; - pc:*:*:*) - # Left here for compatibility: - # uname -m prints for DJGPP always 'pc', but it prints nothing about - # the processor, so we play safe by assuming i586. - # Note: whatever this is, it MUST be the same as what config.sub - # prints for the "djgpp" host, or else GDB configure will decide that - # this is a cross-build. - echo i586-pc-msdosdjgpp - exit ;; - Intel:Mach:3*:*) - echo i386-pc-mach3 - exit ;; - paragon:*:*:*) - echo i860-intel-osf1 - exit ;; - i860:*:4.*:*) # i860-SVR4 - if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then - echo i860-stardent-sysv"$UNAME_RELEASE" # Stardent Vistra i860-SVR4 - else # Add other i860-SVR4 vendors below as they are discovered. - echo i860-unknown-sysv"$UNAME_RELEASE" # Unknown i860-SVR4 - fi - exit ;; - mini*:CTIX:SYS*5:*) - # "miniframe" - echo m68010-convergent-sysv - exit ;; - mc68k:UNIX:SYSTEM5:3.51m) - echo m68k-convergent-sysv - exit ;; - M680?0:D-NIX:5.3:*) - echo m68k-diab-dnix - exit ;; - M68*:*:R3V[5678]*:*) - test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; - 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) - OS_REL='' - test -r /etc/.relid \ - && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` - /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && { echo i486-ncr-sysv4.3"$OS_REL"; exit; } - /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ - && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;; - 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) - /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && { echo i486-ncr-sysv4; exit; } ;; - NCR*:*:4.2:* | MPRAS*:*:4.2:*) - OS_REL='.3' - test -r /etc/.relid \ - && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` - /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && { echo i486-ncr-sysv4.3"$OS_REL"; exit; } - /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ - && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } - /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ - && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;; - m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) - echo m68k-unknown-lynxos"$UNAME_RELEASE" - exit ;; - mc68030:UNIX_System_V:4.*:*) - echo m68k-atari-sysv4 - exit ;; - TSUNAMI:LynxOS:2.*:*) - echo sparc-unknown-lynxos"$UNAME_RELEASE" - exit ;; - rs6000:LynxOS:2.*:*) - echo rs6000-unknown-lynxos"$UNAME_RELEASE" - exit ;; - PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) - echo powerpc-unknown-lynxos"$UNAME_RELEASE" - exit ;; - SM[BE]S:UNIX_SV:*:*) - echo mips-dde-sysv"$UNAME_RELEASE" - exit ;; - RM*:ReliantUNIX-*:*:*) - echo mips-sni-sysv4 - exit ;; - RM*:SINIX-*:*:*) - echo mips-sni-sysv4 - exit ;; - *:SINIX-*:*:*) - if uname -p 2>/dev/null >/dev/null ; then - UNAME_MACHINE=`(uname -p) 2>/dev/null` - echo "$UNAME_MACHINE"-sni-sysv4 - else - echo ns32k-sni-sysv - fi - exit ;; - PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort - # says - echo i586-unisys-sysv4 - exit ;; - *:UNIX_System_V:4*:FTX*) - # From Gerald Hewes . - # How about differentiating between stratus architectures? -djm - echo hppa1.1-stratus-sysv4 - exit ;; - *:*:*:FTX*) - # From seanf@swdc.stratus.com. - echo i860-stratus-sysv4 - exit ;; - i*86:VOS:*:*) - # From Paul.Green@stratus.com. - echo "$UNAME_MACHINE"-stratus-vos - exit ;; - *:VOS:*:*) - # From Paul.Green@stratus.com. - echo hppa1.1-stratus-vos - exit ;; - mc68*:A/UX:*:*) - echo m68k-apple-aux"$UNAME_RELEASE" - exit ;; - news*:NEWS-OS:6*:*) - echo mips-sony-newsos6 - exit ;; - R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) - if [ -d /usr/nec ]; then - echo mips-nec-sysv"$UNAME_RELEASE" - else - echo mips-unknown-sysv"$UNAME_RELEASE" - fi - exit ;; - BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. - echo powerpc-be-beos - exit ;; - BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. - echo powerpc-apple-beos - exit ;; - BePC:BeOS:*:*) # BeOS running on Intel PC compatible. - echo i586-pc-beos - exit ;; - BePC:Haiku:*:*) # Haiku running on Intel PC compatible. - echo i586-pc-haiku - exit ;; - x86_64:Haiku:*:*) - echo x86_64-unknown-haiku - exit ;; - SX-4:SUPER-UX:*:*) - echo sx4-nec-superux"$UNAME_RELEASE" - exit ;; - SX-5:SUPER-UX:*:*) - echo sx5-nec-superux"$UNAME_RELEASE" - exit ;; - SX-6:SUPER-UX:*:*) - echo sx6-nec-superux"$UNAME_RELEASE" - exit ;; - SX-7:SUPER-UX:*:*) - echo sx7-nec-superux"$UNAME_RELEASE" - exit ;; - SX-8:SUPER-UX:*:*) - echo sx8-nec-superux"$UNAME_RELEASE" - exit ;; - SX-8R:SUPER-UX:*:*) - echo sx8r-nec-superux"$UNAME_RELEASE" - exit ;; - SX-ACE:SUPER-UX:*:*) - echo sxace-nec-superux"$UNAME_RELEASE" - exit ;; - Power*:Rhapsody:*:*) - echo powerpc-apple-rhapsody"$UNAME_RELEASE" - exit ;; - *:Rhapsody:*:*) - echo "$UNAME_MACHINE"-apple-rhapsody"$UNAME_RELEASE" - exit ;; - *:Darwin:*:*) - UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown - eval "$set_cc_for_build" - if test "$UNAME_PROCESSOR" = unknown ; then - UNAME_PROCESSOR=powerpc - fi - if test "`echo "$UNAME_RELEASE" | sed -e 's/\..*//'`" -le 10 ; then - if [ "$CC_FOR_BUILD" != no_compiler_found ]; then - if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ - (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ - grep IS_64BIT_ARCH >/dev/null - then - case $UNAME_PROCESSOR in - i386) UNAME_PROCESSOR=x86_64 ;; - powerpc) UNAME_PROCESSOR=powerpc64 ;; - esac - fi - # On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc - if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \ - (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ - grep IS_PPC >/dev/null - then - UNAME_PROCESSOR=powerpc - fi - fi - elif test "$UNAME_PROCESSOR" = i386 ; then - # Avoid executing cc on OS X 10.9, as it ships with a stub - # that puts up a graphical alert prompting to install - # developer tools. Any system running Mac OS X 10.7 or - # later (Darwin 11 and later) is required to have a 64-bit - # processor. This is not true of the ARM version of Darwin - # that Apple uses in portable devices. - UNAME_PROCESSOR=x86_64 - fi - echo "$UNAME_PROCESSOR"-apple-darwin"$UNAME_RELEASE" - exit ;; - *:procnto*:*:* | *:QNX:[0123456789]*:*) - UNAME_PROCESSOR=`uname -p` - if test "$UNAME_PROCESSOR" = x86; then - UNAME_PROCESSOR=i386 - UNAME_MACHINE=pc - fi - echo "$UNAME_PROCESSOR"-"$UNAME_MACHINE"-nto-qnx"$UNAME_RELEASE" - exit ;; - *:QNX:*:4*) - echo i386-pc-qnx - exit ;; - NEO-*:NONSTOP_KERNEL:*:*) - echo neo-tandem-nsk"$UNAME_RELEASE" - exit ;; - NSE-*:NONSTOP_KERNEL:*:*) - echo nse-tandem-nsk"$UNAME_RELEASE" - exit ;; - NSR-*:NONSTOP_KERNEL:*:*) - echo nsr-tandem-nsk"$UNAME_RELEASE" - exit ;; - NSV-*:NONSTOP_KERNEL:*:*) - echo nsv-tandem-nsk"$UNAME_RELEASE" - exit ;; - NSX-*:NONSTOP_KERNEL:*:*) - echo nsx-tandem-nsk"$UNAME_RELEASE" - exit ;; - *:NonStop-UX:*:*) - echo mips-compaq-nonstopux - exit ;; - BS2000:POSIX*:*:*) - echo bs2000-siemens-sysv - exit ;; - DS/*:UNIX_System_V:*:*) - echo "$UNAME_MACHINE"-"$UNAME_SYSTEM"-"$UNAME_RELEASE" - exit ;; - *:Plan9:*:*) - # "uname -m" is not consistent, so use $cputype instead. 386 - # is converted to i386 for consistency with other x86 - # operating systems. - if test "$cputype" = 386; then - UNAME_MACHINE=i386 - else - UNAME_MACHINE="$cputype" - fi - echo "$UNAME_MACHINE"-unknown-plan9 - exit ;; - *:TOPS-10:*:*) - echo pdp10-unknown-tops10 - exit ;; - *:TENEX:*:*) - echo pdp10-unknown-tenex - exit ;; - KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) - echo pdp10-dec-tops20 - exit ;; - XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) - echo pdp10-xkl-tops20 - exit ;; - *:TOPS-20:*:*) - echo pdp10-unknown-tops20 - exit ;; - *:ITS:*:*) - echo pdp10-unknown-its - exit ;; - SEI:*:*:SEIUX) - echo mips-sei-seiux"$UNAME_RELEASE" - exit ;; - *:DragonFly:*:*) - echo "$UNAME_MACHINE"-unknown-dragonfly"`echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`" - exit ;; - *:*VMS:*:*) - UNAME_MACHINE=`(uname -p) 2>/dev/null` - case "$UNAME_MACHINE" in - A*) echo alpha-dec-vms ; exit ;; - I*) echo ia64-dec-vms ; exit ;; - V*) echo vax-dec-vms ; exit ;; - esac ;; - *:XENIX:*:SysV) - echo i386-pc-xenix - exit ;; - i*86:skyos:*:*) - echo "$UNAME_MACHINE"-pc-skyos"`echo "$UNAME_RELEASE" | sed -e 's/ .*$//'`" - exit ;; - i*86:rdos:*:*) - echo "$UNAME_MACHINE"-pc-rdos - exit ;; - i*86:AROS:*:*) - echo "$UNAME_MACHINE"-pc-aros - exit ;; - x86_64:VMkernel:*:*) - echo "$UNAME_MACHINE"-unknown-esx - exit ;; - amd64:Isilon\ OneFS:*:*) - echo x86_64-unknown-onefs - exit ;; -esac - -echo "$0: unable to guess system type" >&2 - -case "$UNAME_MACHINE:$UNAME_SYSTEM" in - mips:Linux | mips64:Linux) - # If we got here on MIPS GNU/Linux, output extra information. - cat >&2 <&2 </dev/null || echo unknown` -uname -r = `(uname -r) 2>/dev/null || echo unknown` -uname -s = `(uname -s) 2>/dev/null || echo unknown` -uname -v = `(uname -v) 2>/dev/null || echo unknown` - -/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` -/bin/uname -X = `(/bin/uname -X) 2>/dev/null` - -hostinfo = `(hostinfo) 2>/dev/null` -/bin/universe = `(/bin/universe) 2>/dev/null` -/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` -/bin/arch = `(/bin/arch) 2>/dev/null` -/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` -/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` - -UNAME_MACHINE = "$UNAME_MACHINE" -UNAME_RELEASE = "$UNAME_RELEASE" -UNAME_SYSTEM = "$UNAME_SYSTEM" -UNAME_VERSION = "$UNAME_VERSION" -EOF - -exit 1 - -# Local variables: -# eval: (add-hook 'write-file-functions 'time-stamp) -# time-stamp-start: "timestamp='" -# time-stamp-format: "%:y-%02m-%02d" -# time-stamp-end: "'" -# End: diff --git a/Extended/libwebp/config.log b/Extended/libwebp/config.log deleted file mode 100644 index 4e2f5c4..0000000 --- a/Extended/libwebp/config.log +++ /dev/null @@ -1,1855 +0,0 @@ -This file contains any messages produced by compilers while -running configure, to aid debugging if configure makes a mistake. - -It was created by libwebp configure 1.1.0, which was -generated by GNU Autoconf 2.69. Invocation command line was - - $ ./configure - -## --------- ## -## Platform. ## -## --------- ## - -hostname = nolan-imac-pro.local -uname -m = x86_64 -uname -r = 19.6.0 -uname -s = Darwin -uname -v = Darwin Kernel Version 19.6.0: Sun Jul 5 00:43:10 PDT 2020; root:xnu-6153.141.1~9/RELEASE_X86_64 - -/usr/bin/uname -p = i386 -/bin/uname -X = unknown - -/bin/arch = unknown -/usr/bin/arch -k = unknown -/usr/convex/getsysinfo = unknown -/usr/bin/hostinfo = Mach kernel version: - Darwin Kernel Version 19.6.0: Sun Jul 5 00:43:10 PDT 2020; root:xnu-6153.141.1~9/RELEASE_X86_64 -Kernel configured for up to 20 processors. -10 processors are physically available. -20 processors are logically available. -Processor type: x86_64h (Intel x86-64h Haswell) -Processors active: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 -Primary memory available: 64.00 gigabytes -Default processor set: 882 tasks, 3492 threads, 20 processors -Load average: 4.75, Mach factor: 15.24 -/bin/machine = unknown -/usr/bin/oslevel = unknown -/bin/universe = unknown - -PATH: /opt/twitter_mde/bin -PATH: /opt/twitter_mde/homebrew_minimal/mde_bin -PATH: /opt/local/bin -PATH: /opt/local/sbin -PATH: /Users/nobrien/.tools-cache/home/aurora/tools/dottools/bin -PATH: /Users/nobrien/.tools-cache/home/university/tools/docbird/bin -PATH: /Users/nobrien/.tools-cache/home/aurora/tools/client/bin -PATH: /usr/local/git/bin -PATH: /opt/twitter/bin -PATH: /opt/twitter/sbin -PATH: /usr/local/mysql/bin -PATH: /Users/nobrien/bin -PATH: /Users/nobrien/.twitools/src/twitter-utilities/sbt -PATH: /Users/nobrien/.twitools/src/twitter-utilities/sbt11 -PATH: /Users/nobrien/.twitools/src/twitter-utilities/bin -PATH: /Users/nobrien/.tools-cache/home/university/tools/docbird/bin -PATH: /Users/nobrien/.tools-cache/home/aurora/tools/client/bin -PATH: /Users/nobrien/.tools-cache/home/aurora/tools/dottools/bin -PATH: /usr/local/bin -PATH: /usr/bin -PATH: /bin -PATH: /usr/sbin -PATH: /sbin -PATH: /opt/X11/bin -PATH: /Library/Apple/usr/bin -PATH: /usr/local/git/bin -PATH: /Applications/TextMate.app/Contents/SharedSupport/Support/bin -PATH: /usr/local/ImageMagick-6.9.2/bin -PATH: /Users/nobrien/Library/Android/sdk/tools -PATH: /Users/nobrien/Library/Android/sdk/platform-tools -PATH: /Users/nobrien/Library/Android/sdk/build-tools/28.0.3 -PATH: /opt/twitter_mde/data/node/bin -PATH: /Users/nobrien/.npm-global/bin - - -## ----------- ## -## Core tests. ## -## ----------- ## - -configure:2381: checking build system type -configure:2395: result: x86_64-apple-darwin19.6.0 -configure:2415: checking host system type -configure:2428: result: x86_64-apple-darwin19.6.0 -configure:2465: checking for a BSD-compatible install -configure:2533: result: /opt/twitter_mde/homebrew_minimal/mde_bin/ginstall -c -configure:2544: checking whether build environment is sane -configure:2599: result: yes -configure:2750: checking for a thread-safe mkdir -p -configure:2789: result: /opt/twitter_mde/homebrew_minimal/mde_bin/gmkdir -p -configure:2796: checking for gawk -configure:2826: result: no -configure:2796: checking for mawk -configure:2826: result: no -configure:2796: checking for nawk -configure:2826: result: no -configure:2796: checking for awk -configure:2812: found /usr/bin/awk -configure:2823: result: awk -configure:2834: checking whether make sets $(MAKE) -configure:2856: result: yes -configure:2885: checking whether make supports nested variables -configure:2902: result: yes -configure:3033: checking whether make supports the include directive -configure:3048: make -f confmf.GNU && cat confinc.out -this is the am__doit target -configure:3051: $? = 0 -configure:3070: result: yes (GNU style) -configure:3140: checking for gcc -configure:3156: found /usr/bin/gcc -configure:3167: result: gcc -configure:3396: checking for C compiler version -configure:3405: gcc --version >&5 -Apple clang version 11.0.3 (clang-1103.0.32.62) -Target: x86_64-apple-darwin19.6.0 -Thread model: posix -InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin -Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/c++/4.2.1 -configure:3416: $? = 0 -configure:3405: gcc -v >&5 -Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/c++/4.2.1 -Apple clang version 11.0.3 (clang-1103.0.32.62) -Target: x86_64-apple-darwin19.6.0 -Thread model: posix -InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin -configure:3416: $? = 0 -configure:3405: gcc -V >&5 -clang: error: unsupported option '-V -Wno-objc-signed-char-bool-implicit-int-conversion' -clang: error: no input files -configure:3416: $? = 1 -configure:3405: gcc -qversion >&5 -clang: error: unknown argument '-qversion'; did you mean '--version'? -clang: error: no input files -configure:3416: $? = 1 -configure:3436: checking whether the C compiler works -configure:3458: gcc conftest.c >&5 -configure:3462: $? = 0 -configure:3510: result: yes -configure:3513: checking for C compiler default output file name -configure:3515: result: a.out -configure:3521: checking for suffix of executables -configure:3528: gcc -o conftest conftest.c >&5 -configure:3532: $? = 0 -configure:3554: result: -configure:3576: checking whether we are cross compiling -configure:3584: gcc -o conftest conftest.c >&5 -configure:3588: $? = 0 -configure:3595: ./conftest -configure:3599: $? = 0 -configure:3614: result: no -configure:3619: checking for suffix of object files -configure:3641: gcc -c conftest.c >&5 -configure:3645: $? = 0 -configure:3666: result: o -configure:3670: checking whether we are using the GNU C compiler -configure:3689: gcc -c conftest.c >&5 -configure:3689: $? = 0 -configure:3698: result: yes -configure:3707: checking whether gcc accepts -g -configure:3727: gcc -c -g conftest.c >&5 -configure:3727: $? = 0 -configure:3768: result: yes -configure:3785: checking for gcc option to accept ISO C89 -configure:3848: gcc -c -g -O2 conftest.c >&5 -configure:3848: $? = 0 -configure:3861: result: none needed -configure:3886: checking whether gcc understands -c and -o together -configure:3908: gcc -c conftest.c -o conftest2.o -configure:3911: $? = 0 -configure:3908: gcc -c conftest.c -o conftest2.o -configure:3911: $? = 0 -configure:3923: result: yes -configure:3942: checking dependency style of gcc -configure:4053: result: gcc3 -configure:4118: checking for ar -configure:4134: found /usr/bin/ar -configure:4145: result: ar -configure:4171: checking the archiver (ar) interface -configure:4187: gcc -c -g -O2 conftest.c >&5 -configure:4187: $? = 0 -configure:4189: ar cru libconftest.a conftest.o >&5 -configure:4192: $? = 0 -configure:4220: result: ar -configure:4287: checking how to print strings -configure:4314: result: printf -configure:4335: checking for a sed that does not truncate output -configure:4399: result: /usr/bin/sed -configure:4417: checking for grep that handles long lines and -e -configure:4475: result: /usr/bin/grep -configure:4480: checking for egrep -configure:4542: result: /usr/bin/grep -E -configure:4547: checking for fgrep -configure:4609: result: /usr/bin/grep -F -configure:4644: checking for ld used by gcc -configure:4711: result: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld -configure:4718: checking if the linker (/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld) is GNU ld -configure:4733: result: no -configure:4745: checking for BSD- or MS-compatible name lister (nm) -configure:4799: result: /usr/bin/nm -B -configure:4929: checking the name lister (/usr/bin/nm -B) interface -configure:4936: gcc -c -g -O2 conftest.c >&5 -configure:4939: /usr/bin/nm -B "conftest.o" -configure:4942: output -0000000000000208 S _some_variable -configure:4949: result: BSD nm -configure:4952: checking whether ln -s works -configure:4956: result: yes -configure:4964: checking the maximum length of command line arguments -configure:5095: result: 196608 -configure:5143: checking how to convert x86_64-apple-darwin19.6.0 file names to x86_64-apple-darwin19.6.0 format -configure:5183: result: func_convert_file_noop -configure:5190: checking how to convert x86_64-apple-darwin19.6.0 file names to toolchain format -configure:5210: result: func_convert_file_noop -configure:5217: checking for /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld option to reload object files -configure:5224: result: -r -configure:5298: checking for objdump -configure:5314: found /usr/bin/objdump -configure:5325: result: objdump -configure:5357: checking how to recognize dependent libraries -configure:5557: result: pass_all -configure:5642: checking for dlltool -configure:5672: result: no -configure:5702: checking how to associate runtime and link libraries -configure:5729: result: printf %s\n -configure:5853: checking for archiver @FILE support -configure:5870: gcc -c -g -O2 conftest.c >&5 -configure:5870: $? = 0 -configure:5873: ar cru libconftest.a @conftest.lst >&5 -ar: @conftest.lst: No such file or directory -configure:5876: $? = 1 -configure:5896: result: no -configure:5954: checking for strip -configure:5970: found /usr/bin/strip -configure:5981: result: strip -configure:6053: checking for ranlib -configure:6069: found /usr/bin/ranlib -configure:6080: result: ranlib -configure:6182: checking command to parse /usr/bin/nm -B output from gcc object -configure:6335: gcc -c -g -O2 conftest.c >&5 -configure:6338: $? = 0 -configure:6342: /usr/bin/nm -B conftest.o | sed -n -e 's/^.*[ ]\([BCDEGRST][BCDEGRST]*\)[ ][ ]*\([_A-Za-z][_A-Za-z0-9]*\)$/\1 \2 \2/p' | sed '/ __gnu_lto/d' > conftest.nm -cannot find nm_test_var in conftest.nm -configure:6335: gcc -c -g -O2 conftest.c >&5 -configure:6338: $? = 0 -configure:6342: /usr/bin/nm -B conftest.o | sed -n -e 's/^.*[ ]\([BCDEGRST][BCDEGRST]*\)[ ][ ]*_\([_A-Za-z][_A-Za-z0-9]*\)$/\1 _\2 \2/p' | sed '/ __gnu_lto/d' > conftest.nm -configure:6408: gcc -o conftest -g -O2 conftest.c conftstm.o >&5 -warning: (x86_64) could not find object file symbol for symbol _main -configure:6411: $? = 0 -configure:6449: result: ok -configure:6496: checking for sysroot -configure:6526: result: no -configure:6533: checking for a working dd -configure:6571: result: /bin/dd -configure:6575: checking how to truncate binary pipes -configure:6590: result: /bin/dd bs=4096 count=1 -configure:6919: checking for mt -configure:6949: result: no -configure:6969: checking if : is a manifest tool -configure:6975: : '-?' -configure:6983: result: no -configure:7039: checking for dsymutil -configure:7055: found /usr/bin/dsymutil -configure:7066: result: dsymutil -configure:7131: checking for nmedit -configure:7147: found /usr/bin/nmedit -configure:7158: result: nmedit -configure:7223: checking for lipo -configure:7239: found /usr/bin/lipo -configure:7250: result: lipo -configure:7315: checking for otool -configure:7331: found /usr/bin/otool -configure:7342: result: otool -configure:7407: checking for otool64 -configure:7437: result: no -configure:7482: checking for -single_module linker flag -gcc -g -O2 -o libconftest.dylib -dynamiclib -Wl,-single_module conftest.c -configure:7515: result: yes -configure:7518: checking for -exported_symbols_list linker flag -configure:7538: gcc -o conftest -g -O2 -Wl,-exported_symbols_list,conftest.sym conftest.c >&5 -configure:7538: $? = 0 -configure:7548: result: yes -configure:7551: checking for -force_load linker flag -gcc -g -O2 -c -o conftest.o conftest.c -ar cru libconftest.a conftest.o -ranlib libconftest.a -gcc -g -O2 -o conftest conftest.c -Wl,-force_load,./libconftest.a -configure:7583: result: yes -configure:7660: checking how to run the C preprocessor -configure:7691: gcc -E conftest.c -configure:7691: $? = 0 -configure:7705: gcc -E conftest.c -conftest.c:11:10: fatal error: 'ac_nonexistent.h' file not found -#include - ^~~~~~~~~~~~~~~~~~ -1 error generated. -configure:7705: $? = 1 -configure: failed program was: -| /* confdefs.h */ -| #define PACKAGE_NAME "libwebp" -| #define PACKAGE_TARNAME "libwebp" -| #define PACKAGE_VERSION "1.1.0" -| #define PACKAGE_STRING "libwebp 1.1.0" -| #define PACKAGE_BUGREPORT "https://bugs.chromium.org/p/webp" -| #define PACKAGE_URL "http://developers.google.com/speed/webp" -| #define PACKAGE "libwebp" -| #define VERSION "1.1.0" -| /* end confdefs.h. */ -| #include -configure:7730: result: gcc -E -configure:7750: gcc -E conftest.c -configure:7750: $? = 0 -configure:7764: gcc -E conftest.c -conftest.c:11:10: fatal error: 'ac_nonexistent.h' file not found -#include - ^~~~~~~~~~~~~~~~~~ -1 error generated. -configure:7764: $? = 1 -configure: failed program was: -| /* confdefs.h */ -| #define PACKAGE_NAME "libwebp" -| #define PACKAGE_TARNAME "libwebp" -| #define PACKAGE_VERSION "1.1.0" -| #define PACKAGE_STRING "libwebp 1.1.0" -| #define PACKAGE_BUGREPORT "https://bugs.chromium.org/p/webp" -| #define PACKAGE_URL "http://developers.google.com/speed/webp" -| #define PACKAGE "libwebp" -| #define VERSION "1.1.0" -| /* end confdefs.h. */ -| #include -configure:7793: checking for ANSI C header files -configure:7813: gcc -c -g -O2 conftest.c >&5 -configure:7813: $? = 0 -configure:7886: gcc -o conftest -g -O2 conftest.c >&5 -configure:7886: $? = 0 -configure:7886: ./conftest -configure:7886: $? = 0 -configure:7897: result: yes -configure:7910: checking for sys/types.h -configure:7910: gcc -c -g -O2 conftest.c >&5 -configure:7910: $? = 0 -configure:7910: result: yes -configure:7910: checking for sys/stat.h -configure:7910: gcc -c -g -O2 conftest.c >&5 -configure:7910: $? = 0 -configure:7910: result: yes -configure:7910: checking for stdlib.h -configure:7910: gcc -c -g -O2 conftest.c >&5 -configure:7910: $? = 0 -configure:7910: result: yes -configure:7910: checking for string.h -configure:7910: gcc -c -g -O2 conftest.c >&5 -configure:7910: $? = 0 -configure:7910: result: yes -configure:7910: checking for memory.h -configure:7910: gcc -c -g -O2 conftest.c >&5 -configure:7910: $? = 0 -configure:7910: result: yes -configure:7910: checking for strings.h -configure:7910: gcc -c -g -O2 conftest.c >&5 -configure:7910: $? = 0 -configure:7910: result: yes -configure:7910: checking for inttypes.h -configure:7910: gcc -c -g -O2 conftest.c >&5 -configure:7910: $? = 0 -configure:7910: result: yes -configure:7910: checking for stdint.h -configure:7910: gcc -c -g -O2 conftest.c >&5 -configure:7910: $? = 0 -configure:7910: result: yes -configure:7910: checking for unistd.h -configure:7910: gcc -c -g -O2 conftest.c >&5 -configure:7910: $? = 0 -configure:7910: result: yes -configure:7924: checking for dlfcn.h -configure:7924: gcc -c -g -O2 conftest.c >&5 -configure:7924: $? = 0 -configure:7924: result: yes -configure:8180: checking for objdir -configure:8195: result: .libs -configure:8459: checking if gcc supports -fno-rtti -fno-exceptions -configure:8477: gcc -c -g -O2 -fno-rtti -fno-exceptions conftest.c >&5 -configure:8481: $? = 0 -configure:8494: result: yes -configure:8852: checking for gcc option to produce PIC -configure:8859: result: -fno-common -DPIC -configure:8867: checking if gcc PIC flag -fno-common -DPIC works -configure:8885: gcc -c -g -O2 -fno-common -DPIC -DPIC conftest.c >&5 -configure:8889: $? = 0 -configure:8902: result: yes -configure:8931: checking if gcc static flag -static works -configure:8959: result: no -configure:8974: checking if gcc supports -c -o file.o -configure:8995: gcc -c -g -O2 -o out/conftest2.o conftest.c >&5 -configure:8999: $? = 0 -configure:9021: result: yes -configure:9029: checking if gcc supports -c -o file.o -configure:9076: result: yes -configure:9109: checking whether the gcc linker (/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld) supports shared libraries -configure:10372: result: yes -configure:10612: checking dynamic linker characteristics -configure:11442: result: darwin19.6.0 dyld -configure:11564: checking how to hardcode library paths into programs -configure:11589: result: immediate -configure:12137: checking whether stripping libraries is possible -configure:12151: result: yes -configure:12177: checking if libtool supports shared libraries -configure:12179: result: yes -configure:12182: checking whether to build shared libraries -configure:12207: result: yes -configure:12210: checking whether to build static libraries -configure:12214: result: yes -configure:12251: checking for a sed that does not truncate output -configure:12315: result: /usr/bin/sed -configure:12333: checking whether make supports nested variables -configure:12350: result: yes -configure:12362: checking whether byte ordering is bigendian -configure:12377: gcc -c -g -O2 conftest.c >&5 -configure:12377: $? = 0 -configure:12422: gcc -c -g -O2 conftest.c >&5 -configure:12422: $? = 0 -configure:12440: gcc -c -g -O2 conftest.c >&5 -conftest.c:30:4: error: use of undeclared identifier 'not' - not big endian - ^ -1 error generated. -configure:12440: $? = 1 -configure: failed program was: -| /* confdefs.h */ -| #define PACKAGE_NAME "libwebp" -| #define PACKAGE_TARNAME "libwebp" -| #define PACKAGE_VERSION "1.1.0" -| #define PACKAGE_STRING "libwebp 1.1.0" -| #define PACKAGE_BUGREPORT "https://bugs.chromium.org/p/webp" -| #define PACKAGE_URL "http://developers.google.com/speed/webp" -| #define PACKAGE "libwebp" -| #define VERSION "1.1.0" -| #define STDC_HEADERS 1 -| #define HAVE_SYS_TYPES_H 1 -| #define HAVE_SYS_STAT_H 1 -| #define HAVE_STDLIB_H 1 -| #define HAVE_STRING_H 1 -| #define HAVE_MEMORY_H 1 -| #define HAVE_STRINGS_H 1 -| #define HAVE_INTTYPES_H 1 -| #define HAVE_STDINT_H 1 -| #define HAVE_UNISTD_H 1 -| #define HAVE_DLFCN_H 1 -| #define LT_OBJDIR ".libs/" -| /* end confdefs.h. */ -| #include -| #include -| -| int -| main () -| { -| #if BYTE_ORDER != BIG_ENDIAN -| not big endian -| #endif -| -| ; -| return 0; -| } -configure:12568: result: no -configure:12599: checking whether asserts are enabled -configure:12609: result: no -configure:12626: checking whether gcc supports -fvisibility=hidden -configure:12632: gcc -c -Werror -fvisibility=hidden conftest.c >&5 -configure:12632: $? = 0 -configure:12633: result: yes -configure:12644: checking whether gcc supports -Wall -configure:12650: gcc -c -Werror -Wall conftest.c >&5 -configure:12650: $? = 0 -configure:12651: result: yes -configure:12662: checking whether gcc supports -Wconstant-conversion -configure:12668: gcc -c -Werror -Wconstant-conversion conftest.c >&5 -configure:12668: $? = 0 -configure:12669: result: yes -configure:12680: checking whether gcc supports -Wdeclaration-after-statement -configure:12686: gcc -c -Werror -Wdeclaration-after-statement conftest.c >&5 -configure:12686: $? = 0 -configure:12687: result: yes -configure:12698: checking whether gcc supports -Wextra -configure:12704: gcc -c -Werror -Wextra conftest.c >&5 -configure:12704: $? = 0 -configure:12705: result: yes -configure:12716: checking whether gcc supports -Wfloat-conversion -configure:12722: gcc -c -Werror -Wfloat-conversion conftest.c >&5 -configure:12722: $? = 0 -configure:12723: result: yes -configure:12734: checking whether gcc supports -Wformat -Wformat-nonliteral -configure:12740: gcc -c -Werror -Wformat -Wformat-nonliteral conftest.c >&5 -configure:12740: $? = 0 -configure:12741: result: yes -configure:12752: checking whether gcc supports -Wformat -Wformat-security -configure:12758: gcc -c -Werror -Wformat -Wformat-security conftest.c >&5 -configure:12758: $? = 0 -configure:12759: result: yes -configure:12770: checking whether gcc supports -Wmissing-declarations -configure:12776: gcc -c -Werror -Wmissing-declarations conftest.c >&5 -configure:12776: $? = 0 -configure:12777: result: yes -configure:12788: checking whether gcc supports -Wmissing-prototypes -configure:12794: gcc -c -Werror -Wmissing-prototypes conftest.c >&5 -configure:12794: $? = 0 -configure:12795: result: yes -configure:12806: checking whether gcc supports -Wold-style-definition -configure:12812: gcc -c -Werror -Wold-style-definition conftest.c >&5 -configure:12812: $? = 0 -configure:12813: result: yes -configure:12824: checking whether gcc supports -Wparentheses-equality -configure:12830: gcc -c -Werror -Wparentheses-equality conftest.c >&5 -configure:12830: $? = 0 -configure:12831: result: yes -configure:12842: checking whether gcc supports -Wshadow -configure:12848: gcc -c -Werror -Wshadow conftest.c >&5 -configure:12848: $? = 0 -configure:12849: result: yes -configure:12860: checking whether gcc supports -Wshorten-64-to-32 -configure:12866: gcc -c -Werror -Wshorten-64-to-32 conftest.c >&5 -configure:12866: $? = 0 -configure:12867: result: yes -configure:12878: checking whether gcc supports -Wundef -configure:12884: gcc -c -Werror -Wundef conftest.c >&5 -configure:12884: $? = 0 -configure:12885: result: yes -configure:12896: checking whether gcc supports -Wunreachable-code -configure:12902: gcc -c -Werror -Wunreachable-code conftest.c >&5 -configure:12902: $? = 0 -configure:12903: result: yes -configure:12914: checking whether gcc supports -Wunused-but-set-variable -configure:12920: gcc -c -Werror -Wunused-but-set-variable conftest.c >&5 -error: unknown warning option '-Wunused-but-set-variable'; did you mean '-Wunused-const-variable'? [-Werror,-Wunknown-warning-option] -configure:12920: $? = 1 -configure: failed program was: -| /* confdefs.h */ -| #define PACKAGE_NAME "libwebp" -| #define PACKAGE_TARNAME "libwebp" -| #define PACKAGE_VERSION "1.1.0" -| #define PACKAGE_STRING "libwebp 1.1.0" -| #define PACKAGE_BUGREPORT "https://bugs.chromium.org/p/webp" -| #define PACKAGE_URL "http://developers.google.com/speed/webp" -| #define PACKAGE "libwebp" -| #define VERSION "1.1.0" -| #define STDC_HEADERS 1 -| #define HAVE_SYS_TYPES_H 1 -| #define HAVE_SYS_STAT_H 1 -| #define HAVE_STDLIB_H 1 -| #define HAVE_STRING_H 1 -| #define HAVE_MEMORY_H 1 -| #define HAVE_STRINGS_H 1 -| #define HAVE_INTTYPES_H 1 -| #define HAVE_STDINT_H 1 -| #define HAVE_UNISTD_H 1 -| #define HAVE_DLFCN_H 1 -| #define LT_OBJDIR ".libs/" -| /* end confdefs.h. */ -| int main(void) { return 0; } -configure:12925: result: no -configure:12932: checking whether gcc supports -Wunused -configure:12938: gcc -c -Werror -Wunused conftest.c >&5 -configure:12938: $? = 0 -configure:12939: result: yes -configure:12950: checking whether gcc supports -Wvla -configure:12956: gcc -c -Werror -Wvla conftest.c >&5 -configure:12956: $? = 0 -configure:12957: result: yes -configure:13019: gcc -c -g -O2 conftest.c >&5 -configure:13019: $? = 0 -configure:13058: checking whether gcc supports -msse4.1 -configure:13064: gcc -c -Werror -msse4.1 conftest.c >&5 -configure:13064: $? = 0 -configure:13065: result: yes -configure:13078: checking smmintrin.h usability -configure:13078: gcc -c -g -O2 -msse4.1 conftest.c >&5 -configure:13078: $? = 0 -configure:13078: result: yes -configure:13078: checking smmintrin.h presence -configure:13078: gcc -E conftest.c -configure:13078: $? = 0 -configure:13078: result: yes -configure:13078: checking for smmintrin.h -configure:13078: result: yes -configure:13104: checking whether gcc supports -msse2 -configure:13110: gcc -c -Werror -msse2 conftest.c >&5 -configure:13110: $? = 0 -configure:13111: result: yes -configure:13124: checking emmintrin.h usability -configure:13124: gcc -c -g -O2 -msse2 conftest.c >&5 -configure:13124: $? = 0 -configure:13124: result: yes -configure:13124: checking emmintrin.h presence -configure:13124: gcc -E conftest.c -configure:13124: $? = 0 -configure:13124: result: yes -configure:13124: checking for emmintrin.h -configure:13124: result: yes -configure:13277: checking for __builtin_bswap16 -configure:13290: gcc -o conftest -g -O2 conftest.c >&5 -configure:13290: $? = 0 -configure:13291: result: yes -configure:13314: checking for __builtin_bswap32 -configure:13327: gcc -o conftest -g -O2 conftest.c >&5 -configure:13327: $? = 0 -configure:13328: result: yes -configure:13351: checking for __builtin_bswap64 -configure:13364: gcc -o conftest -g -O2 conftest.c >&5 -configure:13364: $? = 0 -configure:13365: result: yes -configure:13391: checking for threading support... -configure:13505: checking if compiler needs -Werror to reject unknown flags -configure:13521: gcc -c -g -O2 -Werror -Wunknown-warning-option -Wsizeof-array-argument conftest.c >&5 -configure:13521: $? = 0 -configure:13522: result: yes -configure:13542: checking whether pthreads work with -pthread -configure:13630: gcc -o conftest -g -O2 -pthread -Werror conftest.c >&5 -configure:13630: $? = 0 -configure:13639: result: yes -configure:13658: checking for joinable pthread attribute -configure:13673: gcc -o conftest -g -O2 -pthread conftest.c >&5 -configure:13673: $? = 0 -configure:13679: result: PTHREAD_CREATE_JOINABLE -configure:13689: checking if more special flags are required for pthreads -configure:13704: result: -D_THREAD_SAFE -configure:13710: checking for PTHREAD_PRIO_INHERIT -configure:13727: gcc -o conftest -g -O2 -pthread conftest.c >&5 -configure:13727: $? = 0 -configure:13736: result: yes -configure:13848: checking if threading is enabled... yes -configure:13889: checking whether gcc supports -Wno-deprecated-declarations -configure:13895: gcc -c -Werror -Wno-deprecated-declarations conftest.c >&5 -configure:13895: $? = 0 -configure:13896: result: yes -configure:13924: checking GL/glut.h usability -configure:13924: gcc -c -g -O2 -D_THREAD_SAFE -pthread conftest.c >&5 -conftest.c:63:10: fatal error: 'GL/glut.h' file not found -#include - ^~~~~~~~~~~ -1 error generated. -configure:13924: $? = 1 -configure: failed program was: -| /* confdefs.h */ -| #define PACKAGE_NAME "libwebp" -| #define PACKAGE_TARNAME "libwebp" -| #define PACKAGE_VERSION "1.1.0" -| #define PACKAGE_STRING "libwebp 1.1.0" -| #define PACKAGE_BUGREPORT "https://bugs.chromium.org/p/webp" -| #define PACKAGE_URL "http://developers.google.com/speed/webp" -| #define PACKAGE "libwebp" -| #define VERSION "1.1.0" -| #define STDC_HEADERS 1 -| #define HAVE_SYS_TYPES_H 1 -| #define HAVE_SYS_STAT_H 1 -| #define HAVE_STDLIB_H 1 -| #define HAVE_STRING_H 1 -| #define HAVE_MEMORY_H 1 -| #define HAVE_STRINGS_H 1 -| #define HAVE_INTTYPES_H 1 -| #define HAVE_STDINT_H 1 -| #define HAVE_UNISTD_H 1 -| #define HAVE_DLFCN_H 1 -| #define LT_OBJDIR ".libs/" -| #define WEBP_HAVE_SSE41 1 -| #define WEBP_HAVE_SSE2 1 -| #define HAVE_BUILTIN_BSWAP16 1 -| #define HAVE_BUILTIN_BSWAP32 1 -| #define HAVE_BUILTIN_BSWAP64 1 -| #define HAVE_PTHREAD_PRIO_INHERIT 1 -| #define WEBP_USE_THREAD 1 -| /* end confdefs.h. */ -| #include -| #ifdef HAVE_SYS_TYPES_H -| # include -| #endif -| #ifdef HAVE_SYS_STAT_H -| # include -| #endif -| #ifdef STDC_HEADERS -| # include -| # include -| #else -| # ifdef HAVE_STDLIB_H -| # include -| # endif -| #endif -| #ifdef HAVE_STRING_H -| # if !defined STDC_HEADERS && defined HAVE_MEMORY_H -| # include -| # endif -| # include -| #endif -| #ifdef HAVE_STRINGS_H -| # include -| #endif -| #ifdef HAVE_INTTYPES_H -| # include -| #endif -| #ifdef HAVE_STDINT_H -| # include -| #endif -| #ifdef HAVE_UNISTD_H -| # include -| #endif -| #include -configure:13924: result: no -configure:13924: checking GL/glut.h presence -configure:13924: gcc -E conftest.c -conftest.c:30:10: fatal error: 'GL/glut.h' file not found -#include - ^~~~~~~~~~~ -1 error generated. -configure:13924: $? = 1 -configure: failed program was: -| /* confdefs.h */ -| #define PACKAGE_NAME "libwebp" -| #define PACKAGE_TARNAME "libwebp" -| #define PACKAGE_VERSION "1.1.0" -| #define PACKAGE_STRING "libwebp 1.1.0" -| #define PACKAGE_BUGREPORT "https://bugs.chromium.org/p/webp" -| #define PACKAGE_URL "http://developers.google.com/speed/webp" -| #define PACKAGE "libwebp" -| #define VERSION "1.1.0" -| #define STDC_HEADERS 1 -| #define HAVE_SYS_TYPES_H 1 -| #define HAVE_SYS_STAT_H 1 -| #define HAVE_STDLIB_H 1 -| #define HAVE_STRING_H 1 -| #define HAVE_MEMORY_H 1 -| #define HAVE_STRINGS_H 1 -| #define HAVE_INTTYPES_H 1 -| #define HAVE_STDINT_H 1 -| #define HAVE_UNISTD_H 1 -| #define HAVE_DLFCN_H 1 -| #define LT_OBJDIR ".libs/" -| #define WEBP_HAVE_SSE41 1 -| #define WEBP_HAVE_SSE2 1 -| #define HAVE_BUILTIN_BSWAP16 1 -| #define HAVE_BUILTIN_BSWAP32 1 -| #define HAVE_BUILTIN_BSWAP64 1 -| #define HAVE_PTHREAD_PRIO_INHERIT 1 -| #define WEBP_USE_THREAD 1 -| /* end confdefs.h. */ -| #include -configure:13924: result: no -configure:13924: checking for GL/glut.h -configure:13924: result: no -configure:13924: checking GLUT/glut.h usability -configure:13924: gcc -c -g -O2 -D_THREAD_SAFE -pthread conftest.c >&5 -configure:13924: $? = 0 -configure:13924: result: yes -configure:13924: checking GLUT/glut.h presence -configure:13924: gcc -E conftest.c -configure:13924: $? = 0 -configure:13924: result: yes -configure:13924: checking for GLUT/glut.h -configure:13924: result: yes -configure:13963: checking for library containing glBegin -configure:13994: gcc -o conftest -g -O2 -D_THREAD_SAFE -pthread conftest.c >&5 -Undefined symbols for architecture x86_64: - "_glBegin", referenced from: - _main in conftest-c5629e.o -ld: symbol(s) not found for architecture x86_64 -clang: error: linker command failed with exit code 1 (use -v to see invocation) -configure:13994: $? = 1 -configure: failed program was: -| /* confdefs.h */ -| #define PACKAGE_NAME "libwebp" -| #define PACKAGE_TARNAME "libwebp" -| #define PACKAGE_VERSION "1.1.0" -| #define PACKAGE_STRING "libwebp 1.1.0" -| #define PACKAGE_BUGREPORT "https://bugs.chromium.org/p/webp" -| #define PACKAGE_URL "http://developers.google.com/speed/webp" -| #define PACKAGE "libwebp" -| #define VERSION "1.1.0" -| #define STDC_HEADERS 1 -| #define HAVE_SYS_TYPES_H 1 -| #define HAVE_SYS_STAT_H 1 -| #define HAVE_STDLIB_H 1 -| #define HAVE_STRING_H 1 -| #define HAVE_MEMORY_H 1 -| #define HAVE_STRINGS_H 1 -| #define HAVE_INTTYPES_H 1 -| #define HAVE_STDINT_H 1 -| #define HAVE_UNISTD_H 1 -| #define HAVE_DLFCN_H 1 -| #define LT_OBJDIR ".libs/" -| #define WEBP_HAVE_SSE41 1 -| #define WEBP_HAVE_SSE2 1 -| #define HAVE_BUILTIN_BSWAP16 1 -| #define HAVE_BUILTIN_BSWAP32 1 -| #define HAVE_BUILTIN_BSWAP64 1 -| #define HAVE_PTHREAD_PRIO_INHERIT 1 -| #define WEBP_USE_THREAD 1 -| #define HAVE_GLUT_GLUT_H 1 -| /* end confdefs.h. */ -| -| /* Override any GCC internal prototype to avoid an error. -| Use char because int might match the return type of a GCC -| builtin and then its argument prototype would still apply. */ -| #ifdef __cplusplus -| extern "C" -| #endif -| char glBegin (); -| int -| main () -| { -| return glBegin (); -| ; -| return 0; -| } -configure:13994: gcc -o conftest -g -O2 -D_THREAD_SAFE -pthread conftest.c -lGL >&5 -ld: library not found for -lGL -clang: error: linker command failed with exit code 1 (use -v to see invocation) -configure:13994: $? = 1 -configure: failed program was: -| /* confdefs.h */ -| #define PACKAGE_NAME "libwebp" -| #define PACKAGE_TARNAME "libwebp" -| #define PACKAGE_VERSION "1.1.0" -| #define PACKAGE_STRING "libwebp 1.1.0" -| #define PACKAGE_BUGREPORT "https://bugs.chromium.org/p/webp" -| #define PACKAGE_URL "http://developers.google.com/speed/webp" -| #define PACKAGE "libwebp" -| #define VERSION "1.1.0" -| #define STDC_HEADERS 1 -| #define HAVE_SYS_TYPES_H 1 -| #define HAVE_SYS_STAT_H 1 -| #define HAVE_STDLIB_H 1 -| #define HAVE_STRING_H 1 -| #define HAVE_MEMORY_H 1 -| #define HAVE_STRINGS_H 1 -| #define HAVE_INTTYPES_H 1 -| #define HAVE_STDINT_H 1 -| #define HAVE_UNISTD_H 1 -| #define HAVE_DLFCN_H 1 -| #define LT_OBJDIR ".libs/" -| #define WEBP_HAVE_SSE41 1 -| #define WEBP_HAVE_SSE2 1 -| #define HAVE_BUILTIN_BSWAP16 1 -| #define HAVE_BUILTIN_BSWAP32 1 -| #define HAVE_BUILTIN_BSWAP64 1 -| #define HAVE_PTHREAD_PRIO_INHERIT 1 -| #define WEBP_USE_THREAD 1 -| #define HAVE_GLUT_GLUT_H 1 -| /* end confdefs.h. */ -| -| /* Override any GCC internal prototype to avoid an error. -| Use char because int might match the return type of a GCC -| builtin and then its argument prototype would still apply. */ -| #ifdef __cplusplus -| extern "C" -| #endif -| char glBegin (); -| int -| main () -| { -| return glBegin (); -| ; -| return 0; -| } -configure:13994: gcc -o conftest -g -O2 -D_THREAD_SAFE -pthread conftest.c -lOpenGL >&5 -ld: library not found for -lOpenGL -clang: error: linker command failed with exit code 1 (use -v to see invocation) -configure:13994: $? = 1 -configure: failed program was: -| /* confdefs.h */ -| #define PACKAGE_NAME "libwebp" -| #define PACKAGE_TARNAME "libwebp" -| #define PACKAGE_VERSION "1.1.0" -| #define PACKAGE_STRING "libwebp 1.1.0" -| #define PACKAGE_BUGREPORT "https://bugs.chromium.org/p/webp" -| #define PACKAGE_URL "http://developers.google.com/speed/webp" -| #define PACKAGE "libwebp" -| #define VERSION "1.1.0" -| #define STDC_HEADERS 1 -| #define HAVE_SYS_TYPES_H 1 -| #define HAVE_SYS_STAT_H 1 -| #define HAVE_STDLIB_H 1 -| #define HAVE_STRING_H 1 -| #define HAVE_MEMORY_H 1 -| #define HAVE_STRINGS_H 1 -| #define HAVE_INTTYPES_H 1 -| #define HAVE_STDINT_H 1 -| #define HAVE_UNISTD_H 1 -| #define HAVE_DLFCN_H 1 -| #define LT_OBJDIR ".libs/" -| #define WEBP_HAVE_SSE41 1 -| #define WEBP_HAVE_SSE2 1 -| #define HAVE_BUILTIN_BSWAP16 1 -| #define HAVE_BUILTIN_BSWAP32 1 -| #define HAVE_BUILTIN_BSWAP64 1 -| #define HAVE_PTHREAD_PRIO_INHERIT 1 -| #define WEBP_USE_THREAD 1 -| #define HAVE_GLUT_GLUT_H 1 -| /* end confdefs.h. */ -| -| /* Override any GCC internal prototype to avoid an error. -| Use char because int might match the return type of a GCC -| builtin and then its argument prototype would still apply. */ -| #ifdef __cplusplus -| extern "C" -| #endif -| char glBegin (); -| int -| main () -| { -| return glBegin (); -| ; -| return 0; -| } -configure:13994: gcc -o conftest -g -O2 -D_THREAD_SAFE -pthread conftest.c -lopengl32 >&5 -ld: library not found for -lopengl32 -clang: error: linker command failed with exit code 1 (use -v to see invocation) -configure:13994: $? = 1 -configure: failed program was: -| /* confdefs.h */ -| #define PACKAGE_NAME "libwebp" -| #define PACKAGE_TARNAME "libwebp" -| #define PACKAGE_VERSION "1.1.0" -| #define PACKAGE_STRING "libwebp 1.1.0" -| #define PACKAGE_BUGREPORT "https://bugs.chromium.org/p/webp" -| #define PACKAGE_URL "http://developers.google.com/speed/webp" -| #define PACKAGE "libwebp" -| #define VERSION "1.1.0" -| #define STDC_HEADERS 1 -| #define HAVE_SYS_TYPES_H 1 -| #define HAVE_SYS_STAT_H 1 -| #define HAVE_STDLIB_H 1 -| #define HAVE_STRING_H 1 -| #define HAVE_MEMORY_H 1 -| #define HAVE_STRINGS_H 1 -| #define HAVE_INTTYPES_H 1 -| #define HAVE_STDINT_H 1 -| #define HAVE_UNISTD_H 1 -| #define HAVE_DLFCN_H 1 -| #define LT_OBJDIR ".libs/" -| #define WEBP_HAVE_SSE41 1 -| #define WEBP_HAVE_SSE2 1 -| #define HAVE_BUILTIN_BSWAP16 1 -| #define HAVE_BUILTIN_BSWAP32 1 -| #define HAVE_BUILTIN_BSWAP64 1 -| #define HAVE_PTHREAD_PRIO_INHERIT 1 -| #define WEBP_USE_THREAD 1 -| #define HAVE_GLUT_GLUT_H 1 -| /* end confdefs.h. */ -| -| /* Override any GCC internal prototype to avoid an error. -| Use char because int might match the return type of a GCC -| builtin and then its argument prototype would still apply. */ -| #ifdef __cplusplus -| extern "C" -| #endif -| char glBegin (); -| int -| main () -| { -| return glBegin (); -| ; -| return 0; -| } -configure:14011: result: no -configure:14048: gcc -o conftest -g -O2 -D_THREAD_SAFE -pthread conftest.c >&5 -Undefined symbols for architecture x86_64: - "_glOrtho", referenced from: - _main in conftest-fc5e33.o - "_glutMainLoop", referenced from: - _main in conftest-fc5e33.o -ld: symbol(s) not found for architecture x86_64 -clang: error: linker command failed with exit code 1 (use -v to see invocation) -configure:14048: $? = 1 -configure: failed program was: -| /* confdefs.h */ -| #define PACKAGE_NAME "libwebp" -| #define PACKAGE_TARNAME "libwebp" -| #define PACKAGE_VERSION "1.1.0" -| #define PACKAGE_STRING "libwebp 1.1.0" -| #define PACKAGE_BUGREPORT "https://bugs.chromium.org/p/webp" -| #define PACKAGE_URL "http://developers.google.com/speed/webp" -| #define PACKAGE "libwebp" -| #define VERSION "1.1.0" -| #define STDC_HEADERS 1 -| #define HAVE_SYS_TYPES_H 1 -| #define HAVE_SYS_STAT_H 1 -| #define HAVE_STDLIB_H 1 -| #define HAVE_STRING_H 1 -| #define HAVE_MEMORY_H 1 -| #define HAVE_STRINGS_H 1 -| #define HAVE_INTTYPES_H 1 -| #define HAVE_STDINT_H 1 -| #define HAVE_UNISTD_H 1 -| #define HAVE_DLFCN_H 1 -| #define LT_OBJDIR ".libs/" -| #define WEBP_HAVE_SSE41 1 -| #define WEBP_HAVE_SSE2 1 -| #define HAVE_BUILTIN_BSWAP16 1 -| #define HAVE_BUILTIN_BSWAP32 1 -| #define HAVE_BUILTIN_BSWAP64 1 -| #define HAVE_PTHREAD_PRIO_INHERIT 1 -| #define WEBP_USE_THREAD 1 -| #define HAVE_GLUT_GLUT_H 1 -| /* end confdefs.h. */ -| -| #ifdef __cplusplus -| # define EXTERN_C extern "C" -| #else -| # define EXTERN_C -| #endif -| EXTERN_C char glOrtho(); -| EXTERN_C char glutMainLoop(); -| -| int -| main () -| { -| -| glOrtho(); -| glutMainLoop(); -| -| ; -| return 0; -| } -| -configure:14048: gcc -o conftest -g -O2 -D_THREAD_SAFE -pthread conftest.c -lglut >&5 -ld: library not found for -lglut -clang: error: linker command failed with exit code 1 (use -v to see invocation) -configure:14048: $? = 1 -configure: failed program was: -| /* confdefs.h */ -| #define PACKAGE_NAME "libwebp" -| #define PACKAGE_TARNAME "libwebp" -| #define PACKAGE_VERSION "1.1.0" -| #define PACKAGE_STRING "libwebp 1.1.0" -| #define PACKAGE_BUGREPORT "https://bugs.chromium.org/p/webp" -| #define PACKAGE_URL "http://developers.google.com/speed/webp" -| #define PACKAGE "libwebp" -| #define VERSION "1.1.0" -| #define STDC_HEADERS 1 -| #define HAVE_SYS_TYPES_H 1 -| #define HAVE_SYS_STAT_H 1 -| #define HAVE_STDLIB_H 1 -| #define HAVE_STRING_H 1 -| #define HAVE_MEMORY_H 1 -| #define HAVE_STRINGS_H 1 -| #define HAVE_INTTYPES_H 1 -| #define HAVE_STDINT_H 1 -| #define HAVE_UNISTD_H 1 -| #define HAVE_DLFCN_H 1 -| #define LT_OBJDIR ".libs/" -| #define WEBP_HAVE_SSE41 1 -| #define WEBP_HAVE_SSE2 1 -| #define HAVE_BUILTIN_BSWAP16 1 -| #define HAVE_BUILTIN_BSWAP32 1 -| #define HAVE_BUILTIN_BSWAP64 1 -| #define HAVE_PTHREAD_PRIO_INHERIT 1 -| #define WEBP_USE_THREAD 1 -| #define HAVE_GLUT_GLUT_H 1 -| /* end confdefs.h. */ -| -| #ifdef __cplusplus -| # define EXTERN_C extern "C" -| #else -| # define EXTERN_C -| #endif -| EXTERN_C char glOrtho(); -| EXTERN_C char glutMainLoop(); -| -| int -| main () -| { -| -| glOrtho(); -| glutMainLoop(); -| -| ; -| return 0; -| } -| -configure:14048: gcc -o conftest -g -O2 -D_THREAD_SAFE -pthread conftest.c -lglut no >&5 -clang: error: no such file or directory: 'no' -configure:14048: $? = 1 -configure: failed program was: -| /* confdefs.h */ -| #define PACKAGE_NAME "libwebp" -| #define PACKAGE_TARNAME "libwebp" -| #define PACKAGE_VERSION "1.1.0" -| #define PACKAGE_STRING "libwebp 1.1.0" -| #define PACKAGE_BUGREPORT "https://bugs.chromium.org/p/webp" -| #define PACKAGE_URL "http://developers.google.com/speed/webp" -| #define PACKAGE "libwebp" -| #define VERSION "1.1.0" -| #define STDC_HEADERS 1 -| #define HAVE_SYS_TYPES_H 1 -| #define HAVE_SYS_STAT_H 1 -| #define HAVE_STDLIB_H 1 -| #define HAVE_STRING_H 1 -| #define HAVE_MEMORY_H 1 -| #define HAVE_STRINGS_H 1 -| #define HAVE_INTTYPES_H 1 -| #define HAVE_STDINT_H 1 -| #define HAVE_UNISTD_H 1 -| #define HAVE_DLFCN_H 1 -| #define LT_OBJDIR ".libs/" -| #define WEBP_HAVE_SSE41 1 -| #define WEBP_HAVE_SSE2 1 -| #define HAVE_BUILTIN_BSWAP16 1 -| #define HAVE_BUILTIN_BSWAP32 1 -| #define HAVE_BUILTIN_BSWAP64 1 -| #define HAVE_PTHREAD_PRIO_INHERIT 1 -| #define WEBP_USE_THREAD 1 -| #define HAVE_GLUT_GLUT_H 1 -| /* end confdefs.h. */ -| -| #ifdef __cplusplus -| # define EXTERN_C extern "C" -| #else -| # define EXTERN_C -| #endif -| EXTERN_C char glOrtho(); -| EXTERN_C char glutMainLoop(); -| -| int -| main () -| { -| -| glOrtho(); -| glutMainLoop(); -| -| ; -| return 0; -| } -| -configure:13963: checking for library containing glBegin -configure:13994: gcc -o conftest -g -O2 -D_THREAD_SAFE -pthread -framework GLUT -framework OpenGL conftest.c >&5 -configure:13994: $? = 0 -configure:14011: result: none required -configure:14048: gcc -o conftest -g -O2 -D_THREAD_SAFE -pthread -framework GLUT -framework OpenGL conftest.c >&5 -configure:14048: $? = 0 -configure:14106: checking for sdl-config -configure:14139: result: no -configure:14170: checking SDL/SDL.h usability -configure:14170: gcc -c -g -O2 -D_THREAD_SAFE -pthread conftest.c >&5 -conftest.c:65:10: fatal error: 'SDL/SDL.h' file not found -#include - ^~~~~~~~~~~ -1 error generated. -configure:14170: $? = 1 -configure: failed program was: -| /* confdefs.h */ -| #define PACKAGE_NAME "libwebp" -| #define PACKAGE_TARNAME "libwebp" -| #define PACKAGE_VERSION "1.1.0" -| #define PACKAGE_STRING "libwebp 1.1.0" -| #define PACKAGE_BUGREPORT "https://bugs.chromium.org/p/webp" -| #define PACKAGE_URL "http://developers.google.com/speed/webp" -| #define PACKAGE "libwebp" -| #define VERSION "1.1.0" -| #define STDC_HEADERS 1 -| #define HAVE_SYS_TYPES_H 1 -| #define HAVE_SYS_STAT_H 1 -| #define HAVE_STDLIB_H 1 -| #define HAVE_STRING_H 1 -| #define HAVE_MEMORY_H 1 -| #define HAVE_STRINGS_H 1 -| #define HAVE_INTTYPES_H 1 -| #define HAVE_STDINT_H 1 -| #define HAVE_UNISTD_H 1 -| #define HAVE_DLFCN_H 1 -| #define LT_OBJDIR ".libs/" -| #define WEBP_HAVE_SSE41 1 -| #define WEBP_HAVE_SSE2 1 -| #define HAVE_BUILTIN_BSWAP16 1 -| #define HAVE_BUILTIN_BSWAP32 1 -| #define HAVE_BUILTIN_BSWAP64 1 -| #define HAVE_PTHREAD_PRIO_INHERIT 1 -| #define WEBP_USE_THREAD 1 -| #define HAVE_GLUT_GLUT_H 1 -| #define WEBP_HAVE_GL 1 -| /* end confdefs.h. */ -| #include -| #ifdef HAVE_SYS_TYPES_H -| # include -| #endif -| #ifdef HAVE_SYS_STAT_H -| # include -| #endif -| #ifdef STDC_HEADERS -| # include -| # include -| #else -| # ifdef HAVE_STDLIB_H -| # include -| # endif -| #endif -| #ifdef HAVE_STRING_H -| # if !defined STDC_HEADERS && defined HAVE_MEMORY_H -| # include -| # endif -| # include -| #endif -| #ifdef HAVE_STRINGS_H -| # include -| #endif -| #ifdef HAVE_INTTYPES_H -| # include -| #endif -| #ifdef HAVE_STDINT_H -| # include -| #endif -| #ifdef HAVE_UNISTD_H -| # include -| #endif -| #include -configure:14170: result: no -configure:14170: checking SDL/SDL.h presence -configure:14170: gcc -E conftest.c -conftest.c:32:10: fatal error: 'SDL/SDL.h' file not found -#include - ^~~~~~~~~~~ -1 error generated. -configure:14170: $? = 1 -configure: failed program was: -| /* confdefs.h */ -| #define PACKAGE_NAME "libwebp" -| #define PACKAGE_TARNAME "libwebp" -| #define PACKAGE_VERSION "1.1.0" -| #define PACKAGE_STRING "libwebp 1.1.0" -| #define PACKAGE_BUGREPORT "https://bugs.chromium.org/p/webp" -| #define PACKAGE_URL "http://developers.google.com/speed/webp" -| #define PACKAGE "libwebp" -| #define VERSION "1.1.0" -| #define STDC_HEADERS 1 -| #define HAVE_SYS_TYPES_H 1 -| #define HAVE_SYS_STAT_H 1 -| #define HAVE_STDLIB_H 1 -| #define HAVE_STRING_H 1 -| #define HAVE_MEMORY_H 1 -| #define HAVE_STRINGS_H 1 -| #define HAVE_INTTYPES_H 1 -| #define HAVE_STDINT_H 1 -| #define HAVE_UNISTD_H 1 -| #define HAVE_DLFCN_H 1 -| #define LT_OBJDIR ".libs/" -| #define WEBP_HAVE_SSE41 1 -| #define WEBP_HAVE_SSE2 1 -| #define HAVE_BUILTIN_BSWAP16 1 -| #define HAVE_BUILTIN_BSWAP32 1 -| #define HAVE_BUILTIN_BSWAP64 1 -| #define HAVE_PTHREAD_PRIO_INHERIT 1 -| #define WEBP_USE_THREAD 1 -| #define HAVE_GLUT_GLUT_H 1 -| #define WEBP_HAVE_GL 1 -| /* end confdefs.h. */ -| #include -configure:14170: result: no -configure:14170: checking for SDL/SDL.h -configure:14170: result: no -configure:14174: checking SDL.h usability -configure:14174: gcc -c -g -O2 -D_THREAD_SAFE -pthread conftest.c >&5 -conftest.c:65:10: fatal error: 'SDL.h' file not found -#include - ^~~~~~~ -1 error generated. -configure:14174: $? = 1 -configure: failed program was: -| /* confdefs.h */ -| #define PACKAGE_NAME "libwebp" -| #define PACKAGE_TARNAME "libwebp" -| #define PACKAGE_VERSION "1.1.0" -| #define PACKAGE_STRING "libwebp 1.1.0" -| #define PACKAGE_BUGREPORT "https://bugs.chromium.org/p/webp" -| #define PACKAGE_URL "http://developers.google.com/speed/webp" -| #define PACKAGE "libwebp" -| #define VERSION "1.1.0" -| #define STDC_HEADERS 1 -| #define HAVE_SYS_TYPES_H 1 -| #define HAVE_SYS_STAT_H 1 -| #define HAVE_STDLIB_H 1 -| #define HAVE_STRING_H 1 -| #define HAVE_MEMORY_H 1 -| #define HAVE_STRINGS_H 1 -| #define HAVE_INTTYPES_H 1 -| #define HAVE_STDINT_H 1 -| #define HAVE_UNISTD_H 1 -| #define HAVE_DLFCN_H 1 -| #define LT_OBJDIR ".libs/" -| #define WEBP_HAVE_SSE41 1 -| #define WEBP_HAVE_SSE2 1 -| #define HAVE_BUILTIN_BSWAP16 1 -| #define HAVE_BUILTIN_BSWAP32 1 -| #define HAVE_BUILTIN_BSWAP64 1 -| #define HAVE_PTHREAD_PRIO_INHERIT 1 -| #define WEBP_USE_THREAD 1 -| #define HAVE_GLUT_GLUT_H 1 -| #define WEBP_HAVE_GL 1 -| /* end confdefs.h. */ -| #include -| #ifdef HAVE_SYS_TYPES_H -| # include -| #endif -| #ifdef HAVE_SYS_STAT_H -| # include -| #endif -| #ifdef STDC_HEADERS -| # include -| # include -| #else -| # ifdef HAVE_STDLIB_H -| # include -| # endif -| #endif -| #ifdef HAVE_STRING_H -| # if !defined STDC_HEADERS && defined HAVE_MEMORY_H -| # include -| # endif -| # include -| #endif -| #ifdef HAVE_STRINGS_H -| # include -| #endif -| #ifdef HAVE_INTTYPES_H -| # include -| #endif -| #ifdef HAVE_STDINT_H -| # include -| #endif -| #ifdef HAVE_UNISTD_H -| # include -| #endif -| #include -configure:14174: result: no -configure:14174: checking SDL.h presence -configure:14174: gcc -E conftest.c -conftest.c:32:10: fatal error: 'SDL.h' file not found -#include - ^~~~~~~ -1 error generated. -configure:14174: $? = 1 -configure: failed program was: -| /* confdefs.h */ -| #define PACKAGE_NAME "libwebp" -| #define PACKAGE_TARNAME "libwebp" -| #define PACKAGE_VERSION "1.1.0" -| #define PACKAGE_STRING "libwebp 1.1.0" -| #define PACKAGE_BUGREPORT "https://bugs.chromium.org/p/webp" -| #define PACKAGE_URL "http://developers.google.com/speed/webp" -| #define PACKAGE "libwebp" -| #define VERSION "1.1.0" -| #define STDC_HEADERS 1 -| #define HAVE_SYS_TYPES_H 1 -| #define HAVE_SYS_STAT_H 1 -| #define HAVE_STDLIB_H 1 -| #define HAVE_STRING_H 1 -| #define HAVE_MEMORY_H 1 -| #define HAVE_STRINGS_H 1 -| #define HAVE_INTTYPES_H 1 -| #define HAVE_STDINT_H 1 -| #define HAVE_UNISTD_H 1 -| #define HAVE_DLFCN_H 1 -| #define LT_OBJDIR ".libs/" -| #define WEBP_HAVE_SSE41 1 -| #define WEBP_HAVE_SSE2 1 -| #define HAVE_BUILTIN_BSWAP16 1 -| #define HAVE_BUILTIN_BSWAP32 1 -| #define HAVE_BUILTIN_BSWAP64 1 -| #define HAVE_PTHREAD_PRIO_INHERIT 1 -| #define WEBP_USE_THREAD 1 -| #define HAVE_GLUT_GLUT_H 1 -| #define WEBP_HAVE_GL 1 -| /* end confdefs.h. */ -| #include -configure:14174: result: no -configure:14174: checking for SDL.h -configure:14174: result: no -configure:14178: WARNING: SDL library not available - no sdl.h -configure:14240: WARNING: Optional SDL library not found -configure:14269: checking for libpng-config -configure:14287: found /opt/twitter_mde/bin/libpng-config -configure:14299: result: /opt/twitter_mde/bin/libpng-config -configure:14332: checking png.h usability -configure:14332: gcc -c -g -O2 -D_THREAD_SAFE -pthread -I/opt/twitter_mde/package/twitter_dev_homebrew/current/Cellar/libpng/1.6.34/include/libpng16 conftest.c >&5 -configure:14332: $? = 0 -configure:14332: result: yes -configure:14332: checking png.h presence -configure:14332: gcc -E -I/opt/twitter_mde/package/twitter_dev_homebrew/current/Cellar/libpng/1.6.34/include/libpng16 conftest.c -configure:14332: $? = 0 -configure:14332: result: yes -configure:14332: checking for png.h -configure:14332: result: yes -configure:14334: checking for library containing png_get_libpng_ver -configure:14365: gcc -o conftest -g -O2 -D_THREAD_SAFE -pthread -I/opt/twitter_mde/package/twitter_dev_homebrew/current/Cellar/libpng/1.6.34/include/libpng16 conftest.c -L/opt/twitter_mde/package/twitter_dev_homebrew/current/Cellar/libpng/1.6.34/lib -lpng16 >&5 -configure:14365: $? = 0 -configure:14382: result: none required -configure:14445: checking jpeglib.h usability -configure:14445: gcc -c -g -O2 -D_THREAD_SAFE -pthread conftest.c >&5 -configure:14445: $? = 0 -configure:14445: result: yes -configure:14445: checking jpeglib.h presence -configure:14445: gcc -E conftest.c -configure:14445: $? = 0 -configure:14445: result: yes -configure:14445: checking for jpeglib.h -configure:14445: result: yes -configure:14447: checking for jpeg_set_defaults in -ljpeg -configure:14472: gcc -o conftest -g -O2 -D_THREAD_SAFE -pthread conftest.c -ljpeg >&5 -configure:14472: $? = 0 -configure:14481: result: yes -configure:14536: checking tiffio.h usability -configure:14536: gcc -c -g -O2 -D_THREAD_SAFE -pthread conftest.c >&5 -configure:14536: $? = 0 -configure:14536: result: yes -configure:14536: checking tiffio.h presence -configure:14536: gcc -E conftest.c -configure:14536: $? = 0 -configure:14536: result: yes -configure:14536: checking for tiffio.h -configure:14536: result: yes -configure:14538: checking for TIFFGetVersion in -ltiff -configure:14563: gcc -o conftest -g -O2 -D_THREAD_SAFE -pthread conftest.c -ltiff >&5 -configure:14563: $? = 0 -configure:14572: result: yes -configure:14627: checking gif_lib.h usability -configure:14627: gcc -c -g -O2 -D_THREAD_SAFE -pthread conftest.c >&5 -configure:14627: $? = 0 -configure:14627: result: yes -configure:14627: checking gif_lib.h presence -configure:14627: gcc -E conftest.c -configure:14627: $? = 0 -configure:14627: result: yes -configure:14627: checking for gif_lib.h -configure:14627: result: yes -configure:14629: checking for DGifOpenFileHandle in -lgif -configure:14654: gcc -o conftest -g -O2 -D_THREAD_SAFE -pthread conftest.c -lgif >&5 -configure:14654: $? = 0 -configure:14663: result: yes -configure:14827: checking if --enable-swap-16bit-csp option is specified -configure:14837: result: no -configure:14845: checking if --disable-near-lossless option is specified -configure:14861: result: no -configure:14865: checking whether libwebpmux is to be built -configure:14872: result: no -configure:14883: checking whether libwebpdemux is to be built -configure:14892: result: yes -configure:14903: checking whether decoder library is to be built -configure:14910: result: no -configure:14921: checking whether libwebpextras is to be built -configure:14928: result: no -configure:15056: checking that generated files are newer than configure -configure:15062: result: done -configure:15126: creating ./config.status - -## ---------------------- ## -## Running config.status. ## -## ---------------------- ## - -This file was extended by libwebp config.status 1.1.0, which was -generated by GNU Autoconf 2.69. Invocation command line was - - CONFIG_FILES = - CONFIG_HEADERS = - CONFIG_LINKS = - CONFIG_COMMANDS = - $ ./config.status - -on nolan-imac-pro.local - -config.status:1158: creating Makefile -config.status:1158: creating src/Makefile -config.status:1158: creating man/Makefile -config.status:1158: creating examples/Makefile -config.status:1158: creating extras/Makefile -config.status:1158: creating imageio/Makefile -config.status:1158: creating src/dec/Makefile -config.status:1158: creating src/enc/Makefile -config.status:1158: creating src/dsp/Makefile -config.status:1158: creating src/demux/Makefile -config.status:1158: creating src/mux/Makefile -config.status:1158: creating src/utils/Makefile -config.status:1158: creating src/libwebp.pc -config.status:1158: creating src/libwebpdecoder.pc -config.status:1158: creating src/demux/libwebpdemux.pc -config.status:1158: creating src/mux/libwebpmux.pc -config.status:1158: creating src/webp/config.h -config.status:1387: executing depfiles commands -config.status:1464: cd examples && sed -e '/# am--include-marker/d' Makefile | make -f - am--depfiles -config.status:1469: $? = 0 -config.status:1464: cd extras && sed -e '/# am--include-marker/d' Makefile | make -f - am--depfiles -config.status:1469: $? = 0 -config.status:1464: cd imageio && sed -e '/# am--include-marker/d' Makefile | make -f - am--depfiles -config.status:1469: $? = 0 -config.status:1464: cd src/dec && sed -e '/# am--include-marker/d' Makefile | make -f - am--depfiles -config.status:1469: $? = 0 -config.status:1464: cd src/enc && sed -e '/# am--include-marker/d' Makefile | make -f - am--depfiles -config.status:1469: $? = 0 -config.status:1464: cd src/dsp && sed -e '/# am--include-marker/d' Makefile | make -f - am--depfiles -config.status:1469: $? = 0 -config.status:1464: cd src/demux && sed -e '/# am--include-marker/d' Makefile | make -f - am--depfiles -config.status:1469: $? = 0 -config.status:1464: cd src/mux && sed -e '/# am--include-marker/d' Makefile | make -f - am--depfiles -config.status:1469: $? = 0 -config.status:1464: cd src/utils && sed -e '/# am--include-marker/d' Makefile | make -f - am--depfiles -config.status:1469: $? = 0 -config.status:1387: executing libtool commands -configure:17321: -WebP Configuration Summary --------------------------- - -Shared libraries: yes -Static libraries: yes -Threading support: yes -libwebp: yes -libwebpdecoder: no -libwebpdemux: yes -libwebpmux: no -libwebpextras: no - -Tools: -cwebp : yes - Input format support - ==================== - JPEG : yes - PNG : yes - TIFF : yes - WIC : no -dwebp : yes - Output format support - ===================== - PNG : yes - WIC : no -GIF support : yes -anim_diff : no -gif2webp : no -img2webp : no -webpmux : no -vwebp : no -webpinfo : no -SDL support : no -vwebp_sdl : no - - -## ---------------- ## -## Cache variables. ## -## ---------------- ## - -ac_cv_build=x86_64-apple-darwin19.6.0 -ac_cv_c_bigendian=no -ac_cv_c_compiler_gnu=yes -ac_cv_env_CC_set= -ac_cv_env_CC_value= -ac_cv_env_CFLAGS_set= -ac_cv_env_CFLAGS_value= -ac_cv_env_CPPFLAGS_set= -ac_cv_env_CPPFLAGS_value= -ac_cv_env_CPP_set= -ac_cv_env_CPP_value= -ac_cv_env_LDFLAGS_set= -ac_cv_env_LDFLAGS_value= -ac_cv_env_LIBS_set= -ac_cv_env_LIBS_value= -ac_cv_env_LT_SYS_LIBRARY_PATH_set= -ac_cv_env_LT_SYS_LIBRARY_PATH_value= -ac_cv_env_build_alias_set= -ac_cv_env_build_alias_value= -ac_cv_env_host_alias_set= -ac_cv_env_host_alias_value= -ac_cv_env_target_alias_set= -ac_cv_env_target_alias_value= -ac_cv_header_GLUT_glut_h=yes -ac_cv_header_GL_glut_h=no -ac_cv_header_SDL_SDL_h=no -ac_cv_header_SDL_h=no -ac_cv_header_dlfcn_h=yes -ac_cv_header_emmintrin_h=yes -ac_cv_header_gif_lib_h=yes -ac_cv_header_inttypes_h=yes -ac_cv_header_jpeglib_h=yes -ac_cv_header_memory_h=yes -ac_cv_header_png_h=yes -ac_cv_header_smmintrin_h=yes -ac_cv_header_stdc=yes -ac_cv_header_stdint_h=yes -ac_cv_header_stdlib_h=yes -ac_cv_header_string_h=yes -ac_cv_header_strings_h=yes -ac_cv_header_sys_stat_h=yes -ac_cv_header_sys_types_h=yes -ac_cv_header_tiffio_h=yes -ac_cv_header_unistd_h=yes -ac_cv_host=x86_64-apple-darwin19.6.0 -ac_cv_lib_gif_DGifOpenFileHandle=yes -ac_cv_lib_jpeg_jpeg_set_defaults=yes -ac_cv_lib_tiff_TIFFGetVersion=yes -ac_cv_objext=o -ac_cv_path_EGREP='/usr/bin/grep -E' -ac_cv_path_FGREP='/usr/bin/grep -F' -ac_cv_path_GREP=/usr/bin/grep -ac_cv_path_LIBPNG_CONFIG=/opt/twitter_mde/bin/libpng-config -ac_cv_path_SED=/usr/bin/sed -ac_cv_path_install='/opt/twitter_mde/homebrew_minimal/mde_bin/ginstall -c' -ac_cv_path_lt_DD=/bin/dd -ac_cv_path_mkdir=/opt/twitter_mde/homebrew_minimal/mde_bin/gmkdir -ac_cv_prog_AWK=awk -ac_cv_prog_CPP='gcc -E' -ac_cv_prog_ac_ct_AR=ar -ac_cv_prog_ac_ct_CC=gcc -ac_cv_prog_ac_ct_DSYMUTIL=dsymutil -ac_cv_prog_ac_ct_LIPO=lipo -ac_cv_prog_ac_ct_NMEDIT=nmedit -ac_cv_prog_ac_ct_OBJDUMP=objdump -ac_cv_prog_ac_ct_OTOOL=otool -ac_cv_prog_ac_ct_RANLIB=ranlib -ac_cv_prog_ac_ct_STRIP=strip -ac_cv_prog_cc_c89= -ac_cv_prog_cc_g=yes -ac_cv_prog_make_make_set=yes -ac_cv_search_glBegin='none required' -ac_cv_search_png_get_libpng_ver='none required' -am_cv_CC_dependencies_compiler_type=gcc3 -am_cv_ar_interface=ar -am_cv_make_support_nested_variables=yes -am_cv_prog_cc_c_o=yes -ax_cv_PTHREAD_PRIO_INHERIT=yes -lt_cv_apple_cc_single_mod=yes -lt_cv_ar_at_file=no -lt_cv_deplibs_check_method=pass_all -lt_cv_file_magic_cmd='$MAGIC_CMD' -lt_cv_file_magic_test_file= -lt_cv_ld_exported_symbols_list=yes -lt_cv_ld_force_load=yes -lt_cv_ld_reload_flag=-r -lt_cv_nm_interface='BSD nm' -lt_cv_objdir=.libs -lt_cv_path_LD=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld -lt_cv_path_NM='/usr/bin/nm -B' -lt_cv_path_mainfest_tool=no -lt_cv_prog_compiler_c_o=yes -lt_cv_prog_compiler_pic='-fno-common -DPIC' -lt_cv_prog_compiler_pic_works=yes -lt_cv_prog_compiler_rtti_exceptions=yes -lt_cv_prog_compiler_static_works=no -lt_cv_prog_gnu_ld=no -lt_cv_sharedlib_from_linklib_cmd='printf %s\n' -lt_cv_sys_global_symbol_pipe='sed -n -e '\''s/^.*[ ]\([BCDEGRST][BCDEGRST]*\)[ ][ ]*_\([_A-Za-z][_A-Za-z0-9]*\)$/\1 _\2 \2/p'\'' | sed '\''/ __gnu_lto/d'\''' -lt_cv_sys_global_symbol_to_c_name_address='sed -n -e '\''s/^: \(.*\) .*$/ {"\1", (void *) 0},/p'\'' -e '\''s/^[BCDEGRST][BCDEGRST]* .* \(.*\)$/ {"\1", (void *) \&\1},/p'\''' -lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='sed -n -e '\''s/^: \(.*\) .*$/ {"\1", (void *) 0},/p'\'' -e '\''s/^[BCDEGRST][BCDEGRST]* .* \(lib.*\)$/ {"\1", (void *) \&\1},/p'\'' -e '\''s/^[BCDEGRST][BCDEGRST]* .* \(.*\)$/ {"lib\1", (void *) \&\1},/p'\''' -lt_cv_sys_global_symbol_to_cdecl='sed -n -e '\''s/^T .* \(.*\)$/extern int \1();/p'\'' -e '\''s/^[BCDEGRST][BCDEGRST]* .* \(.*\)$/extern char \1;/p'\''' -lt_cv_sys_global_symbol_to_import= -lt_cv_sys_max_cmd_len=196608 -lt_cv_to_host_file_cmd=func_convert_file_noop -lt_cv_to_tool_file_cmd=func_convert_file_noop -lt_cv_truncate_bin='/bin/dd bs=4096 count=1' - -## ----------------- ## -## Output variables. ## -## ----------------- ## - -ACLOCAL='${SHELL} /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp/missing aclocal-1.16' -AMDEPBACKSLASH='\' -AMDEP_FALSE='#' -AMDEP_TRUE='' -AMTAR='$${TAR-tar}' -AM_BACKSLASH='\' -AM_CFLAGS=' -fvisibility=hidden -Wall -Wconstant-conversion -Wdeclaration-after-statement -Wextra -Wfloat-conversion -Wformat -Wformat-nonliteral -Wformat -Wformat-security -Wmissing-declarations -Wmissing-prototypes -Wold-style-definition -Wparentheses-equality -Wshadow -Wshorten-64-to-32 -Wundef -Wunreachable-code -Wunused -Wvla -Wno-deprecated-declarations' -AM_CPPFLAGS=' -DNDEBUG' -AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' -AM_DEFAULT_VERBOSITY='0' -AM_V='$(V)' -AR='ar' -AUTOCONF='${SHELL} /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp/missing autoconf' -AUTOHEADER='${SHELL} /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp/missing autoheader' -AUTOMAKE='${SHELL} /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp/missing automake-1.16' -AWK='awk' -BUILD_ANIMDIFF_FALSE='' -BUILD_ANIMDIFF_TRUE='#' -BUILD_DEMUX_FALSE='#' -BUILD_DEMUX_TRUE='' -BUILD_EXTRAS_FALSE='' -BUILD_EXTRAS_TRUE='#' -BUILD_GIF2WEBP_FALSE='' -BUILD_GIF2WEBP_TRUE='#' -BUILD_IMG2WEBP_FALSE='' -BUILD_IMG2WEBP_TRUE='#' -BUILD_LIBWEBPDECODER_FALSE='' -BUILD_LIBWEBPDECODER_TRUE='#' -BUILD_MUX_FALSE='' -BUILD_MUX_TRUE='#' -BUILD_VWEBP_FALSE='' -BUILD_VWEBP_SDL_FALSE='' -BUILD_VWEBP_SDL_TRUE='#' -BUILD_VWEBP_TRUE='#' -BUILD_WEBPINFO_FALSE='' -BUILD_WEBPINFO_TRUE='#' -CC='gcc' -CCDEPMODE='depmode=gcc3' -CFLAGS='-g -O2 -D_THREAD_SAFE -pthread' -CPP='gcc -E' -CPPFLAGS='' -CYGPATH_W='echo' -DEFS='-DHAVE_CONFIG_H' -DEPDIR='.deps' -DLLTOOL='false' -DSYMUTIL='dsymutil' -DUMPBIN='' -ECHO_C='\c' -ECHO_N='' -ECHO_T='' -EGREP='/usr/bin/grep -E' -EXEEXT='' -FGREP='/usr/bin/grep -F' -GIF_INCLUDES='' -GIF_LIBS=' -lgif' -GL_INCLUDES='' -GL_LIBS='-framework GLUT -framework OpenGL ' -GREP='/usr/bin/grep' -INSTALL_DATA='${INSTALL} -m 644' -INSTALL_PROGRAM='${INSTALL}' -INSTALL_SCRIPT='${INSTALL}' -INSTALL_STRIP_PROGRAM='$(install_sh) -c -s' -JPEG_INCLUDES=' -DWEBP_HAVE_JPEG' -JPEG_LIBS=' -ljpeg' -LD='/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld' -LDFLAGS='' -LIBOBJS='' -LIBPNG_CONFIG='/opt/twitter_mde/bin/libpng-config' -LIBS=' ' -LIBSDL_CONFIG='' -LIBTOOL='$(SHELL) $(top_builddir)/libtool' -LIPO='lipo' -LN_S='ln -s' -LTLIBOBJS='' -LT_SYS_LIBRARY_PATH='' -MAKEINFO='${SHELL} /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp/missing makeinfo' -MANIFEST_TOOL=':' -MKDIR_P='/opt/twitter_mde/homebrew_minimal/mde_bin/gmkdir -p' -NEON_FLAGS='' -NM='/usr/bin/nm -B' -NMEDIT='nmedit' -OBJDUMP='objdump' -OBJEXT='o' -OTOOL64=':' -OTOOL='otool' -PACKAGE='libwebp' -PACKAGE_BUGREPORT='https://bugs.chromium.org/p/webp' -PACKAGE_NAME='libwebp' -PACKAGE_STRING='libwebp 1.1.0' -PACKAGE_TARNAME='libwebp' -PACKAGE_URL='http://developers.google.com/speed/webp' -PACKAGE_VERSION='1.1.0' -PATH_SEPARATOR=':' -PNG_INCLUDES='-I/opt/twitter_mde/package/twitter_dev_homebrew/current/Cellar/libpng/1.6.34/include/libpng16 -DWEBP_HAVE_PNG' -PNG_LIBS='-L/opt/twitter_mde/package/twitter_dev_homebrew/current/Cellar/libpng/1.6.34/lib -lpng16' -PTHREAD_CC='gcc' -PTHREAD_CFLAGS='-D_THREAD_SAFE -pthread' -PTHREAD_LIBS='' -RANLIB='ranlib' -SDL_INCLUDES='' -SDL_LIBS='' -SED='/usr/bin/sed' -SET_MAKE='' -SHELL='/bin/sh' -SSE2_FLAGS=' -msse2' -SSE41_FLAGS=' -msse4.1' -STRIP='strip' -TIFF_INCLUDES=' -DWEBP_HAVE_TIFF' -TIFF_LIBS=' -ltiff' -USE_SWAP_16BIT_CSP='' -VERSION='1.1.0' -ac_ct_AR='ar' -ac_ct_CC='gcc' -ac_ct_DUMPBIN='' -am__EXEEXT_FALSE='' -am__EXEEXT_TRUE='#' -am__fastdepCC_FALSE='#' -am__fastdepCC_TRUE='' -am__include='include' -am__isrc='' -am__leading_dot='.' -am__nodep='_no' -am__quote='' -am__tar='$${TAR-tar} chof - "$$tardir"' -am__untar='$${TAR-tar} xf -' -ax_pthread_config='' -bindir='${exec_prefix}/bin' -build='x86_64-apple-darwin19.6.0' -build_alias='' -build_cpu='x86_64' -build_os='darwin19.6.0' -build_vendor='apple' -datadir='${datarootdir}' -datarootdir='${prefix}/share' -docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' -dvidir='${docdir}' -exec_prefix='${prefix}' -host='x86_64-apple-darwin19.6.0' -host_alias='' -host_cpu='x86_64' -host_os='darwin19.6.0' -host_vendor='apple' -htmldir='${docdir}' -includedir='${prefix}/include' -infodir='${datarootdir}/info' -install_sh='${SHELL} /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp/install-sh' -libdir='${exec_prefix}/lib' -libexecdir='${exec_prefix}/libexec' -localedir='${datarootdir}/locale' -localstatedir='${prefix}/var' -mandir='${datarootdir}/man' -mkdir_p='$(MKDIR_P)' -oldincludedir='/usr/include' -pdfdir='${docdir}' -pkgconfigdir='${libdir}/pkgconfig' -prefix='/usr/local' -program_transform_name='s,x,x,' -psdir='${docdir}' -runstatedir='${localstatedir}/run' -sbindir='${exec_prefix}/sbin' -sharedstatedir='${prefix}/com' -sysconfdir='${prefix}/etc' -target_alias='' - -## ----------- ## -## confdefs.h. ## -## ----------- ## - -/* confdefs.h */ -#define PACKAGE_NAME "libwebp" -#define PACKAGE_TARNAME "libwebp" -#define PACKAGE_VERSION "1.1.0" -#define PACKAGE_STRING "libwebp 1.1.0" -#define PACKAGE_BUGREPORT "https://bugs.chromium.org/p/webp" -#define PACKAGE_URL "http://developers.google.com/speed/webp" -#define PACKAGE "libwebp" -#define VERSION "1.1.0" -#define STDC_HEADERS 1 -#define HAVE_SYS_TYPES_H 1 -#define HAVE_SYS_STAT_H 1 -#define HAVE_STDLIB_H 1 -#define HAVE_STRING_H 1 -#define HAVE_MEMORY_H 1 -#define HAVE_STRINGS_H 1 -#define HAVE_INTTYPES_H 1 -#define HAVE_STDINT_H 1 -#define HAVE_UNISTD_H 1 -#define HAVE_DLFCN_H 1 -#define LT_OBJDIR ".libs/" -#define WEBP_HAVE_SSE41 1 -#define WEBP_HAVE_SSE2 1 -#define HAVE_BUILTIN_BSWAP16 1 -#define HAVE_BUILTIN_BSWAP32 1 -#define HAVE_BUILTIN_BSWAP64 1 -#define HAVE_PTHREAD_PRIO_INHERIT 1 -#define WEBP_USE_THREAD 1 -#define HAVE_GLUT_GLUT_H 1 -#define WEBP_HAVE_GL 1 -#define WEBP_HAVE_PNG 1 -#define WEBP_HAVE_JPEG 1 -#define WEBP_HAVE_TIFF 1 -#define WEBP_HAVE_GIF 1 -#define WEBP_NEAR_LOSSLESS 1 - -configure: exit 0 diff --git a/Extended/libwebp/config.status b/Extended/libwebp/config.status deleted file mode 100755 index d1d36bd..0000000 --- a/Extended/libwebp/config.status +++ /dev/null @@ -1,2035 +0,0 @@ -#! /bin/sh -# Generated by configure. -# Run this file to recreate the current configuration. -# Compiler output produced by configure, useful for debugging -# configure, is in config.log if it exists. - -debug=false -ac_cs_recheck=false -ac_cs_silent=false - -SHELL=${CONFIG_SHELL-/bin/sh} -export SHELL -## -------------------- ## -## M4sh Initialization. ## -## -------------------- ## - -# Be more Bourne compatible -DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in #( - *posix*) : - set -o posix ;; #( - *) : - ;; -esac -fi - - -as_nl=' -' -export as_nl -# Printing a long string crashes Solaris 7 /usr/bin/printf. -as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo -# Prefer a ksh shell builtin over an external printf program on Solaris, -# but without wasting forks for bash or zsh. -if test -z "$BASH_VERSION$ZSH_VERSION" \ - && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='print -r --' - as_echo_n='print -rn --' -elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='printf %s\n' - as_echo_n='printf %s' -else - if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then - as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' - as_echo_n='/usr/ucb/echo -n' - else - as_echo_body='eval expr "X$1" : "X\\(.*\\)"' - as_echo_n_body='eval - arg=$1; - case $arg in #( - *"$as_nl"*) - expr "X$arg" : "X\\(.*\\)$as_nl"; - arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; - esac; - expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" - ' - export as_echo_n_body - as_echo_n='sh -c $as_echo_n_body as_echo' - fi - export as_echo_body - as_echo='sh -c $as_echo_body as_echo' -fi - -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - PATH_SEPARATOR=: - (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { - (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || - PATH_SEPARATOR=';' - } -fi - - -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -IFS=" "" $as_nl" - -# Find who we are. Look in the path if we contain no directory separator. -as_myself= -case $0 in #(( - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break - done -IFS=$as_save_IFS - - ;; -esac -# We did not find ourselves, most probably we were run as `sh COMMAND' -# in which case we are not to be found in the path. -if test "x$as_myself" = x; then - as_myself=$0 -fi -if test ! -f "$as_myself"; then - $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 - exit 1 -fi - -# Unset variables that we do not need and which cause bugs (e.g. in -# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" -# suppresses any "Segmentation fault" message there. '((' could -# trigger a bug in pdksh 5.2.14. -for as_var in BASH_ENV ENV MAIL MAILPATH -do eval test x\${$as_var+set} = xset \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - - -# as_fn_error STATUS ERROR [LINENO LOG_FD] -# ---------------------------------------- -# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are -# provided, also output the error to LOG_FD, referencing LINENO. Then exit the -# script with STATUS, using 1 if that was 0. -as_fn_error () -{ - as_status=$1; test $as_status -eq 0 && as_status=1 - if test "$4"; then - as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 - fi - $as_echo "$as_me: error: $2" >&2 - as_fn_exit $as_status -} # as_fn_error - - -# as_fn_set_status STATUS -# ----------------------- -# Set $? to STATUS, without forking. -as_fn_set_status () -{ - return $1 -} # as_fn_set_status - -# as_fn_exit STATUS -# ----------------- -# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. -as_fn_exit () -{ - set +e - as_fn_set_status $1 - exit $1 -} # as_fn_exit - -# as_fn_unset VAR -# --------------- -# Portably unset VAR. -as_fn_unset () -{ - { eval $1=; unset $1;} -} -as_unset=as_fn_unset -# as_fn_append VAR VALUE -# ---------------------- -# Append the text in VALUE to the end of the definition contained in VAR. Take -# advantage of any shell optimizations that allow amortized linear growth over -# repeated appends, instead of the typical quadratic growth present in naive -# implementations. -if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : - eval 'as_fn_append () - { - eval $1+=\$2 - }' -else - as_fn_append () - { - eval $1=\$$1\$2 - } -fi # as_fn_append - -# as_fn_arith ARG... -# ------------------ -# Perform arithmetic evaluation on the ARGs, and store the result in the -# global $as_val. Take advantage of shells that can avoid forks. The arguments -# must be portable across $(()) and expr. -if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : - eval 'as_fn_arith () - { - as_val=$(( $* )) - }' -else - as_fn_arith () - { - as_val=`expr "$@" || test $? -eq 1` - } -fi # as_fn_arith - - -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - -if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then - as_basename=basename -else - as_basename=false -fi - -if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then - as_dirname=dirname -else - as_dirname=false -fi - -as_me=`$as_basename -- "$0" || -$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ - s//\1/ - q - } - /^X\/\(\/\/\)$/{ - s//\1/ - q - } - /^X\/\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - -# Avoid depending upon Character Ranges. -as_cr_letters='abcdefghijklmnopqrstuvwxyz' -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -as_cr_Letters=$as_cr_letters$as_cr_LETTERS -as_cr_digits='0123456789' -as_cr_alnum=$as_cr_Letters$as_cr_digits - -ECHO_C= ECHO_N= ECHO_T= -case `echo -n x` in #((((( --n*) - case `echo 'xy\c'` in - *c*) ECHO_T=' ';; # ECHO_T is single tab character. - xy) ECHO_C='\c';; - *) echo `echo ksh88 bug on AIX 6.1` > /dev/null - ECHO_T=' ';; - esac;; -*) - ECHO_N='-n';; -esac - -rm -f conf$$ conf$$.exe conf$$.file -if test -d conf$$.dir; then - rm -f conf$$.dir/conf$$.file -else - rm -f conf$$.dir - mkdir conf$$.dir 2>/dev/null -fi -if (echo >conf$$.file) 2>/dev/null; then - if ln -s conf$$.file conf$$ 2>/dev/null; then - as_ln_s='ln -s' - # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -pR'. - ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || - as_ln_s='cp -pR' - elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln - else - as_ln_s='cp -pR' - fi -else - as_ln_s='cp -pR' -fi -rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file -rmdir conf$$.dir 2>/dev/null - - -# as_fn_mkdir_p -# ------------- -# Create "$as_dir" as a directory, including parents if necessary. -as_fn_mkdir_p () -{ - - case $as_dir in #( - -*) as_dir=./$as_dir;; - esac - test -d "$as_dir" || eval $as_mkdir_p || { - as_dirs= - while :; do - case $as_dir in #( - *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( - *) as_qdir=$as_dir;; - esac - as_dirs="'$as_qdir' $as_dirs" - as_dir=`$as_dirname -- "$as_dir" || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - test -d "$as_dir" && break - done - test -z "$as_dirs" || eval "mkdir $as_dirs" - } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" - - -} # as_fn_mkdir_p -if mkdir -p . 2>/dev/null; then - as_mkdir_p='mkdir -p "$as_dir"' -else - test -d ./-p && rmdir ./-p - as_mkdir_p=false -fi - - -# as_fn_executable_p FILE -# ----------------------- -# Test if FILE is an executable regular file. -as_fn_executable_p () -{ - test -f "$1" && test -x "$1" -} # as_fn_executable_p -as_test_x='test -x' -as_executable_p=as_fn_executable_p - -# Sed expression to map a string onto a valid CPP name. -as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" - -# Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" - - -exec 6>&1 -## ----------------------------------- ## -## Main body of $CONFIG_STATUS script. ## -## ----------------------------------- ## -# Save the log message, to keep $0 and so on meaningful, and to -# report actual input values of CONFIG_FILES etc. instead of their -# values after options handling. -ac_log=" -This file was extended by libwebp $as_me 1.1.0, which was -generated by GNU Autoconf 2.69. Invocation command line was - - CONFIG_FILES = $CONFIG_FILES - CONFIG_HEADERS = $CONFIG_HEADERS - CONFIG_LINKS = $CONFIG_LINKS - CONFIG_COMMANDS = $CONFIG_COMMANDS - $ $0 $@ - -on `(hostname || uname -n) 2>/dev/null | sed 1q` -" - -# Files that config.status was made for. -config_files=" Makefile src/Makefile man/Makefile examples/Makefile extras/Makefile imageio/Makefile src/dec/Makefile src/enc/Makefile src/dsp/Makefile src/demux/Makefile src/mux/Makefile src/utils/Makefile src/libwebp.pc src/libwebpdecoder.pc src/demux/libwebpdemux.pc src/mux/libwebpmux.pc" -config_headers=" src/webp/config.h" -config_commands=" depfiles libtool" - -ac_cs_usage="\ -\`$as_me' instantiates files and other configuration actions -from templates according to the current configuration. Unless the files -and actions are specified as TAGs, all are instantiated by default. - -Usage: $0 [OPTION]... [TAG]... - - -h, --help print this help, then exit - -V, --version print version number and configuration settings, then exit - --config print configuration, then exit - -q, --quiet, --silent - do not print progress messages - -d, --debug don't remove temporary files - --recheck update $as_me by reconfiguring in the same conditions - --file=FILE[:TEMPLATE] - instantiate the configuration file FILE - --header=FILE[:TEMPLATE] - instantiate the configuration header FILE - -Configuration files: -$config_files - -Configuration headers: -$config_headers - -Configuration commands: -$config_commands - -Report bugs to . -libwebp home page: ." - -ac_cs_config="" -ac_cs_version="\ -libwebp config.status 1.1.0 -configured by ./configure, generated by GNU Autoconf 2.69, - with options \"$ac_cs_config\" - -Copyright (C) 2012 Free Software Foundation, Inc. -This config.status script is free software; the Free Software Foundation -gives unlimited permission to copy, distribute and modify it." - -ac_pwd='/Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp' -srcdir='.' -INSTALL='/opt/twitter_mde/homebrew_minimal/mde_bin/ginstall -c' -MKDIR_P='/opt/twitter_mde/homebrew_minimal/mde_bin/gmkdir -p' -AWK='awk' -test -n "$AWK" || AWK=awk -# The default lists apply if the user does not specify any file. -ac_need_defaults=: -while test $# != 0 -do - case $1 in - --*=?*) - ac_option=`expr "X$1" : 'X\([^=]*\)='` - ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` - ac_shift=: - ;; - --*=) - ac_option=`expr "X$1" : 'X\([^=]*\)='` - ac_optarg= - ac_shift=: - ;; - *) - ac_option=$1 - ac_optarg=$2 - ac_shift=shift - ;; - esac - - case $ac_option in - # Handling of the options. - -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) - ac_cs_recheck=: ;; - --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) - $as_echo "$ac_cs_version"; exit ;; - --config | --confi | --conf | --con | --co | --c ) - $as_echo "$ac_cs_config"; exit ;; - --debug | --debu | --deb | --de | --d | -d ) - debug=: ;; - --file | --fil | --fi | --f ) - $ac_shift - case $ac_optarg in - *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; - '') as_fn_error $? "missing file argument" ;; - esac - as_fn_append CONFIG_FILES " '$ac_optarg'" - ac_need_defaults=false;; - --header | --heade | --head | --hea ) - $ac_shift - case $ac_optarg in - *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - as_fn_append CONFIG_HEADERS " '$ac_optarg'" - ac_need_defaults=false;; - --he | --h) - # Conflict between --help and --header - as_fn_error $? "ambiguous option: \`$1' -Try \`$0 --help' for more information.";; - --help | --hel | -h ) - $as_echo "$ac_cs_usage"; exit ;; - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil | --si | --s) - ac_cs_silent=: ;; - - # This is an error. - -*) as_fn_error $? "unrecognized option: \`$1' -Try \`$0 --help' for more information." ;; - - *) as_fn_append ac_config_targets " $1" - ac_need_defaults=false ;; - - esac - shift -done - -ac_configure_extra_args= - -if $ac_cs_silent; then - exec 6>/dev/null - ac_configure_extra_args="$ac_configure_extra_args --silent" -fi - -if $ac_cs_recheck; then - set X /bin/sh './configure' $ac_configure_extra_args --no-create --no-recursion - shift - $as_echo "running CONFIG_SHELL=/bin/sh $*" >&6 - CONFIG_SHELL='/bin/sh' - export CONFIG_SHELL - exec "$@" -fi - -exec 5>>config.log -{ - echo - sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX -## Running $as_me. ## -_ASBOX - $as_echo "$ac_log" -} >&5 - -# -# INIT-COMMANDS -# -AMDEP_TRUE="" MAKE="make" - - -# The HP-UX ksh and POSIX shell print the target directory to stdout -# if CDPATH is set. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -sed_quote_subst='s/\(["`$\\]\)/\\\1/g' -double_quote_subst='s/\(["`\\]\)/\\\1/g' -delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' -macro_version='2.4.6' -macro_revision='2.4.6' -enable_shared='yes' -enable_static='yes' -pic_mode='default' -enable_fast_install='needless' -shared_archive_member_spec='' -SHELL='/bin/sh' -ECHO='printf %s\n' -PATH_SEPARATOR=':' -host_alias='' -host='x86_64-apple-darwin19.6.0' -host_os='darwin19.6.0' -build_alias='' -build='x86_64-apple-darwin19.6.0' -build_os='darwin19.6.0' -SED='/usr/bin/sed' -Xsed='/usr/bin/sed -e 1s/^X//' -GREP='/usr/bin/grep' -EGREP='/usr/bin/grep -E' -FGREP='/usr/bin/grep -F' -LD='/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld' -NM='/usr/bin/nm -B' -LN_S='ln -s' -max_cmd_len='196608' -ac_objext='o' -exeext='' -lt_unset='unset' -lt_SP2NL='tr \040 \012' -lt_NL2SP='tr \015\012 \040\040' -lt_cv_to_host_file_cmd='func_convert_file_noop' -lt_cv_to_tool_file_cmd='func_convert_file_noop' -reload_flag=' -r' -reload_cmds='$LTCC $LTCFLAGS -nostdlib $wl-r -o $output$reload_objs' -OBJDUMP='objdump' -deplibs_check_method='pass_all' -file_magic_cmd='$MAGIC_CMD' -file_magic_glob='' -want_nocaseglob='no' -DLLTOOL='false' -sharedlib_from_linklib_cmd='printf %s\n' -AR='ar' -AR_FLAGS='cru' -archiver_list_spec='' -STRIP='strip' -RANLIB='ranlib' -old_postinstall_cmds='chmod 644 $oldlib~$RANLIB $tool_oldlib' -old_postuninstall_cmds='' -old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs~$RANLIB $tool_oldlib' -lock_old_archive_extraction='yes' -CC='gcc' -CFLAGS='-g -O2 -D_THREAD_SAFE -pthread' -compiler='gcc' -GCC='yes' -lt_cv_sys_global_symbol_pipe='sed -n -e '\''s/^.*[ ]\([BCDEGRST][BCDEGRST]*\)[ ][ ]*_\([_A-Za-z][_A-Za-z0-9]*\)$/\1 _\2 \2/p'\'' | sed '\''/ __gnu_lto/d'\''' -lt_cv_sys_global_symbol_to_cdecl='sed -n -e '\''s/^T .* \(.*\)$/extern int \1();/p'\'' -e '\''s/^[BCDEGRST][BCDEGRST]* .* \(.*\)$/extern char \1;/p'\''' -lt_cv_sys_global_symbol_to_import='' -lt_cv_sys_global_symbol_to_c_name_address='sed -n -e '\''s/^: \(.*\) .*$/ {"\1", (void *) 0},/p'\'' -e '\''s/^[BCDEGRST][BCDEGRST]* .* \(.*\)$/ {"\1", (void *) \&\1},/p'\''' -lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='sed -n -e '\''s/^: \(.*\) .*$/ {"\1", (void *) 0},/p'\'' -e '\''s/^[BCDEGRST][BCDEGRST]* .* \(lib.*\)$/ {"\1", (void *) \&\1},/p'\'' -e '\''s/^[BCDEGRST][BCDEGRST]* .* \(.*\)$/ {"lib\1", (void *) \&\1},/p'\''' -lt_cv_nm_interface='BSD nm' -nm_file_list_spec='@' -lt_sysroot='' -lt_cv_truncate_bin='/bin/dd bs=4096 count=1' -objdir='.libs' -MAGIC_CMD='file' -lt_prog_compiler_no_builtin_flag=' -fno-builtin -fno-rtti -fno-exceptions' -lt_prog_compiler_pic=' -fno-common -DPIC' -lt_prog_compiler_wl='-Wl,' -lt_prog_compiler_static='' -lt_cv_prog_compiler_c_o='yes' -need_locks='no' -MANIFEST_TOOL=':' -DSYMUTIL='dsymutil' -NMEDIT='nmedit' -LIPO='lipo' -OTOOL='otool' -OTOOL64=':' -libext='a' -shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' -extract_expsyms_cmds='' -archive_cmds_need_lc='no' -enable_shared_with_static_runtimes='no' -export_dynamic_flag_spec='' -whole_archive_flag_spec='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' -compiler_needs_object='no' -old_archive_from_new_cmds='' -old_archive_from_expsyms_cmds='' -archive_cmds='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring $single_module' -archive_expsym_cmds='sed '\''s|^|_|'\'' < $export_symbols > $output_objdir/$libname-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring $single_module $wl-exported_symbols_list,$output_objdir/$libname-symbols.expsym' -module_cmds='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs $compiler_flags' -module_expsym_cmds='sed -e '\''s|^|_|'\'' < $export_symbols > $output_objdir/$libname-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs $compiler_flags $wl-exported_symbols_list,$output_objdir/$libname-symbols.expsym' -with_gnu_ld='no' -allow_undefined_flag='$wl-undefined ${wl}dynamic_lookup' -no_undefined_flag='' -hardcode_libdir_flag_spec='' -hardcode_libdir_separator='' -hardcode_direct='no' -hardcode_direct_absolute='no' -hardcode_minus_L='no' -hardcode_shlibpath_var='unsupported' -hardcode_automatic='yes' -inherit_rpath='no' -link_all_deplibs='yes' -always_export_symbols='no' -export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' -exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' -include_expsyms='' -prelink_cmds='' -postlink_cmds='' -file_list_spec='' -variables_saved_for_relink='PATH DYLD_LIBRARY_PATH GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH' -need_lib_prefix='no' -need_version='no' -version_type='darwin' -runpath_var='' -shlibpath_var='DYLD_LIBRARY_PATH' -shlibpath_overrides_runpath='yes' -libname_spec='lib$name' -library_names_spec='$libname$release$major$shared_ext $libname$shared_ext' -soname_spec='$libname$release$major$shared_ext' -install_override_mode='' -postinstall_cmds='' -postuninstall_cmds='' -finish_cmds='' -finish_eval='' -hardcode_into_libs='no' -sys_lib_search_path_spec='/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/11.0.3 /usr/local/lib' -configure_time_dlsearch_path='/usr/local/lib /lib /usr/lib' -configure_time_lt_sys_library_path='' -hardcode_action='immediate' -enable_dlopen='unknown' -enable_dlopen_self='unknown' -enable_dlopen_self_static='unknown' -old_striplib='strip -S' -striplib='strip -x' - -LTCC='gcc' -LTCFLAGS='-g -O2' -compiler='gcc' - -# A function that is used when there is no print builtin or printf. -func_fallback_echo () -{ - eval 'cat <<_LTECHO_EOF -$1 -_LTECHO_EOF' -} - -# Quote evaled strings. -for var in SHELL ECHO PATH_SEPARATOR SED GREP EGREP FGREP LD NM LN_S lt_SP2NL lt_NL2SP reload_flag OBJDUMP deplibs_check_method file_magic_cmd file_magic_glob want_nocaseglob DLLTOOL sharedlib_from_linklib_cmd AR AR_FLAGS archiver_list_spec STRIP RANLIB CC CFLAGS compiler lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl lt_cv_sys_global_symbol_to_import lt_cv_sys_global_symbol_to_c_name_address lt_cv_sys_global_symbol_to_c_name_address_lib_prefix lt_cv_nm_interface nm_file_list_spec lt_cv_truncate_bin lt_prog_compiler_no_builtin_flag lt_prog_compiler_pic lt_prog_compiler_wl lt_prog_compiler_static lt_cv_prog_compiler_c_o need_locks MANIFEST_TOOL DSYMUTIL NMEDIT LIPO OTOOL OTOOL64 shrext_cmds export_dynamic_flag_spec whole_archive_flag_spec compiler_needs_object with_gnu_ld allow_undefined_flag no_undefined_flag hardcode_libdir_flag_spec hardcode_libdir_separator exclude_expsyms include_expsyms file_list_spec variables_saved_for_relink libname_spec library_names_spec soname_spec install_override_mode finish_eval old_striplib striplib; do - case `eval \\$ECHO \\""\\$$var"\\"` in - *[\\\`\"\$]*) - eval "lt_$var=\\\"\`\$ECHO \"\$$var\" | \$SED \"\$sed_quote_subst\"\`\\\"" ## exclude from sc_prohibit_nested_quotes - ;; - *) - eval "lt_$var=\\\"\$$var\\\"" - ;; - esac -done - -# Double-quote double-evaled strings. -for var in reload_cmds old_postinstall_cmds old_postuninstall_cmds old_archive_cmds extract_expsyms_cmds old_archive_from_new_cmds old_archive_from_expsyms_cmds archive_cmds archive_expsym_cmds module_cmds module_expsym_cmds export_symbols_cmds prelink_cmds postlink_cmds postinstall_cmds postuninstall_cmds finish_cmds sys_lib_search_path_spec configure_time_dlsearch_path configure_time_lt_sys_library_path; do - case `eval \\$ECHO \\""\\$$var"\\"` in - *[\\\`\"\$]*) - eval "lt_$var=\\\"\`\$ECHO \"\$$var\" | \$SED -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" ## exclude from sc_prohibit_nested_quotes - ;; - *) - eval "lt_$var=\\\"\$$var\\\"" - ;; - esac -done - -ac_aux_dir='.' - -# See if we are running on zsh, and set the options that allow our -# commands through without removal of \ escapes INIT. -if test -n "${ZSH_VERSION+set}"; then - setopt NO_GLOB_SUBST -fi - - - PACKAGE='libwebp' - VERSION='1.1.0' - RM='rm -f' - ofile='libtool' - - - - - -# Handling of arguments. -for ac_config_target in $ac_config_targets -do - case $ac_config_target in - "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; - "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; - "src/webp/config.h") CONFIG_HEADERS="$CONFIG_HEADERS src/webp/config.h" ;; - "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; - "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; - "man/Makefile") CONFIG_FILES="$CONFIG_FILES man/Makefile" ;; - "examples/Makefile") CONFIG_FILES="$CONFIG_FILES examples/Makefile" ;; - "extras/Makefile") CONFIG_FILES="$CONFIG_FILES extras/Makefile" ;; - "imageio/Makefile") CONFIG_FILES="$CONFIG_FILES imageio/Makefile" ;; - "src/dec/Makefile") CONFIG_FILES="$CONFIG_FILES src/dec/Makefile" ;; - "src/enc/Makefile") CONFIG_FILES="$CONFIG_FILES src/enc/Makefile" ;; - "src/dsp/Makefile") CONFIG_FILES="$CONFIG_FILES src/dsp/Makefile" ;; - "src/demux/Makefile") CONFIG_FILES="$CONFIG_FILES src/demux/Makefile" ;; - "src/mux/Makefile") CONFIG_FILES="$CONFIG_FILES src/mux/Makefile" ;; - "src/utils/Makefile") CONFIG_FILES="$CONFIG_FILES src/utils/Makefile" ;; - "src/libwebp.pc") CONFIG_FILES="$CONFIG_FILES src/libwebp.pc" ;; - "src/libwebpdecoder.pc") CONFIG_FILES="$CONFIG_FILES src/libwebpdecoder.pc" ;; - "src/demux/libwebpdemux.pc") CONFIG_FILES="$CONFIG_FILES src/demux/libwebpdemux.pc" ;; - "src/mux/libwebpmux.pc") CONFIG_FILES="$CONFIG_FILES src/mux/libwebpmux.pc" ;; - - *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; - esac -done - - -# If the user did not use the arguments to specify the items to instantiate, -# then the envvar interface is used. Set only those that are not. -# We use the long form for the default assignment because of an extremely -# bizarre bug on SunOS 4.1.3. -if $ac_need_defaults; then - test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files - test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers - test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands -fi - -# Have a temporary directory for convenience. Make it in the build tree -# simply because there is no reason against having it here, and in addition, -# creating and moving files from /tmp can sometimes cause problems. -# Hook for its removal unless debugging. -# Note that there is a small window in which the directory will not be cleaned: -# after its creation but before its name has been assigned to `$tmp'. -$debug || -{ - tmp= ac_tmp= - trap 'exit_status=$? - : "${ac_tmp:=$tmp}" - { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status -' 0 - trap 'as_fn_exit 1' 1 2 13 15 -} -# Create a (secure) tmp directory for tmp files. - -{ - tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && - test -d "$tmp" -} || -{ - tmp=./conf$$-$RANDOM - (umask 077 && mkdir "$tmp") -} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 -ac_tmp=$tmp - -# Set up the scripts for CONFIG_FILES section. -# No need to generate them if there are no CONFIG_FILES. -# This happens for instance with `./config.status config.h'. -if test -n "$CONFIG_FILES"; then - - -ac_cr=`echo X | tr X '\015'` -# On cygwin, bash can eat \r inside `` if the user requested igncr. -# But we know of no other shell where ac_cr would be empty at this -# point, so we can use a bashism as a fallback. -if test "x$ac_cr" = x; then - eval ac_cr=\$\'\\r\' -fi -ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` -if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then - ac_cs_awk_cr='\\r' -else - ac_cs_awk_cr=$ac_cr -fi - -echo 'BEGIN {' >"$ac_tmp/subs1.awk" && -cat >>"$ac_tmp/subs1.awk" <<\_ACAWK && -S["am__EXEEXT_FALSE"]="" -S["am__EXEEXT_TRUE"]="#" -S["LTLIBOBJS"]="" -S["LIBOBJS"]="" -S["BUILD_EXTRAS_FALSE"]="" -S["BUILD_EXTRAS_TRUE"]="#" -S["BUILD_LIBWEBPDECODER_FALSE"]="" -S["BUILD_LIBWEBPDECODER_TRUE"]="#" -S["BUILD_DEMUX_FALSE"]="#" -S["BUILD_DEMUX_TRUE"]="" -S["BUILD_MUX_FALSE"]="" -S["BUILD_MUX_TRUE"]="#" -S["USE_SWAP_16BIT_CSP"]="" -S["BUILD_WEBPINFO_FALSE"]="" -S["BUILD_WEBPINFO_TRUE"]="#" -S["BUILD_IMG2WEBP_FALSE"]="" -S["BUILD_IMG2WEBP_TRUE"]="#" -S["BUILD_GIF2WEBP_FALSE"]="" -S["BUILD_GIF2WEBP_TRUE"]="#" -S["BUILD_ANIMDIFF_FALSE"]="" -S["BUILD_ANIMDIFF_TRUE"]="#" -S["GIF_INCLUDES"]="" -S["GIF_LIBS"]=" -lgif" -S["TIFF_INCLUDES"]=" -DWEBP_HAVE_TIFF" -S["TIFF_LIBS"]=" -ltiff" -S["JPEG_INCLUDES"]=" -DWEBP_HAVE_JPEG" -S["JPEG_LIBS"]=" -ljpeg" -S["PNG_INCLUDES"]="-I/opt/twitter_mde/package/twitter_dev_homebrew/current/Cellar/libpng/1.6.34/include/libpng16 -DWEBP_HAVE_PNG" -S["PNG_LIBS"]="-L/opt/twitter_mde/package/twitter_dev_homebrew/current/Cellar/libpng/1.6.34/lib -lpng16" -S["LIBPNG_CONFIG"]="/opt/twitter_mde/bin/libpng-config" -S["BUILD_VWEBP_SDL_FALSE"]="" -S["BUILD_VWEBP_SDL_TRUE"]="#" -S["SDL_INCLUDES"]="" -S["SDL_LIBS"]="" -S["LIBSDL_CONFIG"]="" -S["BUILD_VWEBP_FALSE"]="" -S["BUILD_VWEBP_TRUE"]="#" -S["GL_INCLUDES"]="" -S["GL_LIBS"]="-framework GLUT -framework OpenGL " -S["PTHREAD_CFLAGS"]="-D_THREAD_SAFE -pthread" -S["PTHREAD_LIBS"]="" -S["PTHREAD_CC"]="gcc" -S["ax_pthread_config"]="" -S["NEON_FLAGS"]="" -S["SSE2_FLAGS"]=" -msse2" -S["SSE41_FLAGS"]=" -msse4.1" -S["AM_CFLAGS"]=" -fvisibility=hidden -Wall -Wconstant-conversion -Wdeclaration-after-statement -Wextra -Wfloat-conversion -Wformat -Wformat-nonliteral -Wformat -Wfo"\ -"rmat-security -Wmissing-declarations -Wmissing-prototypes -Wold-style-definition -Wparentheses-equality -Wshadow -Wshorten-64-to-32 -Wundef -Wunreac"\ -"hable-code -Wunused -Wvla -Wno-deprecated-declarations" -S["pkgconfigdir"]="${libdir}/pkgconfig" -S["AM_CPPFLAGS"]=" -DNDEBUG" -S["CPP"]="gcc -E" -S["LT_SYS_LIBRARY_PATH"]="" -S["OTOOL64"]=":" -S["OTOOL"]="otool" -S["LIPO"]="lipo" -S["NMEDIT"]="nmedit" -S["DSYMUTIL"]="dsymutil" -S["MANIFEST_TOOL"]=":" -S["RANLIB"]="ranlib" -S["DLLTOOL"]="false" -S["OBJDUMP"]="objdump" -S["LN_S"]="ln -s" -S["NM"]="/usr/bin/nm -B" -S["ac_ct_DUMPBIN"]="" -S["DUMPBIN"]="" -S["LD"]="/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld" -S["FGREP"]="/usr/bin/grep -F" -S["EGREP"]="/usr/bin/grep -E" -S["GREP"]="/usr/bin/grep" -S["SED"]="/usr/bin/sed" -S["LIBTOOL"]="$(SHELL) $(top_builddir)/libtool" -S["am__fastdepCC_FALSE"]="#" -S["am__fastdepCC_TRUE"]="" -S["CCDEPMODE"]="depmode=gcc3" -S["am__nodep"]="_no" -S["AMDEPBACKSLASH"]="\\" -S["AMDEP_FALSE"]="#" -S["AMDEP_TRUE"]="" -S["am__include"]="include" -S["DEPDIR"]=".deps" -S["OBJEXT"]="o" -S["EXEEXT"]="" -S["ac_ct_CC"]="gcc" -S["CPPFLAGS"]="" -S["LDFLAGS"]="" -S["CFLAGS"]="-g -O2 -D_THREAD_SAFE -pthread" -S["CC"]="gcc" -S["ac_ct_AR"]="ar" -S["AR"]="ar" -S["AM_BACKSLASH"]="\\" -S["AM_DEFAULT_VERBOSITY"]="0" -S["AM_DEFAULT_V"]="$(AM_DEFAULT_VERBOSITY)" -S["AM_V"]="$(V)" -S["am__untar"]="$${TAR-tar} xf -" -S["am__tar"]="$${TAR-tar} chof - \"$$tardir\"" -S["AMTAR"]="$${TAR-tar}" -S["am__leading_dot"]="." -S["SET_MAKE"]="" -S["AWK"]="awk" -S["mkdir_p"]="$(MKDIR_P)" -S["MKDIR_P"]="/opt/twitter_mde/homebrew_minimal/mde_bin/gmkdir -p" -S["INSTALL_STRIP_PROGRAM"]="$(install_sh) -c -s" -S["STRIP"]="strip" -S["install_sh"]="${SHELL} /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp/install-sh" -S["MAKEINFO"]="${SHELL} /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp/missing makeinfo" -S["AUTOHEADER"]="${SHELL} /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp/missing autoheader" -S["AUTOMAKE"]="${SHELL} /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp/missing automake-1.16" -S["AUTOCONF"]="${SHELL} /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp/missing autoconf" -S["ACLOCAL"]="${SHELL} /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp/missing aclocal-1.16" -S["VERSION"]="1.1.0" -S["PACKAGE"]="libwebp" -S["CYGPATH_W"]="echo" -S["am__isrc"]="" -S["INSTALL_DATA"]="${INSTALL} -m 644" -S["INSTALL_SCRIPT"]="${INSTALL}" -S["INSTALL_PROGRAM"]="${INSTALL}" -S["host_os"]="darwin19.6.0" -S["host_vendor"]="apple" -S["host_cpu"]="x86_64" -S["host"]="x86_64-apple-darwin19.6.0" -S["build_os"]="darwin19.6.0" -S["build_vendor"]="apple" -S["build_cpu"]="x86_64" -S["build"]="x86_64-apple-darwin19.6.0" -S["target_alias"]="" -S["host_alias"]="" -S["build_alias"]="" -S["LIBS"]=" " -S["ECHO_T"]="" -S["ECHO_N"]="" -S["ECHO_C"]="\\c" -S["DEFS"]="-DHAVE_CONFIG_H" -S["mandir"]="${datarootdir}/man" -S["localedir"]="${datarootdir}/locale" -S["libdir"]="${exec_prefix}/lib" -S["psdir"]="${docdir}" -S["pdfdir"]="${docdir}" -S["dvidir"]="${docdir}" -S["htmldir"]="${docdir}" -S["infodir"]="${datarootdir}/info" -S["docdir"]="${datarootdir}/doc/${PACKAGE_TARNAME}" -S["oldincludedir"]="/usr/include" -S["includedir"]="${prefix}/include" -S["runstatedir"]="${localstatedir}/run" -S["localstatedir"]="${prefix}/var" -S["sharedstatedir"]="${prefix}/com" -S["sysconfdir"]="${prefix}/etc" -S["datadir"]="${datarootdir}" -S["datarootdir"]="${prefix}/share" -S["libexecdir"]="${exec_prefix}/libexec" -S["sbindir"]="${exec_prefix}/sbin" -S["bindir"]="${exec_prefix}/bin" -S["program_transform_name"]="s,x,x," -S["prefix"]="/usr/local" -S["exec_prefix"]="${prefix}" -S["PACKAGE_URL"]="http://developers.google.com/speed/webp" -S["PACKAGE_BUGREPORT"]="https://bugs.chromium.org/p/webp" -S["PACKAGE_STRING"]="libwebp 1.1.0" -S["PACKAGE_VERSION"]="1.1.0" -S["PACKAGE_TARNAME"]="libwebp" -S["PACKAGE_NAME"]="libwebp" -S["PATH_SEPARATOR"]=":" -S["SHELL"]="/bin/sh" -S["am__quote"]="" -_ACAWK -cat >>"$ac_tmp/subs1.awk" <<_ACAWK && - for (key in S) S_is_set[key] = 1 - FS = "" - -} -{ - line = $ 0 - nfields = split(line, field, "@") - substed = 0 - len = length(field[1]) - for (i = 2; i < nfields; i++) { - key = field[i] - keylen = length(key) - if (S_is_set[key]) { - value = S[key] - line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) - len += length(value) + length(field[++i]) - substed = 1 - } else - len += 1 + keylen - } - - print line -} - -_ACAWK -if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then - sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" -else - cat -fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ - || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 -fi # test -n "$CONFIG_FILES" - -# Set up the scripts for CONFIG_HEADERS section. -# No need to generate them if there are no CONFIG_HEADERS. -# This happens for instance with `./config.status Makefile'. -if test -n "$CONFIG_HEADERS"; then -cat >"$ac_tmp/defines.awk" <<\_ACAWK || -BEGIN { -D["PACKAGE_NAME"]=" \"libwebp\"" -D["PACKAGE_TARNAME"]=" \"libwebp\"" -D["PACKAGE_VERSION"]=" \"1.1.0\"" -D["PACKAGE_STRING"]=" \"libwebp 1.1.0\"" -D["PACKAGE_BUGREPORT"]=" \"https://bugs.chromium.org/p/webp\"" -D["PACKAGE_URL"]=" \"http://developers.google.com/speed/webp\"" -D["PACKAGE"]=" \"libwebp\"" -D["VERSION"]=" \"1.1.0\"" -D["STDC_HEADERS"]=" 1" -D["HAVE_SYS_TYPES_H"]=" 1" -D["HAVE_SYS_STAT_H"]=" 1" -D["HAVE_STDLIB_H"]=" 1" -D["HAVE_STRING_H"]=" 1" -D["HAVE_MEMORY_H"]=" 1" -D["HAVE_STRINGS_H"]=" 1" -D["HAVE_INTTYPES_H"]=" 1" -D["HAVE_STDINT_H"]=" 1" -D["HAVE_UNISTD_H"]=" 1" -D["HAVE_DLFCN_H"]=" 1" -D["LT_OBJDIR"]=" \".libs/\"" -D["WEBP_HAVE_SSE41"]=" 1" -D["WEBP_HAVE_SSE2"]=" 1" -D["HAVE_BUILTIN_BSWAP16"]=" 1" -D["HAVE_BUILTIN_BSWAP32"]=" 1" -D["HAVE_BUILTIN_BSWAP64"]=" 1" -D["HAVE_PTHREAD_PRIO_INHERIT"]=" 1" -D["WEBP_USE_THREAD"]=" 1" -D["HAVE_GLUT_GLUT_H"]=" 1" -D["WEBP_HAVE_GL"]=" 1" -D["WEBP_HAVE_PNG"]=" 1" -D["WEBP_HAVE_JPEG"]=" 1" -D["WEBP_HAVE_TIFF"]=" 1" -D["WEBP_HAVE_GIF"]=" 1" -D["WEBP_NEAR_LOSSLESS"]=" 1" - for (key in D) D_is_set[key] = 1 - FS = "" -} -/^[\t ]*#[\t ]*(define|undef)[\t ]+[_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ][_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789]*([\t (]|$)/ { - line = $ 0 - split(line, arg, " ") - if (arg[1] == "#") { - defundef = arg[2] - mac1 = arg[3] - } else { - defundef = substr(arg[1], 2) - mac1 = arg[2] - } - split(mac1, mac2, "(") #) - macro = mac2[1] - prefix = substr(line, 1, index(line, defundef) - 1) - if (D_is_set[macro]) { - # Preserve the white space surrounding the "#". - print prefix "define", macro P[macro] D[macro] - next - } else { - # Replace #undef with comments. This is necessary, for example, - # in the case of _POSIX_SOURCE, which is predefined and required - # on some systems where configure will not decide to define it. - if (defundef == "undef") { - print "/*", prefix defundef, macro, "*/" - next - } - } -} -{ print } -_ACAWK - as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 -fi # test -n "$CONFIG_HEADERS" - - -eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" -shift -for ac_tag -do - case $ac_tag in - :[FHLC]) ac_mode=$ac_tag; continue;; - esac - case $ac_mode$ac_tag in - :[FHL]*:*);; - :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; - :[FH]-) ac_tag=-:-;; - :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; - esac - ac_save_IFS=$IFS - IFS=: - set x $ac_tag - IFS=$ac_save_IFS - shift - ac_file=$1 - shift - - case $ac_mode in - :L) ac_source=$1;; - :[FH]) - ac_file_inputs= - for ac_f - do - case $ac_f in - -) ac_f="$ac_tmp/stdin";; - *) # Look for the file first in the build tree, then in the source tree - # (if the path is not absolute). The absolute path cannot be DOS-style, - # because $ac_f cannot contain `:'. - test -f "$ac_f" || - case $ac_f in - [\\/$]*) false;; - *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; - esac || - as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; - esac - case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac - as_fn_append ac_file_inputs " '$ac_f'" - done - - # Let's still pretend it is `configure' which instantiates (i.e., don't - # use $as_me), people would be surprised to read: - # /* config.h. Generated by config.status. */ - configure_input='Generated from '` - $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' - `' by configure.' - if test x"$ac_file" != x-; then - configure_input="$ac_file. $configure_input" - { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 -$as_echo "$as_me: creating $ac_file" >&6;} - fi - # Neutralize special characters interpreted by sed in replacement strings. - case $configure_input in #( - *\&* | *\|* | *\\* ) - ac_sed_conf_input=`$as_echo "$configure_input" | - sed 's/[\\\\&|]/\\\\&/g'`;; #( - *) ac_sed_conf_input=$configure_input;; - esac - - case $ac_tag in - *:-:* | *:-) cat >"$ac_tmp/stdin" \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; - esac - ;; - esac - - ac_dir=`$as_dirname -- "$ac_file" || -$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$ac_file" : 'X\(//\)[^/]' \| \ - X"$ac_file" : 'X\(//\)$' \| \ - X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$ac_file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - as_dir="$ac_dir"; as_fn_mkdir_p - ac_builddir=. - -case "$ac_dir" in -.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; -*) - ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` - # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` - case $ac_top_builddir_sub in - "") ac_top_builddir_sub=. ac_top_build_prefix= ;; - *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; - esac ;; -esac -ac_abs_top_builddir=$ac_pwd -ac_abs_builddir=$ac_pwd$ac_dir_suffix -# for backward compatibility: -ac_top_builddir=$ac_top_build_prefix - -case $srcdir in - .) # We are building in place. - ac_srcdir=. - ac_top_srcdir=$ac_top_builddir_sub - ac_abs_top_srcdir=$ac_pwd ;; - [\\/]* | ?:[\\/]* ) # Absolute name. - ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir - ac_abs_top_srcdir=$srcdir ;; - *) # Relative name. - ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_build_prefix$srcdir - ac_abs_top_srcdir=$ac_pwd/$srcdir ;; -esac -ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix - - - case $ac_mode in - :F) - # - # CONFIG_FILE - # - - case $INSTALL in - [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; - *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; - esac - ac_MKDIR_P=$MKDIR_P - case $MKDIR_P in - [\\/$]* | ?:[\\/]* ) ;; - */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; - esac -# If the template does not know about datarootdir, expand it. -# FIXME: This hack should be removed a few years after 2.60. -ac_datarootdir_hack=; ac_datarootdir_seen= -ac_sed_dataroot=' -/datarootdir/ { - p - q -} -/@datadir@/p -/@docdir@/p -/@infodir@/p -/@localedir@/p -/@mandir@/p' -case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in -*datarootdir*) ac_datarootdir_seen=yes;; -*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 -$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} - ac_datarootdir_hack=' - s&@datadir@&${datarootdir}&g - s&@docdir@&${datarootdir}/doc/${PACKAGE_TARNAME}&g - s&@infodir@&${datarootdir}/info&g - s&@localedir@&${datarootdir}/locale&g - s&@mandir@&${datarootdir}/man&g - s&\${datarootdir}&${prefix}/share&g' ;; -esac -ac_sed_extra="/^[ ]*VPATH[ ]*=[ ]*/{ -h -s/// -s/^/:/ -s/[ ]*$/:/ -s/:\$(srcdir):/:/g -s/:\${srcdir}:/:/g -s/:@srcdir@:/:/g -s/^:*// -s/:*$// -x -s/\(=[ ]*\).*/\1/ -G -s/\n// -s/^[^=]*=[ ]*$// -} - -:t -/@[a-zA-Z_][a-zA-Z_0-9]*@/!b -s|@configure_input@|$ac_sed_conf_input|;t t -s&@top_builddir@&$ac_top_builddir_sub&;t t -s&@top_build_prefix@&$ac_top_build_prefix&;t t -s&@srcdir@&$ac_srcdir&;t t -s&@abs_srcdir@&$ac_abs_srcdir&;t t -s&@top_srcdir@&$ac_top_srcdir&;t t -s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t -s&@builddir@&$ac_builddir&;t t -s&@abs_builddir@&$ac_abs_builddir&;t t -s&@abs_top_builddir@&$ac_abs_top_builddir&;t t -s&@INSTALL@&$ac_INSTALL&;t t -s&@MKDIR_P@&$ac_MKDIR_P&;t t -$ac_datarootdir_hack -" -eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ - >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 - -test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && - { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && - { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ - "$ac_tmp/out"`; test -z "$ac_out"; } && - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' -which seems to be undefined. Please make sure it is defined" >&5 -$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' -which seems to be undefined. Please make sure it is defined" >&2;} - - rm -f "$ac_tmp/stdin" - case $ac_file in - -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; - *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; - esac \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 - ;; - :H) - # - # CONFIG_HEADER - # - if test x"$ac_file" != x-; then - { - $as_echo "/* $configure_input */" \ - && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" - } >"$ac_tmp/config.h" \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 - if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then - { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 -$as_echo "$as_me: $ac_file is unchanged" >&6;} - else - rm -f "$ac_file" - mv "$ac_tmp/config.h" "$ac_file" \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 - fi - else - $as_echo "/* $configure_input */" \ - && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ - || as_fn_error $? "could not create -" "$LINENO" 5 - fi -# Compute "$ac_file"'s index in $config_headers. -_am_arg="$ac_file" -_am_stamp_count=1 -for _am_header in $config_headers :; do - case $_am_header in - $_am_arg | $_am_arg:* ) - break ;; - * ) - _am_stamp_count=`expr $_am_stamp_count + 1` ;; - esac -done -echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || -$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$_am_arg" : 'X\(//\)[^/]' \| \ - X"$_am_arg" : 'X\(//\)$' \| \ - X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$_am_arg" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'`/stamp-h$_am_stamp_count - ;; - - :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 -$as_echo "$as_me: executing $ac_file commands" >&6;} - ;; - esac - - - case $ac_file$ac_mode in - "depfiles":C) test x"$AMDEP_TRUE" != x"" || { - # Older Autoconf quotes --file arguments for eval, but not when files - # are listed without --file. Let's play safe and only enable the eval - # if we detect the quoting. - # TODO: see whether this extra hack can be removed once we start - # requiring Autoconf 2.70 or later. - case $CONFIG_FILES in #( - *\'*) : - eval set x "$CONFIG_FILES" ;; #( - *) : - set x $CONFIG_FILES ;; #( - *) : - ;; -esac - shift - # Used to flag and report bootstrapping failures. - am_rc=0 - for am_mf - do - # Strip MF so we end up with the name of the file. - am_mf=`$as_echo "$am_mf" | sed -e 's/:.*$//'` - # Check whether this is an Automake generated Makefile which includes - # dependency-tracking related rules and includes. - # Grep'ing the whole file directly is not great: AIX grep has a line - # limit of 2048, but all sed's we know have understand at least 4000. - sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \ - || continue - am_dirpart=`$as_dirname -- "$am_mf" || -$as_expr X"$am_mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$am_mf" : 'X\(//\)[^/]' \| \ - X"$am_mf" : 'X\(//\)$' \| \ - X"$am_mf" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$am_mf" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - am_filepart=`$as_basename -- "$am_mf" || -$as_expr X/"$am_mf" : '.*/\([^/][^/]*\)/*$' \| \ - X"$am_mf" : 'X\(//\)$' \| \ - X"$am_mf" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X/"$am_mf" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ - s//\1/ - q - } - /^X\/\(\/\/\)$/{ - s//\1/ - q - } - /^X\/\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - { echo "$as_me:$LINENO: cd "$am_dirpart" \ - && sed -e '/# am--include-marker/d' "$am_filepart" \ - | $MAKE -f - am--depfiles" >&5 - (cd "$am_dirpart" \ - && sed -e '/# am--include-marker/d' "$am_filepart" \ - | $MAKE -f - am--depfiles) >&5 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } || am_rc=$? - done - if test $am_rc -ne 0; then - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "Something went wrong bootstrapping makefile fragments - for automatic dependency tracking. Try re-running configure with the - '--disable-dependency-tracking' option to at least be able to build - the package (albeit without support for automatic dependency tracking). -See \`config.log' for more details" "$LINENO" 5; } - fi - { am_dirpart=; unset am_dirpart;} - { am_filepart=; unset am_filepart;} - { am_mf=; unset am_mf;} - { am_rc=; unset am_rc;} - rm -f conftest-deps.mk -} - ;; - "libtool":C) - - # See if we are running on zsh, and set the options that allow our - # commands through without removal of \ escapes. - if test -n "${ZSH_VERSION+set}"; then - setopt NO_GLOB_SUBST - fi - - cfgfile=${ofile}T - trap "$RM \"$cfgfile\"; exit 1" 1 2 15 - $RM "$cfgfile" - - cat <<_LT_EOF >> "$cfgfile" -#! $SHELL -# Generated automatically by $as_me ($PACKAGE) $VERSION -# NOTE: Changes made to this file will be lost: look at ltmain.sh. - -# Provide generalized library-building support services. -# Written by Gordon Matzigkeit, 1996 - -# Copyright (C) 2014 Free Software Foundation, Inc. -# This is free software; see the source for copying conditions. There is NO -# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -# GNU Libtool is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of of the License, or -# (at your option) any later version. -# -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program or library that is built -# using GNU Libtool, you may include this file under the same -# distribution terms that you use for the rest of that program. -# -# GNU Libtool is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . - - -# The names of the tagged configurations supported by this script. -available_tags='' - -# Configured defaults for sys_lib_dlsearch_path munging. -: \${LT_SYS_LIBRARY_PATH="$configure_time_lt_sys_library_path"} - -# ### BEGIN LIBTOOL CONFIG - -# Which release of libtool.m4 was used? -macro_version=$macro_version -macro_revision=$macro_revision - -# Whether or not to build shared libraries. -build_libtool_libs=$enable_shared - -# Whether or not to build static libraries. -build_old_libs=$enable_static - -# What type of objects to build. -pic_mode=$pic_mode - -# Whether or not to optimize for fast installation. -fast_install=$enable_fast_install - -# Shared archive member basename,for filename based shared library versioning on AIX. -shared_archive_member_spec=$shared_archive_member_spec - -# Shell to use when invoking shell scripts. -SHELL=$lt_SHELL - -# An echo program that protects backslashes. -ECHO=$lt_ECHO - -# The PATH separator for the build system. -PATH_SEPARATOR=$lt_PATH_SEPARATOR - -# The host system. -host_alias=$host_alias -host=$host -host_os=$host_os - -# The build system. -build_alias=$build_alias -build=$build -build_os=$build_os - -# A sed program that does not truncate output. -SED=$lt_SED - -# Sed that helps us avoid accidentally triggering echo(1) options like -n. -Xsed="\$SED -e 1s/^X//" - -# A grep program that handles long lines. -GREP=$lt_GREP - -# An ERE matcher. -EGREP=$lt_EGREP - -# A literal string matcher. -FGREP=$lt_FGREP - -# A BSD- or MS-compatible name lister. -NM=$lt_NM - -# Whether we need soft or hard links. -LN_S=$lt_LN_S - -# What is the maximum length of a command? -max_cmd_len=$max_cmd_len - -# Object file suffix (normally "o"). -objext=$ac_objext - -# Executable file suffix (normally ""). -exeext=$exeext - -# whether the shell understands "unset". -lt_unset=$lt_unset - -# turn spaces into newlines. -SP2NL=$lt_lt_SP2NL - -# turn newlines into spaces. -NL2SP=$lt_lt_NL2SP - -# convert \$build file names to \$host format. -to_host_file_cmd=$lt_cv_to_host_file_cmd - -# convert \$build files to toolchain format. -to_tool_file_cmd=$lt_cv_to_tool_file_cmd - -# An object symbol dumper. -OBJDUMP=$lt_OBJDUMP - -# Method to check whether dependent libraries are shared objects. -deplibs_check_method=$lt_deplibs_check_method - -# Command to use when deplibs_check_method = "file_magic". -file_magic_cmd=$lt_file_magic_cmd - -# How to find potential files when deplibs_check_method = "file_magic". -file_magic_glob=$lt_file_magic_glob - -# Find potential files using nocaseglob when deplibs_check_method = "file_magic". -want_nocaseglob=$lt_want_nocaseglob - -# DLL creation program. -DLLTOOL=$lt_DLLTOOL - -# Command to associate shared and link libraries. -sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd - -# The archiver. -AR=$lt_AR - -# Flags to create an archive. -AR_FLAGS=$lt_AR_FLAGS - -# How to feed a file listing to the archiver. -archiver_list_spec=$lt_archiver_list_spec - -# A symbol stripping program. -STRIP=$lt_STRIP - -# Commands used to install an old-style archive. -RANLIB=$lt_RANLIB -old_postinstall_cmds=$lt_old_postinstall_cmds -old_postuninstall_cmds=$lt_old_postuninstall_cmds - -# Whether to use a lock for old archive extraction. -lock_old_archive_extraction=$lock_old_archive_extraction - -# A C compiler. -LTCC=$lt_CC - -# LTCC compiler flags. -LTCFLAGS=$lt_CFLAGS - -# Take the output of nm and produce a listing of raw symbols and C names. -global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe - -# Transform the output of nm in a proper C declaration. -global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl - -# Transform the output of nm into a list of symbols to manually relocate. -global_symbol_to_import=$lt_lt_cv_sys_global_symbol_to_import - -# Transform the output of nm in a C name address pair. -global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address - -# Transform the output of nm in a C name address pair when lib prefix is needed. -global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix - -# The name lister interface. -nm_interface=$lt_lt_cv_nm_interface - -# Specify filename containing input files for \$NM. -nm_file_list_spec=$lt_nm_file_list_spec - -# The root where to search for dependent libraries,and where our libraries should be installed. -lt_sysroot=$lt_sysroot - -# Command to truncate a binary pipe. -lt_truncate_bin=$lt_lt_cv_truncate_bin - -# The name of the directory that contains temporary libtool files. -objdir=$objdir - -# Used to examine libraries when file_magic_cmd begins with "file". -MAGIC_CMD=$MAGIC_CMD - -# Must we lock files when doing compilation? -need_locks=$lt_need_locks - -# Manifest tool. -MANIFEST_TOOL=$lt_MANIFEST_TOOL - -# Tool to manipulate archived DWARF debug symbol files on Mac OS X. -DSYMUTIL=$lt_DSYMUTIL - -# Tool to change global to local symbols on Mac OS X. -NMEDIT=$lt_NMEDIT - -# Tool to manipulate fat objects and archives on Mac OS X. -LIPO=$lt_LIPO - -# ldd/readelf like tool for Mach-O binaries on Mac OS X. -OTOOL=$lt_OTOOL - -# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. -OTOOL64=$lt_OTOOL64 - -# Old archive suffix (normally "a"). -libext=$libext - -# Shared library suffix (normally ".so"). -shrext_cmds=$lt_shrext_cmds - -# The commands to extract the exported symbol list from a shared archive. -extract_expsyms_cmds=$lt_extract_expsyms_cmds - -# Variables whose values should be saved in libtool wrapper scripts and -# restored at link time. -variables_saved_for_relink=$lt_variables_saved_for_relink - -# Do we need the "lib" prefix for modules? -need_lib_prefix=$need_lib_prefix - -# Do we need a version for libraries? -need_version=$need_version - -# Library versioning type. -version_type=$version_type - -# Shared library runtime path variable. -runpath_var=$runpath_var - -# Shared library path variable. -shlibpath_var=$shlibpath_var - -# Is shlibpath searched before the hard-coded library search path? -shlibpath_overrides_runpath=$shlibpath_overrides_runpath - -# Format of library name prefix. -libname_spec=$lt_libname_spec - -# List of archive names. First name is the real one, the rest are links. -# The last name is the one that the linker finds with -lNAME -library_names_spec=$lt_library_names_spec - -# The coded name of the library, if different from the real name. -soname_spec=$lt_soname_spec - -# Permission mode override for installation of shared libraries. -install_override_mode=$lt_install_override_mode - -# Command to use after installation of a shared archive. -postinstall_cmds=$lt_postinstall_cmds - -# Command to use after uninstallation of a shared archive. -postuninstall_cmds=$lt_postuninstall_cmds - -# Commands used to finish a libtool library installation in a directory. -finish_cmds=$lt_finish_cmds - -# As "finish_cmds", except a single script fragment to be evaled but -# not shown. -finish_eval=$lt_finish_eval - -# Whether we should hardcode library paths into libraries. -hardcode_into_libs=$hardcode_into_libs - -# Compile-time system search path for libraries. -sys_lib_search_path_spec=$lt_sys_lib_search_path_spec - -# Detected run-time system search path for libraries. -sys_lib_dlsearch_path_spec=$lt_configure_time_dlsearch_path - -# Explicit LT_SYS_LIBRARY_PATH set during ./configure time. -configure_time_lt_sys_library_path=$lt_configure_time_lt_sys_library_path - -# Whether dlopen is supported. -dlopen_support=$enable_dlopen - -# Whether dlopen of programs is supported. -dlopen_self=$enable_dlopen_self - -# Whether dlopen of statically linked programs is supported. -dlopen_self_static=$enable_dlopen_self_static - -# Commands to strip libraries. -old_striplib=$lt_old_striplib -striplib=$lt_striplib - - -# The linker used to build libraries. -LD=$lt_LD - -# How to create reloadable object files. -reload_flag=$lt_reload_flag -reload_cmds=$lt_reload_cmds - -# Commands used to build an old-style archive. -old_archive_cmds=$lt_old_archive_cmds - -# A language specific compiler. -CC=$lt_compiler - -# Is the compiler the GNU compiler? -with_gcc=$GCC - -# Compiler flag to turn off builtin functions. -no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag - -# Additional compiler flags for building library objects. -pic_flag=$lt_lt_prog_compiler_pic - -# How to pass a linker flag through the compiler. -wl=$lt_lt_prog_compiler_wl - -# Compiler flag to prevent dynamic linking. -link_static_flag=$lt_lt_prog_compiler_static - -# Does compiler simultaneously support -c and -o options? -compiler_c_o=$lt_lt_cv_prog_compiler_c_o - -# Whether or not to add -lc for building shared libraries. -build_libtool_need_lc=$archive_cmds_need_lc - -# Whether or not to disallow shared libs when runtime libs are static. -allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes - -# Compiler flag to allow reflexive dlopens. -export_dynamic_flag_spec=$lt_export_dynamic_flag_spec - -# Compiler flag to generate shared objects directly from archives. -whole_archive_flag_spec=$lt_whole_archive_flag_spec - -# Whether the compiler copes with passing no objects directly. -compiler_needs_object=$lt_compiler_needs_object - -# Create an old-style archive from a shared archive. -old_archive_from_new_cmds=$lt_old_archive_from_new_cmds - -# Create a temporary old-style archive to link instead of a shared archive. -old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds - -# Commands used to build a shared archive. -archive_cmds=$lt_archive_cmds -archive_expsym_cmds=$lt_archive_expsym_cmds - -# Commands used to build a loadable module if different from building -# a shared archive. -module_cmds=$lt_module_cmds -module_expsym_cmds=$lt_module_expsym_cmds - -# Whether we are building with GNU ld or not. -with_gnu_ld=$lt_with_gnu_ld - -# Flag that allows shared libraries with undefined symbols to be built. -allow_undefined_flag=$lt_allow_undefined_flag - -# Flag that enforces no undefined symbols. -no_undefined_flag=$lt_no_undefined_flag - -# Flag to hardcode \$libdir into a binary during linking. -# This must work even if \$libdir does not exist -hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec - -# Whether we need a single "-rpath" flag with a separated argument. -hardcode_libdir_separator=$lt_hardcode_libdir_separator - -# Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes -# DIR into the resulting binary. -hardcode_direct=$hardcode_direct - -# Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes -# DIR into the resulting binary and the resulting library dependency is -# "absolute",i.e impossible to change by setting \$shlibpath_var if the -# library is relocated. -hardcode_direct_absolute=$hardcode_direct_absolute - -# Set to "yes" if using the -LDIR flag during linking hardcodes DIR -# into the resulting binary. -hardcode_minus_L=$hardcode_minus_L - -# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR -# into the resulting binary. -hardcode_shlibpath_var=$hardcode_shlibpath_var - -# Set to "yes" if building a shared library automatically hardcodes DIR -# into the library and all subsequent libraries and executables linked -# against it. -hardcode_automatic=$hardcode_automatic - -# Set to yes if linker adds runtime paths of dependent libraries -# to runtime path list. -inherit_rpath=$inherit_rpath - -# Whether libtool must link a program against all its dependency libraries. -link_all_deplibs=$link_all_deplibs - -# Set to "yes" if exported symbols are required. -always_export_symbols=$always_export_symbols - -# The commands to list exported symbols. -export_symbols_cmds=$lt_export_symbols_cmds - -# Symbols that should not be listed in the preloaded symbols. -exclude_expsyms=$lt_exclude_expsyms - -# Symbols that must always be exported. -include_expsyms=$lt_include_expsyms - -# Commands necessary for linking programs (against libraries) with templates. -prelink_cmds=$lt_prelink_cmds - -# Commands necessary for finishing linking programs. -postlink_cmds=$lt_postlink_cmds - -# Specify filename containing input files. -file_list_spec=$lt_file_list_spec - -# How to hardcode a shared library path into an executable. -hardcode_action=$hardcode_action - -# ### END LIBTOOL CONFIG - -_LT_EOF - - cat <<'_LT_EOF' >> "$cfgfile" - -# ### BEGIN FUNCTIONS SHARED WITH CONFIGURE - -# func_munge_path_list VARIABLE PATH -# ----------------------------------- -# VARIABLE is name of variable containing _space_ separated list of -# directories to be munged by the contents of PATH, which is string -# having a format: -# "DIR[:DIR]:" -# string "DIR[ DIR]" will be prepended to VARIABLE -# ":DIR[:DIR]" -# string "DIR[ DIR]" will be appended to VARIABLE -# "DIRP[:DIRP]::[DIRA:]DIRA" -# string "DIRP[ DIRP]" will be prepended to VARIABLE and string -# "DIRA[ DIRA]" will be appended to VARIABLE -# "DIR[:DIR]" -# VARIABLE will be replaced by "DIR[ DIR]" -func_munge_path_list () -{ - case x$2 in - x) - ;; - *:) - eval $1=\"`$ECHO $2 | $SED 's/:/ /g'` \$$1\" - ;; - x:*) - eval $1=\"\$$1 `$ECHO $2 | $SED 's/:/ /g'`\" - ;; - *::*) - eval $1=\"\$$1\ `$ECHO $2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" - eval $1=\"`$ECHO $2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \$$1\" - ;; - *) - eval $1=\"`$ECHO $2 | $SED 's/:/ /g'`\" - ;; - esac -} - - -# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. -func_cc_basename () -{ - for cc_temp in $*""; do - case $cc_temp in - compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; - distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; - \-*) ;; - *) break;; - esac - done - func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` -} - - -# ### END FUNCTIONS SHARED WITH CONFIGURE - -_LT_EOF - - case $host_os in - aix3*) - cat <<\_LT_EOF >> "$cfgfile" -# AIX sometimes has problems with the GCC collect2 program. For some -# reason, if we set the COLLECT_NAMES environment variable, the problems -# vanish in a puff of smoke. -if test set != "${COLLECT_NAMES+set}"; then - COLLECT_NAMES= - export COLLECT_NAMES -fi -_LT_EOF - ;; - esac - - -ltmain=$ac_aux_dir/ltmain.sh - - - # We use sed instead of cat because bash on DJGPP gets confused if - # if finds mixed CR/LF and LF-only lines. Since sed operates in - # text mode, it properly converts lines to CR/LF. This bash problem - # is reportedly fixed, but why not run on old versions too? - sed '$q' "$ltmain" >> "$cfgfile" \ - || (rm -f "$cfgfile"; exit 1) - - mv -f "$cfgfile" "$ofile" || - (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") - chmod +x "$ofile" - - ;; - - esac -done # for ac_tag - - -as_fn_exit 0 diff --git a/Extended/libwebp/config.sub b/Extended/libwebp/config.sub deleted file mode 100755 index 1d8e98b..0000000 --- a/Extended/libwebp/config.sub +++ /dev/null @@ -1,1801 +0,0 @@ -#! /bin/sh -# Configuration validation subroutine script. -# Copyright 1992-2018 Free Software Foundation, Inc. - -timestamp='2018-02-22' - -# This file is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, see . -# -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that -# program. This Exception is an additional permission under section 7 -# of the GNU General Public License, version 3 ("GPLv3"). - - -# Please send patches to . -# -# Configuration subroutine to validate and canonicalize a configuration type. -# Supply the specified configuration type as an argument. -# If it is invalid, we print an error message on stderr and exit with code 1. -# Otherwise, we print the canonical config type on stdout and succeed. - -# You can get the latest version of this script from: -# https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub - -# This file is supposed to be the same for all GNU packages -# and recognize all the CPU types, system types and aliases -# that are meaningful with *any* GNU software. -# Each package is responsible for reporting which valid configurations -# it does not support. The user should be able to distinguish -# a failure to support a valid configuration from a meaningless -# configuration. - -# The goal of this file is to map all the various variations of a given -# machine specification into a single specification in the form: -# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM -# or in some cases, the newer four-part form: -# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM -# It is wrong to echo any other type of specification. - -me=`echo "$0" | sed -e 's,.*/,,'` - -usage="\ -Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS - -Canonicalize a configuration name. - -Options: - -h, --help print this help, then exit - -t, --time-stamp print date of last modification, then exit - -v, --version print version number, then exit - -Report bugs and patches to ." - -version="\ -GNU config.sub ($timestamp) - -Copyright 1992-2018 Free Software Foundation, Inc. - -This is free software; see the source for copying conditions. There is NO -warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." - -help=" -Try \`$me --help' for more information." - -# Parse command line -while test $# -gt 0 ; do - case $1 in - --time-stamp | --time* | -t ) - echo "$timestamp" ; exit ;; - --version | -v ) - echo "$version" ; exit ;; - --help | --h* | -h ) - echo "$usage"; exit ;; - -- ) # Stop option processing - shift; break ;; - - ) # Use stdin as input. - break ;; - -* ) - echo "$me: invalid option $1$help" - exit 1 ;; - - *local*) - # First pass through any local machine types. - echo "$1" - exit ;; - - * ) - break ;; - esac -done - -case $# in - 0) echo "$me: missing argument$help" >&2 - exit 1;; - 1) ;; - *) echo "$me: too many arguments$help" >&2 - exit 1;; -esac - -# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). -# Here we must recognize all the valid KERNEL-OS combinations. -maybe_os=`echo "$1" | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` -case $maybe_os in - nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ - linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ - knetbsd*-gnu* | netbsd*-gnu* | netbsd*-eabi* | \ - kopensolaris*-gnu* | cloudabi*-eabi* | \ - storm-chaos* | os2-emx* | rtmk-nova*) - os=-$maybe_os - basic_machine=`echo "$1" | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` - ;; - android-linux) - os=-linux-android - basic_machine=`echo "$1" | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown - ;; - *) - basic_machine=`echo "$1" | sed 's/-[^-]*$//'` - if [ "$basic_machine" != "$1" ] - then os=`echo "$1" | sed 's/.*-/-/'` - else os=; fi - ;; -esac - -### Let's recognize common machines as not being operating systems so -### that things like config.sub decstation-3100 work. We also -### recognize some manufacturers as not being operating systems, so we -### can provide default operating systems below. -case $os in - -sun*os*) - # Prevent following clause from handling this invalid input. - ;; - -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ - -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ - -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ - -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ - -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ - -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ - -apple | -axis | -knuth | -cray | -microblaze*) - os= - basic_machine=$1 - ;; - -bluegene*) - os=-cnk - ;; - -sim | -cisco | -oki | -wec | -winbond) - os= - basic_machine=$1 - ;; - -scout) - ;; - -wrs) - os=-vxworks - basic_machine=$1 - ;; - -chorusos*) - os=-chorusos - basic_machine=$1 - ;; - -chorusrdb) - os=-chorusrdb - basic_machine=$1 - ;; - -hiux*) - os=-hiuxwe2 - ;; - -sco6) - os=-sco5v6 - basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` - ;; - -sco5) - os=-sco3.2v5 - basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` - ;; - -sco4) - os=-sco3.2v4 - basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` - ;; - -sco3.2.[4-9]*) - os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` - basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` - ;; - -sco3.2v[4-9]*) - # Don't forget version if it is 3.2v4 or newer. - basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` - ;; - -sco5v6*) - # Don't forget version if it is 3.2v4 or newer. - basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` - ;; - -sco*) - os=-sco3.2v2 - basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` - ;; - -udk*) - basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` - ;; - -isc) - os=-isc2.2 - basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` - ;; - -clix*) - basic_machine=clipper-intergraph - ;; - -isc*) - basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` - ;; - -lynx*178) - os=-lynxos178 - ;; - -lynx*5) - os=-lynxos5 - ;; - -lynx*) - os=-lynxos - ;; - -ptx*) - basic_machine=`echo "$1" | sed -e 's/86-.*/86-sequent/'` - ;; - -psos*) - os=-psos - ;; - -mint | -mint[0-9]*) - basic_machine=m68k-atari - os=-mint - ;; -esac - -# Decode aliases for certain CPU-COMPANY combinations. -case $basic_machine in - # Recognize the basic CPU types without company name. - # Some are omitted here because they have special meanings below. - 1750a | 580 \ - | a29k \ - | aarch64 | aarch64_be \ - | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ - | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ - | am33_2.0 \ - | arc | arceb \ - | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ - | avr | avr32 \ - | ba \ - | be32 | be64 \ - | bfin \ - | c4x | c8051 | clipper \ - | d10v | d30v | dlx | dsp16xx \ - | e2k | epiphany \ - | fido | fr30 | frv | ft32 \ - | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ - | hexagon \ - | i370 | i860 | i960 | ia16 | ia64 \ - | ip2k | iq2000 \ - | k1om \ - | le32 | le64 \ - | lm32 \ - | m32c | m32r | m32rle | m68000 | m68k | m88k \ - | maxq | mb | microblaze | microblazeel | mcore | mep | metag \ - | mips | mipsbe | mipseb | mipsel | mipsle \ - | mips16 \ - | mips64 | mips64el \ - | mips64octeon | mips64octeonel \ - | mips64orion | mips64orionel \ - | mips64r5900 | mips64r5900el \ - | mips64vr | mips64vrel \ - | mips64vr4100 | mips64vr4100el \ - | mips64vr4300 | mips64vr4300el \ - | mips64vr5000 | mips64vr5000el \ - | mips64vr5900 | mips64vr5900el \ - | mipsisa32 | mipsisa32el \ - | mipsisa32r2 | mipsisa32r2el \ - | mipsisa32r6 | mipsisa32r6el \ - | mipsisa64 | mipsisa64el \ - | mipsisa64r2 | mipsisa64r2el \ - | mipsisa64r6 | mipsisa64r6el \ - | mipsisa64sb1 | mipsisa64sb1el \ - | mipsisa64sr71k | mipsisa64sr71kel \ - | mipsr5900 | mipsr5900el \ - | mipstx39 | mipstx39el \ - | mn10200 | mn10300 \ - | moxie \ - | mt \ - | msp430 \ - | nds32 | nds32le | nds32be \ - | nios | nios2 | nios2eb | nios2el \ - | ns16k | ns32k \ - | open8 | or1k | or1knd | or32 \ - | pdp10 | pj | pjl \ - | powerpc | powerpc64 | powerpc64le | powerpcle \ - | pru \ - | pyramid \ - | riscv32 | riscv64 \ - | rl78 | rx \ - | score \ - | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[234]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ - | sh64 | sh64le \ - | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ - | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ - | spu \ - | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ - | ubicom32 \ - | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ - | visium \ - | wasm32 \ - | x86 | xc16x | xstormy16 | xtensa \ - | z8k | z80) - basic_machine=$basic_machine-unknown - ;; - c54x) - basic_machine=tic54x-unknown - ;; - c55x) - basic_machine=tic55x-unknown - ;; - c6x) - basic_machine=tic6x-unknown - ;; - leon|leon[3-9]) - basic_machine=sparc-$basic_machine - ;; - m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip) - basic_machine=$basic_machine-unknown - os=-none - ;; - m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65) - ;; - ms1) - basic_machine=mt-unknown - ;; - - strongarm | thumb | xscale) - basic_machine=arm-unknown - ;; - xgate) - basic_machine=$basic_machine-unknown - os=-none - ;; - xscaleeb) - basic_machine=armeb-unknown - ;; - - xscaleel) - basic_machine=armel-unknown - ;; - - # We use `pc' rather than `unknown' - # because (1) that's what they normally are, and - # (2) the word "unknown" tends to confuse beginning users. - i*86 | x86_64) - basic_machine=$basic_machine-pc - ;; - # Object if more than one company name word. - *-*-*) - echo Invalid configuration \`"$1"\': machine \`"$basic_machine"\' not recognized 1>&2 - exit 1 - ;; - # Recognize the basic CPU types with company name. - 580-* \ - | a29k-* \ - | aarch64-* | aarch64_be-* \ - | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ - | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ - | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \ - | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ - | avr-* | avr32-* \ - | ba-* \ - | be32-* | be64-* \ - | bfin-* | bs2000-* \ - | c[123]* | c30-* | [cjt]90-* | c4x-* \ - | c8051-* | clipper-* | craynv-* | cydra-* \ - | d10v-* | d30v-* | dlx-* \ - | e2k-* | elxsi-* \ - | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ - | h8300-* | h8500-* \ - | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ - | hexagon-* \ - | i*86-* | i860-* | i960-* | ia16-* | ia64-* \ - | ip2k-* | iq2000-* \ - | k1om-* \ - | le32-* | le64-* \ - | lm32-* \ - | m32c-* | m32r-* | m32rle-* \ - | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ - | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ - | microblaze-* | microblazeel-* \ - | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ - | mips16-* \ - | mips64-* | mips64el-* \ - | mips64octeon-* | mips64octeonel-* \ - | mips64orion-* | mips64orionel-* \ - | mips64r5900-* | mips64r5900el-* \ - | mips64vr-* | mips64vrel-* \ - | mips64vr4100-* | mips64vr4100el-* \ - | mips64vr4300-* | mips64vr4300el-* \ - | mips64vr5000-* | mips64vr5000el-* \ - | mips64vr5900-* | mips64vr5900el-* \ - | mipsisa32-* | mipsisa32el-* \ - | mipsisa32r2-* | mipsisa32r2el-* \ - | mipsisa32r6-* | mipsisa32r6el-* \ - | mipsisa64-* | mipsisa64el-* \ - | mipsisa64r2-* | mipsisa64r2el-* \ - | mipsisa64r6-* | mipsisa64r6el-* \ - | mipsisa64sb1-* | mipsisa64sb1el-* \ - | mipsisa64sr71k-* | mipsisa64sr71kel-* \ - | mipsr5900-* | mipsr5900el-* \ - | mipstx39-* | mipstx39el-* \ - | mmix-* \ - | mt-* \ - | msp430-* \ - | nds32-* | nds32le-* | nds32be-* \ - | nios-* | nios2-* | nios2eb-* | nios2el-* \ - | none-* | np1-* | ns16k-* | ns32k-* \ - | open8-* \ - | or1k*-* \ - | orion-* \ - | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ - | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ - | pru-* \ - | pyramid-* \ - | riscv32-* | riscv64-* \ - | rl78-* | romp-* | rs6000-* | rx-* \ - | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ - | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ - | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ - | sparclite-* \ - | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx*-* \ - | tahoe-* \ - | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ - | tile*-* \ - | tron-* \ - | ubicom32-* \ - | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ - | vax-* \ - | visium-* \ - | wasm32-* \ - | we32k-* \ - | x86-* | x86_64-* | xc16x-* | xps100-* \ - | xstormy16-* | xtensa*-* \ - | ymp-* \ - | z8k-* | z80-*) - ;; - # Recognize the basic CPU types without company name, with glob match. - xtensa*) - basic_machine=$basic_machine-unknown - ;; - # Recognize the various machine names and aliases which stand - # for a CPU type and a company and sometimes even an OS. - 386bsd) - basic_machine=i386-pc - os=-bsd - ;; - 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) - basic_machine=m68000-att - ;; - 3b*) - basic_machine=we32k-att - ;; - a29khif) - basic_machine=a29k-amd - os=-udi - ;; - abacus) - basic_machine=abacus-unknown - ;; - adobe68k) - basic_machine=m68010-adobe - os=-scout - ;; - alliant | fx80) - basic_machine=fx80-alliant - ;; - altos | altos3068) - basic_machine=m68k-altos - ;; - am29k) - basic_machine=a29k-none - os=-bsd - ;; - amd64) - basic_machine=x86_64-pc - ;; - amd64-*) - basic_machine=x86_64-`echo "$basic_machine" | sed 's/^[^-]*-//'` - ;; - amdahl) - basic_machine=580-amdahl - os=-sysv - ;; - amiga | amiga-*) - basic_machine=m68k-unknown - ;; - amigaos | amigados) - basic_machine=m68k-unknown - os=-amigaos - ;; - amigaunix | amix) - basic_machine=m68k-unknown - os=-sysv4 - ;; - apollo68) - basic_machine=m68k-apollo - os=-sysv - ;; - apollo68bsd) - basic_machine=m68k-apollo - os=-bsd - ;; - aros) - basic_machine=i386-pc - os=-aros - ;; - asmjs) - basic_machine=asmjs-unknown - ;; - aux) - basic_machine=m68k-apple - os=-aux - ;; - balance) - basic_machine=ns32k-sequent - os=-dynix - ;; - blackfin) - basic_machine=bfin-unknown - os=-linux - ;; - blackfin-*) - basic_machine=bfin-`echo "$basic_machine" | sed 's/^[^-]*-//'` - os=-linux - ;; - bluegene*) - basic_machine=powerpc-ibm - os=-cnk - ;; - c54x-*) - basic_machine=tic54x-`echo "$basic_machine" | sed 's/^[^-]*-//'` - ;; - c55x-*) - basic_machine=tic55x-`echo "$basic_machine" | sed 's/^[^-]*-//'` - ;; - c6x-*) - basic_machine=tic6x-`echo "$basic_machine" | sed 's/^[^-]*-//'` - ;; - c90) - basic_machine=c90-cray - os=-unicos - ;; - cegcc) - basic_machine=arm-unknown - os=-cegcc - ;; - convex-c1) - basic_machine=c1-convex - os=-bsd - ;; - convex-c2) - basic_machine=c2-convex - os=-bsd - ;; - convex-c32) - basic_machine=c32-convex - os=-bsd - ;; - convex-c34) - basic_machine=c34-convex - os=-bsd - ;; - convex-c38) - basic_machine=c38-convex - os=-bsd - ;; - cray | j90) - basic_machine=j90-cray - os=-unicos - ;; - craynv) - basic_machine=craynv-cray - os=-unicosmp - ;; - cr16 | cr16-*) - basic_machine=cr16-unknown - os=-elf - ;; - crds | unos) - basic_machine=m68k-crds - ;; - crisv32 | crisv32-* | etraxfs*) - basic_machine=crisv32-axis - ;; - cris | cris-* | etrax*) - basic_machine=cris-axis - ;; - crx) - basic_machine=crx-unknown - os=-elf - ;; - da30 | da30-*) - basic_machine=m68k-da30 - ;; - decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) - basic_machine=mips-dec - ;; - decsystem10* | dec10*) - basic_machine=pdp10-dec - os=-tops10 - ;; - decsystem20* | dec20*) - basic_machine=pdp10-dec - os=-tops20 - ;; - delta | 3300 | motorola-3300 | motorola-delta \ - | 3300-motorola | delta-motorola) - basic_machine=m68k-motorola - ;; - delta88) - basic_machine=m88k-motorola - os=-sysv3 - ;; - dicos) - basic_machine=i686-pc - os=-dicos - ;; - djgpp) - basic_machine=i586-pc - os=-msdosdjgpp - ;; - dpx20 | dpx20-*) - basic_machine=rs6000-bull - os=-bosx - ;; - dpx2*) - basic_machine=m68k-bull - os=-sysv3 - ;; - e500v[12]) - basic_machine=powerpc-unknown - os=$os"spe" - ;; - e500v[12]-*) - basic_machine=powerpc-`echo "$basic_machine" | sed 's/^[^-]*-//'` - os=$os"spe" - ;; - ebmon29k) - basic_machine=a29k-amd - os=-ebmon - ;; - elxsi) - basic_machine=elxsi-elxsi - os=-bsd - ;; - encore | umax | mmax) - basic_machine=ns32k-encore - ;; - es1800 | OSE68k | ose68k | ose | OSE) - basic_machine=m68k-ericsson - os=-ose - ;; - fx2800) - basic_machine=i860-alliant - ;; - genix) - basic_machine=ns32k-ns - ;; - gmicro) - basic_machine=tron-gmicro - os=-sysv - ;; - go32) - basic_machine=i386-pc - os=-go32 - ;; - h3050r* | hiux*) - basic_machine=hppa1.1-hitachi - os=-hiuxwe2 - ;; - h8300hms) - basic_machine=h8300-hitachi - os=-hms - ;; - h8300xray) - basic_machine=h8300-hitachi - os=-xray - ;; - h8500hms) - basic_machine=h8500-hitachi - os=-hms - ;; - harris) - basic_machine=m88k-harris - os=-sysv3 - ;; - hp300-*) - basic_machine=m68k-hp - ;; - hp300bsd) - basic_machine=m68k-hp - os=-bsd - ;; - hp300hpux) - basic_machine=m68k-hp - os=-hpux - ;; - hp3k9[0-9][0-9] | hp9[0-9][0-9]) - basic_machine=hppa1.0-hp - ;; - hp9k2[0-9][0-9] | hp9k31[0-9]) - basic_machine=m68000-hp - ;; - hp9k3[2-9][0-9]) - basic_machine=m68k-hp - ;; - hp9k6[0-9][0-9] | hp6[0-9][0-9]) - basic_machine=hppa1.0-hp - ;; - hp9k7[0-79][0-9] | hp7[0-79][0-9]) - basic_machine=hppa1.1-hp - ;; - hp9k78[0-9] | hp78[0-9]) - # FIXME: really hppa2.0-hp - basic_machine=hppa1.1-hp - ;; - hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) - # FIXME: really hppa2.0-hp - basic_machine=hppa1.1-hp - ;; - hp9k8[0-9][13679] | hp8[0-9][13679]) - basic_machine=hppa1.1-hp - ;; - hp9k8[0-9][0-9] | hp8[0-9][0-9]) - basic_machine=hppa1.0-hp - ;; - hppaosf) - basic_machine=hppa1.1-hp - os=-osf - ;; - hppro) - basic_machine=hppa1.1-hp - os=-proelf - ;; - i370-ibm* | ibm*) - basic_machine=i370-ibm - ;; - i*86v32) - basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'` - os=-sysv32 - ;; - i*86v4*) - basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'` - os=-sysv4 - ;; - i*86v) - basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'` - os=-sysv - ;; - i*86sol2) - basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'` - os=-solaris2 - ;; - i386mach) - basic_machine=i386-mach - os=-mach - ;; - vsta) - basic_machine=i386-unknown - os=-vsta - ;; - iris | iris4d) - basic_machine=mips-sgi - case $os in - -irix*) - ;; - *) - os=-irix4 - ;; - esac - ;; - isi68 | isi) - basic_machine=m68k-isi - os=-sysv - ;; - leon-*|leon[3-9]-*) - basic_machine=sparc-`echo "$basic_machine" | sed 's/-.*//'` - ;; - m68knommu) - basic_machine=m68k-unknown - os=-linux - ;; - m68knommu-*) - basic_machine=m68k-`echo "$basic_machine" | sed 's/^[^-]*-//'` - os=-linux - ;; - magnum | m3230) - basic_machine=mips-mips - os=-sysv - ;; - merlin) - basic_machine=ns32k-utek - os=-sysv - ;; - microblaze*) - basic_machine=microblaze-xilinx - ;; - mingw64) - basic_machine=x86_64-pc - os=-mingw64 - ;; - mingw32) - basic_machine=i686-pc - os=-mingw32 - ;; - mingw32ce) - basic_machine=arm-unknown - os=-mingw32ce - ;; - miniframe) - basic_machine=m68000-convergent - ;; - *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) - basic_machine=m68k-atari - os=-mint - ;; - mips3*-*) - basic_machine=`echo "$basic_machine" | sed -e 's/mips3/mips64/'` - ;; - mips3*) - basic_machine=`echo "$basic_machine" | sed -e 's/mips3/mips64/'`-unknown - ;; - monitor) - basic_machine=m68k-rom68k - os=-coff - ;; - morphos) - basic_machine=powerpc-unknown - os=-morphos - ;; - moxiebox) - basic_machine=moxie-unknown - os=-moxiebox - ;; - msdos) - basic_machine=i386-pc - os=-msdos - ;; - ms1-*) - basic_machine=`echo "$basic_machine" | sed -e 's/ms1-/mt-/'` - ;; - msys) - basic_machine=i686-pc - os=-msys - ;; - mvs) - basic_machine=i370-ibm - os=-mvs - ;; - nacl) - basic_machine=le32-unknown - os=-nacl - ;; - ncr3000) - basic_machine=i486-ncr - os=-sysv4 - ;; - netbsd386) - basic_machine=i386-unknown - os=-netbsd - ;; - netwinder) - basic_machine=armv4l-rebel - os=-linux - ;; - news | news700 | news800 | news900) - basic_machine=m68k-sony - os=-newsos - ;; - news1000) - basic_machine=m68030-sony - os=-newsos - ;; - news-3600 | risc-news) - basic_machine=mips-sony - os=-newsos - ;; - necv70) - basic_machine=v70-nec - os=-sysv - ;; - next | m*-next) - basic_machine=m68k-next - case $os in - -nextstep* ) - ;; - -ns2*) - os=-nextstep2 - ;; - *) - os=-nextstep3 - ;; - esac - ;; - nh3000) - basic_machine=m68k-harris - os=-cxux - ;; - nh[45]000) - basic_machine=m88k-harris - os=-cxux - ;; - nindy960) - basic_machine=i960-intel - os=-nindy - ;; - mon960) - basic_machine=i960-intel - os=-mon960 - ;; - nonstopux) - basic_machine=mips-compaq - os=-nonstopux - ;; - np1) - basic_machine=np1-gould - ;; - neo-tandem) - basic_machine=neo-tandem - ;; - nse-tandem) - basic_machine=nse-tandem - ;; - nsr-tandem) - basic_machine=nsr-tandem - ;; - nsv-tandem) - basic_machine=nsv-tandem - ;; - nsx-tandem) - basic_machine=nsx-tandem - ;; - op50n-* | op60c-*) - basic_machine=hppa1.1-oki - os=-proelf - ;; - openrisc | openrisc-*) - basic_machine=or32-unknown - ;; - os400) - basic_machine=powerpc-ibm - os=-os400 - ;; - OSE68000 | ose68000) - basic_machine=m68000-ericsson - os=-ose - ;; - os68k) - basic_machine=m68k-none - os=-os68k - ;; - pa-hitachi) - basic_machine=hppa1.1-hitachi - os=-hiuxwe2 - ;; - paragon) - basic_machine=i860-intel - os=-osf - ;; - parisc) - basic_machine=hppa-unknown - os=-linux - ;; - parisc-*) - basic_machine=hppa-`echo "$basic_machine" | sed 's/^[^-]*-//'` - os=-linux - ;; - pbd) - basic_machine=sparc-tti - ;; - pbb) - basic_machine=m68k-tti - ;; - pc532 | pc532-*) - basic_machine=ns32k-pc532 - ;; - pc98) - basic_machine=i386-pc - ;; - pc98-*) - basic_machine=i386-`echo "$basic_machine" | sed 's/^[^-]*-//'` - ;; - pentium | p5 | k5 | k6 | nexgen | viac3) - basic_machine=i586-pc - ;; - pentiumpro | p6 | 6x86 | athlon | athlon_*) - basic_machine=i686-pc - ;; - pentiumii | pentium2 | pentiumiii | pentium3) - basic_machine=i686-pc - ;; - pentium4) - basic_machine=i786-pc - ;; - pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) - basic_machine=i586-`echo "$basic_machine" | sed 's/^[^-]*-//'` - ;; - pentiumpro-* | p6-* | 6x86-* | athlon-*) - basic_machine=i686-`echo "$basic_machine" | sed 's/^[^-]*-//'` - ;; - pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) - basic_machine=i686-`echo "$basic_machine" | sed 's/^[^-]*-//'` - ;; - pentium4-*) - basic_machine=i786-`echo "$basic_machine" | sed 's/^[^-]*-//'` - ;; - pn) - basic_machine=pn-gould - ;; - power) basic_machine=power-ibm - ;; - ppc | ppcbe) basic_machine=powerpc-unknown - ;; - ppc-* | ppcbe-*) - basic_machine=powerpc-`echo "$basic_machine" | sed 's/^[^-]*-//'` - ;; - ppcle | powerpclittle) - basic_machine=powerpcle-unknown - ;; - ppcle-* | powerpclittle-*) - basic_machine=powerpcle-`echo "$basic_machine" | sed 's/^[^-]*-//'` - ;; - ppc64) basic_machine=powerpc64-unknown - ;; - ppc64-*) basic_machine=powerpc64-`echo "$basic_machine" | sed 's/^[^-]*-//'` - ;; - ppc64le | powerpc64little) - basic_machine=powerpc64le-unknown - ;; - ppc64le-* | powerpc64little-*) - basic_machine=powerpc64le-`echo "$basic_machine" | sed 's/^[^-]*-//'` - ;; - ps2) - basic_machine=i386-ibm - ;; - pw32) - basic_machine=i586-unknown - os=-pw32 - ;; - rdos | rdos64) - basic_machine=x86_64-pc - os=-rdos - ;; - rdos32) - basic_machine=i386-pc - os=-rdos - ;; - rom68k) - basic_machine=m68k-rom68k - os=-coff - ;; - rm[46]00) - basic_machine=mips-siemens - ;; - rtpc | rtpc-*) - basic_machine=romp-ibm - ;; - s390 | s390-*) - basic_machine=s390-ibm - ;; - s390x | s390x-*) - basic_machine=s390x-ibm - ;; - sa29200) - basic_machine=a29k-amd - os=-udi - ;; - sb1) - basic_machine=mipsisa64sb1-unknown - ;; - sb1el) - basic_machine=mipsisa64sb1el-unknown - ;; - sde) - basic_machine=mipsisa32-sde - os=-elf - ;; - sei) - basic_machine=mips-sei - os=-seiux - ;; - sequent) - basic_machine=i386-sequent - ;; - sh5el) - basic_machine=sh5le-unknown - ;; - simso-wrs) - basic_machine=sparclite-wrs - os=-vxworks - ;; - sps7) - basic_machine=m68k-bull - os=-sysv2 - ;; - spur) - basic_machine=spur-unknown - ;; - st2000) - basic_machine=m68k-tandem - ;; - stratus) - basic_machine=i860-stratus - os=-sysv4 - ;; - strongarm-* | thumb-*) - basic_machine=arm-`echo "$basic_machine" | sed 's/^[^-]*-//'` - ;; - sun2) - basic_machine=m68000-sun - ;; - sun2os3) - basic_machine=m68000-sun - os=-sunos3 - ;; - sun2os4) - basic_machine=m68000-sun - os=-sunos4 - ;; - sun3os3) - basic_machine=m68k-sun - os=-sunos3 - ;; - sun3os4) - basic_machine=m68k-sun - os=-sunos4 - ;; - sun4os3) - basic_machine=sparc-sun - os=-sunos3 - ;; - sun4os4) - basic_machine=sparc-sun - os=-sunos4 - ;; - sun4sol2) - basic_machine=sparc-sun - os=-solaris2 - ;; - sun3 | sun3-*) - basic_machine=m68k-sun - ;; - sun4) - basic_machine=sparc-sun - ;; - sun386 | sun386i | roadrunner) - basic_machine=i386-sun - ;; - sv1) - basic_machine=sv1-cray - os=-unicos - ;; - symmetry) - basic_machine=i386-sequent - os=-dynix - ;; - t3e) - basic_machine=alphaev5-cray - os=-unicos - ;; - t90) - basic_machine=t90-cray - os=-unicos - ;; - tile*) - basic_machine=$basic_machine-unknown - os=-linux-gnu - ;; - tx39) - basic_machine=mipstx39-unknown - ;; - tx39el) - basic_machine=mipstx39el-unknown - ;; - toad1) - basic_machine=pdp10-xkl - os=-tops20 - ;; - tower | tower-32) - basic_machine=m68k-ncr - ;; - tpf) - basic_machine=s390x-ibm - os=-tpf - ;; - udi29k) - basic_machine=a29k-amd - os=-udi - ;; - ultra3) - basic_machine=a29k-nyu - os=-sym1 - ;; - v810 | necv810) - basic_machine=v810-nec - os=-none - ;; - vaxv) - basic_machine=vax-dec - os=-sysv - ;; - vms) - basic_machine=vax-dec - os=-vms - ;; - vpp*|vx|vx-*) - basic_machine=f301-fujitsu - ;; - vxworks960) - basic_machine=i960-wrs - os=-vxworks - ;; - vxworks68) - basic_machine=m68k-wrs - os=-vxworks - ;; - vxworks29k) - basic_machine=a29k-wrs - os=-vxworks - ;; - w65*) - basic_machine=w65-wdc - os=-none - ;; - w89k-*) - basic_machine=hppa1.1-winbond - os=-proelf - ;; - x64) - basic_machine=x86_64-pc - ;; - xbox) - basic_machine=i686-pc - os=-mingw32 - ;; - xps | xps100) - basic_machine=xps100-honeywell - ;; - xscale-* | xscalee[bl]-*) - basic_machine=`echo "$basic_machine" | sed 's/^xscale/arm/'` - ;; - ymp) - basic_machine=ymp-cray - os=-unicos - ;; - none) - basic_machine=none-none - os=-none - ;; - -# Here we handle the default manufacturer of certain CPU types. It is in -# some cases the only manufacturer, in others, it is the most popular. - w89k) - basic_machine=hppa1.1-winbond - ;; - op50n) - basic_machine=hppa1.1-oki - ;; - op60c) - basic_machine=hppa1.1-oki - ;; - romp) - basic_machine=romp-ibm - ;; - mmix) - basic_machine=mmix-knuth - ;; - rs6000) - basic_machine=rs6000-ibm - ;; - vax) - basic_machine=vax-dec - ;; - pdp11) - basic_machine=pdp11-dec - ;; - we32k) - basic_machine=we32k-att - ;; - sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) - basic_machine=sh-unknown - ;; - cydra) - basic_machine=cydra-cydrome - ;; - orion) - basic_machine=orion-highlevel - ;; - orion105) - basic_machine=clipper-highlevel - ;; - mac | mpw | mac-mpw) - basic_machine=m68k-apple - ;; - pmac | pmac-mpw) - basic_machine=powerpc-apple - ;; - *-unknown) - # Make sure to match an already-canonicalized machine name. - ;; - *) - echo Invalid configuration \`"$1"\': machine \`"$basic_machine"\' not recognized 1>&2 - exit 1 - ;; -esac - -# Here we canonicalize certain aliases for manufacturers. -case $basic_machine in - *-digital*) - basic_machine=`echo "$basic_machine" | sed 's/digital.*/dec/'` - ;; - *-commodore*) - basic_machine=`echo "$basic_machine" | sed 's/commodore.*/cbm/'` - ;; - *) - ;; -esac - -# Decode manufacturer-specific aliases for certain operating systems. - -if [ x"$os" != x"" ] -then -case $os in - # First match some system type aliases that might get confused - # with valid system types. - # -solaris* is a basic system type, with this one exception. - -auroraux) - os=-auroraux - ;; - -solaris1 | -solaris1.*) - os=`echo $os | sed -e 's|solaris1|sunos4|'` - ;; - -solaris) - os=-solaris2 - ;; - -unixware*) - os=-sysv4.2uw - ;; - -gnu/linux*) - os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` - ;; - # es1800 is here to avoid being matched by es* (a different OS) - -es1800*) - os=-ose - ;; - # Now accept the basic system types. - # The portable systems comes first. - # Each alternative MUST end in a * to match a version number. - # -sysv* is not here because it comes later, after sysvr4. - -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ - | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ - | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ - | -sym* | -kopensolaris* | -plan9* \ - | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ - | -aos* | -aros* | -cloudabi* | -sortix* \ - | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ - | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ - | -hiux* | -knetbsd* | -mirbsd* | -netbsd* \ - | -bitrig* | -openbsd* | -solidbsd* | -libertybsd* \ - | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ - | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ - | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ - | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ - | -chorusos* | -chorusrdb* | -cegcc* | -glidix* \ - | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ - | -midipix* | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ - | -linux-newlib* | -linux-musl* | -linux-uclibc* \ - | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \ - | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* \ - | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ - | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ - | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ - | -morphos* | -superux* | -rtmk* | -windiss* \ - | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ - | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* \ - | -onefs* | -tirtos* | -phoenix* | -fuchsia* | -redox* | -bme* \ - | -midnightbsd*) - # Remember, each alternative MUST END IN *, to match a version number. - ;; - -qnx*) - case $basic_machine in - x86-* | i*86-*) - ;; - *) - os=-nto$os - ;; - esac - ;; - -nto-qnx*) - ;; - -nto*) - os=`echo $os | sed -e 's|nto|nto-qnx|'` - ;; - -sim | -xray | -os68k* | -v88r* \ - | -windows* | -osx | -abug | -netware* | -os9* \ - | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) - ;; - -mac*) - os=`echo "$os" | sed -e 's|mac|macos|'` - ;; - -linux-dietlibc) - os=-linux-dietlibc - ;; - -linux*) - os=`echo $os | sed -e 's|linux|linux-gnu|'` - ;; - -sunos5*) - os=`echo "$os" | sed -e 's|sunos5|solaris2|'` - ;; - -sunos6*) - os=`echo "$os" | sed -e 's|sunos6|solaris3|'` - ;; - -opened*) - os=-openedition - ;; - -os400*) - os=-os400 - ;; - -wince*) - os=-wince - ;; - -utek*) - os=-bsd - ;; - -dynix*) - os=-bsd - ;; - -acis*) - os=-aos - ;; - -atheos*) - os=-atheos - ;; - -syllable*) - os=-syllable - ;; - -386bsd) - os=-bsd - ;; - -ctix* | -uts*) - os=-sysv - ;; - -nova*) - os=-rtmk-nova - ;; - -ns2) - os=-nextstep2 - ;; - -nsk*) - os=-nsk - ;; - # Preserve the version number of sinix5. - -sinix5.*) - os=`echo $os | sed -e 's|sinix|sysv|'` - ;; - -sinix*) - os=-sysv4 - ;; - -tpf*) - os=-tpf - ;; - -triton*) - os=-sysv3 - ;; - -oss*) - os=-sysv3 - ;; - -svr4*) - os=-sysv4 - ;; - -svr3) - os=-sysv3 - ;; - -sysvr4) - os=-sysv4 - ;; - # This must come after -sysvr4. - -sysv*) - ;; - -ose*) - os=-ose - ;; - -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) - os=-mint - ;; - -zvmoe) - os=-zvmoe - ;; - -dicos*) - os=-dicos - ;; - -pikeos*) - # Until real need of OS specific support for - # particular features comes up, bare metal - # configurations are quite functional. - case $basic_machine in - arm*) - os=-eabi - ;; - *) - os=-elf - ;; - esac - ;; - -nacl*) - ;; - -ios) - ;; - -none) - ;; - *) - # Get rid of the `-' at the beginning of $os. - os=`echo $os | sed 's/[^-]*-//'` - echo Invalid configuration \`"$1"\': system \`"$os"\' not recognized 1>&2 - exit 1 - ;; -esac -else - -# Here we handle the default operating systems that come with various machines. -# The value should be what the vendor currently ships out the door with their -# machine or put another way, the most popular os provided with the machine. - -# Note that if you're going to try to match "-MANUFACTURER" here (say, -# "-sun"), then you have to tell the case statement up towards the top -# that MANUFACTURER isn't an operating system. Otherwise, code above -# will signal an error saying that MANUFACTURER isn't an operating -# system, and we'll never get to this point. - -case $basic_machine in - score-*) - os=-elf - ;; - spu-*) - os=-elf - ;; - *-acorn) - os=-riscix1.2 - ;; - arm*-rebel) - os=-linux - ;; - arm*-semi) - os=-aout - ;; - c4x-* | tic4x-*) - os=-coff - ;; - c8051-*) - os=-elf - ;; - hexagon-*) - os=-elf - ;; - tic54x-*) - os=-coff - ;; - tic55x-*) - os=-coff - ;; - tic6x-*) - os=-coff - ;; - # This must come before the *-dec entry. - pdp10-*) - os=-tops20 - ;; - pdp11-*) - os=-none - ;; - *-dec | vax-*) - os=-ultrix4.2 - ;; - m68*-apollo) - os=-domain - ;; - i386-sun) - os=-sunos4.0.2 - ;; - m68000-sun) - os=-sunos3 - ;; - m68*-cisco) - os=-aout - ;; - mep-*) - os=-elf - ;; - mips*-cisco) - os=-elf - ;; - mips*-*) - os=-elf - ;; - or32-*) - os=-coff - ;; - *-tti) # must be before sparc entry or we get the wrong os. - os=-sysv3 - ;; - sparc-* | *-sun) - os=-sunos4.1.1 - ;; - pru-*) - os=-elf - ;; - *-be) - os=-beos - ;; - *-ibm) - os=-aix - ;; - *-knuth) - os=-mmixware - ;; - *-wec) - os=-proelf - ;; - *-winbond) - os=-proelf - ;; - *-oki) - os=-proelf - ;; - *-hp) - os=-hpux - ;; - *-hitachi) - os=-hiux - ;; - i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) - os=-sysv - ;; - *-cbm) - os=-amigaos - ;; - *-dg) - os=-dgux - ;; - *-dolphin) - os=-sysv3 - ;; - m68k-ccur) - os=-rtu - ;; - m88k-omron*) - os=-luna - ;; - *-next) - os=-nextstep - ;; - *-sequent) - os=-ptx - ;; - *-crds) - os=-unos - ;; - *-ns) - os=-genix - ;; - i370-*) - os=-mvs - ;; - *-gould) - os=-sysv - ;; - *-highlevel) - os=-bsd - ;; - *-encore) - os=-bsd - ;; - *-sgi) - os=-irix - ;; - *-siemens) - os=-sysv4 - ;; - *-masscomp) - os=-rtu - ;; - f30[01]-fujitsu | f700-fujitsu) - os=-uxpv - ;; - *-rom68k) - os=-coff - ;; - *-*bug) - os=-coff - ;; - *-apple) - os=-macos - ;; - *-atari*) - os=-mint - ;; - *) - os=-none - ;; -esac -fi - -# Here we handle the case where we know the os, and the CPU type, but not the -# manufacturer. We pick the logical manufacturer. -vendor=unknown -case $basic_machine in - *-unknown) - case $os in - -riscix*) - vendor=acorn - ;; - -sunos*) - vendor=sun - ;; - -cnk*|-aix*) - vendor=ibm - ;; - -beos*) - vendor=be - ;; - -hpux*) - vendor=hp - ;; - -mpeix*) - vendor=hp - ;; - -hiux*) - vendor=hitachi - ;; - -unos*) - vendor=crds - ;; - -dgux*) - vendor=dg - ;; - -luna*) - vendor=omron - ;; - -genix*) - vendor=ns - ;; - -mvs* | -opened*) - vendor=ibm - ;; - -os400*) - vendor=ibm - ;; - -ptx*) - vendor=sequent - ;; - -tpf*) - vendor=ibm - ;; - -vxsim* | -vxworks* | -windiss*) - vendor=wrs - ;; - -aux*) - vendor=apple - ;; - -hms*) - vendor=hitachi - ;; - -mpw* | -macos*) - vendor=apple - ;; - -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) - vendor=atari - ;; - -vos*) - vendor=stratus - ;; - esac - basic_machine=`echo "$basic_machine" | sed "s/unknown/$vendor/"` - ;; -esac - -echo "$basic_machine$os" -exit - -# Local variables: -# eval: (add-hook 'write-file-functions 'time-stamp) -# time-stamp-start: "timestamp='" -# time-stamp-format: "%:y-%02m-%02d" -# time-stamp-end: "'" -# End: diff --git a/Extended/libwebp/configure b/Extended/libwebp/configure deleted file mode 100755 index fd922ce..0000000 --- a/Extended/libwebp/configure +++ /dev/null @@ -1,17357 +0,0 @@ -#! /bin/sh -# Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for libwebp 1.1.0. -# -# Report bugs to . -# -# -# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. -# -# -# This configure script is free software; the Free Software Foundation -# gives unlimited permission to copy, distribute and modify it. -## -------------------- ## -## M4sh Initialization. ## -## -------------------- ## - -# Be more Bourne compatible -DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in #( - *posix*) : - set -o posix ;; #( - *) : - ;; -esac -fi - - -as_nl=' -' -export as_nl -# Printing a long string crashes Solaris 7 /usr/bin/printf. -as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo -# Prefer a ksh shell builtin over an external printf program on Solaris, -# but without wasting forks for bash or zsh. -if test -z "$BASH_VERSION$ZSH_VERSION" \ - && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='print -r --' - as_echo_n='print -rn --' -elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='printf %s\n' - as_echo_n='printf %s' -else - if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then - as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' - as_echo_n='/usr/ucb/echo -n' - else - as_echo_body='eval expr "X$1" : "X\\(.*\\)"' - as_echo_n_body='eval - arg=$1; - case $arg in #( - *"$as_nl"*) - expr "X$arg" : "X\\(.*\\)$as_nl"; - arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; - esac; - expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" - ' - export as_echo_n_body - as_echo_n='sh -c $as_echo_n_body as_echo' - fi - export as_echo_body - as_echo='sh -c $as_echo_body as_echo' -fi - -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - PATH_SEPARATOR=: - (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { - (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || - PATH_SEPARATOR=';' - } -fi - - -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -IFS=" "" $as_nl" - -# Find who we are. Look in the path if we contain no directory separator. -as_myself= -case $0 in #(( - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break - done -IFS=$as_save_IFS - - ;; -esac -# We did not find ourselves, most probably we were run as `sh COMMAND' -# in which case we are not to be found in the path. -if test "x$as_myself" = x; then - as_myself=$0 -fi -if test ! -f "$as_myself"; then - $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 - exit 1 -fi - -# Unset variables that we do not need and which cause bugs (e.g. in -# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" -# suppresses any "Segmentation fault" message there. '((' could -# trigger a bug in pdksh 5.2.14. -for as_var in BASH_ENV ENV MAIL MAILPATH -do eval test x\${$as_var+set} = xset \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -# Use a proper internal environment variable to ensure we don't fall - # into an infinite loop, continuously re-executing ourselves. - if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then - _as_can_reexec=no; export _as_can_reexec; - # We cannot yet assume a decent shell, so we have to provide a -# neutralization value for shells without unset; and this also -# works around shells that cannot unset nonexistent variables. -# Preserve -v and -x to the replacement shell. -BASH_ENV=/dev/null -ENV=/dev/null -(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV -case $- in # (((( - *v*x* | *x*v* ) as_opts=-vx ;; - *v* ) as_opts=-v ;; - *x* ) as_opts=-x ;; - * ) as_opts= ;; -esac -exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} -# Admittedly, this is quite paranoid, since all the known shells bail -# out after a failed `exec'. -$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 -as_fn_exit 255 - fi - # We don't want this to propagate to other subprocesses. - { _as_can_reexec=; unset _as_can_reexec;} -if test "x$CONFIG_SHELL" = x; then - as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which - # is contrary to our usage. Disable this feature. - alias -g '\${1+\"\$@\"}'='\"\$@\"' - setopt NO_GLOB_SUBST -else - case \`(set -o) 2>/dev/null\` in #( - *posix*) : - set -o posix ;; #( - *) : - ;; -esac -fi -" - as_required="as_fn_return () { (exit \$1); } -as_fn_success () { as_fn_return 0; } -as_fn_failure () { as_fn_return 1; } -as_fn_ret_success () { return 0; } -as_fn_ret_failure () { return 1; } - -exitcode=0 -as_fn_success || { exitcode=1; echo as_fn_success failed.; } -as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } -as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } -as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } -if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : - -else - exitcode=1; echo positional parameters were not saved. -fi -test x\$exitcode = x0 || exit 1 -test -x / || exit 1" - as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO - as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO - eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && - test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 - - test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || ( - ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' - ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO - ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO - PATH=/empty FPATH=/empty; export PATH FPATH - test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\ - || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1 -test \$(( 1 + 1 )) = 2 || exit 1" - if (eval "$as_required") 2>/dev/null; then : - as_have_required=yes -else - as_have_required=no -fi - if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : - -else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -as_found=false -for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - as_found=: - case $as_dir in #( - /*) - for as_base in sh bash ksh sh5; do - # Try only shells that exist, to save several forks. - as_shell=$as_dir/$as_base - if { test -f "$as_shell" || test -f "$as_shell.exe"; } && - { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : - CONFIG_SHELL=$as_shell as_have_required=yes - if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : - break 2 -fi -fi - done;; - esac - as_found=false -done -$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && - { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : - CONFIG_SHELL=$SHELL as_have_required=yes -fi; } -IFS=$as_save_IFS - - - if test "x$CONFIG_SHELL" != x; then : - export CONFIG_SHELL - # We cannot yet assume a decent shell, so we have to provide a -# neutralization value for shells without unset; and this also -# works around shells that cannot unset nonexistent variables. -# Preserve -v and -x to the replacement shell. -BASH_ENV=/dev/null -ENV=/dev/null -(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV -case $- in # (((( - *v*x* | *x*v* ) as_opts=-vx ;; - *v* ) as_opts=-v ;; - *x* ) as_opts=-x ;; - * ) as_opts= ;; -esac -exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} -# Admittedly, this is quite paranoid, since all the known shells bail -# out after a failed `exec'. -$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 -exit 255 -fi - - if test x$as_have_required = xno; then : - $as_echo "$0: This script requires a shell more modern than all" - $as_echo "$0: the shells that I found on your system." - if test x${ZSH_VERSION+set} = xset ; then - $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" - $as_echo "$0: be upgraded to zsh 4.3.4 or later." - else - $as_echo "$0: Please tell bug-autoconf@gnu.org and -$0: https://bugs.chromium.org/p/webp about your system, -$0: including any error possibly output before this -$0: message. Then install a modern shell, or manually run -$0: the script under such a shell if you do have one." - fi - exit 1 -fi -fi -fi -SHELL=${CONFIG_SHELL-/bin/sh} -export SHELL -# Unset more variables known to interfere with behavior of common tools. -CLICOLOR_FORCE= GREP_OPTIONS= -unset CLICOLOR_FORCE GREP_OPTIONS - -## --------------------- ## -## M4sh Shell Functions. ## -## --------------------- ## -# as_fn_unset VAR -# --------------- -# Portably unset VAR. -as_fn_unset () -{ - { eval $1=; unset $1;} -} -as_unset=as_fn_unset - -# as_fn_set_status STATUS -# ----------------------- -# Set $? to STATUS, without forking. -as_fn_set_status () -{ - return $1 -} # as_fn_set_status - -# as_fn_exit STATUS -# ----------------- -# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. -as_fn_exit () -{ - set +e - as_fn_set_status $1 - exit $1 -} # as_fn_exit - -# as_fn_mkdir_p -# ------------- -# Create "$as_dir" as a directory, including parents if necessary. -as_fn_mkdir_p () -{ - - case $as_dir in #( - -*) as_dir=./$as_dir;; - esac - test -d "$as_dir" || eval $as_mkdir_p || { - as_dirs= - while :; do - case $as_dir in #( - *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( - *) as_qdir=$as_dir;; - esac - as_dirs="'$as_qdir' $as_dirs" - as_dir=`$as_dirname -- "$as_dir" || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - test -d "$as_dir" && break - done - test -z "$as_dirs" || eval "mkdir $as_dirs" - } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" - - -} # as_fn_mkdir_p - -# as_fn_executable_p FILE -# ----------------------- -# Test if FILE is an executable regular file. -as_fn_executable_p () -{ - test -f "$1" && test -x "$1" -} # as_fn_executable_p -# as_fn_append VAR VALUE -# ---------------------- -# Append the text in VALUE to the end of the definition contained in VAR. Take -# advantage of any shell optimizations that allow amortized linear growth over -# repeated appends, instead of the typical quadratic growth present in naive -# implementations. -if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : - eval 'as_fn_append () - { - eval $1+=\$2 - }' -else - as_fn_append () - { - eval $1=\$$1\$2 - } -fi # as_fn_append - -# as_fn_arith ARG... -# ------------------ -# Perform arithmetic evaluation on the ARGs, and store the result in the -# global $as_val. Take advantage of shells that can avoid forks. The arguments -# must be portable across $(()) and expr. -if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : - eval 'as_fn_arith () - { - as_val=$(( $* )) - }' -else - as_fn_arith () - { - as_val=`expr "$@" || test $? -eq 1` - } -fi # as_fn_arith - - -# as_fn_error STATUS ERROR [LINENO LOG_FD] -# ---------------------------------------- -# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are -# provided, also output the error to LOG_FD, referencing LINENO. Then exit the -# script with STATUS, using 1 if that was 0. -as_fn_error () -{ - as_status=$1; test $as_status -eq 0 && as_status=1 - if test "$4"; then - as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 - fi - $as_echo "$as_me: error: $2" >&2 - as_fn_exit $as_status -} # as_fn_error - -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - -if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then - as_basename=basename -else - as_basename=false -fi - -if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then - as_dirname=dirname -else - as_dirname=false -fi - -as_me=`$as_basename -- "$0" || -$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ - s//\1/ - q - } - /^X\/\(\/\/\)$/{ - s//\1/ - q - } - /^X\/\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - -# Avoid depending upon Character Ranges. -as_cr_letters='abcdefghijklmnopqrstuvwxyz' -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -as_cr_Letters=$as_cr_letters$as_cr_LETTERS -as_cr_digits='0123456789' -as_cr_alnum=$as_cr_Letters$as_cr_digits - - - as_lineno_1=$LINENO as_lineno_1a=$LINENO - as_lineno_2=$LINENO as_lineno_2a=$LINENO - eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && - test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { - # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) - sed -n ' - p - /[$]LINENO/= - ' <$as_myself | - sed ' - s/[$]LINENO.*/&-/ - t lineno - b - :lineno - N - :loop - s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ - t loop - s/-\n.*// - ' >$as_me.lineno && - chmod +x "$as_me.lineno" || - { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } - - # If we had to re-execute with $CONFIG_SHELL, we're ensured to have - # already done that, so ensure we don't try to do so again and fall - # in an infinite loop. This has already happened in practice. - _as_can_reexec=no; export _as_can_reexec - # Don't try to exec as it changes $[0], causing all sort of problems - # (the dirname of $[0] is not the place where we might find the - # original and so on. Autoconf is especially sensitive to this). - . "./$as_me.lineno" - # Exit status is that of the last command. - exit -} - -ECHO_C= ECHO_N= ECHO_T= -case `echo -n x` in #((((( --n*) - case `echo 'xy\c'` in - *c*) ECHO_T=' ';; # ECHO_T is single tab character. - xy) ECHO_C='\c';; - *) echo `echo ksh88 bug on AIX 6.1` > /dev/null - ECHO_T=' ';; - esac;; -*) - ECHO_N='-n';; -esac - -rm -f conf$$ conf$$.exe conf$$.file -if test -d conf$$.dir; then - rm -f conf$$.dir/conf$$.file -else - rm -f conf$$.dir - mkdir conf$$.dir 2>/dev/null -fi -if (echo >conf$$.file) 2>/dev/null; then - if ln -s conf$$.file conf$$ 2>/dev/null; then - as_ln_s='ln -s' - # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -pR'. - ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || - as_ln_s='cp -pR' - elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln - else - as_ln_s='cp -pR' - fi -else - as_ln_s='cp -pR' -fi -rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file -rmdir conf$$.dir 2>/dev/null - -if mkdir -p . 2>/dev/null; then - as_mkdir_p='mkdir -p "$as_dir"' -else - test -d ./-p && rmdir ./-p - as_mkdir_p=false -fi - -as_test_x='test -x' -as_executable_p=as_fn_executable_p - -# Sed expression to map a string onto a valid CPP name. -as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" - -# Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" - -SHELL=${CONFIG_SHELL-/bin/sh} - - -test -n "$DJDIR" || exec 7<&0 &1 - -# Name of the host. -# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, -# so uname gets run too. -ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` - -# -# Initializations. -# -ac_default_prefix=/usr/local -ac_clean_files= -ac_config_libobj_dir=. -LIBOBJS= -cross_compiling=no -subdirs= -MFLAGS= -MAKEFLAGS= - -# Identity of this package. -PACKAGE_NAME='libwebp' -PACKAGE_TARNAME='libwebp' -PACKAGE_VERSION='1.1.0' -PACKAGE_STRING='libwebp 1.1.0' -PACKAGE_BUGREPORT='https://bugs.chromium.org/p/webp' -PACKAGE_URL='http://developers.google.com/speed/webp' - -# Factoring default headers for most tests. -ac_includes_default="\ -#include -#ifdef HAVE_SYS_TYPES_H -# include -#endif -#ifdef HAVE_SYS_STAT_H -# include -#endif -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif -#ifdef HAVE_STRING_H -# if !defined STDC_HEADERS && defined HAVE_MEMORY_H -# include -# endif -# include -#endif -#ifdef HAVE_STRINGS_H -# include -#endif -#ifdef HAVE_INTTYPES_H -# include -#endif -#ifdef HAVE_STDINT_H -# include -#endif -#ifdef HAVE_UNISTD_H -# include -#endif" - -ac_subst_vars='am__EXEEXT_FALSE -am__EXEEXT_TRUE -LTLIBOBJS -LIBOBJS -BUILD_EXTRAS_FALSE -BUILD_EXTRAS_TRUE -BUILD_LIBWEBPDECODER_FALSE -BUILD_LIBWEBPDECODER_TRUE -BUILD_DEMUX_FALSE -BUILD_DEMUX_TRUE -BUILD_MUX_FALSE -BUILD_MUX_TRUE -USE_SWAP_16BIT_CSP -BUILD_WEBPINFO_FALSE -BUILD_WEBPINFO_TRUE -BUILD_IMG2WEBP_FALSE -BUILD_IMG2WEBP_TRUE -BUILD_GIF2WEBP_FALSE -BUILD_GIF2WEBP_TRUE -BUILD_ANIMDIFF_FALSE -BUILD_ANIMDIFF_TRUE -GIF_INCLUDES -GIF_LIBS -TIFF_INCLUDES -TIFF_LIBS -JPEG_INCLUDES -JPEG_LIBS -PNG_INCLUDES -PNG_LIBS -LIBPNG_CONFIG -BUILD_VWEBP_SDL_FALSE -BUILD_VWEBP_SDL_TRUE -SDL_INCLUDES -SDL_LIBS -LIBSDL_CONFIG -BUILD_VWEBP_FALSE -BUILD_VWEBP_TRUE -GL_INCLUDES -GL_LIBS -PTHREAD_CFLAGS -PTHREAD_LIBS -PTHREAD_CC -ax_pthread_config -NEON_FLAGS -SSE2_FLAGS -SSE41_FLAGS -AM_CFLAGS -pkgconfigdir -AM_CPPFLAGS -CPP -LT_SYS_LIBRARY_PATH -OTOOL64 -OTOOL -LIPO -NMEDIT -DSYMUTIL -MANIFEST_TOOL -RANLIB -DLLTOOL -OBJDUMP -LN_S -NM -ac_ct_DUMPBIN -DUMPBIN -LD -FGREP -EGREP -GREP -SED -LIBTOOL -am__fastdepCC_FALSE -am__fastdepCC_TRUE -CCDEPMODE -am__nodep -AMDEPBACKSLASH -AMDEP_FALSE -AMDEP_TRUE -am__include -DEPDIR -OBJEXT -EXEEXT -ac_ct_CC -CPPFLAGS -LDFLAGS -CFLAGS -CC -ac_ct_AR -AR -AM_BACKSLASH -AM_DEFAULT_VERBOSITY -AM_DEFAULT_V -AM_V -am__untar -am__tar -AMTAR -am__leading_dot -SET_MAKE -AWK -mkdir_p -MKDIR_P -INSTALL_STRIP_PROGRAM -STRIP -install_sh -MAKEINFO -AUTOHEADER -AUTOMAKE -AUTOCONF -ACLOCAL -VERSION -PACKAGE -CYGPATH_W -am__isrc -INSTALL_DATA -INSTALL_SCRIPT -INSTALL_PROGRAM -host_os -host_vendor -host_cpu -host -build_os -build_vendor -build_cpu -build -target_alias -host_alias -build_alias -LIBS -ECHO_T -ECHO_N -ECHO_C -DEFS -mandir -localedir -libdir -psdir -pdfdir -dvidir -htmldir -infodir -docdir -oldincludedir -includedir -runstatedir -localstatedir -sharedstatedir -sysconfdir -datadir -datarootdir -libexecdir -sbindir -bindir -program_transform_name -prefix -exec_prefix -PACKAGE_URL -PACKAGE_BUGREPORT -PACKAGE_STRING -PACKAGE_VERSION -PACKAGE_TARNAME -PACKAGE_NAME -PATH_SEPARATOR -SHELL -am__quote' -ac_subst_files='' -ac_user_opts=' -enable_option_checking -enable_silent_rules -enable_dependency_tracking -enable_shared -enable_static -with_pic -enable_fast_install -with_aix_soname -with_gnu_ld -with_sysroot -enable_libtool_lock -enable_everything -enable_asserts -with_pkgconfigdir -enable_sse4_1 -enable_sse2 -enable_neon -enable_neon_rtcd -enable_threading -enable_gl -with_glincludedir -with_gllibdir -enable_sdl -with_sdlincludedir -with_sdllibdir -enable_png -with_pngincludedir -with_pnglibdir -enable_jpeg -with_jpegincludedir -with_jpeglibdir -enable_tiff -with_tiffincludedir -with_tifflibdir -enable_gif -with_gifincludedir -with_giflibdir -enable_wic -enable_swap_16bit_csp -enable_near_lossless -enable_libwebpmux -enable_libwebpdemux -enable_libwebpdecoder -enable_libwebpextras -' - ac_precious_vars='build_alias -host_alias -target_alias -CC -CFLAGS -LDFLAGS -LIBS -CPPFLAGS -LT_SYS_LIBRARY_PATH -CPP' - - -# Initialize some variables set by options. -ac_init_help= -ac_init_version=false -ac_unrecognized_opts= -ac_unrecognized_sep= -# The variables have the same names as the options, with -# dashes changed to underlines. -cache_file=/dev/null -exec_prefix=NONE -no_create= -no_recursion= -prefix=NONE -program_prefix=NONE -program_suffix=NONE -program_transform_name=s,x,x, -silent= -site= -srcdir= -verbose= -x_includes=NONE -x_libraries=NONE - -# Installation directory options. -# These are left unexpanded so users can "make install exec_prefix=/foo" -# and all the variables that are supposed to be based on exec_prefix -# by default will actually change. -# Use braces instead of parens because sh, perl, etc. also accept them. -# (The list follows the same order as the GNU Coding Standards.) -bindir='${exec_prefix}/bin' -sbindir='${exec_prefix}/sbin' -libexecdir='${exec_prefix}/libexec' -datarootdir='${prefix}/share' -datadir='${datarootdir}' -sysconfdir='${prefix}/etc' -sharedstatedir='${prefix}/com' -localstatedir='${prefix}/var' -runstatedir='${localstatedir}/run' -includedir='${prefix}/include' -oldincludedir='/usr/include' -docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' -infodir='${datarootdir}/info' -htmldir='${docdir}' -dvidir='${docdir}' -pdfdir='${docdir}' -psdir='${docdir}' -libdir='${exec_prefix}/lib' -localedir='${datarootdir}/locale' -mandir='${datarootdir}/man' - -ac_prev= -ac_dashdash= -for ac_option -do - # If the previous option needs an argument, assign it. - if test -n "$ac_prev"; then - eval $ac_prev=\$ac_option - ac_prev= - continue - fi - - case $ac_option in - *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; - *=) ac_optarg= ;; - *) ac_optarg=yes ;; - esac - - # Accept the important Cygnus configure options, so we can diagnose typos. - - case $ac_dashdash$ac_option in - --) - ac_dashdash=yes ;; - - -bindir | --bindir | --bindi | --bind | --bin | --bi) - ac_prev=bindir ;; - -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) - bindir=$ac_optarg ;; - - -build | --build | --buil | --bui | --bu) - ac_prev=build_alias ;; - -build=* | --build=* | --buil=* | --bui=* | --bu=*) - build_alias=$ac_optarg ;; - - -cache-file | --cache-file | --cache-fil | --cache-fi \ - | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) - ac_prev=cache_file ;; - -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ - | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) - cache_file=$ac_optarg ;; - - --config-cache | -C) - cache_file=config.cache ;; - - -datadir | --datadir | --datadi | --datad) - ac_prev=datadir ;; - -datadir=* | --datadir=* | --datadi=* | --datad=*) - datadir=$ac_optarg ;; - - -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ - | --dataroo | --dataro | --datar) - ac_prev=datarootdir ;; - -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ - | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) - datarootdir=$ac_optarg ;; - - -disable-* | --disable-*) - ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid feature name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"enable_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval enable_$ac_useropt=no ;; - - -docdir | --docdir | --docdi | --doc | --do) - ac_prev=docdir ;; - -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) - docdir=$ac_optarg ;; - - -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) - ac_prev=dvidir ;; - -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) - dvidir=$ac_optarg ;; - - -enable-* | --enable-*) - ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid feature name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"enable_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval enable_$ac_useropt=\$ac_optarg ;; - - -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ - | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ - | --exec | --exe | --ex) - ac_prev=exec_prefix ;; - -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ - | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ - | --exec=* | --exe=* | --ex=*) - exec_prefix=$ac_optarg ;; - - -gas | --gas | --ga | --g) - # Obsolete; use --with-gas. - with_gas=yes ;; - - -help | --help | --hel | --he | -h) - ac_init_help=long ;; - -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) - ac_init_help=recursive ;; - -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) - ac_init_help=short ;; - - -host | --host | --hos | --ho) - ac_prev=host_alias ;; - -host=* | --host=* | --hos=* | --ho=*) - host_alias=$ac_optarg ;; - - -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) - ac_prev=htmldir ;; - -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ - | --ht=*) - htmldir=$ac_optarg ;; - - -includedir | --includedir | --includedi | --included | --include \ - | --includ | --inclu | --incl | --inc) - ac_prev=includedir ;; - -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ - | --includ=* | --inclu=* | --incl=* | --inc=*) - includedir=$ac_optarg ;; - - -infodir | --infodir | --infodi | --infod | --info | --inf) - ac_prev=infodir ;; - -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) - infodir=$ac_optarg ;; - - -libdir | --libdir | --libdi | --libd) - ac_prev=libdir ;; - -libdir=* | --libdir=* | --libdi=* | --libd=*) - libdir=$ac_optarg ;; - - -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ - | --libexe | --libex | --libe) - ac_prev=libexecdir ;; - -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ - | --libexe=* | --libex=* | --libe=*) - libexecdir=$ac_optarg ;; - - -localedir | --localedir | --localedi | --localed | --locale) - ac_prev=localedir ;; - -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) - localedir=$ac_optarg ;; - - -localstatedir | --localstatedir | --localstatedi | --localstated \ - | --localstate | --localstat | --localsta | --localst | --locals) - ac_prev=localstatedir ;; - -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ - | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) - localstatedir=$ac_optarg ;; - - -mandir | --mandir | --mandi | --mand | --man | --ma | --m) - ac_prev=mandir ;; - -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) - mandir=$ac_optarg ;; - - -nfp | --nfp | --nf) - # Obsolete; use --without-fp. - with_fp=no ;; - - -no-create | --no-create | --no-creat | --no-crea | --no-cre \ - | --no-cr | --no-c | -n) - no_create=yes ;; - - -no-recursion | --no-recursion | --no-recursio | --no-recursi \ - | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) - no_recursion=yes ;; - - -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ - | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ - | --oldin | --oldi | --old | --ol | --o) - ac_prev=oldincludedir ;; - -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ - | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ - | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) - oldincludedir=$ac_optarg ;; - - -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) - ac_prev=prefix ;; - -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) - prefix=$ac_optarg ;; - - -program-prefix | --program-prefix | --program-prefi | --program-pref \ - | --program-pre | --program-pr | --program-p) - ac_prev=program_prefix ;; - -program-prefix=* | --program-prefix=* | --program-prefi=* \ - | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) - program_prefix=$ac_optarg ;; - - -program-suffix | --program-suffix | --program-suffi | --program-suff \ - | --program-suf | --program-su | --program-s) - ac_prev=program_suffix ;; - -program-suffix=* | --program-suffix=* | --program-suffi=* \ - | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) - program_suffix=$ac_optarg ;; - - -program-transform-name | --program-transform-name \ - | --program-transform-nam | --program-transform-na \ - | --program-transform-n | --program-transform- \ - | --program-transform | --program-transfor \ - | --program-transfo | --program-transf \ - | --program-trans | --program-tran \ - | --progr-tra | --program-tr | --program-t) - ac_prev=program_transform_name ;; - -program-transform-name=* | --program-transform-name=* \ - | --program-transform-nam=* | --program-transform-na=* \ - | --program-transform-n=* | --program-transform-=* \ - | --program-transform=* | --program-transfor=* \ - | --program-transfo=* | --program-transf=* \ - | --program-trans=* | --program-tran=* \ - | --progr-tra=* | --program-tr=* | --program-t=*) - program_transform_name=$ac_optarg ;; - - -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) - ac_prev=pdfdir ;; - -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) - pdfdir=$ac_optarg ;; - - -psdir | --psdir | --psdi | --psd | --ps) - ac_prev=psdir ;; - -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) - psdir=$ac_optarg ;; - - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil) - silent=yes ;; - - -runstatedir | --runstatedir | --runstatedi | --runstated \ - | --runstate | --runstat | --runsta | --runst | --runs \ - | --run | --ru | --r) - ac_prev=runstatedir ;; - -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ - | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ - | --run=* | --ru=* | --r=*) - runstatedir=$ac_optarg ;; - - -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) - ac_prev=sbindir ;; - -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ - | --sbi=* | --sb=*) - sbindir=$ac_optarg ;; - - -sharedstatedir | --sharedstatedir | --sharedstatedi \ - | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ - | --sharedst | --shareds | --shared | --share | --shar \ - | --sha | --sh) - ac_prev=sharedstatedir ;; - -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ - | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ - | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ - | --sha=* | --sh=*) - sharedstatedir=$ac_optarg ;; - - -site | --site | --sit) - ac_prev=site ;; - -site=* | --site=* | --sit=*) - site=$ac_optarg ;; - - -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) - ac_prev=srcdir ;; - -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) - srcdir=$ac_optarg ;; - - -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ - | --syscon | --sysco | --sysc | --sys | --sy) - ac_prev=sysconfdir ;; - -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ - | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) - sysconfdir=$ac_optarg ;; - - -target | --target | --targe | --targ | --tar | --ta | --t) - ac_prev=target_alias ;; - -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) - target_alias=$ac_optarg ;; - - -v | -verbose | --verbose | --verbos | --verbo | --verb) - verbose=yes ;; - - -version | --version | --versio | --versi | --vers | -V) - ac_init_version=: ;; - - -with-* | --with-*) - ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid package name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"with_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval with_$ac_useropt=\$ac_optarg ;; - - -without-* | --without-*) - ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid package name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"with_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval with_$ac_useropt=no ;; - - --x) - # Obsolete; use --with-x. - with_x=yes ;; - - -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ - | --x-incl | --x-inc | --x-in | --x-i) - ac_prev=x_includes ;; - -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ - | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) - x_includes=$ac_optarg ;; - - -x-libraries | --x-libraries | --x-librarie | --x-librari \ - | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) - ac_prev=x_libraries ;; - -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ - | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) - x_libraries=$ac_optarg ;; - - -*) as_fn_error $? "unrecognized option: \`$ac_option' -Try \`$0 --help' for more information" - ;; - - *=*) - ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` - # Reject names that are not valid shell variable names. - case $ac_envvar in #( - '' | [0-9]* | *[!_$as_cr_alnum]* ) - as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; - esac - eval $ac_envvar=\$ac_optarg - export $ac_envvar ;; - - *) - # FIXME: should be removed in autoconf 3.0. - $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 - expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && - $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 - : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" - ;; - - esac -done - -if test -n "$ac_prev"; then - ac_option=--`echo $ac_prev | sed 's/_/-/g'` - as_fn_error $? "missing argument to $ac_option" -fi - -if test -n "$ac_unrecognized_opts"; then - case $enable_option_checking in - no) ;; - fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; - *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; - esac -fi - -# Check all directory arguments for consistency. -for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ - datadir sysconfdir sharedstatedir localstatedir includedir \ - oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ - libdir localedir mandir runstatedir -do - eval ac_val=\$$ac_var - # Remove trailing slashes. - case $ac_val in - */ ) - ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` - eval $ac_var=\$ac_val;; - esac - # Be sure to have absolute directory names. - case $ac_val in - [\\/$]* | ?:[\\/]* ) continue;; - NONE | '' ) case $ac_var in *prefix ) continue;; esac;; - esac - as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" -done - -# There might be people who depend on the old broken behavior: `$host' -# used to hold the argument of --host etc. -# FIXME: To remove some day. -build=$build_alias -host=$host_alias -target=$target_alias - -# FIXME: To remove some day. -if test "x$host_alias" != x; then - if test "x$build_alias" = x; then - cross_compiling=maybe - elif test "x$build_alias" != "x$host_alias"; then - cross_compiling=yes - fi -fi - -ac_tool_prefix= -test -n "$host_alias" && ac_tool_prefix=$host_alias- - -test "$silent" = yes && exec 6>/dev/null - - -ac_pwd=`pwd` && test -n "$ac_pwd" && -ac_ls_di=`ls -di .` && -ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || - as_fn_error $? "working directory cannot be determined" -test "X$ac_ls_di" = "X$ac_pwd_ls_di" || - as_fn_error $? "pwd does not report name of working directory" - - -# Find the source files, if location was not specified. -if test -z "$srcdir"; then - ac_srcdir_defaulted=yes - # Try the directory containing this script, then the parent directory. - ac_confdir=`$as_dirname -- "$as_myself" || -$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_myself" : 'X\(//\)[^/]' \| \ - X"$as_myself" : 'X\(//\)$' \| \ - X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_myself" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - srcdir=$ac_confdir - if test ! -r "$srcdir/$ac_unique_file"; then - srcdir=.. - fi -else - ac_srcdir_defaulted=no -fi -if test ! -r "$srcdir/$ac_unique_file"; then - test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." - as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" -fi -ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" -ac_abs_confdir=`( - cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" - pwd)` -# When building in place, set srcdir=. -if test "$ac_abs_confdir" = "$ac_pwd"; then - srcdir=. -fi -# Remove unnecessary trailing slashes from srcdir. -# Double slashes in file names in object file debugging info -# mess up M-x gdb in Emacs. -case $srcdir in -*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; -esac -for ac_var in $ac_precious_vars; do - eval ac_env_${ac_var}_set=\${${ac_var}+set} - eval ac_env_${ac_var}_value=\$${ac_var} - eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} - eval ac_cv_env_${ac_var}_value=\$${ac_var} -done - -# -# Report the --help message. -# -if test "$ac_init_help" = "long"; then - # Omit some internal or obsolete options to make the list less imposing. - # This message is too long to be a string in the A/UX 3.1 sh. - cat <<_ACEOF -\`configure' configures libwebp 1.1.0 to adapt to many kinds of systems. - -Usage: $0 [OPTION]... [VAR=VALUE]... - -To assign environment variables (e.g., CC, CFLAGS...), specify them as -VAR=VALUE. See below for descriptions of some of the useful variables. - -Defaults for the options are specified in brackets. - -Configuration: - -h, --help display this help and exit - --help=short display options specific to this package - --help=recursive display the short help of all the included packages - -V, --version display version information and exit - -q, --quiet, --silent do not print \`checking ...' messages - --cache-file=FILE cache test results in FILE [disabled] - -C, --config-cache alias for \`--cache-file=config.cache' - -n, --no-create do not create output files - --srcdir=DIR find the sources in DIR [configure dir or \`..'] - -Installation directories: - --prefix=PREFIX install architecture-independent files in PREFIX - [$ac_default_prefix] - --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX - [PREFIX] - -By default, \`make install' will install all the files in -\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify -an installation prefix other than \`$ac_default_prefix' using \`--prefix', -for instance \`--prefix=\$HOME'. - -For better control, use the options below. - -Fine tuning of the installation directories: - --bindir=DIR user executables [EPREFIX/bin] - --sbindir=DIR system admin executables [EPREFIX/sbin] - --libexecdir=DIR program executables [EPREFIX/libexec] - --sysconfdir=DIR read-only single-machine data [PREFIX/etc] - --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] - --localstatedir=DIR modifiable single-machine data [PREFIX/var] - --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] - --libdir=DIR object code libraries [EPREFIX/lib] - --includedir=DIR C header files [PREFIX/include] - --oldincludedir=DIR C header files for non-gcc [/usr/include] - --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] - --datadir=DIR read-only architecture-independent data [DATAROOTDIR] - --infodir=DIR info documentation [DATAROOTDIR/info] - --localedir=DIR locale-dependent data [DATAROOTDIR/locale] - --mandir=DIR man documentation [DATAROOTDIR/man] - --docdir=DIR documentation root [DATAROOTDIR/doc/libwebp] - --htmldir=DIR html documentation [DOCDIR] - --dvidir=DIR dvi documentation [DOCDIR] - --pdfdir=DIR pdf documentation [DOCDIR] - --psdir=DIR ps documentation [DOCDIR] -_ACEOF - - cat <<\_ACEOF - -Program names: - --program-prefix=PREFIX prepend PREFIX to installed program names - --program-suffix=SUFFIX append SUFFIX to installed program names - --program-transform-name=PROGRAM run sed PROGRAM on installed program names - -System types: - --build=BUILD configure for building on BUILD [guessed] - --host=HOST cross-compile to build programs to run on HOST [BUILD] -_ACEOF -fi - -if test -n "$ac_init_help"; then - case $ac_init_help in - short | recursive ) echo "Configuration of libwebp 1.1.0:";; - esac - cat <<\_ACEOF - -Optional Features: - --disable-option-checking ignore unrecognized --enable/--with options - --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) - --enable-FEATURE[=ARG] include FEATURE [ARG=yes] - --enable-silent-rules less verbose build output (undo: "make V=1") - --disable-silent-rules verbose build output (undo: "make V=0") - --enable-dependency-tracking - do not reject slow dependency extractors - --disable-dependency-tracking - speeds up one-time build - --enable-shared[=PKGS] build shared libraries [default=yes] - --enable-static[=PKGS] build static libraries [default=yes] - --enable-fast-install[=PKGS] - optimize for fast installation [default=yes] - --disable-libtool-lock avoid locking (might break parallel builds) - --enable-everything Enable all optional targets. These can still be - disabled with --disable-target - --enable-asserts Enable assert checks - --disable-sse4.1 Disable detection of SSE4.1 support [default=auto] - --disable-sse2 Disable detection of SSE2 support [default=auto] - --disable-neon Disable detection of NEON support [default=auto] - --disable-neon-rtcd Disable runtime detection of NEON support via - /proc/cpuinfo on Linux hosts [default=auto] - --disable-threading Disable detection of thread support - --disable-gl Disable detection of OpenGL support [default=auto] - --disable-sdl Disable detection of SDL support [default=auto] - --disable-png Disable detection of PNG format support - [default=auto] - --disable-jpeg Disable detection of JPEG format support - [default=auto] - --disable-tiff Disable detection of TIFF format support - [default=auto] - --disable-gif Disable detection of GIF format support - [default=auto] - --disable-wic Disable Windows Imaging Component (WIC) detection. - [default=auto] - --enable-swap-16bit-csp Enable byte swap for 16 bit colorspaces - --disable-near-lossless Disable near lossless encoding - --enable-libwebpmux Build libwebpmux [default=no] - --disable-libwebpdemux Disable libwebpdemux [default=no] - --enable-libwebpdecoder Build libwebpdecoder [default=no] - --enable-libwebpextras Build libwebpextras [default=no] - -Optional Packages: - --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] - --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) - --with-pic[=PKGS] try to use only PIC/non-PIC objects [default=use - both] - --with-aix-soname=aix|svr4|both - shared library versioning (aka "SONAME") variant to - provide on AIX, [default=aix]. - --with-gnu-ld assume the C compiler uses GNU ld [default=no] - --with-sysroot[=DIR] Search for dependent libraries within DIR (or the - compiler's sysroot if not specified). - --with-pkgconfigdir=DIR Path to the pkgconfig directory [LIBDIR/pkgconfig] - --with-glincludedir=DIR use GL includes from DIR - --with-gllibdir=DIR use GL libraries from DIR - --with-sdlincludedir=DIR - use SDL includes from DIR - --with-sdllibdir=DIR use SDL libraries from DIR - --with-pngincludedir=DIR - use PNG includes from DIR - --with-pnglibdir=DIR use PNG libraries from DIR - --with-jpegincludedir=DIR - use JPEG includes from DIR - --with-jpeglibdir=DIR use JPEG libraries from DIR - --with-tiffincludedir=DIR - use TIFF includes from DIR - --with-tifflibdir=DIR use TIFF libraries from DIR - --with-gifincludedir=DIR - use GIF includes from DIR - --with-giflibdir=DIR use GIF libraries from DIR - -Some influential environment variables: - CC C compiler command - CFLAGS C compiler flags - LDFLAGS linker flags, e.g. -L if you have libraries in a - nonstandard directory - LIBS libraries to pass to the linker, e.g. -l - CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if - you have headers in a nonstandard directory - LT_SYS_LIBRARY_PATH - User-defined run-time library search path. - CPP C preprocessor - -Use these variables to override the choices made by `configure' or to help -it to find libraries and programs with nonstandard names/locations. - -Report bugs to . -libwebp home page: . -_ACEOF -ac_status=$? -fi - -if test "$ac_init_help" = "recursive"; then - # If there are subdirs, report their specific --help. - for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue - test -d "$ac_dir" || - { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || - continue - ac_builddir=. - -case "$ac_dir" in -.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; -*) - ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` - # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` - case $ac_top_builddir_sub in - "") ac_top_builddir_sub=. ac_top_build_prefix= ;; - *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; - esac ;; -esac -ac_abs_top_builddir=$ac_pwd -ac_abs_builddir=$ac_pwd$ac_dir_suffix -# for backward compatibility: -ac_top_builddir=$ac_top_build_prefix - -case $srcdir in - .) # We are building in place. - ac_srcdir=. - ac_top_srcdir=$ac_top_builddir_sub - ac_abs_top_srcdir=$ac_pwd ;; - [\\/]* | ?:[\\/]* ) # Absolute name. - ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir - ac_abs_top_srcdir=$srcdir ;; - *) # Relative name. - ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_build_prefix$srcdir - ac_abs_top_srcdir=$ac_pwd/$srcdir ;; -esac -ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix - - cd "$ac_dir" || { ac_status=$?; continue; } - # Check for guested configure. - if test -f "$ac_srcdir/configure.gnu"; then - echo && - $SHELL "$ac_srcdir/configure.gnu" --help=recursive - elif test -f "$ac_srcdir/configure"; then - echo && - $SHELL "$ac_srcdir/configure" --help=recursive - else - $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 - fi || ac_status=$? - cd "$ac_pwd" || { ac_status=$?; break; } - done -fi - -test -n "$ac_init_help" && exit $ac_status -if $ac_init_version; then - cat <<\_ACEOF -libwebp configure 1.1.0 -generated by GNU Autoconf 2.69 - -Copyright (C) 2012 Free Software Foundation, Inc. -This configure script is free software; the Free Software Foundation -gives unlimited permission to copy, distribute and modify it. -_ACEOF - exit -fi - -## ------------------------ ## -## Autoconf initialization. ## -## ------------------------ ## - -# ac_fn_c_try_compile LINENO -# -------------------------- -# Try to compile conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_compile () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext - if { { ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compile") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_c_try_compile - -# ac_fn_c_try_link LINENO -# ----------------------- -# Try to link conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_link () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext conftest$ac_exeext - if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && { - test "$cross_compiling" = yes || - test -x conftest$ac_exeext - }; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information - # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would - # interfere with the next link command; also delete a directory that is - # left behind by Apple's compiler. We do this before executing the actions. - rm -rf conftest.dSYM conftest_ipa8_conftest.oo - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_c_try_link - -# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES -# ------------------------------------------------------- -# Tests whether HEADER exists and can be compiled using the include files in -# INCLUDES, setting the cache variable VAR accordingly. -ac_fn_c_check_header_compile () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -#include <$2> -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - eval "$3=yes" -else - eval "$3=no" -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - -} # ac_fn_c_check_header_compile - -# ac_fn_c_try_cpp LINENO -# ---------------------- -# Try to preprocess conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_cpp () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { { ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } > conftest.i && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_c_try_cpp - -# ac_fn_c_try_run LINENO -# ---------------------- -# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes -# that executables *can* be run. -ac_fn_c_try_run () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' - { { case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then : - ac_retval=0 -else - $as_echo "$as_me: program exited with status $ac_status" >&5 - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=$ac_status -fi - rm -rf conftest.dSYM conftest_ipa8_conftest.oo - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_c_try_run - -# ac_fn_c_check_func LINENO FUNC VAR -# ---------------------------------- -# Tests whether FUNC exists, setting the cache variable VAR accordingly -ac_fn_c_check_func () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -/* Define $2 to an innocuous variant, in case declares $2. - For example, HP-UX 11i declares gettimeofday. */ -#define $2 innocuous_$2 - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $2 (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef $2 - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char $2 (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined __stub_$2 || defined __stub___$2 -choke me -#endif - -int -main () -{ -return $2 (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$3=yes" -else - eval "$3=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - -} # ac_fn_c_check_func - -# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES -# ------------------------------------------------------- -# Tests whether HEADER exists, giving a warning if it cannot be compiled using -# the include files in INCLUDES and setting the cache variable VAR -# accordingly. -ac_fn_c_check_header_mongrel () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if eval \${$3+:} false; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -else - # Is the header compilable? -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 -$as_echo_n "checking $2 usability... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -#include <$2> -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_header_compiler=yes -else - ac_header_compiler=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 -$as_echo "$ac_header_compiler" >&6; } - -# Is the header present? -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 -$as_echo_n "checking $2 presence... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <$2> -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - ac_header_preproc=yes -else - ac_header_preproc=no -fi -rm -f conftest.err conftest.i conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 -$as_echo "$ac_header_preproc" >&6; } - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( - yes:no: ) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 -$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} - ;; - no:yes:* ) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 -$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 -$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 -$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 -$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} -( $as_echo "## ----------------------------------------------- ## -## Report this to https://bugs.chromium.org/p/webp ## -## ----------------------------------------------- ##" - ) | sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else - eval "$3=\$ac_header_compiler" -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -fi - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - -} # ac_fn_c_check_header_mongrel -cat >config.log <<_ACEOF -This file contains any messages produced by compilers while -running configure, to aid debugging if configure makes a mistake. - -It was created by libwebp $as_me 1.1.0, which was -generated by GNU Autoconf 2.69. Invocation command line was - - $ $0 $@ - -_ACEOF -exec 5>>config.log -{ -cat <<_ASUNAME -## --------- ## -## Platform. ## -## --------- ## - -hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` -uname -m = `(uname -m) 2>/dev/null || echo unknown` -uname -r = `(uname -r) 2>/dev/null || echo unknown` -uname -s = `(uname -s) 2>/dev/null || echo unknown` -uname -v = `(uname -v) 2>/dev/null || echo unknown` - -/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` -/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` - -/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` -/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` -/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` -/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` -/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` -/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` -/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` - -_ASUNAME - -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - $as_echo "PATH: $as_dir" - done -IFS=$as_save_IFS - -} >&5 - -cat >&5 <<_ACEOF - - -## ----------- ## -## Core tests. ## -## ----------- ## - -_ACEOF - - -# Keep a trace of the command line. -# Strip out --no-create and --no-recursion so they do not pile up. -# Strip out --silent because we don't want to record it for future runs. -# Also quote any args containing shell meta-characters. -# Make two passes to allow for proper duplicate-argument suppression. -ac_configure_args= -ac_configure_args0= -ac_configure_args1= -ac_must_keep_next=false -for ac_pass in 1 2 -do - for ac_arg - do - case $ac_arg in - -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil) - continue ;; - *\'*) - ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - case $ac_pass in - 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; - 2) - as_fn_append ac_configure_args1 " '$ac_arg'" - if test $ac_must_keep_next = true; then - ac_must_keep_next=false # Got value, back to normal. - else - case $ac_arg in - *=* | --config-cache | -C | -disable-* | --disable-* \ - | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ - | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ - | -with-* | --with-* | -without-* | --without-* | --x) - case "$ac_configure_args0 " in - "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; - esac - ;; - -* ) ac_must_keep_next=true ;; - esac - fi - as_fn_append ac_configure_args " '$ac_arg'" - ;; - esac - done -done -{ ac_configure_args0=; unset ac_configure_args0;} -{ ac_configure_args1=; unset ac_configure_args1;} - -# When interrupted or exit'd, cleanup temporary files, and complete -# config.log. We remove comments because anyway the quotes in there -# would cause problems or look ugly. -# WARNING: Use '\'' to represent an apostrophe within the trap. -# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. -trap 'exit_status=$? - # Save into config.log some information that might help in debugging. - { - echo - - $as_echo "## ---------------- ## -## Cache variables. ## -## ---------------- ##" - echo - # The following way of writing the cache mishandles newlines in values, -( - for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do - eval ac_val=\$$ac_var - case $ac_val in #( - *${as_nl}*) - case $ac_var in #( - *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; - esac - case $ac_var in #( - _ | IFS | as_nl) ;; #( - BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( - *) { eval $ac_var=; unset $ac_var;} ;; - esac ;; - esac - done - (set) 2>&1 | - case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( - *${as_nl}ac_space=\ *) - sed -n \ - "s/'\''/'\''\\\\'\'''\''/g; - s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" - ;; #( - *) - sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" - ;; - esac | - sort -) - echo - - $as_echo "## ----------------- ## -## Output variables. ## -## ----------------- ##" - echo - for ac_var in $ac_subst_vars - do - eval ac_val=\$$ac_var - case $ac_val in - *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; - esac - $as_echo "$ac_var='\''$ac_val'\''" - done | sort - echo - - if test -n "$ac_subst_files"; then - $as_echo "## ------------------- ## -## File substitutions. ## -## ------------------- ##" - echo - for ac_var in $ac_subst_files - do - eval ac_val=\$$ac_var - case $ac_val in - *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; - esac - $as_echo "$ac_var='\''$ac_val'\''" - done | sort - echo - fi - - if test -s confdefs.h; then - $as_echo "## ----------- ## -## confdefs.h. ## -## ----------- ##" - echo - cat confdefs.h - echo - fi - test "$ac_signal" != 0 && - $as_echo "$as_me: caught signal $ac_signal" - $as_echo "$as_me: exit $exit_status" - } >&5 - rm -f core *.core core.conftest.* && - rm -f -r conftest* confdefs* conf$$* $ac_clean_files && - exit $exit_status -' 0 -for ac_signal in 1 2 13 15; do - trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal -done -ac_signal=0 - -# confdefs.h avoids OS command line length limits that DEFS can exceed. -rm -f -r conftest* confdefs.h - -$as_echo "/* confdefs.h */" > confdefs.h - -# Predefined preprocessor variables. - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_NAME "$PACKAGE_NAME" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_TARNAME "$PACKAGE_TARNAME" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_VERSION "$PACKAGE_VERSION" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_STRING "$PACKAGE_STRING" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_URL "$PACKAGE_URL" -_ACEOF - - -# Let the site file select an alternate cache file if it wants to. -# Prefer an explicitly selected file to automatically selected ones. -ac_site_file1=NONE -ac_site_file2=NONE -if test -n "$CONFIG_SITE"; then - # We do not want a PATH search for config.site. - case $CONFIG_SITE in #(( - -*) ac_site_file1=./$CONFIG_SITE;; - */*) ac_site_file1=$CONFIG_SITE;; - *) ac_site_file1=./$CONFIG_SITE;; - esac -elif test "x$prefix" != xNONE; then - ac_site_file1=$prefix/share/config.site - ac_site_file2=$prefix/etc/config.site -else - ac_site_file1=$ac_default_prefix/share/config.site - ac_site_file2=$ac_default_prefix/etc/config.site -fi -for ac_site_file in "$ac_site_file1" "$ac_site_file2" -do - test "x$ac_site_file" = xNONE && continue - if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 -$as_echo "$as_me: loading site script $ac_site_file" >&6;} - sed 's/^/| /' "$ac_site_file" >&5 - . "$ac_site_file" \ - || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "failed to load site script $ac_site_file -See \`config.log' for more details" "$LINENO" 5; } - fi -done - -if test -r "$cache_file"; then - # Some versions of bash will fail to source /dev/null (special files - # actually), so we avoid doing that. DJGPP emulates it as a regular file. - if test /dev/null != "$cache_file" && test -f "$cache_file"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 -$as_echo "$as_me: loading cache $cache_file" >&6;} - case $cache_file in - [\\/]* | ?:[\\/]* ) . "$cache_file";; - *) . "./$cache_file";; - esac - fi -else - { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 -$as_echo "$as_me: creating cache $cache_file" >&6;} - >$cache_file -fi - -# Check that the precious variables saved in the cache have kept the same -# value. -ac_cache_corrupted=false -for ac_var in $ac_precious_vars; do - eval ac_old_set=\$ac_cv_env_${ac_var}_set - eval ac_new_set=\$ac_env_${ac_var}_set - eval ac_old_val=\$ac_cv_env_${ac_var}_value - eval ac_new_val=\$ac_env_${ac_var}_value - case $ac_old_set,$ac_new_set in - set,) - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 -$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,set) - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 -$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,);; - *) - if test "x$ac_old_val" != "x$ac_new_val"; then - # differences in whitespace do not lead to failure. - ac_old_val_w=`echo x $ac_old_val` - ac_new_val_w=`echo x $ac_new_val` - if test "$ac_old_val_w" != "$ac_new_val_w"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 -$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} - ac_cache_corrupted=: - else - { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 -$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} - eval $ac_var=\$ac_old_val - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 -$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 -$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} - fi;; - esac - # Pass precious variables to config.status. - if test "$ac_new_set" = set; then - case $ac_new_val in - *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; - *) ac_arg=$ac_var=$ac_new_val ;; - esac - case " $ac_configure_args " in - *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. - *) as_fn_append ac_configure_args " '$ac_arg'" ;; - esac - fi -done -if $ac_cache_corrupted; then - { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 -$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} - as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 -fi -## -------------------- ## -## Main body of script. ## -## -------------------- ## - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - -ac_aux_dir= -for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do - if test -f "$ac_dir/install-sh"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install-sh -c" - break - elif test -f "$ac_dir/install.sh"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install.sh -c" - break - elif test -f "$ac_dir/shtool"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/shtool install -c" - break - fi -done -if test -z "$ac_aux_dir"; then - as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 -fi - -# These three variables are undocumented and unsupported, -# and are intended to be withdrawn in a future Autoconf release. -# They can cause serious problems if a builder's source tree is in a directory -# whose full name contains unusual characters. -ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. -ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. -ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. - - -# Make sure we can run config.sub. -$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || - as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 -$as_echo_n "checking build system type... " >&6; } -if ${ac_cv_build+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_build_alias=$build_alias -test "x$ac_build_alias" = x && - ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` -test "x$ac_build_alias" = x && - as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 -ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || - as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 -$as_echo "$ac_cv_build" >&6; } -case $ac_cv_build in -*-*-*) ;; -*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; -esac -build=$ac_cv_build -ac_save_IFS=$IFS; IFS='-' -set x $ac_cv_build -shift -build_cpu=$1 -build_vendor=$2 -shift; shift -# Remember, the first character of IFS is used to create $*, -# except with old shells: -build_os=$* -IFS=$ac_save_IFS -case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 -$as_echo_n "checking host system type... " >&6; } -if ${ac_cv_host+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "x$host_alias" = x; then - ac_cv_host=$ac_cv_build -else - ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || - as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 -$as_echo "$ac_cv_host" >&6; } -case $ac_cv_host in -*-*-*) ;; -*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; -esac -host=$ac_cv_host -ac_save_IFS=$IFS; IFS='-' -set x $ac_cv_host -shift -host_cpu=$1 -host_vendor=$2 -shift; shift -# Remember, the first character of IFS is used to create $*, -# except with old shells: -host_os=$* -IFS=$ac_save_IFS -case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac - - - -am__api_version='1.16' - -# Find a good install program. We prefer a C program (faster), -# so one script is as good as another. But avoid the broken or -# incompatible versions: -# SysV /etc/install, /usr/sbin/install -# SunOS /usr/etc/install -# IRIX /sbin/install -# AIX /bin/install -# AmigaOS /C/install, which installs bootblocks on floppy discs -# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag -# AFS /usr/afsws/bin/install, which mishandles nonexistent args -# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" -# OS/2's system install, which has a completely different semantic -# ./install, which can be erroneously created by make from ./install.sh. -# Reject install programs that cannot install multiple files. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 -$as_echo_n "checking for a BSD-compatible install... " >&6; } -if test -z "$INSTALL"; then -if ${ac_cv_path_install+:} false; then : - $as_echo_n "(cached) " >&6 -else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - # Account for people who put trailing slashes in PATH elements. -case $as_dir/ in #(( - ./ | .// | /[cC]/* | \ - /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ - ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ - /usr/ucb/* ) ;; - *) - # OSF1 and SCO ODT 3.0 have their own names for install. - # Don't use installbsd from OSF since it installs stuff as root - # by default. - for ac_prog in ginstall scoinst install; do - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then - if test $ac_prog = install && - grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then - # AIX install. It has an incompatible calling convention. - : - elif test $ac_prog = install && - grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then - # program-specific install script used by HP pwplus--don't use. - : - else - rm -rf conftest.one conftest.two conftest.dir - echo one > conftest.one - echo two > conftest.two - mkdir conftest.dir - if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && - test -s conftest.one && test -s conftest.two && - test -s conftest.dir/conftest.one && - test -s conftest.dir/conftest.two - then - ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" - break 3 - fi - fi - fi - done - done - ;; -esac - - done -IFS=$as_save_IFS - -rm -rf conftest.one conftest.two conftest.dir - -fi - if test "${ac_cv_path_install+set}" = set; then - INSTALL=$ac_cv_path_install - else - # As a last resort, use the slow shell script. Don't cache a - # value for INSTALL within a source directory, because that will - # break other packages using the cache if that directory is - # removed, or if the value is a relative name. - INSTALL=$ac_install_sh - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 -$as_echo "$INSTALL" >&6; } - -# Use test -z because SunOS4 sh mishandles braces in ${var-val}. -# It thinks the first close brace ends the variable substitution. -test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' - -test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' - -test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 -$as_echo_n "checking whether build environment is sane... " >&6; } -# Reject unsafe characters in $srcdir or the absolute working directory -# name. Accept space and tab only in the latter. -am_lf=' -' -case `pwd` in - *[\\\"\#\$\&\'\`$am_lf]*) - as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; -esac -case $srcdir in - *[\\\"\#\$\&\'\`$am_lf\ \ ]*) - as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;; -esac - -# Do 'set' in a subshell so we don't clobber the current shell's -# arguments. Must try -L first in case configure is actually a -# symlink; some systems play weird games with the mod time of symlinks -# (eg FreeBSD returns the mod time of the symlink's containing -# directory). -if ( - am_has_slept=no - for am_try in 1 2; do - echo "timestamp, slept: $am_has_slept" > conftest.file - set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` - if test "$*" = "X"; then - # -L didn't work. - set X `ls -t "$srcdir/configure" conftest.file` - fi - if test "$*" != "X $srcdir/configure conftest.file" \ - && test "$*" != "X conftest.file $srcdir/configure"; then - - # If neither matched, then we have a broken ls. This can happen - # if, for instance, CONFIG_SHELL is bash and it inherits a - # broken ls alias from the environment. This has actually - # happened. Such a system could not be considered "sane". - as_fn_error $? "ls -t appears to fail. Make sure there is not a broken - alias in your environment" "$LINENO" 5 - fi - if test "$2" = conftest.file || test $am_try -eq 2; then - break - fi - # Just in case. - sleep 1 - am_has_slept=yes - done - test "$2" = conftest.file - ) -then - # Ok. - : -else - as_fn_error $? "newly created file is older than distributed files! -Check your system clock" "$LINENO" 5 -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -# If we didn't sleep, we still need to ensure time stamps of config.status and -# generated files are strictly newer. -am_sleep_pid= -if grep 'slept: no' conftest.file >/dev/null 2>&1; then - ( sleep 1 ) & - am_sleep_pid=$! -fi - -rm -f conftest.file - -test "$program_prefix" != NONE && - program_transform_name="s&^&$program_prefix&;$program_transform_name" -# Use a double $ so make ignores it. -test "$program_suffix" != NONE && - program_transform_name="s&\$&$program_suffix&;$program_transform_name" -# Double any \ or $. -# By default was `s,x,x', remove it if useless. -ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' -program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` - -# Expand $ac_aux_dir to an absolute path. -am_aux_dir=`cd "$ac_aux_dir" && pwd` - -if test x"${MISSING+set}" != xset; then - case $am_aux_dir in - *\ * | *\ *) - MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; - *) - MISSING="\${SHELL} $am_aux_dir/missing" ;; - esac -fi -# Use eval to expand $SHELL -if eval "$MISSING --is-lightweight"; then - am_missing_run="$MISSING " -else - am_missing_run= - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 -$as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;} -fi - -if test x"${install_sh+set}" != xset; then - case $am_aux_dir in - *\ * | *\ *) - install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; - *) - install_sh="\${SHELL} $am_aux_dir/install-sh" - esac -fi - -# Installed binaries are usually stripped using 'strip' when the user -# run "make install-strip". However 'strip' might not be the right -# tool to use in cross-compilation environments, therefore Automake -# will honor the 'STRIP' environment variable to overrule this program. -if test "$cross_compiling" != no; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. -set dummy ${ac_tool_prefix}strip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_STRIP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$STRIP"; then - ac_cv_prog_STRIP="$STRIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_STRIP="${ac_tool_prefix}strip" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -STRIP=$ac_cv_prog_STRIP -if test -n "$STRIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 -$as_echo "$STRIP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_STRIP"; then - ac_ct_STRIP=$STRIP - # Extract the first word of "strip", so it can be a program name with args. -set dummy strip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_STRIP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_STRIP"; then - ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_STRIP="strip" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP -if test -n "$ac_ct_STRIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 -$as_echo "$ac_ct_STRIP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_STRIP" = x; then - STRIP=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - STRIP=$ac_ct_STRIP - fi -else - STRIP="$ac_cv_prog_STRIP" -fi - -fi -INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 -$as_echo_n "checking for a thread-safe mkdir -p... " >&6; } -if test -z "$MKDIR_P"; then - if ${ac_cv_path_mkdir+:} false; then : - $as_echo_n "(cached) " >&6 -else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in mkdir gmkdir; do - for ac_exec_ext in '' $ac_executable_extensions; do - as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue - case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( - 'mkdir (GNU coreutils) '* | \ - 'mkdir (coreutils) '* | \ - 'mkdir (fileutils) '4.1*) - ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext - break 3;; - esac - done - done - done -IFS=$as_save_IFS - -fi - - test -d ./--version && rmdir ./--version - if test "${ac_cv_path_mkdir+set}" = set; then - MKDIR_P="$ac_cv_path_mkdir -p" - else - # As a last resort, use the slow shell script. Don't cache a - # value for MKDIR_P within a source directory, because that will - # break other packages using the cache if that directory is - # removed, or if the value is a relative name. - MKDIR_P="$ac_install_sh -d" - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 -$as_echo "$MKDIR_P" >&6; } - -for ac_prog in gawk mawk nawk awk -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_AWK+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$AWK"; then - ac_cv_prog_AWK="$AWK" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_AWK="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -AWK=$ac_cv_prog_AWK -if test -n "$AWK"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 -$as_echo "$AWK" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$AWK" && break -done - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 -$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } -set x ${MAKE-make} -ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` -if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat >conftest.make <<\_ACEOF -SHELL = /bin/sh -all: - @echo '@@@%%%=$(MAKE)=@@@%%%' -_ACEOF -# GNU make sometimes prints "make[1]: Entering ...", which would confuse us. -case `${MAKE-make} -f conftest.make 2>/dev/null` in - *@@@%%%=?*=@@@%%%*) - eval ac_cv_prog_make_${ac_make}_set=yes;; - *) - eval ac_cv_prog_make_${ac_make}_set=no;; -esac -rm -f conftest.make -fi -if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - SET_MAKE= -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - SET_MAKE="MAKE=${MAKE-make}" -fi - -rm -rf .tst 2>/dev/null -mkdir .tst 2>/dev/null -if test -d .tst; then - am__leading_dot=. -else - am__leading_dot=_ -fi -rmdir .tst 2>/dev/null - -# Check whether --enable-silent-rules was given. -if test "${enable_silent_rules+set}" = set; then : - enableval=$enable_silent_rules; -fi - -case $enable_silent_rules in # ((( - yes) AM_DEFAULT_VERBOSITY=0;; - no) AM_DEFAULT_VERBOSITY=1;; - *) AM_DEFAULT_VERBOSITY=1;; -esac -am_make=${MAKE-make} -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 -$as_echo_n "checking whether $am_make supports nested variables... " >&6; } -if ${am_cv_make_support_nested_variables+:} false; then : - $as_echo_n "(cached) " >&6 -else - if $as_echo 'TRUE=$(BAR$(V)) -BAR0=false -BAR1=true -V=1 -am__doit: - @$(TRUE) -.PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then - am_cv_make_support_nested_variables=yes -else - am_cv_make_support_nested_variables=no -fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 -$as_echo "$am_cv_make_support_nested_variables" >&6; } -if test $am_cv_make_support_nested_variables = yes; then - AM_V='$(V)' - AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' -else - AM_V=$AM_DEFAULT_VERBOSITY - AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY -fi -AM_BACKSLASH='\' - -if test "`cd $srcdir && pwd`" != "`pwd`"; then - # Use -I$(srcdir) only when $(srcdir) != ., so that make's output - # is not polluted with repeated "-I." - am__isrc=' -I$(srcdir)' - # test to see if srcdir already configured - if test -f $srcdir/config.status; then - as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 - fi -fi - -# test whether we have cygpath -if test -z "$CYGPATH_W"; then - if (cygpath --version) >/dev/null 2>/dev/null; then - CYGPATH_W='cygpath -w' - else - CYGPATH_W=echo - fi -fi - - -# Define the identity of the package. - PACKAGE='libwebp' - VERSION='1.1.0' - - -cat >>confdefs.h <<_ACEOF -#define PACKAGE "$PACKAGE" -_ACEOF - - -cat >>confdefs.h <<_ACEOF -#define VERSION "$VERSION" -_ACEOF - -# Some tools Automake needs. - -ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} - - -AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} - - -AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} - - -AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} - - -MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} - -# For better backward compatibility. To be removed once Automake 1.9.x -# dies out for good. For more background, see: -# -# -mkdir_p='$(MKDIR_P)' - -# We need awk for the "check" target (and possibly the TAP driver). The -# system "awk" is bad on some platforms. -# Always define AMTAR for backward compatibility. Yes, it's still used -# in the wild :-( We should find a proper way to deprecate it ... -AMTAR='$${TAR-tar}' - - -# We'll loop over all known methods to create a tar archive until one works. -_am_tools='gnutar pax cpio none' - -am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' - - - - - - -# POSIX will say in a future version that running "rm -f" with no argument -# is OK; and we want to be able to make that assumption in our Makefile -# recipes. So use an aggressive probe to check that the usage we want is -# actually supported "in the wild" to an acceptable degree. -# See automake bug#10828. -# To make any issue more visible, cause the running configure to be aborted -# by default if the 'rm' program in use doesn't match our expectations; the -# user can still override this though. -if rm -f && rm -fr && rm -rf; then : OK; else - cat >&2 <<'END' -Oops! - -Your 'rm' program seems unable to run without file operands specified -on the command line, even when the '-f' option is present. This is contrary -to the behaviour of most rm programs out there, and not conforming with -the upcoming POSIX standard: - -Please tell bug-automake@gnu.org about your system, including the value -of your $PATH and any error possibly output before this message. This -can help us improve future automake versions. - -END - if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then - echo 'Configuration will proceed anyway, since you have set the' >&2 - echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 - echo >&2 - else - cat >&2 <<'END' -Aborting the configuration process, to ensure you take notice of the issue. - -You can download and install GNU coreutils to get an 'rm' implementation -that behaves properly: . - -If you want to complete the configuration process using your problematic -'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM -to "yes", and re-run configure. - -END - as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5 - fi -fi - - -DEPDIR="${am__leading_dot}deps" - -ac_config_commands="$ac_config_commands depfiles" - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} supports the include directive" >&5 -$as_echo_n "checking whether ${MAKE-make} supports the include directive... " >&6; } -cat > confinc.mk << 'END' -am__doit: - @echo this is the am__doit target >confinc.out -.PHONY: am__doit -END -am__include="#" -am__quote= -# BSD make does it like this. -echo '.include "confinc.mk" # ignored' > confmf.BSD -# Other make implementations (GNU, Solaris 10, AIX) do it like this. -echo 'include confinc.mk # ignored' > confmf.GNU -_am_result=no -for s in GNU BSD; do - { echo "$as_me:$LINENO: ${MAKE-make} -f confmf.$s && cat confinc.out" >&5 - (${MAKE-make} -f confmf.$s && cat confinc.out) >&5 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } - case $?:`cat confinc.out 2>/dev/null` in #( - '0:this is the am__doit target') : - case $s in #( - BSD) : - am__include='.include' am__quote='"' ;; #( - *) : - am__include='include' am__quote='' ;; -esac ;; #( - *) : - ;; -esac - if test "$am__include" != "#"; then - _am_result="yes ($s style)" - break - fi -done -rm -f confinc.* confmf.* -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: ${_am_result}" >&5 -$as_echo "${_am_result}" >&6; } - -# Check whether --enable-dependency-tracking was given. -if test "${enable_dependency_tracking+set}" = set; then : - enableval=$enable_dependency_tracking; -fi - -if test "x$enable_dependency_tracking" != xno; then - am_depcomp="$ac_aux_dir/depcomp" - AMDEPBACKSLASH='\' - am__nodep='_no' -fi - if test "x$enable_dependency_tracking" != xno; then - AMDEP_TRUE= - AMDEP_FALSE='#' -else - AMDEP_TRUE='#' - AMDEP_FALSE= -fi - - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. -set dummy ${ac_tool_prefix}gcc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_CC="${ac_tool_prefix}gcc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_CC"; then - ac_ct_CC=$CC - # Extract the first word of "gcc", so it can be a program name with args. -set dummy gcc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_CC="gcc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CC=$ac_ct_CC - fi -else - CC="$ac_cv_prog_CC" -fi - -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. -set dummy ${ac_tool_prefix}cc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_CC="${ac_tool_prefix}cc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - fi -fi -if test -z "$CC"; then - # Extract the first word of "cc", so it can be a program name with args. -set dummy cc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else - ac_prog_rejected=no -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then - ac_prog_rejected=yes - continue - fi - ac_cv_prog_CC="cc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -if test $ac_prog_rejected = yes; then - # We found a bogon in the path, so make sure we never use it. - set dummy $ac_cv_prog_CC - shift - if test $# != 0; then - # We chose a different compiler from the bogus one. - # However, it has the same basename, so the bogon will be chosen - # first if we set CC to just the basename; use the full file name. - shift - ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" - fi -fi -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - for ac_prog in cl.exe - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_CC="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$CC" && break - done -fi -if test -z "$CC"; then - ac_ct_CC=$CC - for ac_prog in cl.exe -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_CC="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$ac_ct_CC" && break -done - - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CC=$ac_ct_CC - fi -fi - -fi - - -test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "no acceptable C compiler found in \$PATH -See \`config.log' for more details" "$LINENO" 5; } - -# Provide some information about the compiler. -$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 -set X $ac_compile -ac_compiler=$2 -for ac_option in --version -v -V -qversion; do - { { ac_try="$ac_compiler $ac_option >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compiler $ac_option >&5") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - sed '10a\ -... rest of stderr output deleted ... - 10q' conftest.err >conftest.er1 - cat conftest.er1 >&5 - fi - rm -f conftest.er1 conftest.err - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } -done - -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" -# Try to create an executable without -o first, disregard a.out. -# It will help us diagnose broken compilers, and finding out an intuition -# of exeext. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 -$as_echo_n "checking whether the C compiler works... " >&6; } -ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` - -# The possible output files: -ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" - -ac_rmfiles= -for ac_file in $ac_files -do - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; - * ) ac_rmfiles="$ac_rmfiles $ac_file";; - esac -done -rm -f $ac_rmfiles - -if { { ac_try="$ac_link_default" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link_default") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : - # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. -# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' -# in a Makefile. We should not override ac_cv_exeext if it was cached, -# so that the user can short-circuit this test for compilers unknown to -# Autoconf. -for ac_file in $ac_files '' -do - test -f "$ac_file" || continue - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) - ;; - [ab].out ) - # We found the default executable, but exeext='' is most - # certainly right. - break;; - *.* ) - if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; - then :; else - ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` - fi - # We set ac_cv_exeext here because the later test for it is not - # safe: cross compilers may not add the suffix if given an `-o' - # argument, so we may need to know it at that point already. - # Even if this section looks crufty: it has the advantage of - # actually working. - break;; - * ) - break;; - esac -done -test "$ac_cv_exeext" = no && ac_cv_exeext= - -else - ac_file='' -fi -if test -z "$ac_file"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -$as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error 77 "C compiler cannot create executables -See \`config.log' for more details" "$LINENO" 5; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 -$as_echo_n "checking for C compiler default output file name... " >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 -$as_echo "$ac_file" >&6; } -ac_exeext=$ac_cv_exeext - -rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out -ac_clean_files=$ac_clean_files_save -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 -$as_echo_n "checking for suffix of executables... " >&6; } -if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : - # If both `conftest.exe' and `conftest' are `present' (well, observable) -# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will -# work properly (i.e., refer to `conftest.exe'), while it won't with -# `rm'. -for ac_file in conftest.exe conftest conftest.*; do - test -f "$ac_file" || continue - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; - *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` - break;; - * ) break;; - esac -done -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "cannot compute suffix of executables: cannot compile and link -See \`config.log' for more details" "$LINENO" 5; } -fi -rm -f conftest conftest$ac_cv_exeext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 -$as_echo "$ac_cv_exeext" >&6; } - -rm -f conftest.$ac_ext -EXEEXT=$ac_cv_exeext -ac_exeext=$EXEEXT -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ -FILE *f = fopen ("conftest.out", "w"); - return ferror (f) || fclose (f) != 0; - - ; - return 0; -} -_ACEOF -ac_clean_files="$ac_clean_files conftest.out" -# Check that the compiler produces executables we can run. If not, either -# the compiler is broken, or we cross compile. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 -$as_echo_n "checking whether we are cross compiling... " >&6; } -if test "$cross_compiling" != yes; then - { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - if { ac_try='./conftest$ac_cv_exeext' - { { case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then - cross_compiling=no - else - if test "$cross_compiling" = maybe; then - cross_compiling=yes - else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "cannot run C compiled programs. -If you meant to cross compile, use \`--host'. -See \`config.log' for more details" "$LINENO" 5; } - fi - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 -$as_echo "$cross_compiling" >&6; } - -rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out -ac_clean_files=$ac_clean_files_save -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 -$as_echo_n "checking for suffix of object files... " >&6; } -if ${ac_cv_objext+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.o conftest.obj -if { { ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compile") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : - for ac_file in conftest.o conftest.obj conftest.*; do - test -f "$ac_file" || continue; - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; - *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` - break;; - esac -done -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "cannot compute suffix of object files: cannot compile -See \`config.log' for more details" "$LINENO" 5; } -fi -rm -f conftest.$ac_cv_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 -$as_echo "$ac_cv_objext" >&6; } -OBJEXT=$ac_cv_objext -ac_objext=$OBJEXT -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 -$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } -if ${ac_cv_c_compiler_gnu+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ -#ifndef __GNUC__ - choke me -#endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_compiler_gnu=yes -else - ac_compiler_gnu=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -ac_cv_c_compiler_gnu=$ac_compiler_gnu - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 -$as_echo "$ac_cv_c_compiler_gnu" >&6; } -if test $ac_compiler_gnu = yes; then - GCC=yes -else - GCC= -fi -ac_test_CFLAGS=${CFLAGS+set} -ac_save_CFLAGS=$CFLAGS -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 -$as_echo_n "checking whether $CC accepts -g... " >&6; } -if ${ac_cv_prog_cc_g+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_save_c_werror_flag=$ac_c_werror_flag - ac_c_werror_flag=yes - ac_cv_prog_cc_g=no - CFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_g=yes -else - CFLAGS="" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - -else - ac_c_werror_flag=$ac_save_c_werror_flag - CFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_g=yes -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_c_werror_flag=$ac_save_c_werror_flag -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 -$as_echo "$ac_cv_prog_cc_g" >&6; } -if test "$ac_test_CFLAGS" = set; then - CFLAGS=$ac_save_CFLAGS -elif test $ac_cv_prog_cc_g = yes; then - if test "$GCC" = yes; then - CFLAGS="-g -O2" - else - CFLAGS="-g" - fi -else - if test "$GCC" = yes; then - CFLAGS="-O2" - else - CFLAGS= - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 -$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } -if ${ac_cv_prog_cc_c89+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_cv_prog_cc_c89=no -ac_save_CC=$CC -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -struct stat; -/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ -struct buf { int x; }; -FILE * (*rcsopen) (struct buf *, struct stat *, int); -static char *e (p, i) - char **p; - int i; -{ - return p[i]; -} -static char *f (char * (*g) (char **, int), char **p, ...) -{ - char *s; - va_list v; - va_start (v,p); - s = g (p, va_arg (v,int)); - va_end (v); - return s; -} - -/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has - function prototypes and stuff, but not '\xHH' hex character constants. - These don't provoke an error unfortunately, instead are silently treated - as 'x'. The following induces an error, until -std is added to get - proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an - array size at least. It's necessary to write '\x00'==0 to get something - that's true only with -std. */ -int osf4_cc_array ['\x00' == 0 ? 1 : -1]; - -/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters - inside strings and character constants. */ -#define FOO(x) 'x' -int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; - -int test (int i, double x); -struct s1 {int (*f) (int a);}; -struct s2 {int (*f) (double a);}; -int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); -int argc; -char **argv; -int -main () -{ -return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; - ; - return 0; -} -_ACEOF -for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ - -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" -do - CC="$ac_save_CC $ac_arg" - if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_c89=$ac_arg -fi -rm -f core conftest.err conftest.$ac_objext - test "x$ac_cv_prog_cc_c89" != "xno" && break -done -rm -f conftest.$ac_ext -CC=$ac_save_CC - -fi -# AC_CACHE_VAL -case "x$ac_cv_prog_cc_c89" in - x) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -$as_echo "none needed" >&6; } ;; - xno) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -$as_echo "unsupported" >&6; } ;; - *) - CC="$CC $ac_cv_prog_cc_c89" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 -$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; -esac -if test "x$ac_cv_prog_cc_c89" != xno; then : - -fi - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 -$as_echo_n "checking whether $CC understands -c and -o together... " >&6; } -if ${am_cv_prog_cc_c_o+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF - # Make sure it works both with $CC and with simple cc. - # Following AC_PROG_CC_C_O, we do the test twice because some - # compilers refuse to overwrite an existing .o file with -o, - # though they will create one. - am_cv_prog_cc_c_o=yes - for am_i in 1 2; do - if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 - ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } \ - && test -f conftest2.$ac_objext; then - : OK - else - am_cv_prog_cc_c_o=no - break - fi - done - rm -f core conftest* - unset am_i -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 -$as_echo "$am_cv_prog_cc_c_o" >&6; } -if test "$am_cv_prog_cc_c_o" != yes; then - # Losing compiler, so override with the script. - # FIXME: It is wrong to rewrite CC. - # But if we don't then we get into trouble of one sort or another. - # A longer-term fix would be to have automake use am__CC in this case, - # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" - CC="$am_aux_dir/compile $CC" -fi -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - -depcc="$CC" am_compiler_list= - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 -$as_echo_n "checking dependency style of $depcc... " >&6; } -if ${am_cv_CC_dependencies_compiler_type+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then - # We make a subdir and do the tests there. Otherwise we can end up - # making bogus files that we don't know about and never remove. For - # instance it was reported that on HP-UX the gcc test will end up - # making a dummy file named 'D' -- because '-MD' means "put the output - # in D". - rm -rf conftest.dir - mkdir conftest.dir - # Copy depcomp to subdir because otherwise we won't find it if we're - # using a relative directory. - cp "$am_depcomp" conftest.dir - cd conftest.dir - # We will build objects and dependencies in a subdirectory because - # it helps to detect inapplicable dependency modes. For instance - # both Tru64's cc and ICC support -MD to output dependencies as a - # side effect of compilation, but ICC will put the dependencies in - # the current directory while Tru64 will put them in the object - # directory. - mkdir sub - - am_cv_CC_dependencies_compiler_type=none - if test "$am_compiler_list" = ""; then - am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` - fi - am__universal=false - case " $depcc " in #( - *\ -arch\ *\ -arch\ *) am__universal=true ;; - esac - - for depmode in $am_compiler_list; do - # Setup a source with many dependencies, because some compilers - # like to wrap large dependency lists on column 80 (with \), and - # we should not choose a depcomp mode which is confused by this. - # - # We need to recreate these files for each test, as the compiler may - # overwrite some of them when testing with obscure command lines. - # This happens at least with the AIX C compiler. - : > sub/conftest.c - for i in 1 2 3 4 5 6; do - echo '#include "conftst'$i'.h"' >> sub/conftest.c - # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with - # Solaris 10 /bin/sh. - echo '/* dummy */' > sub/conftst$i.h - done - echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf - - # We check with '-c' and '-o' for the sake of the "dashmstdout" - # mode. It turns out that the SunPro C++ compiler does not properly - # handle '-M -o', and we need to detect this. Also, some Intel - # versions had trouble with output in subdirs. - am__obj=sub/conftest.${OBJEXT-o} - am__minus_obj="-o $am__obj" - case $depmode in - gcc) - # This depmode causes a compiler race in universal mode. - test "$am__universal" = false || continue - ;; - nosideeffect) - # After this tag, mechanisms are not by side-effect, so they'll - # only be used when explicitly requested. - if test "x$enable_dependency_tracking" = xyes; then - continue - else - break - fi - ;; - msvc7 | msvc7msys | msvisualcpp | msvcmsys) - # This compiler won't grok '-c -o', but also, the minuso test has - # not run yet. These depmodes are late enough in the game, and - # so weak that their functioning should not be impacted. - am__obj=conftest.${OBJEXT-o} - am__minus_obj= - ;; - none) break ;; - esac - if depmode=$depmode \ - source=sub/conftest.c object=$am__obj \ - depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ - $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ - >/dev/null 2>conftest.err && - grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && - grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && - grep $am__obj sub/conftest.Po > /dev/null 2>&1 && - ${MAKE-make} -s -f confmf > /dev/null 2>&1; then - # icc doesn't choke on unknown options, it will just issue warnings - # or remarks (even with -Werror). So we grep stderr for any message - # that says an option was ignored or not supported. - # When given -MP, icc 7.0 and 7.1 complain thusly: - # icc: Command line warning: ignoring option '-M'; no argument required - # The diagnosis changed in icc 8.0: - # icc: Command line remark: option '-MP' not supported - if (grep 'ignoring option' conftest.err || - grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else - am_cv_CC_dependencies_compiler_type=$depmode - break - fi - fi - done - - cd .. - rm -rf conftest.dir -else - am_cv_CC_dependencies_compiler_type=none -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 -$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } -CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type - - if - test "x$enable_dependency_tracking" != xno \ - && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then - am__fastdepCC_TRUE= - am__fastdepCC_FALSE='#' -else - am__fastdepCC_TRUE='#' - am__fastdepCC_FALSE= -fi - - - -if test -n "$ac_tool_prefix"; then - for ac_prog in ar lib "link -lib" - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_AR+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$AR"; then - ac_cv_prog_AR="$AR" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_AR="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -AR=$ac_cv_prog_AR -if test -n "$AR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 -$as_echo "$AR" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$AR" && break - done -fi -if test -z "$AR"; then - ac_ct_AR=$AR - for ac_prog in ar lib "link -lib" -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_AR+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_AR"; then - ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_AR="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_AR=$ac_cv_prog_ac_ct_AR -if test -n "$ac_ct_AR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 -$as_echo "$ac_ct_AR" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$ac_ct_AR" && break -done - - if test "x$ac_ct_AR" = x; then - AR="false" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - AR=$ac_ct_AR - fi -fi - -: ${AR=ar} - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the archiver ($AR) interface" >&5 -$as_echo_n "checking the archiver ($AR) interface... " >&6; } -if ${am_cv_ar_interface+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - am_cv_ar_interface=ar - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int some_variable = 0; -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - am_ar_try='$AR cru libconftest.a conftest.$ac_objext >&5' - { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$am_ar_try\""; } >&5 - (eval $am_ar_try) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - if test "$ac_status" -eq 0; then - am_cv_ar_interface=ar - else - am_ar_try='$AR -NOLOGO -OUT:conftest.lib conftest.$ac_objext >&5' - { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$am_ar_try\""; } >&5 - (eval $am_ar_try) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - if test "$ac_status" -eq 0; then - am_cv_ar_interface=lib - else - am_cv_ar_interface=unknown - fi - fi - rm -f conftest.lib libconftest.a - -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_ar_interface" >&5 -$as_echo "$am_cv_ar_interface" >&6; } - -case $am_cv_ar_interface in -ar) - ;; -lib) - # Microsoft lib, so override with the ar-lib wrapper script. - # FIXME: It is wrong to rewrite AR. - # But if we don't then we get into trouble of one sort or another. - # A longer-term fix would be to have automake use am__AR in this case, - # and then we could set am__AR="$am_aux_dir/ar-lib \$(AR)" or something - # similar. - AR="$am_aux_dir/ar-lib $AR" - ;; -unknown) - as_fn_error $? "could not determine $AR interface" "$LINENO" 5 - ;; -esac - - -case `pwd` in - *\ * | *\ *) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 -$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; -esac - - - -macro_version='2.4.6' -macro_revision='2.4.6' - - - - - - - - - - - - - -ltmain=$ac_aux_dir/ltmain.sh - -# Backslashify metacharacters that are still active within -# double-quoted strings. -sed_quote_subst='s/\(["`$\\]\)/\\\1/g' - -# Same as above, but do not quote variable references. -double_quote_subst='s/\(["`\\]\)/\\\1/g' - -# Sed substitution to delay expansion of an escaped shell variable in a -# double_quote_subst'ed string. -delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' - -# Sed substitution to delay expansion of an escaped single quote. -delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' - -# Sed substitution to avoid accidental globbing in evaled expressions -no_glob_subst='s/\*/\\\*/g' - -ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO -ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 -$as_echo_n "checking how to print strings... " >&6; } -# Test print first, because it will be a builtin if present. -if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ - test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then - ECHO='print -r --' -elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then - ECHO='printf %s\n' -else - # Use this function as a fallback that always works. - func_fallback_echo () - { - eval 'cat <<_LTECHO_EOF -$1 -_LTECHO_EOF' - } - ECHO='func_fallback_echo' -fi - -# func_echo_all arg... -# Invoke $ECHO with all args, space-separated. -func_echo_all () -{ - $ECHO "" -} - -case $ECHO in - printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5 -$as_echo "printf" >&6; } ;; - print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 -$as_echo "print -r" >&6; } ;; - *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5 -$as_echo "cat" >&6; } ;; -esac - - - - - - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 -$as_echo_n "checking for a sed that does not truncate output... " >&6; } -if ${ac_cv_path_SED+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ - for ac_i in 1 2 3 4 5 6 7; do - ac_script="$ac_script$as_nl$ac_script" - done - echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed - { ac_script=; unset ac_script;} - if test -z "$SED"; then - ac_path_SED_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in sed gsed; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" - as_fn_executable_p "$ac_path_SED" || continue -# Check for GNU ac_path_SED and select it if it is found. - # Check for GNU $ac_path_SED -case `"$ac_path_SED" --version 2>&1` in -*GNU*) - ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo '' >> "conftest.nl" - "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_SED_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_SED="$ac_path_SED" - ac_path_SED_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_SED_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_SED"; then - as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 - fi -else - ac_cv_path_SED=$SED -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 -$as_echo "$ac_cv_path_SED" >&6; } - SED="$ac_cv_path_SED" - rm -f conftest.sed - -test -z "$SED" && SED=sed -Xsed="$SED -e 1s/^X//" - - - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 -$as_echo_n "checking for grep that handles long lines and -e... " >&6; } -if ${ac_cv_path_GREP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$GREP"; then - ac_path_GREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in grep ggrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" - as_fn_executable_p "$ac_path_GREP" || continue -# Check for GNU ac_path_GREP and select it if it is found. - # Check for GNU $ac_path_GREP -case `"$ac_path_GREP" --version 2>&1` in -*GNU*) - ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo 'GREP' >> "conftest.nl" - "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_GREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_GREP="$ac_path_GREP" - ac_path_GREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_GREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_GREP"; then - as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_GREP=$GREP -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 -$as_echo "$ac_cv_path_GREP" >&6; } - GREP="$ac_cv_path_GREP" - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 -$as_echo_n "checking for egrep... " >&6; } -if ${ac_cv_path_EGREP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 - then ac_cv_path_EGREP="$GREP -E" - else - if test -z "$EGREP"; then - ac_path_EGREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in egrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" - as_fn_executable_p "$ac_path_EGREP" || continue -# Check for GNU ac_path_EGREP and select it if it is found. - # Check for GNU $ac_path_EGREP -case `"$ac_path_EGREP" --version 2>&1` in -*GNU*) - ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo 'EGREP' >> "conftest.nl" - "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_EGREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_EGREP="$ac_path_EGREP" - ac_path_EGREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_EGREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_EGREP"; then - as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_EGREP=$EGREP -fi - - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 -$as_echo "$ac_cv_path_EGREP" >&6; } - EGREP="$ac_cv_path_EGREP" - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 -$as_echo_n "checking for fgrep... " >&6; } -if ${ac_cv_path_FGREP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 - then ac_cv_path_FGREP="$GREP -F" - else - if test -z "$FGREP"; then - ac_path_FGREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in fgrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" - as_fn_executable_p "$ac_path_FGREP" || continue -# Check for GNU ac_path_FGREP and select it if it is found. - # Check for GNU $ac_path_FGREP -case `"$ac_path_FGREP" --version 2>&1` in -*GNU*) - ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo 'FGREP' >> "conftest.nl" - "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_FGREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_FGREP="$ac_path_FGREP" - ac_path_FGREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_FGREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_FGREP"; then - as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_FGREP=$FGREP -fi - - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 -$as_echo "$ac_cv_path_FGREP" >&6; } - FGREP="$ac_cv_path_FGREP" - - -test -z "$GREP" && GREP=grep - - - - - - - - - - - - - - - - - - - -# Check whether --with-gnu-ld was given. -if test "${with_gnu_ld+set}" = set; then : - withval=$with_gnu_ld; test no = "$withval" || with_gnu_ld=yes -else - with_gnu_ld=no -fi - -ac_prog=ld -if test yes = "$GCC"; then - # Check if gcc -print-prog-name=ld gives a path. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 -$as_echo_n "checking for ld used by $CC... " >&6; } - case $host in - *-*-mingw*) - # gcc leaves a trailing carriage return, which upsets mingw - ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; - *) - ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; - esac - case $ac_prog in - # Accept absolute paths. - [\\/]* | ?:[\\/]*) - re_direlt='/[^/][^/]*/\.\./' - # Canonicalize the pathname of ld - ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` - while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do - ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` - done - test -z "$LD" && LD=$ac_prog - ;; - "") - # If it fails, then pretend we aren't using GCC. - ac_prog=ld - ;; - *) - # If it is relative, then search for the first ld in PATH. - with_gnu_ld=unknown - ;; - esac -elif test yes = "$with_gnu_ld"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 -$as_echo_n "checking for GNU ld... " >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 -$as_echo_n "checking for non-GNU ld... " >&6; } -fi -if ${lt_cv_path_LD+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$LD"; then - lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR - for ac_dir in $PATH; do - IFS=$lt_save_ifs - test -z "$ac_dir" && ac_dir=. - if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then - lt_cv_path_LD=$ac_dir/$ac_prog - # Check to see if the program is GNU ld. I'd rather use --version, - # but apparently some variants of GNU ld only accept -v. - # Break only if it was the GNU/non-GNU ld that we prefer. - case `"$lt_cv_path_LD" -v 2>&1 &5 -$as_echo "$LD" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi -test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 -$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } -if ${lt_cv_prog_gnu_ld+:} false; then : - $as_echo_n "(cached) " >&6 -else - # I'd rather use --version here, but apparently some GNU lds only accept -v. -case `$LD -v 2>&1 &5 -$as_echo "$lt_cv_prog_gnu_ld" >&6; } -with_gnu_ld=$lt_cv_prog_gnu_ld - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 -$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } -if ${lt_cv_path_NM+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$NM"; then - # Let the user override the test. - lt_cv_path_NM=$NM -else - lt_nm_to_check=${ac_tool_prefix}nm - if test -n "$ac_tool_prefix" && test "$build" = "$host"; then - lt_nm_to_check="$lt_nm_to_check nm" - fi - for lt_tmp_nm in $lt_nm_to_check; do - lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR - for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do - IFS=$lt_save_ifs - test -z "$ac_dir" && ac_dir=. - tmp_nm=$ac_dir/$lt_tmp_nm - if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext"; then - # Check to see if the nm accepts a BSD-compat flag. - # Adding the 'sed 1q' prevents false positives on HP-UX, which says: - # nm: unknown option "B" ignored - # Tru64's nm complains that /dev/null is an invalid object file - # MSYS converts /dev/null to NUL, MinGW nm treats NUL as empty - case $build_os in - mingw*) lt_bad_file=conftest.nm/nofile ;; - *) lt_bad_file=/dev/null ;; - esac - case `"$tmp_nm" -B $lt_bad_file 2>&1 | sed '1q'` in - *$lt_bad_file* | *'Invalid file or object type'*) - lt_cv_path_NM="$tmp_nm -B" - break 2 - ;; - *) - case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in - */dev/null*) - lt_cv_path_NM="$tmp_nm -p" - break 2 - ;; - *) - lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but - continue # so that we can try to find one that supports BSD flags - ;; - esac - ;; - esac - fi - done - IFS=$lt_save_ifs - done - : ${lt_cv_path_NM=no} -fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 -$as_echo "$lt_cv_path_NM" >&6; } -if test no != "$lt_cv_path_NM"; then - NM=$lt_cv_path_NM -else - # Didn't find any BSD compatible name lister, look for dumpbin. - if test -n "$DUMPBIN"; then : - # Let the user override the test. - else - if test -n "$ac_tool_prefix"; then - for ac_prog in dumpbin "link -dump" - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_DUMPBIN+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$DUMPBIN"; then - ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -DUMPBIN=$ac_cv_prog_DUMPBIN -if test -n "$DUMPBIN"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 -$as_echo "$DUMPBIN" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$DUMPBIN" && break - done -fi -if test -z "$DUMPBIN"; then - ac_ct_DUMPBIN=$DUMPBIN - for ac_prog in dumpbin "link -dump" -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_DUMPBIN"; then - ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN -if test -n "$ac_ct_DUMPBIN"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 -$as_echo "$ac_ct_DUMPBIN" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$ac_ct_DUMPBIN" && break -done - - if test "x$ac_ct_DUMPBIN" = x; then - DUMPBIN=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - DUMPBIN=$ac_ct_DUMPBIN - fi -fi - - case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in - *COFF*) - DUMPBIN="$DUMPBIN -symbols -headers" - ;; - *) - DUMPBIN=: - ;; - esac - fi - - if test : != "$DUMPBIN"; then - NM=$DUMPBIN - fi -fi -test -z "$NM" && NM=nm - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 -$as_echo_n "checking the name lister ($NM) interface... " >&6; } -if ${lt_cv_nm_interface+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_nm_interface="BSD nm" - echo "int some_variable = 0;" > conftest.$ac_ext - (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5) - (eval "$ac_compile" 2>conftest.err) - cat conftest.err >&5 - (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5) - (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) - cat conftest.err >&5 - (eval echo "\"\$as_me:$LINENO: output\"" >&5) - cat conftest.out >&5 - if $GREP 'External.*some_variable' conftest.out > /dev/null; then - lt_cv_nm_interface="MS dumpbin" - fi - rm -f conftest* -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 -$as_echo "$lt_cv_nm_interface" >&6; } - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 -$as_echo_n "checking whether ln -s works... " >&6; } -LN_S=$as_ln_s -if test "$LN_S" = "ln -s"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 -$as_echo "no, using $LN_S" >&6; } -fi - -# find the maximum length of command line arguments -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 -$as_echo_n "checking the maximum length of command line arguments... " >&6; } -if ${lt_cv_sys_max_cmd_len+:} false; then : - $as_echo_n "(cached) " >&6 -else - i=0 - teststring=ABCD - - case $build_os in - msdosdjgpp*) - # On DJGPP, this test can blow up pretty badly due to problems in libc - # (any single argument exceeding 2000 bytes causes a buffer overrun - # during glob expansion). Even if it were fixed, the result of this - # check would be larger than it should be. - lt_cv_sys_max_cmd_len=12288; # 12K is about right - ;; - - gnu*) - # Under GNU Hurd, this test is not required because there is - # no limit to the length of command line arguments. - # Libtool will interpret -1 as no limit whatsoever - lt_cv_sys_max_cmd_len=-1; - ;; - - cygwin* | mingw* | cegcc*) - # On Win9x/ME, this test blows up -- it succeeds, but takes - # about 5 minutes as the teststring grows exponentially. - # Worse, since 9x/ME are not pre-emptively multitasking, - # you end up with a "frozen" computer, even though with patience - # the test eventually succeeds (with a max line length of 256k). - # Instead, let's just punt: use the minimum linelength reported by - # all of the supported platforms: 8192 (on NT/2K/XP). - lt_cv_sys_max_cmd_len=8192; - ;; - - mint*) - # On MiNT this can take a long time and run out of memory. - lt_cv_sys_max_cmd_len=8192; - ;; - - amigaos*) - # On AmigaOS with pdksh, this test takes hours, literally. - # So we just punt and use a minimum line length of 8192. - lt_cv_sys_max_cmd_len=8192; - ;; - - bitrig* | darwin* | dragonfly* | freebsd* | netbsd* | openbsd*) - # This has been around since 386BSD, at least. Likely further. - if test -x /sbin/sysctl; then - lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` - elif test -x /usr/sbin/sysctl; then - lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` - else - lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs - fi - # And add a safety zone - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` - ;; - - interix*) - # We know the value 262144 and hardcode it with a safety zone (like BSD) - lt_cv_sys_max_cmd_len=196608 - ;; - - os2*) - # The test takes a long time on OS/2. - lt_cv_sys_max_cmd_len=8192 - ;; - - osf*) - # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure - # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not - # nice to cause kernel panics so lets avoid the loop below. - # First set a reasonable default. - lt_cv_sys_max_cmd_len=16384 - # - if test -x /sbin/sysconfig; then - case `/sbin/sysconfig -q proc exec_disable_arg_limit` in - *1*) lt_cv_sys_max_cmd_len=-1 ;; - esac - fi - ;; - sco3.2v5*) - lt_cv_sys_max_cmd_len=102400 - ;; - sysv5* | sco5v6* | sysv4.2uw2*) - kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` - if test -n "$kargmax"; then - lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` - else - lt_cv_sys_max_cmd_len=32768 - fi - ;; - *) - lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` - if test -n "$lt_cv_sys_max_cmd_len" && \ - test undefined != "$lt_cv_sys_max_cmd_len"; then - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` - else - # Make teststring a little bigger before we do anything with it. - # a 1K string should be a reasonable start. - for i in 1 2 3 4 5 6 7 8; do - teststring=$teststring$teststring - done - SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} - # If test is not a shell built-in, we'll probably end up computing a - # maximum length that is only half of the actual maximum length, but - # we can't tell. - while { test X`env echo "$teststring$teststring" 2>/dev/null` \ - = "X$teststring$teststring"; } >/dev/null 2>&1 && - test 17 != "$i" # 1/2 MB should be enough - do - i=`expr $i + 1` - teststring=$teststring$teststring - done - # Only check the string length outside the loop. - lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` - teststring= - # Add a significant safety factor because C++ compilers can tack on - # massive amounts of additional arguments before passing them to the - # linker. It appears as though 1/2 is a usable value. - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` - fi - ;; - esac - -fi - -if test -n "$lt_cv_sys_max_cmd_len"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 -$as_echo "$lt_cv_sys_max_cmd_len" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 -$as_echo "none" >&6; } -fi -max_cmd_len=$lt_cv_sys_max_cmd_len - - - - - - -: ${CP="cp -f"} -: ${MV="mv -f"} -: ${RM="rm -f"} - -if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then - lt_unset=unset -else - lt_unset=false -fi - - - - - -# test EBCDIC or ASCII -case `echo X|tr X '\101'` in - A) # ASCII based system - # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr - lt_SP2NL='tr \040 \012' - lt_NL2SP='tr \015\012 \040\040' - ;; - *) # EBCDIC based system - lt_SP2NL='tr \100 \n' - lt_NL2SP='tr \r\n \100\100' - ;; -esac - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5 -$as_echo_n "checking how to convert $build file names to $host format... " >&6; } -if ${lt_cv_to_host_file_cmd+:} false; then : - $as_echo_n "(cached) " >&6 -else - case $host in - *-*-mingw* ) - case $build in - *-*-mingw* ) # actually msys - lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 - ;; - *-*-cygwin* ) - lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 - ;; - * ) # otherwise, assume *nix - lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 - ;; - esac - ;; - *-*-cygwin* ) - case $build in - *-*-mingw* ) # actually msys - lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin - ;; - *-*-cygwin* ) - lt_cv_to_host_file_cmd=func_convert_file_noop - ;; - * ) # otherwise, assume *nix - lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin - ;; - esac - ;; - * ) # unhandled hosts (and "normal" native builds) - lt_cv_to_host_file_cmd=func_convert_file_noop - ;; -esac - -fi - -to_host_file_cmd=$lt_cv_to_host_file_cmd -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 -$as_echo "$lt_cv_to_host_file_cmd" >&6; } - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 -$as_echo_n "checking how to convert $build file names to toolchain format... " >&6; } -if ${lt_cv_to_tool_file_cmd+:} false; then : - $as_echo_n "(cached) " >&6 -else - #assume ordinary cross tools, or native build. -lt_cv_to_tool_file_cmd=func_convert_file_noop -case $host in - *-*-mingw* ) - case $build in - *-*-mingw* ) # actually msys - lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 - ;; - esac - ;; -esac - -fi - -to_tool_file_cmd=$lt_cv_to_tool_file_cmd -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 -$as_echo "$lt_cv_to_tool_file_cmd" >&6; } - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 -$as_echo_n "checking for $LD option to reload object files... " >&6; } -if ${lt_cv_ld_reload_flag+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_ld_reload_flag='-r' -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 -$as_echo "$lt_cv_ld_reload_flag" >&6; } -reload_flag=$lt_cv_ld_reload_flag -case $reload_flag in -"" | " "*) ;; -*) reload_flag=" $reload_flag" ;; -esac -reload_cmds='$LD$reload_flag -o $output$reload_objs' -case $host_os in - cygwin* | mingw* | pw32* | cegcc*) - if test yes != "$GCC"; then - reload_cmds=false - fi - ;; - darwin*) - if test yes = "$GCC"; then - reload_cmds='$LTCC $LTCFLAGS -nostdlib $wl-r -o $output$reload_objs' - else - reload_cmds='$LD$reload_flag -o $output$reload_objs' - fi - ;; -esac - - - - - - - - - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. -set dummy ${ac_tool_prefix}objdump; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_OBJDUMP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$OBJDUMP"; then - ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -OBJDUMP=$ac_cv_prog_OBJDUMP -if test -n "$OBJDUMP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 -$as_echo "$OBJDUMP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_OBJDUMP"; then - ac_ct_OBJDUMP=$OBJDUMP - # Extract the first word of "objdump", so it can be a program name with args. -set dummy objdump; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_OBJDUMP"; then - ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_OBJDUMP="objdump" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP -if test -n "$ac_ct_OBJDUMP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 -$as_echo "$ac_ct_OBJDUMP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_OBJDUMP" = x; then - OBJDUMP="false" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - OBJDUMP=$ac_ct_OBJDUMP - fi -else - OBJDUMP="$ac_cv_prog_OBJDUMP" -fi - -test -z "$OBJDUMP" && OBJDUMP=objdump - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 -$as_echo_n "checking how to recognize dependent libraries... " >&6; } -if ${lt_cv_deplibs_check_method+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_file_magic_cmd='$MAGIC_CMD' -lt_cv_file_magic_test_file= -lt_cv_deplibs_check_method='unknown' -# Need to set the preceding variable on all platforms that support -# interlibrary dependencies. -# 'none' -- dependencies not supported. -# 'unknown' -- same as none, but documents that we really don't know. -# 'pass_all' -- all dependencies passed with no checks. -# 'test_compile' -- check by making test program. -# 'file_magic [[regex]]' -- check by looking for files in library path -# that responds to the $file_magic_cmd with a given extended regex. -# If you have 'file' or equivalent on your system and you're not sure -# whether 'pass_all' will *always* work, you probably want this one. - -case $host_os in -aix[4-9]*) - lt_cv_deplibs_check_method=pass_all - ;; - -beos*) - lt_cv_deplibs_check_method=pass_all - ;; - -bsdi[45]*) - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' - lt_cv_file_magic_cmd='/usr/bin/file -L' - lt_cv_file_magic_test_file=/shlib/libc.so - ;; - -cygwin*) - # func_win32_libid is a shell function defined in ltmain.sh - lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' - lt_cv_file_magic_cmd='func_win32_libid' - ;; - -mingw* | pw32*) - # Base MSYS/MinGW do not provide the 'file' command needed by - # func_win32_libid shell function, so use a weaker test based on 'objdump', - # unless we find 'file', for example because we are cross-compiling. - if ( file / ) >/dev/null 2>&1; then - lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' - lt_cv_file_magic_cmd='func_win32_libid' - else - # Keep this pattern in sync with the one in func_win32_libid. - lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' - lt_cv_file_magic_cmd='$OBJDUMP -f' - fi - ;; - -cegcc*) - # use the weaker test based on 'objdump'. See mingw*. - lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' - lt_cv_file_magic_cmd='$OBJDUMP -f' - ;; - -darwin* | rhapsody*) - lt_cv_deplibs_check_method=pass_all - ;; - -freebsd* | dragonfly*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then - case $host_cpu in - i*86 ) - # Not sure whether the presence of OpenBSD here was a mistake. - # Let's accept both of them until this is cleared up. - lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' - lt_cv_file_magic_cmd=/usr/bin/file - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` - ;; - esac - else - lt_cv_deplibs_check_method=pass_all - fi - ;; - -haiku*) - lt_cv_deplibs_check_method=pass_all - ;; - -hpux10.20* | hpux11*) - lt_cv_file_magic_cmd=/usr/bin/file - case $host_cpu in - ia64*) - lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' - lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so - ;; - hppa*64*) - lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]' - lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl - ;; - *) - lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library' - lt_cv_file_magic_test_file=/usr/lib/libc.sl - ;; - esac - ;; - -interix[3-9]*) - # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' - ;; - -irix5* | irix6* | nonstopux*) - case $LD in - *-32|*"-32 ") libmagic=32-bit;; - *-n32|*"-n32 ") libmagic=N32;; - *-64|*"-64 ") libmagic=64-bit;; - *) libmagic=never-match;; - esac - lt_cv_deplibs_check_method=pass_all - ;; - -# This must be glibc/ELF. -linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) - lt_cv_deplibs_check_method=pass_all - ;; - -netbsd* | netbsdelf*-gnu) - if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' - else - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' - fi - ;; - -newos6*) - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' - lt_cv_file_magic_cmd=/usr/bin/file - lt_cv_file_magic_test_file=/usr/lib/libnls.so - ;; - -*nto* | *qnx*) - lt_cv_deplibs_check_method=pass_all - ;; - -openbsd* | bitrig*) - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' - else - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' - fi - ;; - -osf3* | osf4* | osf5*) - lt_cv_deplibs_check_method=pass_all - ;; - -rdos*) - lt_cv_deplibs_check_method=pass_all - ;; - -solaris*) - lt_cv_deplibs_check_method=pass_all - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - lt_cv_deplibs_check_method=pass_all - ;; - -sysv4 | sysv4.3*) - case $host_vendor in - motorola) - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` - ;; - ncr) - lt_cv_deplibs_check_method=pass_all - ;; - sequent) - lt_cv_file_magic_cmd='/bin/file' - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' - ;; - sni) - lt_cv_file_magic_cmd='/bin/file' - lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" - lt_cv_file_magic_test_file=/lib/libc.so - ;; - siemens) - lt_cv_deplibs_check_method=pass_all - ;; - pc) - lt_cv_deplibs_check_method=pass_all - ;; - esac - ;; - -tpf*) - lt_cv_deplibs_check_method=pass_all - ;; -os2*) - lt_cv_deplibs_check_method=pass_all - ;; -esac - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 -$as_echo "$lt_cv_deplibs_check_method" >&6; } - -file_magic_glob= -want_nocaseglob=no -if test "$build" = "$host"; then - case $host_os in - mingw* | pw32*) - if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then - want_nocaseglob=yes - else - file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"` - fi - ;; - esac -fi - -file_magic_cmd=$lt_cv_file_magic_cmd -deplibs_check_method=$lt_cv_deplibs_check_method -test -z "$deplibs_check_method" && deplibs_check_method=unknown - - - - - - - - - - - - - - - - - - - - - - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. -set dummy ${ac_tool_prefix}dlltool; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_DLLTOOL+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$DLLTOOL"; then - ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -DLLTOOL=$ac_cv_prog_DLLTOOL -if test -n "$DLLTOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 -$as_echo "$DLLTOOL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_DLLTOOL"; then - ac_ct_DLLTOOL=$DLLTOOL - # Extract the first word of "dlltool", so it can be a program name with args. -set dummy dlltool; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_DLLTOOL"; then - ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_DLLTOOL="dlltool" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL -if test -n "$ac_ct_DLLTOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 -$as_echo "$ac_ct_DLLTOOL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_DLLTOOL" = x; then - DLLTOOL="false" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - DLLTOOL=$ac_ct_DLLTOOL - fi -else - DLLTOOL="$ac_cv_prog_DLLTOOL" -fi - -test -z "$DLLTOOL" && DLLTOOL=dlltool - - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 -$as_echo_n "checking how to associate runtime and link libraries... " >&6; } -if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_sharedlib_from_linklib_cmd='unknown' - -case $host_os in -cygwin* | mingw* | pw32* | cegcc*) - # two different shell functions defined in ltmain.sh; - # decide which one to use based on capabilities of $DLLTOOL - case `$DLLTOOL --help 2>&1` in - *--identify-strict*) - lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib - ;; - *) - lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback - ;; - esac - ;; -*) - # fallback: assume linklib IS sharedlib - lt_cv_sharedlib_from_linklib_cmd=$ECHO - ;; -esac - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 -$as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; } -sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd -test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO - - - - - - - -if test -n "$ac_tool_prefix"; then - for ac_prog in ar - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_AR+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$AR"; then - ac_cv_prog_AR="$AR" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_AR="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -AR=$ac_cv_prog_AR -if test -n "$AR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 -$as_echo "$AR" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$AR" && break - done -fi -if test -z "$AR"; then - ac_ct_AR=$AR - for ac_prog in ar -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_AR+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_AR"; then - ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_AR="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_AR=$ac_cv_prog_ac_ct_AR -if test -n "$ac_ct_AR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 -$as_echo "$ac_ct_AR" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$ac_ct_AR" && break -done - - if test "x$ac_ct_AR" = x; then - AR="false" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - AR=$ac_ct_AR - fi -fi - -: ${AR=ar} -: ${AR_FLAGS=cru} - - - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5 -$as_echo_n "checking for archiver @FILE support... " >&6; } -if ${lt_cv_ar_at_file+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_ar_at_file=no - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - echo conftest.$ac_objext > conftest.lst - lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5' - { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 - (eval $lt_ar_try) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - if test 0 -eq "$ac_status"; then - # Ensure the archiver fails upon bogus file names. - rm -f conftest.$ac_objext libconftest.a - { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 - (eval $lt_ar_try) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - if test 0 -ne "$ac_status"; then - lt_cv_ar_at_file=@ - fi - fi - rm -f conftest.* libconftest.a - -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 -$as_echo "$lt_cv_ar_at_file" >&6; } - -if test no = "$lt_cv_ar_at_file"; then - archiver_list_spec= -else - archiver_list_spec=$lt_cv_ar_at_file -fi - - - - - - - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. -set dummy ${ac_tool_prefix}strip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_STRIP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$STRIP"; then - ac_cv_prog_STRIP="$STRIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_STRIP="${ac_tool_prefix}strip" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -STRIP=$ac_cv_prog_STRIP -if test -n "$STRIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 -$as_echo "$STRIP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_STRIP"; then - ac_ct_STRIP=$STRIP - # Extract the first word of "strip", so it can be a program name with args. -set dummy strip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_STRIP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_STRIP"; then - ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_STRIP="strip" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP -if test -n "$ac_ct_STRIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 -$as_echo "$ac_ct_STRIP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_STRIP" = x; then - STRIP=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - STRIP=$ac_ct_STRIP - fi -else - STRIP="$ac_cv_prog_STRIP" -fi - -test -z "$STRIP" && STRIP=: - - - - - - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. -set dummy ${ac_tool_prefix}ranlib; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_RANLIB+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$RANLIB"; then - ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -RANLIB=$ac_cv_prog_RANLIB -if test -n "$RANLIB"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 -$as_echo "$RANLIB" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_RANLIB"; then - ac_ct_RANLIB=$RANLIB - # Extract the first word of "ranlib", so it can be a program name with args. -set dummy ranlib; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_RANLIB"; then - ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_RANLIB="ranlib" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB -if test -n "$ac_ct_RANLIB"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 -$as_echo "$ac_ct_RANLIB" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_RANLIB" = x; then - RANLIB=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - RANLIB=$ac_ct_RANLIB - fi -else - RANLIB="$ac_cv_prog_RANLIB" -fi - -test -z "$RANLIB" && RANLIB=: - - - - - - -# Determine commands to create old-style static archives. -old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' -old_postinstall_cmds='chmod 644 $oldlib' -old_postuninstall_cmds= - -if test -n "$RANLIB"; then - case $host_os in - bitrig* | openbsd*) - old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" - ;; - *) - old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" - ;; - esac - old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" -fi - -case $host_os in - darwin*) - lock_old_archive_extraction=yes ;; - *) - lock_old_archive_extraction=no ;; -esac - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -# If no C compiler was specified, use CC. -LTCC=${LTCC-"$CC"} - -# If no C compiler flags were specified, use CFLAGS. -LTCFLAGS=${LTCFLAGS-"$CFLAGS"} - -# Allow CC to be a program name with arguments. -compiler=$CC - - -# Check for command to grab the raw symbol name followed by C symbol from nm. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 -$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } -if ${lt_cv_sys_global_symbol_pipe+:} false; then : - $as_echo_n "(cached) " >&6 -else - -# These are sane defaults that work on at least a few old systems. -# [They come from Ultrix. What could be older than Ultrix?!! ;)] - -# Character class describing NM global symbol codes. -symcode='[BCDEGRST]' - -# Regexp to match symbols that can be accessed directly from C. -sympat='\([_A-Za-z][_A-Za-z0-9]*\)' - -# Define system-specific variables. -case $host_os in -aix*) - symcode='[BCDT]' - ;; -cygwin* | mingw* | pw32* | cegcc*) - symcode='[ABCDGISTW]' - ;; -hpux*) - if test ia64 = "$host_cpu"; then - symcode='[ABCDEGRST]' - fi - ;; -irix* | nonstopux*) - symcode='[BCDEGRST]' - ;; -osf*) - symcode='[BCDEGQRST]' - ;; -solaris*) - symcode='[BDRT]' - ;; -sco3.2v5*) - symcode='[DT]' - ;; -sysv4.2uw2*) - symcode='[DT]' - ;; -sysv5* | sco5v6* | unixware* | OpenUNIX*) - symcode='[ABDT]' - ;; -sysv4) - symcode='[DFNSTU]' - ;; -esac - -# If we're using GNU nm, then use its standard symbol codes. -case `$NM -V 2>&1` in -*GNU* | *'with BFD'*) - symcode='[ABCDGIRSTW]' ;; -esac - -if test "$lt_cv_nm_interface" = "MS dumpbin"; then - # Gets list of data symbols to import. - lt_cv_sys_global_symbol_to_import="sed -n -e 's/^I .* \(.*\)$/\1/p'" - # Adjust the below global symbol transforms to fixup imported variables. - lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'" - lt_c_name_hook=" -e 's/^I .* \(.*\)$/ {\"\1\", (void *) 0},/p'" - lt_c_name_lib_hook="\ - -e 's/^I .* \(lib.*\)$/ {\"\1\", (void *) 0},/p'\ - -e 's/^I .* \(.*\)$/ {\"lib\1\", (void *) 0},/p'" -else - # Disable hooks by default. - lt_cv_sys_global_symbol_to_import= - lt_cdecl_hook= - lt_c_name_hook= - lt_c_name_lib_hook= -fi - -# Transform an extracted symbol line into a proper C declaration. -# Some systems (esp. on ia64) link data and code symbols differently, -# so use this general approach. -lt_cv_sys_global_symbol_to_cdecl="sed -n"\ -$lt_cdecl_hook\ -" -e 's/^T .* \(.*\)$/extern int \1();/p'"\ -" -e 's/^$symcode$symcode* .* \(.*\)$/extern char \1;/p'" - -# Transform an extracted symbol line into symbol name and symbol address -lt_cv_sys_global_symbol_to_c_name_address="sed -n"\ -$lt_c_name_hook\ -" -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ -" -e 's/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/p'" - -# Transform an extracted symbol line into symbol name with lib prefix and -# symbol address. -lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n"\ -$lt_c_name_lib_hook\ -" -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ -" -e 's/^$symcode$symcode* .* \(lib.*\)$/ {\"\1\", (void *) \&\1},/p'"\ -" -e 's/^$symcode$symcode* .* \(.*\)$/ {\"lib\1\", (void *) \&\1},/p'" - -# Handle CRLF in mingw tool chain -opt_cr= -case $build_os in -mingw*) - opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp - ;; -esac - -# Try without a prefix underscore, then with it. -for ac_symprfx in "" "_"; do - - # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. - symxfrm="\\1 $ac_symprfx\\2 \\2" - - # Write the raw and C identifiers. - if test "$lt_cv_nm_interface" = "MS dumpbin"; then - # Fake it for dumpbin and say T for any non-static function, - # D for any global variable and I for any imported variable. - # Also find C++ and __fastcall symbols from MSVC++, - # which start with @ or ?. - lt_cv_sys_global_symbol_pipe="$AWK '"\ -" {last_section=section; section=\$ 3};"\ -" /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ -" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ -" /^ *Symbol name *: /{split(\$ 0,sn,\":\"); si=substr(sn[2],2)};"\ -" /^ *Type *: code/{print \"T\",si,substr(si,length(prfx))};"\ -" /^ *Type *: data/{print \"I\",si,substr(si,length(prfx))};"\ -" \$ 0!~/External *\|/{next};"\ -" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ -" {if(hide[section]) next};"\ -" {f=\"D\"}; \$ 0~/\(\).*\|/{f=\"T\"};"\ -" {split(\$ 0,a,/\||\r/); split(a[2],s)};"\ -" s[1]~/^[@?]/{print f,s[1],s[1]; next};"\ -" s[1]~prfx {split(s[1],t,\"@\"); print f,t[1],substr(t[1],length(prfx))}"\ -" ' prfx=^$ac_symprfx" - else - lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" - fi - lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" - - # Check to see that the pipe works correctly. - pipe_works=no - - rm -f conftest* - cat > conftest.$ac_ext <<_LT_EOF -#ifdef __cplusplus -extern "C" { -#endif -char nm_test_var; -void nm_test_func(void); -void nm_test_func(void){} -#ifdef __cplusplus -} -#endif -int main(){nm_test_var='a';nm_test_func();return(0);} -_LT_EOF - - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - # Now try to grab the symbols. - nlist=conftest.nm - $ECHO "$as_me:$LINENO: $NM conftest.$ac_objext | $lt_cv_sys_global_symbol_pipe > $nlist" >&5 - if eval "$NM" conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist 2>&5 && test -s "$nlist"; then - # Try sorting and uniquifying the output. - if sort "$nlist" | uniq > "$nlist"T; then - mv -f "$nlist"T "$nlist" - else - rm -f "$nlist"T - fi - - # Make sure that we snagged all the symbols we need. - if $GREP ' nm_test_var$' "$nlist" >/dev/null; then - if $GREP ' nm_test_func$' "$nlist" >/dev/null; then - cat <<_LT_EOF > conftest.$ac_ext -/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ -#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE -/* DATA imports from DLLs on WIN32 can't be const, because runtime - relocations are performed -- see ld's documentation on pseudo-relocs. */ -# define LT_DLSYM_CONST -#elif defined __osf__ -/* This system does not cope well with relocations in const data. */ -# define LT_DLSYM_CONST -#else -# define LT_DLSYM_CONST const -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -_LT_EOF - # Now generate the symbol file. - eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' - - cat <<_LT_EOF >> conftest.$ac_ext - -/* The mapping between symbol names and symbols. */ -LT_DLSYM_CONST struct { - const char *name; - void *address; -} -lt__PROGRAM__LTX_preloaded_symbols[] = -{ - { "@PROGRAM@", (void *) 0 }, -_LT_EOF - $SED "s/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext - cat <<\_LT_EOF >> conftest.$ac_ext - {0, (void *) 0} -}; - -/* This works around a problem in FreeBSD linker */ -#ifdef FREEBSD_WORKAROUND -static const void *lt_preloaded_setup() { - return lt__PROGRAM__LTX_preloaded_symbols; -} -#endif - -#ifdef __cplusplus -} -#endif -_LT_EOF - # Now try linking the two files. - mv conftest.$ac_objext conftstm.$ac_objext - lt_globsym_save_LIBS=$LIBS - lt_globsym_save_CFLAGS=$CFLAGS - LIBS=conftstm.$ac_objext - CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 - (eval $ac_link) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && test -s conftest$ac_exeext; then - pipe_works=yes - fi - LIBS=$lt_globsym_save_LIBS - CFLAGS=$lt_globsym_save_CFLAGS - else - echo "cannot find nm_test_func in $nlist" >&5 - fi - else - echo "cannot find nm_test_var in $nlist" >&5 - fi - else - echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 - fi - else - echo "$progname: failed program was:" >&5 - cat conftest.$ac_ext >&5 - fi - rm -rf conftest* conftst* - - # Do not use the global_symbol_pipe unless it works. - if test yes = "$pipe_works"; then - break - else - lt_cv_sys_global_symbol_pipe= - fi -done - -fi - -if test -z "$lt_cv_sys_global_symbol_pipe"; then - lt_cv_sys_global_symbol_to_cdecl= -fi -if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 -$as_echo "failed" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 -$as_echo "ok" >&6; } -fi - -# Response file support. -if test "$lt_cv_nm_interface" = "MS dumpbin"; then - nm_file_list_spec='@' -elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then - nm_file_list_spec='@' -fi - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5 -$as_echo_n "checking for sysroot... " >&6; } - -# Check whether --with-sysroot was given. -if test "${with_sysroot+set}" = set; then : - withval=$with_sysroot; -else - with_sysroot=no -fi - - -lt_sysroot= -case $with_sysroot in #( - yes) - if test yes = "$GCC"; then - lt_sysroot=`$CC --print-sysroot 2>/dev/null` - fi - ;; #( - /*) - lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` - ;; #( - no|'') - ;; #( - *) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_sysroot" >&5 -$as_echo "$with_sysroot" >&6; } - as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5 - ;; -esac - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5 -$as_echo "${lt_sysroot:-no}" >&6; } - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a working dd" >&5 -$as_echo_n "checking for a working dd... " >&6; } -if ${ac_cv_path_lt_DD+:} false; then : - $as_echo_n "(cached) " >&6 -else - printf 0123456789abcdef0123456789abcdef >conftest.i -cat conftest.i conftest.i >conftest2.i -: ${lt_DD:=$DD} -if test -z "$lt_DD"; then - ac_path_lt_DD_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in dd; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_lt_DD="$as_dir/$ac_prog$ac_exec_ext" - as_fn_executable_p "$ac_path_lt_DD" || continue -if "$ac_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then - cmp -s conftest.i conftest.out \ - && ac_cv_path_lt_DD="$ac_path_lt_DD" ac_path_lt_DD_found=: -fi - $ac_path_lt_DD_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_lt_DD"; then - : - fi -else - ac_cv_path_lt_DD=$lt_DD -fi - -rm -f conftest.i conftest2.i conftest.out -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_lt_DD" >&5 -$as_echo "$ac_cv_path_lt_DD" >&6; } - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to truncate binary pipes" >&5 -$as_echo_n "checking how to truncate binary pipes... " >&6; } -if ${lt_cv_truncate_bin+:} false; then : - $as_echo_n "(cached) " >&6 -else - printf 0123456789abcdef0123456789abcdef >conftest.i -cat conftest.i conftest.i >conftest2.i -lt_cv_truncate_bin= -if "$ac_cv_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then - cmp -s conftest.i conftest.out \ - && lt_cv_truncate_bin="$ac_cv_path_lt_DD bs=4096 count=1" -fi -rm -f conftest.i conftest2.i conftest.out -test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q" -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_truncate_bin" >&5 -$as_echo "$lt_cv_truncate_bin" >&6; } - - - - - - - -# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. -func_cc_basename () -{ - for cc_temp in $*""; do - case $cc_temp in - compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; - distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; - \-*) ;; - *) break;; - esac - done - func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` -} - -# Check whether --enable-libtool-lock was given. -if test "${enable_libtool_lock+set}" = set; then : - enableval=$enable_libtool_lock; -fi - -test no = "$enable_libtool_lock" || enable_libtool_lock=yes - -# Some flags need to be propagated to the compiler or linker for good -# libtool support. -case $host in -ia64-*-hpux*) - # Find out what ABI is being produced by ac_compile, and set mode - # options accordingly. - echo 'int i;' > conftest.$ac_ext - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - case `/usr/bin/file conftest.$ac_objext` in - *ELF-32*) - HPUX_IA64_MODE=32 - ;; - *ELF-64*) - HPUX_IA64_MODE=64 - ;; - esac - fi - rm -rf conftest* - ;; -*-*-irix6*) - # Find out what ABI is being produced by ac_compile, and set linker - # options accordingly. - echo '#line '$LINENO' "configure"' > conftest.$ac_ext - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - if test yes = "$lt_cv_prog_gnu_ld"; then - case `/usr/bin/file conftest.$ac_objext` in - *32-bit*) - LD="${LD-ld} -melf32bsmip" - ;; - *N32*) - LD="${LD-ld} -melf32bmipn32" - ;; - *64-bit*) - LD="${LD-ld} -melf64bmip" - ;; - esac - else - case `/usr/bin/file conftest.$ac_objext` in - *32-bit*) - LD="${LD-ld} -32" - ;; - *N32*) - LD="${LD-ld} -n32" - ;; - *64-bit*) - LD="${LD-ld} -64" - ;; - esac - fi - fi - rm -rf conftest* - ;; - -mips64*-*linux*) - # Find out what ABI is being produced by ac_compile, and set linker - # options accordingly. - echo '#line '$LINENO' "configure"' > conftest.$ac_ext - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - emul=elf - case `/usr/bin/file conftest.$ac_objext` in - *32-bit*) - emul="${emul}32" - ;; - *64-bit*) - emul="${emul}64" - ;; - esac - case `/usr/bin/file conftest.$ac_objext` in - *MSB*) - emul="${emul}btsmip" - ;; - *LSB*) - emul="${emul}ltsmip" - ;; - esac - case `/usr/bin/file conftest.$ac_objext` in - *N32*) - emul="${emul}n32" - ;; - esac - LD="${LD-ld} -m $emul" - fi - rm -rf conftest* - ;; - -x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \ -s390*-*linux*|s390*-*tpf*|sparc*-*linux*) - # Find out what ABI is being produced by ac_compile, and set linker - # options accordingly. Note that the listed cases only cover the - # situations where additional linker options are needed (such as when - # doing 32-bit compilation for a host where ld defaults to 64-bit, or - # vice versa); the common cases where no linker options are needed do - # not appear in the list. - echo 'int i;' > conftest.$ac_ext - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - case `/usr/bin/file conftest.o` in - *32-bit*) - case $host in - x86_64-*kfreebsd*-gnu) - LD="${LD-ld} -m elf_i386_fbsd" - ;; - x86_64-*linux*) - case `/usr/bin/file conftest.o` in - *x86-64*) - LD="${LD-ld} -m elf32_x86_64" - ;; - *) - LD="${LD-ld} -m elf_i386" - ;; - esac - ;; - powerpc64le-*linux*) - LD="${LD-ld} -m elf32lppclinux" - ;; - powerpc64-*linux*) - LD="${LD-ld} -m elf32ppclinux" - ;; - s390x-*linux*) - LD="${LD-ld} -m elf_s390" - ;; - sparc64-*linux*) - LD="${LD-ld} -m elf32_sparc" - ;; - esac - ;; - *64-bit*) - case $host in - x86_64-*kfreebsd*-gnu) - LD="${LD-ld} -m elf_x86_64_fbsd" - ;; - x86_64-*linux*) - LD="${LD-ld} -m elf_x86_64" - ;; - powerpcle-*linux*) - LD="${LD-ld} -m elf64lppc" - ;; - powerpc-*linux*) - LD="${LD-ld} -m elf64ppc" - ;; - s390*-*linux*|s390*-*tpf*) - LD="${LD-ld} -m elf64_s390" - ;; - sparc*-*linux*) - LD="${LD-ld} -m elf64_sparc" - ;; - esac - ;; - esac - fi - rm -rf conftest* - ;; - -*-*-sco3.2v5*) - # On SCO OpenServer 5, we need -belf to get full-featured binaries. - SAVE_CFLAGS=$CFLAGS - CFLAGS="$CFLAGS -belf" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 -$as_echo_n "checking whether the C compiler needs -belf... " >&6; } -if ${lt_cv_cc_needs_belf+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - lt_cv_cc_needs_belf=yes -else - lt_cv_cc_needs_belf=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 -$as_echo "$lt_cv_cc_needs_belf" >&6; } - if test yes != "$lt_cv_cc_needs_belf"; then - # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf - CFLAGS=$SAVE_CFLAGS - fi - ;; -*-*solaris*) - # Find out what ABI is being produced by ac_compile, and set linker - # options accordingly. - echo 'int i;' > conftest.$ac_ext - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - case `/usr/bin/file conftest.o` in - *64-bit*) - case $lt_cv_prog_gnu_ld in - yes*) - case $host in - i?86-*-solaris*|x86_64-*-solaris*) - LD="${LD-ld} -m elf_x86_64" - ;; - sparc*-*-solaris*) - LD="${LD-ld} -m elf64_sparc" - ;; - esac - # GNU ld 2.21 introduced _sol2 emulations. Use them if available. - if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then - LD=${LD-ld}_sol2 - fi - ;; - *) - if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then - LD="${LD-ld} -64" - fi - ;; - esac - ;; - esac - fi - rm -rf conftest* - ;; -esac - -need_locks=$enable_libtool_lock - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args. -set dummy ${ac_tool_prefix}mt; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_MANIFEST_TOOL+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$MANIFEST_TOOL"; then - ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL -if test -n "$MANIFEST_TOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5 -$as_echo "$MANIFEST_TOOL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_MANIFEST_TOOL"; then - ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL - # Extract the first word of "mt", so it can be a program name with args. -set dummy mt; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_MANIFEST_TOOL"; then - ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_MANIFEST_TOOL="mt" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL -if test -n "$ac_ct_MANIFEST_TOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5 -$as_echo "$ac_ct_MANIFEST_TOOL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_MANIFEST_TOOL" = x; then - MANIFEST_TOOL=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL - fi -else - MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL" -fi - -test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5 -$as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } -if ${lt_cv_path_mainfest_tool+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_path_mainfest_tool=no - echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5 - $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out - cat conftest.err >&5 - if $GREP 'Manifest Tool' conftest.out > /dev/null; then - lt_cv_path_mainfest_tool=yes - fi - rm -f conftest* -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 -$as_echo "$lt_cv_path_mainfest_tool" >&6; } -if test yes != "$lt_cv_path_mainfest_tool"; then - MANIFEST_TOOL=: -fi - - - - - - - case $host_os in - rhapsody* | darwin*) - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. -set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_DSYMUTIL+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$DSYMUTIL"; then - ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -DSYMUTIL=$ac_cv_prog_DSYMUTIL -if test -n "$DSYMUTIL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 -$as_echo "$DSYMUTIL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_DSYMUTIL"; then - ac_ct_DSYMUTIL=$DSYMUTIL - # Extract the first word of "dsymutil", so it can be a program name with args. -set dummy dsymutil; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_DSYMUTIL"; then - ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL -if test -n "$ac_ct_DSYMUTIL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 -$as_echo "$ac_ct_DSYMUTIL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_DSYMUTIL" = x; then - DSYMUTIL=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - DSYMUTIL=$ac_ct_DSYMUTIL - fi -else - DSYMUTIL="$ac_cv_prog_DSYMUTIL" -fi - - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. -set dummy ${ac_tool_prefix}nmedit; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_NMEDIT+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$NMEDIT"; then - ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -NMEDIT=$ac_cv_prog_NMEDIT -if test -n "$NMEDIT"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 -$as_echo "$NMEDIT" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_NMEDIT"; then - ac_ct_NMEDIT=$NMEDIT - # Extract the first word of "nmedit", so it can be a program name with args. -set dummy nmedit; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_NMEDIT"; then - ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_NMEDIT="nmedit" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT -if test -n "$ac_ct_NMEDIT"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 -$as_echo "$ac_ct_NMEDIT" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_NMEDIT" = x; then - NMEDIT=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - NMEDIT=$ac_ct_NMEDIT - fi -else - NMEDIT="$ac_cv_prog_NMEDIT" -fi - - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. -set dummy ${ac_tool_prefix}lipo; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_LIPO+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$LIPO"; then - ac_cv_prog_LIPO="$LIPO" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_LIPO="${ac_tool_prefix}lipo" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -LIPO=$ac_cv_prog_LIPO -if test -n "$LIPO"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 -$as_echo "$LIPO" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_LIPO"; then - ac_ct_LIPO=$LIPO - # Extract the first word of "lipo", so it can be a program name with args. -set dummy lipo; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_LIPO+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_LIPO"; then - ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_LIPO="lipo" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO -if test -n "$ac_ct_LIPO"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 -$as_echo "$ac_ct_LIPO" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_LIPO" = x; then - LIPO=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - LIPO=$ac_ct_LIPO - fi -else - LIPO="$ac_cv_prog_LIPO" -fi - - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. -set dummy ${ac_tool_prefix}otool; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_OTOOL+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$OTOOL"; then - ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_OTOOL="${ac_tool_prefix}otool" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -OTOOL=$ac_cv_prog_OTOOL -if test -n "$OTOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 -$as_echo "$OTOOL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_OTOOL"; then - ac_ct_OTOOL=$OTOOL - # Extract the first word of "otool", so it can be a program name with args. -set dummy otool; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_OTOOL+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_OTOOL"; then - ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_OTOOL="otool" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL -if test -n "$ac_ct_OTOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 -$as_echo "$ac_ct_OTOOL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_OTOOL" = x; then - OTOOL=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - OTOOL=$ac_ct_OTOOL - fi -else - OTOOL="$ac_cv_prog_OTOOL" -fi - - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. -set dummy ${ac_tool_prefix}otool64; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_OTOOL64+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$OTOOL64"; then - ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -OTOOL64=$ac_cv_prog_OTOOL64 -if test -n "$OTOOL64"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 -$as_echo "$OTOOL64" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_OTOOL64"; then - ac_ct_OTOOL64=$OTOOL64 - # Extract the first word of "otool64", so it can be a program name with args. -set dummy otool64; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_OTOOL64"; then - ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_OTOOL64="otool64" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 -if test -n "$ac_ct_OTOOL64"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 -$as_echo "$ac_ct_OTOOL64" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_OTOOL64" = x; then - OTOOL64=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - OTOOL64=$ac_ct_OTOOL64 - fi -else - OTOOL64="$ac_cv_prog_OTOOL64" -fi - - - - - - - - - - - - - - - - - - - - - - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 -$as_echo_n "checking for -single_module linker flag... " >&6; } -if ${lt_cv_apple_cc_single_mod+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_apple_cc_single_mod=no - if test -z "$LT_MULTI_MODULE"; then - # By default we will add the -single_module flag. You can override - # by either setting the environment variable LT_MULTI_MODULE - # non-empty at configure time, or by adding -multi_module to the - # link flags. - rm -rf libconftest.dylib* - echo "int foo(void){return 1;}" > conftest.c - echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ --dynamiclib -Wl,-single_module conftest.c" >&5 - $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ - -dynamiclib -Wl,-single_module conftest.c 2>conftest.err - _lt_result=$? - # If there is a non-empty error log, and "single_module" - # appears in it, assume the flag caused a linker warning - if test -s conftest.err && $GREP single_module conftest.err; then - cat conftest.err >&5 - # Otherwise, if the output was created with a 0 exit code from - # the compiler, it worked. - elif test -f libconftest.dylib && test 0 = "$_lt_result"; then - lt_cv_apple_cc_single_mod=yes - else - cat conftest.err >&5 - fi - rm -rf libconftest.dylib* - rm -f conftest.* - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 -$as_echo "$lt_cv_apple_cc_single_mod" >&6; } - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 -$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } -if ${lt_cv_ld_exported_symbols_list+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_ld_exported_symbols_list=no - save_LDFLAGS=$LDFLAGS - echo "_main" > conftest.sym - LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - lt_cv_ld_exported_symbols_list=yes -else - lt_cv_ld_exported_symbols_list=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - LDFLAGS=$save_LDFLAGS - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 -$as_echo "$lt_cv_ld_exported_symbols_list" >&6; } - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 -$as_echo_n "checking for -force_load linker flag... " >&6; } -if ${lt_cv_ld_force_load+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_ld_force_load=no - cat > conftest.c << _LT_EOF -int forced_loaded() { return 2;} -_LT_EOF - echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5 - $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5 - echo "$AR cru libconftest.a conftest.o" >&5 - $AR cru libconftest.a conftest.o 2>&5 - echo "$RANLIB libconftest.a" >&5 - $RANLIB libconftest.a 2>&5 - cat > conftest.c << _LT_EOF -int main() { return 0;} -_LT_EOF - echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5 - $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err - _lt_result=$? - if test -s conftest.err && $GREP force_load conftest.err; then - cat conftest.err >&5 - elif test -f conftest && test 0 = "$_lt_result" && $GREP forced_load conftest >/dev/null 2>&1; then - lt_cv_ld_force_load=yes - else - cat conftest.err >&5 - fi - rm -f conftest.err libconftest.a conftest conftest.c - rm -rf conftest.dSYM - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 -$as_echo "$lt_cv_ld_force_load" >&6; } - case $host_os in - rhapsody* | darwin1.[012]) - _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;; - darwin1.*) - _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; - darwin*) # darwin 5.x on - # if running on 10.5 or later, the deployment target defaults - # to the OS version, if on x86, and 10.4, the deployment - # target defaults to 10.4. Don't you love it? - case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in - 10.0,*86*-darwin8*|10.0,*-darwin[91]*) - _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; - 10.[012][,.]*) - _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; - 10.*) - _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; - esac - ;; - esac - if test yes = "$lt_cv_apple_cc_single_mod"; then - _lt_dar_single_mod='$single_module' - fi - if test yes = "$lt_cv_ld_exported_symbols_list"; then - _lt_dar_export_syms=' $wl-exported_symbols_list,$output_objdir/$libname-symbols.expsym' - else - _lt_dar_export_syms='~$NMEDIT -s $output_objdir/$libname-symbols.expsym $lib' - fi - if test : != "$DSYMUTIL" && test no = "$lt_cv_ld_force_load"; then - _lt_dsymutil='~$DSYMUTIL $lib || :' - else - _lt_dsymutil= - fi - ;; - esac - -# func_munge_path_list VARIABLE PATH -# ----------------------------------- -# VARIABLE is name of variable containing _space_ separated list of -# directories to be munged by the contents of PATH, which is string -# having a format: -# "DIR[:DIR]:" -# string "DIR[ DIR]" will be prepended to VARIABLE -# ":DIR[:DIR]" -# string "DIR[ DIR]" will be appended to VARIABLE -# "DIRP[:DIRP]::[DIRA:]DIRA" -# string "DIRP[ DIRP]" will be prepended to VARIABLE and string -# "DIRA[ DIRA]" will be appended to VARIABLE -# "DIR[:DIR]" -# VARIABLE will be replaced by "DIR[ DIR]" -func_munge_path_list () -{ - case x$2 in - x) - ;; - *:) - eval $1=\"`$ECHO $2 | $SED 's/:/ /g'` \$$1\" - ;; - x:*) - eval $1=\"\$$1 `$ECHO $2 | $SED 's/:/ /g'`\" - ;; - *::*) - eval $1=\"\$$1\ `$ECHO $2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" - eval $1=\"`$ECHO $2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \$$1\" - ;; - *) - eval $1=\"`$ECHO $2 | $SED 's/:/ /g'`\" - ;; - esac -} - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 -$as_echo_n "checking how to run the C preprocessor... " >&6; } -# On Suns, sometimes $CPP names a directory. -if test -n "$CPP" && test -d "$CPP"; then - CPP= -fi -if test -z "$CPP"; then - if ${ac_cv_prog_CPP+:} false; then : - $as_echo_n "(cached) " >&6 -else - # Double quotes because CPP needs to be expanded - for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" - do - ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - break -fi - - done - ac_cv_prog_CPP=$CPP - -fi - CPP=$ac_cv_prog_CPP -else - ac_cv_prog_CPP=$CPP -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 -$as_echo "$CPP" >&6; } -ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "C preprocessor \"$CPP\" fails sanity check -See \`config.log' for more details" "$LINENO" 5; } -fi - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 -$as_echo_n "checking for ANSI C header files... " >&6; } -if ${ac_cv_header_stdc+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#include -#include - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_header_stdc=yes -else - ac_cv_header_stdc=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -if test $ac_cv_header_stdc = yes; then - # SunOS 4.x string.h does not declare mem*, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "memchr" >/dev/null 2>&1; then : - -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "free" >/dev/null 2>&1; then : - -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. - if test "$cross_compiling" = yes; then : - : -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#if ((' ' & 0x0FF) == 0x020) -# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') -# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) -#else -# define ISLOWER(c) \ - (('a' <= (c) && (c) <= 'i') \ - || ('j' <= (c) && (c) <= 'r') \ - || ('s' <= (c) && (c) <= 'z')) -# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) -#endif - -#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) -int -main () -{ - int i; - for (i = 0; i < 256; i++) - if (XOR (islower (i), ISLOWER (i)) - || toupper (i) != TOUPPER (i)) - return 2; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - -else - ac_cv_header_stdc=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 -$as_echo "$ac_cv_header_stdc" >&6; } -if test $ac_cv_header_stdc = yes; then - -$as_echo "#define STDC_HEADERS 1" >>confdefs.h - -fi - -# On IRIX 5.3, sys/types and inttypes.h are conflicting. -for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ - inttypes.h stdint.h unistd.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default -" -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -fi - -done - - -for ac_header in dlfcn.h -do : - ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default -" -if test "x$ac_cv_header_dlfcn_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_DLFCN_H 1 -_ACEOF - -fi - -done - - - - - -# Set options - - - - enable_dlopen=no - - - enable_win32_dll=no - - - # Check whether --enable-shared was given. -if test "${enable_shared+set}" = set; then : - enableval=$enable_shared; p=${PACKAGE-default} - case $enableval in - yes) enable_shared=yes ;; - no) enable_shared=no ;; - *) - enable_shared=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, - for pkg in $enableval; do - IFS=$lt_save_ifs - if test "X$pkg" = "X$p"; then - enable_shared=yes - fi - done - IFS=$lt_save_ifs - ;; - esac -else - enable_shared=yes -fi - - - - - - - - - - # Check whether --enable-static was given. -if test "${enable_static+set}" = set; then : - enableval=$enable_static; p=${PACKAGE-default} - case $enableval in - yes) enable_static=yes ;; - no) enable_static=no ;; - *) - enable_static=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, - for pkg in $enableval; do - IFS=$lt_save_ifs - if test "X$pkg" = "X$p"; then - enable_static=yes - fi - done - IFS=$lt_save_ifs - ;; - esac -else - enable_static=yes -fi - - - - - - - - - - -# Check whether --with-pic was given. -if test "${with_pic+set}" = set; then : - withval=$with_pic; lt_p=${PACKAGE-default} - case $withval in - yes|no) pic_mode=$withval ;; - *) - pic_mode=default - # Look at the argument we got. We use all the common list separators. - lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, - for lt_pkg in $withval; do - IFS=$lt_save_ifs - if test "X$lt_pkg" = "X$lt_p"; then - pic_mode=yes - fi - done - IFS=$lt_save_ifs - ;; - esac -else - pic_mode=default -fi - - - - - - - - - # Check whether --enable-fast-install was given. -if test "${enable_fast_install+set}" = set; then : - enableval=$enable_fast_install; p=${PACKAGE-default} - case $enableval in - yes) enable_fast_install=yes ;; - no) enable_fast_install=no ;; - *) - enable_fast_install=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, - for pkg in $enableval; do - IFS=$lt_save_ifs - if test "X$pkg" = "X$p"; then - enable_fast_install=yes - fi - done - IFS=$lt_save_ifs - ;; - esac -else - enable_fast_install=yes -fi - - - - - - - - - shared_archive_member_spec= -case $host,$enable_shared in -power*-*-aix[5-9]*,yes) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking which variant of shared library versioning to provide" >&5 -$as_echo_n "checking which variant of shared library versioning to provide... " >&6; } - -# Check whether --with-aix-soname was given. -if test "${with_aix_soname+set}" = set; then : - withval=$with_aix_soname; case $withval in - aix|svr4|both) - ;; - *) - as_fn_error $? "Unknown argument to --with-aix-soname" "$LINENO" 5 - ;; - esac - lt_cv_with_aix_soname=$with_aix_soname -else - if ${lt_cv_with_aix_soname+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_with_aix_soname=aix -fi - - with_aix_soname=$lt_cv_with_aix_soname -fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_aix_soname" >&5 -$as_echo "$with_aix_soname" >&6; } - if test aix != "$with_aix_soname"; then - # For the AIX way of multilib, we name the shared archive member - # based on the bitwidth used, traditionally 'shr.o' or 'shr_64.o', - # and 'shr.imp' or 'shr_64.imp', respectively, for the Import File. - # Even when GNU compilers ignore OBJECT_MODE but need '-maix64' flag, - # the AIX toolchain works better with OBJECT_MODE set (default 32). - if test 64 = "${OBJECT_MODE-32}"; then - shared_archive_member_spec=shr_64 - else - shared_archive_member_spec=shr - fi - fi - ;; -*) - with_aix_soname=aix - ;; -esac - - - - - - - - - - -# This can be used to rebuild libtool when needed -LIBTOOL_DEPS=$ltmain - -# Always use our own libtool. -LIBTOOL='$(SHELL) $(top_builddir)/libtool' - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -test -z "$LN_S" && LN_S="ln -s" - - - - - - - - - - - - - - -if test -n "${ZSH_VERSION+set}"; then - setopt NO_GLOB_SUBST -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 -$as_echo_n "checking for objdir... " >&6; } -if ${lt_cv_objdir+:} false; then : - $as_echo_n "(cached) " >&6 -else - rm -f .libs 2>/dev/null -mkdir .libs 2>/dev/null -if test -d .libs; then - lt_cv_objdir=.libs -else - # MS-DOS does not allow filenames that begin with a dot. - lt_cv_objdir=_libs -fi -rmdir .libs 2>/dev/null -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 -$as_echo "$lt_cv_objdir" >&6; } -objdir=$lt_cv_objdir - - - - - -cat >>confdefs.h <<_ACEOF -#define LT_OBJDIR "$lt_cv_objdir/" -_ACEOF - - - - -case $host_os in -aix3*) - # AIX sometimes has problems with the GCC collect2 program. For some - # reason, if we set the COLLECT_NAMES environment variable, the problems - # vanish in a puff of smoke. - if test set != "${COLLECT_NAMES+set}"; then - COLLECT_NAMES= - export COLLECT_NAMES - fi - ;; -esac - -# Global variables: -ofile=libtool -can_build_shared=yes - -# All known linkers require a '.a' archive for static linking (except MSVC, -# which needs '.lib'). -libext=a - -with_gnu_ld=$lt_cv_prog_gnu_ld - -old_CC=$CC -old_CFLAGS=$CFLAGS - -# Set sane defaults for various variables -test -z "$CC" && CC=cc -test -z "$LTCC" && LTCC=$CC -test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS -test -z "$LD" && LD=ld -test -z "$ac_objext" && ac_objext=o - -func_cc_basename $compiler -cc_basename=$func_cc_basename_result - - -# Only perform the check for file, if the check method requires it -test -z "$MAGIC_CMD" && MAGIC_CMD=file -case $deplibs_check_method in -file_magic*) - if test "$file_magic_cmd" = '$MAGIC_CMD'; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 -$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } -if ${lt_cv_path_MAGIC_CMD+:} false; then : - $as_echo_n "(cached) " >&6 -else - case $MAGIC_CMD in -[\\/*] | ?:[\\/]*) - lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. - ;; -*) - lt_save_MAGIC_CMD=$MAGIC_CMD - lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR - ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" - for ac_dir in $ac_dummy; do - IFS=$lt_save_ifs - test -z "$ac_dir" && ac_dir=. - if test -f "$ac_dir/${ac_tool_prefix}file"; then - lt_cv_path_MAGIC_CMD=$ac_dir/"${ac_tool_prefix}file" - if test -n "$file_magic_test_file"; then - case $deplibs_check_method in - "file_magic "*) - file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` - MAGIC_CMD=$lt_cv_path_MAGIC_CMD - if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | - $EGREP "$file_magic_regex" > /dev/null; then - : - else - cat <<_LT_EOF 1>&2 - -*** Warning: the command libtool uses to detect shared libraries, -*** $file_magic_cmd, produces output that libtool cannot recognize. -*** The result is that libtool may fail to recognize shared libraries -*** as such. This will affect the creation of libtool libraries that -*** depend on shared libraries, but programs linked with such libtool -*** libraries will work regardless of this problem. Nevertheless, you -*** may want to report the problem to your system manager and/or to -*** bug-libtool@gnu.org - -_LT_EOF - fi ;; - esac - fi - break - fi - done - IFS=$lt_save_ifs - MAGIC_CMD=$lt_save_MAGIC_CMD - ;; -esac -fi - -MAGIC_CMD=$lt_cv_path_MAGIC_CMD -if test -n "$MAGIC_CMD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 -$as_echo "$MAGIC_CMD" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - - -if test -z "$lt_cv_path_MAGIC_CMD"; then - if test -n "$ac_tool_prefix"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 -$as_echo_n "checking for file... " >&6; } -if ${lt_cv_path_MAGIC_CMD+:} false; then : - $as_echo_n "(cached) " >&6 -else - case $MAGIC_CMD in -[\\/*] | ?:[\\/]*) - lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. - ;; -*) - lt_save_MAGIC_CMD=$MAGIC_CMD - lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR - ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" - for ac_dir in $ac_dummy; do - IFS=$lt_save_ifs - test -z "$ac_dir" && ac_dir=. - if test -f "$ac_dir/file"; then - lt_cv_path_MAGIC_CMD=$ac_dir/"file" - if test -n "$file_magic_test_file"; then - case $deplibs_check_method in - "file_magic "*) - file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` - MAGIC_CMD=$lt_cv_path_MAGIC_CMD - if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | - $EGREP "$file_magic_regex" > /dev/null; then - : - else - cat <<_LT_EOF 1>&2 - -*** Warning: the command libtool uses to detect shared libraries, -*** $file_magic_cmd, produces output that libtool cannot recognize. -*** The result is that libtool may fail to recognize shared libraries -*** as such. This will affect the creation of libtool libraries that -*** depend on shared libraries, but programs linked with such libtool -*** libraries will work regardless of this problem. Nevertheless, you -*** may want to report the problem to your system manager and/or to -*** bug-libtool@gnu.org - -_LT_EOF - fi ;; - esac - fi - break - fi - done - IFS=$lt_save_ifs - MAGIC_CMD=$lt_save_MAGIC_CMD - ;; -esac -fi - -MAGIC_CMD=$lt_cv_path_MAGIC_CMD -if test -n "$MAGIC_CMD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 -$as_echo "$MAGIC_CMD" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - else - MAGIC_CMD=: - fi -fi - - fi - ;; -esac - -# Use C for the default configuration in the libtool script - -lt_save_CC=$CC -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - -# Source file extension for C test sources. -ac_ext=c - -# Object file extension for compiled C test sources. -objext=o -objext=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code="int some_variable = 0;" - -# Code to be used in simple link tests -lt_simple_link_test_code='int main(){return(0);}' - - - - - - - -# If no C compiler was specified, use CC. -LTCC=${LTCC-"$CC"} - -# If no C compiler flags were specified, use CFLAGS. -LTCFLAGS=${LTCFLAGS-"$CFLAGS"} - -# Allow CC to be a program name with arguments. -compiler=$CC - -# Save the default compiler, since it gets overwritten when the other -# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. -compiler_DEFAULT=$CC - -# save warnings/boilerplate of simple test code -ac_outfile=conftest.$ac_objext -echo "$lt_simple_compile_test_code" >conftest.$ac_ext -eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_compiler_boilerplate=`cat conftest.err` -$RM conftest* - -ac_outfile=conftest.$ac_objext -echo "$lt_simple_link_test_code" >conftest.$ac_ext -eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_linker_boilerplate=`cat conftest.err` -$RM -r conftest* - - -## CAVEAT EMPTOR: -## There is no encapsulation within the following macros, do not change -## the running order or otherwise move them around unless you know exactly -## what you are doing... -if test -n "$compiler"; then - -lt_prog_compiler_no_builtin_flag= - -if test yes = "$GCC"; then - case $cc_basename in - nvcc*) - lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;; - *) - lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;; - esac - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 -$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } -if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_rtti_exceptions=no - ac_outfile=conftest.$ac_objext - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="-fno-rtti -fno-exceptions" ## exclude from sc_useless_quotes_in_assignment - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - # The option is referenced via a variable to avoid confusing sed. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. - $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then - lt_cv_prog_compiler_rtti_exceptions=yes - fi - fi - $RM conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 -$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } - -if test yes = "$lt_cv_prog_compiler_rtti_exceptions"; then - lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" -else - : -fi - -fi - - - - - - - lt_prog_compiler_wl= -lt_prog_compiler_pic= -lt_prog_compiler_static= - - - if test yes = "$GCC"; then - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_static='-static' - - case $host_os in - aix*) - # All AIX code is PIC. - if test ia64 = "$host_cpu"; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static='-Bstatic' - fi - lt_prog_compiler_pic='-fPIC' - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - lt_prog_compiler_pic='-fPIC' - ;; - m68k) - # FIXME: we need at least 68020 code to build shared libraries, but - # adding the '-m68020' flag to GCC prevents building anything better, - # like '-m68040'. - lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' - ;; - esac - ;; - - beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) - # PIC is the default for these OSes. - ;; - - mingw* | cygwin* | pw32* | os2* | cegcc*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - # Although the cygwin gcc ignores -fPIC, still need this for old-style - # (--disable-auto-import) libraries - lt_prog_compiler_pic='-DDLL_EXPORT' - case $host_os in - os2*) - lt_prog_compiler_static='$wl-static' - ;; - esac - ;; - - darwin* | rhapsody*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - lt_prog_compiler_pic='-fno-common' - ;; - - haiku*) - # PIC is the default for Haiku. - # The "-static" flag exists, but is broken. - lt_prog_compiler_static= - ;; - - hpux*) - # PIC is the default for 64-bit PA HP-UX, but not for 32-bit - # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag - # sets the default TLS model and affects inlining. - case $host_cpu in - hppa*64*) - # +Z the default - ;; - *) - lt_prog_compiler_pic='-fPIC' - ;; - esac - ;; - - interix[3-9]*) - # Interix 3.x gcc -fpic/-fPIC options generate broken code. - # Instead, we relocate shared libraries at runtime. - ;; - - msdosdjgpp*) - # Just because we use GCC doesn't mean we suddenly get shared libraries - # on systems that don't support them. - lt_prog_compiler_can_build_shared=no - enable_shared=no - ;; - - *nto* | *qnx*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - lt_prog_compiler_pic='-fPIC -shared' - ;; - - sysv4*MP*) - if test -d /usr/nec; then - lt_prog_compiler_pic=-Kconform_pic - fi - ;; - - *) - lt_prog_compiler_pic='-fPIC' - ;; - esac - - case $cc_basename in - nvcc*) # Cuda Compiler Driver 2.2 - lt_prog_compiler_wl='-Xlinker ' - if test -n "$lt_prog_compiler_pic"; then - lt_prog_compiler_pic="-Xcompiler $lt_prog_compiler_pic" - fi - ;; - esac - else - # PORTME Check for flag to pass linker flags through the system compiler. - case $host_os in - aix*) - lt_prog_compiler_wl='-Wl,' - if test ia64 = "$host_cpu"; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static='-Bstatic' - else - lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' - fi - ;; - - darwin* | rhapsody*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - lt_prog_compiler_pic='-fno-common' - case $cc_basename in - nagfor*) - # NAG Fortran compiler - lt_prog_compiler_wl='-Wl,-Wl,,' - lt_prog_compiler_pic='-PIC' - lt_prog_compiler_static='-Bstatic' - ;; - esac - ;; - - mingw* | cygwin* | pw32* | os2* | cegcc*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - lt_prog_compiler_pic='-DDLL_EXPORT' - case $host_os in - os2*) - lt_prog_compiler_static='$wl-static' - ;; - esac - ;; - - hpux9* | hpux10* | hpux11*) - lt_prog_compiler_wl='-Wl,' - # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but - # not for PA HP-UX. - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - lt_prog_compiler_pic='+Z' - ;; - esac - # Is there a better lt_prog_compiler_static that works with the bundled CC? - lt_prog_compiler_static='$wl-a ${wl}archive' - ;; - - irix5* | irix6* | nonstopux*) - lt_prog_compiler_wl='-Wl,' - # PIC (with -KPIC) is the default. - lt_prog_compiler_static='-non_shared' - ;; - - linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) - case $cc_basename in - # old Intel for x86_64, which still supported -KPIC. - ecc*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-static' - ;; - # icc used to be incompatible with GCC. - # ICC 10 doesn't accept -KPIC any more. - icc* | ifort*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-fPIC' - lt_prog_compiler_static='-static' - ;; - # Lahey Fortran 8.1. - lf95*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='--shared' - lt_prog_compiler_static='--static' - ;; - nagfor*) - # NAG Fortran compiler - lt_prog_compiler_wl='-Wl,-Wl,,' - lt_prog_compiler_pic='-PIC' - lt_prog_compiler_static='-Bstatic' - ;; - tcc*) - # Fabrice Bellard et al's Tiny C Compiler - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-fPIC' - lt_prog_compiler_static='-static' - ;; - pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) - # Portland Group compilers (*not* the Pentium gcc compiler, - # which looks to be a dead project) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-fpic' - lt_prog_compiler_static='-Bstatic' - ;; - ccc*) - lt_prog_compiler_wl='-Wl,' - # All Alpha code is PIC. - lt_prog_compiler_static='-non_shared' - ;; - xl* | bgxl* | bgf* | mpixl*) - # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-qpic' - lt_prog_compiler_static='-qstaticlink' - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*) - # Sun Fortran 8.3 passes all unrecognized flags to the linker - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - lt_prog_compiler_wl='' - ;; - *Sun\ F* | *Sun*Fortran*) - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - lt_prog_compiler_wl='-Qoption ld ' - ;; - *Sun\ C*) - # Sun C 5.9 - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - lt_prog_compiler_wl='-Wl,' - ;; - *Intel*\ [CF]*Compiler*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-fPIC' - lt_prog_compiler_static='-static' - ;; - *Portland\ Group*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-fpic' - lt_prog_compiler_static='-Bstatic' - ;; - esac - ;; - esac - ;; - - newsos6) - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - ;; - - *nto* | *qnx*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - lt_prog_compiler_pic='-fPIC -shared' - ;; - - osf3* | osf4* | osf5*) - lt_prog_compiler_wl='-Wl,' - # All OSF/1 code is PIC. - lt_prog_compiler_static='-non_shared' - ;; - - rdos*) - lt_prog_compiler_static='-non_shared' - ;; - - solaris*) - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - case $cc_basename in - f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) - lt_prog_compiler_wl='-Qoption ld ';; - *) - lt_prog_compiler_wl='-Wl,';; - esac - ;; - - sunos4*) - lt_prog_compiler_wl='-Qoption ld ' - lt_prog_compiler_pic='-PIC' - lt_prog_compiler_static='-Bstatic' - ;; - - sysv4 | sysv4.2uw2* | sysv4.3*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - ;; - - sysv4*MP*) - if test -d /usr/nec; then - lt_prog_compiler_pic='-Kconform_pic' - lt_prog_compiler_static='-Bstatic' - fi - ;; - - sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - ;; - - unicos*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_can_build_shared=no - ;; - - uts4*) - lt_prog_compiler_pic='-pic' - lt_prog_compiler_static='-Bstatic' - ;; - - *) - lt_prog_compiler_can_build_shared=no - ;; - esac - fi - -case $host_os in - # For platforms that do not support PIC, -DPIC is meaningless: - *djgpp*) - lt_prog_compiler_pic= - ;; - *) - lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" - ;; -esac - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 -$as_echo_n "checking for $compiler option to produce PIC... " >&6; } -if ${lt_cv_prog_compiler_pic+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_pic=$lt_prog_compiler_pic -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 -$as_echo "$lt_cv_prog_compiler_pic" >&6; } -lt_prog_compiler_pic=$lt_cv_prog_compiler_pic - -# -# Check to make sure the PIC flag actually works. -# -if test -n "$lt_prog_compiler_pic"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 -$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } -if ${lt_cv_prog_compiler_pic_works+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_pic_works=no - ac_outfile=conftest.$ac_objext - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="$lt_prog_compiler_pic -DPIC" ## exclude from sc_useless_quotes_in_assignment - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - # The option is referenced via a variable to avoid confusing sed. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. - $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then - lt_cv_prog_compiler_pic_works=yes - fi - fi - $RM conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 -$as_echo "$lt_cv_prog_compiler_pic_works" >&6; } - -if test yes = "$lt_cv_prog_compiler_pic_works"; then - case $lt_prog_compiler_pic in - "" | " "*) ;; - *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; - esac -else - lt_prog_compiler_pic= - lt_prog_compiler_can_build_shared=no -fi - -fi - - - - - - - - - - - -# -# Check to make sure the static flag actually works. -# -wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 -$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } -if ${lt_cv_prog_compiler_static_works+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_static_works=no - save_LDFLAGS=$LDFLAGS - LDFLAGS="$LDFLAGS $lt_tmp_static_flag" - echo "$lt_simple_link_test_code" > conftest.$ac_ext - if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then - # The linker can only warn and ignore the option if not recognized - # So say no if there are warnings - if test -s conftest.err; then - # Append any errors to the config.log. - cat conftest.err 1>&5 - $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if diff conftest.exp conftest.er2 >/dev/null; then - lt_cv_prog_compiler_static_works=yes - fi - else - lt_cv_prog_compiler_static_works=yes - fi - fi - $RM -r conftest* - LDFLAGS=$save_LDFLAGS - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 -$as_echo "$lt_cv_prog_compiler_static_works" >&6; } - -if test yes = "$lt_cv_prog_compiler_static_works"; then - : -else - lt_prog_compiler_static= -fi - - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 -$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } -if ${lt_cv_prog_compiler_c_o+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_c_o=no - $RM -r conftest 2>/dev/null - mkdir conftest - cd conftest - mkdir out - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - lt_compiler_flag="-o out/conftest2.$ac_objext" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp - $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 - if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then - lt_cv_prog_compiler_c_o=yes - fi - fi - chmod u+w . 2>&5 - $RM conftest* - # SGI C++ compiler will create directory out/ii_files/ for - # template instantiation - test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files - $RM out/* && rmdir out - cd .. - $RM -r conftest - $RM conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 -$as_echo "$lt_cv_prog_compiler_c_o" >&6; } - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 -$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } -if ${lt_cv_prog_compiler_c_o+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_c_o=no - $RM -r conftest 2>/dev/null - mkdir conftest - cd conftest - mkdir out - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - lt_compiler_flag="-o out/conftest2.$ac_objext" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp - $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 - if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then - lt_cv_prog_compiler_c_o=yes - fi - fi - chmod u+w . 2>&5 - $RM conftest* - # SGI C++ compiler will create directory out/ii_files/ for - # template instantiation - test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files - $RM out/* && rmdir out - cd .. - $RM -r conftest - $RM conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 -$as_echo "$lt_cv_prog_compiler_c_o" >&6; } - - - - -hard_links=nottested -if test no = "$lt_cv_prog_compiler_c_o" && test no != "$need_locks"; then - # do not overwrite the value of need_locks provided by the user - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 -$as_echo_n "checking if we can lock with hard links... " >&6; } - hard_links=yes - $RM conftest* - ln conftest.a conftest.b 2>/dev/null && hard_links=no - touch conftest.a - ln conftest.a conftest.b 2>&5 || hard_links=no - ln conftest.a conftest.b 2>/dev/null && hard_links=no - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 -$as_echo "$hard_links" >&6; } - if test no = "$hard_links"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&5 -$as_echo "$as_me: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&2;} - need_locks=warn - fi -else - need_locks=no -fi - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 -$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } - - runpath_var= - allow_undefined_flag= - always_export_symbols=no - archive_cmds= - archive_expsym_cmds= - compiler_needs_object=no - enable_shared_with_static_runtimes=no - export_dynamic_flag_spec= - export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - hardcode_automatic=no - hardcode_direct=no - hardcode_direct_absolute=no - hardcode_libdir_flag_spec= - hardcode_libdir_separator= - hardcode_minus_L=no - hardcode_shlibpath_var=unsupported - inherit_rpath=no - link_all_deplibs=unknown - module_cmds= - module_expsym_cmds= - old_archive_from_new_cmds= - old_archive_from_expsyms_cmds= - thread_safe_flag_spec= - whole_archive_flag_spec= - # include_expsyms should be a list of space-separated symbols to be *always* - # included in the symbol list - include_expsyms= - # exclude_expsyms can be an extended regexp of symbols to exclude - # it will be wrapped by ' (' and ')$', so one must not match beginning or - # end of line. Example: 'a|bc|.*d.*' will exclude the symbols 'a' and 'bc', - # as well as any symbol that contains 'd'. - exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' - # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out - # platforms (ab)use it in PIC code, but their linkers get confused if - # the symbol is explicitly referenced. Since portable code cannot - # rely on this symbol name, it's probably fine to never include it in - # preloaded symbol tables. - # Exclude shared library initialization/finalization symbols. - extract_expsyms_cmds= - - case $host_os in - cygwin* | mingw* | pw32* | cegcc*) - # FIXME: the MSVC++ port hasn't been tested in a loooong time - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - if test yes != "$GCC"; then - with_gnu_ld=no - fi - ;; - interix*) - # we just hope/assume this is gcc and not c89 (= MSVC++) - with_gnu_ld=yes - ;; - openbsd* | bitrig*) - with_gnu_ld=no - ;; - linux* | k*bsd*-gnu | gnu*) - link_all_deplibs=no - ;; - esac - - ld_shlibs=yes - - # On some targets, GNU ld is compatible enough with the native linker - # that we're better off using the native interface for both. - lt_use_gnu_ld_interface=no - if test yes = "$with_gnu_ld"; then - case $host_os in - aix*) - # The AIX port of GNU ld has always aspired to compatibility - # with the native linker. However, as the warning in the GNU ld - # block says, versions before 2.19.5* couldn't really create working - # shared libraries, regardless of the interface used. - case `$LD -v 2>&1` in - *\ \(GNU\ Binutils\)\ 2.19.5*) ;; - *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;; - *\ \(GNU\ Binutils\)\ [3-9]*) ;; - *) - lt_use_gnu_ld_interface=yes - ;; - esac - ;; - *) - lt_use_gnu_ld_interface=yes - ;; - esac - fi - - if test yes = "$lt_use_gnu_ld_interface"; then - # If archive_cmds runs LD, not CC, wlarc should be empty - wlarc='$wl' - - # Set some defaults for GNU ld with shared library support. These - # are reset later if shared libraries are not supported. Putting them - # here allows them to be overridden if necessary. - runpath_var=LD_RUN_PATH - hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' - export_dynamic_flag_spec='$wl--export-dynamic' - # ancient GNU ld didn't support --whole-archive et. al. - if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then - whole_archive_flag_spec=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' - else - whole_archive_flag_spec= - fi - supports_anon_versioning=no - case `$LD -v | $SED -e 's/(^)\+)\s\+//' 2>&1` in - *GNU\ gold*) supports_anon_versioning=yes ;; - *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 - *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... - *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... - *\ 2.11.*) ;; # other 2.11 versions - *) supports_anon_versioning=yes ;; - esac - - # See if GNU ld supports shared libraries. - case $host_os in - aix[3-9]*) - # On AIX/PPC, the GNU linker is very broken - if test ia64 != "$host_cpu"; then - ld_shlibs=no - cat <<_LT_EOF 1>&2 - -*** Warning: the GNU linker, at least up to release 2.19, is reported -*** to be unable to reliably create shared libraries on AIX. -*** Therefore, libtool is disabling shared libraries support. If you -*** really care for shared libraries, you may want to install binutils -*** 2.20 or above, or modify your PATH so that a non-GNU linker is found. -*** You will then need to restart the configuration process. - -_LT_EOF - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' - archive_expsym_cmds='' - ;; - m68k) - archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_minus_L=yes - ;; - esac - ;; - - beos*) - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - allow_undefined_flag=unsupported - # Joseph Beckenbach says some releases of gcc - # support --undefined. This deserves some investigation. FIXME - archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' - else - ld_shlibs=no - fi - ;; - - cygwin* | mingw* | pw32* | cegcc*) - # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, - # as there is no search path for DLLs. - hardcode_libdir_flag_spec='-L$libdir' - export_dynamic_flag_spec='$wl--export-all-symbols' - allow_undefined_flag=unsupported - always_export_symbols=no - enable_shared_with_static_runtimes=yes - export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' - exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' - - if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - # If the export-symbols file already is a .def file, use it as - # is; otherwise, prepend EXPORTS... - archive_expsym_cmds='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then - cp $export_symbols $output_objdir/$soname.def; - else - echo EXPORTS > $output_objdir/$soname.def; - cat $export_symbols >> $output_objdir/$soname.def; - fi~ - $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - else - ld_shlibs=no - fi - ;; - - haiku*) - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' - link_all_deplibs=yes - ;; - - os2*) - hardcode_libdir_flag_spec='-L$libdir' - hardcode_minus_L=yes - allow_undefined_flag=unsupported - shrext_cmds=.dll - archive_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ - $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ - $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ - $ECHO EXPORTS >> $output_objdir/$libname.def~ - emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ - $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ - emximp -o $lib $output_objdir/$libname.def' - archive_expsym_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ - $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ - $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ - $ECHO EXPORTS >> $output_objdir/$libname.def~ - prefix_cmds="$SED"~ - if test EXPORTS = "`$SED 1q $export_symbols`"; then - prefix_cmds="$prefix_cmds -e 1d"; - fi~ - prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ - cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ - $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ - emximp -o $lib $output_objdir/$libname.def' - old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' - enable_shared_with_static_runtimes=yes - ;; - - interix[3-9]*) - hardcode_direct=no - hardcode_shlibpath_var=no - hardcode_libdir_flag_spec='$wl-rpath,$libdir' - export_dynamic_flag_spec='$wl-E' - # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. - # Instead, shared libraries are loaded at an image base (0x10000000 by - # default) and relocated if they conflict, which is a slow very memory - # consuming and fragmenting process. To avoid this, we pick a random, - # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link - # time. Moving up from 0x10000000 also allows more sbrk(2) space. - archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - archive_expsym_cmds='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - ;; - - gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) - tmp_diet=no - if test linux-dietlibc = "$host_os"; then - case $cc_basename in - diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) - esac - fi - if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ - && test no = "$tmp_diet" - then - tmp_addflag=' $pic_flag' - tmp_sharedflag='-shared' - case $cc_basename,$host_cpu in - pgcc*) # Portland Group C compiler - whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' - tmp_addflag=' $pic_flag' - ;; - pgf77* | pgf90* | pgf95* | pgfortran*) - # Portland Group f77 and f90 compilers - whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' - tmp_addflag=' $pic_flag -Mnomain' ;; - ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 - tmp_addflag=' -i_dynamic' ;; - efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 - tmp_addflag=' -i_dynamic -nofor_main' ;; - ifc* | ifort*) # Intel Fortran compiler - tmp_addflag=' -nofor_main' ;; - lf95*) # Lahey Fortran 8.1 - whole_archive_flag_spec= - tmp_sharedflag='--shared' ;; - nagfor*) # NAGFOR 5.3 - tmp_sharedflag='-Wl,-shared' ;; - xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) - tmp_sharedflag='-qmkshrobj' - tmp_addflag= ;; - nvcc*) # Cuda Compiler Driver 2.2 - whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' - compiler_needs_object=yes - ;; - esac - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) # Sun C 5.9 - whole_archive_flag_spec='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' - compiler_needs_object=yes - tmp_sharedflag='-G' ;; - *Sun\ F*) # Sun Fortran 8.3 - tmp_sharedflag='-G' ;; - esac - archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' - - if test yes = "$supports_anon_versioning"; then - archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - echo "local: *; };" >> $output_objdir/$libname.ver~ - $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' - fi - - case $cc_basename in - tcc*) - export_dynamic_flag_spec='-rdynamic' - ;; - xlf* | bgf* | bgxlf* | mpixlf*) - # IBM XL Fortran 10.1 on PPC cannot create shared libs itself - whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' - hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' - archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' - if test yes = "$supports_anon_versioning"; then - archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - echo "local: *; };" >> $output_objdir/$libname.ver~ - $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' - fi - ;; - esac - else - ld_shlibs=no - fi - ;; - - netbsd* | netbsdelf*-gnu) - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' - wlarc= - else - archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' - fi - ;; - - solaris*) - if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then - ld_shlibs=no - cat <<_LT_EOF 1>&2 - -*** Warning: The releases 2.8.* of the GNU linker cannot reliably -*** create shared libraries on Solaris systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.9.1 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -_LT_EOF - elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' - else - ld_shlibs=no - fi - ;; - - sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) - case `$LD -v 2>&1` in - *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) - ld_shlibs=no - cat <<_LT_EOF 1>&2 - -*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 cannot -*** reliably create shared libraries on SCO systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.16.91.0.3 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -_LT_EOF - ;; - *) - # For security reasons, it is highly recommended that you always - # use absolute paths for naming shared libraries, and exclude the - # DT_RUNPATH tag from executables and libraries. But doing so - # requires that you compile everything twice, which is a pain. - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' - else - ld_shlibs=no - fi - ;; - esac - ;; - - sunos4*) - archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' - wlarc= - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - - *) - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' - else - ld_shlibs=no - fi - ;; - esac - - if test no = "$ld_shlibs"; then - runpath_var= - hardcode_libdir_flag_spec= - export_dynamic_flag_spec= - whole_archive_flag_spec= - fi - else - # PORTME fill in a description of your system's linker (not GNU ld) - case $host_os in - aix3*) - allow_undefined_flag=unsupported - always_export_symbols=yes - archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' - # Note: this linker hardcodes the directories in LIBPATH if there - # are no directories specified by -L. - hardcode_minus_L=yes - if test yes = "$GCC" && test -z "$lt_prog_compiler_static"; then - # Neither direct hardcoding nor static linking is supported with a - # broken collect2. - hardcode_direct=unsupported - fi - ;; - - aix[4-9]*) - if test ia64 = "$host_cpu"; then - # On IA64, the linker does run time linking by default, so we don't - # have to do anything special. - aix_use_runtimelinking=no - exp_sym_flag='-Bexport' - no_entry_flag= - else - # If we're using GNU nm, then we don't want the "-C" option. - # -C means demangle to GNU nm, but means don't demangle to AIX nm. - # Without the "-l" option, or with the "-B" option, AIX nm treats - # weak defined symbols like other global defined symbols, whereas - # GNU nm marks them as "W". - # While the 'weak' keyword is ignored in the Export File, we need - # it in the Import File for the 'aix-soname' feature, so we have - # to replace the "-B" option with "-P" for AIX nm. - if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then - export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' - else - export_symbols_cmds='`func_echo_all $NM | $SED -e '\''s/B\([^B]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && (substr(\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' - fi - aix_use_runtimelinking=no - - # Test if we are trying to use run time linking or normal - # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # have runtime linking enabled, and use it for executables. - # For shared libraries, we enable/disable runtime linking - # depending on the kind of the shared library created - - # when "with_aix_soname,aix_use_runtimelinking" is: - # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables - # "aix,yes" lib.so shared, rtl:yes, for executables - # lib.a static archive - # "both,no" lib.so.V(shr.o) shared, rtl:yes - # lib.a(lib.so.V) shared, rtl:no, for executables - # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables - # lib.a(lib.so.V) shared, rtl:no - # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables - # lib.a static archive - case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) - for ld_flag in $LDFLAGS; do - if (test x-brtl = "x$ld_flag" || test x-Wl,-brtl = "x$ld_flag"); then - aix_use_runtimelinking=yes - break - fi - done - if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then - # With aix-soname=svr4, we create the lib.so.V shared archives only, - # so we don't have lib.a shared libs to link our executables. - # We have to force runtime linking in this case. - aix_use_runtimelinking=yes - LDFLAGS="$LDFLAGS -Wl,-brtl" - fi - ;; - esac - - exp_sym_flag='-bexport' - no_entry_flag='-bnoentry' - fi - - # When large executables or shared objects are built, AIX ld can - # have problems creating the table of contents. If linking a library - # or program results in "error TOC overflow" add -mminimal-toc to - # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not - # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. - - archive_cmds='' - hardcode_direct=yes - hardcode_direct_absolute=yes - hardcode_libdir_separator=':' - link_all_deplibs=yes - file_list_spec='$wl-f,' - case $with_aix_soname,$aix_use_runtimelinking in - aix,*) ;; # traditional, no import file - svr4,* | *,yes) # use import file - # The Import File defines what to hardcode. - hardcode_direct=no - hardcode_direct_absolute=no - ;; - esac - - if test yes = "$GCC"; then - case $host_os in aix4.[012]|aix4.[012].*) - # We only want to do this on AIX 4.2 and lower, the check - # below for broken collect2 doesn't work under 4.3+ - collect2name=`$CC -print-prog-name=collect2` - if test -f "$collect2name" && - strings "$collect2name" | $GREP resolve_lib_name >/dev/null - then - # We have reworked collect2 - : - else - # We have old collect2 - hardcode_direct=unsupported - # It fails to find uninstalled libraries when the uninstalled - # path is not listed in the libpath. Setting hardcode_minus_L - # to unsupported forces relinking - hardcode_minus_L=yes - hardcode_libdir_flag_spec='-L$libdir' - hardcode_libdir_separator= - fi - ;; - esac - shared_flag='-shared' - if test yes = "$aix_use_runtimelinking"; then - shared_flag="$shared_flag "'$wl-G' - fi - # Need to ensure runtime linking is disabled for the traditional - # shared library, or the linker may eventually find shared libraries - # /with/ Import File - we do not want to mix them. - shared_flag_aix='-shared' - shared_flag_svr4='-shared $wl-G' - else - # not using gcc - if test ia64 = "$host_cpu"; then - # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release - # chokes on -Wl,-G. The following line is correct: - shared_flag='-G' - else - if test yes = "$aix_use_runtimelinking"; then - shared_flag='$wl-G' - else - shared_flag='$wl-bM:SRE' - fi - shared_flag_aix='$wl-bM:SRE' - shared_flag_svr4='$wl-G' - fi - fi - - export_dynamic_flag_spec='$wl-bexpall' - # It seems that -bexpall does not export symbols beginning with - # underscore (_), so it is better to generate a list of symbols to export. - always_export_symbols=yes - if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then - # Warning - without using the other runtime loading flags (-brtl), - # -berok will link without error, but may produce a broken library. - allow_undefined_flag='-berok' - # Determine the default libpath from the value encoded in an - # empty executable. - if test set = "${lt_cv_aix_libpath+set}"; then - aix_libpath=$lt_cv_aix_libpath -else - if ${lt_cv_aix_libpath_+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - - lt_aix_libpath_sed=' - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\([^ ]*\) *$/\1/ - p - } - }' - lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` - # Check for a 64-bit object if we didn't find anything. - if test -z "$lt_cv_aix_libpath_"; then - lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` - fi -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - if test -z "$lt_cv_aix_libpath_"; then - lt_cv_aix_libpath_=/usr/lib:/lib - fi - -fi - - aix_libpath=$lt_cv_aix_libpath_ -fi - - hardcode_libdir_flag_spec='$wl-blibpath:$libdir:'"$aix_libpath" - archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag - else - if test ia64 = "$host_cpu"; then - hardcode_libdir_flag_spec='$wl-R $libdir:/usr/lib:/lib' - allow_undefined_flag="-z nodefs" - archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" - else - # Determine the default libpath from the value encoded in an - # empty executable. - if test set = "${lt_cv_aix_libpath+set}"; then - aix_libpath=$lt_cv_aix_libpath -else - if ${lt_cv_aix_libpath_+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - - lt_aix_libpath_sed=' - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\([^ ]*\) *$/\1/ - p - } - }' - lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` - # Check for a 64-bit object if we didn't find anything. - if test -z "$lt_cv_aix_libpath_"; then - lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` - fi -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - if test -z "$lt_cv_aix_libpath_"; then - lt_cv_aix_libpath_=/usr/lib:/lib - fi - -fi - - aix_libpath=$lt_cv_aix_libpath_ -fi - - hardcode_libdir_flag_spec='$wl-blibpath:$libdir:'"$aix_libpath" - # Warning - without using the other run time loading flags, - # -berok will link without error, but may produce a broken library. - no_undefined_flag=' $wl-bernotok' - allow_undefined_flag=' $wl-berok' - if test yes = "$with_gnu_ld"; then - # We only use this code for GNU lds that support --whole-archive. - whole_archive_flag_spec='$wl--whole-archive$convenience $wl--no-whole-archive' - else - # Exported symbols can be pulled into shared objects from archives - whole_archive_flag_spec='$convenience' - fi - archive_cmds_need_lc=yes - archive_expsym_cmds='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' - # -brtl affects multiple linker settings, -berok does not and is overridden later - compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([, ]\\)%-berok\\1%g"`' - if test svr4 != "$with_aix_soname"; then - # This is similar to how AIX traditionally builds its shared libraries. - archive_expsym_cmds="$archive_expsym_cmds"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' - fi - if test aix != "$with_aix_soname"; then - archive_expsym_cmds="$archive_expsym_cmds"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' - else - # used by -dlpreopen to get the symbols - archive_expsym_cmds="$archive_expsym_cmds"'~$MV $output_objdir/$realname.d/$soname $output_objdir' - fi - archive_expsym_cmds="$archive_expsym_cmds"'~$RM -r $output_objdir/$realname.d' - fi - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' - archive_expsym_cmds='' - ;; - m68k) - archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_minus_L=yes - ;; - esac - ;; - - bsdi[45]*) - export_dynamic_flag_spec=-rdynamic - ;; - - cygwin* | mingw* | pw32* | cegcc*) - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - # hardcode_libdir_flag_spec is actually meaningless, as there is - # no search path for DLLs. - case $cc_basename in - cl*) - # Native MSVC - hardcode_libdir_flag_spec=' ' - allow_undefined_flag=unsupported - always_export_symbols=yes - file_list_spec='@' - # Tell ltmain to make .lib files, not .a files. - libext=lib - # Tell ltmain to make .dll files, not .so files. - shrext_cmds=.dll - # FIXME: Setting linknames here is a bad hack. - archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' - archive_expsym_cmds='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then - cp "$export_symbols" "$output_objdir/$soname.def"; - echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; - else - $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; - fi~ - $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ - linknames=' - # The linker will not automatically build a static lib if we build a DLL. - # _LT_TAGVAR(old_archive_from_new_cmds, )='true' - enable_shared_with_static_runtimes=yes - exclude_expsyms='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' - export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' - # Don't use ranlib - old_postinstall_cmds='chmod 644 $oldlib' - postlink_cmds='lt_outputfile="@OUTPUT@"~ - lt_tool_outputfile="@TOOL_OUTPUT@"~ - case $lt_outputfile in - *.exe|*.EXE) ;; - *) - lt_outputfile=$lt_outputfile.exe - lt_tool_outputfile=$lt_tool_outputfile.exe - ;; - esac~ - if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then - $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; - $RM "$lt_outputfile.manifest"; - fi' - ;; - *) - # Assume MSVC wrapper - hardcode_libdir_flag_spec=' ' - allow_undefined_flag=unsupported - # Tell ltmain to make .lib files, not .a files. - libext=lib - # Tell ltmain to make .dll files, not .so files. - shrext_cmds=.dll - # FIXME: Setting linknames here is a bad hack. - archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' - # The linker will automatically build a .lib file if we build a DLL. - old_archive_from_new_cmds='true' - # FIXME: Should let the user specify the lib program. - old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' - enable_shared_with_static_runtimes=yes - ;; - esac - ;; - - darwin* | rhapsody*) - - - archive_cmds_need_lc=no - hardcode_direct=no - hardcode_automatic=yes - hardcode_shlibpath_var=unsupported - if test yes = "$lt_cv_ld_force_load"; then - whole_archive_flag_spec='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' - - else - whole_archive_flag_spec='' - fi - link_all_deplibs=yes - allow_undefined_flag=$_lt_dar_allow_undefined - case $cc_basename in - ifort*|nagfor*) _lt_dar_can_shared=yes ;; - *) _lt_dar_can_shared=$GCC ;; - esac - if test yes = "$_lt_dar_can_shared"; then - output_verbose_link_cmd=func_echo_all - archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil" - module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil" - archive_expsym_cmds="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil" - module_expsym_cmds="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil" - - else - ld_shlibs=no - fi - - ;; - - dgux*) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_shlibpath_var=no - ;; - - # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor - # support. Future versions do this automatically, but an explicit c++rt0.o - # does not break anything, and helps significantly (at the cost of a little - # extra space). - freebsd2.2*) - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' - hardcode_libdir_flag_spec='-R$libdir' - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - - # Unfortunately, older versions of FreeBSD 2 do not have this feature. - freebsd2.*) - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=yes - hardcode_minus_L=yes - hardcode_shlibpath_var=no - ;; - - # FreeBSD 3 and greater uses gcc -shared to do shared libraries. - freebsd* | dragonfly*) - archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - hardcode_libdir_flag_spec='-R$libdir' - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - - hpux9*) - if test yes = "$GCC"; then - archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' - else - archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' - fi - hardcode_libdir_flag_spec='$wl+b $wl$libdir' - hardcode_libdir_separator=: - hardcode_direct=yes - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L=yes - export_dynamic_flag_spec='$wl-E' - ;; - - hpux10*) - if test yes,no = "$GCC,$with_gnu_ld"; then - archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' - fi - if test no = "$with_gnu_ld"; then - hardcode_libdir_flag_spec='$wl+b $wl$libdir' - hardcode_libdir_separator=: - hardcode_direct=yes - hardcode_direct_absolute=yes - export_dynamic_flag_spec='$wl-E' - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L=yes - fi - ;; - - hpux11*) - if test yes,no = "$GCC,$with_gnu_ld"; then - case $host_cpu in - hppa*64*) - archive_cmds='$CC -shared $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - else - case $host_cpu in - hppa*64*) - archive_cmds='$CC -b $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - archive_cmds='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - - # Older versions of the 11.00 compiler do not understand -b yet - # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 -$as_echo_n "checking if $CC understands -b... " >&6; } -if ${lt_cv_prog_compiler__b+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler__b=no - save_LDFLAGS=$LDFLAGS - LDFLAGS="$LDFLAGS -b" - echo "$lt_simple_link_test_code" > conftest.$ac_ext - if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then - # The linker can only warn and ignore the option if not recognized - # So say no if there are warnings - if test -s conftest.err; then - # Append any errors to the config.log. - cat conftest.err 1>&5 - $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if diff conftest.exp conftest.er2 >/dev/null; then - lt_cv_prog_compiler__b=yes - fi - else - lt_cv_prog_compiler__b=yes - fi - fi - $RM -r conftest* - LDFLAGS=$save_LDFLAGS - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 -$as_echo "$lt_cv_prog_compiler__b" >&6; } - -if test yes = "$lt_cv_prog_compiler__b"; then - archive_cmds='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' -else - archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' -fi - - ;; - esac - fi - if test no = "$with_gnu_ld"; then - hardcode_libdir_flag_spec='$wl+b $wl$libdir' - hardcode_libdir_separator=: - - case $host_cpu in - hppa*64*|ia64*) - hardcode_direct=no - hardcode_shlibpath_var=no - ;; - *) - hardcode_direct=yes - hardcode_direct_absolute=yes - export_dynamic_flag_spec='$wl-E' - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L=yes - ;; - esac - fi - ;; - - irix5* | irix6* | nonstopux*) - if test yes = "$GCC"; then - archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' - # Try to use the -exported_symbol ld option, if it does not - # work, assume that -exports_file does not work either and - # implicitly export all symbols. - # This should be the same for all languages, so no per-tag cache variable. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 -$as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; } -if ${lt_cv_irix_exported_symbol+:} false; then : - $as_echo_n "(cached) " >&6 -else - save_LDFLAGS=$LDFLAGS - LDFLAGS="$LDFLAGS -shared $wl-exported_symbol ${wl}foo $wl-update_registry $wl/dev/null" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int foo (void) { return 0; } -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - lt_cv_irix_exported_symbol=yes -else - lt_cv_irix_exported_symbol=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - LDFLAGS=$save_LDFLAGS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 -$as_echo "$lt_cv_irix_exported_symbol" >&6; } - if test yes = "$lt_cv_irix_exported_symbol"; then - archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib' - fi - link_all_deplibs=no - else - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib' - fi - archive_cmds_need_lc='no' - hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' - hardcode_libdir_separator=: - inherit_rpath=yes - link_all_deplibs=yes - ;; - - linux*) - case $cc_basename in - tcc*) - # Fabrice Bellard et al's Tiny C Compiler - ld_shlibs=yes - archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - ;; - - netbsd* | netbsdelf*-gnu) - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out - else - archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF - fi - hardcode_libdir_flag_spec='-R$libdir' - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - - newsos6) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=yes - hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' - hardcode_libdir_separator=: - hardcode_shlibpath_var=no - ;; - - *nto* | *qnx*) - ;; - - openbsd* | bitrig*) - if test -f /usr/libexec/ld.so; then - hardcode_direct=yes - hardcode_shlibpath_var=no - hardcode_direct_absolute=yes - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then - archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags $wl-retain-symbols-file,$export_symbols' - hardcode_libdir_flag_spec='$wl-rpath,$libdir' - export_dynamic_flag_spec='$wl-E' - else - archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - hardcode_libdir_flag_spec='$wl-rpath,$libdir' - fi - else - ld_shlibs=no - fi - ;; - - os2*) - hardcode_libdir_flag_spec='-L$libdir' - hardcode_minus_L=yes - allow_undefined_flag=unsupported - shrext_cmds=.dll - archive_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ - $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ - $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ - $ECHO EXPORTS >> $output_objdir/$libname.def~ - emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ - $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ - emximp -o $lib $output_objdir/$libname.def' - archive_expsym_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ - $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ - $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ - $ECHO EXPORTS >> $output_objdir/$libname.def~ - prefix_cmds="$SED"~ - if test EXPORTS = "`$SED 1q $export_symbols`"; then - prefix_cmds="$prefix_cmds -e 1d"; - fi~ - prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ - cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ - $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ - emximp -o $lib $output_objdir/$libname.def' - old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' - enable_shared_with_static_runtimes=yes - ;; - - osf3*) - if test yes = "$GCC"; then - allow_undefined_flag=' $wl-expect_unresolved $wl\*' - archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' - else - allow_undefined_flag=' -expect_unresolved \*' - archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' - fi - archive_cmds_need_lc='no' - hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' - hardcode_libdir_separator=: - ;; - - osf4* | osf5*) # as osf3* with the addition of -msym flag - if test yes = "$GCC"; then - allow_undefined_flag=' $wl-expect_unresolved $wl\*' - archive_cmds='$CC -shared$allow_undefined_flag $pic_flag $libobjs $deplibs $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' - hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' - else - allow_undefined_flag=' -expect_unresolved \*' - archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' - archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ - $CC -shared$allow_undefined_flag $wl-input $wl$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~$RM $lib.exp' - - # Both c and cxx compiler support -rpath directly - hardcode_libdir_flag_spec='-rpath $libdir' - fi - archive_cmds_need_lc='no' - hardcode_libdir_separator=: - ;; - - solaris*) - no_undefined_flag=' -z defs' - if test yes = "$GCC"; then - wlarc='$wl' - archive_cmds='$CC -shared $pic_flag $wl-z ${wl}text $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -shared $pic_flag $wl-z ${wl}text $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' - else - case `$CC -V 2>&1` in - *"Compilers 5.0"*) - wlarc='' - archive_cmds='$LD -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $linker_flags' - archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $LD -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' - ;; - *) - wlarc='$wl' - archive_cmds='$CC -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' - ;; - esac - fi - hardcode_libdir_flag_spec='-R$libdir' - hardcode_shlibpath_var=no - case $host_os in - solaris2.[0-5] | solaris2.[0-5].*) ;; - *) - # The compiler driver will combine and reorder linker options, - # but understands '-z linker_flag'. GCC discards it without '$wl', - # but is careful enough not to reorder. - # Supported since Solaris 2.6 (maybe 2.5.1?) - if test yes = "$GCC"; then - whole_archive_flag_spec='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' - else - whole_archive_flag_spec='-z allextract$convenience -z defaultextract' - fi - ;; - esac - link_all_deplibs=yes - ;; - - sunos4*) - if test sequent = "$host_vendor"; then - # Use $CC to link under sequent, because it throws in some extra .o - # files that make .init and .fini sections work. - archive_cmds='$CC -G $wl-h $soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' - fi - hardcode_libdir_flag_spec='-L$libdir' - hardcode_direct=yes - hardcode_minus_L=yes - hardcode_shlibpath_var=no - ;; - - sysv4) - case $host_vendor in - sni) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=yes # is this really true??? - ;; - siemens) - ## LD is ld it makes a PLAMLIB - ## CC just makes a GrossModule. - archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' - reload_cmds='$CC -r -o $output$reload_objs' - hardcode_direct=no - ;; - motorola) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=no #Motorola manual says yes, but my tests say they lie - ;; - esac - runpath_var='LD_RUN_PATH' - hardcode_shlibpath_var=no - ;; - - sysv4.3*) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_shlibpath_var=no - export_dynamic_flag_spec='-Bexport' - ;; - - sysv4*MP*) - if test -d /usr/nec; then - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_shlibpath_var=no - runpath_var=LD_RUN_PATH - hardcode_runpath_var=yes - ld_shlibs=yes - fi - ;; - - sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) - no_undefined_flag='$wl-z,text' - archive_cmds_need_lc=no - hardcode_shlibpath_var=no - runpath_var='LD_RUN_PATH' - - if test yes = "$GCC"; then - archive_cmds='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - ;; - - sysv5* | sco3.2v5* | sco5v6*) - # Note: We CANNOT use -z defs as we might desire, because we do not - # link with -lc, and that would cause any symbols used from libc to - # always be unresolved, which means just about no library would - # ever link correctly. If we're not using GNU ld we use -z text - # though, which does catch some bad symbols but isn't as heavy-handed - # as -z defs. - no_undefined_flag='$wl-z,text' - allow_undefined_flag='$wl-z,nodefs' - archive_cmds_need_lc=no - hardcode_shlibpath_var=no - hardcode_libdir_flag_spec='$wl-R,$libdir' - hardcode_libdir_separator=':' - link_all_deplibs=yes - export_dynamic_flag_spec='$wl-Bexport' - runpath_var='LD_RUN_PATH' - - if test yes = "$GCC"; then - archive_cmds='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - ;; - - uts4*) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_shlibpath_var=no - ;; - - *) - ld_shlibs=no - ;; - esac - - if test sni = "$host_vendor"; then - case $host in - sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) - export_dynamic_flag_spec='$wl-Blargedynsym' - ;; - esac - fi - fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 -$as_echo "$ld_shlibs" >&6; } -test no = "$ld_shlibs" && can_build_shared=no - -with_gnu_ld=$with_gnu_ld - - - - - - - - - - - - - - - -# -# Do we need to explicitly link libc? -# -case "x$archive_cmds_need_lc" in -x|xyes) - # Assume -lc should be added - archive_cmds_need_lc=yes - - if test yes,yes = "$GCC,$enable_shared"; then - case $archive_cmds in - *'~'*) - # FIXME: we may have to deal with multi-command sequences. - ;; - '$CC '*) - # Test whether the compiler implicitly links with -lc since on some - # systems, -lgcc has to come before -lc. If gcc already passes -lc - # to ld, don't add -lc before -lgcc. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 -$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } -if ${lt_cv_archive_cmds_need_lc+:} false; then : - $as_echo_n "(cached) " >&6 -else - $RM conftest* - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } 2>conftest.err; then - soname=conftest - lib=conftest - libobjs=conftest.$ac_objext - deplibs= - wl=$lt_prog_compiler_wl - pic_flag=$lt_prog_compiler_pic - compiler_flags=-v - linker_flags=-v - verstring= - output_objdir=. - libname=conftest - lt_save_allow_undefined_flag=$allow_undefined_flag - allow_undefined_flag= - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 - (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - then - lt_cv_archive_cmds_need_lc=no - else - lt_cv_archive_cmds_need_lc=yes - fi - allow_undefined_flag=$lt_save_allow_undefined_flag - else - cat conftest.err 1>&5 - fi - $RM conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 -$as_echo "$lt_cv_archive_cmds_need_lc" >&6; } - archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc - ;; - esac - fi - ;; -esac - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 -$as_echo_n "checking dynamic linker characteristics... " >&6; } - -if test yes = "$GCC"; then - case $host_os in - darwin*) lt_awk_arg='/^libraries:/,/LR/' ;; - *) lt_awk_arg='/^libraries:/' ;; - esac - case $host_os in - mingw* | cegcc*) lt_sed_strip_eq='s|=\([A-Za-z]:\)|\1|g' ;; - *) lt_sed_strip_eq='s|=/|/|g' ;; - esac - lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` - case $lt_search_path_spec in - *\;*) - # if the path contains ";" then we assume it to be the separator - # otherwise default to the standard path separator (i.e. ":") - it is - # assumed that no part of a normal pathname contains ";" but that should - # okay in the real world where ";" in dirpaths is itself problematic. - lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` - ;; - *) - lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` - ;; - esac - # Ok, now we have the path, separated by spaces, we can step through it - # and add multilib dir if necessary... - lt_tmp_lt_search_path_spec= - lt_multi_os_dir=/`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` - # ...but if some path component already ends with the multilib dir we assume - # that all is fine and trust -print-search-dirs as is (GCC 4.2? or newer). - case "$lt_multi_os_dir; $lt_search_path_spec " in - "/; "* | "/.; "* | "/./; "* | *"$lt_multi_os_dir "* | *"$lt_multi_os_dir/ "*) - lt_multi_os_dir= - ;; - esac - for lt_sys_path in $lt_search_path_spec; do - if test -d "$lt_sys_path$lt_multi_os_dir"; then - lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path$lt_multi_os_dir" - elif test -n "$lt_multi_os_dir"; then - test -d "$lt_sys_path" && \ - lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" - fi - done - lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' -BEGIN {RS = " "; FS = "/|\n";} { - lt_foo = ""; - lt_count = 0; - for (lt_i = NF; lt_i > 0; lt_i--) { - if ($lt_i != "" && $lt_i != ".") { - if ($lt_i == "..") { - lt_count++; - } else { - if (lt_count == 0) { - lt_foo = "/" $lt_i lt_foo; - } else { - lt_count--; - } - } - } - } - if (lt_foo != "") { lt_freq[lt_foo]++; } - if (lt_freq[lt_foo] == 1) { print lt_foo; } -}'` - # AWK program above erroneously prepends '/' to C:/dos/paths - # for these hosts. - case $host_os in - mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ - $SED 's|/\([A-Za-z]:\)|\1|g'` ;; - esac - sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` -else - sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" -fi -library_names_spec= -libname_spec='lib$name' -soname_spec= -shrext_cmds=.so -postinstall_cmds= -postuninstall_cmds= -finish_cmds= -finish_eval= -shlibpath_var= -shlibpath_overrides_runpath=unknown -version_type=none -dynamic_linker="$host_os ld.so" -sys_lib_dlsearch_path_spec="/lib /usr/lib" -need_lib_prefix=unknown -hardcode_into_libs=no - -# when you set need_version to no, make sure it does not cause -set_version -# flags to be left without arguments -need_version=unknown - - - -case $host_os in -aix3*) - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='$libname$release$shared_ext$versuffix $libname.a' - shlibpath_var=LIBPATH - - # AIX 3 has no versioning support, so we append a major version to the name. - soname_spec='$libname$release$shared_ext$major' - ;; - -aix[4-9]*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - hardcode_into_libs=yes - if test ia64 = "$host_cpu"; then - # AIX 5 supports IA64 - library_names_spec='$libname$release$shared_ext$major $libname$release$shared_ext$versuffix $libname$shared_ext' - shlibpath_var=LD_LIBRARY_PATH - else - # With GCC up to 2.95.x, collect2 would create an import file - # for dependence libraries. The import file would start with - # the line '#! .'. This would cause the generated library to - # depend on '.', always an invalid library. This was fixed in - # development snapshots of GCC prior to 3.0. - case $host_os in - aix4 | aix4.[01] | aix4.[01].*) - if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' - echo ' yes ' - echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then - : - else - can_build_shared=no - fi - ;; - esac - # Using Import Files as archive members, it is possible to support - # filename-based versioning of shared library archives on AIX. While - # this would work for both with and without runtime linking, it will - # prevent static linking of such archives. So we do filename-based - # shared library versioning with .so extension only, which is used - # when both runtime linking and shared linking is enabled. - # Unfortunately, runtime linking may impact performance, so we do - # not want this to be the default eventually. Also, we use the - # versioned .so libs for executables only if there is the -brtl - # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only. - # To allow for filename-based versioning support, we need to create - # libNAME.so.V as an archive file, containing: - # *) an Import File, referring to the versioned filename of the - # archive as well as the shared archive member, telling the - # bitwidth (32 or 64) of that shared object, and providing the - # list of exported symbols of that shared object, eventually - # decorated with the 'weak' keyword - # *) the shared object with the F_LOADONLY flag set, to really avoid - # it being seen by the linker. - # At run time we better use the real file rather than another symlink, - # but for link time we create the symlink libNAME.so -> libNAME.so.V - - case $with_aix_soname,$aix_use_runtimelinking in - # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct - # soname into executable. Probably we can add versioning support to - # collect2, so additional links can be useful in future. - aix,yes) # traditional libtool - dynamic_linker='AIX unversionable lib.so' - # If using run time linking (on AIX 4.2 or later) use lib.so - # instead of lib.a to let people know that these are not - # typical AIX shared libraries. - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - ;; - aix,no) # traditional AIX only - dynamic_linker='AIX lib.a(lib.so.V)' - # We preserve .a as extension for shared libraries through AIX4.2 - # and later when we are not doing run time linking. - library_names_spec='$libname$release.a $libname.a' - soname_spec='$libname$release$shared_ext$major' - ;; - svr4,*) # full svr4 only - dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o)" - library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' - # We do not specify a path in Import Files, so LIBPATH fires. - shlibpath_overrides_runpath=yes - ;; - *,yes) # both, prefer svr4 - dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o), lib.a(lib.so.V)" - library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' - # unpreferred sharedlib libNAME.a needs extra handling - postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"' - postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"' - # We do not specify a path in Import Files, so LIBPATH fires. - shlibpath_overrides_runpath=yes - ;; - *,no) # both, prefer aix - dynamic_linker="AIX lib.a(lib.so.V), lib.so.V($shared_archive_member_spec.o)" - library_names_spec='$libname$release.a $libname.a' - soname_spec='$libname$release$shared_ext$major' - # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling - postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)' - postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"' - ;; - esac - shlibpath_var=LIBPATH - fi - ;; - -amigaos*) - case $host_cpu in - powerpc) - # Since July 2007 AmigaOS4 officially supports .so libraries. - # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - ;; - m68k) - library_names_spec='$libname.ixlibrary $libname.a' - # Create ${libname}_ixlibrary.a entries in /sys/libs. - finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' - ;; - esac - ;; - -beos*) - library_names_spec='$libname$shared_ext' - dynamic_linker="$host_os ld.so" - shlibpath_var=LIBRARY_PATH - ;; - -bsdi[45]*) - version_type=linux # correct to gnu/linux during the next big refactor - need_version=no - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" - sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" - # the default ld.so.conf also contains /usr/contrib/lib and - # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow - # libtool to hard-code these into programs - ;; - -cygwin* | mingw* | pw32* | cegcc*) - version_type=windows - shrext_cmds=.dll - need_version=no - need_lib_prefix=no - - case $GCC,$cc_basename in - yes,*) - # gcc - library_names_spec='$libname.dll.a' - # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \$file`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname~ - chmod a+x \$dldir/$dlname~ - if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then - eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; - fi' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $RM \$dlpath' - shlibpath_overrides_runpath=yes - - case $host_os in - cygwin*) - # Cygwin DLLs use 'cyg' prefix rather than 'lib' - soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' - - sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api" - ;; - mingw* | cegcc*) - # MinGW DLLs use traditional 'lib' prefix - soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' - ;; - pw32*) - # pw32 DLLs use 'pw' prefix rather than 'lib' - library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' - ;; - esac - dynamic_linker='Win32 ld.exe' - ;; - - *,cl*) - # Native MSVC - libname_spec='$name' - soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' - library_names_spec='$libname.dll.lib' - - case $build_os in - mingw*) - sys_lib_search_path_spec= - lt_save_ifs=$IFS - IFS=';' - for lt_path in $LIB - do - IFS=$lt_save_ifs - # Let DOS variable expansion print the short 8.3 style file name. - lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` - sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" - done - IFS=$lt_save_ifs - # Convert to MSYS style. - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` - ;; - cygwin*) - # Convert to unix form, then to dos form, then back to unix form - # but this time dos style (no spaces!) so that the unix form looks - # like /cygdrive/c/PROGRA~1:/cygdr... - sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` - sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` - sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - ;; - *) - sys_lib_search_path_spec=$LIB - if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then - # It is most probably a Windows format PATH. - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` - else - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi - # FIXME: find the short name or the path components, as spaces are - # common. (e.g. "Program Files" -> "PROGRA~1") - ;; - esac - - # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \$file`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $RM \$dlpath' - shlibpath_overrides_runpath=yes - dynamic_linker='Win32 link.exe' - ;; - - *) - # Assume MSVC wrapper - library_names_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext $libname.lib' - dynamic_linker='Win32 ld.exe' - ;; - esac - # FIXME: first we should search . and the directory the executable is in - shlibpath_var=PATH - ;; - -darwin* | rhapsody*) - dynamic_linker="$host_os dyld" - version_type=darwin - need_lib_prefix=no - need_version=no - library_names_spec='$libname$release$major$shared_ext $libname$shared_ext' - soname_spec='$libname$release$major$shared_ext' - shlibpath_overrides_runpath=yes - shlibpath_var=DYLD_LIBRARY_PATH - shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' - - sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" - sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' - ;; - -dgux*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -freebsd* | dragonfly*) - # DragonFly does not have aout. When/if they implement a new - # versioning mechanism, adjust this. - if test -x /usr/bin/objformat; then - objformat=`/usr/bin/objformat` - else - case $host_os in - freebsd[23].*) objformat=aout ;; - *) objformat=elf ;; - esac - fi - version_type=freebsd-$objformat - case $version_type in - freebsd-elf*) - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - need_version=no - need_lib_prefix=no - ;; - freebsd-*) - library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' - need_version=yes - ;; - esac - shlibpath_var=LD_LIBRARY_PATH - case $host_os in - freebsd2.*) - shlibpath_overrides_runpath=yes - ;; - freebsd3.[01]* | freebsdelf3.[01]*) - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ - freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - *) # from 4.6 on, and DragonFly - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - esac - ;; - -haiku*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - dynamic_linker="$host_os runtime_loader" - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - shlibpath_var=LIBRARY_PATH - shlibpath_overrides_runpath=no - sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' - hardcode_into_libs=yes - ;; - -hpux9* | hpux10* | hpux11*) - # Give a soname corresponding to the major version so that dld.sl refuses to - # link against other versions. - version_type=sunos - need_lib_prefix=no - need_version=no - case $host_cpu in - ia64*) - shrext_cmds='.so' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.so" - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - if test 32 = "$HPUX_IA64_MODE"; then - sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" - sys_lib_dlsearch_path_spec=/usr/lib/hpux32 - else - sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" - sys_lib_dlsearch_path_spec=/usr/lib/hpux64 - fi - ;; - hppa*64*) - shrext_cmds='.sl' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.sl" - shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - *) - shrext_cmds='.sl' - dynamic_linker="$host_os dld.sl" - shlibpath_var=SHLIB_PATH - shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - ;; - esac - # HP-UX runs *really* slowly unless shared libraries are mode 555, ... - postinstall_cmds='chmod 555 $lib' - # or fails outright, so override atomically: - install_override_mode=555 - ;; - -interix[3-9]*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -irix5* | irix6* | nonstopux*) - case $host_os in - nonstopux*) version_type=nonstopux ;; - *) - if test yes = "$lt_cv_prog_gnu_ld"; then - version_type=linux # correct to gnu/linux during the next big refactor - else - version_type=irix - fi ;; - esac - need_lib_prefix=no - need_version=no - soname_spec='$libname$release$shared_ext$major' - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext' - case $host_os in - irix5* | nonstopux*) - libsuff= shlibsuff= - ;; - *) - case $LD in # libtool.m4 will add one of these switches to LD - *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") - libsuff= shlibsuff= libmagic=32-bit;; - *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") - libsuff=32 shlibsuff=N32 libmagic=N32;; - *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") - libsuff=64 shlibsuff=64 libmagic=64-bit;; - *) libsuff= shlibsuff= libmagic=never-match;; - esac - ;; - esac - shlibpath_var=LD_LIBRARY${shlibsuff}_PATH - shlibpath_overrides_runpath=no - sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff" - sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff" - hardcode_into_libs=yes - ;; - -# No shared lib support for Linux oldld, aout, or coff. -linux*oldld* | linux*aout* | linux*coff*) - dynamic_linker=no - ;; - -linux*android*) - version_type=none # Android doesn't support versioned libraries. - need_lib_prefix=no - need_version=no - library_names_spec='$libname$release$shared_ext' - soname_spec='$libname$release$shared_ext' - finish_cmds= - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - - # This implies no fast_install, which is unacceptable. - # Some rework will be needed to allow for fast_install - # before this can be enabled. - hardcode_into_libs=yes - - dynamic_linker='Android linker' - # Don't embed -rpath directories since the linker doesn't support them. - hardcode_libdir_flag_spec='-L$libdir' - ;; - -# This must be glibc/ELF. -linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - - # Some binutils ld are patched to set DT_RUNPATH - if ${lt_cv_shlibpath_overrides_runpath+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_shlibpath_overrides_runpath=no - save_LDFLAGS=$LDFLAGS - save_libdir=$libdir - eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ - LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : - lt_cv_shlibpath_overrides_runpath=yes -fi -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - LDFLAGS=$save_LDFLAGS - libdir=$save_libdir - -fi - - shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath - - # This implies no fast_install, which is unacceptable. - # Some rework will be needed to allow for fast_install - # before this can be enabled. - hardcode_into_libs=yes - - # Ideally, we could use ldconfig to report *all* directores which are - # searched for libraries, however this is still not possible. Aside from not - # being certain /sbin/ldconfig is available, command - # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64, - # even though it is searched at run-time. Try to do the best guess by - # appending ld.so.conf contents (and includes) to the search path. - if test -f /etc/ld.so.conf; then - lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` - sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" - fi - - # We used to test for /lib/ld.so.1 and disable shared libraries on - # powerpc, because MkLinux only supported shared libraries with the - # GNU dynamic linker. Since this was broken with cross compilers, - # most powerpc-linux boxes support dynamic linking these days and - # people can always --disable-shared, the test was removed, and we - # assume the GNU/Linux dynamic linker is in use. - dynamic_linker='GNU/Linux ld.so' - ;; - -netbsdelf*-gnu) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - dynamic_linker='NetBSD ld.elf_so' - ;; - -netbsd*) - version_type=sunos - need_lib_prefix=no - need_version=no - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - dynamic_linker='NetBSD (a.out) ld.so' - else - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - dynamic_linker='NetBSD ld.elf_so' - fi - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - -newsos6) - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; - -*nto* | *qnx*) - version_type=qnx - need_lib_prefix=no - need_version=no - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - dynamic_linker='ldqnx.so' - ;; - -openbsd* | bitrig*) - version_type=sunos - sys_lib_dlsearch_path_spec=/usr/lib - need_lib_prefix=no - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then - need_version=no - else - need_version=yes - fi - library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; - -os2*) - libname_spec='$name' - version_type=windows - shrext_cmds=.dll - need_version=no - need_lib_prefix=no - # OS/2 can only load a DLL with a base name of 8 characters or less. - soname_spec='`test -n "$os2dllname" && libname="$os2dllname"; - v=$($ECHO $release$versuffix | tr -d .-); - n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _); - $ECHO $n$v`$shared_ext' - library_names_spec='${libname}_dll.$libext' - dynamic_linker='OS/2 ld.exe' - shlibpath_var=BEGINLIBPATH - sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - postinstall_cmds='base_file=`basename \$file`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname~ - chmod a+x \$dldir/$dlname~ - if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then - eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; - fi' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $RM \$dlpath' - ;; - -osf3* | osf4* | osf5*) - version_type=osf - need_lib_prefix=no - need_version=no - soname_spec='$libname$release$shared_ext$major' - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - -rdos*) - dynamic_linker=no - ;; - -solaris*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - # ldd complains unless libraries are executable - postinstall_cmds='chmod +x $lib' - ;; - -sunos4*) - version_type=sunos - library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' - finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - if test yes = "$with_gnu_ld"; then - need_lib_prefix=no - fi - need_version=yes - ;; - -sysv4 | sysv4.3*) - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - shlibpath_var=LD_LIBRARY_PATH - case $host_vendor in - sni) - shlibpath_overrides_runpath=no - need_lib_prefix=no - runpath_var=LD_RUN_PATH - ;; - siemens) - need_lib_prefix=no - ;; - motorola) - need_lib_prefix=no - need_version=no - shlibpath_overrides_runpath=no - sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' - ;; - esac - ;; - -sysv4*MP*) - if test -d /usr/nec; then - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext' - soname_spec='$libname$shared_ext.$major' - shlibpath_var=LD_LIBRARY_PATH - fi - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - version_type=sco - need_lib_prefix=no - need_version=no - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - if test yes = "$with_gnu_ld"; then - sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' - else - sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' - case $host_os in - sco3.2v5*) - sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" - ;; - esac - fi - sys_lib_dlsearch_path_spec='/usr/lib' - ;; - -tpf*) - # TPF is a cross-target only. Preferred cross-host = GNU/Linux. - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -uts4*) - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -*) - dynamic_linker=no - ;; -esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 -$as_echo "$dynamic_linker" >&6; } -test no = "$dynamic_linker" && can_build_shared=no - -variables_saved_for_relink="PATH $shlibpath_var $runpath_var" -if test yes = "$GCC"; then - variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" -fi - -if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then - sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec -fi - -if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then - sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec -fi - -# remember unaugmented sys_lib_dlsearch_path content for libtool script decls... -configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec - -# ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code -func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH" - -# to be used as default LT_SYS_LIBRARY_PATH value in generated libtool -configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 -$as_echo_n "checking how to hardcode library paths into programs... " >&6; } -hardcode_action= -if test -n "$hardcode_libdir_flag_spec" || - test -n "$runpath_var" || - test yes = "$hardcode_automatic"; then - - # We can hardcode non-existent directories. - if test no != "$hardcode_direct" && - # If the only mechanism to avoid hardcoding is shlibpath_var, we - # have to relink, otherwise we might link with an installed library - # when we should be linking with a yet-to-be-installed one - ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, )" && - test no != "$hardcode_minus_L"; then - # Linking always hardcodes the temporary library directory. - hardcode_action=relink - else - # We can link without hardcoding, and we can hardcode nonexisting dirs. - hardcode_action=immediate - fi -else - # We cannot hardcode anything, or else we can only hardcode existing - # directories. - hardcode_action=unsupported -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 -$as_echo "$hardcode_action" >&6; } - -if test relink = "$hardcode_action" || - test yes = "$inherit_rpath"; then - # Fast installation is not supported - enable_fast_install=no -elif test yes = "$shlibpath_overrides_runpath" || - test no = "$enable_shared"; then - # Fast installation is not necessary - enable_fast_install=needless -fi - - - - - - - if test yes != "$enable_dlopen"; then - enable_dlopen=unknown - enable_dlopen_self=unknown - enable_dlopen_self_static=unknown -else - lt_cv_dlopen=no - lt_cv_dlopen_libs= - - case $host_os in - beos*) - lt_cv_dlopen=load_add_on - lt_cv_dlopen_libs= - lt_cv_dlopen_self=yes - ;; - - mingw* | pw32* | cegcc*) - lt_cv_dlopen=LoadLibrary - lt_cv_dlopen_libs= - ;; - - cygwin*) - lt_cv_dlopen=dlopen - lt_cv_dlopen_libs= - ;; - - darwin*) - # if libdl is installed we need to link against it - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 -$as_echo_n "checking for dlopen in -ldl... " >&6; } -if ${ac_cv_lib_dl_dlopen+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldl $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dlopen (); -int -main () -{ -return dlopen (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_dl_dlopen=yes -else - ac_cv_lib_dl_dlopen=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 -$as_echo "$ac_cv_lib_dl_dlopen" >&6; } -if test "x$ac_cv_lib_dl_dlopen" = xyes; then : - lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl -else - - lt_cv_dlopen=dyld - lt_cv_dlopen_libs= - lt_cv_dlopen_self=yes - -fi - - ;; - - tpf*) - # Don't try to run any link tests for TPF. We know it's impossible - # because TPF is a cross-compiler, and we know how we open DSOs. - lt_cv_dlopen=dlopen - lt_cv_dlopen_libs= - lt_cv_dlopen_self=no - ;; - - *) - ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" -if test "x$ac_cv_func_shl_load" = xyes; then : - lt_cv_dlopen=shl_load -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 -$as_echo_n "checking for shl_load in -ldld... " >&6; } -if ${ac_cv_lib_dld_shl_load+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldld $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char shl_load (); -int -main () -{ -return shl_load (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_dld_shl_load=yes -else - ac_cv_lib_dld_shl_load=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 -$as_echo "$ac_cv_lib_dld_shl_load" >&6; } -if test "x$ac_cv_lib_dld_shl_load" = xyes; then : - lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld -else - ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" -if test "x$ac_cv_func_dlopen" = xyes; then : - lt_cv_dlopen=dlopen -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 -$as_echo_n "checking for dlopen in -ldl... " >&6; } -if ${ac_cv_lib_dl_dlopen+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldl $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dlopen (); -int -main () -{ -return dlopen (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_dl_dlopen=yes -else - ac_cv_lib_dl_dlopen=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 -$as_echo "$ac_cv_lib_dl_dlopen" >&6; } -if test "x$ac_cv_lib_dl_dlopen" = xyes; then : - lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 -$as_echo_n "checking for dlopen in -lsvld... " >&6; } -if ${ac_cv_lib_svld_dlopen+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lsvld $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dlopen (); -int -main () -{ -return dlopen (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_svld_dlopen=yes -else - ac_cv_lib_svld_dlopen=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 -$as_echo "$ac_cv_lib_svld_dlopen" >&6; } -if test "x$ac_cv_lib_svld_dlopen" = xyes; then : - lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-lsvld -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 -$as_echo_n "checking for dld_link in -ldld... " >&6; } -if ${ac_cv_lib_dld_dld_link+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldld $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dld_link (); -int -main () -{ -return dld_link (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_dld_dld_link=yes -else - ac_cv_lib_dld_dld_link=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 -$as_echo "$ac_cv_lib_dld_dld_link" >&6; } -if test "x$ac_cv_lib_dld_dld_link" = xyes; then : - lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld -fi - - -fi - - -fi - - -fi - - -fi - - -fi - - ;; - esac - - if test no = "$lt_cv_dlopen"; then - enable_dlopen=no - else - enable_dlopen=yes - fi - - case $lt_cv_dlopen in - dlopen) - save_CPPFLAGS=$CPPFLAGS - test yes = "$ac_cv_header_dlfcn_h" && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" - - save_LDFLAGS=$LDFLAGS - wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" - - save_LIBS=$LIBS - LIBS="$lt_cv_dlopen_libs $LIBS" - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 -$as_echo_n "checking whether a program can dlopen itself... " >&6; } -if ${lt_cv_dlopen_self+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test yes = "$cross_compiling"; then : - lt_cv_dlopen_self=cross -else - lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 - lt_status=$lt_dlunknown - cat > conftest.$ac_ext <<_LT_EOF -#line $LINENO "configure" -#include "confdefs.h" - -#if HAVE_DLFCN_H -#include -#endif - -#include - -#ifdef RTLD_GLOBAL -# define LT_DLGLOBAL RTLD_GLOBAL -#else -# ifdef DL_GLOBAL -# define LT_DLGLOBAL DL_GLOBAL -# else -# define LT_DLGLOBAL 0 -# endif -#endif - -/* We may have to define LT_DLLAZY_OR_NOW in the command line if we - find out it does not work in some platform. */ -#ifndef LT_DLLAZY_OR_NOW -# ifdef RTLD_LAZY -# define LT_DLLAZY_OR_NOW RTLD_LAZY -# else -# ifdef DL_LAZY -# define LT_DLLAZY_OR_NOW DL_LAZY -# else -# ifdef RTLD_NOW -# define LT_DLLAZY_OR_NOW RTLD_NOW -# else -# ifdef DL_NOW -# define LT_DLLAZY_OR_NOW DL_NOW -# else -# define LT_DLLAZY_OR_NOW 0 -# endif -# endif -# endif -# endif -#endif - -/* When -fvisibility=hidden is used, assume the code has been annotated - correspondingly for the symbols needed. */ -#if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) -int fnord () __attribute__((visibility("default"))); -#endif - -int fnord () { return 42; } -int main () -{ - void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); - int status = $lt_dlunknown; - - if (self) - { - if (dlsym (self,"fnord")) status = $lt_dlno_uscore; - else - { - if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; - else puts (dlerror ()); - } - /* dlclose (self); */ - } - else - puts (dlerror ()); - - return status; -} -_LT_EOF - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 - (eval $ac_link) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then - (./conftest; exit; ) >&5 2>/dev/null - lt_status=$? - case x$lt_status in - x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; - x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; - x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; - esac - else : - # compilation failed - lt_cv_dlopen_self=no - fi -fi -rm -fr conftest* - - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 -$as_echo "$lt_cv_dlopen_self" >&6; } - - if test yes = "$lt_cv_dlopen_self"; then - wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 -$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } -if ${lt_cv_dlopen_self_static+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test yes = "$cross_compiling"; then : - lt_cv_dlopen_self_static=cross -else - lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 - lt_status=$lt_dlunknown - cat > conftest.$ac_ext <<_LT_EOF -#line $LINENO "configure" -#include "confdefs.h" - -#if HAVE_DLFCN_H -#include -#endif - -#include - -#ifdef RTLD_GLOBAL -# define LT_DLGLOBAL RTLD_GLOBAL -#else -# ifdef DL_GLOBAL -# define LT_DLGLOBAL DL_GLOBAL -# else -# define LT_DLGLOBAL 0 -# endif -#endif - -/* We may have to define LT_DLLAZY_OR_NOW in the command line if we - find out it does not work in some platform. */ -#ifndef LT_DLLAZY_OR_NOW -# ifdef RTLD_LAZY -# define LT_DLLAZY_OR_NOW RTLD_LAZY -# else -# ifdef DL_LAZY -# define LT_DLLAZY_OR_NOW DL_LAZY -# else -# ifdef RTLD_NOW -# define LT_DLLAZY_OR_NOW RTLD_NOW -# else -# ifdef DL_NOW -# define LT_DLLAZY_OR_NOW DL_NOW -# else -# define LT_DLLAZY_OR_NOW 0 -# endif -# endif -# endif -# endif -#endif - -/* When -fvisibility=hidden is used, assume the code has been annotated - correspondingly for the symbols needed. */ -#if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) -int fnord () __attribute__((visibility("default"))); -#endif - -int fnord () { return 42; } -int main () -{ - void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); - int status = $lt_dlunknown; - - if (self) - { - if (dlsym (self,"fnord")) status = $lt_dlno_uscore; - else - { - if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; - else puts (dlerror ()); - } - /* dlclose (self); */ - } - else - puts (dlerror ()); - - return status; -} -_LT_EOF - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 - (eval $ac_link) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then - (./conftest; exit; ) >&5 2>/dev/null - lt_status=$? - case x$lt_status in - x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; - x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; - x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; - esac - else : - # compilation failed - lt_cv_dlopen_self_static=no - fi -fi -rm -fr conftest* - - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 -$as_echo "$lt_cv_dlopen_self_static" >&6; } - fi - - CPPFLAGS=$save_CPPFLAGS - LDFLAGS=$save_LDFLAGS - LIBS=$save_LIBS - ;; - esac - - case $lt_cv_dlopen_self in - yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; - *) enable_dlopen_self=unknown ;; - esac - - case $lt_cv_dlopen_self_static in - yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; - *) enable_dlopen_self_static=unknown ;; - esac -fi - - - - - - - - - - - - - - - - - -striplib= -old_striplib= -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 -$as_echo_n "checking whether stripping libraries is possible... " >&6; } -if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then - test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" - test -z "$striplib" && striplib="$STRIP --strip-unneeded" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -else -# FIXME - insert some real tests, host_os isn't really good enough - case $host_os in - darwin*) - if test -n "$STRIP"; then - striplib="$STRIP -x" - old_striplib="$STRIP -S" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - fi - ;; - *) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - ;; - esac -fi - - - - - - - - - - - - - # Report what library types will actually be built - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 -$as_echo_n "checking if libtool supports shared libraries... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 -$as_echo "$can_build_shared" >&6; } - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 -$as_echo_n "checking whether to build shared libraries... " >&6; } - test no = "$can_build_shared" && enable_shared=no - - # On AIX, shared libraries and static libraries use the same namespace, and - # are all built from PIC. - case $host_os in - aix3*) - test yes = "$enable_shared" && enable_static=no - if test -n "$RANLIB"; then - archive_cmds="$archive_cmds~\$RANLIB \$lib" - postinstall_cmds='$RANLIB $lib' - fi - ;; - - aix[4-9]*) - if test ia64 != "$host_cpu"; then - case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in - yes,aix,yes) ;; # shared object as lib.so file only - yes,svr4,*) ;; # shared object as lib.so archive member only - yes,*) enable_static=no ;; # shared object in lib.a archive as well - esac - fi - ;; - esac - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 -$as_echo "$enable_shared" >&6; } - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 -$as_echo_n "checking whether to build static libraries... " >&6; } - # Make sure either enable_shared or enable_static is yes. - test yes = "$enable_shared" || enable_static=yes - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 -$as_echo "$enable_static" >&6; } - - - - -fi -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -CC=$lt_save_CC - - - - - - - - - - - - - - - - ac_config_commands="$ac_config_commands libtool" - - - - -# Only expand once: - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 -$as_echo_n "checking for a sed that does not truncate output... " >&6; } -if ${ac_cv_path_SED+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ - for ac_i in 1 2 3 4 5 6 7; do - ac_script="$ac_script$as_nl$ac_script" - done - echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed - { ac_script=; unset ac_script;} - if test -z "$SED"; then - ac_path_SED_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in sed gsed; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" - as_fn_executable_p "$ac_path_SED" || continue -# Check for GNU ac_path_SED and select it if it is found. - # Check for GNU $ac_path_SED -case `"$ac_path_SED" --version 2>&1` in -*GNU*) - ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo '' >> "conftest.nl" - "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_SED_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_SED="$ac_path_SED" - ac_path_SED_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_SED_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_SED"; then - as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 - fi -else - ac_cv_path_SED=$SED -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 -$as_echo "$ac_cv_path_SED" >&6; } - SED="$ac_cv_path_SED" - rm -f conftest.sed - - - -# Check whether --enable-silent-rules was given. -if test "${enable_silent_rules+set}" = set; then : - enableval=$enable_silent_rules; -fi - -case $enable_silent_rules in # ((( - yes) AM_DEFAULT_VERBOSITY=0;; - no) AM_DEFAULT_VERBOSITY=1;; - *) AM_DEFAULT_VERBOSITY=0;; -esac -am_make=${MAKE-make} -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 -$as_echo_n "checking whether $am_make supports nested variables... " >&6; } -if ${am_cv_make_support_nested_variables+:} false; then : - $as_echo_n "(cached) " >&6 -else - if $as_echo 'TRUE=$(BAR$(V)) -BAR0=false -BAR1=true -V=1 -am__doit: - @$(TRUE) -.PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then - am_cv_make_support_nested_variables=yes -else - am_cv_make_support_nested_variables=no -fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 -$as_echo "$am_cv_make_support_nested_variables" >&6; } -if test $am_cv_make_support_nested_variables = yes; then - AM_V='$(V)' - AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' -else - AM_V=$AM_DEFAULT_VERBOSITY - AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY -fi -AM_BACKSLASH='\' - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5 -$as_echo_n "checking whether byte ordering is bigendian... " >&6; } -if ${ac_cv_c_bigendian+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_cv_c_bigendian=unknown - # See if we're dealing with a universal compiler. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifndef __APPLE_CC__ - not a universal capable compiler - #endif - typedef int dummy; - -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - - # Check for potential -arch flags. It is not universal unless - # there are at least two -arch flags with different values. - ac_arch= - ac_prev= - for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do - if test -n "$ac_prev"; then - case $ac_word in - i?86 | x86_64 | ppc | ppc64) - if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then - ac_arch=$ac_word - else - ac_cv_c_bigendian=universal - break - fi - ;; - esac - ac_prev= - elif test "x$ac_word" = "x-arch"; then - ac_prev=arch - fi - done -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - if test $ac_cv_c_bigendian = unknown; then - # See if sys/param.h defines the BYTE_ORDER macro. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - #include - -int -main () -{ -#if ! (defined BYTE_ORDER && defined BIG_ENDIAN \ - && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \ - && LITTLE_ENDIAN) - bogus endian macros - #endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - # It does; now see whether it defined to BIG_ENDIAN or not. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - #include - -int -main () -{ -#if BYTE_ORDER != BIG_ENDIAN - not big endian - #endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_c_bigendian=yes -else - ac_cv_c_bigendian=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - fi - if test $ac_cv_c_bigendian = unknown; then - # See if defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris). - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -int -main () -{ -#if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN) - bogus endian macros - #endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - # It does; now see whether it defined to _BIG_ENDIAN or not. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -int -main () -{ -#ifndef _BIG_ENDIAN - not big endian - #endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_c_bigendian=yes -else - ac_cv_c_bigendian=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - fi - if test $ac_cv_c_bigendian = unknown; then - # Compile a test program. - if test "$cross_compiling" = yes; then : - # Try to guess by grepping values from an object file. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -short int ascii_mm[] = - { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; - short int ascii_ii[] = - { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; - int use_ascii (int i) { - return ascii_mm[i] + ascii_ii[i]; - } - short int ebcdic_ii[] = - { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; - short int ebcdic_mm[] = - { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; - int use_ebcdic (int i) { - return ebcdic_mm[i] + ebcdic_ii[i]; - } - extern int foo; - -int -main () -{ -return use_ascii (foo) == use_ebcdic (foo); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then - ac_cv_c_bigendian=yes - fi - if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then - if test "$ac_cv_c_bigendian" = unknown; then - ac_cv_c_bigendian=no - else - # finding both strings is unlikely to happen, but who knows? - ac_cv_c_bigendian=unknown - fi - fi -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ - - /* Are we little or big endian? From Harbison&Steele. */ - union - { - long int l; - char c[sizeof (long int)]; - } u; - u.l = 1; - return u.c[sizeof (long int) - 1] == 1; - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - ac_cv_c_bigendian=no -else - ac_cv_c_bigendian=yes -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5 -$as_echo "$ac_cv_c_bigendian" >&6; } - case $ac_cv_c_bigendian in #( - yes) - $as_echo "#define WORDS_BIGENDIAN 1" >>confdefs.h -;; #( - no) - ;; #( - universal) - -$as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h - - ;; #( - *) - as_fn_error $? "unknown endianness - presetting ac_cv_c_bigendian=no (or yes) will help" "$LINENO" 5 ;; - esac - - - - -# Check whether --enable-everything was given. -if test "${enable_everything+set}" = set; then : - enableval=$enable_everything; test "${enable_libwebpdecoder+set}" = "set" || enable_libwebpdecoder=$enableval - test "${enable_libwebpdemux+set}" = "set" || enable_libwebpdemux=$enableval - test "${enable_libwebpextras+set}" = "set" || enable_libwebpextras=$enableval - test "${enable_libwebpmux+set}" = "set" || enable_libwebpmux=$enableval -fi - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether asserts are enabled" >&5 -$as_echo_n "checking whether asserts are enabled... " >&6; } -# Check whether --enable-asserts was given. -if test "${enable_asserts+set}" = set; then : - enableval=$enable_asserts; -fi - -if test "x${enable_asserts-no}" = "xno"; then - AM_CPPFLAGS="${AM_CPPFLAGS} -DNDEBUG" -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: ${enable_asserts-no}" >&5 -$as_echo "${enable_asserts-no}" >&6; } - - - -# Check whether --with-pkgconfigdir was given. -if test "${with_pkgconfigdir+set}" = set; then : - withval=$with_pkgconfigdir; pkgconfigdir="$withval" -else - pkgconfigdir='${libdir}/pkgconfig' -fi - - - - -SAVED_CFLAGS="$CFLAGS" - CFLAGS="-Werror -fvisibility=hidden" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports -fvisibility=hidden" >&5 -$as_echo_n "checking whether $CC supports -fvisibility=hidden... " >&6; } - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int main(void) { return 0; } -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - AM_CFLAGS="${AM_CFLAGS} -fvisibility=hidden" -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - CFLAGS="$SAVED_CFLAGS" -SAVED_CFLAGS="$CFLAGS" - CFLAGS="-Werror -Wall" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports -Wall" >&5 -$as_echo_n "checking whether $CC supports -Wall... " >&6; } - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int main(void) { return 0; } -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - AM_CFLAGS="${AM_CFLAGS} -Wall" -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - CFLAGS="$SAVED_CFLAGS" -SAVED_CFLAGS="$CFLAGS" - CFLAGS="-Werror -Wconstant-conversion" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports -Wconstant-conversion" >&5 -$as_echo_n "checking whether $CC supports -Wconstant-conversion... " >&6; } - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int main(void) { return 0; } -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - AM_CFLAGS="${AM_CFLAGS} -Wconstant-conversion" -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - CFLAGS="$SAVED_CFLAGS" -SAVED_CFLAGS="$CFLAGS" - CFLAGS="-Werror -Wdeclaration-after-statement" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports -Wdeclaration-after-statement" >&5 -$as_echo_n "checking whether $CC supports -Wdeclaration-after-statement... " >&6; } - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int main(void) { return 0; } -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - AM_CFLAGS="${AM_CFLAGS} -Wdeclaration-after-statement" -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - CFLAGS="$SAVED_CFLAGS" -SAVED_CFLAGS="$CFLAGS" - CFLAGS="-Werror -Wextra" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports -Wextra" >&5 -$as_echo_n "checking whether $CC supports -Wextra... " >&6; } - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int main(void) { return 0; } -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - AM_CFLAGS="${AM_CFLAGS} -Wextra" -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - CFLAGS="$SAVED_CFLAGS" -SAVED_CFLAGS="$CFLAGS" - CFLAGS="-Werror -Wfloat-conversion" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports -Wfloat-conversion" >&5 -$as_echo_n "checking whether $CC supports -Wfloat-conversion... " >&6; } - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int main(void) { return 0; } -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - AM_CFLAGS="${AM_CFLAGS} -Wfloat-conversion" -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - CFLAGS="$SAVED_CFLAGS" -SAVED_CFLAGS="$CFLAGS" - CFLAGS="-Werror -Wformat -Wformat-nonliteral" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports -Wformat -Wformat-nonliteral" >&5 -$as_echo_n "checking whether $CC supports -Wformat -Wformat-nonliteral... " >&6; } - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int main(void) { return 0; } -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - AM_CFLAGS="${AM_CFLAGS} -Wformat -Wformat-nonliteral" -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - CFLAGS="$SAVED_CFLAGS" -SAVED_CFLAGS="$CFLAGS" - CFLAGS="-Werror -Wformat -Wformat-security" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports -Wformat -Wformat-security" >&5 -$as_echo_n "checking whether $CC supports -Wformat -Wformat-security... " >&6; } - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int main(void) { return 0; } -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - AM_CFLAGS="${AM_CFLAGS} -Wformat -Wformat-security" -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - CFLAGS="$SAVED_CFLAGS" -SAVED_CFLAGS="$CFLAGS" - CFLAGS="-Werror -Wmissing-declarations" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports -Wmissing-declarations" >&5 -$as_echo_n "checking whether $CC supports -Wmissing-declarations... " >&6; } - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int main(void) { return 0; } -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - AM_CFLAGS="${AM_CFLAGS} -Wmissing-declarations" -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - CFLAGS="$SAVED_CFLAGS" -SAVED_CFLAGS="$CFLAGS" - CFLAGS="-Werror -Wmissing-prototypes" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports -Wmissing-prototypes" >&5 -$as_echo_n "checking whether $CC supports -Wmissing-prototypes... " >&6; } - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int main(void) { return 0; } -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - AM_CFLAGS="${AM_CFLAGS} -Wmissing-prototypes" -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - CFLAGS="$SAVED_CFLAGS" -SAVED_CFLAGS="$CFLAGS" - CFLAGS="-Werror -Wold-style-definition" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports -Wold-style-definition" >&5 -$as_echo_n "checking whether $CC supports -Wold-style-definition... " >&6; } - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int main(void) { return 0; } -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - AM_CFLAGS="${AM_CFLAGS} -Wold-style-definition" -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - CFLAGS="$SAVED_CFLAGS" -SAVED_CFLAGS="$CFLAGS" - CFLAGS="-Werror -Wparentheses-equality" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports -Wparentheses-equality" >&5 -$as_echo_n "checking whether $CC supports -Wparentheses-equality... " >&6; } - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int main(void) { return 0; } -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - AM_CFLAGS="${AM_CFLAGS} -Wparentheses-equality" -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - CFLAGS="$SAVED_CFLAGS" -SAVED_CFLAGS="$CFLAGS" - CFLAGS="-Werror -Wshadow" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports -Wshadow" >&5 -$as_echo_n "checking whether $CC supports -Wshadow... " >&6; } - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int main(void) { return 0; } -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - AM_CFLAGS="${AM_CFLAGS} -Wshadow" -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - CFLAGS="$SAVED_CFLAGS" -SAVED_CFLAGS="$CFLAGS" - CFLAGS="-Werror -Wshorten-64-to-32" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports -Wshorten-64-to-32" >&5 -$as_echo_n "checking whether $CC supports -Wshorten-64-to-32... " >&6; } - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int main(void) { return 0; } -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - AM_CFLAGS="${AM_CFLAGS} -Wshorten-64-to-32" -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - CFLAGS="$SAVED_CFLAGS" -SAVED_CFLAGS="$CFLAGS" - CFLAGS="-Werror -Wundef" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports -Wundef" >&5 -$as_echo_n "checking whether $CC supports -Wundef... " >&6; } - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int main(void) { return 0; } -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - AM_CFLAGS="${AM_CFLAGS} -Wundef" -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - CFLAGS="$SAVED_CFLAGS" -SAVED_CFLAGS="$CFLAGS" - CFLAGS="-Werror -Wunreachable-code" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports -Wunreachable-code" >&5 -$as_echo_n "checking whether $CC supports -Wunreachable-code... " >&6; } - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int main(void) { return 0; } -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - AM_CFLAGS="${AM_CFLAGS} -Wunreachable-code" -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - CFLAGS="$SAVED_CFLAGS" -SAVED_CFLAGS="$CFLAGS" - CFLAGS="-Werror -Wunused-but-set-variable" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports -Wunused-but-set-variable" >&5 -$as_echo_n "checking whether $CC supports -Wunused-but-set-variable... " >&6; } - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int main(void) { return 0; } -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - AM_CFLAGS="${AM_CFLAGS} -Wunused-but-set-variable" -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - CFLAGS="$SAVED_CFLAGS" -SAVED_CFLAGS="$CFLAGS" - CFLAGS="-Werror -Wunused" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports -Wunused" >&5 -$as_echo_n "checking whether $CC supports -Wunused... " >&6; } - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int main(void) { return 0; } -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - AM_CFLAGS="${AM_CFLAGS} -Wunused" -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - CFLAGS="$SAVED_CFLAGS" -SAVED_CFLAGS="$CFLAGS" - CFLAGS="-Werror -Wvla" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports -Wvla" >&5 -$as_echo_n "checking whether $CC supports -Wvla... " >&6; } - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int main(void) { return 0; } -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - AM_CFLAGS="${AM_CFLAGS} -Wvla" -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - CFLAGS="$SAVED_CFLAGS" -# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=62040 -# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61622 -if test "$GCC" = "yes" ; then : - - gcc_version=`$CC -dumpversion` - gcc_wht_bug="" - case "$host_cpu" in - aarch64|arm64) - case "$gcc_version" in - 4.9|4.9.0|4.9.1) gcc_wht_bug=yes ;; - esac - esac - if test "$gcc_wht_bug" = "yes"; then : - - SAVED_CFLAGS="$CFLAGS" - CFLAGS="-Werror -frename-registers" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports -frename-registers" >&5 -$as_echo_n "checking whether $CC supports -frename-registers... " >&6; } - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int main(void) { return 0; } -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - AM_CFLAGS="${AM_CFLAGS} -frename-registers" -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - CFLAGS="$SAVED_CFLAGS" -fi -fi -# Use -flax-vector-conversions, if available, when building intrinsics with -# older versions of gcc. The flag appeared in 4.3.x, but if backported, and -# -fno-lax-vector-conversions is set, errors may occur with the intrinsics -# files along with the older system includes, e.g., emmintrin.h. -# Originally observed with cc (GCC) 4.2.1 20070831 patched [FreeBSD] (9.3). -# https://bugs.chromium.org/p/webp/issues/detail?id=274 -if test "$GCC" = "yes" ; then : - - case "$host_cpu" in - amd64|i?86|x86_64) - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - #if !defined(__clang__) && defined(__GNUC__) && \ - ((__GNUC__ << 8) | __GNUC_MINOR__) < 0x403 - #error old gcc - #endif - int main(void) { return 0; } - -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - -else - SAVED_CFLAGS="$CFLAGS" - CFLAGS="-Werror -flax-vector-conversions" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports -flax-vector-conversions" >&5 -$as_echo_n "checking whether $CC supports -flax-vector-conversions... " >&6; } - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int main(void) { return 0; } -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - INTRINSICS_CFLAGS="${INTRINSICS_CFLAGS} -flax-vector-conversions" -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - CFLAGS="$SAVED_CFLAGS" -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ;; - esac -fi - - -# Check whether --enable-sse4.1 was given. -if test "${enable_sse4_1+set}" = set; then : - enableval=$enable_sse4_1; -fi - - -if test "x$enable_sse4_1" != "xno" -a "x$enable_sse2" != "xno"; then : - - SSE41_FLAGS="$INTRINSICS_CFLAGS $SSE41_FLAGS" - SAVED_CFLAGS="$CFLAGS" - CFLAGS="-Werror -msse4.1" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports -msse4.1" >&5 -$as_echo_n "checking whether $CC supports -msse4.1... " >&6; } - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int main(void) { return 0; } -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - SSE41_FLAGS="${SSE41_FLAGS} -msse4.1" -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - CFLAGS="$SAVED_CFLAGS" - if test -n "$SSE41_FLAGS"; then : - - SAVED_CFLAGS=$CFLAGS - CFLAGS="$CFLAGS $SSE41_FLAGS" - ac_fn_c_check_header_mongrel "$LINENO" "smmintrin.h" "ac_cv_header_smmintrin_h" "$ac_includes_default" -if test "x$ac_cv_header_smmintrin_h" = xyes; then : - -$as_echo "#define WEBP_HAVE_SSE41 1" >>confdefs.h - -else - SSE41_FLAGS="" -fi - - - CFLAGS=$SAVED_CFLAGS -fi - -fi - -# Check whether --enable-sse2 was given. -if test "${enable_sse2+set}" = set; then : - enableval=$enable_sse2; -fi - - -if test "x$enable_sse2" != "xno"; then : - - SSE2_FLAGS="$INTRINSICS_CFLAGS $SSE2_FLAGS" - SAVED_CFLAGS="$CFLAGS" - CFLAGS="-Werror -msse2" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports -msse2" >&5 -$as_echo_n "checking whether $CC supports -msse2... " >&6; } - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int main(void) { return 0; } -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - SSE2_FLAGS="${SSE2_FLAGS} -msse2" -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - CFLAGS="$SAVED_CFLAGS" - if test -n "$SSE2_FLAGS"; then : - - SAVED_CFLAGS=$CFLAGS - CFLAGS="$CFLAGS $SSE2_FLAGS" - ac_fn_c_check_header_mongrel "$LINENO" "emmintrin.h" "ac_cv_header_emmintrin_h" "$ac_includes_default" -if test "x$ac_cv_header_emmintrin_h" = xyes; then : - -$as_echo "#define WEBP_HAVE_SSE2 1" >>confdefs.h - -else - SSE2_FLAGS="" -fi - - - CFLAGS=$SAVED_CFLAGS -fi - -fi - -# Check whether --enable-neon was given. -if test "${enable_neon+set}" = set; then : - enableval=$enable_neon; -fi - - -# Check whether --enable-neon_rtcd was given. -if test "${enable_neon_rtcd+set}" = set; then : - enableval=$enable_neon_rtcd; -fi - -# For ARM(7) hosts: -# Both NEON flags unset and NEON support detected = build all modules with NEON -# NEON detected with the use of -mfpu=neon = build only NEON modules with NEON -if test "x$enable_neon" != "xno"; then : - - case "$host_cpu" in - arm|armv7*) - # Test for NEON support without flags before falling back to -mfpu=neon - for flag in '' '-mfpu=neon'; do - LOCAL_NEON_FLAGS="$INTRINSICS_CFLAGS $NEON_FLAGS" - SAVED_CFLAGS="$CFLAGS" - CFLAGS="-Werror $flag" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports $flag" >&5 -$as_echo_n "checking whether $CC supports $flag... " >&6; } - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int main(void) { return 0; } -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - LOCAL_NEON_FLAGS="${LOCAL_NEON_FLAGS} $flag" -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - CFLAGS="$SAVED_CFLAGS" - SAVED_CFLAGS=$CFLAGS - CFLAGS="$CFLAGS $LOCAL_NEON_FLAGS" - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - #include - int main(void) { - int8x8_t v = vdup_n_s8(0); - (void)v; - return 0; - } -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - NEON_FLAGS="$(echo $LOCAL_NEON_FLAGS | $SED 's/^ *//')" - if test -n "$NEON_FLAGS"; then : - - if test "${host_os%%-*}" = "linux" -o \ - "x$enable_neon_rtcd" = "xno"; then : - - CFLAGS=$SAVED_CFLAGS - -$as_echo "#define WEBP_HAVE_NEON 1" >>confdefs.h - - break - -else - - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: NEON runtime cpu-detection is unavailable for ${host_os%%-*}. Force with CFLAGS=-mfpu=neon or --disable-neon-rtcd." >&5 -$as_echo "$as_me: WARNING: NEON runtime cpu-detection is unavailable for ${host_os%%-*}. Force with CFLAGS=-mfpu=neon or --disable-neon-rtcd." >&2;} - enable_neon_rtcd=no - NEON_FLAGS="" - -fi - -else - - CFLAGS=$SAVED_CFLAGS - -$as_echo "#define WEBP_HAVE_NEON 1" >>confdefs.h - - break - -fi -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - CFLAGS=$SAVED_CFLAGS - done - - if test -n "$NEON_FLAGS"; then : - - # If NEON is available and rtcd is disabled apply NEON_FLAGS globally. - if test "x$enable_neon_rtcd" = "xno"; then : - - AM_CFLAGS="$AM_CFLAGS $NEON_FLAGS" - NEON_FLAGS="" -else - -$as_echo "#define WEBP_HAVE_NEON_RTCD 1" >>confdefs.h - -fi -fi - - case "$host_os" in - *android*) for ac_header in cpu-features.h -do : - ac_fn_c_check_header_mongrel "$LINENO" "cpu-features.h" "ac_cv_header_cpu_features_h" "$ac_includes_default" -if test "x$ac_cv_header_cpu_features_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_CPU_FEATURES_H 1 -_ACEOF - -fi - -done - ;; - esac - ;; - esac - -fi - - - - - - - - - - - - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for __builtin_bswap16" >&5 -$as_echo_n "checking for __builtin_bswap16... " >&6; } - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ -(void)__builtin_bswap16(1u << 15) - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - -$as_echo "#define HAVE_BUILTIN_BSWAP16 1" >>confdefs.h - -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext, - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for __builtin_bswap32" >&5 -$as_echo_n "checking for __builtin_bswap32... " >&6; } - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ -(void)__builtin_bswap32(1u << 31) - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - -$as_echo "#define HAVE_BUILTIN_BSWAP32 1" >>confdefs.h - -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext, - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for __builtin_bswap64" >&5 -$as_echo_n "checking for __builtin_bswap64... " >&6; } - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ -(void)__builtin_bswap64(1ull << 63) - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - -$as_echo "#define HAVE_BUILTIN_BSWAP64 1" >>confdefs.h - -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext, - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - -# Check whether --enable-threading was given. -if test "${enable_threading+set}" = set; then : - enableval=$enable_threading; -else - enable_threading=yes -fi - -if test "$enable_threading" = "yes"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for threading support..." >&5 -$as_echo "$as_me: checking for threading support..." >&6;} - - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -ax_pthread_ok=no - -# We used to check for pthread.h first, but this fails if pthread.h -# requires special compiler flags (e.g. on True64 or Sequent). -# It gets checked for in the link test anyway. - -# First of all, check if the user has set any of the PTHREAD_LIBS, -# etcetera environment variables, and if threads linking works using -# them: -if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then - save_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS $PTHREAD_CFLAGS" - save_LIBS="$LIBS" - LIBS="$PTHREAD_LIBS $LIBS" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS" >&5 -$as_echo_n "checking for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS... " >&6; } - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char pthread_join (); -int -main () -{ -return pthread_join (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ax_pthread_ok=yes -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_ok" >&5 -$as_echo "$ax_pthread_ok" >&6; } - if test x"$ax_pthread_ok" = xno; then - PTHREAD_LIBS="" - PTHREAD_CFLAGS="" - fi - LIBS="$save_LIBS" - CFLAGS="$save_CFLAGS" -fi - -# We must check for the threads library under a number of different -# names; the ordering is very important because some systems -# (e.g. DEC) have both -lpthread and -lpthreads, where one of the -# libraries is broken (non-POSIX). - -# Create a list of thread flags to try. Items starting with a "-" are -# C compiler flags, and other items are library names, except for "none" -# which indicates that we try without any flags at all, and "pthread-config" -# which is a program returning the flags for the Pth emulation library. - -ax_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config" - -# The ordering *is* (sometimes) important. Some notes on the -# individual items follow: - -# pthreads: AIX (must check this before -lpthread) -# none: in case threads are in libc; should be tried before -Kthread and -# other compiler flags to prevent continual compiler warnings -# -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h) -# -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able) -# lthread: LinuxThreads port on FreeBSD (also preferred to -pthread) -# -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads) -# -pthreads: Solaris/gcc -# -mthreads: Mingw32/gcc, Lynx/gcc -# -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it -# doesn't hurt to check since this sometimes defines pthreads too; -# also defines -D_REENTRANT) -# ... -mt is also the pthreads flag for HP/aCC -# pthread: Linux, etcetera -# --thread-safe: KAI C++ -# pthread-config: use pthread-config program (for GNU Pth library) - -case ${host_os} in - solaris*) - - # On Solaris (at least, for some versions), libc contains stubbed - # (non-functional) versions of the pthreads routines, so link-based - # tests will erroneously succeed. (We need to link with -pthreads/-mt/ - # -lpthread.) (The stubs are missing pthread_cleanup_push, or rather - # a function called by this macro, so we could check for that, but - # who knows whether they'll stub that too in a future libc.) So, - # we'll just look for -pthreads and -lpthread first: - - ax_pthread_flags="-pthreads pthread -mt -pthread $ax_pthread_flags" - ;; - - darwin*) - ax_pthread_flags="-pthread $ax_pthread_flags" - ;; -esac - -# Clang doesn't consider unrecognized options an error unless we specify -# -Werror. We throw in some extra Clang-specific options to ensure that -# this doesn't happen for GCC, which also accepts -Werror. - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if compiler needs -Werror to reject unknown flags" >&5 -$as_echo_n "checking if compiler needs -Werror to reject unknown flags... " >&6; } -save_CFLAGS="$CFLAGS" -ax_pthread_extra_flags="-Werror" -CFLAGS="$CFLAGS $ax_pthread_extra_flags -Wunknown-warning-option -Wsizeof-array-argument" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int foo(void); -int -main () -{ -foo() - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -else - ax_pthread_extra_flags= - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -CFLAGS="$save_CFLAGS" - -if test x"$ax_pthread_ok" = xno; then -for flag in $ax_pthread_flags; do - - case $flag in - none) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work without any flags" >&5 -$as_echo_n "checking whether pthreads work without any flags... " >&6; } - ;; - - -*) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work with $flag" >&5 -$as_echo_n "checking whether pthreads work with $flag... " >&6; } - PTHREAD_CFLAGS="$flag" - ;; - - pthread-config) - # Extract the first word of "pthread-config", so it can be a program name with args. -set dummy pthread-config; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ax_pthread_config+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ax_pthread_config"; then - ac_cv_prog_ax_pthread_config="$ax_pthread_config" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ax_pthread_config="yes" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - test -z "$ac_cv_prog_ax_pthread_config" && ac_cv_prog_ax_pthread_config="no" -fi -fi -ax_pthread_config=$ac_cv_prog_ax_pthread_config -if test -n "$ax_pthread_config"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_config" >&5 -$as_echo "$ax_pthread_config" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - if test x"$ax_pthread_config" = xno; then continue; fi - PTHREAD_CFLAGS="`pthread-config --cflags`" - PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`" - ;; - - *) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the pthreads library -l$flag" >&5 -$as_echo_n "checking for the pthreads library -l$flag... " >&6; } - PTHREAD_LIBS="-l$flag" - ;; - esac - - save_LIBS="$LIBS" - save_CFLAGS="$CFLAGS" - LIBS="$PTHREAD_LIBS $LIBS" - CFLAGS="$CFLAGS $PTHREAD_CFLAGS $ax_pthread_extra_flags" - - # Check for various functions. We must include pthread.h, - # since some functions may be macros. (On the Sequent, we - # need a special flag -Kthread to make this header compile.) - # We check for pthread_join because it is in -lpthread on IRIX - # while pthread_create is in libc. We check for pthread_attr_init - # due to DEC craziness with -lpthreads. We check for - # pthread_cleanup_push because it is one of the few pthread - # functions on Solaris that doesn't have a non-functional libc stub. - # We try pthread_create on general principles. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - static void routine(void *a) { a = 0; } - static void *start_routine(void *a) { return a; } -int -main () -{ -pthread_t th; pthread_attr_t attr; - pthread_create(&th, 0, start_routine, 0); - pthread_join(th, 0); - pthread_attr_init(&attr); - pthread_cleanup_push(routine, 0); - pthread_cleanup_pop(0) /* ; */ - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ax_pthread_ok=yes -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - - LIBS="$save_LIBS" - CFLAGS="$save_CFLAGS" - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_ok" >&5 -$as_echo "$ax_pthread_ok" >&6; } - if test "x$ax_pthread_ok" = xyes; then - break; - fi - - PTHREAD_LIBS="" - PTHREAD_CFLAGS="" -done -fi - -# Various other checks: -if test "x$ax_pthread_ok" = xyes; then - save_LIBS="$LIBS" - LIBS="$PTHREAD_LIBS $LIBS" - save_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS $PTHREAD_CFLAGS" - - # Detect AIX lossage: JOINABLE attribute is called UNDETACHED. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for joinable pthread attribute" >&5 -$as_echo_n "checking for joinable pthread attribute... " >&6; } - attr_name=unknown - for attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ -int attr = $attr; return attr /* ; */ - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - attr_name=$attr; break -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - done - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $attr_name" >&5 -$as_echo "$attr_name" >&6; } - if test "$attr_name" != PTHREAD_CREATE_JOINABLE; then - -cat >>confdefs.h <<_ACEOF -#define PTHREAD_CREATE_JOINABLE $attr_name -_ACEOF - - fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if more special flags are required for pthreads" >&5 -$as_echo_n "checking if more special flags are required for pthreads... " >&6; } - flag=no - case ${host_os} in - aix* | freebsd* | darwin*) flag="-D_THREAD_SAFE";; - osf* | hpux*) flag="-D_REENTRANT";; - solaris*) - if test "$GCC" = "yes"; then - flag="-D_REENTRANT" - else - # TODO: What about Clang on Solaris? - flag="-mt -D_REENTRANT" - fi - ;; - esac - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $flag" >&5 -$as_echo "$flag" >&6; } - if test "x$flag" != xno; then - PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS" - fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for PTHREAD_PRIO_INHERIT" >&5 -$as_echo_n "checking for PTHREAD_PRIO_INHERIT... " >&6; } -if ${ax_cv_PTHREAD_PRIO_INHERIT+:} false; then : - $as_echo_n "(cached) " >&6 -else - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ -int i = PTHREAD_PRIO_INHERIT; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ax_cv_PTHREAD_PRIO_INHERIT=yes -else - ax_cv_PTHREAD_PRIO_INHERIT=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_PRIO_INHERIT" >&5 -$as_echo "$ax_cv_PTHREAD_PRIO_INHERIT" >&6; } - if test "x$ax_cv_PTHREAD_PRIO_INHERIT" = "xyes"; then : - -$as_echo "#define HAVE_PTHREAD_PRIO_INHERIT 1" >>confdefs.h - -fi - - LIBS="$save_LIBS" - CFLAGS="$save_CFLAGS" - - # More AIX lossage: compile with *_r variant - if test "x$GCC" != xyes; then - case $host_os in - aix*) - case "x/$CC" in #( - x*/c89|x*/c89_128|x*/c99|x*/c99_128|x*/cc|x*/cc128|x*/xlc|x*/xlc_v6|x*/xlc128|x*/xlc128_v6) : - #handle absolute path differently from PATH based program lookup - case "x$CC" in #( - x/*) : - if as_fn_executable_p ${CC}_r; then : - PTHREAD_CC="${CC}_r" -fi ;; #( - *) : - for ac_prog in ${CC}_r -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_PTHREAD_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$PTHREAD_CC"; then - ac_cv_prog_PTHREAD_CC="$PTHREAD_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_PTHREAD_CC="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -PTHREAD_CC=$ac_cv_prog_PTHREAD_CC -if test -n "$PTHREAD_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PTHREAD_CC" >&5 -$as_echo "$PTHREAD_CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$PTHREAD_CC" && break -done -test -n "$PTHREAD_CC" || PTHREAD_CC="$CC" - ;; -esac ;; #( - *) : - ;; -esac - ;; - esac - fi -fi - -test -n "$PTHREAD_CC" || PTHREAD_CC="$CC" - - - - - -# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: -if test x"$ax_pthread_ok" = xyes; then - -$as_echo "#define WEBP_USE_THREAD 1" >>confdefs.h - - LIBS="$PTHREAD_LIBS $LIBS" - CFLAGS="$CFLAGS $PTHREAD_CFLAGS" - CC="$PTHREAD_CC" - - : -else - ax_pthread_ok=no - ac_fn_c_check_func "$LINENO" "_beginthreadex" "ac_cv_func__beginthreadex" -if test "x$ac_cv_func__beginthreadex" = xyes; then : - -$as_echo "#define WEBP_USE_THREAD 1" >>confdefs.h - -else - enable_threading=no -fi - -fi -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if threading is enabled... ${enable_threading-no}" >&5 -$as_echo "$as_me: checking if threading is enabled... ${enable_threading-no}" >&6;} - - -# Check whether --enable-gl was given. -if test "${enable_gl+set}" = set; then : - enableval=$enable_gl; -fi - -if test "x$enable_gl" != "xno"; then : - - GL_INCLUDES=""; GL_LIBS="" - -# Check whether --with-glincludedir was given. -if test "${with_glincludedir+set}" = set; then : - withval=$with_glincludedir; GL_INCLUDES="-I$withval" -fi - - -# Check whether --with-gllibdir was given. -if test "${with_gllibdir+set}" = set; then : - withval=$with_gllibdir; GL_LIBS="-L$withval" -fi - - - SAVED_CPPFLAGS=$CPPFLAGS - SAVED_LIBS=$LIBS - CPPFLAGS="$GL_INCLUDES $CPPFLAGS" - LIBS="$GL_LIBS $LIBS" - - glut_cflags="none" - glut_ldflags="none" - case $host_os in - darwin*) - # Special case for OSX builds. Append these to give the user a chance to - # override with --with-gl* - glut_cflags="$glut_cflags|-framework GLUT -framework OpenGL" - glut_ldflags="$glut_ldflags|-framework GLUT -framework OpenGL" - # quiet deprecation warnings for glut - SAVED_CFLAGS="$CFLAGS" - CFLAGS="-Werror -Wno-deprecated-declarations" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports -Wno-deprecated-declarations" >&5 -$as_echo_n "checking whether $CC supports -Wno-deprecated-declarations... " >&6; } - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int main(void) { return 0; } -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - AM_CFLAGS="${AM_CFLAGS} -Wno-deprecated-declarations" -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - CFLAGS="$SAVED_CFLAGS" - ;; - esac - - GLUT_SAVED_CPPFLAGS="$CPPFLAGS" - SAVED_IFS="$IFS" - IFS="|" - for flag in $glut_cflags; do - # restore IFS immediately as the autoconf macros may need the default. - IFS="$SAVED_IFS" - unset ac_cv_header_GL_glut_h - unset ac_cv_header_OpenGL_glut_h - - case $flag in - none) ;; - *) CPPFLAGS="$flag $CPPFLAGS";; - esac - for ac_header in GL/glut.h GLUT/glut.h OpenGL/glut.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - glut_headers=yes; - test "$flag" = "none" || GL_INCLUDES="$CPPFLAGS"; - break -fi - -done - - CPPFLAGS="$GLUT_SAVED_CPPFLAGS" - test "$glut_headers" = "yes" && break - done - IFS="$SAVED_IFS" - - if test "$glut_headers" = "yes"; then - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - GLUT_SAVED_LDFLAGS="$LDFLAGS" - SAVED_IFS="$IFS" - IFS="|" - for flag in $glut_ldflags; do - # restore IFS immediately as the autoconf macros may need the default. - IFS="$SAVED_IFS" - unset ac_cv_search_glBegin - - case $flag in - none) ;; - *) LDFLAGS="$flag $LDFLAGS";; - esac - - # find libGL - GL_SAVED_LIBS="$LIBS" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing glBegin" >&5 -$as_echo_n "checking for library containing glBegin... " >&6; } -if ${ac_cv_search_glBegin+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_func_search_save_LIBS=$LIBS -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char glBegin (); -int -main () -{ -return glBegin (); - ; - return 0; -} -_ACEOF -for ac_lib in '' GL OpenGL opengl32; do - if test -z "$ac_lib"; then - ac_res="none required" - else - ac_res=-l$ac_lib - LIBS="-l$ac_lib $ac_func_search_save_LIBS" - fi - if ac_fn_c_try_link "$LINENO"; then : - ac_cv_search_glBegin=$ac_res -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext - if ${ac_cv_search_glBegin+:} false; then : - break -fi -done -if ${ac_cv_search_glBegin+:} false; then : - -else - ac_cv_search_glBegin=no -fi -rm conftest.$ac_ext -LIBS=$ac_func_search_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_glBegin" >&5 -$as_echo "$ac_cv_search_glBegin" >&6; } -ac_res=$ac_cv_search_glBegin -if test "$ac_res" != no; then : - test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" - -fi - - LIBS="$GL_SAVED_LIBS" - - # A direct link to libGL may not be necessary on e.g., linux. - GLUT_SAVED_LIBS="$LIBS" - for lib in "" "-lglut" "-lglut $ac_cv_search_glBegin"; do - LIBS="$lib" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - #ifdef __cplusplus - # define EXTERN_C extern "C" - #else - # define EXTERN_C - #endif - EXTERN_C char glOrtho(); - EXTERN_C char glutMainLoop(); - -int -main () -{ - - glOrtho(); - glutMainLoop(); - - ; - return 0; -} - -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - -$as_echo "#define WEBP_HAVE_GL 1" >>confdefs.h - - glut_support=yes -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - if test "$glut_support" = "yes"; then - GL_LIBS="$LDFLAGS $lib" - break - fi - done - LIBS="$GLUT_SAVED_LIBS" - LDFLAGS="$GLUT_SAVED_LDFLAGS" - test "$glut_support" = "yes" && break - done - IFS="$SAVED_IFS" - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - fi - - - - CPPFLAGS=$SAVED_CPPFLAGS - LIBS=$SAVED_LIBS - - if test "$glut_support" = "yes" -a "$enable_libwebpdemux" = "yes"; then - build_vwebp=yes - fi - -fi - if test "$build_vwebp" = "yes"; then - BUILD_VWEBP_TRUE= - BUILD_VWEBP_FALSE='#' -else - BUILD_VWEBP_TRUE='#' - BUILD_VWEBP_FALSE= -fi - - - -# Check whether --enable-sdl was given. -if test "${enable_sdl+set}" = set; then : - enableval=$enable_sdl; -fi - -if test "x$enable_sdl" != "xno"; then : - - SDL_INCLUDES=""; SDL_LIBS="" - for ac_prog in sdl-config -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_LIBSDL_CONFIG+:} false; then : - $as_echo_n "(cached) " >&6 -else - case $LIBSDL_CONFIG in - [\\/]* | ?:[\\/]*) - ac_cv_path_LIBSDL_CONFIG="$LIBSDL_CONFIG" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_LIBSDL_CONFIG="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -LIBSDL_CONFIG=$ac_cv_path_LIBSDL_CONFIG -if test -n "$LIBSDL_CONFIG"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBSDL_CONFIG" >&5 -$as_echo "$LIBSDL_CONFIG" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$LIBSDL_CONFIG" && break -done - - if test -n "$LIBSDL_CONFIG"; then - SDL_INCLUDES=`$LIBSDL_CONFIG --cflags` - SDL_LIBS="`$LIBSDL_CONFIG --libs`" - fi - - -# Check whether --with-sdlincludedir was given. -if test "${with_sdlincludedir+set}" = set; then : - withval=$with_sdlincludedir; SDL_INCLUDES="-I$withval" -fi - - -# Check whether --with-sdllibdir was given. -if test "${with_sdllibdir+set}" = set; then : - withval=$with_sdllibdir; SDL_LIBS="-L$withval" -fi - - - sdl_header="no" - SAVED_CPPFLAGS=$CPPFLAGS - SAVED_LIBS=$LIBS - CPPFLAGS="$SDL_INCLUDES $CPPFLAGS" - LIBS="$SDL_LIBS $LIBS" - ac_fn_c_check_header_mongrel "$LINENO" "SDL/SDL.h" "ac_cv_header_SDL_SDL_h" "$ac_includes_default" -if test "x$ac_cv_header_SDL_SDL_h" = xyes; then : - sdl_header="SDL/SDL.h" -else - ac_fn_c_check_header_mongrel "$LINENO" "SDL.h" "ac_cv_header_SDL_h" "$ac_includes_default" -if test "x$ac_cv_header_SDL_h" = xyes; then : - sdl_header="SDL.h" -else - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: SDL library not available - no sdl.h" >&5 -$as_echo "$as_me: WARNING: SDL library not available - no sdl.h" >&2;} -fi - - -fi - - - if test x"$sdl_header" != "xno"; then - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - SDL_SAVED_LIBS="$LIBS" - for lib in "" "-lSDL" "-lSDLmain -lSDL"; do - LIBS="$SDL_SAVED_LIBS $lib" - # Perform a full link to ensure SDL_main is resolved if needed. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - #include <$sdl_header> - int main(int argc, char** argv) { - SDL_Init(0); - return 0; - } -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - SDL_LIBS="$LDFLAGS $LIBS" - SDL_INCLUDES="$SDL_INCLUDES -DWEBP_HAVE_SDL" - -$as_echo "#define WEBP_HAVE_SDL 1" >>confdefs.h - - sdl_support=yes - -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - if test x"$sdl_support" = "xyes"; then - break - fi - done - # LIBS is restored by LIBCHECK_EPILOGUE - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - if test x"$sdl_header" = "xSDL.h"; then - SDL_INCLUDES="$SDL_INCLUDES -DWEBP_HAVE_JUST_SDL_H" - fi - fi - - - CPPFLAGS=$SAVED_CPPFLAGS - LIBS=$SAVED_LIBS - - if test x"$sdl_support" = "xyes"; then - build_vwebp_sdl=yes - else - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Optional SDL library not found" >&5 -$as_echo "$as_me: WARNING: Optional SDL library not found" >&2;} - fi - -fi - - if test "$build_vwebp_sdl" = "yes"; then - BUILD_VWEBP_SDL_TRUE= - BUILD_VWEBP_SDL_FALSE='#' -else - BUILD_VWEBP_SDL_TRUE='#' - BUILD_VWEBP_SDL_FALSE= -fi - - - -# Check whether --enable-png was given. -if test "${enable_png+set}" = set; then : - enableval=$enable_png; -fi - -if test "x$enable_png" != "xno"; then : - - PNG_INCLUDES=""; PNG_LIBS="" - for ac_prog in libpng-config libpng16-config libpng15-config libpng14-config \ - libpng12-config -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_LIBPNG_CONFIG+:} false; then : - $as_echo_n "(cached) " >&6 -else - case $LIBPNG_CONFIG in - [\\/]* | ?:[\\/]*) - ac_cv_path_LIBPNG_CONFIG="$LIBPNG_CONFIG" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_LIBPNG_CONFIG="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -LIBPNG_CONFIG=$ac_cv_path_LIBPNG_CONFIG -if test -n "$LIBPNG_CONFIG"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBPNG_CONFIG" >&5 -$as_echo "$LIBPNG_CONFIG" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$LIBPNG_CONFIG" && break -done - - if test -n "$LIBPNG_CONFIG"; then - PNG_INCLUDES=`$LIBPNG_CONFIG --cflags` - PNG_LIBS="`$LIBPNG_CONFIG --ldflags`" - fi - - -# Check whether --with-pngincludedir was given. -if test "${with_pngincludedir+set}" = set; then : - withval=$with_pngincludedir; PNG_INCLUDES="-I$withval" -fi - - -# Check whether --with-pnglibdir was given. -if test "${with_pnglibdir+set}" = set; then : - withval=$with_pnglibdir; PNG_LIBS="-L$withval" -fi - - - SAVED_CPPFLAGS=$CPPFLAGS - SAVED_LIBS=$LIBS - CPPFLAGS="$PNG_INCLUDES $CPPFLAGS" - LIBS="$PNG_LIBS $LIBS" - ac_fn_c_check_header_mongrel "$LINENO" "png.h" "ac_cv_header_png_h" "$ac_includes_default" -if test "x$ac_cv_header_png_h" = xyes; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing png_get_libpng_ver" >&5 -$as_echo_n "checking for library containing png_get_libpng_ver... " >&6; } -if ${ac_cv_search_png_get_libpng_ver+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_func_search_save_LIBS=$LIBS -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char png_get_libpng_ver (); -int -main () -{ -return png_get_libpng_ver (); - ; - return 0; -} -_ACEOF -for ac_lib in '' png; do - if test -z "$ac_lib"; then - ac_res="none required" - else - ac_res=-l$ac_lib - LIBS="-l$ac_lib $MATH_LIBS $ac_func_search_save_LIBS" - fi - if ac_fn_c_try_link "$LINENO"; then : - ac_cv_search_png_get_libpng_ver=$ac_res -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext - if ${ac_cv_search_png_get_libpng_ver+:} false; then : - break -fi -done -if ${ac_cv_search_png_get_libpng_ver+:} false; then : - -else - ac_cv_search_png_get_libpng_ver=no -fi -rm conftest.$ac_ext -LIBS=$ac_func_search_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_png_get_libpng_ver" >&5 -$as_echo "$ac_cv_search_png_get_libpng_ver" >&6; } -ac_res=$ac_cv_search_png_get_libpng_ver -if test "$ac_res" != no; then : - test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" - test "$ac_cv_search_png_get_libpng_ver" = "none required" \ - || PNG_LIBS="$PNG_LIBS $ac_cv_search_png_get_libpng_ver" - PNG_INCLUDES="$PNG_INCLUDES -DWEBP_HAVE_PNG" - -$as_echo "#define WEBP_HAVE_PNG 1" >>confdefs.h - - png_support=yes - -else - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Optional png library not found" >&5 -$as_echo "$as_me: WARNING: Optional png library not found" >&2;} - PNG_LIBS="" - PNG_INCLUDES="" - -fi - -else - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: png library not available - no png.h" >&5 -$as_echo "$as_me: WARNING: png library not available - no png.h" >&2;} - PNG_LIBS="" - PNG_INCLUDES="" - -fi - - - - - CPPFLAGS=$SAVED_CPPFLAGS - LIBS=$SAVED_LIBS - -fi - - -# Check whether --enable-jpeg was given. -if test "${enable_jpeg+set}" = set; then : - enableval=$enable_jpeg; -fi - -if test "x$enable_jpeg" != "xno"; then : - - JPEG_INCLUDES=""; JPEG_LIBS="" - -# Check whether --with-jpegincludedir was given. -if test "${with_jpegincludedir+set}" = set; then : - withval=$with_jpegincludedir; JPEG_INCLUDES="-I$withval" -fi - - -# Check whether --with-jpeglibdir was given. -if test "${with_jpeglibdir+set}" = set; then : - withval=$with_jpeglibdir; JPEG_LIBS="-L$withval" -fi - - - SAVED_CPPFLAGS=$CPPFLAGS - SAVED_LIBS=$LIBS - CPPFLAGS="$JPEG_INCLUDES $CPPFLAGS" - LIBS="$JPEG_LIBS $LIBS" - ac_fn_c_check_header_mongrel "$LINENO" "jpeglib.h" "ac_cv_header_jpeglib_h" "$ac_includes_default" -if test "x$ac_cv_header_jpeglib_h" = xyes; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for jpeg_set_defaults in -ljpeg" >&5 -$as_echo_n "checking for jpeg_set_defaults in -ljpeg... " >&6; } -if ${ac_cv_lib_jpeg_jpeg_set_defaults+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ljpeg $MATH_LIBS $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char jpeg_set_defaults (); -int -main () -{ -return jpeg_set_defaults (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_jpeg_jpeg_set_defaults=yes -else - ac_cv_lib_jpeg_jpeg_set_defaults=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_jpeg_jpeg_set_defaults" >&5 -$as_echo "$ac_cv_lib_jpeg_jpeg_set_defaults" >&6; } -if test "x$ac_cv_lib_jpeg_jpeg_set_defaults" = xyes; then : - JPEG_LIBS="$JPEG_LIBS -ljpeg" - JPEG_INCLUDES="$JPEG_INCLUDES -DWEBP_HAVE_JPEG" - -$as_echo "#define WEBP_HAVE_JPEG 1" >>confdefs.h - - jpeg_support=yes - -else - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Optional jpeg library not found" >&5 -$as_echo "$as_me: WARNING: Optional jpeg library not found" >&2;} -fi - -else - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: jpeg library not available - no jpeglib.h" >&5 -$as_echo "$as_me: WARNING: jpeg library not available - no jpeglib.h" >&2;} - -fi - - - - - CPPFLAGS=$SAVED_CPPFLAGS - LIBS=$SAVED_LIBS - -fi - - -# Check whether --enable-tiff was given. -if test "${enable_tiff+set}" = set; then : - enableval=$enable_tiff; -fi - -if test "x$enable_tiff" != "xno"; then : - - TIFF_INCLUDES=""; TIFF_LIBS="" - -# Check whether --with-tiffincludedir was given. -if test "${with_tiffincludedir+set}" = set; then : - withval=$with_tiffincludedir; TIFF_INCLUDES="-I$withval" -fi - - -# Check whether --with-tifflibdir was given. -if test "${with_tifflibdir+set}" = set; then : - withval=$with_tifflibdir; TIFF_LIBS="-L$withval" -fi - - - SAVED_CPPFLAGS=$CPPFLAGS - SAVED_LIBS=$LIBS - CPPFLAGS="$TIFF_INCLUDES $CPPFLAGS" - LIBS="$TIFF_LIBS $LIBS" - ac_fn_c_check_header_mongrel "$LINENO" "tiffio.h" "ac_cv_header_tiffio_h" "$ac_includes_default" -if test "x$ac_cv_header_tiffio_h" = xyes; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for TIFFGetVersion in -ltiff" >&5 -$as_echo_n "checking for TIFFGetVersion in -ltiff... " >&6; } -if ${ac_cv_lib_tiff_TIFFGetVersion+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ltiff $MATH_LIBS $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char TIFFGetVersion (); -int -main () -{ -return TIFFGetVersion (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_tiff_TIFFGetVersion=yes -else - ac_cv_lib_tiff_TIFFGetVersion=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_tiff_TIFFGetVersion" >&5 -$as_echo "$ac_cv_lib_tiff_TIFFGetVersion" >&6; } -if test "x$ac_cv_lib_tiff_TIFFGetVersion" = xyes; then : - TIFF_LIBS="$TIFF_LIBS -ltiff" - TIFF_INCLUDES="$TIFF_INCLUDES -DWEBP_HAVE_TIFF" - -$as_echo "#define WEBP_HAVE_TIFF 1" >>confdefs.h - - tiff_support=yes - -else - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Optional tiff library not found" >&5 -$as_echo "$as_me: WARNING: Optional tiff library not found" >&2;} -fi - -else - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: tiff library not available - no tiffio.h" >&5 -$as_echo "$as_me: WARNING: tiff library not available - no tiffio.h" >&2;} - -fi - - - - - CPPFLAGS=$SAVED_CPPFLAGS - LIBS=$SAVED_LIBS - -fi - - -# Check whether --enable-gif was given. -if test "${enable_gif+set}" = set; then : - enableval=$enable_gif; -fi - -if test "x$enable_gif" != "xno"; then : - - GIF_INCLUDES=""; GIF_LIBS="" - -# Check whether --with-gifincludedir was given. -if test "${with_gifincludedir+set}" = set; then : - withval=$with_gifincludedir; GIF_INCLUDES="-I$withval" -fi - - -# Check whether --with-giflibdir was given. -if test "${with_giflibdir+set}" = set; then : - withval=$with_giflibdir; GIF_LIBS="-L$withval" -fi - - - SAVED_CPPFLAGS=$CPPFLAGS - SAVED_LIBS=$LIBS - CPPFLAGS="$GIF_INCLUDES $CPPFLAGS" - LIBS="$GIF_LIBS $LIBS" - ac_fn_c_check_header_mongrel "$LINENO" "gif_lib.h" "ac_cv_header_gif_lib_h" "$ac_includes_default" -if test "x$ac_cv_header_gif_lib_h" = xyes; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for DGifOpenFileHandle in -lgif" >&5 -$as_echo_n "checking for DGifOpenFileHandle in -lgif... " >&6; } -if ${ac_cv_lib_gif_DGifOpenFileHandle+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lgif $MATH_LIBS $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char DGifOpenFileHandle (); -int -main () -{ -return DGifOpenFileHandle (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_gif_DGifOpenFileHandle=yes -else - ac_cv_lib_gif_DGifOpenFileHandle=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_gif_DGifOpenFileHandle" >&5 -$as_echo "$ac_cv_lib_gif_DGifOpenFileHandle" >&6; } -if test "x$ac_cv_lib_gif_DGifOpenFileHandle" = xyes; then : - GIF_LIBS="$GIF_LIBS -lgif" - -$as_echo "#define WEBP_HAVE_GIF 1" >>confdefs.h - - gif_support=yes - -else - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Optional gif library not found" >&5 -$as_echo "$as_me: WARNING: Optional gif library not found" >&2;} -fi - -else - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: gif library not available - no gif_lib.h" >&5 -$as_echo "$as_me: WARNING: gif library not available - no gif_lib.h" >&2;} - -fi - - - - - CPPFLAGS=$SAVED_CPPFLAGS - LIBS=$SAVED_LIBS - - if test "$gif_support" = "yes" -a \ - "$enable_libwebpdemux" = "yes"; then - build_anim_diff=yes - fi - - if test "$gif_support" = "yes" -a \ - "$enable_libwebpmux" = "yes"; then - build_gif2webp=yes - fi - -fi - if test "${build_anim_diff}" = "yes"; then - BUILD_ANIMDIFF_TRUE= - BUILD_ANIMDIFF_FALSE='#' -else - BUILD_ANIMDIFF_TRUE='#' - BUILD_ANIMDIFF_FALSE= -fi - - if test "${build_gif2webp}" = "yes"; then - BUILD_GIF2WEBP_TRUE= - BUILD_GIF2WEBP_FALSE='#' -else - BUILD_GIF2WEBP_TRUE='#' - BUILD_GIF2WEBP_FALSE= -fi - - -if test "$enable_libwebpdemux" = "yes" -a "$enable_libwebpmux" = "yes"; then - build_img2webp=yes -fi - if test "${build_img2webp}" = "yes"; then - BUILD_IMG2WEBP_TRUE= - BUILD_IMG2WEBP_FALSE='#' -else - BUILD_IMG2WEBP_TRUE='#' - BUILD_IMG2WEBP_FALSE= -fi - - -if test "$enable_libwebpmux" = "yes"; then - build_webpinfo=yes -fi - if test "${build_webpinfo}" = "yes"; then - BUILD_WEBPINFO_TRUE= - BUILD_WEBPINFO_FALSE='#' -else - BUILD_WEBPINFO_TRUE='#' - BUILD_WEBPINFO_FALSE= -fi - - - -# Check whether --enable-wic was given. -if test "${enable_wic+set}" = set; then : - enableval=$enable_wic; -else - enable_wic=yes -fi - - -case $host_os in -mingw*) -if test "$enable_wic" = "yes"; then - for ac_header in wincodec.h shlwapi.h windows.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -fi - -done - - if test "$ac_cv_header_wincodec_h" = "yes"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Windows Imaging Component support" >&5 -$as_echo_n "checking for Windows Imaging Component support... " >&6; } - SAVED_LIBS=$LIBS - LIBS="-lshlwapi -lole32 $LIBS" - # match include structure from [cd]webp.c - wic_headers=" - #define INITGUID - #define CINTERFACE - #define COBJMACROS - #define _WIN32_IE 0x500 - - #include - #include - #include - " - # test for functions from each lib and the GUID is created properly - wic_main=" - int main(void) { - CLSID_WICImagingFactory; - CoInitialize(NULL); - SHCreateStreamOnFile(NULL, 0, NULL); - return 0; - } - " - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - $wic_headers - $wic_main -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - wic_support=yes -else - wic_support=no - -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - - test "$wic_support" = "yes" || LIBS=$SAVED_LIBS - { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${wic_support-no}" >&5 -$as_echo "${wic_support-no}" >&6; } - fi -fi -esac - - -USE_SWAP_16BIT_CSP="" -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if --enable-swap-16bit-csp option is specified" >&5 -$as_echo_n "checking if --enable-swap-16bit-csp option is specified... " >&6; } -# Check whether --enable-swap-16bit-csp was given. -if test "${enable_swap_16bit_csp+set}" = set; then : - enableval=$enable_swap_16bit_csp; -fi - -if test "$enable_swap_16bit_csp" = "yes"; then - USE_SWAP_16BIT_CSP="-DWEBP_SWAP_16BIT_CSP=1" -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: ${enable_swap_16bit_csp-no}" >&5 -$as_echo "${enable_swap_16bit_csp-no}" >&6; } - - - - -$as_echo "#define WEBP_NEAR_LOSSLESS 1" >>confdefs.h - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if --disable-near-lossless option is specified" >&5 -$as_echo_n "checking if --disable-near-lossless option is specified... " >&6; } -# Check whether --enable-near_lossless was given. -if test "${enable_near_lossless+set}" = set; then : - enableval=$enable_near_lossless; -else - enable_near_lossless=yes -fi - -if test "$enable_near_lossless" = "no"; then - -$as_echo "#define WEBP_NEAR_LOSSLESS 0" >>confdefs.h - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether libwebpmux is to be built" >&5 -$as_echo_n "checking whether libwebpmux is to be built... " >&6; } -# Check whether --enable-libwebpmux was given. -if test "${enable_libwebpmux+set}" = set; then : - enableval=$enable_libwebpmux; -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: ${enable_libwebpmux-no}" >&5 -$as_echo "${enable_libwebpmux-no}" >&6; } - if test "$enable_libwebpmux" = "yes"; then - BUILD_MUX_TRUE= - BUILD_MUX_FALSE='#' -else - BUILD_MUX_TRUE='#' - BUILD_MUX_FALSE= -fi - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether libwebpdemux is to be built" >&5 -$as_echo_n "checking whether libwebpdemux is to be built... " >&6; } -# Check whether --enable-libwebpdemux was given. -if test "${enable_libwebpdemux+set}" = set; then : - enableval=$enable_libwebpdemux; -else - enable_libwebpdemux=yes -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: ${enable_libwebpdemux-no}" >&5 -$as_echo "${enable_libwebpdemux-no}" >&6; } - if test "$enable_libwebpdemux" = "yes"; then - BUILD_DEMUX_TRUE= - BUILD_DEMUX_FALSE='#' -else - BUILD_DEMUX_TRUE='#' - BUILD_DEMUX_FALSE= -fi - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether decoder library is to be built" >&5 -$as_echo_n "checking whether decoder library is to be built... " >&6; } -# Check whether --enable-libwebpdecoder was given. -if test "${enable_libwebpdecoder+set}" = set; then : - enableval=$enable_libwebpdecoder; -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: ${enable_libwebpdecoder-no}" >&5 -$as_echo "${enable_libwebpdecoder-no}" >&6; } - if test "$enable_libwebpdecoder" = "yes"; then - BUILD_LIBWEBPDECODER_TRUE= - BUILD_LIBWEBPDECODER_FALSE='#' -else - BUILD_LIBWEBPDECODER_TRUE='#' - BUILD_LIBWEBPDECODER_FALSE= -fi - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether libwebpextras is to be built" >&5 -$as_echo_n "checking whether libwebpextras is to be built... " >&6; } -# Check whether --enable-libwebpextras was given. -if test "${enable_libwebpextras+set}" = set; then : - enableval=$enable_libwebpextras; -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: ${enable_libwebpextras-no}" >&5 -$as_echo "${enable_libwebpextras-no}" >&6; } - if test "$enable_libwebpextras" = "yes"; then - BUILD_EXTRAS_TRUE= - BUILD_EXTRAS_FALSE='#' -else - BUILD_EXTRAS_TRUE='#' - BUILD_EXTRAS_FALSE= -fi - - - - -ac_config_headers="$ac_config_headers src/webp/config.h" - -ac_config_files="$ac_config_files Makefile src/Makefile man/Makefile examples/Makefile extras/Makefile imageio/Makefile src/dec/Makefile src/enc/Makefile src/dsp/Makefile src/demux/Makefile src/mux/Makefile src/utils/Makefile src/libwebp.pc src/libwebpdecoder.pc src/demux/libwebpdemux.pc src/mux/libwebpmux.pc" - - - -cat >confcache <<\_ACEOF -# This file is a shell script that caches the results of configure -# tests run on this system so they can be shared between configure -# scripts and configure runs, see configure's option --config-cache. -# It is not useful on other systems. If it contains results you don't -# want to keep, you may remove or edit it. -# -# config.status only pays attention to the cache file if you give it -# the --recheck option to rerun configure. -# -# `ac_cv_env_foo' variables (set or unset) will be overridden when -# loading this file, other *unset* `ac_cv_foo' will be assigned the -# following values. - -_ACEOF - -# The following way of writing the cache mishandles newlines in values, -# but we know of no workaround that is simple, portable, and efficient. -# So, we kill variables containing newlines. -# Ultrix sh set writes to stderr and can't be redirected directly, -# and sets the high bit in the cache file unless we assign to the vars. -( - for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do - eval ac_val=\$$ac_var - case $ac_val in #( - *${as_nl}*) - case $ac_var in #( - *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; - esac - case $ac_var in #( - _ | IFS | as_nl) ;; #( - BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( - *) { eval $ac_var=; unset $ac_var;} ;; - esac ;; - esac - done - - (set) 2>&1 | - case $as_nl`(ac_space=' '; set) 2>&1` in #( - *${as_nl}ac_space=\ *) - # `set' does not quote correctly, so add quotes: double-quote - # substitution turns \\\\ into \\, and sed turns \\ into \. - sed -n \ - "s/'/'\\\\''/g; - s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" - ;; #( - *) - # `set' quotes correctly as required by POSIX, so do not add quotes. - sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" - ;; - esac | - sort -) | - sed ' - /^ac_cv_env_/b end - t clear - :clear - s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ - t end - s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ - :end' >>confcache -if diff "$cache_file" confcache >/dev/null 2>&1; then :; else - if test -w "$cache_file"; then - if test "x$cache_file" != "x/dev/null"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 -$as_echo "$as_me: updating cache $cache_file" >&6;} - if test ! -f "$cache_file" || test -h "$cache_file"; then - cat confcache >"$cache_file" - else - case $cache_file in #( - */* | ?:*) - mv -f confcache "$cache_file"$$ && - mv -f "$cache_file"$$ "$cache_file" ;; #( - *) - mv -f confcache "$cache_file" ;; - esac - fi - fi - else - { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 -$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} - fi -fi -rm -f confcache - -test "x$prefix" = xNONE && prefix=$ac_default_prefix -# Let make expand exec_prefix. -test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' - -DEFS=-DHAVE_CONFIG_H - -ac_libobjs= -ac_ltlibobjs= -U= -for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue - # 1. Remove the extension, and $U if already installed. - ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' - ac_i=`$as_echo "$ac_i" | sed "$ac_script"` - # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR - # will be set to the directory where LIBOBJS objects are built. - as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" - as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' -done -LIBOBJS=$ac_libobjs - -LTLIBOBJS=$ac_ltlibobjs - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 -$as_echo_n "checking that generated files are newer than configure... " >&6; } - if test -n "$am_sleep_pid"; then - # Hide warnings about reused PIDs. - wait $am_sleep_pid 2>/dev/null - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5 -$as_echo "done" >&6; } - if test -n "$EXEEXT"; then - am__EXEEXT_TRUE= - am__EXEEXT_FALSE='#' -else - am__EXEEXT_TRUE='#' - am__EXEEXT_FALSE= -fi - -if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then - as_fn_error $? "conditional \"AMDEP\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then - as_fn_error $? "conditional \"am__fastdepCC\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi - -if test -z "${BUILD_VWEBP_TRUE}" && test -z "${BUILD_VWEBP_FALSE}"; then - as_fn_error $? "conditional \"BUILD_VWEBP\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${BUILD_VWEBP_SDL_TRUE}" && test -z "${BUILD_VWEBP_SDL_FALSE}"; then - as_fn_error $? "conditional \"BUILD_VWEBP_SDL\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${BUILD_ANIMDIFF_TRUE}" && test -z "${BUILD_ANIMDIFF_FALSE}"; then - as_fn_error $? "conditional \"BUILD_ANIMDIFF\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${BUILD_GIF2WEBP_TRUE}" && test -z "${BUILD_GIF2WEBP_FALSE}"; then - as_fn_error $? "conditional \"BUILD_GIF2WEBP\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${BUILD_IMG2WEBP_TRUE}" && test -z "${BUILD_IMG2WEBP_FALSE}"; then - as_fn_error $? "conditional \"BUILD_IMG2WEBP\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${BUILD_WEBPINFO_TRUE}" && test -z "${BUILD_WEBPINFO_FALSE}"; then - as_fn_error $? "conditional \"BUILD_WEBPINFO\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${BUILD_MUX_TRUE}" && test -z "${BUILD_MUX_FALSE}"; then - as_fn_error $? "conditional \"BUILD_MUX\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${BUILD_DEMUX_TRUE}" && test -z "${BUILD_DEMUX_FALSE}"; then - as_fn_error $? "conditional \"BUILD_DEMUX\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${BUILD_LIBWEBPDECODER_TRUE}" && test -z "${BUILD_LIBWEBPDECODER_FALSE}"; then - as_fn_error $? "conditional \"BUILD_LIBWEBPDECODER\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${BUILD_EXTRAS_TRUE}" && test -z "${BUILD_EXTRAS_FALSE}"; then - as_fn_error $? "conditional \"BUILD_EXTRAS\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi - -: "${CONFIG_STATUS=./config.status}" -ac_write_fail=0 -ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files $CONFIG_STATUS" -{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 -$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} -as_write_fail=0 -cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 -#! $SHELL -# Generated by $as_me. -# Run this file to recreate the current configuration. -# Compiler output produced by configure, useful for debugging -# configure, is in config.log if it exists. - -debug=false -ac_cs_recheck=false -ac_cs_silent=false - -SHELL=\${CONFIG_SHELL-$SHELL} -export SHELL -_ASEOF -cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 -## -------------------- ## -## M4sh Initialization. ## -## -------------------- ## - -# Be more Bourne compatible -DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in #( - *posix*) : - set -o posix ;; #( - *) : - ;; -esac -fi - - -as_nl=' -' -export as_nl -# Printing a long string crashes Solaris 7 /usr/bin/printf. -as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo -# Prefer a ksh shell builtin over an external printf program on Solaris, -# but without wasting forks for bash or zsh. -if test -z "$BASH_VERSION$ZSH_VERSION" \ - && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='print -r --' - as_echo_n='print -rn --' -elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='printf %s\n' - as_echo_n='printf %s' -else - if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then - as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' - as_echo_n='/usr/ucb/echo -n' - else - as_echo_body='eval expr "X$1" : "X\\(.*\\)"' - as_echo_n_body='eval - arg=$1; - case $arg in #( - *"$as_nl"*) - expr "X$arg" : "X\\(.*\\)$as_nl"; - arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; - esac; - expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" - ' - export as_echo_n_body - as_echo_n='sh -c $as_echo_n_body as_echo' - fi - export as_echo_body - as_echo='sh -c $as_echo_body as_echo' -fi - -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - PATH_SEPARATOR=: - (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { - (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || - PATH_SEPARATOR=';' - } -fi - - -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -IFS=" "" $as_nl" - -# Find who we are. Look in the path if we contain no directory separator. -as_myself= -case $0 in #(( - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break - done -IFS=$as_save_IFS - - ;; -esac -# We did not find ourselves, most probably we were run as `sh COMMAND' -# in which case we are not to be found in the path. -if test "x$as_myself" = x; then - as_myself=$0 -fi -if test ! -f "$as_myself"; then - $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 - exit 1 -fi - -# Unset variables that we do not need and which cause bugs (e.g. in -# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" -# suppresses any "Segmentation fault" message there. '((' could -# trigger a bug in pdksh 5.2.14. -for as_var in BASH_ENV ENV MAIL MAILPATH -do eval test x\${$as_var+set} = xset \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - - -# as_fn_error STATUS ERROR [LINENO LOG_FD] -# ---------------------------------------- -# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are -# provided, also output the error to LOG_FD, referencing LINENO. Then exit the -# script with STATUS, using 1 if that was 0. -as_fn_error () -{ - as_status=$1; test $as_status -eq 0 && as_status=1 - if test "$4"; then - as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 - fi - $as_echo "$as_me: error: $2" >&2 - as_fn_exit $as_status -} # as_fn_error - - -# as_fn_set_status STATUS -# ----------------------- -# Set $? to STATUS, without forking. -as_fn_set_status () -{ - return $1 -} # as_fn_set_status - -# as_fn_exit STATUS -# ----------------- -# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. -as_fn_exit () -{ - set +e - as_fn_set_status $1 - exit $1 -} # as_fn_exit - -# as_fn_unset VAR -# --------------- -# Portably unset VAR. -as_fn_unset () -{ - { eval $1=; unset $1;} -} -as_unset=as_fn_unset -# as_fn_append VAR VALUE -# ---------------------- -# Append the text in VALUE to the end of the definition contained in VAR. Take -# advantage of any shell optimizations that allow amortized linear growth over -# repeated appends, instead of the typical quadratic growth present in naive -# implementations. -if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : - eval 'as_fn_append () - { - eval $1+=\$2 - }' -else - as_fn_append () - { - eval $1=\$$1\$2 - } -fi # as_fn_append - -# as_fn_arith ARG... -# ------------------ -# Perform arithmetic evaluation on the ARGs, and store the result in the -# global $as_val. Take advantage of shells that can avoid forks. The arguments -# must be portable across $(()) and expr. -if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : - eval 'as_fn_arith () - { - as_val=$(( $* )) - }' -else - as_fn_arith () - { - as_val=`expr "$@" || test $? -eq 1` - } -fi # as_fn_arith - - -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - -if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then - as_basename=basename -else - as_basename=false -fi - -if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then - as_dirname=dirname -else - as_dirname=false -fi - -as_me=`$as_basename -- "$0" || -$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ - s//\1/ - q - } - /^X\/\(\/\/\)$/{ - s//\1/ - q - } - /^X\/\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - -# Avoid depending upon Character Ranges. -as_cr_letters='abcdefghijklmnopqrstuvwxyz' -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -as_cr_Letters=$as_cr_letters$as_cr_LETTERS -as_cr_digits='0123456789' -as_cr_alnum=$as_cr_Letters$as_cr_digits - -ECHO_C= ECHO_N= ECHO_T= -case `echo -n x` in #((((( --n*) - case `echo 'xy\c'` in - *c*) ECHO_T=' ';; # ECHO_T is single tab character. - xy) ECHO_C='\c';; - *) echo `echo ksh88 bug on AIX 6.1` > /dev/null - ECHO_T=' ';; - esac;; -*) - ECHO_N='-n';; -esac - -rm -f conf$$ conf$$.exe conf$$.file -if test -d conf$$.dir; then - rm -f conf$$.dir/conf$$.file -else - rm -f conf$$.dir - mkdir conf$$.dir 2>/dev/null -fi -if (echo >conf$$.file) 2>/dev/null; then - if ln -s conf$$.file conf$$ 2>/dev/null; then - as_ln_s='ln -s' - # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -pR'. - ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || - as_ln_s='cp -pR' - elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln - else - as_ln_s='cp -pR' - fi -else - as_ln_s='cp -pR' -fi -rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file -rmdir conf$$.dir 2>/dev/null - - -# as_fn_mkdir_p -# ------------- -# Create "$as_dir" as a directory, including parents if necessary. -as_fn_mkdir_p () -{ - - case $as_dir in #( - -*) as_dir=./$as_dir;; - esac - test -d "$as_dir" || eval $as_mkdir_p || { - as_dirs= - while :; do - case $as_dir in #( - *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( - *) as_qdir=$as_dir;; - esac - as_dirs="'$as_qdir' $as_dirs" - as_dir=`$as_dirname -- "$as_dir" || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - test -d "$as_dir" && break - done - test -z "$as_dirs" || eval "mkdir $as_dirs" - } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" - - -} # as_fn_mkdir_p -if mkdir -p . 2>/dev/null; then - as_mkdir_p='mkdir -p "$as_dir"' -else - test -d ./-p && rmdir ./-p - as_mkdir_p=false -fi - - -# as_fn_executable_p FILE -# ----------------------- -# Test if FILE is an executable regular file. -as_fn_executable_p () -{ - test -f "$1" && test -x "$1" -} # as_fn_executable_p -as_test_x='test -x' -as_executable_p=as_fn_executable_p - -# Sed expression to map a string onto a valid CPP name. -as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" - -# Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" - - -exec 6>&1 -## ----------------------------------- ## -## Main body of $CONFIG_STATUS script. ## -## ----------------------------------- ## -_ASEOF -test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -# Save the log message, to keep $0 and so on meaningful, and to -# report actual input values of CONFIG_FILES etc. instead of their -# values after options handling. -ac_log=" -This file was extended by libwebp $as_me 1.1.0, which was -generated by GNU Autoconf 2.69. Invocation command line was - - CONFIG_FILES = $CONFIG_FILES - CONFIG_HEADERS = $CONFIG_HEADERS - CONFIG_LINKS = $CONFIG_LINKS - CONFIG_COMMANDS = $CONFIG_COMMANDS - $ $0 $@ - -on `(hostname || uname -n) 2>/dev/null | sed 1q` -" - -_ACEOF - -case $ac_config_files in *" -"*) set x $ac_config_files; shift; ac_config_files=$*;; -esac - -case $ac_config_headers in *" -"*) set x $ac_config_headers; shift; ac_config_headers=$*;; -esac - - -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -# Files that config.status was made for. -config_files="$ac_config_files" -config_headers="$ac_config_headers" -config_commands="$ac_config_commands" - -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -ac_cs_usage="\ -\`$as_me' instantiates files and other configuration actions -from templates according to the current configuration. Unless the files -and actions are specified as TAGs, all are instantiated by default. - -Usage: $0 [OPTION]... [TAG]... - - -h, --help print this help, then exit - -V, --version print version number and configuration settings, then exit - --config print configuration, then exit - -q, --quiet, --silent - do not print progress messages - -d, --debug don't remove temporary files - --recheck update $as_me by reconfiguring in the same conditions - --file=FILE[:TEMPLATE] - instantiate the configuration file FILE - --header=FILE[:TEMPLATE] - instantiate the configuration header FILE - -Configuration files: -$config_files - -Configuration headers: -$config_headers - -Configuration commands: -$config_commands - -Report bugs to . -libwebp home page: ." - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" -ac_cs_version="\\ -libwebp config.status 1.1.0 -configured by $0, generated by GNU Autoconf 2.69, - with options \\"\$ac_cs_config\\" - -Copyright (C) 2012 Free Software Foundation, Inc. -This config.status script is free software; the Free Software Foundation -gives unlimited permission to copy, distribute and modify it." - -ac_pwd='$ac_pwd' -srcdir='$srcdir' -INSTALL='$INSTALL' -MKDIR_P='$MKDIR_P' -AWK='$AWK' -test -n "\$AWK" || AWK=awk -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -# The default lists apply if the user does not specify any file. -ac_need_defaults=: -while test $# != 0 -do - case $1 in - --*=?*) - ac_option=`expr "X$1" : 'X\([^=]*\)='` - ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` - ac_shift=: - ;; - --*=) - ac_option=`expr "X$1" : 'X\([^=]*\)='` - ac_optarg= - ac_shift=: - ;; - *) - ac_option=$1 - ac_optarg=$2 - ac_shift=shift - ;; - esac - - case $ac_option in - # Handling of the options. - -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) - ac_cs_recheck=: ;; - --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) - $as_echo "$ac_cs_version"; exit ;; - --config | --confi | --conf | --con | --co | --c ) - $as_echo "$ac_cs_config"; exit ;; - --debug | --debu | --deb | --de | --d | -d ) - debug=: ;; - --file | --fil | --fi | --f ) - $ac_shift - case $ac_optarg in - *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; - '') as_fn_error $? "missing file argument" ;; - esac - as_fn_append CONFIG_FILES " '$ac_optarg'" - ac_need_defaults=false;; - --header | --heade | --head | --hea ) - $ac_shift - case $ac_optarg in - *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - as_fn_append CONFIG_HEADERS " '$ac_optarg'" - ac_need_defaults=false;; - --he | --h) - # Conflict between --help and --header - as_fn_error $? "ambiguous option: \`$1' -Try \`$0 --help' for more information.";; - --help | --hel | -h ) - $as_echo "$ac_cs_usage"; exit ;; - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil | --si | --s) - ac_cs_silent=: ;; - - # This is an error. - -*) as_fn_error $? "unrecognized option: \`$1' -Try \`$0 --help' for more information." ;; - - *) as_fn_append ac_config_targets " $1" - ac_need_defaults=false ;; - - esac - shift -done - -ac_configure_extra_args= - -if $ac_cs_silent; then - exec 6>/dev/null - ac_configure_extra_args="$ac_configure_extra_args --silent" -fi - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -if \$ac_cs_recheck; then - set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion - shift - \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 - CONFIG_SHELL='$SHELL' - export CONFIG_SHELL - exec "\$@" -fi - -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -exec 5>>config.log -{ - echo - sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX -## Running $as_me. ## -_ASBOX - $as_echo "$ac_log" -} >&5 - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -# -# INIT-COMMANDS -# -AMDEP_TRUE="$AMDEP_TRUE" MAKE="${MAKE-make}" - - -# The HP-UX ksh and POSIX shell print the target directory to stdout -# if CDPATH is set. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -sed_quote_subst='$sed_quote_subst' -double_quote_subst='$double_quote_subst' -delay_variable_subst='$delay_variable_subst' -macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`' -macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`' -enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`' -enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`' -pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`' -enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`' -shared_archive_member_spec='`$ECHO "$shared_archive_member_spec" | $SED "$delay_single_quote_subst"`' -SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`' -ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`' -PATH_SEPARATOR='`$ECHO "$PATH_SEPARATOR" | $SED "$delay_single_quote_subst"`' -host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`' -host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`' -host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`' -build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`' -build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`' -build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`' -SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`' -Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`' -GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`' -EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`' -FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`' -LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`' -NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`' -LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`' -max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`' -ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`' -exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`' -lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`' -lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`' -lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`' -lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`' -lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`' -reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`' -reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`' -OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`' -deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`' -file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`' -file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`' -want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`' -DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`' -sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`' -AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`' -AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`' -archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`' -STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`' -RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`' -old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`' -old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`' -old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`' -lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`' -CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`' -CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`' -compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`' -GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`' -lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`' -lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`' -lt_cv_sys_global_symbol_to_import='`$ECHO "$lt_cv_sys_global_symbol_to_import" | $SED "$delay_single_quote_subst"`' -lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`' -lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`' -lt_cv_nm_interface='`$ECHO "$lt_cv_nm_interface" | $SED "$delay_single_quote_subst"`' -nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`' -lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`' -lt_cv_truncate_bin='`$ECHO "$lt_cv_truncate_bin" | $SED "$delay_single_quote_subst"`' -objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`' -MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`' -lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`' -lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`' -lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`' -lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`' -lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`' -need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`' -MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`' -DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`' -NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`' -LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`' -OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`' -OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`' -libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`' -shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`' -extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`' -archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`' -enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`' -export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`' -whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`' -compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`' -old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`' -old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`' -archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`' -archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`' -module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`' -module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`' -with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`' -allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`' -no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`' -hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`' -hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`' -hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`' -hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`' -hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`' -hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`' -hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`' -inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`' -link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`' -always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`' -export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`' -exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`' -include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`' -prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`' -postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`' -file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`' -variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`' -need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`' -need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`' -version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`' -runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`' -shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`' -shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`' -libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`' -library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`' -soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`' -install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`' -postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`' -postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`' -finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`' -finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`' -hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`' -sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`' -configure_time_dlsearch_path='`$ECHO "$configure_time_dlsearch_path" | $SED "$delay_single_quote_subst"`' -configure_time_lt_sys_library_path='`$ECHO "$configure_time_lt_sys_library_path" | $SED "$delay_single_quote_subst"`' -hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`' -enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`' -enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`' -enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`' -old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`' -striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`' - -LTCC='$LTCC' -LTCFLAGS='$LTCFLAGS' -compiler='$compiler_DEFAULT' - -# A function that is used when there is no print builtin or printf. -func_fallback_echo () -{ - eval 'cat <<_LTECHO_EOF -\$1 -_LTECHO_EOF' -} - -# Quote evaled strings. -for var in SHELL \ -ECHO \ -PATH_SEPARATOR \ -SED \ -GREP \ -EGREP \ -FGREP \ -LD \ -NM \ -LN_S \ -lt_SP2NL \ -lt_NL2SP \ -reload_flag \ -OBJDUMP \ -deplibs_check_method \ -file_magic_cmd \ -file_magic_glob \ -want_nocaseglob \ -DLLTOOL \ -sharedlib_from_linklib_cmd \ -AR \ -AR_FLAGS \ -archiver_list_spec \ -STRIP \ -RANLIB \ -CC \ -CFLAGS \ -compiler \ -lt_cv_sys_global_symbol_pipe \ -lt_cv_sys_global_symbol_to_cdecl \ -lt_cv_sys_global_symbol_to_import \ -lt_cv_sys_global_symbol_to_c_name_address \ -lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ -lt_cv_nm_interface \ -nm_file_list_spec \ -lt_cv_truncate_bin \ -lt_prog_compiler_no_builtin_flag \ -lt_prog_compiler_pic \ -lt_prog_compiler_wl \ -lt_prog_compiler_static \ -lt_cv_prog_compiler_c_o \ -need_locks \ -MANIFEST_TOOL \ -DSYMUTIL \ -NMEDIT \ -LIPO \ -OTOOL \ -OTOOL64 \ -shrext_cmds \ -export_dynamic_flag_spec \ -whole_archive_flag_spec \ -compiler_needs_object \ -with_gnu_ld \ -allow_undefined_flag \ -no_undefined_flag \ -hardcode_libdir_flag_spec \ -hardcode_libdir_separator \ -exclude_expsyms \ -include_expsyms \ -file_list_spec \ -variables_saved_for_relink \ -libname_spec \ -library_names_spec \ -soname_spec \ -install_override_mode \ -finish_eval \ -old_striplib \ -striplib; do - case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in - *[\\\\\\\`\\"\\\$]*) - eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes - ;; - *) - eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" - ;; - esac -done - -# Double-quote double-evaled strings. -for var in reload_cmds \ -old_postinstall_cmds \ -old_postuninstall_cmds \ -old_archive_cmds \ -extract_expsyms_cmds \ -old_archive_from_new_cmds \ -old_archive_from_expsyms_cmds \ -archive_cmds \ -archive_expsym_cmds \ -module_cmds \ -module_expsym_cmds \ -export_symbols_cmds \ -prelink_cmds \ -postlink_cmds \ -postinstall_cmds \ -postuninstall_cmds \ -finish_cmds \ -sys_lib_search_path_spec \ -configure_time_dlsearch_path \ -configure_time_lt_sys_library_path; do - case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in - *[\\\\\\\`\\"\\\$]*) - eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes - ;; - *) - eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" - ;; - esac -done - -ac_aux_dir='$ac_aux_dir' - -# See if we are running on zsh, and set the options that allow our -# commands through without removal of \ escapes INIT. -if test -n "\${ZSH_VERSION+set}"; then - setopt NO_GLOB_SUBST -fi - - - PACKAGE='$PACKAGE' - VERSION='$VERSION' - RM='$RM' - ofile='$ofile' - - - - -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 - -# Handling of arguments. -for ac_config_target in $ac_config_targets -do - case $ac_config_target in - "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; - "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; - "src/webp/config.h") CONFIG_HEADERS="$CONFIG_HEADERS src/webp/config.h" ;; - "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; - "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; - "man/Makefile") CONFIG_FILES="$CONFIG_FILES man/Makefile" ;; - "examples/Makefile") CONFIG_FILES="$CONFIG_FILES examples/Makefile" ;; - "extras/Makefile") CONFIG_FILES="$CONFIG_FILES extras/Makefile" ;; - "imageio/Makefile") CONFIG_FILES="$CONFIG_FILES imageio/Makefile" ;; - "src/dec/Makefile") CONFIG_FILES="$CONFIG_FILES src/dec/Makefile" ;; - "src/enc/Makefile") CONFIG_FILES="$CONFIG_FILES src/enc/Makefile" ;; - "src/dsp/Makefile") CONFIG_FILES="$CONFIG_FILES src/dsp/Makefile" ;; - "src/demux/Makefile") CONFIG_FILES="$CONFIG_FILES src/demux/Makefile" ;; - "src/mux/Makefile") CONFIG_FILES="$CONFIG_FILES src/mux/Makefile" ;; - "src/utils/Makefile") CONFIG_FILES="$CONFIG_FILES src/utils/Makefile" ;; - "src/libwebp.pc") CONFIG_FILES="$CONFIG_FILES src/libwebp.pc" ;; - "src/libwebpdecoder.pc") CONFIG_FILES="$CONFIG_FILES src/libwebpdecoder.pc" ;; - "src/demux/libwebpdemux.pc") CONFIG_FILES="$CONFIG_FILES src/demux/libwebpdemux.pc" ;; - "src/mux/libwebpmux.pc") CONFIG_FILES="$CONFIG_FILES src/mux/libwebpmux.pc" ;; - - *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; - esac -done - - -# If the user did not use the arguments to specify the items to instantiate, -# then the envvar interface is used. Set only those that are not. -# We use the long form for the default assignment because of an extremely -# bizarre bug on SunOS 4.1.3. -if $ac_need_defaults; then - test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files - test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers - test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands -fi - -# Have a temporary directory for convenience. Make it in the build tree -# simply because there is no reason against having it here, and in addition, -# creating and moving files from /tmp can sometimes cause problems. -# Hook for its removal unless debugging. -# Note that there is a small window in which the directory will not be cleaned: -# after its creation but before its name has been assigned to `$tmp'. -$debug || -{ - tmp= ac_tmp= - trap 'exit_status=$? - : "${ac_tmp:=$tmp}" - { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status -' 0 - trap 'as_fn_exit 1' 1 2 13 15 -} -# Create a (secure) tmp directory for tmp files. - -{ - tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && - test -d "$tmp" -} || -{ - tmp=./conf$$-$RANDOM - (umask 077 && mkdir "$tmp") -} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 -ac_tmp=$tmp - -# Set up the scripts for CONFIG_FILES section. -# No need to generate them if there are no CONFIG_FILES. -# This happens for instance with `./config.status config.h'. -if test -n "$CONFIG_FILES"; then - - -ac_cr=`echo X | tr X '\015'` -# On cygwin, bash can eat \r inside `` if the user requested igncr. -# But we know of no other shell where ac_cr would be empty at this -# point, so we can use a bashism as a fallback. -if test "x$ac_cr" = x; then - eval ac_cr=\$\'\\r\' -fi -ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` -if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then - ac_cs_awk_cr='\\r' -else - ac_cs_awk_cr=$ac_cr -fi - -echo 'BEGIN {' >"$ac_tmp/subs1.awk" && -_ACEOF - - -{ - echo "cat >conf$$subs.awk <<_ACEOF" && - echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && - echo "_ACEOF" -} >conf$$subs.sh || - as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 -ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` -ac_delim='%!_!# ' -for ac_last_try in false false false false false :; do - . ./conf$$subs.sh || - as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 - - ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` - if test $ac_delim_n = $ac_delim_num; then - break - elif $ac_last_try; then - as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 - else - ac_delim="$ac_delim!$ac_delim _$ac_delim!! " - fi -done -rm -f conf$$subs.sh - -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && -_ACEOF -sed -n ' -h -s/^/S["/; s/!.*/"]=/ -p -g -s/^[^!]*!// -:repl -t repl -s/'"$ac_delim"'$// -t delim -:nl -h -s/\(.\{148\}\)..*/\1/ -t more1 -s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ -p -n -b repl -:more1 -s/["\\]/\\&/g; s/^/"/; s/$/"\\/ -p -g -s/.\{148\}// -t nl -:delim -h -s/\(.\{148\}\)..*/\1/ -t more2 -s/["\\]/\\&/g; s/^/"/; s/$/"/ -p -b -:more2 -s/["\\]/\\&/g; s/^/"/; s/$/"\\/ -p -g -s/.\{148\}// -t delim -' >$CONFIG_STATUS || ac_write_fail=1 -rm -f conf$$subs.awk -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -_ACAWK -cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && - for (key in S) S_is_set[key] = 1 - FS = "" - -} -{ - line = $ 0 - nfields = split(line, field, "@") - substed = 0 - len = length(field[1]) - for (i = 2; i < nfields; i++) { - key = field[i] - keylen = length(key) - if (S_is_set[key]) { - value = S[key] - line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) - len += length(value) + length(field[++i]) - substed = 1 - } else - len += 1 + keylen - } - - print line -} - -_ACAWK -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then - sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" -else - cat -fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ - || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 -_ACEOF - -# VPATH may cause trouble with some makes, so we remove sole $(srcdir), -# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and -# trailing colons and then remove the whole line if VPATH becomes empty -# (actually we leave an empty line to preserve line numbers). -if test "x$srcdir" = x.; then - ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ -h -s/// -s/^/:/ -s/[ ]*$/:/ -s/:\$(srcdir):/:/g -s/:\${srcdir}:/:/g -s/:@srcdir@:/:/g -s/^:*// -s/:*$// -x -s/\(=[ ]*\).*/\1/ -G -s/\n// -s/^[^=]*=[ ]*$// -}' -fi - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -fi # test -n "$CONFIG_FILES" - -# Set up the scripts for CONFIG_HEADERS section. -# No need to generate them if there are no CONFIG_HEADERS. -# This happens for instance with `./config.status Makefile'. -if test -n "$CONFIG_HEADERS"; then -cat >"$ac_tmp/defines.awk" <<\_ACAWK || -BEGIN { -_ACEOF - -# Transform confdefs.h into an awk script `defines.awk', embedded as -# here-document in config.status, that substitutes the proper values into -# config.h.in to produce config.h. - -# Create a delimiter string that does not exist in confdefs.h, to ease -# handling of long lines. -ac_delim='%!_!# ' -for ac_last_try in false false :; do - ac_tt=`sed -n "/$ac_delim/p" confdefs.h` - if test -z "$ac_tt"; then - break - elif $ac_last_try; then - as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 - else - ac_delim="$ac_delim!$ac_delim _$ac_delim!! " - fi -done - -# For the awk script, D is an array of macro values keyed by name, -# likewise P contains macro parameters if any. Preserve backslash -# newline sequences. - -ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* -sed -n ' -s/.\{148\}/&'"$ac_delim"'/g -t rset -:rset -s/^[ ]*#[ ]*define[ ][ ]*/ / -t def -d -:def -s/\\$// -t bsnl -s/["\\]/\\&/g -s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ -D["\1"]=" \3"/p -s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p -d -:bsnl -s/["\\]/\\&/g -s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ -D["\1"]=" \3\\\\\\n"\\/p -t cont -s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p -t cont -d -:cont -n -s/.\{148\}/&'"$ac_delim"'/g -t clear -:clear -s/\\$// -t bsnlc -s/["\\]/\\&/g; s/^/"/; s/$/"/p -d -:bsnlc -s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p -b cont -' >$CONFIG_STATUS || ac_write_fail=1 - -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 - for (key in D) D_is_set[key] = 1 - FS = "" -} -/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { - line = \$ 0 - split(line, arg, " ") - if (arg[1] == "#") { - defundef = arg[2] - mac1 = arg[3] - } else { - defundef = substr(arg[1], 2) - mac1 = arg[2] - } - split(mac1, mac2, "(") #) - macro = mac2[1] - prefix = substr(line, 1, index(line, defundef) - 1) - if (D_is_set[macro]) { - # Preserve the white space surrounding the "#". - print prefix "define", macro P[macro] D[macro] - next - } else { - # Replace #undef with comments. This is necessary, for example, - # in the case of _POSIX_SOURCE, which is predefined and required - # on some systems where configure will not decide to define it. - if (defundef == "undef") { - print "/*", prefix defundef, macro, "*/" - next - } - } -} -{ print } -_ACAWK -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 - as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 -fi # test -n "$CONFIG_HEADERS" - - -eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" -shift -for ac_tag -do - case $ac_tag in - :[FHLC]) ac_mode=$ac_tag; continue;; - esac - case $ac_mode$ac_tag in - :[FHL]*:*);; - :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; - :[FH]-) ac_tag=-:-;; - :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; - esac - ac_save_IFS=$IFS - IFS=: - set x $ac_tag - IFS=$ac_save_IFS - shift - ac_file=$1 - shift - - case $ac_mode in - :L) ac_source=$1;; - :[FH]) - ac_file_inputs= - for ac_f - do - case $ac_f in - -) ac_f="$ac_tmp/stdin";; - *) # Look for the file first in the build tree, then in the source tree - # (if the path is not absolute). The absolute path cannot be DOS-style, - # because $ac_f cannot contain `:'. - test -f "$ac_f" || - case $ac_f in - [\\/$]*) false;; - *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; - esac || - as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; - esac - case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac - as_fn_append ac_file_inputs " '$ac_f'" - done - - # Let's still pretend it is `configure' which instantiates (i.e., don't - # use $as_me), people would be surprised to read: - # /* config.h. Generated by config.status. */ - configure_input='Generated from '` - $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' - `' by configure.' - if test x"$ac_file" != x-; then - configure_input="$ac_file. $configure_input" - { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 -$as_echo "$as_me: creating $ac_file" >&6;} - fi - # Neutralize special characters interpreted by sed in replacement strings. - case $configure_input in #( - *\&* | *\|* | *\\* ) - ac_sed_conf_input=`$as_echo "$configure_input" | - sed 's/[\\\\&|]/\\\\&/g'`;; #( - *) ac_sed_conf_input=$configure_input;; - esac - - case $ac_tag in - *:-:* | *:-) cat >"$ac_tmp/stdin" \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; - esac - ;; - esac - - ac_dir=`$as_dirname -- "$ac_file" || -$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$ac_file" : 'X\(//\)[^/]' \| \ - X"$ac_file" : 'X\(//\)$' \| \ - X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$ac_file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - as_dir="$ac_dir"; as_fn_mkdir_p - ac_builddir=. - -case "$ac_dir" in -.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; -*) - ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` - # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` - case $ac_top_builddir_sub in - "") ac_top_builddir_sub=. ac_top_build_prefix= ;; - *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; - esac ;; -esac -ac_abs_top_builddir=$ac_pwd -ac_abs_builddir=$ac_pwd$ac_dir_suffix -# for backward compatibility: -ac_top_builddir=$ac_top_build_prefix - -case $srcdir in - .) # We are building in place. - ac_srcdir=. - ac_top_srcdir=$ac_top_builddir_sub - ac_abs_top_srcdir=$ac_pwd ;; - [\\/]* | ?:[\\/]* ) # Absolute name. - ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir - ac_abs_top_srcdir=$srcdir ;; - *) # Relative name. - ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_build_prefix$srcdir - ac_abs_top_srcdir=$ac_pwd/$srcdir ;; -esac -ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix - - - case $ac_mode in - :F) - # - # CONFIG_FILE - # - - case $INSTALL in - [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; - *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; - esac - ac_MKDIR_P=$MKDIR_P - case $MKDIR_P in - [\\/$]* | ?:[\\/]* ) ;; - */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; - esac -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -# If the template does not know about datarootdir, expand it. -# FIXME: This hack should be removed a few years after 2.60. -ac_datarootdir_hack=; ac_datarootdir_seen= -ac_sed_dataroot=' -/datarootdir/ { - p - q -} -/@datadir@/p -/@docdir@/p -/@infodir@/p -/@localedir@/p -/@mandir@/p' -case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in -*datarootdir*) ac_datarootdir_seen=yes;; -*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 -$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 - ac_datarootdir_hack=' - s&@datadir@&$datadir&g - s&@docdir@&$docdir&g - s&@infodir@&$infodir&g - s&@localedir@&$localedir&g - s&@mandir@&$mandir&g - s&\\\${datarootdir}&$datarootdir&g' ;; -esac -_ACEOF - -# Neutralize VPATH when `$srcdir' = `.'. -# Shell code in configure.ac might set extrasub. -# FIXME: do we really want to maintain this feature? -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -ac_sed_extra="$ac_vpsub -$extrasub -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -:t -/@[a-zA-Z_][a-zA-Z_0-9]*@/!b -s|@configure_input@|$ac_sed_conf_input|;t t -s&@top_builddir@&$ac_top_builddir_sub&;t t -s&@top_build_prefix@&$ac_top_build_prefix&;t t -s&@srcdir@&$ac_srcdir&;t t -s&@abs_srcdir@&$ac_abs_srcdir&;t t -s&@top_srcdir@&$ac_top_srcdir&;t t -s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t -s&@builddir@&$ac_builddir&;t t -s&@abs_builddir@&$ac_abs_builddir&;t t -s&@abs_top_builddir@&$ac_abs_top_builddir&;t t -s&@INSTALL@&$ac_INSTALL&;t t -s&@MKDIR_P@&$ac_MKDIR_P&;t t -$ac_datarootdir_hack -" -eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ - >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 - -test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && - { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && - { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ - "$ac_tmp/out"`; test -z "$ac_out"; } && - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' -which seems to be undefined. Please make sure it is defined" >&5 -$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' -which seems to be undefined. Please make sure it is defined" >&2;} - - rm -f "$ac_tmp/stdin" - case $ac_file in - -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; - *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; - esac \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 - ;; - :H) - # - # CONFIG_HEADER - # - if test x"$ac_file" != x-; then - { - $as_echo "/* $configure_input */" \ - && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" - } >"$ac_tmp/config.h" \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 - if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then - { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 -$as_echo "$as_me: $ac_file is unchanged" >&6;} - else - rm -f "$ac_file" - mv "$ac_tmp/config.h" "$ac_file" \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 - fi - else - $as_echo "/* $configure_input */" \ - && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ - || as_fn_error $? "could not create -" "$LINENO" 5 - fi -# Compute "$ac_file"'s index in $config_headers. -_am_arg="$ac_file" -_am_stamp_count=1 -for _am_header in $config_headers :; do - case $_am_header in - $_am_arg | $_am_arg:* ) - break ;; - * ) - _am_stamp_count=`expr $_am_stamp_count + 1` ;; - esac -done -echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || -$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$_am_arg" : 'X\(//\)[^/]' \| \ - X"$_am_arg" : 'X\(//\)$' \| \ - X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$_am_arg" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'`/stamp-h$_am_stamp_count - ;; - - :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 -$as_echo "$as_me: executing $ac_file commands" >&6;} - ;; - esac - - - case $ac_file$ac_mode in - "depfiles":C) test x"$AMDEP_TRUE" != x"" || { - # Older Autoconf quotes --file arguments for eval, but not when files - # are listed without --file. Let's play safe and only enable the eval - # if we detect the quoting. - # TODO: see whether this extra hack can be removed once we start - # requiring Autoconf 2.70 or later. - case $CONFIG_FILES in #( - *\'*) : - eval set x "$CONFIG_FILES" ;; #( - *) : - set x $CONFIG_FILES ;; #( - *) : - ;; -esac - shift - # Used to flag and report bootstrapping failures. - am_rc=0 - for am_mf - do - # Strip MF so we end up with the name of the file. - am_mf=`$as_echo "$am_mf" | sed -e 's/:.*$//'` - # Check whether this is an Automake generated Makefile which includes - # dependency-tracking related rules and includes. - # Grep'ing the whole file directly is not great: AIX grep has a line - # limit of 2048, but all sed's we know have understand at least 4000. - sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \ - || continue - am_dirpart=`$as_dirname -- "$am_mf" || -$as_expr X"$am_mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$am_mf" : 'X\(//\)[^/]' \| \ - X"$am_mf" : 'X\(//\)$' \| \ - X"$am_mf" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$am_mf" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - am_filepart=`$as_basename -- "$am_mf" || -$as_expr X/"$am_mf" : '.*/\([^/][^/]*\)/*$' \| \ - X"$am_mf" : 'X\(//\)$' \| \ - X"$am_mf" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X/"$am_mf" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ - s//\1/ - q - } - /^X\/\(\/\/\)$/{ - s//\1/ - q - } - /^X\/\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - { echo "$as_me:$LINENO: cd "$am_dirpart" \ - && sed -e '/# am--include-marker/d' "$am_filepart" \ - | $MAKE -f - am--depfiles" >&5 - (cd "$am_dirpart" \ - && sed -e '/# am--include-marker/d' "$am_filepart" \ - | $MAKE -f - am--depfiles) >&5 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } || am_rc=$? - done - if test $am_rc -ne 0; then - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "Something went wrong bootstrapping makefile fragments - for automatic dependency tracking. Try re-running configure with the - '--disable-dependency-tracking' option to at least be able to build - the package (albeit without support for automatic dependency tracking). -See \`config.log' for more details" "$LINENO" 5; } - fi - { am_dirpart=; unset am_dirpart;} - { am_filepart=; unset am_filepart;} - { am_mf=; unset am_mf;} - { am_rc=; unset am_rc;} - rm -f conftest-deps.mk -} - ;; - "libtool":C) - - # See if we are running on zsh, and set the options that allow our - # commands through without removal of \ escapes. - if test -n "${ZSH_VERSION+set}"; then - setopt NO_GLOB_SUBST - fi - - cfgfile=${ofile}T - trap "$RM \"$cfgfile\"; exit 1" 1 2 15 - $RM "$cfgfile" - - cat <<_LT_EOF >> "$cfgfile" -#! $SHELL -# Generated automatically by $as_me ($PACKAGE) $VERSION -# NOTE: Changes made to this file will be lost: look at ltmain.sh. - -# Provide generalized library-building support services. -# Written by Gordon Matzigkeit, 1996 - -# Copyright (C) 2014 Free Software Foundation, Inc. -# This is free software; see the source for copying conditions. There is NO -# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -# GNU Libtool is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of of the License, or -# (at your option) any later version. -# -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program or library that is built -# using GNU Libtool, you may include this file under the same -# distribution terms that you use for the rest of that program. -# -# GNU Libtool is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . - - -# The names of the tagged configurations supported by this script. -available_tags='' - -# Configured defaults for sys_lib_dlsearch_path munging. -: \${LT_SYS_LIBRARY_PATH="$configure_time_lt_sys_library_path"} - -# ### BEGIN LIBTOOL CONFIG - -# Which release of libtool.m4 was used? -macro_version=$macro_version -macro_revision=$macro_revision - -# Whether or not to build shared libraries. -build_libtool_libs=$enable_shared - -# Whether or not to build static libraries. -build_old_libs=$enable_static - -# What type of objects to build. -pic_mode=$pic_mode - -# Whether or not to optimize for fast installation. -fast_install=$enable_fast_install - -# Shared archive member basename,for filename based shared library versioning on AIX. -shared_archive_member_spec=$shared_archive_member_spec - -# Shell to use when invoking shell scripts. -SHELL=$lt_SHELL - -# An echo program that protects backslashes. -ECHO=$lt_ECHO - -# The PATH separator for the build system. -PATH_SEPARATOR=$lt_PATH_SEPARATOR - -# The host system. -host_alias=$host_alias -host=$host -host_os=$host_os - -# The build system. -build_alias=$build_alias -build=$build -build_os=$build_os - -# A sed program that does not truncate output. -SED=$lt_SED - -# Sed that helps us avoid accidentally triggering echo(1) options like -n. -Xsed="\$SED -e 1s/^X//" - -# A grep program that handles long lines. -GREP=$lt_GREP - -# An ERE matcher. -EGREP=$lt_EGREP - -# A literal string matcher. -FGREP=$lt_FGREP - -# A BSD- or MS-compatible name lister. -NM=$lt_NM - -# Whether we need soft or hard links. -LN_S=$lt_LN_S - -# What is the maximum length of a command? -max_cmd_len=$max_cmd_len - -# Object file suffix (normally "o"). -objext=$ac_objext - -# Executable file suffix (normally ""). -exeext=$exeext - -# whether the shell understands "unset". -lt_unset=$lt_unset - -# turn spaces into newlines. -SP2NL=$lt_lt_SP2NL - -# turn newlines into spaces. -NL2SP=$lt_lt_NL2SP - -# convert \$build file names to \$host format. -to_host_file_cmd=$lt_cv_to_host_file_cmd - -# convert \$build files to toolchain format. -to_tool_file_cmd=$lt_cv_to_tool_file_cmd - -# An object symbol dumper. -OBJDUMP=$lt_OBJDUMP - -# Method to check whether dependent libraries are shared objects. -deplibs_check_method=$lt_deplibs_check_method - -# Command to use when deplibs_check_method = "file_magic". -file_magic_cmd=$lt_file_magic_cmd - -# How to find potential files when deplibs_check_method = "file_magic". -file_magic_glob=$lt_file_magic_glob - -# Find potential files using nocaseglob when deplibs_check_method = "file_magic". -want_nocaseglob=$lt_want_nocaseglob - -# DLL creation program. -DLLTOOL=$lt_DLLTOOL - -# Command to associate shared and link libraries. -sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd - -# The archiver. -AR=$lt_AR - -# Flags to create an archive. -AR_FLAGS=$lt_AR_FLAGS - -# How to feed a file listing to the archiver. -archiver_list_spec=$lt_archiver_list_spec - -# A symbol stripping program. -STRIP=$lt_STRIP - -# Commands used to install an old-style archive. -RANLIB=$lt_RANLIB -old_postinstall_cmds=$lt_old_postinstall_cmds -old_postuninstall_cmds=$lt_old_postuninstall_cmds - -# Whether to use a lock for old archive extraction. -lock_old_archive_extraction=$lock_old_archive_extraction - -# A C compiler. -LTCC=$lt_CC - -# LTCC compiler flags. -LTCFLAGS=$lt_CFLAGS - -# Take the output of nm and produce a listing of raw symbols and C names. -global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe - -# Transform the output of nm in a proper C declaration. -global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl - -# Transform the output of nm into a list of symbols to manually relocate. -global_symbol_to_import=$lt_lt_cv_sys_global_symbol_to_import - -# Transform the output of nm in a C name address pair. -global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address - -# Transform the output of nm in a C name address pair when lib prefix is needed. -global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix - -# The name lister interface. -nm_interface=$lt_lt_cv_nm_interface - -# Specify filename containing input files for \$NM. -nm_file_list_spec=$lt_nm_file_list_spec - -# The root where to search for dependent libraries,and where our libraries should be installed. -lt_sysroot=$lt_sysroot - -# Command to truncate a binary pipe. -lt_truncate_bin=$lt_lt_cv_truncate_bin - -# The name of the directory that contains temporary libtool files. -objdir=$objdir - -# Used to examine libraries when file_magic_cmd begins with "file". -MAGIC_CMD=$MAGIC_CMD - -# Must we lock files when doing compilation? -need_locks=$lt_need_locks - -# Manifest tool. -MANIFEST_TOOL=$lt_MANIFEST_TOOL - -# Tool to manipulate archived DWARF debug symbol files on Mac OS X. -DSYMUTIL=$lt_DSYMUTIL - -# Tool to change global to local symbols on Mac OS X. -NMEDIT=$lt_NMEDIT - -# Tool to manipulate fat objects and archives on Mac OS X. -LIPO=$lt_LIPO - -# ldd/readelf like tool for Mach-O binaries on Mac OS X. -OTOOL=$lt_OTOOL - -# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. -OTOOL64=$lt_OTOOL64 - -# Old archive suffix (normally "a"). -libext=$libext - -# Shared library suffix (normally ".so"). -shrext_cmds=$lt_shrext_cmds - -# The commands to extract the exported symbol list from a shared archive. -extract_expsyms_cmds=$lt_extract_expsyms_cmds - -# Variables whose values should be saved in libtool wrapper scripts and -# restored at link time. -variables_saved_for_relink=$lt_variables_saved_for_relink - -# Do we need the "lib" prefix for modules? -need_lib_prefix=$need_lib_prefix - -# Do we need a version for libraries? -need_version=$need_version - -# Library versioning type. -version_type=$version_type - -# Shared library runtime path variable. -runpath_var=$runpath_var - -# Shared library path variable. -shlibpath_var=$shlibpath_var - -# Is shlibpath searched before the hard-coded library search path? -shlibpath_overrides_runpath=$shlibpath_overrides_runpath - -# Format of library name prefix. -libname_spec=$lt_libname_spec - -# List of archive names. First name is the real one, the rest are links. -# The last name is the one that the linker finds with -lNAME -library_names_spec=$lt_library_names_spec - -# The coded name of the library, if different from the real name. -soname_spec=$lt_soname_spec - -# Permission mode override for installation of shared libraries. -install_override_mode=$lt_install_override_mode - -# Command to use after installation of a shared archive. -postinstall_cmds=$lt_postinstall_cmds - -# Command to use after uninstallation of a shared archive. -postuninstall_cmds=$lt_postuninstall_cmds - -# Commands used to finish a libtool library installation in a directory. -finish_cmds=$lt_finish_cmds - -# As "finish_cmds", except a single script fragment to be evaled but -# not shown. -finish_eval=$lt_finish_eval - -# Whether we should hardcode library paths into libraries. -hardcode_into_libs=$hardcode_into_libs - -# Compile-time system search path for libraries. -sys_lib_search_path_spec=$lt_sys_lib_search_path_spec - -# Detected run-time system search path for libraries. -sys_lib_dlsearch_path_spec=$lt_configure_time_dlsearch_path - -# Explicit LT_SYS_LIBRARY_PATH set during ./configure time. -configure_time_lt_sys_library_path=$lt_configure_time_lt_sys_library_path - -# Whether dlopen is supported. -dlopen_support=$enable_dlopen - -# Whether dlopen of programs is supported. -dlopen_self=$enable_dlopen_self - -# Whether dlopen of statically linked programs is supported. -dlopen_self_static=$enable_dlopen_self_static - -# Commands to strip libraries. -old_striplib=$lt_old_striplib -striplib=$lt_striplib - - -# The linker used to build libraries. -LD=$lt_LD - -# How to create reloadable object files. -reload_flag=$lt_reload_flag -reload_cmds=$lt_reload_cmds - -# Commands used to build an old-style archive. -old_archive_cmds=$lt_old_archive_cmds - -# A language specific compiler. -CC=$lt_compiler - -# Is the compiler the GNU compiler? -with_gcc=$GCC - -# Compiler flag to turn off builtin functions. -no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag - -# Additional compiler flags for building library objects. -pic_flag=$lt_lt_prog_compiler_pic - -# How to pass a linker flag through the compiler. -wl=$lt_lt_prog_compiler_wl - -# Compiler flag to prevent dynamic linking. -link_static_flag=$lt_lt_prog_compiler_static - -# Does compiler simultaneously support -c and -o options? -compiler_c_o=$lt_lt_cv_prog_compiler_c_o - -# Whether or not to add -lc for building shared libraries. -build_libtool_need_lc=$archive_cmds_need_lc - -# Whether or not to disallow shared libs when runtime libs are static. -allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes - -# Compiler flag to allow reflexive dlopens. -export_dynamic_flag_spec=$lt_export_dynamic_flag_spec - -# Compiler flag to generate shared objects directly from archives. -whole_archive_flag_spec=$lt_whole_archive_flag_spec - -# Whether the compiler copes with passing no objects directly. -compiler_needs_object=$lt_compiler_needs_object - -# Create an old-style archive from a shared archive. -old_archive_from_new_cmds=$lt_old_archive_from_new_cmds - -# Create a temporary old-style archive to link instead of a shared archive. -old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds - -# Commands used to build a shared archive. -archive_cmds=$lt_archive_cmds -archive_expsym_cmds=$lt_archive_expsym_cmds - -# Commands used to build a loadable module if different from building -# a shared archive. -module_cmds=$lt_module_cmds -module_expsym_cmds=$lt_module_expsym_cmds - -# Whether we are building with GNU ld or not. -with_gnu_ld=$lt_with_gnu_ld - -# Flag that allows shared libraries with undefined symbols to be built. -allow_undefined_flag=$lt_allow_undefined_flag - -# Flag that enforces no undefined symbols. -no_undefined_flag=$lt_no_undefined_flag - -# Flag to hardcode \$libdir into a binary during linking. -# This must work even if \$libdir does not exist -hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec - -# Whether we need a single "-rpath" flag with a separated argument. -hardcode_libdir_separator=$lt_hardcode_libdir_separator - -# Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes -# DIR into the resulting binary. -hardcode_direct=$hardcode_direct - -# Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes -# DIR into the resulting binary and the resulting library dependency is -# "absolute",i.e impossible to change by setting \$shlibpath_var if the -# library is relocated. -hardcode_direct_absolute=$hardcode_direct_absolute - -# Set to "yes" if using the -LDIR flag during linking hardcodes DIR -# into the resulting binary. -hardcode_minus_L=$hardcode_minus_L - -# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR -# into the resulting binary. -hardcode_shlibpath_var=$hardcode_shlibpath_var - -# Set to "yes" if building a shared library automatically hardcodes DIR -# into the library and all subsequent libraries and executables linked -# against it. -hardcode_automatic=$hardcode_automatic - -# Set to yes if linker adds runtime paths of dependent libraries -# to runtime path list. -inherit_rpath=$inherit_rpath - -# Whether libtool must link a program against all its dependency libraries. -link_all_deplibs=$link_all_deplibs - -# Set to "yes" if exported symbols are required. -always_export_symbols=$always_export_symbols - -# The commands to list exported symbols. -export_symbols_cmds=$lt_export_symbols_cmds - -# Symbols that should not be listed in the preloaded symbols. -exclude_expsyms=$lt_exclude_expsyms - -# Symbols that must always be exported. -include_expsyms=$lt_include_expsyms - -# Commands necessary for linking programs (against libraries) with templates. -prelink_cmds=$lt_prelink_cmds - -# Commands necessary for finishing linking programs. -postlink_cmds=$lt_postlink_cmds - -# Specify filename containing input files. -file_list_spec=$lt_file_list_spec - -# How to hardcode a shared library path into an executable. -hardcode_action=$hardcode_action - -# ### END LIBTOOL CONFIG - -_LT_EOF - - cat <<'_LT_EOF' >> "$cfgfile" - -# ### BEGIN FUNCTIONS SHARED WITH CONFIGURE - -# func_munge_path_list VARIABLE PATH -# ----------------------------------- -# VARIABLE is name of variable containing _space_ separated list of -# directories to be munged by the contents of PATH, which is string -# having a format: -# "DIR[:DIR]:" -# string "DIR[ DIR]" will be prepended to VARIABLE -# ":DIR[:DIR]" -# string "DIR[ DIR]" will be appended to VARIABLE -# "DIRP[:DIRP]::[DIRA:]DIRA" -# string "DIRP[ DIRP]" will be prepended to VARIABLE and string -# "DIRA[ DIRA]" will be appended to VARIABLE -# "DIR[:DIR]" -# VARIABLE will be replaced by "DIR[ DIR]" -func_munge_path_list () -{ - case x$2 in - x) - ;; - *:) - eval $1=\"`$ECHO $2 | $SED 's/:/ /g'` \$$1\" - ;; - x:*) - eval $1=\"\$$1 `$ECHO $2 | $SED 's/:/ /g'`\" - ;; - *::*) - eval $1=\"\$$1\ `$ECHO $2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" - eval $1=\"`$ECHO $2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \$$1\" - ;; - *) - eval $1=\"`$ECHO $2 | $SED 's/:/ /g'`\" - ;; - esac -} - - -# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. -func_cc_basename () -{ - for cc_temp in $*""; do - case $cc_temp in - compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; - distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; - \-*) ;; - *) break;; - esac - done - func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` -} - - -# ### END FUNCTIONS SHARED WITH CONFIGURE - -_LT_EOF - - case $host_os in - aix3*) - cat <<\_LT_EOF >> "$cfgfile" -# AIX sometimes has problems with the GCC collect2 program. For some -# reason, if we set the COLLECT_NAMES environment variable, the problems -# vanish in a puff of smoke. -if test set != "${COLLECT_NAMES+set}"; then - COLLECT_NAMES= - export COLLECT_NAMES -fi -_LT_EOF - ;; - esac - - -ltmain=$ac_aux_dir/ltmain.sh - - - # We use sed instead of cat because bash on DJGPP gets confused if - # if finds mixed CR/LF and LF-only lines. Since sed operates in - # text mode, it properly converts lines to CR/LF. This bash problem - # is reportedly fixed, but why not run on old versions too? - sed '$q' "$ltmain" >> "$cfgfile" \ - || (rm -f "$cfgfile"; exit 1) - - mv -f "$cfgfile" "$ofile" || - (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") - chmod +x "$ofile" - - ;; - - esac -done # for ac_tag - - -as_fn_exit 0 -_ACEOF -ac_clean_files=$ac_clean_files_save - -test $ac_write_fail = 0 || - as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 - - -# configure is writing to config.log, and then calls config.status. -# config.status does its own redirection, appending to config.log. -# Unfortunately, on DOS this fails, as config.log is still kept open -# by configure, so config.status won't be able to write to it; its -# output is simply discarded. So we exec the FD to /dev/null, -# effectively closing config.log, so it can be properly (re)opened and -# appended to by config.status. When coming back to configure, we -# need to make the FD available again. -if test "$no_create" != yes; then - ac_cs_success=: - ac_config_status_args= - test "$silent" = yes && - ac_config_status_args="$ac_config_status_args --quiet" - exec 5>/dev/null - $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false - exec 5>>config.log - # Use ||, not &&, to avoid exiting from the if with $? = 1, which - # would make configure fail if this is the last instruction. - $ac_cs_success || as_fn_exit 1 -fi -if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 -$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} -fi - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: -WebP Configuration Summary --------------------------- - -Shared libraries: ${enable_shared} -Static libraries: ${enable_static} -Threading support: ${enable_threading-no} -libwebp: yes -libwebpdecoder: ${enable_libwebpdecoder-no} -libwebpdemux: ${enable_libwebpdemux-no} -libwebpmux: ${enable_libwebpmux-no} -libwebpextras: ${enable_libwebpextras-no} - -Tools: -cwebp : ${enable_libwebpdemux-no} - Input format support - ==================== - JPEG : ${jpeg_support-no} - PNG : ${png_support-no} - TIFF : ${tiff_support-no} - WIC : ${wic_support-no} -dwebp : ${enable_libwebpdemux-no} - Output format support - ===================== - PNG : ${png_support-no} - WIC : ${wic_support-no} -GIF support : ${gif_support-no} -anim_diff : ${build_anim_diff-no} -gif2webp : ${build_gif2webp-no} -img2webp : ${build_img2webp-no} -webpmux : ${enable_libwebpmux-no} -vwebp : ${build_vwebp-no} -webpinfo : ${build_webpinfo-no} -SDL support : ${sdl_support-no} -vwebp_sdl : ${build_vwebp_sdl-no} -" >&5 -$as_echo "$as_me: -WebP Configuration Summary --------------------------- - -Shared libraries: ${enable_shared} -Static libraries: ${enable_static} -Threading support: ${enable_threading-no} -libwebp: yes -libwebpdecoder: ${enable_libwebpdecoder-no} -libwebpdemux: ${enable_libwebpdemux-no} -libwebpmux: ${enable_libwebpmux-no} -libwebpextras: ${enable_libwebpextras-no} - -Tools: -cwebp : ${enable_libwebpdemux-no} - Input format support - ==================== - JPEG : ${jpeg_support-no} - PNG : ${png_support-no} - TIFF : ${tiff_support-no} - WIC : ${wic_support-no} -dwebp : ${enable_libwebpdemux-no} - Output format support - ===================== - PNG : ${png_support-no} - WIC : ${wic_support-no} -GIF support : ${gif_support-no} -anim_diff : ${build_anim_diff-no} -gif2webp : ${build_gif2webp-no} -img2webp : ${build_img2webp-no} -webpmux : ${enable_libwebpmux-no} -vwebp : ${build_vwebp-no} -webpinfo : ${build_webpinfo-no} -SDL support : ${sdl_support-no} -vwebp_sdl : ${build_vwebp_sdl-no} -" >&6;} diff --git a/Extended/libwebp/configure.ac b/Extended/libwebp/configure.ac deleted file mode 100644 index 5481760..0000000 --- a/Extended/libwebp/configure.ac +++ /dev/null @@ -1,777 +0,0 @@ -AC_INIT([libwebp], [1.1.0], - [https://bugs.chromium.org/p/webp],, - [http://developers.google.com/speed/webp]) -AC_CANONICAL_HOST -AC_PREREQ([2.60]) -AM_INIT_AUTOMAKE([-Wall foreign subdir-objects]) - -dnl === automake >= 1.12 requires this for 'unusual archivers' support. -dnl === it must occur before LT_INIT (AC_PROG_LIBTOOL). -m4_ifdef([AM_PROG_AR], [AM_PROG_AR]) - -AC_PROG_LIBTOOL -AC_PROG_SED -AM_PROG_CC_C_O - -dnl === Enable less verbose output when building. -m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])]) - -dnl == test endianness -AC_C_BIGENDIAN - -dnl === SET_IF_UNSET(shell_var, value) -dnl === Set the shell variable 'shell_var' to 'value' if it is unset. -AC_DEFUN([SET_IF_UNSET], [test "${$1+set}" = "set" || $1=$2]) - -AC_ARG_ENABLE([everything], - AS_HELP_STRING([--enable-everything], - [Enable all optional targets. These can still be - disabled with --disable-target]), - [SET_IF_UNSET([enable_libwebpdecoder], [$enableval]) - SET_IF_UNSET([enable_libwebpdemux], [$enableval]) - SET_IF_UNSET([enable_libwebpextras], [$enableval]) - SET_IF_UNSET([enable_libwebpmux], [$enableval])]) - -dnl === If --enable-asserts is not defined, define NDEBUG - -AC_MSG_CHECKING(whether asserts are enabled) -AC_ARG_ENABLE([asserts], - AS_HELP_STRING([--enable-asserts], - [Enable assert checks])) -if test "x${enable_asserts-no}" = "xno"; then - AM_CPPFLAGS="${AM_CPPFLAGS} -DNDEBUG" -fi -AC_MSG_RESULT(${enable_asserts-no}) -AC_SUBST([AM_CPPFLAGS]) - -AC_ARG_WITH([pkgconfigdir], AS_HELP_STRING([--with-pkgconfigdir=DIR], - [Path to the pkgconfig directory @<:@LIBDIR/pkgconfig@:>@]), - [pkgconfigdir="$withval"], [pkgconfigdir='${libdir}/pkgconfig']) -AC_SUBST([pkgconfigdir]) - -dnl === TEST_AND_ADD_CFLAGS(var, flag) -dnl === Checks whether $CC supports 'flag' and adds it to 'var' -dnl === on success. -AC_DEFUN([TEST_AND_ADD_CFLAGS], - [SAVED_CFLAGS="$CFLAGS" - CFLAGS="-Werror $2" - AC_MSG_CHECKING([whether $CC supports $2]) - dnl Note AC_LANG_PROGRAM([]) uses an old-style main definition. - AC_COMPILE_IFELSE([AC_LANG_SOURCE([int main(void) { return 0; }])], - [AC_MSG_RESULT([yes])] - dnl Simply append the variable avoiding a - dnl compatibility ifdef for AS_VAR_APPEND as this - dnl variable shouldn't grow all that large. - [$1="${$1} $2"], - [AC_MSG_RESULT([no])]) - CFLAGS="$SAVED_CFLAGS"]) -TEST_AND_ADD_CFLAGS([AM_CFLAGS], [-fvisibility=hidden]) -TEST_AND_ADD_CFLAGS([AM_CFLAGS], [-Wall]) -TEST_AND_ADD_CFLAGS([AM_CFLAGS], [-Wconstant-conversion]) -TEST_AND_ADD_CFLAGS([AM_CFLAGS], [-Wdeclaration-after-statement]) -TEST_AND_ADD_CFLAGS([AM_CFLAGS], [-Wextra]) -TEST_AND_ADD_CFLAGS([AM_CFLAGS], [-Wfloat-conversion]) -TEST_AND_ADD_CFLAGS([AM_CFLAGS], [-Wformat -Wformat-nonliteral]) -TEST_AND_ADD_CFLAGS([AM_CFLAGS], [-Wformat -Wformat-security]) -TEST_AND_ADD_CFLAGS([AM_CFLAGS], [-Wmissing-declarations]) -TEST_AND_ADD_CFLAGS([AM_CFLAGS], [-Wmissing-prototypes]) -TEST_AND_ADD_CFLAGS([AM_CFLAGS], [-Wold-style-definition]) -TEST_AND_ADD_CFLAGS([AM_CFLAGS], [-Wparentheses-equality]) -TEST_AND_ADD_CFLAGS([AM_CFLAGS], [-Wshadow]) -TEST_AND_ADD_CFLAGS([AM_CFLAGS], [-Wshorten-64-to-32]) -TEST_AND_ADD_CFLAGS([AM_CFLAGS], [-Wundef]) -TEST_AND_ADD_CFLAGS([AM_CFLAGS], [-Wunreachable-code]) -TEST_AND_ADD_CFLAGS([AM_CFLAGS], [-Wunused-but-set-variable]) -TEST_AND_ADD_CFLAGS([AM_CFLAGS], [-Wunused]) -TEST_AND_ADD_CFLAGS([AM_CFLAGS], [-Wvla]) -# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=62040 -# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61622 -AS_IF([test "$GCC" = "yes" ], [ - gcc_version=`$CC -dumpversion` - gcc_wht_bug="" - case "$host_cpu" in - aarch64|arm64) - case "$gcc_version" in - 4.9|4.9.0|4.9.1) gcc_wht_bug=yes ;; - esac - esac - AS_IF([test "$gcc_wht_bug" = "yes"], [ - TEST_AND_ADD_CFLAGS([AM_CFLAGS], [-frename-registers])])]) -# Use -flax-vector-conversions, if available, when building intrinsics with -# older versions of gcc. The flag appeared in 4.3.x, but if backported, and -# -fno-lax-vector-conversions is set, errors may occur with the intrinsics -# files along with the older system includes, e.g., emmintrin.h. -# Originally observed with cc (GCC) 4.2.1 20070831 patched [FreeBSD] (9.3). -# https://bugs.chromium.org/p/webp/issues/detail?id=274 -AS_IF([test "$GCC" = "yes" ], [ - case "$host_cpu" in - amd64|i?86|x86_64) - AC_COMPILE_IFELSE( - dnl only check for -flax-vector-conversions with older gcc, skip - dnl clang as it reports itself as 4.2.1, but the flag isn't needed. - [AC_LANG_SOURCE([#if !defined(__clang__) && defined(__GNUC__) && \ - ((__GNUC__ << 8) | __GNUC_MINOR__) < 0x403 - #error old gcc - #endif - int main(void) { return 0; } - ])],, - [TEST_AND_ADD_CFLAGS([INTRINSICS_CFLAGS], - [-flax-vector-conversions])]) - ;; - esac]) -AC_SUBST([AM_CFLAGS]) - -dnl === Check for machine specific flags -AC_ARG_ENABLE([sse4.1], - AS_HELP_STRING([--disable-sse4.1], - [Disable detection of SSE4.1 support - @<:@default=auto@:>@])) - -AS_IF([test "x$enable_sse4_1" != "xno" -a "x$enable_sse2" != "xno"], [ - SSE41_FLAGS="$INTRINSICS_CFLAGS $SSE41_FLAGS" - TEST_AND_ADD_CFLAGS([SSE41_FLAGS], [-msse4.1]) - AS_IF([test -n "$SSE41_FLAGS"], [ - SAVED_CFLAGS=$CFLAGS - CFLAGS="$CFLAGS $SSE41_FLAGS" - AC_CHECK_HEADER([smmintrin.h], - [AC_DEFINE(WEBP_HAVE_SSE41, [1], - [Set to 1 if SSE4.1 is supported])], - [SSE41_FLAGS=""]) - CFLAGS=$SAVED_CFLAGS]) - AC_SUBST([SSE41_FLAGS])]) - -AC_ARG_ENABLE([sse2], - AS_HELP_STRING([--disable-sse2], - [Disable detection of SSE2 support - @<:@default=auto@:>@])) - -AS_IF([test "x$enable_sse2" != "xno"], [ - SSE2_FLAGS="$INTRINSICS_CFLAGS $SSE2_FLAGS" - TEST_AND_ADD_CFLAGS([SSE2_FLAGS], [-msse2]) - AS_IF([test -n "$SSE2_FLAGS"], [ - SAVED_CFLAGS=$CFLAGS - CFLAGS="$CFLAGS $SSE2_FLAGS" - AC_CHECK_HEADER([emmintrin.h], - [AC_DEFINE(WEBP_HAVE_SSE2, [1], - [Set to 1 if SSE2 is supported])], - [SSE2_FLAGS=""]) - CFLAGS=$SAVED_CFLAGS]) - AC_SUBST([SSE2_FLAGS])]) - -AC_ARG_ENABLE([neon], - AS_HELP_STRING([--disable-neon], - [Disable detection of NEON support - @<:@default=auto@:>@])) - -AC_ARG_ENABLE([neon_rtcd], - AS_HELP_STRING([--disable-neon-rtcd], - [Disable runtime detection of NEON support via - /proc/cpuinfo on Linux hosts - @<:@default=auto@:>@])) -# For ARM(7) hosts: -# Both NEON flags unset and NEON support detected = build all modules with NEON -# NEON detected with the use of -mfpu=neon = build only NEON modules with NEON -AS_IF([test "x$enable_neon" != "xno"], [ - case "$host_cpu" in - arm|armv7*) - # Test for NEON support without flags before falling back to -mfpu=neon - for flag in '' '-mfpu=neon'; do - LOCAL_NEON_FLAGS="$INTRINSICS_CFLAGS $NEON_FLAGS" - TEST_AND_ADD_CFLAGS([LOCAL_NEON_FLAGS], [$flag]) - SAVED_CFLAGS=$CFLAGS - CFLAGS="$CFLAGS $LOCAL_NEON_FLAGS" - - dnl Note AC_LANG_PROGRAM([]) uses an old-style main definition. - AC_COMPILE_IFELSE([AC_LANG_SOURCE([ - #include - int main(void) { - int8x8_t v = vdup_n_s8(0); - (void)v; - return 0; - }])], - [NEON_FLAGS="$(echo $LOCAL_NEON_FLAGS | $SED 's/^ *//')" - AS_IF([test -n "$NEON_FLAGS"], [ - AS_IF([test "${host_os%%-*}" = "linux" -o \ - "x$enable_neon_rtcd" = "xno"], [ - CFLAGS=$SAVED_CFLAGS - AC_DEFINE(WEBP_HAVE_NEON, [1], [Set to 1 if NEON is supported]) - break - ],[ - AC_MSG_WARN(m4_normalize([NEON runtime cpu-detection is - unavailable for ${host_os%%-*}. Force - with CFLAGS=-mfpu=neon or - --disable-neon-rtcd.])) - enable_neon_rtcd=no - NEON_FLAGS="" - ]) - ],[ - CFLAGS=$SAVED_CFLAGS - AC_DEFINE(WEBP_HAVE_NEON, [1], [Set to 1 if NEON is supported]) - break - ])]) - CFLAGS=$SAVED_CFLAGS - done - - AS_IF([test -n "$NEON_FLAGS"], [ - # If NEON is available and rtcd is disabled apply NEON_FLAGS globally. - AS_IF([test "x$enable_neon_rtcd" = "xno"], [ - AM_CFLAGS="$AM_CFLAGS $NEON_FLAGS" - NEON_FLAGS=""], - [AC_DEFINE(WEBP_HAVE_NEON_RTCD, [1], - [Set to 1 if runtime detection of NEON is enabled])])]) - - case "$host_os" in - *android*) AC_CHECK_HEADERS([cpu-features.h]) ;; - esac - ;; - esac - AC_SUBST([NEON_FLAGS])]) - -dnl === CLEAR_LIBVARS([var_pfx]) -dnl === Clears _{INCLUDES,LIBS}. -AC_DEFUN([CLEAR_LIBVARS], [$1_INCLUDES=""; $1_LIBS=""]) - -dnl === WITHLIB_OPTION([opt_pfx], [outvar_pfx]) -dnl === Defines --with-{include,lib}dir options which set -dnl === the variables _{INCLUDES,LIBS}. -AC_DEFUN([WITHLIB_OPTION], - [AC_ARG_WITH([$1includedir], - AS_HELP_STRING([--with-$1includedir=DIR], - [use $2 includes from DIR]), - $2_INCLUDES="-I$withval") - AC_ARG_WITH([$1libdir], - AS_HELP_STRING([--with-$1libdir=DIR], - [use $2 libraries from DIR]), - [$2_LIBS="-L$withval"])]) - -dnl === LIBCHECK_PROLOGUE([var_pfx]) -dnl === Caches the current values of CPPFLAGS/LIBS in SAVED_* then -dnl === prepends the current values with _{INCLUDES,LIBS}. -AC_DEFUN([LIBCHECK_PROLOGUE], - [SAVED_CPPFLAGS=$CPPFLAGS - SAVED_LIBS=$LIBS - CPPFLAGS="$$1_INCLUDES $CPPFLAGS" - LIBS="$$1_LIBS $LIBS"]) - -dnl === LIBCHECK_EPILOGUE([var_pfx]) -dnl === Restores the values of CPPFLAGS/LIBS from SAVED_* and exports -dnl === _{INCLUDES,LIBS} with AC_SUBST. -AC_DEFUN([LIBCHECK_EPILOGUE], - [AC_SUBST($1_LIBS) - AC_SUBST($1_INCLUDES) - CPPFLAGS=$SAVED_CPPFLAGS - LIBS=$SAVED_LIBS]) - -dnl === Check for gcc builtins - -dnl === CHECK_FOR_BUILTIN([builtin], [param], [define]) -dnl === links a C AC_LANG_PROGRAM, with () -dnl === AC_DEFINE'ing if successful. -AC_DEFUN([CHECK_FOR_BUILTIN], - [AC_LANG_PUSH([C]) - AC_MSG_CHECKING([for $1]) - AC_LINK_IFELSE([AC_LANG_PROGRAM([], [(void)$1($2)])], - [AC_MSG_RESULT([yes]) - AC_DEFINE([$3], [1], - [Set to 1 if $1 is available])], - [AC_MSG_RESULT([no])]), - AC_LANG_POP]) - -dnl AC_CHECK_FUNC doesn't work with builtin's. -CHECK_FOR_BUILTIN([__builtin_bswap16], [1u << 15], [HAVE_BUILTIN_BSWAP16]) -CHECK_FOR_BUILTIN([__builtin_bswap32], [1u << 31], [HAVE_BUILTIN_BSWAP32]) -CHECK_FOR_BUILTIN([__builtin_bswap64], [1ull << 63], [HAVE_BUILTIN_BSWAP64]) - -dnl === Check for pthread support -AC_ARG_ENABLE([threading], - AS_HELP_STRING([--disable-threading], - [Disable detection of thread support]),, - [enable_threading=yes]) -if test "$enable_threading" = "yes"; then - AC_MSG_NOTICE([checking for threading support...]) - AX_PTHREAD([AC_DEFINE([WEBP_USE_THREAD], [1], - [Undefine this to disable thread support.]) - LIBS="$PTHREAD_LIBS $LIBS" - CFLAGS="$CFLAGS $PTHREAD_CFLAGS" - CC="$PTHREAD_CC" - ], - [AC_CHECK_FUNC([_beginthreadex], - [AC_DEFINE([WEBP_USE_THREAD], [1], - [Undefine this to disable thread - support.])], - [enable_threading=no])]) -fi -AC_MSG_NOTICE([checking if threading is enabled... ${enable_threading-no}]) - -dnl === check for OpenGL/GLUT support === - -AC_ARG_ENABLE([gl], AS_HELP_STRING([--disable-gl], - [Disable detection of OpenGL support - @<:@default=auto@:>@])) -AS_IF([test "x$enable_gl" != "xno"], [ - CLEAR_LIBVARS([GL]) - WITHLIB_OPTION([gl], [GL]) - - LIBCHECK_PROLOGUE([GL]) - - glut_cflags="none" - glut_ldflags="none" - case $host_os in - darwin*) - # Special case for OSX builds. Append these to give the user a chance to - # override with --with-gl* - glut_cflags="$glut_cflags|-framework GLUT -framework OpenGL" - glut_ldflags="$glut_ldflags|-framework GLUT -framework OpenGL" - # quiet deprecation warnings for glut - TEST_AND_ADD_CFLAGS([AM_CFLAGS], [-Wno-deprecated-declarations]) - ;; - esac - - GLUT_SAVED_CPPFLAGS="$CPPFLAGS" - SAVED_IFS="$IFS" - IFS="|" - for flag in $glut_cflags; do - # restore IFS immediately as the autoconf macros may need the default. - IFS="$SAVED_IFS" - unset ac_cv_header_GL_glut_h - unset ac_cv_header_OpenGL_glut_h - - case $flag in - none) ;; - *) CPPFLAGS="$flag $CPPFLAGS";; - esac - AC_CHECK_HEADERS([GL/glut.h GLUT/glut.h OpenGL/glut.h], - [glut_headers=yes; - test "$flag" = "none" || GL_INCLUDES="$CPPFLAGS"; - break]) - CPPFLAGS="$GLUT_SAVED_CPPFLAGS" - test "$glut_headers" = "yes" && break - done - IFS="$SAVED_IFS" - - if test "$glut_headers" = "yes"; then - AC_LANG_PUSH([C]) - GLUT_SAVED_LDFLAGS="$LDFLAGS" - SAVED_IFS="$IFS" - IFS="|" - for flag in $glut_ldflags; do - # restore IFS immediately as the autoconf macros may need the default. - IFS="$SAVED_IFS" - unset ac_cv_search_glBegin - - case $flag in - none) ;; - *) LDFLAGS="$flag $LDFLAGS";; - esac - - # find libGL - GL_SAVED_LIBS="$LIBS" - AC_SEARCH_LIBS([glBegin], [GL OpenGL opengl32]) - LIBS="$GL_SAVED_LIBS" - - # A direct link to libGL may not be necessary on e.g., linux. - GLUT_SAVED_LIBS="$LIBS" - for lib in "" "-lglut" "-lglut $ac_cv_search_glBegin"; do - LIBS="$lib" - AC_LINK_IFELSE( - [AC_LANG_PROGRAM([ - #ifdef __cplusplus - # define EXTERN_C extern "C" - #else - # define EXTERN_C - #endif - EXTERN_C char glOrtho(); - EXTERN_C char glutMainLoop(); - ],[ - glOrtho(); - glutMainLoop(); - ]) - ], - AC_DEFINE(WEBP_HAVE_GL, [1], - [Set to 1 if OpenGL is supported]) - [glut_support=yes], [] - ) - if test "$glut_support" = "yes"; then - GL_LIBS="$LDFLAGS $lib" - break - fi - done - LIBS="$GLUT_SAVED_LIBS" - LDFLAGS="$GLUT_SAVED_LDFLAGS" - test "$glut_support" = "yes" && break - done - IFS="$SAVED_IFS" - AC_LANG_POP - fi - - LIBCHECK_EPILOGUE([GL]) - - if test "$glut_support" = "yes" -a "$enable_libwebpdemux" = "yes"; then - build_vwebp=yes - fi -]) -AM_CONDITIONAL([BUILD_VWEBP], [test "$build_vwebp" = "yes"]) - -dnl === check for SDL support === - -AC_ARG_ENABLE([sdl], - AS_HELP_STRING([--disable-sdl], - [Disable detection of SDL support - @<:@default=auto@:>@])) -AS_IF([test "x$enable_sdl" != "xno"], [ - CLEAR_LIBVARS([SDL]) - AC_PATH_PROGS([LIBSDL_CONFIG], [sdl-config]) - if test -n "$LIBSDL_CONFIG"; then - SDL_INCLUDES=`$LIBSDL_CONFIG --cflags` - SDL_LIBS="`$LIBSDL_CONFIG --libs`" - fi - - WITHLIB_OPTION([sdl], [SDL]) - - sdl_header="no" - LIBCHECK_PROLOGUE([SDL]) - AC_CHECK_HEADER([SDL/SDL.h], [sdl_header="SDL/SDL.h"], - [AC_CHECK_HEADER([SDL.h], [sdl_header="SDL.h"], - [AC_MSG_WARN(SDL library not available - no sdl.h)])]) - if test x"$sdl_header" != "xno"; then - AC_LANG_PUSH(C) - SDL_SAVED_LIBS="$LIBS" - for lib in "" "-lSDL" "-lSDLmain -lSDL"; do - LIBS="$SDL_SAVED_LIBS $lib" - # Perform a full link to ensure SDL_main is resolved if needed. - AC_LINK_IFELSE( - [AC_LANG_SOURCE([ - #include <$sdl_header> - int main(int argc, char** argv) { - SDL_Init(0); - return 0; - }])], - [SDL_LIBS="$LDFLAGS $LIBS" - SDL_INCLUDES="$SDL_INCLUDES -DWEBP_HAVE_SDL" - AC_DEFINE(WEBP_HAVE_SDL, [1], - [Set to 1 if SDL library is installed]) - sdl_support=yes] - ) - if test x"$sdl_support" = "xyes"; then - break - fi - done - # LIBS is restored by LIBCHECK_EPILOGUE - AC_LANG_POP - if test x"$sdl_header" = "xSDL.h"; then - SDL_INCLUDES="$SDL_INCLUDES -DWEBP_HAVE_JUST_SDL_H" - fi - fi - LIBCHECK_EPILOGUE([SDL]) - - if test x"$sdl_support" = "xyes"; then - build_vwebp_sdl=yes - else - AC_MSG_WARN(Optional SDL library not found) - fi -]) - -AM_CONDITIONAL([BUILD_VWEBP_SDL], [test "$build_vwebp_sdl" = "yes"]) - -dnl === check for PNG support === - -AC_ARG_ENABLE([png], AS_HELP_STRING([--disable-png], - [Disable detection of PNG format support - @<:@default=auto@:>@])) -AS_IF([test "x$enable_png" != "xno"], [ - CLEAR_LIBVARS([PNG]) - AC_PATH_PROGS([LIBPNG_CONFIG], - [libpng-config libpng16-config libpng15-config libpng14-config \ - libpng12-config]) - if test -n "$LIBPNG_CONFIG"; then - PNG_INCLUDES=`$LIBPNG_CONFIG --cflags` - PNG_LIBS="`$LIBPNG_CONFIG --ldflags`" - fi - - WITHLIB_OPTION([png], [PNG]) - - LIBCHECK_PROLOGUE([PNG]) - AC_CHECK_HEADER(png.h, - AC_SEARCH_LIBS(png_get_libpng_ver, [png], - [test "$ac_cv_search_png_get_libpng_ver" = "none required" \ - || PNG_LIBS="$PNG_LIBS $ac_cv_search_png_get_libpng_ver" - PNG_INCLUDES="$PNG_INCLUDES -DWEBP_HAVE_PNG" - AC_DEFINE(WEBP_HAVE_PNG, [1], - [Set to 1 if PNG library is installed]) - png_support=yes - ], - [AC_MSG_WARN(Optional png library not found) - PNG_LIBS="" - PNG_INCLUDES="" - ], - [$MATH_LIBS]), - [AC_MSG_WARN(png library not available - no png.h) - PNG_LIBS="" - PNG_INCLUDES="" - ], - ) - LIBCHECK_EPILOGUE([PNG]) -]) - -dnl === check for JPEG support === - -AC_ARG_ENABLE([jpeg], - AS_HELP_STRING([--disable-jpeg], - [Disable detection of JPEG format support - @<:@default=auto@:>@])) -AS_IF([test "x$enable_jpeg" != "xno"], [ - CLEAR_LIBVARS([JPEG]) - WITHLIB_OPTION([jpeg], [JPEG]) - - LIBCHECK_PROLOGUE([JPEG]) - AC_CHECK_HEADER(jpeglib.h, - AC_CHECK_LIB(jpeg, jpeg_set_defaults, - [JPEG_LIBS="$JPEG_LIBS -ljpeg" - JPEG_INCLUDES="$JPEG_INCLUDES -DWEBP_HAVE_JPEG" - AC_DEFINE(WEBP_HAVE_JPEG, [1], - [Set to 1 if JPEG library is installed]) - jpeg_support=yes - ], - AC_MSG_WARN(Optional jpeg library not found), - [$MATH_LIBS]), - AC_MSG_WARN(jpeg library not available - no jpeglib.h) - ) - LIBCHECK_EPILOGUE([JPEG]) -]) - -dnl === check for TIFF support === - -AC_ARG_ENABLE([tiff], - AS_HELP_STRING([--disable-tiff], - [Disable detection of TIFF format support - @<:@default=auto@:>@])) -AS_IF([test "x$enable_tiff" != "xno"], [ - CLEAR_LIBVARS([TIFF]) - WITHLIB_OPTION([tiff], [TIFF]) - - LIBCHECK_PROLOGUE([TIFF]) - AC_CHECK_HEADER(tiffio.h, - AC_CHECK_LIB(tiff, TIFFGetVersion, - [TIFF_LIBS="$TIFF_LIBS -ltiff" - TIFF_INCLUDES="$TIFF_INCLUDES -DWEBP_HAVE_TIFF" - AC_DEFINE(WEBP_HAVE_TIFF, [1], - [Set to 1 if TIFF library is installed]) - tiff_support=yes - ], - AC_MSG_WARN(Optional tiff library not found), - [$MATH_LIBS]), - AC_MSG_WARN(tiff library not available - no tiffio.h) - ) - LIBCHECK_EPILOGUE([TIFF]) -]) - -dnl === check for GIF support === - -AC_ARG_ENABLE([gif], AS_HELP_STRING([--disable-gif], - [Disable detection of GIF format support - @<:@default=auto@:>@])) -AS_IF([test "x$enable_gif" != "xno"], [ - CLEAR_LIBVARS([GIF]) - WITHLIB_OPTION([gif], [GIF]) - - LIBCHECK_PROLOGUE([GIF]) - AC_CHECK_HEADER(gif_lib.h, - AC_CHECK_LIB([gif], [DGifOpenFileHandle], - [GIF_LIBS="$GIF_LIBS -lgif" - AC_DEFINE(WEBP_HAVE_GIF, [1], - [Set to 1 if GIF library is installed]) - gif_support=yes - ], - AC_MSG_WARN(Optional gif library not found), - [$MATH_LIBS]), - AC_MSG_WARN(gif library not available - no gif_lib.h) - ) - LIBCHECK_EPILOGUE([GIF]) - - if test "$gif_support" = "yes" -a \ - "$enable_libwebpdemux" = "yes"; then - build_anim_diff=yes - fi - - if test "$gif_support" = "yes" -a \ - "$enable_libwebpmux" = "yes"; then - build_gif2webp=yes - fi -]) -AM_CONDITIONAL([BUILD_ANIMDIFF], [test "${build_anim_diff}" = "yes"]) -AM_CONDITIONAL([BUILD_GIF2WEBP], [test "${build_gif2webp}" = "yes"]) - -if test "$enable_libwebpdemux" = "yes" -a "$enable_libwebpmux" = "yes"; then - build_img2webp=yes -fi -AM_CONDITIONAL([BUILD_IMG2WEBP], [test "${build_img2webp}" = "yes"]) - -if test "$enable_libwebpmux" = "yes"; then - build_webpinfo=yes -fi -AM_CONDITIONAL([BUILD_WEBPINFO], [test "${build_webpinfo}" = "yes"]) - -dnl === check for WIC support === - -AC_ARG_ENABLE([wic], - AS_HELP_STRING([--disable-wic], - [Disable Windows Imaging Component (WIC) detection. - @<:@default=auto@:>@]),, - [enable_wic=yes]) - -case $host_os in -mingw*) -if test "$enable_wic" = "yes"; then - AC_CHECK_HEADERS([wincodec.h shlwapi.h windows.h]) - if test "$ac_cv_header_wincodec_h" = "yes"; then - AC_MSG_CHECKING(for Windows Imaging Component support) - SAVED_LIBS=$LIBS - LIBS="-lshlwapi -lole32 $LIBS" - # match include structure from [cd]webp.c - wic_headers=" - #define INITGUID - #define CINTERFACE - #define COBJMACROS - #define _WIN32_IE 0x500 - - #include - #include - #include - " - # test for functions from each lib and the GUID is created properly - wic_main=" - int main(void) { - CLSID_WICImagingFactory; - CoInitialize(NULL); - SHCreateStreamOnFile(NULL, 0, NULL); - return 0; - } - " - AC_LANG_PUSH(C) - AC_LINK_IFELSE( - [AC_LANG_SOURCE([ - $wic_headers - $wic_main])], - [wic_support=yes], - [wic_support=no] - ) - AC_LANG_POP - - test "$wic_support" = "yes" || LIBS=$SAVED_LIBS - AC_MSG_RESULT(${wic_support-no}) - fi -fi -esac - -dnl === If --enable-swap-16bit-csp is defined, add -DWEBP_SWAP_16BIT_CSP=1 - -USE_SWAP_16BIT_CSP="" -AC_MSG_CHECKING(if --enable-swap-16bit-csp option is specified) -AC_ARG_ENABLE([swap-16bit-csp], - AS_HELP_STRING([--enable-swap-16bit-csp], - [Enable byte swap for 16 bit colorspaces])) -if test "$enable_swap_16bit_csp" = "yes"; then - USE_SWAP_16BIT_CSP="-DWEBP_SWAP_16BIT_CSP=1" -fi -AC_MSG_RESULT(${enable_swap_16bit_csp-no}) -AC_SUBST(USE_SWAP_16BIT_CSP) - -dnl === If --disable-near-lossless is defined, add -DWEBP_NEAR_LOSSLESS=0 - -AC_DEFINE(WEBP_NEAR_LOSSLESS, [1], [Enable near lossless encoding]) -AC_MSG_CHECKING(if --disable-near-lossless option is specified) -AC_ARG_ENABLE([near_lossless], - AS_HELP_STRING([--disable-near-lossless], - [Disable near lossless encoding]), - [], [enable_near_lossless=yes]) -if test "$enable_near_lossless" = "no"; then - AC_DEFINE(WEBP_NEAR_LOSSLESS, [0], [Enable near lossless encoding]) - AC_MSG_RESULT([yes]) -else - AC_MSG_RESULT([no]) -fi - -dnl === Check whether libwebpmux should be built -AC_MSG_CHECKING(whether libwebpmux is to be built) -AC_ARG_ENABLE([libwebpmux], - AS_HELP_STRING([--enable-libwebpmux], - [Build libwebpmux @<:@default=no@:>@])) -AC_MSG_RESULT(${enable_libwebpmux-no}) -AM_CONDITIONAL([BUILD_MUX], [test "$enable_libwebpmux" = "yes"]) - -dnl === Check whether libwebpdemux should be built -AC_MSG_CHECKING(whether libwebpdemux is to be built) -AC_ARG_ENABLE([libwebpdemux], - AS_HELP_STRING([--disable-libwebpdemux], - [Disable libwebpdemux @<:@default=no@:>@]), - [], [enable_libwebpdemux=yes]) -AC_MSG_RESULT(${enable_libwebpdemux-no}) -AM_CONDITIONAL([BUILD_DEMUX], [test "$enable_libwebpdemux" = "yes"]) - -dnl === Check whether decoder library should be built. -AC_MSG_CHECKING(whether decoder library is to be built) -AC_ARG_ENABLE([libwebpdecoder], - AS_HELP_STRING([--enable-libwebpdecoder], - [Build libwebpdecoder @<:@default=no@:>@])) -AC_MSG_RESULT(${enable_libwebpdecoder-no}) -AM_CONDITIONAL([BUILD_LIBWEBPDECODER], [test "$enable_libwebpdecoder" = "yes"]) - -dnl === Check whether libwebpextras should be built -AC_MSG_CHECKING(whether libwebpextras is to be built) -AC_ARG_ENABLE([libwebpextras], - AS_HELP_STRING([--enable-libwebpextras], - [Build libwebpextras @<:@default=no@:>@])) -AC_MSG_RESULT(${enable_libwebpextras-no}) -AM_CONDITIONAL([BUILD_EXTRAS], [test "$enable_libwebpextras" = "yes"]) - -dnl ========================= - -AC_CONFIG_MACRO_DIR([m4]) -AC_CONFIG_HEADERS([src/webp/config.h]) -AC_CONFIG_FILES([Makefile src/Makefile man/Makefile \ - examples/Makefile extras/Makefile imageio/Makefile \ - src/dec/Makefile src/enc/Makefile src/dsp/Makefile \ - src/demux/Makefile src/mux/Makefile \ - src/utils/Makefile \ - src/libwebp.pc src/libwebpdecoder.pc \ - src/demux/libwebpdemux.pc src/mux/libwebpmux.pc]) - - -AC_OUTPUT - -AC_MSG_NOTICE([ -WebP Configuration Summary --------------------------- - -Shared libraries: ${enable_shared} -Static libraries: ${enable_static} -Threading support: ${enable_threading-no} -libwebp: yes -libwebpdecoder: ${enable_libwebpdecoder-no} -libwebpdemux: ${enable_libwebpdemux-no} -libwebpmux: ${enable_libwebpmux-no} -libwebpextras: ${enable_libwebpextras-no} - -Tools: -cwebp : ${enable_libwebpdemux-no} - Input format support - ==================== - JPEG : ${jpeg_support-no} - PNG : ${png_support-no} - TIFF : ${tiff_support-no} - WIC : ${wic_support-no} -dwebp : ${enable_libwebpdemux-no} - Output format support - ===================== - PNG : ${png_support-no} - WIC : ${wic_support-no} -GIF support : ${gif_support-no} -anim_diff : ${build_anim_diff-no} -gif2webp : ${build_gif2webp-no} -img2webp : ${build_img2webp-no} -webpmux : ${enable_libwebpmux-no} -vwebp : ${build_vwebp-no} -webpinfo : ${build_webpinfo-no} -SDL support : ${sdl_support-no} -vwebp_sdl : ${build_vwebp_sdl-no} -]) diff --git a/Extended/libwebp/depcomp b/Extended/libwebp/depcomp deleted file mode 100755 index 65cbf70..0000000 --- a/Extended/libwebp/depcomp +++ /dev/null @@ -1,791 +0,0 @@ -#! /bin/sh -# depcomp - compile a program generating dependencies as side-effects - -scriptversion=2018-03-07.03; # UTC - -# Copyright (C) 1999-2018 Free Software Foundation, Inc. - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . - -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - -# Originally written by Alexandre Oliva . - -case $1 in - '') - echo "$0: No command. Try '$0 --help' for more information." 1>&2 - exit 1; - ;; - -h | --h*) - cat <<\EOF -Usage: depcomp [--help] [--version] PROGRAM [ARGS] - -Run PROGRAMS ARGS to compile a file, generating dependencies -as side-effects. - -Environment variables: - depmode Dependency tracking mode. - source Source file read by 'PROGRAMS ARGS'. - object Object file output by 'PROGRAMS ARGS'. - DEPDIR directory where to store dependencies. - depfile Dependency file to output. - tmpdepfile Temporary file to use when outputting dependencies. - libtool Whether libtool is used (yes/no). - -Report bugs to . -EOF - exit $? - ;; - -v | --v*) - echo "depcomp $scriptversion" - exit $? - ;; -esac - -# Get the directory component of the given path, and save it in the -# global variables '$dir'. Note that this directory component will -# be either empty or ending with a '/' character. This is deliberate. -set_dir_from () -{ - case $1 in - */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;; - *) dir=;; - esac -} - -# Get the suffix-stripped basename of the given path, and save it the -# global variable '$base'. -set_base_from () -{ - base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'` -} - -# If no dependency file was actually created by the compiler invocation, -# we still have to create a dummy depfile, to avoid errors with the -# Makefile "include basename.Plo" scheme. -make_dummy_depfile () -{ - echo "#dummy" > "$depfile" -} - -# Factor out some common post-processing of the generated depfile. -# Requires the auxiliary global variable '$tmpdepfile' to be set. -aix_post_process_depfile () -{ - # If the compiler actually managed to produce a dependency file, - # post-process it. - if test -f "$tmpdepfile"; then - # Each line is of the form 'foo.o: dependency.h'. - # Do two passes, one to just change these to - # $object: dependency.h - # and one to simply output - # dependency.h: - # which is needed to avoid the deleted-header problem. - { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile" - sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile" - } > "$depfile" - rm -f "$tmpdepfile" - else - make_dummy_depfile - fi -} - -# A tabulation character. -tab=' ' -# A newline character. -nl=' -' -# Character ranges might be problematic outside the C locale. -# These definitions help. -upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ -lower=abcdefghijklmnopqrstuvwxyz -digits=0123456789 -alpha=${upper}${lower} - -if test -z "$depmode" || test -z "$source" || test -z "$object"; then - echo "depcomp: Variables source, object and depmode must be set" 1>&2 - exit 1 -fi - -# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. -depfile=${depfile-`echo "$object" | - sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} -tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} - -rm -f "$tmpdepfile" - -# Avoid interferences from the environment. -gccflag= dashmflag= - -# Some modes work just like other modes, but use different flags. We -# parameterize here, but still list the modes in the big case below, -# to make depend.m4 easier to write. Note that we *cannot* use a case -# here, because this file can only contain one case statement. -if test "$depmode" = hp; then - # HP compiler uses -M and no extra arg. - gccflag=-M - depmode=gcc -fi - -if test "$depmode" = dashXmstdout; then - # This is just like dashmstdout with a different argument. - dashmflag=-xM - depmode=dashmstdout -fi - -cygpath_u="cygpath -u -f -" -if test "$depmode" = msvcmsys; then - # This is just like msvisualcpp but w/o cygpath translation. - # Just convert the backslash-escaped backslashes to single forward - # slashes to satisfy depend.m4 - cygpath_u='sed s,\\\\,/,g' - depmode=msvisualcpp -fi - -if test "$depmode" = msvc7msys; then - # This is just like msvc7 but w/o cygpath translation. - # Just convert the backslash-escaped backslashes to single forward - # slashes to satisfy depend.m4 - cygpath_u='sed s,\\\\,/,g' - depmode=msvc7 -fi - -if test "$depmode" = xlc; then - # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information. - gccflag=-qmakedep=gcc,-MF - depmode=gcc -fi - -case "$depmode" in -gcc3) -## gcc 3 implements dependency tracking that does exactly what -## we want. Yay! Note: for some reason libtool 1.4 doesn't like -## it if -MD -MP comes after the -MF stuff. Hmm. -## Unfortunately, FreeBSD c89 acceptance of flags depends upon -## the command line argument order; so add the flags where they -## appear in depend2.am. Note that the slowdown incurred here -## affects only configure: in makefiles, %FASTDEP% shortcuts this. - for arg - do - case $arg in - -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; - *) set fnord "$@" "$arg" ;; - esac - shift # fnord - shift # $arg - done - "$@" - stat=$? - if test $stat -ne 0; then - rm -f "$tmpdepfile" - exit $stat - fi - mv "$tmpdepfile" "$depfile" - ;; - -gcc) -## Note that this doesn't just cater to obsosete pre-3.x GCC compilers. -## but also to in-use compilers like IMB xlc/xlC and the HP C compiler. -## (see the conditional assignment to $gccflag above). -## There are various ways to get dependency output from gcc. Here's -## why we pick this rather obscure method: -## - Don't want to use -MD because we'd like the dependencies to end -## up in a subdir. Having to rename by hand is ugly. -## (We might end up doing this anyway to support other compilers.) -## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like -## -MM, not -M (despite what the docs say). Also, it might not be -## supported by the other compilers which use the 'gcc' depmode. -## - Using -M directly means running the compiler twice (even worse -## than renaming). - if test -z "$gccflag"; then - gccflag=-MD, - fi - "$@" -Wp,"$gccflag$tmpdepfile" - stat=$? - if test $stat -ne 0; then - rm -f "$tmpdepfile" - exit $stat - fi - rm -f "$depfile" - echo "$object : \\" > "$depfile" - # The second -e expression handles DOS-style file names with drive - # letters. - sed -e 's/^[^:]*: / /' \ - -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" -## This next piece of magic avoids the "deleted header file" problem. -## The problem is that when a header file which appears in a .P file -## is deleted, the dependency causes make to die (because there is -## typically no way to rebuild the header). We avoid this by adding -## dummy dependencies for each header file. Too bad gcc doesn't do -## this for us directly. -## Some versions of gcc put a space before the ':'. On the theory -## that the space means something, we add a space to the output as -## well. hp depmode also adds that space, but also prefixes the VPATH -## to the object. Take care to not repeat it in the output. -## Some versions of the HPUX 10.20 sed can't process this invocation -## correctly. Breaking it into two sed invocations is a workaround. - tr ' ' "$nl" < "$tmpdepfile" \ - | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ - | sed -e 's/$/ :/' >> "$depfile" - rm -f "$tmpdepfile" - ;; - -hp) - # This case exists only to let depend.m4 do its work. It works by - # looking at the text of this script. This case will never be run, - # since it is checked for above. - exit 1 - ;; - -sgi) - if test "$libtool" = yes; then - "$@" "-Wp,-MDupdate,$tmpdepfile" - else - "$@" -MDupdate "$tmpdepfile" - fi - stat=$? - if test $stat -ne 0; then - rm -f "$tmpdepfile" - exit $stat - fi - rm -f "$depfile" - - if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files - echo "$object : \\" > "$depfile" - # Clip off the initial element (the dependent). Don't try to be - # clever and replace this with sed code, as IRIX sed won't handle - # lines with more than a fixed number of characters (4096 in - # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; - # the IRIX cc adds comments like '#:fec' to the end of the - # dependency line. - tr ' ' "$nl" < "$tmpdepfile" \ - | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \ - | tr "$nl" ' ' >> "$depfile" - echo >> "$depfile" - # The second pass generates a dummy entry for each header file. - tr ' ' "$nl" < "$tmpdepfile" \ - | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ - >> "$depfile" - else - make_dummy_depfile - fi - rm -f "$tmpdepfile" - ;; - -xlc) - # This case exists only to let depend.m4 do its work. It works by - # looking at the text of this script. This case will never be run, - # since it is checked for above. - exit 1 - ;; - -aix) - # The C for AIX Compiler uses -M and outputs the dependencies - # in a .u file. In older versions, this file always lives in the - # current directory. Also, the AIX compiler puts '$object:' at the - # start of each line; $object doesn't have directory information. - # Version 6 uses the directory in both cases. - set_dir_from "$object" - set_base_from "$object" - if test "$libtool" = yes; then - tmpdepfile1=$dir$base.u - tmpdepfile2=$base.u - tmpdepfile3=$dir.libs/$base.u - "$@" -Wc,-M - else - tmpdepfile1=$dir$base.u - tmpdepfile2=$dir$base.u - tmpdepfile3=$dir$base.u - "$@" -M - fi - stat=$? - if test $stat -ne 0; then - rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" - exit $stat - fi - - for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" - do - test -f "$tmpdepfile" && break - done - aix_post_process_depfile - ;; - -tcc) - # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26 - # FIXME: That version still under development at the moment of writing. - # Make that this statement remains true also for stable, released - # versions. - # It will wrap lines (doesn't matter whether long or short) with a - # trailing '\', as in: - # - # foo.o : \ - # foo.c \ - # foo.h \ - # - # It will put a trailing '\' even on the last line, and will use leading - # spaces rather than leading tabs (at least since its commit 0394caf7 - # "Emit spaces for -MD"). - "$@" -MD -MF "$tmpdepfile" - stat=$? - if test $stat -ne 0; then - rm -f "$tmpdepfile" - exit $stat - fi - rm -f "$depfile" - # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'. - # We have to change lines of the first kind to '$object: \'. - sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile" - # And for each line of the second kind, we have to emit a 'dep.h:' - # dummy dependency, to avoid the deleted-header problem. - sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile" - rm -f "$tmpdepfile" - ;; - -## The order of this option in the case statement is important, since the -## shell code in configure will try each of these formats in the order -## listed in this file. A plain '-MD' option would be understood by many -## compilers, so we must ensure this comes after the gcc and icc options. -pgcc) - # Portland's C compiler understands '-MD'. - # Will always output deps to 'file.d' where file is the root name of the - # source file under compilation, even if file resides in a subdirectory. - # The object file name does not affect the name of the '.d' file. - # pgcc 10.2 will output - # foo.o: sub/foo.c sub/foo.h - # and will wrap long lines using '\' : - # foo.o: sub/foo.c ... \ - # sub/foo.h ... \ - # ... - set_dir_from "$object" - # Use the source, not the object, to determine the base name, since - # that's sadly what pgcc will do too. - set_base_from "$source" - tmpdepfile=$base.d - - # For projects that build the same source file twice into different object - # files, the pgcc approach of using the *source* file root name can cause - # problems in parallel builds. Use a locking strategy to avoid stomping on - # the same $tmpdepfile. - lockdir=$base.d-lock - trap " - echo '$0: caught signal, cleaning up...' >&2 - rmdir '$lockdir' - exit 1 - " 1 2 13 15 - numtries=100 - i=$numtries - while test $i -gt 0; do - # mkdir is a portable test-and-set. - if mkdir "$lockdir" 2>/dev/null; then - # This process acquired the lock. - "$@" -MD - stat=$? - # Release the lock. - rmdir "$lockdir" - break - else - # If the lock is being held by a different process, wait - # until the winning process is done or we timeout. - while test -d "$lockdir" && test $i -gt 0; do - sleep 1 - i=`expr $i - 1` - done - fi - i=`expr $i - 1` - done - trap - 1 2 13 15 - if test $i -le 0; then - echo "$0: failed to acquire lock after $numtries attempts" >&2 - echo "$0: check lockdir '$lockdir'" >&2 - exit 1 - fi - - if test $stat -ne 0; then - rm -f "$tmpdepfile" - exit $stat - fi - rm -f "$depfile" - # Each line is of the form `foo.o: dependent.h', - # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. - # Do two passes, one to just change these to - # `$object: dependent.h' and one to simply `dependent.h:'. - sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" - # Some versions of the HPUX 10.20 sed can't process this invocation - # correctly. Breaking it into two sed invocations is a workaround. - sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \ - | sed -e 's/$/ :/' >> "$depfile" - rm -f "$tmpdepfile" - ;; - -hp2) - # The "hp" stanza above does not work with aCC (C++) and HP's ia64 - # compilers, which have integrated preprocessors. The correct option - # to use with these is +Maked; it writes dependencies to a file named - # 'foo.d', which lands next to the object file, wherever that - # happens to be. - # Much of this is similar to the tru64 case; see comments there. - set_dir_from "$object" - set_base_from "$object" - if test "$libtool" = yes; then - tmpdepfile1=$dir$base.d - tmpdepfile2=$dir.libs/$base.d - "$@" -Wc,+Maked - else - tmpdepfile1=$dir$base.d - tmpdepfile2=$dir$base.d - "$@" +Maked - fi - stat=$? - if test $stat -ne 0; then - rm -f "$tmpdepfile1" "$tmpdepfile2" - exit $stat - fi - - for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" - do - test -f "$tmpdepfile" && break - done - if test -f "$tmpdepfile"; then - sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile" - # Add 'dependent.h:' lines. - sed -ne '2,${ - s/^ *// - s/ \\*$// - s/$/:/ - p - }' "$tmpdepfile" >> "$depfile" - else - make_dummy_depfile - fi - rm -f "$tmpdepfile" "$tmpdepfile2" - ;; - -tru64) - # The Tru64 compiler uses -MD to generate dependencies as a side - # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. - # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put - # dependencies in 'foo.d' instead, so we check for that too. - # Subdirectories are respected. - set_dir_from "$object" - set_base_from "$object" - - if test "$libtool" = yes; then - # Libtool generates 2 separate objects for the 2 libraries. These - # two compilations output dependencies in $dir.libs/$base.o.d and - # in $dir$base.o.d. We have to check for both files, because - # one of the two compilations can be disabled. We should prefer - # $dir$base.o.d over $dir.libs/$base.o.d because the latter is - # automatically cleaned when .libs/ is deleted, while ignoring - # the former would cause a distcleancheck panic. - tmpdepfile1=$dir$base.o.d # libtool 1.5 - tmpdepfile2=$dir.libs/$base.o.d # Likewise. - tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504 - "$@" -Wc,-MD - else - tmpdepfile1=$dir$base.d - tmpdepfile2=$dir$base.d - tmpdepfile3=$dir$base.d - "$@" -MD - fi - - stat=$? - if test $stat -ne 0; then - rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" - exit $stat - fi - - for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" - do - test -f "$tmpdepfile" && break - done - # Same post-processing that is required for AIX mode. - aix_post_process_depfile - ;; - -msvc7) - if test "$libtool" = yes; then - showIncludes=-Wc,-showIncludes - else - showIncludes=-showIncludes - fi - "$@" $showIncludes > "$tmpdepfile" - stat=$? - grep -v '^Note: including file: ' "$tmpdepfile" - if test $stat -ne 0; then - rm -f "$tmpdepfile" - exit $stat - fi - rm -f "$depfile" - echo "$object : \\" > "$depfile" - # The first sed program below extracts the file names and escapes - # backslashes for cygpath. The second sed program outputs the file - # name when reading, but also accumulates all include files in the - # hold buffer in order to output them again at the end. This only - # works with sed implementations that can handle large buffers. - sed < "$tmpdepfile" -n ' -/^Note: including file: *\(.*\)/ { - s//\1/ - s/\\/\\\\/g - p -}' | $cygpath_u | sort -u | sed -n ' -s/ /\\ /g -s/\(.*\)/'"$tab"'\1 \\/p -s/.\(.*\) \\/\1:/ -H -$ { - s/.*/'"$tab"'/ - G - p -}' >> "$depfile" - echo >> "$depfile" # make sure the fragment doesn't end with a backslash - rm -f "$tmpdepfile" - ;; - -msvc7msys) - # This case exists only to let depend.m4 do its work. It works by - # looking at the text of this script. This case will never be run, - # since it is checked for above. - exit 1 - ;; - -#nosideeffect) - # This comment above is used by automake to tell side-effect - # dependency tracking mechanisms from slower ones. - -dashmstdout) - # Important note: in order to support this mode, a compiler *must* - # always write the preprocessed file to stdout, regardless of -o. - "$@" || exit $? - - # Remove the call to Libtool. - if test "$libtool" = yes; then - while test "X$1" != 'X--mode=compile'; do - shift - done - shift - fi - - # Remove '-o $object'. - IFS=" " - for arg - do - case $arg in - -o) - shift - ;; - $object) - shift - ;; - *) - set fnord "$@" "$arg" - shift # fnord - shift # $arg - ;; - esac - done - - test -z "$dashmflag" && dashmflag=-M - # Require at least two characters before searching for ':' - # in the target name. This is to cope with DOS-style filenames: - # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. - "$@" $dashmflag | - sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile" - rm -f "$depfile" - cat < "$tmpdepfile" > "$depfile" - # Some versions of the HPUX 10.20 sed can't process this sed invocation - # correctly. Breaking it into two sed invocations is a workaround. - tr ' ' "$nl" < "$tmpdepfile" \ - | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ - | sed -e 's/$/ :/' >> "$depfile" - rm -f "$tmpdepfile" - ;; - -dashXmstdout) - # This case only exists to satisfy depend.m4. It is never actually - # run, as this mode is specially recognized in the preamble. - exit 1 - ;; - -makedepend) - "$@" || exit $? - # Remove any Libtool call - if test "$libtool" = yes; then - while test "X$1" != 'X--mode=compile'; do - shift - done - shift - fi - # X makedepend - shift - cleared=no eat=no - for arg - do - case $cleared in - no) - set ""; shift - cleared=yes ;; - esac - if test $eat = yes; then - eat=no - continue - fi - case "$arg" in - -D*|-I*) - set fnord "$@" "$arg"; shift ;; - # Strip any option that makedepend may not understand. Remove - # the object too, otherwise makedepend will parse it as a source file. - -arch) - eat=yes ;; - -*|$object) - ;; - *) - set fnord "$@" "$arg"; shift ;; - esac - done - obj_suffix=`echo "$object" | sed 's/^.*\././'` - touch "$tmpdepfile" - ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" - rm -f "$depfile" - # makedepend may prepend the VPATH from the source file name to the object. - # No need to regex-escape $object, excess matching of '.' is harmless. - sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" - # Some versions of the HPUX 10.20 sed can't process the last invocation - # correctly. Breaking it into two sed invocations is a workaround. - sed '1,2d' "$tmpdepfile" \ - | tr ' ' "$nl" \ - | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ - | sed -e 's/$/ :/' >> "$depfile" - rm -f "$tmpdepfile" "$tmpdepfile".bak - ;; - -cpp) - # Important note: in order to support this mode, a compiler *must* - # always write the preprocessed file to stdout. - "$@" || exit $? - - # Remove the call to Libtool. - if test "$libtool" = yes; then - while test "X$1" != 'X--mode=compile'; do - shift - done - shift - fi - - # Remove '-o $object'. - IFS=" " - for arg - do - case $arg in - -o) - shift - ;; - $object) - shift - ;; - *) - set fnord "$@" "$arg" - shift # fnord - shift # $arg - ;; - esac - done - - "$@" -E \ - | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ - -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ - | sed '$ s: \\$::' > "$tmpdepfile" - rm -f "$depfile" - echo "$object : \\" > "$depfile" - cat < "$tmpdepfile" >> "$depfile" - sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" - rm -f "$tmpdepfile" - ;; - -msvisualcpp) - # Important note: in order to support this mode, a compiler *must* - # always write the preprocessed file to stdout. - "$@" || exit $? - - # Remove the call to Libtool. - if test "$libtool" = yes; then - while test "X$1" != 'X--mode=compile'; do - shift - done - shift - fi - - IFS=" " - for arg - do - case "$arg" in - -o) - shift - ;; - $object) - shift - ;; - "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") - set fnord "$@" - shift - shift - ;; - *) - set fnord "$@" "$arg" - shift - shift - ;; - esac - done - "$@" -E 2>/dev/null | - sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" - rm -f "$depfile" - echo "$object : \\" > "$depfile" - sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" - echo "$tab" >> "$depfile" - sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" - rm -f "$tmpdepfile" - ;; - -msvcmsys) - # This case exists only to let depend.m4 do its work. It works by - # looking at the text of this script. This case will never be run, - # since it is checked for above. - exit 1 - ;; - -none) - exec "$@" - ;; - -*) - echo "Unknown depmode $depmode" 1>&2 - exit 1 - ;; -esac - -exit 0 - -# Local Variables: -# mode: shell-script -# sh-indentation: 2 -# eval: (add-hook 'before-save-hook 'time-stamp) -# time-stamp-start: "scriptversion=" -# time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-time-zone: "UTC0" -# time-stamp-end: "; # UTC" -# End: diff --git a/Extended/libwebp/doc/README b/Extended/libwebp/doc/README deleted file mode 100644 index 7f23e0c..0000000 --- a/Extended/libwebp/doc/README +++ /dev/null @@ -1,29 +0,0 @@ - -Generate libwebp Container Spec Docs from Text Source -===================================================== - -HTML generation requires kramdown [1], easily installed as a -rubygem [2]. Rubygems installation should satisfy dependencies -automatically. - -[1]: http://kramdown.rubyforge.org/ -[2]: http://rubygems.org/ - -HTML generation can then be done from the project root: - -$ kramdown doc/webp-container-spec.txt --template doc/template.html > \ - doc/output/webp-container-spec.html - -kramdown can optionally syntax highlight code blocks, using CodeRay [3], -a dependency of kramdown that rubygems will install automatically. The -following will apply inline CSS styling; an external stylesheet is not -needed. - -$ kramdown doc/webp-lossless-bitstream-spec.txt --template \ - doc/template.html --coderay-css style --coderay-line-numbers ' ' \ - --coderay-default-lang c > \ - doc/output/webp-lossless-bitstream-spec.html - -Optimally, use kramdown 0.13.7 or newer if syntax highlighting desired. - -[3]: http://coderay.rubychan.de/ diff --git a/Extended/libwebp/doc/template.html b/Extended/libwebp/doc/template.html deleted file mode 100644 index 5dbc289..0000000 --- a/Extended/libwebp/doc/template.html +++ /dev/null @@ -1,94 +0,0 @@ - - - - - WebP Container Specification - - - - -<%= @body %> - - diff --git a/Extended/libwebp/doc/webp-container-spec.txt b/Extended/libwebp/doc/webp-container-spec.txt deleted file mode 100644 index 94a7ca2..0000000 --- a/Extended/libwebp/doc/webp-container-spec.txt +++ /dev/null @@ -1,823 +0,0 @@ - - - -WebP Container Specification -============================ - -* TOC placeholder -{:toc} - - -Introduction ------------- - -WebP is an image format that uses either (i) the VP8 key frame encoding -to compress image data in a lossy way, or (ii) the WebP lossless encoding -(and possibly other encodings in the future). These encoding schemes should -make it more efficient than currently used formats. It is optimized for fast -image transfer over the network (e.g., for websites). The WebP format has -feature parity (color profile, metadata, animation etc) with other formats as -well. This document describes the structure of a WebP file. - -The WebP container (i.e., RIFF container for WebP) allows feature support over -and above the basic use case of WebP (i.e., a file containing a single image -encoded as a VP8 key frame). The WebP container provides additional support -for: - - * **Lossless compression.** An image can be losslessly compressed, using the - WebP Lossless Format. - - * **Metadata.** An image may have metadata stored in EXIF or XMP formats. - - * **Transparency.** An image may have transparency, i.e., an alpha channel. - - * **Color Profile.** An image may have an embedded ICC profile as described - by the [International Color Consortium][iccspec]. - - * **Animation.** An image may have multiple frames with pauses between them, - making it an animation. - -The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", -"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this -document are to be interpreted as described in [RFC 2119][]. - -Bit numbering in chunk diagrams starts at `0` for the most significant bit -('MSB 0') as described in [RFC 1166][]. - -**Note:** Out of the features mentioned above, lossy compression, lossless -compression, transparency, metadata, color profile and animation are finalized -and are to be considered stable. - -Terminology & Basics ------------------------- - -A WebP file contains either a still image (i.e., an encoded matrix of pixels) -or an [animation](#animation). Optionally, it can also contain transparency -information, color profile and metadata. In case we need to refer only to the -matrix of pixels, we will call it the _canvas_ of the image. - -Below are additional terms used throughout this document: - -_Reader/Writer_ - -: Code that reads WebP files is referred to as a _reader_, while code that - writes them is referred to as a _writer_. - -_uint16_ - -: A 16-bit, little-endian, unsigned integer. - -_uint24_ - -: A 24-bit, little-endian, unsigned integer. - -_uint32_ - -: A 32-bit, little-endian, unsigned integer. - -_FourCC_ - -: A _FourCC_ (four-character code) is a _uint32_ created by concatenating four - ASCII characters in little-endian order. - -_1-based_ - -: An unsigned integer field storing values offset by `-1`. e.g., Such a field - would store value _25_ as _24_. - - -RIFF File Format ----------------- - -The WebP file format is based on the RIFF (resource interchange file format) -document format. - -The basic element of a RIFF file is a _chunk_. It consists of: - - 0 1 2 3 - 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | Chunk FourCC | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | Chunk Size | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | Chunk Payload | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - -Chunk FourCC: 32 bits - -: ASCII four-character code used for chunk identification. - -Chunk Size: 32 bits (_uint32_) - -: The size of the chunk not including this field, the chunk identifier or - padding. - -Chunk Payload: _Chunk Size_ bytes - -: The data payload. If _Chunk Size_ is odd, a single padding byte -- that - SHOULD be `0` -- is added. - -_ChunkHeader('ABCD')_ - -: This is used to describe the _FourCC_ and _Chunk Size_ header of individual - chunks, where 'ABCD' is the FourCC for the chunk. This element's - size is 8 bytes. - -**Note:** RIFF has a convention that all-uppercase chunk FourCCs are standard -chunks that apply to any RIFF file format, while FourCCs specific to a file -format are all lowercase. WebP does not follow this convention. - - -WebP File Header ----------------- - - 0 1 2 3 - 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | 'R' | 'I' | 'F' | 'F' | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | File Size | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | 'W' | 'E' | 'B' | 'P' | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - -'RIFF': 32 bits - -: The ASCII characters 'R' 'I' 'F' 'F'. - -File Size: 32 bits (_uint32_) - -: The size of the file in bytes starting at offset 8. The maximum value of - this field is 2^32 minus 10 bytes and thus the size of the whole file is at - most 4GiB minus 2 bytes. - -'WEBP': 32 bits - -: The ASCII characters 'W' 'E' 'B' 'P'. - -A WebP file MUST begin with a RIFF header with the FourCC 'WEBP'. The file size -in the header is the total size of the chunks that follow plus `4` bytes for -the 'WEBP' FourCC. The file SHOULD NOT contain anything after it. As the size -of any chunk is even, the size given by the RIFF header is also even. The -contents of individual chunks will be described in the following sections. - - -Simple File Format (Lossy) --------------------------- - -This layout SHOULD be used if the image requires _lossy_ encoding and does not -require transparency or other advanced features provided by the extended format. -Files with this layout are smaller and supported by older software. - -Simple WebP (lossy) file format: - - 0 1 2 3 - 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | WebP file header (12 bytes) | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | VP8 chunk | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - -VP8 chunk: - - 0 1 2 3 - 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | ChunkHeader('VP8 ') | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | VP8 data | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - -VP8 data: _Chunk Size_ bytes - -: VP8 bitstream data. - -The VP8 bitstream format specification can be found at [VP8 Data Format and -Decoding Guide][vp8spec]. Note that the VP8 frame header contains the VP8 frame -width and height. That is assumed to be the width and height of the canvas. - -The VP8 specification describes how to decode the image into Y'CbCr -format. To convert to RGB, Rec. 601 SHOULD be used. - - -Simple File Format (Lossless) ------------------------------ - -**Note:** Older readers may not support files using the lossless format. - -This layout SHOULD be used if the image requires _lossless_ encoding (with an -optional transparency channel) and does not require advanced features provided -by the extended format. - -Simple WebP (lossless) file format: - - 0 1 2 3 - 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | WebP file header (12 bytes) | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | VP8L chunk | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - -VP8L chunk: - - 0 1 2 3 - 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | ChunkHeader('VP8L') | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | VP8L data | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - -VP8L data: _Chunk Size_ bytes - -: VP8L bitstream data. - -The current specification of the VP8L bitstream can be found at -[WebP Lossless Bitstream Format][webpllspec]. Note that the VP8L header -contains the VP8L image width and height. That is assumed to be the width -and height of the canvas. - - -Extended File Format --------------------- - -**Note:** Older readers may not support files using the extended format. - -An extended format file consists of: - - * A 'VP8X' chunk with information about features used in the file. - - * An optional 'ICCP' chunk with color profile. - - * An optional 'ANIM' chunk with animation control data. - - * Image data. - - * An optional 'EXIF' chunk with EXIF metadata. - - * An optional 'XMP ' chunk with XMP metadata. - - * An optional list of [unknown chunks](#unknown-chunks). _\[status: experimental\]_ - -For a _still image_, the _image data_ consists of a single frame, which is made -up of: - - * An optional [alpha subchunk](#alpha). - - * A [bitstream subchunk](#bitstream-vp8vp8l). - -For an _animated image_, the _image data_ consists of multiple frames. More -details about frames can be found in the [Animation](#animation) section. - -All chunks SHOULD be placed in the same order as listed above. If a chunk -appears in the wrong place, the file is invalid, but readers MAY parse the -file, ignoring the chunks that come too late. - -**Rationale:** Setting the order of chunks should allow quicker file -parsing. For example, if an 'ALPH' chunk does not appear in its required -position, a decoder can choose to stop searching for it. The rule of -ignoring late chunks should make programs that need to do a full search -give the same results as the ones stopping early. - -Extended WebP file header: -{:#extended_header} - - 0 1 2 3 - 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | WebP file header (12 bytes) | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | ChunkHeader('VP8X') | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - |Rsv|I|L|E|X|A|R| Reserved | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | Canvas Width Minus One | ... - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - ... Canvas Height Minus One | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - -Reserved (Rsv): 2 bits - -: SHOULD be `0`. - -ICC profile (I): 1 bit - -: Set if the file contains an ICC profile. - -Alpha (L): 1 bit - -: Set if any of the frames of the image contain transparency information - ("alpha"). - -EXIF metadata (E): 1 bit - -: Set if the file contains EXIF metadata. - -XMP metadata (X): 1 bit - -: Set if the file contains XMP metadata. - -Animation (A): 1 bit - -: Set if this is an animated image. Data in 'ANIM' and 'ANMF' chunks should be - used to control the animation. - -Reserved (R): 1 bit - -: SHOULD be `0`. - -Reserved: 24 bits - -: SHOULD be `0`. - -Canvas Width Minus One: 24 bits - -: _1-based_ width of the canvas in pixels. - The actual canvas width is '1 + Canvas Width Minus One' - -Canvas Height Minus One: 24 bits - -: _1-based_ height of the canvas in pixels. - The actual canvas height is '1 + Canvas Height Minus One' - -The product of _Canvas Width_ and _Canvas Height_ MUST be at most `2^32 - 1`. - -Future specifications MAY add more fields. - -### Chunks - -#### Animation - -An animation is controlled by ANIM and ANMF chunks. - -ANIM Chunk: -{:#anim_chunk} - -For an animated image, this chunk contains the _global parameters_ of the -animation. - - 0 1 2 3 - 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | ChunkHeader('ANIM') | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | Background Color | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | Loop Count | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - -Background Color: 32 bits (_uint32_) - -: The default background color of the canvas in \[Blue, Green, Red, Alpha\] - byte order. This color MAY be used to fill the unused space on the canvas - around the frames, as well as the transparent pixels of the first frame. - Background color is also used when disposal method is `1`. - -**Note**: - - * Background color MAY contain a transparency value (alpha), even if the - _Alpha_ flag in [VP8X chunk](#extended_header) is unset. - - * Viewer applications SHOULD treat the background color value as a hint, and - are not required to use it. - - * The canvas is cleared at the start of each loop. The background color MAY be - used to achieve this. - -Loop Count: 16 bits (_uint16_) - -: The number of times to loop the animation. `0` means infinitely. - -This chunk MUST appear if the _Animation_ flag in the VP8X chunk is set. -If the _Animation_ flag is not set and this chunk is present, it -SHOULD be ignored. - -ANMF chunk: - -For animated images, this chunk contains information about a _single_ frame. -If the _Animation flag_ is not set, then this chunk SHOULD NOT be present. - - 0 1 2 3 - 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | ChunkHeader('ANMF') | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | Frame X | ... - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - ... Frame Y | Frame Width Minus One ... - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - ... | Frame Height Minus One | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | Frame Duration | Reserved |B|D| - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | Frame Data | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - -Frame X: 24 bits (_uint24_) - -: The X coordinate of the upper left corner of the frame is `Frame X * 2` - -Frame Y: 24 bits (_uint24_) - -: The Y coordinate of the upper left corner of the frame is `Frame Y * 2` - -Frame Width Minus One: 24 bits (_uint24_) - -: The _1-based_ width of the frame. - The frame width is `1 + Frame Width Minus One` - -Frame Height Minus One: 24 bits (_uint24_) - -: The _1-based_ height of the frame. - The frame height is `1 + Frame Height Minus One` - -Frame Duration: 24 bits (_uint24_) - -: The time to wait before displaying the next frame, in 1 millisecond units. - Note the interpretation of frame duration of 0 (and often <= 10) is - implementation defined. Many tools and browsers assign a minimum duration - similar to GIF. - -Reserved: 6 bits - -: SHOULD be 0. - -Blending method (B): 1 bit - -: Indicates how transparent pixels of _the current frame_ are to be blended - with corresponding pixels of the previous canvas: - - * `0`: Use alpha blending. After disposing of the previous frame, render the - current frame on the canvas using [alpha-blending](#alpha-blending). If - the current frame does not have an alpha channel, assume alpha value of - 255, effectively replacing the rectangle. - - * `1`: Do not blend. After disposing of the previous frame, render the - current frame on the canvas by overwriting the rectangle covered by the - current frame. - -Disposal method (D): 1 bit - -: Indicates how _the current frame_ is to be treated after it has been - displayed (before rendering the next frame) on the canvas: - - * `0`: Do not dispose. Leave the canvas as is. - - * `1`: Dispose to background color. Fill the _rectangle_ on the canvas - covered by the _current frame_ with background color specified in the - [ANIM chunk](#anim_chunk). - -**Notes**: - - * The frame disposal only applies to the _frame rectangle_, that is, the - rectangle defined by _Frame X_, _Frame Y_, _frame width_ and _frame height_. - It may or may not cover the whole canvas. - -{:#alpha-blending} - * **Alpha-blending**: - - Given that each of the R, G, B and A channels is 8-bit, and the RGB - channels are _not premultiplied_ by alpha, the formula for blending - 'dst' onto 'src' is: - -~~~~~ - blend.A = src.A + dst.A * (1 - src.A / 255) - if blend.A = 0 then - blend.RGB = 0 - else - blend.RGB = (src.RGB * src.A + - dst.RGB * dst.A * (1 - src.A / 255)) / blend.A -~~~~~ - - * Alpha-blending SHOULD be done in linear color space, by taking into account - the [color profile](#color-profile) of the image. If the color profile is - not present, sRGB is to be assumed. (Note that sRGB also needs to be - linearized due to a gamma of ~2.2). - -Frame Data: _Chunk Size_ - `16` bytes - -: Consists of: - - * An optional [alpha subchunk](#alpha) for the frame. - - * A [bitstream subchunk](#bitstream-vp8vp8l) for the frame. - - * An optional list of [unknown chunks](#unknown-chunks). - -**Note**: The 'ANMF' payload, _Frame Data_ above, consists of individual -_padded_ chunks as described by the [RIFF file format](#riff-file-format). - -#### Alpha - - 0 1 2 3 - 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | ChunkHeader('ALPH') | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - |Rsv| P | F | C | Alpha Bitstream... | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - -Reserved (Rsv): 2 bits - -: SHOULD be `0`. - -Pre-processing (P): 2 bits - -: These INFORMATIVE bits are used to signal the pre-processing that has - been performed during compression. The decoder can use this information to - e.g. dither the values or smooth the gradients prior to display. - - * `0`: no pre-processing - * `1`: level reduction - -Filtering method (F): 2 bits - -: The filtering method used: - - * `0`: None. - * `1`: Horizontal filter. - * `2`: Vertical filter. - * `3`: Gradient filter. - -For each pixel, filtering is performed using the following calculations. -Assume the alpha values surrounding the current `X` position are labeled as: - - C | B | - ---+---+ - A | X | - -We seek to compute the alpha value at position `X`. First, a prediction is -made depending on the filtering method: - - * Method `0`: predictor = 0 - * Method `1`: predictor = A - * Method `2`: predictor = B - * Method `3`: predictor = clip(A + B - C) - -where `clip(v)` is equal to: - - * 0 if v < 0 - * 255 if v > 255 - * v otherwise - -The final value is derived by adding the decompressed value `X` to the -predictor and using modulo-256 arithmetic to wrap the \[256-511\] range -into the \[0-255\] one: - -`alpha = (predictor + X) % 256` - -There are special cases for left-most and top-most pixel positions: - - * Top-left value at location (0,0) uses 0 as predictor value. Otherwise, - * For horizontal or gradient filtering methods, the left-most pixels at - location (0, y) are predicted using the location (0, y-1) just above. - * For vertical or gradient filtering methods, the top-most pixels at - location (x, 0) are predicted using the location (x-1, 0) on the left. - - -Decoders are not required to use this information in any specified way. - -Compression method (C): 2 bits - -: The compression method used: - - * `0`: No compression. - * `1`: Compressed using the WebP lossless format. - -Alpha bitstream: _Chunk Size_ - `1` bytes - -: Encoded alpha bitstream. - -This optional chunk contains encoded alpha data for this frame. A frame -containing a 'VP8L' chunk SHOULD NOT contain this chunk. - -**Rationale**: The transparency information is already part of the 'VP8L' -chunk. - -The alpha channel data is stored as uncompressed raw data (when -compression method is '0') or compressed using the lossless format -(when the compression method is '1'). - - * Raw data: consists of a byte sequence of length width * height, - containing all the 8-bit transparency values in scan order. - - * Lossless format compression: the byte sequence is a compressed - image-stream (as described in the [WebP Lossless Bitstream Format] - [webpllspec]) of implicit dimension width x height. That is, this - image-stream does NOT contain any headers describing the image dimension. - - **Rationale**: the dimension is already known from other sources, - so storing it again would be redundant and error-prone. - - Once the image-stream is decoded into ARGB color values, following - the process described in the lossless format specification, the - transparency information must be extracted from the *green* channel - of the ARGB quadruplet. - - **Rationale**: the green channel is allowed extra transformation - steps in the specification -- unlike the other channels -- that can - improve compression. - -#### Bitstream (VP8/VP8L) - -This chunk contains compressed bitstream data for a single frame. - -A bitstream chunk may be either (i) a VP8 chunk, using "VP8 " (note the -significant fourth-character space) as its tag _or_ (ii) a VP8L chunk, using -"VP8L" as its tag. - -The formats of VP8 and VP8L chunks are as described in sections -[Simple File Format (Lossy)](#simple-file-format-lossy) -and [Simple File Format (Lossless)](#simple-file-format-lossless) respectively. - -#### Color profile - - 0 1 2 3 - 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | ChunkHeader('ICCP') | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | Color Profile | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - -Color Profile: _Chunk Size_ bytes - -: ICC profile. - -This chunk MUST appear before the image data. - -There SHOULD be at most one such chunk. If there are more such chunks, readers -MAY ignore all except the first one. -See the [ICC Specification][iccspec] for details. - -If this chunk is not present, sRGB SHOULD be assumed. - -#### Metadata - -Metadata can be stored in 'EXIF' or 'XMP ' chunks. - -There SHOULD be at most one chunk of each type ('EXIF' and 'XMP '). If there -are more such chunks, readers MAY ignore all except the first one. Also, a file -may possibly contain both 'EXIF' and 'XMP ' chunks. - -The chunks are defined as follows: - -EXIF chunk: - - 0 1 2 3 - 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | ChunkHeader('EXIF') | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | EXIF Metadata | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - -EXIF Metadata: _Chunk Size_ bytes - -: image metadata in EXIF format. - -XMP chunk: - - 0 1 2 3 - 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | ChunkHeader('XMP ') | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | XMP Metadata | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - -XMP Metadata: _Chunk Size_ bytes - -: image metadata in XMP format. - -Additional guidance about handling metadata can be found in the -Metadata Working Group's [Guidelines for Handling Metadata][metadata]. - -#### Unknown Chunks _\[status: experimental\]_ - -A RIFF chunk (described in [this](#terminology-amp-basics) section) whose _chunk -tag_ is different from any of the chunks described in this document, is -considered an _unknown chunk_. - -**Rationale**: Allowing unknown chunks gives a provision for future extension -of the format, and also allows storage of any application-specific data. - -A file MAY contain unknown chunks: - - * At the end of the file as described in [Extended WebP file - header](#extended_header) section. - * At the end of ANMF chunks as described in the - [Animation](#animation) section. - -Readers SHOULD ignore these chunks. Writers SHOULD preserve them in their -original order (unless they specifically intend to modify these chunks). - -### Assembling the Canvas from frames - -Here we provide an overview of how a reader should assemble a canvas in the -case of an animated image. The notation _VP8X.field_ means the field in the -'VP8X' chunk with the same description. - -Displaying an _animated image_ canvas MUST be equivalent to the following -pseudocode: - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -assert VP8X.flags.hasAnimation -canvas ← new image of size VP8X.canvasWidth x VP8X.canvasHeight with - background color ANIM.background_color. -loop_count ← ANIM.loopCount -dispose_method ← ANIM.disposeMethod -if loop_count == 0: - loop_count = ∞ -frame_params ← nil -assert next chunk in image_data is ANMF -for loop = 0..loop_count - 1 - clear canvas to ANIM.background_color or application defined color - until eof or non-ANMF chunk - frame_params.frameX = Frame X - frame_params.frameY = Frame Y - frame_params.frameWidth = Frame Width Minus One + 1 - frame_params.frameHeight = Frame Height Minus One + 1 - frame_params.frameDuration = Frame Duration - frame_right = frame_params.frameX + frame_params.frameWidth - frame_bottom = frame_params.frameY + frame_params.frameHeight - assert VP8X.canvasWidth >= frame_right - assert VP8X.canvasHeight >= frame_bottom - for subchunk in 'Frame Data': - if subchunk.tag == "ALPH": - assert alpha subchunks not found in 'Frame Data' earlier - frame_params.alpha = alpha_data - else if subchunk.tag == "VP8 " OR subchunk.tag == "VP8L": - assert bitstream subchunks not found in 'Frame Data' earlier - frame_params.bitstream = bitstream_data - render frame with frame_params.alpha and frame_params.bitstream on - canvas with top-left corner at (frame_params.frameX, - frame_params.frameY), using dispose method dispose_method. - canvas contains the decoded image. - Show the contents of the canvas for frame_params.frameDuration * 1ms. -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - - -Example File Layouts --------------------- - -A lossy encoded image with alpha may look as follows: - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -RIFF/WEBP -+- VP8X (descriptions of features used) -+- ALPH (alpha bitstream) -+- VP8 (bitstream) -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -A losslessly encoded image may look as follows: - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -RIFF/WEBP -+- VP8X (descriptions of features used) -+- XYZW (unknown chunk) -+- VP8L (lossless bitstream) -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -A lossless image with ICC profile and XMP metadata may -look as follows: - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -RIFF/WEBP -+- VP8X (descriptions of features used) -+- ICCP (color profile) -+- VP8L (lossless bitstream) -+- XMP (metadata) -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -An animated image with EXIF metadata may look as follows: - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -RIFF/WEBP -+- VP8X (descriptions of features used) -+- ANIM (global animation parameters) -+- ANMF (frame1 parameters + data) -+- ANMF (frame2 parameters + data) -+- ANMF (frame3 parameters + data) -+- ANMF (frame4 parameters + data) -+- EXIF (metadata) -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -[vp8spec]: http://tools.ietf.org/html/rfc6386 -[webpllspec]: https://chromium.googlesource.com/webm/libwebp/+/master/doc/webp-lossless-bitstream-spec.txt -[iccspec]: http://www.color.org/icc_specs2.xalter -[metadata]: http://www.metadataworkinggroup.org/pdf/mwg_guidance.pdf -[rfc 1166]: http://tools.ietf.org/html/rfc1166 -[rfc 2119]: http://tools.ietf.org/html/rfc2119 diff --git a/Extended/libwebp/doc/webp-lossless-bitstream-spec.txt b/Extended/libwebp/doc/webp-lossless-bitstream-spec.txt deleted file mode 100644 index 2d2dde1..0000000 --- a/Extended/libwebp/doc/webp-lossless-bitstream-spec.txt +++ /dev/null @@ -1,1090 +0,0 @@ - - -Specification for WebP Lossless Bitstream -========================================= - -_Jyrki Alakuijala, Ph.D., Google, Inc., 2012-06-19_ - -Paragraphs marked as \[AMENDED\] were amended on 2014-09-16. - -Abstract --------- - -WebP lossless is an image format for lossless compression of ARGB -images. The lossless format stores and restores the pixel values -exactly, including the color values for zero alpha pixels. The -format uses subresolution images, recursively embedded into the format -itself, for storing statistical data about the images, such as the used -entropy codes, spatial predictors, color space conversion, and color -table. LZ77, Huffman coding, and a color cache are used for compression -of the bulk data. Decoding speeds faster than PNG have been -demonstrated, as well as 25% denser compression than can be achieved -using today's PNG format. - - -* TOC placeholder -{:toc} - - -Nomenclature ------------- - -ARGB -: A pixel value consisting of alpha, red, green, and blue values. - -ARGB image -: A two-dimensional array containing ARGB pixels. - -color cache -: A small hash-addressed array to store recently used colors, to be able - to recall them with shorter codes. - -color indexing image -: A one-dimensional image of colors that can be indexed using a small - integer (up to 256 within WebP lossless). - -color transform image -: A two-dimensional subresolution image containing data about - correlations of color components. - -distance mapping -: Changes LZ77 distances to have the smallest values for pixels in 2D - proximity. - -entropy image -: A two-dimensional subresolution image indicating which entropy coding - should be used in a respective square in the image, i.e., each pixel - is a meta Huffman code. - -Huffman code -: A classic way to do entropy coding where a smaller number of bits are - used for more frequent codes. - -LZ77 -: Dictionary-based sliding window compression algorithm that either - emits symbols or describes them as sequences of past symbols. - -meta Huffman code -: A small integer (up to 16 bits) that indexes an element in the meta - Huffman table. - -predictor image -: A two-dimensional subresolution image indicating which spatial - predictor is used for a particular square in the image. - -prefix coding -: A way to entropy code larger integers that codes a few bits of the - integer using an entropy code and codifies the remaining bits raw. - This allows for the descriptions of the entropy codes to remain - relatively small even when the range of symbols is large. - -scan-line order -: A processing order of pixels, left-to-right, top-to-bottom, starting - from the left-hand-top pixel, proceeding to the right. Once a row is - completed, continue from the left-hand column of the next row. - - -1 Introduction --------------- - -This document describes the compressed data representation of a WebP -lossless image. It is intended as a detailed reference for WebP lossless -encoder and decoder implementation. - -In this document, we extensively use C programming language syntax to -describe the bitstream, and assume the existence of a function for -reading bits, `ReadBits(n)`. The bytes are read in the natural order of -the stream containing them, and bits of each byte are read in -least-significant-bit-first order. When multiple bits are read at the -same time, the integer is constructed from the original data in the -original order. The most significant bits of the returned integer are -also the most significant bits of the original data. Thus the statement - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -b = ReadBits(2); -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -is equivalent with the two statements below: - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -b = ReadBits(1); -b |= ReadBits(1) << 1; -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -We assume that each color component (e.g. alpha, red, blue and green) is -represented using an 8-bit byte. We define the corresponding type as -uint8. A whole ARGB pixel is represented by a type called uint32, an -unsigned integer consisting of 32 bits. In the code showing the behavior -of the transformations, alpha value is codified in bits 31..24, red in -bits 23..16, green in bits 15..8 and blue in bits 7..0, but -implementations of the format are free to use another representation -internally. - -Broadly, a WebP lossless image contains header data, transform -information and actual image data. Headers contain width and height of -the image. A WebP lossless image can go through four different types of -transformation before being entropy encoded. The transform information -in the bitstream contains the data required to apply the respective -inverse transforms. - - -2 RIFF Header -------------- - -The beginning of the header has the RIFF container. This consists of the -following 21 bytes: - - 1. String "RIFF" - 2. A little-endian 32 bit value of the block length, the whole size - of the block controlled by the RIFF header. Normally this equals - the payload size (file size minus 8 bytes: 4 bytes for the 'RIFF' - identifier and 4 bytes for storing the value itself). - 3. String "WEBP" (RIFF container name). - 4. String "VP8L" (chunk tag for lossless encoded image data). - 5. A little-endian 32-bit value of the number of bytes in the - lossless stream. - 6. One byte signature 0x2f. - -The first 28 bits of the bitstream specify the width and height of the -image. Width and height are decoded as 14-bit integers as follows: - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -int image_width = ReadBits(14) + 1; -int image_height = ReadBits(14) + 1; -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -The 14-bit dynamics for image size limit the maximum size of a WebP -lossless image to 16384✕16384 pixels. - -The alpha_is_used bit is a hint only, and should not impact decoding. -It should be set to 0 when all alpha values are 255 in the picture, and -1 otherwise. - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -int alpha_is_used = ReadBits(1); -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -The version_number is a 3 bit code that must be set to 0. Any other value -should be treated as an error. \[AMENDED\] - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -int version_number = ReadBits(3); -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - - -3 Transformations ------------------ - -Transformations are reversible manipulations of the image data that can -reduce the remaining symbolic entropy by modeling spatial and color -correlations. Transformations can make the final compression more dense. - -An image can go through four types of transformation. A 1 bit indicates -the presence of a transform. Each transform is allowed to be used only -once. The transformations are used only for the main level ARGB image: -the subresolution images have no transforms, not even the 0 bit -indicating the end-of-transforms. - -Typically an encoder would use these transforms to reduce the Shannon -entropy in the residual image. Also, the transform data can be decided -based on entropy minimization. - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -while (ReadBits(1)) { // Transform present. - // Decode transform type. - enum TransformType transform_type = ReadBits(2); - // Decode transform data. - ... -} - -// Decode actual image data (Section 4). -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -If a transform is present then the next two bits specify the transform -type. There are four types of transforms. - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -enum TransformType { - PREDICTOR_TRANSFORM = 0, - COLOR_TRANSFORM = 1, - SUBTRACT_GREEN = 2, - COLOR_INDEXING_TRANSFORM = 3, -}; -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -The transform type is followed by the transform data. Transform data -contains the information required to apply the inverse transform and -depends on the transform type. Next we describe the transform data for -different types. - - -### Predictor Transform - -The predictor transform can be used to reduce entropy by exploiting the -fact that neighboring pixels are often correlated. In the predictor -transform, the current pixel value is predicted from the pixels already -decoded (in scan-line order) and only the residual value (actual - -predicted) is encoded. The _prediction mode_ determines the type of -prediction to use. We divide the image into squares and all the pixels -in a square use same prediction mode. - -The first 3 bits of prediction data define the block width and height in -number of bits. The number of block columns, `block_xsize`, is used in -indexing two-dimensionally. - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -int size_bits = ReadBits(3) + 2; -int block_width = (1 << size_bits); -int block_height = (1 << size_bits); -#define DIV_ROUND_UP(num, den) ((num) + (den) - 1) / (den)) -int block_xsize = DIV_ROUND_UP(image_width, 1 << size_bits); -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -The transform data contains the prediction mode for each block of the -image. All the `block_width * block_height` pixels of a block use same -prediction mode. The prediction modes are treated as pixels of an image -and encoded using the same techniques described in -[Chapter 4](#image-data). - -For a pixel _x, y_, one can compute the respective filter block address -by: - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -int block_index = (y >> size_bits) * block_xsize + - (x >> size_bits); -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -There are 14 different prediction modes. In each prediction mode, the -current pixel value is predicted from one or more neighboring pixels -whose values are already known. - -We choose the neighboring pixels (TL, T, TR, and L) of the current pixel -(P) as follows: - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -O O O O O O O O O O O -O O O O O O O O O O O -O O O O TL T TR O O O O -O O O O L P X X X X X -X X X X X X X X X X X -X X X X X X X X X X X -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -where TL means top-left, T top, TR top-right, L left pixel. -At the time of predicting a value for P, all pixels O, TL, T, TR and L -have been already processed, and pixel P and all pixels X are unknown. - -Given the above neighboring pixels, the different prediction modes are -defined as follows. - -| Mode | Predicted value of each channel of the current pixel | -| ------ | ------------------------------------------------------- | -| 0 | 0xff000000 (represents solid black color in ARGB) | -| 1 | L | -| 2 | T | -| 3 | TR | -| 4 | TL | -| 5 | Average2(Average2(L, TR), T) | -| 6 | Average2(L, TL) | -| 7 | Average2(L, T) | -| 8 | Average2(TL, T) | -| 9 | Average2(T, TR) | -| 10 | Average2(Average2(L, TL), Average2(T, TR)) | -| 11 | Select(L, T, TL) | -| 12 | ClampAddSubtractFull(L, T, TL) | -| 13 | ClampAddSubtractHalf(Average2(L, T), TL) | - - -`Average2` is defined as follows for each ARGB component: - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -uint8 Average2(uint8 a, uint8 b) { - return (a + b) / 2; -} -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -The Select predictor is defined as follows: - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -uint32 Select(uint32 L, uint32 T, uint32 TL) { - // L = left pixel, T = top pixel, TL = top left pixel. - - // ARGB component estimates for prediction. - int pAlpha = ALPHA(L) + ALPHA(T) - ALPHA(TL); - int pRed = RED(L) + RED(T) - RED(TL); - int pGreen = GREEN(L) + GREEN(T) - GREEN(TL); - int pBlue = BLUE(L) + BLUE(T) - BLUE(TL); - - // Manhattan distances to estimates for left and top pixels. - int pL = abs(pAlpha - ALPHA(L)) + abs(pRed - RED(L)) + - abs(pGreen - GREEN(L)) + abs(pBlue - BLUE(L)); - int pT = abs(pAlpha - ALPHA(T)) + abs(pRed - RED(T)) + - abs(pGreen - GREEN(T)) + abs(pBlue - BLUE(T)); - - // Return either left or top, the one closer to the prediction. - if (pL < pT) { // \[AMENDED\] - return L; - } else { - return T; - } -} -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -The functions `ClampAddSubtractFull` and `ClampAddSubtractHalf` are -performed for each ARGB component as follows: - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -// Clamp the input value between 0 and 255. -int Clamp(int a) { - return (a < 0) ? 0 : (a > 255) ? 255 : a; -} -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -int ClampAddSubtractFull(int a, int b, int c) { - return Clamp(a + b - c); -} -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -int ClampAddSubtractHalf(int a, int b) { - return Clamp(a + (a - b) / 2); -} -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -There are special handling rules for some border pixels. If there is a -prediction transform, regardless of the mode \[0..13\] for these pixels, -the predicted value for the left-topmost pixel of the image is -0xff000000, L-pixel for all pixels on the top row, and T-pixel for all -pixels on the leftmost column. - -Addressing the TR-pixel for pixels on the rightmost column is -exceptional. The pixels on the rightmost column are predicted by using -the modes \[0..13\] just like pixels not on border, but by using the -leftmost pixel on the same row as the current TR-pixel. The TR-pixel -offset in memory is the same for border and non-border pixels. - - -### Color Transform - -The goal of the color transform is to decorrelate the R, G and B values -of each pixel. Color transform keeps the green (G) value as it is, -transforms red (R) based on green and transforms blue (B) based on green -and then based on red. - -As is the case for the predictor transform, first the image is divided -into blocks and the same transform mode is used for all the pixels in a -block. For each block there are three types of color transform elements. - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -typedef struct { - uint8 green_to_red; - uint8 green_to_blue; - uint8 red_to_blue; -} ColorTransformElement; -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -The actual color transformation is done by defining a color transform -delta. The color transform delta depends on the `ColorTransformElement`, -which is the same for all the pixels in a particular block. The delta is -added during color transform. The inverse color transform then is just -subtracting those deltas. - -The color transform function is defined as follows: - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -void ColorTransform(uint8 red, uint8 blue, uint8 green, - ColorTransformElement *trans, - uint8 *new_red, uint8 *new_blue) { - // Transformed values of red and blue components - uint32 tmp_red = red; - uint32 tmp_blue = blue; - - // Applying transform is just adding the transform deltas - tmp_red += ColorTransformDelta(trans->green_to_red, green); - tmp_blue += ColorTransformDelta(trans->green_to_blue, green); - tmp_blue += ColorTransformDelta(trans->red_to_blue, red); - - *new_red = tmp_red & 0xff; - *new_blue = tmp_blue & 0xff; -} -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -`ColorTransformDelta` is computed using a signed 8-bit integer -representing a 3.5-fixed-point number, and a signed 8-bit RGB color -channel (c) \[-128..127\] and is defined as follows: - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -int8 ColorTransformDelta(int8 t, int8 c) { - return (t * c) >> 5; -} -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -A conversion from the 8-bit unsigned representation (uint8) to the 8-bit -signed one (int8) is required before calling ColorTransformDelta(). -It should be performed using 8-bit two's complement (that is: uint8 range -\[128-255\] is mapped to the \[-128, -1\] range of its converted int8 value). - -The multiplication is to be done using more precision (with at least -16-bit dynamics). The sign extension property of the shift operation -does not matter here: only the lowest 8 bits are used from the result, -and there the sign extension shifting and unsigned shifting are -consistent with each other. - -Now we describe the contents of color transform data so that decoding -can apply the inverse color transform and recover the original red and -blue values. The first 3 bits of the color transform data contain the -width and height of the image block in number of bits, just like the -predictor transform: - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -int size_bits = ReadBits(3) + 2; -int block_width = 1 << size_bits; -int block_height = 1 << size_bits; -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -The remaining part of the color transform data contains -`ColorTransformElement` instances corresponding to each block of the -image. `ColorTransformElement` instances are treated as pixels of an -image and encoded using the methods described in -[Chapter 4](#image-data). - -During decoding, `ColorTransformElement` instances of the blocks are -decoded and the inverse color transform is applied on the ARGB values of -the pixels. As mentioned earlier, that inverse color transform is just -subtracting `ColorTransformElement` values from the red and blue -channels. - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -void InverseTransform(uint8 red, uint8 green, uint8 blue, - ColorTransformElement *p, - uint8 *new_red, uint8 *new_blue) { - // Applying inverse transform is just subtracting the - // color transform deltas - red -= ColorTransformDelta(p->green_to_red_, green); - blue -= ColorTransformDelta(p->green_to_blue_, green); - blue -= ColorTransformDelta(p->red_to_blue_, red & 0xff); - - *new_red = red & 0xff; - *new_blue = blue & 0xff; -} -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - - -### Subtract Green Transform - -The subtract green transform subtracts green values from red and blue -values of each pixel. When this transform is present, the decoder needs -to add the green value to both red and blue. There is no data associated -with this transform. The decoder applies the inverse transform as -follows: - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -void AddGreenToBlueAndRed(uint8 green, uint8 *red, uint8 *blue) { - *red = (*red + green) & 0xff; - *blue = (*blue + green) & 0xff; -} -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -This transform is redundant as it can be modeled using the color -transform, but it is still often useful. Since it can extend the -dynamics of the color transform and there is no additional data here, -the subtract green transform can be coded using fewer bits than a -full-blown color transform. - - -### Color Indexing Transform - -If there are not many unique pixel values, it may be more efficient to -create a color index array and replace the pixel values by the array's -indices. The color indexing transform achieves this. (In the context of -WebP lossless, we specifically do not call this a palette transform -because a similar but more dynamic concept exists in WebP lossless -encoding: color cache.) - -The color indexing transform checks for the number of unique ARGB values -in the image. If that number is below a threshold (256), it creates an -array of those ARGB values, which is then used to replace the pixel -values with the corresponding index: the green channel of the pixels are -replaced with the index; all alpha values are set to 255; all red and -blue values to 0. - -The transform data contains color table size and the entries in the -color table. The decoder reads the color indexing transform data as -follows: - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -// 8 bit value for color table size -int color_table_size = ReadBits(8) + 1; -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -The color table is stored using the image storage format itself. The -color table can be obtained by reading an image, without the RIFF -header, image size, and transforms, assuming a height of one pixel and -a width of `color_table_size`. The color table is always -subtraction-coded to reduce image entropy. The deltas of palette colors -contain typically much less entropy than the colors themselves, leading -to significant savings for smaller images. In decoding, every final -color in the color table can be obtained by adding the previous color -component values by each ARGB component separately, and storing the -least significant 8 bits of the result. - -The inverse transform for the image is simply replacing the pixel values -(which are indices to the color table) with the actual color table -values. The indexing is done based on the green component of the ARGB -color. - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -// Inverse transform -argb = color_table[GREEN(argb)]; -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -If the index is equal or larger than color_table_size, the argb color value -should be set to 0x00000000 (transparent black). \[AMENDED\] - -When the color table is small (equal to or less than 16 colors), several -pixels are bundled into a single pixel. The pixel bundling packs several -(2, 4, or 8) pixels into a single pixel, reducing the image width -respectively. Pixel bundling allows for a more efficient joint -distribution entropy coding of neighboring pixels, and gives some -arithmetic coding-like benefits to the entropy code, but it can only be -used when there are a small number of unique values. - -`color_table_size` specifies how many pixels are combined together: - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -int width_bits; -if (color_table_size <= 2) { - width_bits = 3; -} else if (color_table_size <= 4) { - width_bits = 2; -} else if (color_table_size <= 16) { - width_bits = 1; -} else { - width_bits = 0; -} -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -`width_bits` has a value of 0, 1, 2 or 3. A value of 0 indicates no -pixel bundling to be done for the image. A value of 1 indicates that two -pixels are combined together, and each pixel has a range of \[0..15\]. A -value of 2 indicates that four pixels are combined together, and each -pixel has a range of \[0..3\]. A value of 3 indicates that eight pixels -are combined together and each pixel has a range of \[0..1\], i.e., a -binary value. - -The values are packed into the green component as follows: - - * `width_bits` = 1: for every x value where x ≡ 0 (mod 2), a green - value at x is positioned into the 4 least-significant bits of the - green value at x / 2, a green value at x + 1 is positioned into the - 4 most-significant bits of the green value at x / 2. - * `width_bits` = 2: for every x value where x ≡ 0 (mod 4), a green - value at x is positioned into the 2 least-significant bits of the - green value at x / 4, green values at x + 1 to x + 3 in order to the - more significant bits of the green value at x / 4. - * `width_bits` = 3: for every x value where x ≡ 0 (mod 8), a green - value at x is positioned into the least-significant bit of the green - value at x / 8, green values at x + 1 to x + 7 in order to the more - significant bits of the green value at x / 8. - - -4 Image Data ------------- - -Image data is an array of pixel values in scan-line order. - -### 4.1 Roles of Image Data - -We use image data in five different roles: - - 1. ARGB image: Stores the actual pixels of the image. - 1. Entropy image: Stores the - [meta Huffman codes](#decoding-of-meta-huffman-codes). The red and green - components of a pixel define the meta Huffman code used in a particular - block of the ARGB image. - 1. Predictor image: Stores the metadata for [Predictor - Transform](#predictor-transform). The green component of a pixel defines - which of the 14 predictors is used within a particular block of the - ARGB image. - 1. Color transform image. It is created by `ColorTransformElement` values - (defined in [Color Transform](#color-transform)) for different blocks of - the image. Each `ColorTransformElement` `'cte'` is treated as a pixel whose - alpha component is `255`, red component is `cte.red_to_blue`, green - component is `cte.green_to_blue` and blue component is `cte.green_to_red`. - 1. Color indexing image: An array of of size `color_table_size` (up to 256 - ARGB values) storing the metadata for the - [Color Indexing Transform](#color-indexing-transform). This is stored as an - image of width `color_table_size` and height `1`. - -### 4.2 Encoding of Image data - -The encoding of image data is independent of its role. - -The image is first divided into a set of fixed-size blocks (typically 16x16 -blocks). Each of these blocks are modeled using their own entropy codes. Also, -several blocks may share the same entropy codes. - -**Rationale:** Storing an entropy code incurs a cost. This cost can be minimized -if statistically similar blocks share an entropy code, thereby storing that code -only once. For example, an encoder can find similar blocks by clustering them -using their statistical properties, or by repeatedly joining a pair of randomly -selected clusters when it reduces the overall amount of bits needed to encode -the image. - -Each pixel is encoded using one of the three possible methods: - - 1. Huffman coded literal: each channel (green, red, blue and alpha) is - entropy-coded independently; - 2. LZ77 backward reference: a sequence of pixels are copied from elsewhere - in the image; or - 3. Color cache code: using a short multiplicative hash code (color cache - index) of a recently seen color. - -The following sub-sections describe each of these in detail. - -#### 4.2.1 Huffman Coded Literals - -The pixel is stored as Huffman coded values of green, red, blue and alpha (in -that order). See [this section](#decoding-entropy-coded-image-data) for details. - -#### 4.2.2 LZ77 Backward Reference - -Backward references are tuples of _length_ and _distance code_: - - * Length indicates how many pixels in scan-line order are to be copied. - * Distance code is a number indicating the position of a previously seen - pixel, from which the pixels are to be copied. The exact mapping is - described [below](#distance-mapping). - -The length and distance values are stored using **LZ77 prefix coding**. - -LZ77 prefix coding divides large integer values into two parts: the _prefix -code_ and the _extra bits_: the prefix code is stored using an entropy code, -while the extra bits are stored as they are (without an entropy code). - -**Rationale**: This approach reduces the storage requirement for the entropy -code. Also, large values are usually rare, and so extra bits would be used for -very few values in the image. Thus, this approach results in a better -compression overall. - -The following table denotes the prefix codes and extra bits used for storing -different range of values. - -Note: The maximum backward reference length is limited to 4096. Hence, only the -first 24 prefix codes (with the respective extra bits) are meaningful for length -values. For distance values, however, all the 40 prefix codes are valid. - -| Value range | Prefix code | Extra bits | -| --------------- | ----------- | ---------- | -| 1 | 0 | 0 | -| 2 | 1 | 0 | -| 3 | 2 | 0 | -| 4 | 3 | 0 | -| 5..6 | 4 | 1 | -| 7..8 | 5 | 1 | -| 9..12 | 6 | 2 | -| 13..16 | 7 | 2 | -| ... | ... | ... | -| 3072..4096 | 23 | 10 | -| ... | ... | ... | -| 524289..786432 | 38 | 18 | -| 786433..1048576 | 39 | 18 | - -The pseudocode to obtain a (length or distance) value from the prefix code is -as follows: - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -if (prefix_code < 4) { - return prefix_code + 1; -} -int extra_bits = (prefix_code - 2) >> 1; -int offset = (2 + (prefix_code & 1)) << extra_bits; -return offset + ReadBits(extra_bits) + 1; -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -**Distance Mapping:** -{:#distance-mapping} - -As noted previously, distance code is a number indicating the position of a -previously seen pixel, from which the pixels are to be copied. This sub-section -defines the mapping between a distance code and the position of a previous -pixel. - -The distance codes larger than 120 denote the pixel-distance in scan-line -order, offset by 120. - -The smallest distance codes \[1..120\] are special, and are reserved for a close -neighborhood of the current pixel. This neighborhood consists of 120 pixels: - - * Pixels that are 1 to 7 rows above the current pixel, and are up to 8 columns - to the left or up to 7 columns to the right of the current pixel. \[Total - such pixels = `7 * (8 + 1 + 7) = 112`\]. - * Pixels that are in same row as the current pixel, and are up to 8 columns to - the left of the current pixel. \[`8` such pixels\]. - -The mapping between distance code `i` and the neighboring pixel offset -`(xi, yi)` is as follows: - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -(0, 1), (1, 0), (1, 1), (-1, 1), (0, 2), (2, 0), (1, 2), (-1, 2), -(2, 1), (-2, 1), (2, 2), (-2, 2), (0, 3), (3, 0), (1, 3), (-1, 3), -(3, 1), (-3, 1), (2, 3), (-2, 3), (3, 2), (-3, 2), (0, 4), (4, 0), -(1, 4), (-1, 4), (4, 1), (-4, 1), (3, 3), (-3, 3), (2, 4), (-2, 4), -(4, 2), (-4, 2), (0, 5), (3, 4), (-3, 4), (4, 3), (-4, 3), (5, 0), -(1, 5), (-1, 5), (5, 1), (-5, 1), (2, 5), (-2, 5), (5, 2), (-5, 2), -(4, 4), (-4, 4), (3, 5), (-3, 5), (5, 3), (-5, 3), (0, 6), (6, 0), -(1, 6), (-1, 6), (6, 1), (-6, 1), (2, 6), (-2, 6), (6, 2), (-6, 2), -(4, 5), (-4, 5), (5, 4), (-5, 4), (3, 6), (-3, 6), (6, 3), (-6, 3), -(0, 7), (7, 0), (1, 7), (-1, 7), (5, 5), (-5, 5), (7, 1), (-7, 1), -(4, 6), (-4, 6), (6, 4), (-6, 4), (2, 7), (-2, 7), (7, 2), (-7, 2), -(3, 7), (-3, 7), (7, 3), (-7, 3), (5, 6), (-5, 6), (6, 5), (-6, 5), -(8, 0), (4, 7), (-4, 7), (7, 4), (-7, 4), (8, 1), (8, 2), (6, 6), -(-6, 6), (8, 3), (5, 7), (-5, 7), (7, 5), (-7, 5), (8, 4), (6, 7), -(-6, 7), (7, 6), (-7, 6), (8, 5), (7, 7), (-7, 7), (8, 6), (8, 7) -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -For example, distance code `1` indicates offset of `(0, 1)` for the neighboring -pixel, that is, the pixel above the current pixel (0-pixel difference in -X-direction and 1 pixel difference in Y-direction). Similarly, distance code -`3` indicates left-top pixel. - -The decoder can convert a distances code 'i' to a scan-line order distance -'dist' as follows: - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -(xi, yi) = distance_map[i] -dist = x + y * xsize -if (dist < 1) { - dist = 1 -} -~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -where 'distance_map' is the mapping noted above and `xsize` is the width of the -image in pixels. - - -#### 4.2.3 Color Cache Coding - -Color cache stores a set of colors that have been recently used in the image. - -**Rationale:** This way, the recently used colors can sometimes be referred to -more efficiently than emitting them using other two methods (described in -[4.2.1](#huffman-coded-literals) and [4.2.2](#lz77-backward-reference)). - -Color cache codes are stored as follows. First, there is a 1-bit value that -indicates if the color cache is used. If this bit is 0, no color cache codes -exist, and they are not transmitted in the Huffman code that decodes the green -symbols and the length prefix codes. However, if this bit is 1, the color cache -size is read next: - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -int color_cache_code_bits = ReadBits(4); -int color_cache_size = 1 << color_cache_code_bits; -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -`color_cache_code_bits` defines the size of the color_cache by (1 << -`color_cache_code_bits`). The range of allowed values for -`color_cache_code_bits` is \[1..11\]. Compliant decoders must indicate a -corrupted bitstream for other values. - -A color cache is an array of size `color_cache_size`. Each entry -stores one ARGB color. Colors are looked up by indexing them by -(0x1e35a7bd * `color`) >> (32 - `color_cache_code_bits`). Only one -lookup is done in a color cache; there is no conflict resolution. - -In the beginning of decoding or encoding of an image, all entries in all -color cache values are set to zero. The color cache code is converted to -this color at decoding time. The state of the color cache is maintained -by inserting every pixel, be it produced by backward referencing or as -literals, into the cache in the order they appear in the stream. - - -5 Entropy Code --------------- - -### 5.1 Overview - -Most of the data is coded using [canonical Huffman code][canonical_huff]. Hence, -the codes are transmitted by sending the _Huffman code lengths_, as opposed to -the actual _Huffman codes_. - -In particular, the format uses **spatially-variant Huffman coding**. In other -words, different blocks of the image can potentially use different entropy -codes. - -**Rationale**: Different areas of the image may have different characteristics. So, allowing them to use different entropy codes provides more flexibility and -potentially a better compression. - -### 5.2 Details - -The encoded image data consists of two parts: - - 1. Meta Huffman codes - 1. Entropy-coded image data - -#### 5.2.1 Decoding of Meta Huffman Codes - -As noted earlier, the format allows the use of different Huffman codes for -different blocks of the image. _Meta Huffman codes_ are indexes identifying -which Huffman codes to use in different parts of the image. - -Meta Huffman codes may be used _only_ when the image is being used in the -[role](#roles-of-image-data) of an _ARGB image_. - -There are two possibilities for the meta Huffman codes, indicated by a 1-bit -value: - - * If this bit is zero, there is only one meta Huffman code used everywhere in - the image. No more data is stored. - * If this bit is one, the image uses multiple meta Huffman codes. These meta - Huffman codes are stored as an _entropy image_ (described below). - -**Entropy image:** - -The entropy image defines which Huffman codes are used in different parts of the -image, as described below. - -The first 3-bits contain the `huffman_bits` value. The dimensions of the entropy -image are derived from 'huffman_bits'. - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -int huffman_bits = ReadBits(3) + 2; -int huffman_xsize = DIV_ROUND_UP(xsize, 1 << huffman_bits); -int huffman_ysize = DIV_ROUND_UP(ysize, 1 << huffman_bits); -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -where `DIV_ROUND_UP` is as defined [earlier](#predictor-transform). - -Next bits contain an entropy image of width `huffman_xsize` and height -`huffman_ysize`. - -**Interpretation of Meta Huffman Codes:** - -For any given pixel (x, y), there is a set of five Huffman codes associated with -it. These codes are (in bitstream order): - - * **Huffman code #1**: used for green channel, backward-reference length and - color cache - * **Huffman code #2, #3 and #4**: used for red, blue and alpha channels - respectively. - * **Huffman code #5**: used for backward-reference distance. - -From here on, we refer to this set as a **Huffman code group**. - -The number of Huffman code groups in the ARGB image can be obtained by finding -the _largest meta Huffman code_ from the entropy image: - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -int num_huff_groups = max(entropy image) + 1; -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -where `max(entropy image)` indicates the largest Huffman code stored in the -entropy image. - -As each Huffman code groups contains five Huffman codes, the total number of -Huffman codes is: - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -int num_huff_codes = 5 * num_huff_groups; -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Given a pixel (x, y) in the ARGB image, we can obtain the corresponding Huffman -codes to be used as follows: - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -int position = (y >> huffman_bits) * huffman_xsize + (x >> huffman_bits); -int meta_huff_code = (entropy_image[pos] >> 8) & 0xffff; -HuffmanCodeGroup huff_group = huffman_code_groups[meta_huff_code]; -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -where, we have assumed the existence of `HuffmanCodeGroup` structure, which -represents a set of five Huffman codes. Also, `huffman_code_groups` is an array -of `HuffmanCodeGroup` (of size `num_huff_groups`). - -The decoder then uses Huffman code group `huff_group` to decode the pixel -(x, y) as explained in the [next section](#decoding-entropy-coded-image-data). - -#### 5.2.2 Decoding Entropy-coded Image Data - -For the current position (x, y) in the image, the decoder first identifies the -corresponding Huffman code group (as explained in the last section). Given the -Huffman code group, the pixel is read and decoded as follows: - -Read next symbol S from the bitstream using Huffman code #1. \[See -[next section](#decoding-the-code-lengths) for details on decoding the Huffman -code lengths\]. Note that S is any integer in the range `0` to -`(256 + 24 + ` [`color_cache_size`](#color-cache-code)`- 1)`. - -The interpretation of S depends on its value: - - 1. if S < 256 - 1. Use S as the green component - 1. Read red from the bitstream using Huffman code #2 - 1. Read blue from the bitstream using Huffman code #3 - 1. Read alpha from the bitstream using Huffman code #4 - 1. if S < 256 + 24 - 1. Use S - 256 as a length prefix code - 1. Read extra bits for length from the bitstream - 1. Determine backward-reference length L from length prefix code and the - extra bits read. - 1. Read distance prefix code from the bitstream using Huffman code #5 - 1. Read extra bits for distance from the bitstream - 1. Determine backward-reference distance D from distance prefix code and - the extra bits read. - 1. Copy the L pixels (in scan-line order) from the sequence of pixels - prior to them by D pixels. - 1. if S >= 256 + 24 - 1. Use S - (256 + 24) as the index into the color cache. - 1. Get ARGB color from the color cache at that index. - - -**Decoding the Code Lengths:** -{:#decoding-the-code-lengths} - -This section describes the details about reading a symbol from the bitstream by -decoding the Huffman code length. - -The Huffman code lengths can be coded in two ways. The method used is specified -by a 1-bit value. - - * If this bit is 1, it is a _simple code length code_, and - * If this bit is 0, it is a _normal code length code_. - -**(i) Simple Code Length Code:** - -This variant is used in the special case when only 1 or 2 Huffman code lengths -are non-zero, and are in the range of \[0, 255\]. All other Huffman code lengths -are implicitly zeros. - -The first bit indicates the number of non-zero code lengths: - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -int num_code_lengths = ReadBits(1) + 1; -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -The first code length is stored either using a 1-bit code for values of 0 and 1, -or using an 8-bit code for values in range \[0, 255\]. The second code length, -when present, is coded as an 8-bit code. - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -int is_first_8bits = ReadBits(1); -code_lengths[0] = ReadBits(1 + 7 * is_first_8bits); -if (num_code_lengths == 2) { - code_lengths[1] = ReadBits(8); -} -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -**Note:** Another special case is when _all_ Huffman code lengths are _zeros_ -(an empty Huffman code). For example, a Huffman code for distance can be empty -if there are no backward references. Similarly, Huffman codes for alpha, red, -and blue can be empty if all pixels within the same meta Huffman code are -produced using the color cache. However, this case doesn't need a special -handling, as empty Huffman codes can be coded as those containing a single -symbol `0`. - -**(ii) Normal Code Length Code:** - -The code lengths of a Huffman code are read as follows: `num_code_lengths` -specifies the number of code lengths; the rest of the code lengths -(according to the order in `kCodeLengthCodeOrder`) are zeros. - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -int kCodeLengthCodes = 19; -int kCodeLengthCodeOrder[kCodeLengthCodes] = { - 17, 18, 0, 1, 2, 3, 4, 5, 16, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 -}; -int code_lengths[kCodeLengthCodes] = { 0 }; // All zeros. -int num_code_lengths = 4 + ReadBits(4); -for (i = 0; i < num_code_lengths; ++i) { - code_lengths[kCodeLengthCodeOrder[i]] = ReadBits(3); -} -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - - * Code length code \[0..15\] indicates literal code lengths. - * Value 0 means no symbols have been coded. - * Values \[1..15\] indicate the bit length of the respective code. - * Code 16 repeats the previous non-zero value \[3..6\] times, i.e., - 3 + `ReadBits(2)` times. If code 16 is used before a non-zero - value has been emitted, a value of 8 is repeated. - * Code 17 emits a streak of zeros \[3..10\], i.e., 3 + `ReadBits(3)` - times. - * Code 18 emits a streak of zeros of length \[11..138\], i.e., - 11 + `ReadBits(7)` times. - - -6 Overall Structure of the Format ---------------------------------- - -Below is a view into the format in Backus-Naur form. It does not cover -all details. End-of-image (EOI) is only implicitly coded into the number -of pixels (xsize * ysize). - - -#### Basic Structure - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - ::= - ::= -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - - -#### Structure of Transforms - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - ::= (1-bit value 1; ) | - 1-bit value 0 - ::= | | | - - ::= 2-bit value 0; - ::= 3-bit sub-pixel code ; - ::= 2-bit value 1; - ::= 3-bit sub-pixel code ; - ::= 2-bit value 2 - ::= 2-bit value 3; - ::= 8-bit color count; -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - - -#### Structure of the Image Data - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - ::= - ::= - ::= 1-bit value 0 | - (1-bit value 1; ) - ::= 3-bit subsample value; - ::= 1 bit value 0 | - (1-bit value 1; 4-bit value for color cache size) - ::= | - ::= - - See "Interpretation of Meta Huffman codes" to - understand what each of these five Huffman codes are - for. - ::= | - ::= see "Simple code length code" for details - ::= ; encoded code lengths - ::= see section "Normal code length code" - ::= (( | | ) - ) | "" -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -A possible example sequence: - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -1-bit value 1 -1-bit value 11-bit value 0 - - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -[canonical_huff]: http://en.wikipedia.org/wiki/Canonical_Huffman_code diff --git a/Extended/libwebp/examples/.deps/anim_diff-anim_diff.Po b/Extended/libwebp/examples/.deps/anim_diff-anim_diff.Po deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/examples/.deps/anim_diff-anim_diff.Po +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/examples/.deps/anim_diff-anim_util.Po b/Extended/libwebp/examples/.deps/anim_diff-anim_util.Po deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/examples/.deps/anim_diff-anim_util.Po +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/examples/.deps/anim_diff-gifdec.Po b/Extended/libwebp/examples/.deps/anim_diff-gifdec.Po deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/examples/.deps/anim_diff-gifdec.Po +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/examples/.deps/anim_dump-anim_dump.Po b/Extended/libwebp/examples/.deps/anim_dump-anim_dump.Po deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/examples/.deps/anim_dump-anim_dump.Po +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/examples/.deps/anim_dump-anim_util.Po b/Extended/libwebp/examples/.deps/anim_dump-anim_util.Po deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/examples/.deps/anim_dump-anim_util.Po +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/examples/.deps/anim_dump-gifdec.Po b/Extended/libwebp/examples/.deps/anim_dump-gifdec.Po deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/examples/.deps/anim_dump-gifdec.Po +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/examples/.deps/cwebp-cwebp.Po b/Extended/libwebp/examples/.deps/cwebp-cwebp.Po deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/examples/.deps/cwebp-cwebp.Po +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/examples/.deps/dwebp-dwebp.Po b/Extended/libwebp/examples/.deps/dwebp-dwebp.Po deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/examples/.deps/dwebp-dwebp.Po +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/examples/.deps/example_util.Plo b/Extended/libwebp/examples/.deps/example_util.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/examples/.deps/example_util.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/examples/.deps/gif2webp-gif2webp.Po b/Extended/libwebp/examples/.deps/gif2webp-gif2webp.Po deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/examples/.deps/gif2webp-gif2webp.Po +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/examples/.deps/gif2webp-gifdec.Po b/Extended/libwebp/examples/.deps/gif2webp-gifdec.Po deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/examples/.deps/gif2webp-gifdec.Po +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/examples/.deps/img2webp-img2webp.Po b/Extended/libwebp/examples/.deps/img2webp-img2webp.Po deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/examples/.deps/img2webp-img2webp.Po +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/examples/.deps/vwebp-vwebp.Po b/Extended/libwebp/examples/.deps/vwebp-vwebp.Po deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/examples/.deps/vwebp-vwebp.Po +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/examples/.deps/webpinfo-webpinfo.Po b/Extended/libwebp/examples/.deps/webpinfo-webpinfo.Po deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/examples/.deps/webpinfo-webpinfo.Po +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/examples/.deps/webpmux-webpmux.Po b/Extended/libwebp/examples/.deps/webpmux-webpmux.Po deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/examples/.deps/webpmux-webpmux.Po +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/examples/Android.mk b/Extended/libwebp/examples/Android.mk deleted file mode 100644 index 13fb3b4..0000000 --- a/Extended/libwebp/examples/Android.mk +++ /dev/null @@ -1,93 +0,0 @@ -LOCAL_PATH := $(call my-dir) - -################################################################################ -# libexample_util - -include $(CLEAR_VARS) - -LOCAL_SRC_FILES := \ - example_util.c \ - -LOCAL_CFLAGS := $(WEBP_CFLAGS) -LOCAL_C_INCLUDES := $(LOCAL_PATH)/../src - -LOCAL_MODULE := example_util - -include $(BUILD_STATIC_LIBRARY) - -################################################################################ -# cwebp - -include $(CLEAR_VARS) - -# Note: to enable jpeg/png encoding the sources from AOSP can be used with -# minor modification to their Android.mk files. -LOCAL_SRC_FILES := \ - cwebp.c \ - -LOCAL_CFLAGS := $(WEBP_CFLAGS) -LOCAL_STATIC_LIBRARIES := example_util imageio_util imagedec webpdemux webp - -LOCAL_MODULE := cwebp - -include $(BUILD_EXECUTABLE) - -################################################################################ -# dwebp - -include $(CLEAR_VARS) - -LOCAL_SRC_FILES := \ - dwebp.c \ - -LOCAL_CFLAGS := $(WEBP_CFLAGS) -LOCAL_STATIC_LIBRARIES := example_util imagedec imageenc webpdemux webp -LOCAL_MODULE := dwebp - -include $(BUILD_EXECUTABLE) - -################################################################################ -# webpmux - -include $(CLEAR_VARS) - -LOCAL_SRC_FILES := \ - webpmux.c \ - -LOCAL_CFLAGS := $(WEBP_CFLAGS) -LOCAL_STATIC_LIBRARIES := example_util imageio_util webpmux webp - -LOCAL_MODULE := webpmux_example - -include $(BUILD_EXECUTABLE) - -################################################################################ -# img2webp - -include $(CLEAR_VARS) - -LOCAL_SRC_FILES := \ - img2webp.c \ - -LOCAL_CFLAGS := $(WEBP_CFLAGS) -LOCAL_STATIC_LIBRARIES := example_util imageio_util imagedec webpmux webpdemux \ - webp - -LOCAL_MODULE := img2webp_example - -include $(BUILD_EXECUTABLE) - -################################################################################ -# webpinfo - -include $(CLEAR_VARS) - -LOCAL_SRC_FILES := \ - webpinfo.c \ - -LOCAL_CFLAGS := $(WEBP_CFLAGS) -LOCAL_STATIC_LIBRARIES := example_util imageio_util webp - -LOCAL_MODULE := webpinfo_example - -include $(BUILD_EXECUTABLE) diff --git a/Extended/libwebp/examples/Makefile b/Extended/libwebp/examples/Makefile deleted file mode 100644 index 91dcc90..0000000 --- a/Extended/libwebp/examples/Makefile +++ /dev/null @@ -1,1096 +0,0 @@ -# Makefile.in generated by automake 1.16.1 from Makefile.am. -# examples/Makefile. Generated from Makefile.in by configure. - -# Copyright (C) 1994-2018 Free Software Foundation, Inc. - -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - - - - - -am__is_gnu_make = { \ - if test -z '$(MAKELEVEL)'; then \ - false; \ - elif test -n '$(MAKE_HOST)'; then \ - true; \ - elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ - true; \ - else \ - false; \ - fi; \ -} -am__make_running_with_option = \ - case $${target_option-} in \ - ?) ;; \ - *) echo "am__make_running_with_option: internal error: invalid" \ - "target option '$${target_option-}' specified" >&2; \ - exit 1;; \ - esac; \ - has_opt=no; \ - sane_makeflags=$$MAKEFLAGS; \ - if $(am__is_gnu_make); then \ - sane_makeflags=$$MFLAGS; \ - else \ - case $$MAKEFLAGS in \ - *\\[\ \ ]*) \ - bs=\\; \ - sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ - | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ - esac; \ - fi; \ - skip_next=no; \ - strip_trailopt () \ - { \ - flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ - }; \ - for flg in $$sane_makeflags; do \ - test $$skip_next = yes && { skip_next=no; continue; }; \ - case $$flg in \ - *=*|--*) continue;; \ - -*I) strip_trailopt 'I'; skip_next=yes;; \ - -*I?*) strip_trailopt 'I';; \ - -*O) strip_trailopt 'O'; skip_next=yes;; \ - -*O?*) strip_trailopt 'O';; \ - -*l) strip_trailopt 'l'; skip_next=yes;; \ - -*l?*) strip_trailopt 'l';; \ - -[dEDm]) skip_next=yes;; \ - -[JT]) skip_next=yes;; \ - esac; \ - case $$flg in \ - *$$target_option*) has_opt=yes; break;; \ - esac; \ - done; \ - test $$has_opt = yes -am__make_dryrun = (target_option=n; $(am__make_running_with_option)) -am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) -pkgdatadir = $(datadir)/libwebp -pkgincludedir = $(includedir)/libwebp -pkglibdir = $(libdir)/libwebp -pkglibexecdir = $(libexecdir)/libwebp -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = x86_64-apple-darwin19.6.0 -host_triplet = x86_64-apple-darwin19.6.0 -bin_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2) $(am__EXEEXT_3) \ - $(am__EXEEXT_4) $(am__EXEEXT_5) $(am__EXEEXT_6) -am__append_1 = dwebp cwebp -#noinst_PROGRAMS = anim_diff$(EXEEXT) \ -# anim_dump$(EXEEXT) -#am__append_2 = gif2webp -#am__append_3 = img2webp -#am__append_4 = webpmux -#am__append_5 = vwebp -#am__append_6 = webpinfo -#am__append_7 = ../src/libwebpdecoder.la -#am__append_8 = ../src/libwebpdecoder.la -#am__append_9 = ../src/libwebpdecoder.la -am__append_10 = ../src/libwebp.la -am__append_11 = ../src/libwebp.la -am__append_12 = ../src/libwebp.la -subdir = examples -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pthread.m4 \ - $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ - $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ - $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = $(top_builddir)/src/webp/config.h -CONFIG_CLEAN_FILES = -CONFIG_CLEAN_VPATH_FILES = -am__EXEEXT_1 = dwebp$(EXEEXT) cwebp$(EXEEXT) -#am__EXEEXT_2 = gif2webp$(EXEEXT) -#am__EXEEXT_3 = img2webp$(EXEEXT) -#am__EXEEXT_4 = webpmux$(EXEEXT) -#am__EXEEXT_5 = vwebp$(EXEEXT) -#am__EXEEXT_6 = webpinfo$(EXEEXT) -am__installdirs = "$(DESTDIR)$(bindir)" -PROGRAMS = $(bin_PROGRAMS) $(noinst_PROGRAMS) -LTLIBRARIES = $(noinst_LTLIBRARIES) -libexample_util_la_DEPENDENCIES = ../src/libwebp.la -am_libexample_util_la_OBJECTS = example_util.lo -libexample_util_la_OBJECTS = $(am_libexample_util_la_OBJECTS) -AM_V_lt = $(am__v_lt_$(V)) -am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) -am__v_lt_0 = --silent -am__v_lt_1 = -am_anim_diff_OBJECTS = anim_diff-anim_diff.$(OBJEXT) \ - anim_diff-anim_util.$(OBJEXT) anim_diff-gifdec.$(OBJEXT) -anim_diff_OBJECTS = $(am_anim_diff_OBJECTS) -am__DEPENDENCIES_1 = -anim_diff_DEPENDENCIES = ../src/demux/libwebpdemux.la \ - libexample_util.la ../imageio/libimageio_util.la \ - $(am__DEPENDENCIES_1) $(am__append_7) $(am__append_10) -am_anim_dump_OBJECTS = anim_dump-anim_dump.$(OBJEXT) \ - anim_dump-anim_util.$(OBJEXT) anim_dump-gifdec.$(OBJEXT) -anim_dump_OBJECTS = $(am_anim_dump_OBJECTS) -anim_dump_DEPENDENCIES = ../src/demux/libwebpdemux.la \ - libexample_util.la ../imageio/libimageio_util.la \ - ../imageio/libimageenc.la $(am__DEPENDENCIES_1) \ - $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) $(am__append_8) \ - $(am__append_11) -am_cwebp_OBJECTS = cwebp-cwebp.$(OBJEXT) -cwebp_OBJECTS = $(am_cwebp_OBJECTS) -cwebp_DEPENDENCIES = libexample_util.la ../imageio/libimageio_util.la \ - ../imageio/libimagedec.la ../src/libwebp.la \ - $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ - $(am__DEPENDENCIES_1) -am_dwebp_OBJECTS = dwebp-dwebp.$(OBJEXT) -dwebp_OBJECTS = $(am_dwebp_OBJECTS) -dwebp_DEPENDENCIES = libexample_util.la ../imageio/libimagedec.la \ - ../imageio/libimageenc.la ../imageio/libimageio_util.la \ - ../src/libwebp.la $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) -am_gif2webp_OBJECTS = gif2webp-gif2webp.$(OBJEXT) \ - gif2webp-gifdec.$(OBJEXT) -gif2webp_OBJECTS = $(am_gif2webp_OBJECTS) -gif2webp_DEPENDENCIES = libexample_util.la \ - ../imageio/libimageio_util.la ../src/mux/libwebpmux.la \ - ../src/libwebp.la $(am__DEPENDENCIES_1) -am_img2webp_OBJECTS = img2webp-img2webp.$(OBJEXT) -img2webp_OBJECTS = $(am_img2webp_OBJECTS) -img2webp_DEPENDENCIES = libexample_util.la \ - ../imageio/libimageio_util.la ../imageio/libimagedec.la \ - ../src/mux/libwebpmux.la ../src/libwebp.la \ - $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ - $(am__DEPENDENCIES_1) -am_vwebp_OBJECTS = vwebp-vwebp.$(OBJEXT) -vwebp_OBJECTS = $(am_vwebp_OBJECTS) -vwebp_DEPENDENCIES = libexample_util.la ../imageio/libimageio_util.la \ - ../src/demux/libwebpdemux.la $(am__DEPENDENCIES_1) \ - $(am__append_9) $(am__append_12) -am_webpinfo_OBJECTS = webpinfo-webpinfo.$(OBJEXT) -webpinfo_OBJECTS = $(am_webpinfo_OBJECTS) -webpinfo_DEPENDENCIES = libexample_util.la \ - ../imageio/libimageio_util.la ../src/libwebp.la -am_webpmux_OBJECTS = webpmux-webpmux.$(OBJEXT) -webpmux_OBJECTS = $(am_webpmux_OBJECTS) -webpmux_DEPENDENCIES = libexample_util.la \ - ../imageio/libimageio_util.la ../src/mux/libwebpmux.la \ - ../src/libwebp.la -AM_V_P = $(am__v_P_$(V)) -am__v_P_ = $(am__v_P_$(AM_DEFAULT_VERBOSITY)) -am__v_P_0 = false -am__v_P_1 = : -AM_V_GEN = $(am__v_GEN_$(V)) -am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) -am__v_GEN_0 = @echo " GEN " $@; -am__v_GEN_1 = -AM_V_at = $(am__v_at_$(V)) -am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) -am__v_at_0 = @ -am__v_at_1 = -DEFAULT_INCLUDES = -I. -I$(top_builddir)/src/webp -depcomp = $(SHELL) $(top_srcdir)/depcomp -am__maybe_remake_depfiles = depfiles -am__depfiles_remade = ./$(DEPDIR)/anim_diff-anim_diff.Po \ - ./$(DEPDIR)/anim_diff-anim_util.Po \ - ./$(DEPDIR)/anim_diff-gifdec.Po \ - ./$(DEPDIR)/anim_dump-anim_dump.Po \ - ./$(DEPDIR)/anim_dump-anim_util.Po \ - ./$(DEPDIR)/anim_dump-gifdec.Po ./$(DEPDIR)/cwebp-cwebp.Po \ - ./$(DEPDIR)/dwebp-dwebp.Po ./$(DEPDIR)/example_util.Plo \ - ./$(DEPDIR)/gif2webp-gif2webp.Po \ - ./$(DEPDIR)/gif2webp-gifdec.Po \ - ./$(DEPDIR)/img2webp-img2webp.Po ./$(DEPDIR)/vwebp-vwebp.Po \ - ./$(DEPDIR)/webpinfo-webpinfo.Po \ - ./$(DEPDIR)/webpmux-webpmux.Po -am__mv = mv -f -COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ - $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CFLAGS) $(CFLAGS) -AM_V_CC = $(am__v_CC_$(V)) -am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) -am__v_CC_0 = @echo " CC " $@; -am__v_CC_1 = -CCLD = $(CC) -LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ - $(AM_LDFLAGS) $(LDFLAGS) -o $@ -AM_V_CCLD = $(am__v_CCLD_$(V)) -am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) -am__v_CCLD_0 = @echo " CCLD " $@; -am__v_CCLD_1 = -SOURCES = $(libexample_util_la_SOURCES) $(anim_diff_SOURCES) \ - $(anim_dump_SOURCES) $(cwebp_SOURCES) $(dwebp_SOURCES) \ - $(gif2webp_SOURCES) $(img2webp_SOURCES) $(vwebp_SOURCES) \ - $(webpinfo_SOURCES) $(webpmux_SOURCES) -DIST_SOURCES = $(libexample_util_la_SOURCES) $(anim_diff_SOURCES) \ - $(anim_dump_SOURCES) $(cwebp_SOURCES) $(dwebp_SOURCES) \ - $(gif2webp_SOURCES) $(img2webp_SOURCES) $(vwebp_SOURCES) \ - $(webpinfo_SOURCES) $(webpmux_SOURCES) -am__can_run_installinfo = \ - case $$AM_UPDATE_INFO_DIR in \ - n|no|NO) false;; \ - *) (install-info --version) >/dev/null 2>&1;; \ - esac -am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) -# Read a list of newline-separated strings from the standard input, -# and print each of them once, without duplicates. Input order is -# *not* preserved. -am__uniquify_input = $(AWK) '\ - BEGIN { nonempty = 0; } \ - { items[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in items) print i; }; } \ -' -# Make sure the list of sources is unique. This is necessary because, -# e.g., the same source file might be shared among _SOURCES variables -# for different programs/libraries. -am__define_uniq_tagged_files = \ - list='$(am__tagged_files)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | $(am__uniquify_input)` -ETAGS = etags -CTAGS = ctags -am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = ${SHELL} /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp/missing aclocal-1.16 -AMTAR = $${TAR-tar} -AM_CFLAGS = -fvisibility=hidden -Wall -Wconstant-conversion -Wdeclaration-after-statement -Wextra -Wfloat-conversion -Wformat -Wformat-nonliteral -Wformat -Wformat-security -Wmissing-declarations -Wmissing-prototypes -Wold-style-definition -Wparentheses-equality -Wshadow -Wshorten-64-to-32 -Wundef -Wunreachable-code -Wunused -Wvla -Wno-deprecated-declarations -AM_CPPFLAGS = -DNDEBUG -I$(top_builddir)/src -I$(top_srcdir)/src -AM_DEFAULT_VERBOSITY = 0 -AR = ar -AUTOCONF = ${SHELL} /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp/missing autoconf -AUTOHEADER = ${SHELL} /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp/missing autoheader -AUTOMAKE = ${SHELL} /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp/missing automake-1.16 -AWK = awk -CC = gcc -CCDEPMODE = depmode=gcc3 -CFLAGS = -g -O2 -D_THREAD_SAFE -pthread -CPP = gcc -E -CPPFLAGS = -CYGPATH_W = echo -DEFS = -DHAVE_CONFIG_H -DEPDIR = .deps -DLLTOOL = false -DSYMUTIL = dsymutil -DUMPBIN = -ECHO_C = \c -ECHO_N = -ECHO_T = -EGREP = /usr/bin/grep -E -EXEEXT = -FGREP = /usr/bin/grep -F -GIF_INCLUDES = -GIF_LIBS = -lgif -GL_INCLUDES = -GL_LIBS = -framework GLUT -framework OpenGL -GREP = /usr/bin/grep -INSTALL = /opt/twitter_mde/homebrew_minimal/mde_bin/ginstall -c -INSTALL_DATA = ${INSTALL} -m 644 -INSTALL_PROGRAM = ${INSTALL} -INSTALL_SCRIPT = ${INSTALL} -INSTALL_STRIP_PROGRAM = $(install_sh) -c -s -JPEG_INCLUDES = -DWEBP_HAVE_JPEG -JPEG_LIBS = -ljpeg -LD = /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld -LDFLAGS = -LIBOBJS = -LIBPNG_CONFIG = /opt/twitter_mde/bin/libpng-config -LIBS = -LIBSDL_CONFIG = -LIBTOOL = $(SHELL) $(top_builddir)/libtool -LIPO = lipo -LN_S = ln -s -LTLIBOBJS = -LT_SYS_LIBRARY_PATH = -MAKEINFO = ${SHELL} /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp/missing makeinfo -MANIFEST_TOOL = : -MKDIR_P = /opt/twitter_mde/homebrew_minimal/mde_bin/gmkdir -p -NEON_FLAGS = -NM = /usr/bin/nm -B -NMEDIT = nmedit -OBJDUMP = objdump -OBJEXT = o -OTOOL = otool -OTOOL64 = : -PACKAGE = libwebp -PACKAGE_BUGREPORT = https://bugs.chromium.org/p/webp -PACKAGE_NAME = libwebp -PACKAGE_STRING = libwebp 1.1.0 -PACKAGE_TARNAME = libwebp -PACKAGE_URL = http://developers.google.com/speed/webp -PACKAGE_VERSION = 1.1.0 -PATH_SEPARATOR = : -PNG_INCLUDES = -I/opt/twitter_mde/package/twitter_dev_homebrew/current/Cellar/libpng/1.6.34/include/libpng16 -DWEBP_HAVE_PNG -PNG_LIBS = -L/opt/twitter_mde/package/twitter_dev_homebrew/current/Cellar/libpng/1.6.34/lib -lpng16 -PTHREAD_CC = gcc -PTHREAD_CFLAGS = -D_THREAD_SAFE -pthread -PTHREAD_LIBS = -RANLIB = ranlib -SDL_INCLUDES = -SDL_LIBS = -SED = /usr/bin/sed -SET_MAKE = -SHELL = /bin/sh -SSE2_FLAGS = -msse2 -SSE41_FLAGS = -msse4.1 -STRIP = strip -TIFF_INCLUDES = -DWEBP_HAVE_TIFF -TIFF_LIBS = -ltiff -USE_SWAP_16BIT_CSP = -VERSION = 1.1.0 -abs_builddir = /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp/examples -abs_srcdir = /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp/examples -abs_top_builddir = /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp -abs_top_srcdir = /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp -ac_ct_AR = ar -ac_ct_CC = gcc -ac_ct_DUMPBIN = -am__include = include -am__leading_dot = . -am__quote = -am__tar = $${TAR-tar} chof - "$$tardir" -am__untar = $${TAR-tar} xf - -ax_pthread_config = -bindir = ${exec_prefix}/bin -build = x86_64-apple-darwin19.6.0 -build_alias = -build_cpu = x86_64 -build_os = darwin19.6.0 -build_vendor = apple -builddir = . -datadir = ${datarootdir} -datarootdir = ${prefix}/share -docdir = ${datarootdir}/doc/${PACKAGE_TARNAME} -dvidir = ${docdir} -exec_prefix = ${prefix} -host = x86_64-apple-darwin19.6.0 -host_alias = -host_cpu = x86_64 -host_os = darwin19.6.0 -host_vendor = apple -htmldir = ${docdir} -includedir = ${prefix}/include -infodir = ${datarootdir}/info -install_sh = ${SHELL} /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp/install-sh -libdir = ${exec_prefix}/lib -libexecdir = ${exec_prefix}/libexec -localedir = ${datarootdir}/locale -localstatedir = ${prefix}/var -mandir = ${datarootdir}/man -mkdir_p = $(MKDIR_P) -oldincludedir = /usr/include -pdfdir = ${docdir} -pkgconfigdir = ${libdir}/pkgconfig -prefix = /usr/local -program_transform_name = s,x,x, -psdir = ${docdir} -runstatedir = ${localstatedir}/run -sbindir = ${exec_prefix}/sbin -sharedstatedir = ${prefix}/com -srcdir = . -sysconfdir = ${prefix}/etc -target_alias = -top_build_prefix = ../ -top_builddir = .. -top_srcdir = .. -noinst_LTLIBRARIES = libexample_util.la -libexample_util_la_SOURCES = example_util.c example_util.h -libexample_util_la_LIBADD = ../src/libwebp.la -anim_diff_SOURCES = anim_diff.c anim_util.c anim_util.h gifdec.c gifdec.h -anim_diff_CPPFLAGS = $(AM_CPPFLAGS) $(GIF_INCLUDES) -anim_diff_LDADD = ../src/demux/libwebpdemux.la libexample_util.la \ - ../imageio/libimageio_util.la $(GIF_LIBS) -lm $(am__append_7) \ - $(am__append_10) -anim_dump_SOURCES = anim_dump.c anim_util.c anim_util.h gifdec.c gifdec.h -anim_dump_CPPFLAGS = $(AM_CPPFLAGS) $(PNG_INCLUDES) $(GIF_INCLUDES) -anim_dump_LDADD = ../src/demux/libwebpdemux.la libexample_util.la \ - ../imageio/libimageio_util.la ../imageio/libimageenc.la \ - $(PNG_LIBS) $(GIF_LIBS) $(TIFF_LIBS) -lm $(am__append_8) \ - $(am__append_11) -cwebp_SOURCES = cwebp.c stopwatch.h -cwebp_CPPFLAGS = $(AM_CPPFLAGS) -cwebp_LDADD = libexample_util.la ../imageio/libimageio_util.la \ - ../imageio/libimagedec.la ../src/libwebp.la $(JPEG_LIBS) \ - $(PNG_LIBS) $(TIFF_LIBS) -dwebp_SOURCES = dwebp.c stopwatch.h -dwebp_CPPFLAGS = $(AM_CPPFLAGS) $(JPEG_INCLUDES) $(PNG_INCLUDES) -dwebp_LDADD = libexample_util.la ../imageio/libimagedec.la \ - ../imageio/libimageenc.la ../imageio/libimageio_util.la \ - ../src/libwebp.la $(PNG_LIBS) $(JPEG_LIBS) -gif2webp_SOURCES = gif2webp.c gifdec.c gifdec.h -gif2webp_CPPFLAGS = $(AM_CPPFLAGS) $(GIF_INCLUDES) -gif2webp_LDADD = libexample_util.la ../imageio/libimageio_util.la \ - ../src/mux/libwebpmux.la ../src/libwebp.la $(GIF_LIBS) -vwebp_SOURCES = vwebp.c -vwebp_CPPFLAGS = $(AM_CPPFLAGS) $(GL_INCLUDES) -vwebp_LDADD = libexample_util.la ../imageio/libimageio_util.la \ - ../src/demux/libwebpdemux.la $(GL_LIBS) $(am__append_9) \ - $(am__append_12) -webpmux_SOURCES = webpmux.c -webpmux_CPPFLAGS = $(AM_CPPFLAGS) -webpmux_LDADD = libexample_util.la ../imageio/libimageio_util.la \ - ../src/mux/libwebpmux.la ../src/libwebp.la -img2webp_SOURCES = img2webp.c -img2webp_CPPFLAGS = $(AM_CPPFLAGS) -img2webp_LDADD = libexample_util.la ../imageio/libimageio_util.la \ - ../imageio/libimagedec.la ../src/mux/libwebpmux.la \ - ../src/libwebp.la $(PNG_LIBS) $(JPEG_LIBS) $(TIFF_LIBS) -webpinfo_SOURCES = webpinfo.c -webpinfo_CPPFLAGS = $(AM_CPPFLAGS) -webpinfo_LDADD = libexample_util.la ../imageio/libimageio_util.la \ - ../src/libwebp.la -all: all-am - -.SUFFIXES: -.SUFFIXES: .c .lo .o .obj -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ - && { if test -f $@; then exit 0; else break; fi; }; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign examples/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --foreign examples/Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(am__aclocal_m4_deps): -install-binPROGRAMS: $(bin_PROGRAMS) - @$(NORMAL_INSTALL) - @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ - if test -n "$$list"; then \ - echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ - $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ - fi; \ - for p in $$list; do echo "$$p $$p"; done | \ - sed 's/$(EXEEXT)$$//' | \ - while read p p1; do if test -f $$p \ - || test -f $$p1 \ - ; then echo "$$p"; echo "$$p"; else :; fi; \ - done | \ - sed -e 'p;s,.*/,,;n;h' \ - -e 's|.*|.|' \ - -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ - sed 'N;N;N;s,\n, ,g' | \ - $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ - { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ - if ($$2 == $$4) files[d] = files[d] " " $$1; \ - else { print "f", $$3 "/" $$4, $$1; } } \ - END { for (d in files) print "f", d, files[d] }' | \ - while read type dir files; do \ - if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ - test -z "$$files" || { \ - echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ - $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ - } \ - ; done - -uninstall-binPROGRAMS: - @$(NORMAL_UNINSTALL) - @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ - files=`for p in $$list; do echo "$$p"; done | \ - sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ - -e 's/$$/$(EXEEXT)/' \ - `; \ - test -n "$$list" || exit 0; \ - echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ - cd "$(DESTDIR)$(bindir)" && rm -f $$files - -clean-binPROGRAMS: - @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ - echo " rm -f" $$list; \ - rm -f $$list || exit $$?; \ - test -n "$(EXEEXT)" || exit 0; \ - list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ - echo " rm -f" $$list; \ - rm -f $$list - -clean-noinstPROGRAMS: - @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ - echo " rm -f" $$list; \ - rm -f $$list || exit $$?; \ - test -n "$(EXEEXT)" || exit 0; \ - list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ - echo " rm -f" $$list; \ - rm -f $$list - -clean-noinstLTLIBRARIES: - -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) - @list='$(noinst_LTLIBRARIES)'; \ - locs=`for p in $$list; do echo $$p; done | \ - sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ - sort -u`; \ - test -z "$$locs" || { \ - echo rm -f $${locs}; \ - rm -f $${locs}; \ - } - -libexample_util.la: $(libexample_util_la_OBJECTS) $(libexample_util_la_DEPENDENCIES) $(EXTRA_libexample_util_la_DEPENDENCIES) - $(AM_V_CCLD)$(LINK) $(libexample_util_la_OBJECTS) $(libexample_util_la_LIBADD) $(LIBS) - -anim_diff$(EXEEXT): $(anim_diff_OBJECTS) $(anim_diff_DEPENDENCIES) $(EXTRA_anim_diff_DEPENDENCIES) - @rm -f anim_diff$(EXEEXT) - $(AM_V_CCLD)$(LINK) $(anim_diff_OBJECTS) $(anim_diff_LDADD) $(LIBS) - -anim_dump$(EXEEXT): $(anim_dump_OBJECTS) $(anim_dump_DEPENDENCIES) $(EXTRA_anim_dump_DEPENDENCIES) - @rm -f anim_dump$(EXEEXT) - $(AM_V_CCLD)$(LINK) $(anim_dump_OBJECTS) $(anim_dump_LDADD) $(LIBS) - -cwebp$(EXEEXT): $(cwebp_OBJECTS) $(cwebp_DEPENDENCIES) $(EXTRA_cwebp_DEPENDENCIES) - @rm -f cwebp$(EXEEXT) - $(AM_V_CCLD)$(LINK) $(cwebp_OBJECTS) $(cwebp_LDADD) $(LIBS) - -dwebp$(EXEEXT): $(dwebp_OBJECTS) $(dwebp_DEPENDENCIES) $(EXTRA_dwebp_DEPENDENCIES) - @rm -f dwebp$(EXEEXT) - $(AM_V_CCLD)$(LINK) $(dwebp_OBJECTS) $(dwebp_LDADD) $(LIBS) - -gif2webp$(EXEEXT): $(gif2webp_OBJECTS) $(gif2webp_DEPENDENCIES) $(EXTRA_gif2webp_DEPENDENCIES) - @rm -f gif2webp$(EXEEXT) - $(AM_V_CCLD)$(LINK) $(gif2webp_OBJECTS) $(gif2webp_LDADD) $(LIBS) - -img2webp$(EXEEXT): $(img2webp_OBJECTS) $(img2webp_DEPENDENCIES) $(EXTRA_img2webp_DEPENDENCIES) - @rm -f img2webp$(EXEEXT) - $(AM_V_CCLD)$(LINK) $(img2webp_OBJECTS) $(img2webp_LDADD) $(LIBS) - -vwebp$(EXEEXT): $(vwebp_OBJECTS) $(vwebp_DEPENDENCIES) $(EXTRA_vwebp_DEPENDENCIES) - @rm -f vwebp$(EXEEXT) - $(AM_V_CCLD)$(LINK) $(vwebp_OBJECTS) $(vwebp_LDADD) $(LIBS) - -webpinfo$(EXEEXT): $(webpinfo_OBJECTS) $(webpinfo_DEPENDENCIES) $(EXTRA_webpinfo_DEPENDENCIES) - @rm -f webpinfo$(EXEEXT) - $(AM_V_CCLD)$(LINK) $(webpinfo_OBJECTS) $(webpinfo_LDADD) $(LIBS) - -webpmux$(EXEEXT): $(webpmux_OBJECTS) $(webpmux_DEPENDENCIES) $(EXTRA_webpmux_DEPENDENCIES) - @rm -f webpmux$(EXEEXT) - $(AM_V_CCLD)$(LINK) $(webpmux_OBJECTS) $(webpmux_LDADD) $(LIBS) - -mostlyclean-compile: - -rm -f *.$(OBJEXT) - -distclean-compile: - -rm -f *.tab.c - -include ./$(DEPDIR)/anim_diff-anim_diff.Po # am--include-marker -include ./$(DEPDIR)/anim_diff-anim_util.Po # am--include-marker -include ./$(DEPDIR)/anim_diff-gifdec.Po # am--include-marker -include ./$(DEPDIR)/anim_dump-anim_dump.Po # am--include-marker -include ./$(DEPDIR)/anim_dump-anim_util.Po # am--include-marker -include ./$(DEPDIR)/anim_dump-gifdec.Po # am--include-marker -include ./$(DEPDIR)/cwebp-cwebp.Po # am--include-marker -include ./$(DEPDIR)/dwebp-dwebp.Po # am--include-marker -include ./$(DEPDIR)/example_util.Plo # am--include-marker -include ./$(DEPDIR)/gif2webp-gif2webp.Po # am--include-marker -include ./$(DEPDIR)/gif2webp-gifdec.Po # am--include-marker -include ./$(DEPDIR)/img2webp-img2webp.Po # am--include-marker -include ./$(DEPDIR)/vwebp-vwebp.Po # am--include-marker -include ./$(DEPDIR)/webpinfo-webpinfo.Po # am--include-marker -include ./$(DEPDIR)/webpmux-webpmux.Po # am--include-marker - -$(am__depfiles_remade): - @$(MKDIR_P) $(@D) - @echo '# dummy' >$@-t && $(am__mv) $@-t $@ - -am--depfiles: $(am__depfiles_remade) - -.c.o: - $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ - $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ - $(am__mv) $$depbase.Tpo $$depbase.Po -# $(AM_V_CC)source='$<' object='$@' libtool=no \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(COMPILE) -c -o $@ $< - -.c.obj: - $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ - $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ - $(am__mv) $$depbase.Tpo $$depbase.Po -# $(AM_V_CC)source='$<' object='$@' libtool=no \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` - -.c.lo: - $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ - $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ - $(am__mv) $$depbase.Tpo $$depbase.Plo -# $(AM_V_CC)source='$<' object='$@' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LTCOMPILE) -c -o $@ $< - -anim_diff-anim_diff.o: anim_diff.c - $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(anim_diff_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT anim_diff-anim_diff.o -MD -MP -MF $(DEPDIR)/anim_diff-anim_diff.Tpo -c -o anim_diff-anim_diff.o `test -f 'anim_diff.c' || echo '$(srcdir)/'`anim_diff.c - $(AM_V_at)$(am__mv) $(DEPDIR)/anim_diff-anim_diff.Tpo $(DEPDIR)/anim_diff-anim_diff.Po -# $(AM_V_CC)source='anim_diff.c' object='anim_diff-anim_diff.o' libtool=no \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(anim_diff_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o anim_diff-anim_diff.o `test -f 'anim_diff.c' || echo '$(srcdir)/'`anim_diff.c - -anim_diff-anim_diff.obj: anim_diff.c - $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(anim_diff_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT anim_diff-anim_diff.obj -MD -MP -MF $(DEPDIR)/anim_diff-anim_diff.Tpo -c -o anim_diff-anim_diff.obj `if test -f 'anim_diff.c'; then $(CYGPATH_W) 'anim_diff.c'; else $(CYGPATH_W) '$(srcdir)/anim_diff.c'; fi` - $(AM_V_at)$(am__mv) $(DEPDIR)/anim_diff-anim_diff.Tpo $(DEPDIR)/anim_diff-anim_diff.Po -# $(AM_V_CC)source='anim_diff.c' object='anim_diff-anim_diff.obj' libtool=no \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(anim_diff_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o anim_diff-anim_diff.obj `if test -f 'anim_diff.c'; then $(CYGPATH_W) 'anim_diff.c'; else $(CYGPATH_W) '$(srcdir)/anim_diff.c'; fi` - -anim_diff-anim_util.o: anim_util.c - $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(anim_diff_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT anim_diff-anim_util.o -MD -MP -MF $(DEPDIR)/anim_diff-anim_util.Tpo -c -o anim_diff-anim_util.o `test -f 'anim_util.c' || echo '$(srcdir)/'`anim_util.c - $(AM_V_at)$(am__mv) $(DEPDIR)/anim_diff-anim_util.Tpo $(DEPDIR)/anim_diff-anim_util.Po -# $(AM_V_CC)source='anim_util.c' object='anim_diff-anim_util.o' libtool=no \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(anim_diff_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o anim_diff-anim_util.o `test -f 'anim_util.c' || echo '$(srcdir)/'`anim_util.c - -anim_diff-anim_util.obj: anim_util.c - $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(anim_diff_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT anim_diff-anim_util.obj -MD -MP -MF $(DEPDIR)/anim_diff-anim_util.Tpo -c -o anim_diff-anim_util.obj `if test -f 'anim_util.c'; then $(CYGPATH_W) 'anim_util.c'; else $(CYGPATH_W) '$(srcdir)/anim_util.c'; fi` - $(AM_V_at)$(am__mv) $(DEPDIR)/anim_diff-anim_util.Tpo $(DEPDIR)/anim_diff-anim_util.Po -# $(AM_V_CC)source='anim_util.c' object='anim_diff-anim_util.obj' libtool=no \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(anim_diff_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o anim_diff-anim_util.obj `if test -f 'anim_util.c'; then $(CYGPATH_W) 'anim_util.c'; else $(CYGPATH_W) '$(srcdir)/anim_util.c'; fi` - -anim_diff-gifdec.o: gifdec.c - $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(anim_diff_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT anim_diff-gifdec.o -MD -MP -MF $(DEPDIR)/anim_diff-gifdec.Tpo -c -o anim_diff-gifdec.o `test -f 'gifdec.c' || echo '$(srcdir)/'`gifdec.c - $(AM_V_at)$(am__mv) $(DEPDIR)/anim_diff-gifdec.Tpo $(DEPDIR)/anim_diff-gifdec.Po -# $(AM_V_CC)source='gifdec.c' object='anim_diff-gifdec.o' libtool=no \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(anim_diff_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o anim_diff-gifdec.o `test -f 'gifdec.c' || echo '$(srcdir)/'`gifdec.c - -anim_diff-gifdec.obj: gifdec.c - $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(anim_diff_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT anim_diff-gifdec.obj -MD -MP -MF $(DEPDIR)/anim_diff-gifdec.Tpo -c -o anim_diff-gifdec.obj `if test -f 'gifdec.c'; then $(CYGPATH_W) 'gifdec.c'; else $(CYGPATH_W) '$(srcdir)/gifdec.c'; fi` - $(AM_V_at)$(am__mv) $(DEPDIR)/anim_diff-gifdec.Tpo $(DEPDIR)/anim_diff-gifdec.Po -# $(AM_V_CC)source='gifdec.c' object='anim_diff-gifdec.obj' libtool=no \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(anim_diff_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o anim_diff-gifdec.obj `if test -f 'gifdec.c'; then $(CYGPATH_W) 'gifdec.c'; else $(CYGPATH_W) '$(srcdir)/gifdec.c'; fi` - -anim_dump-anim_dump.o: anim_dump.c - $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(anim_dump_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT anim_dump-anim_dump.o -MD -MP -MF $(DEPDIR)/anim_dump-anim_dump.Tpo -c -o anim_dump-anim_dump.o `test -f 'anim_dump.c' || echo '$(srcdir)/'`anim_dump.c - $(AM_V_at)$(am__mv) $(DEPDIR)/anim_dump-anim_dump.Tpo $(DEPDIR)/anim_dump-anim_dump.Po -# $(AM_V_CC)source='anim_dump.c' object='anim_dump-anim_dump.o' libtool=no \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(anim_dump_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o anim_dump-anim_dump.o `test -f 'anim_dump.c' || echo '$(srcdir)/'`anim_dump.c - -anim_dump-anim_dump.obj: anim_dump.c - $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(anim_dump_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT anim_dump-anim_dump.obj -MD -MP -MF $(DEPDIR)/anim_dump-anim_dump.Tpo -c -o anim_dump-anim_dump.obj `if test -f 'anim_dump.c'; then $(CYGPATH_W) 'anim_dump.c'; else $(CYGPATH_W) '$(srcdir)/anim_dump.c'; fi` - $(AM_V_at)$(am__mv) $(DEPDIR)/anim_dump-anim_dump.Tpo $(DEPDIR)/anim_dump-anim_dump.Po -# $(AM_V_CC)source='anim_dump.c' object='anim_dump-anim_dump.obj' libtool=no \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(anim_dump_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o anim_dump-anim_dump.obj `if test -f 'anim_dump.c'; then $(CYGPATH_W) 'anim_dump.c'; else $(CYGPATH_W) '$(srcdir)/anim_dump.c'; fi` - -anim_dump-anim_util.o: anim_util.c - $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(anim_dump_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT anim_dump-anim_util.o -MD -MP -MF $(DEPDIR)/anim_dump-anim_util.Tpo -c -o anim_dump-anim_util.o `test -f 'anim_util.c' || echo '$(srcdir)/'`anim_util.c - $(AM_V_at)$(am__mv) $(DEPDIR)/anim_dump-anim_util.Tpo $(DEPDIR)/anim_dump-anim_util.Po -# $(AM_V_CC)source='anim_util.c' object='anim_dump-anim_util.o' libtool=no \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(anim_dump_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o anim_dump-anim_util.o `test -f 'anim_util.c' || echo '$(srcdir)/'`anim_util.c - -anim_dump-anim_util.obj: anim_util.c - $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(anim_dump_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT anim_dump-anim_util.obj -MD -MP -MF $(DEPDIR)/anim_dump-anim_util.Tpo -c -o anim_dump-anim_util.obj `if test -f 'anim_util.c'; then $(CYGPATH_W) 'anim_util.c'; else $(CYGPATH_W) '$(srcdir)/anim_util.c'; fi` - $(AM_V_at)$(am__mv) $(DEPDIR)/anim_dump-anim_util.Tpo $(DEPDIR)/anim_dump-anim_util.Po -# $(AM_V_CC)source='anim_util.c' object='anim_dump-anim_util.obj' libtool=no \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(anim_dump_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o anim_dump-anim_util.obj `if test -f 'anim_util.c'; then $(CYGPATH_W) 'anim_util.c'; else $(CYGPATH_W) '$(srcdir)/anim_util.c'; fi` - -anim_dump-gifdec.o: gifdec.c - $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(anim_dump_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT anim_dump-gifdec.o -MD -MP -MF $(DEPDIR)/anim_dump-gifdec.Tpo -c -o anim_dump-gifdec.o `test -f 'gifdec.c' || echo '$(srcdir)/'`gifdec.c - $(AM_V_at)$(am__mv) $(DEPDIR)/anim_dump-gifdec.Tpo $(DEPDIR)/anim_dump-gifdec.Po -# $(AM_V_CC)source='gifdec.c' object='anim_dump-gifdec.o' libtool=no \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(anim_dump_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o anim_dump-gifdec.o `test -f 'gifdec.c' || echo '$(srcdir)/'`gifdec.c - -anim_dump-gifdec.obj: gifdec.c - $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(anim_dump_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT anim_dump-gifdec.obj -MD -MP -MF $(DEPDIR)/anim_dump-gifdec.Tpo -c -o anim_dump-gifdec.obj `if test -f 'gifdec.c'; then $(CYGPATH_W) 'gifdec.c'; else $(CYGPATH_W) '$(srcdir)/gifdec.c'; fi` - $(AM_V_at)$(am__mv) $(DEPDIR)/anim_dump-gifdec.Tpo $(DEPDIR)/anim_dump-gifdec.Po -# $(AM_V_CC)source='gifdec.c' object='anim_dump-gifdec.obj' libtool=no \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(anim_dump_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o anim_dump-gifdec.obj `if test -f 'gifdec.c'; then $(CYGPATH_W) 'gifdec.c'; else $(CYGPATH_W) '$(srcdir)/gifdec.c'; fi` - -cwebp-cwebp.o: cwebp.c - $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cwebp_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT cwebp-cwebp.o -MD -MP -MF $(DEPDIR)/cwebp-cwebp.Tpo -c -o cwebp-cwebp.o `test -f 'cwebp.c' || echo '$(srcdir)/'`cwebp.c - $(AM_V_at)$(am__mv) $(DEPDIR)/cwebp-cwebp.Tpo $(DEPDIR)/cwebp-cwebp.Po -# $(AM_V_CC)source='cwebp.c' object='cwebp-cwebp.o' libtool=no \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cwebp_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o cwebp-cwebp.o `test -f 'cwebp.c' || echo '$(srcdir)/'`cwebp.c - -cwebp-cwebp.obj: cwebp.c - $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cwebp_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT cwebp-cwebp.obj -MD -MP -MF $(DEPDIR)/cwebp-cwebp.Tpo -c -o cwebp-cwebp.obj `if test -f 'cwebp.c'; then $(CYGPATH_W) 'cwebp.c'; else $(CYGPATH_W) '$(srcdir)/cwebp.c'; fi` - $(AM_V_at)$(am__mv) $(DEPDIR)/cwebp-cwebp.Tpo $(DEPDIR)/cwebp-cwebp.Po -# $(AM_V_CC)source='cwebp.c' object='cwebp-cwebp.obj' libtool=no \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cwebp_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o cwebp-cwebp.obj `if test -f 'cwebp.c'; then $(CYGPATH_W) 'cwebp.c'; else $(CYGPATH_W) '$(srcdir)/cwebp.c'; fi` - -dwebp-dwebp.o: dwebp.c - $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(dwebp_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dwebp-dwebp.o -MD -MP -MF $(DEPDIR)/dwebp-dwebp.Tpo -c -o dwebp-dwebp.o `test -f 'dwebp.c' || echo '$(srcdir)/'`dwebp.c - $(AM_V_at)$(am__mv) $(DEPDIR)/dwebp-dwebp.Tpo $(DEPDIR)/dwebp-dwebp.Po -# $(AM_V_CC)source='dwebp.c' object='dwebp-dwebp.o' libtool=no \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(dwebp_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dwebp-dwebp.o `test -f 'dwebp.c' || echo '$(srcdir)/'`dwebp.c - -dwebp-dwebp.obj: dwebp.c - $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(dwebp_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dwebp-dwebp.obj -MD -MP -MF $(DEPDIR)/dwebp-dwebp.Tpo -c -o dwebp-dwebp.obj `if test -f 'dwebp.c'; then $(CYGPATH_W) 'dwebp.c'; else $(CYGPATH_W) '$(srcdir)/dwebp.c'; fi` - $(AM_V_at)$(am__mv) $(DEPDIR)/dwebp-dwebp.Tpo $(DEPDIR)/dwebp-dwebp.Po -# $(AM_V_CC)source='dwebp.c' object='dwebp-dwebp.obj' libtool=no \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(dwebp_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dwebp-dwebp.obj `if test -f 'dwebp.c'; then $(CYGPATH_W) 'dwebp.c'; else $(CYGPATH_W) '$(srcdir)/dwebp.c'; fi` - -gif2webp-gif2webp.o: gif2webp.c - $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gif2webp_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT gif2webp-gif2webp.o -MD -MP -MF $(DEPDIR)/gif2webp-gif2webp.Tpo -c -o gif2webp-gif2webp.o `test -f 'gif2webp.c' || echo '$(srcdir)/'`gif2webp.c - $(AM_V_at)$(am__mv) $(DEPDIR)/gif2webp-gif2webp.Tpo $(DEPDIR)/gif2webp-gif2webp.Po -# $(AM_V_CC)source='gif2webp.c' object='gif2webp-gif2webp.o' libtool=no \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gif2webp_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o gif2webp-gif2webp.o `test -f 'gif2webp.c' || echo '$(srcdir)/'`gif2webp.c - -gif2webp-gif2webp.obj: gif2webp.c - $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gif2webp_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT gif2webp-gif2webp.obj -MD -MP -MF $(DEPDIR)/gif2webp-gif2webp.Tpo -c -o gif2webp-gif2webp.obj `if test -f 'gif2webp.c'; then $(CYGPATH_W) 'gif2webp.c'; else $(CYGPATH_W) '$(srcdir)/gif2webp.c'; fi` - $(AM_V_at)$(am__mv) $(DEPDIR)/gif2webp-gif2webp.Tpo $(DEPDIR)/gif2webp-gif2webp.Po -# $(AM_V_CC)source='gif2webp.c' object='gif2webp-gif2webp.obj' libtool=no \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gif2webp_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o gif2webp-gif2webp.obj `if test -f 'gif2webp.c'; then $(CYGPATH_W) 'gif2webp.c'; else $(CYGPATH_W) '$(srcdir)/gif2webp.c'; fi` - -gif2webp-gifdec.o: gifdec.c - $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gif2webp_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT gif2webp-gifdec.o -MD -MP -MF $(DEPDIR)/gif2webp-gifdec.Tpo -c -o gif2webp-gifdec.o `test -f 'gifdec.c' || echo '$(srcdir)/'`gifdec.c - $(AM_V_at)$(am__mv) $(DEPDIR)/gif2webp-gifdec.Tpo $(DEPDIR)/gif2webp-gifdec.Po -# $(AM_V_CC)source='gifdec.c' object='gif2webp-gifdec.o' libtool=no \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gif2webp_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o gif2webp-gifdec.o `test -f 'gifdec.c' || echo '$(srcdir)/'`gifdec.c - -gif2webp-gifdec.obj: gifdec.c - $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gif2webp_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT gif2webp-gifdec.obj -MD -MP -MF $(DEPDIR)/gif2webp-gifdec.Tpo -c -o gif2webp-gifdec.obj `if test -f 'gifdec.c'; then $(CYGPATH_W) 'gifdec.c'; else $(CYGPATH_W) '$(srcdir)/gifdec.c'; fi` - $(AM_V_at)$(am__mv) $(DEPDIR)/gif2webp-gifdec.Tpo $(DEPDIR)/gif2webp-gifdec.Po -# $(AM_V_CC)source='gifdec.c' object='gif2webp-gifdec.obj' libtool=no \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gif2webp_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o gif2webp-gifdec.obj `if test -f 'gifdec.c'; then $(CYGPATH_W) 'gifdec.c'; else $(CYGPATH_W) '$(srcdir)/gifdec.c'; fi` - -img2webp-img2webp.o: img2webp.c - $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(img2webp_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT img2webp-img2webp.o -MD -MP -MF $(DEPDIR)/img2webp-img2webp.Tpo -c -o img2webp-img2webp.o `test -f 'img2webp.c' || echo '$(srcdir)/'`img2webp.c - $(AM_V_at)$(am__mv) $(DEPDIR)/img2webp-img2webp.Tpo $(DEPDIR)/img2webp-img2webp.Po -# $(AM_V_CC)source='img2webp.c' object='img2webp-img2webp.o' libtool=no \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(img2webp_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o img2webp-img2webp.o `test -f 'img2webp.c' || echo '$(srcdir)/'`img2webp.c - -img2webp-img2webp.obj: img2webp.c - $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(img2webp_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT img2webp-img2webp.obj -MD -MP -MF $(DEPDIR)/img2webp-img2webp.Tpo -c -o img2webp-img2webp.obj `if test -f 'img2webp.c'; then $(CYGPATH_W) 'img2webp.c'; else $(CYGPATH_W) '$(srcdir)/img2webp.c'; fi` - $(AM_V_at)$(am__mv) $(DEPDIR)/img2webp-img2webp.Tpo $(DEPDIR)/img2webp-img2webp.Po -# $(AM_V_CC)source='img2webp.c' object='img2webp-img2webp.obj' libtool=no \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(img2webp_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o img2webp-img2webp.obj `if test -f 'img2webp.c'; then $(CYGPATH_W) 'img2webp.c'; else $(CYGPATH_W) '$(srcdir)/img2webp.c'; fi` - -vwebp-vwebp.o: vwebp.c - $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(vwebp_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT vwebp-vwebp.o -MD -MP -MF $(DEPDIR)/vwebp-vwebp.Tpo -c -o vwebp-vwebp.o `test -f 'vwebp.c' || echo '$(srcdir)/'`vwebp.c - $(AM_V_at)$(am__mv) $(DEPDIR)/vwebp-vwebp.Tpo $(DEPDIR)/vwebp-vwebp.Po -# $(AM_V_CC)source='vwebp.c' object='vwebp-vwebp.o' libtool=no \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(vwebp_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o vwebp-vwebp.o `test -f 'vwebp.c' || echo '$(srcdir)/'`vwebp.c - -vwebp-vwebp.obj: vwebp.c - $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(vwebp_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT vwebp-vwebp.obj -MD -MP -MF $(DEPDIR)/vwebp-vwebp.Tpo -c -o vwebp-vwebp.obj `if test -f 'vwebp.c'; then $(CYGPATH_W) 'vwebp.c'; else $(CYGPATH_W) '$(srcdir)/vwebp.c'; fi` - $(AM_V_at)$(am__mv) $(DEPDIR)/vwebp-vwebp.Tpo $(DEPDIR)/vwebp-vwebp.Po -# $(AM_V_CC)source='vwebp.c' object='vwebp-vwebp.obj' libtool=no \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(vwebp_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o vwebp-vwebp.obj `if test -f 'vwebp.c'; then $(CYGPATH_W) 'vwebp.c'; else $(CYGPATH_W) '$(srcdir)/vwebp.c'; fi` - -webpinfo-webpinfo.o: webpinfo.c - $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webpinfo_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT webpinfo-webpinfo.o -MD -MP -MF $(DEPDIR)/webpinfo-webpinfo.Tpo -c -o webpinfo-webpinfo.o `test -f 'webpinfo.c' || echo '$(srcdir)/'`webpinfo.c - $(AM_V_at)$(am__mv) $(DEPDIR)/webpinfo-webpinfo.Tpo $(DEPDIR)/webpinfo-webpinfo.Po -# $(AM_V_CC)source='webpinfo.c' object='webpinfo-webpinfo.o' libtool=no \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webpinfo_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o webpinfo-webpinfo.o `test -f 'webpinfo.c' || echo '$(srcdir)/'`webpinfo.c - -webpinfo-webpinfo.obj: webpinfo.c - $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webpinfo_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT webpinfo-webpinfo.obj -MD -MP -MF $(DEPDIR)/webpinfo-webpinfo.Tpo -c -o webpinfo-webpinfo.obj `if test -f 'webpinfo.c'; then $(CYGPATH_W) 'webpinfo.c'; else $(CYGPATH_W) '$(srcdir)/webpinfo.c'; fi` - $(AM_V_at)$(am__mv) $(DEPDIR)/webpinfo-webpinfo.Tpo $(DEPDIR)/webpinfo-webpinfo.Po -# $(AM_V_CC)source='webpinfo.c' object='webpinfo-webpinfo.obj' libtool=no \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webpinfo_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o webpinfo-webpinfo.obj `if test -f 'webpinfo.c'; then $(CYGPATH_W) 'webpinfo.c'; else $(CYGPATH_W) '$(srcdir)/webpinfo.c'; fi` - -webpmux-webpmux.o: webpmux.c - $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webpmux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT webpmux-webpmux.o -MD -MP -MF $(DEPDIR)/webpmux-webpmux.Tpo -c -o webpmux-webpmux.o `test -f 'webpmux.c' || echo '$(srcdir)/'`webpmux.c - $(AM_V_at)$(am__mv) $(DEPDIR)/webpmux-webpmux.Tpo $(DEPDIR)/webpmux-webpmux.Po -# $(AM_V_CC)source='webpmux.c' object='webpmux-webpmux.o' libtool=no \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webpmux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o webpmux-webpmux.o `test -f 'webpmux.c' || echo '$(srcdir)/'`webpmux.c - -webpmux-webpmux.obj: webpmux.c - $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webpmux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT webpmux-webpmux.obj -MD -MP -MF $(DEPDIR)/webpmux-webpmux.Tpo -c -o webpmux-webpmux.obj `if test -f 'webpmux.c'; then $(CYGPATH_W) 'webpmux.c'; else $(CYGPATH_W) '$(srcdir)/webpmux.c'; fi` - $(AM_V_at)$(am__mv) $(DEPDIR)/webpmux-webpmux.Tpo $(DEPDIR)/webpmux-webpmux.Po -# $(AM_V_CC)source='webpmux.c' object='webpmux-webpmux.obj' libtool=no \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webpmux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o webpmux-webpmux.obj `if test -f 'webpmux.c'; then $(CYGPATH_W) 'webpmux.c'; else $(CYGPATH_W) '$(srcdir)/webpmux.c'; fi` - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs - -ID: $(am__tagged_files) - $(am__define_uniq_tagged_files); mkid -fID $$unique -tags: tags-am -TAGS: tags - -tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) - set x; \ - here=`pwd`; \ - $(am__define_uniq_tagged_files); \ - shift; \ - if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ - test -n "$$unique" || unique=$$empty_fix; \ - if test $$# -gt 0; then \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - "$$@" $$unique; \ - else \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$unique; \ - fi; \ - fi -ctags: ctags-am - -CTAGS: ctags -ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) - $(am__define_uniq_tagged_files); \ - test -z "$(CTAGS_ARGS)$$unique" \ - || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$unique - -GTAGS: - here=`$(am__cd) $(top_builddir) && pwd` \ - && $(am__cd) $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) "$$here" -cscopelist: cscopelist-am - -cscopelist-am: $(am__tagged_files) - list='$(am__tagged_files)'; \ - case "$(srcdir)" in \ - [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ - *) sdir=$(subdir)/$(srcdir) ;; \ - esac; \ - for i in $$list; do \ - if test -f "$$i"; then \ - echo "$(subdir)/$$i"; \ - else \ - echo "$$sdir/$$i"; \ - fi; \ - done >> $(top_builddir)/cscope.files - -distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - -distdir: $(BUILT_SOURCES) - $(MAKE) $(AM_MAKEFLAGS) distdir-am - -distdir-am: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - list='$(DISTFILES)'; \ - dist_files=`for file in $$list; do echo $$file; done | \ - sed -e "s|^$$srcdirstrip/||;t" \ - -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ - case $$dist_files in \ - */*) $(MKDIR_P) `echo "$$dist_files" | \ - sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ - sort -u` ;; \ - esac; \ - for file in $$dist_files; do \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - if test -d $$d/$$file; then \ - dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test -d "$(distdir)/$$file"; then \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ - else \ - test -f "$(distdir)/$$file" \ - || cp -p $$d/$$file "$(distdir)/$$file" \ - || exit 1; \ - fi; \ - done -check-am: all-am -check: check-am -all-am: Makefile $(PROGRAMS) $(LTLIBRARIES) -installdirs: - for dir in "$(DESTDIR)$(bindir)"; do \ - test -z "$$dir" || $(MKDIR_P) "$$dir"; \ - done -install: install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-am -install-strip: - if test -z '$(STRIP)'; then \ - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - install; \ - else \ - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ - fi -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-am - -clean-am: clean-binPROGRAMS clean-generic clean-libtool \ - clean-noinstLTLIBRARIES clean-noinstPROGRAMS mostlyclean-am - -distclean: distclean-am - -rm -f ./$(DEPDIR)/anim_diff-anim_diff.Po - -rm -f ./$(DEPDIR)/anim_diff-anim_util.Po - -rm -f ./$(DEPDIR)/anim_diff-gifdec.Po - -rm -f ./$(DEPDIR)/anim_dump-anim_dump.Po - -rm -f ./$(DEPDIR)/anim_dump-anim_util.Po - -rm -f ./$(DEPDIR)/anim_dump-gifdec.Po - -rm -f ./$(DEPDIR)/cwebp-cwebp.Po - -rm -f ./$(DEPDIR)/dwebp-dwebp.Po - -rm -f ./$(DEPDIR)/example_util.Plo - -rm -f ./$(DEPDIR)/gif2webp-gif2webp.Po - -rm -f ./$(DEPDIR)/gif2webp-gifdec.Po - -rm -f ./$(DEPDIR)/img2webp-img2webp.Po - -rm -f ./$(DEPDIR)/vwebp-vwebp.Po - -rm -f ./$(DEPDIR)/webpinfo-webpinfo.Po - -rm -f ./$(DEPDIR)/webpmux-webpmux.Po - -rm -f Makefile -distclean-am: clean-am distclean-compile distclean-generic \ - distclean-tags - -dvi: dvi-am - -dvi-am: - -html: html-am - -html-am: - -info: info-am - -info-am: - -install-data-am: - -install-dvi: install-dvi-am - -install-dvi-am: - -install-exec-am: install-binPROGRAMS - -install-html: install-html-am - -install-html-am: - -install-info: install-info-am - -install-info-am: - -install-man: - -install-pdf: install-pdf-am - -install-pdf-am: - -install-ps: install-ps-am - -install-ps-am: - -installcheck-am: - -maintainer-clean: maintainer-clean-am - -rm -f ./$(DEPDIR)/anim_diff-anim_diff.Po - -rm -f ./$(DEPDIR)/anim_diff-anim_util.Po - -rm -f ./$(DEPDIR)/anim_diff-gifdec.Po - -rm -f ./$(DEPDIR)/anim_dump-anim_dump.Po - -rm -f ./$(DEPDIR)/anim_dump-anim_util.Po - -rm -f ./$(DEPDIR)/anim_dump-gifdec.Po - -rm -f ./$(DEPDIR)/cwebp-cwebp.Po - -rm -f ./$(DEPDIR)/dwebp-dwebp.Po - -rm -f ./$(DEPDIR)/example_util.Plo - -rm -f ./$(DEPDIR)/gif2webp-gif2webp.Po - -rm -f ./$(DEPDIR)/gif2webp-gifdec.Po - -rm -f ./$(DEPDIR)/img2webp-img2webp.Po - -rm -f ./$(DEPDIR)/vwebp-vwebp.Po - -rm -f ./$(DEPDIR)/webpinfo-webpinfo.Po - -rm -f ./$(DEPDIR)/webpmux-webpmux.Po - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-compile mostlyclean-generic \ - mostlyclean-libtool - -pdf: pdf-am - -pdf-am: - -ps: ps-am - -ps-am: - -uninstall-am: uninstall-binPROGRAMS - -.MAKE: install-am install-strip - -.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ - clean-binPROGRAMS clean-generic clean-libtool \ - clean-noinstLTLIBRARIES clean-noinstPROGRAMS cscopelist-am \ - ctags ctags-am distclean distclean-compile distclean-generic \ - distclean-libtool distclean-tags distdir dvi dvi-am html \ - html-am info info-am install install-am install-binPROGRAMS \ - install-data install-data-am install-dvi install-dvi-am \ - install-exec install-exec-am install-html install-html-am \ - install-info install-info-am install-man install-pdf \ - install-pdf-am install-ps install-ps-am install-strip \ - installcheck installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-compile \ - mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ - tags tags-am uninstall uninstall-am uninstall-binPROGRAMS - -.PRECIOUS: Makefile - - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/Extended/libwebp/examples/Makefile.am b/Extended/libwebp/examples/Makefile.am deleted file mode 100644 index 8d52589..0000000 --- a/Extended/libwebp/examples/Makefile.am +++ /dev/null @@ -1,119 +0,0 @@ -AM_CPPFLAGS += -I$(top_builddir)/src -I$(top_srcdir)/src - -bin_PROGRAMS = -if BUILD_DEMUX - bin_PROGRAMS += dwebp cwebp -endif -if BUILD_ANIMDIFF - noinst_PROGRAMS = anim_diff anim_dump -endif -if BUILD_GIF2WEBP - bin_PROGRAMS += gif2webp -endif -if BUILD_IMG2WEBP - bin_PROGRAMS += img2webp -endif -if BUILD_MUX - bin_PROGRAMS += webpmux -endif -if BUILD_VWEBP - bin_PROGRAMS += vwebp -endif -if BUILD_WEBPINFO - bin_PROGRAMS += webpinfo -endif - -noinst_LTLIBRARIES = libexample_util.la - -libexample_util_la_SOURCES = example_util.c example_util.h -libexample_util_la_LIBADD = ../src/libwebp.la - -anim_diff_SOURCES = anim_diff.c anim_util.c anim_util.h gifdec.c gifdec.h -anim_diff_CPPFLAGS = $(AM_CPPFLAGS) $(GIF_INCLUDES) -anim_diff_LDADD = -anim_diff_LDADD += ../src/demux/libwebpdemux.la -anim_diff_LDADD += libexample_util.la -anim_diff_LDADD += ../imageio/libimageio_util.la -anim_diff_LDADD += $(GIF_LIBS) -lm - -anim_dump_SOURCES = anim_dump.c anim_util.c anim_util.h gifdec.c gifdec.h -anim_dump_CPPFLAGS = $(AM_CPPFLAGS) $(PNG_INCLUDES) -anim_dump_CPPFLAGS += $(GIF_INCLUDES) -anim_dump_LDADD = -anim_dump_LDADD += ../src/demux/libwebpdemux.la -anim_dump_LDADD += libexample_util.la -anim_dump_LDADD += ../imageio/libimageio_util.la -anim_dump_LDADD += ../imageio/libimageenc.la -anim_dump_LDADD += $(PNG_LIBS) $(GIF_LIBS) $(TIFF_LIBS) -lm - -cwebp_SOURCES = cwebp.c stopwatch.h -cwebp_CPPFLAGS = $(AM_CPPFLAGS) -cwebp_LDADD = -cwebp_LDADD += libexample_util.la -cwebp_LDADD += ../imageio/libimageio_util.la -cwebp_LDADD += ../imageio/libimagedec.la -cwebp_LDADD += ../src/libwebp.la -cwebp_LDADD += $(JPEG_LIBS) $(PNG_LIBS) $(TIFF_LIBS) - -dwebp_SOURCES = dwebp.c stopwatch.h -dwebp_CPPFLAGS = $(AM_CPPFLAGS) -dwebp_CPPFLAGS += $(JPEG_INCLUDES) $(PNG_INCLUDES) -dwebp_LDADD = -dwebp_LDADD += libexample_util.la -dwebp_LDADD += ../imageio/libimagedec.la -dwebp_LDADD += ../imageio/libimageenc.la -dwebp_LDADD += ../imageio/libimageio_util.la -dwebp_LDADD += ../src/libwebp.la -dwebp_LDADD +=$(PNG_LIBS) $(JPEG_LIBS) - -gif2webp_SOURCES = gif2webp.c gifdec.c gifdec.h -gif2webp_CPPFLAGS = $(AM_CPPFLAGS) $(GIF_INCLUDES) -gif2webp_LDADD = -gif2webp_LDADD += libexample_util.la -gif2webp_LDADD += ../imageio/libimageio_util.la -gif2webp_LDADD += ../src/mux/libwebpmux.la -gif2webp_LDADD += ../src/libwebp.la -gif2webp_LDADD += $(GIF_LIBS) - -vwebp_SOURCES = vwebp.c -vwebp_CPPFLAGS = $(AM_CPPFLAGS) $(GL_INCLUDES) -vwebp_LDADD = -vwebp_LDADD += libexample_util.la -vwebp_LDADD += ../imageio/libimageio_util.la -vwebp_LDADD += ../src/demux/libwebpdemux.la -vwebp_LDADD += $(GL_LIBS) - -webpmux_SOURCES = webpmux.c -webpmux_CPPFLAGS = $(AM_CPPFLAGS) -webpmux_LDADD = -webpmux_LDADD += libexample_util.la -webpmux_LDADD += ../imageio/libimageio_util.la -webpmux_LDADD += ../src/mux/libwebpmux.la -webpmux_LDADD += ../src/libwebp.la - -img2webp_SOURCES = img2webp.c -img2webp_CPPFLAGS = $(AM_CPPFLAGS) -img2webp_LDADD = -img2webp_LDADD += libexample_util.la -img2webp_LDADD += ../imageio/libimageio_util.la -img2webp_LDADD += ../imageio/libimagedec.la -img2webp_LDADD += ../src/mux/libwebpmux.la -img2webp_LDADD += ../src/libwebp.la -img2webp_LDADD += $(PNG_LIBS) $(JPEG_LIBS) $(TIFF_LIBS) - -webpinfo_SOURCES = webpinfo.c -webpinfo_CPPFLAGS = $(AM_CPPFLAGS) -webpinfo_LDADD = -webpinfo_LDADD += libexample_util.la -webpinfo_LDADD += ../imageio/libimageio_util.la -webpinfo_LDADD += ../src/libwebp.la - -if BUILD_LIBWEBPDECODER - anim_diff_LDADD += ../src/libwebpdecoder.la - anim_dump_LDADD += ../src/libwebpdecoder.la - vwebp_LDADD += ../src/libwebpdecoder.la -else - anim_diff_LDADD += ../src/libwebp.la - anim_dump_LDADD += ../src/libwebp.la - vwebp_LDADD += ../src/libwebp.la -endif diff --git a/Extended/libwebp/examples/Makefile.in b/Extended/libwebp/examples/Makefile.in deleted file mode 100644 index 987a957..0000000 --- a/Extended/libwebp/examples/Makefile.in +++ /dev/null @@ -1,1096 +0,0 @@ -# Makefile.in generated by automake 1.16.1 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994-2018 Free Software Foundation, Inc. - -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -@SET_MAKE@ - - -VPATH = @srcdir@ -am__is_gnu_make = { \ - if test -z '$(MAKELEVEL)'; then \ - false; \ - elif test -n '$(MAKE_HOST)'; then \ - true; \ - elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ - true; \ - else \ - false; \ - fi; \ -} -am__make_running_with_option = \ - case $${target_option-} in \ - ?) ;; \ - *) echo "am__make_running_with_option: internal error: invalid" \ - "target option '$${target_option-}' specified" >&2; \ - exit 1;; \ - esac; \ - has_opt=no; \ - sane_makeflags=$$MAKEFLAGS; \ - if $(am__is_gnu_make); then \ - sane_makeflags=$$MFLAGS; \ - else \ - case $$MAKEFLAGS in \ - *\\[\ \ ]*) \ - bs=\\; \ - sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ - | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ - esac; \ - fi; \ - skip_next=no; \ - strip_trailopt () \ - { \ - flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ - }; \ - for flg in $$sane_makeflags; do \ - test $$skip_next = yes && { skip_next=no; continue; }; \ - case $$flg in \ - *=*|--*) continue;; \ - -*I) strip_trailopt 'I'; skip_next=yes;; \ - -*I?*) strip_trailopt 'I';; \ - -*O) strip_trailopt 'O'; skip_next=yes;; \ - -*O?*) strip_trailopt 'O';; \ - -*l) strip_trailopt 'l'; skip_next=yes;; \ - -*l?*) strip_trailopt 'l';; \ - -[dEDm]) skip_next=yes;; \ - -[JT]) skip_next=yes;; \ - esac; \ - case $$flg in \ - *$$target_option*) has_opt=yes; break;; \ - esac; \ - done; \ - test $$has_opt = yes -am__make_dryrun = (target_option=n; $(am__make_running_with_option)) -am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) -pkgdatadir = $(datadir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkglibexecdir = $(libexecdir)/@PACKAGE@ -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = @build@ -host_triplet = @host@ -bin_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2) $(am__EXEEXT_3) \ - $(am__EXEEXT_4) $(am__EXEEXT_5) $(am__EXEEXT_6) -@BUILD_DEMUX_TRUE@am__append_1 = dwebp cwebp -@BUILD_ANIMDIFF_TRUE@noinst_PROGRAMS = anim_diff$(EXEEXT) \ -@BUILD_ANIMDIFF_TRUE@ anim_dump$(EXEEXT) -@BUILD_GIF2WEBP_TRUE@am__append_2 = gif2webp -@BUILD_IMG2WEBP_TRUE@am__append_3 = img2webp -@BUILD_MUX_TRUE@am__append_4 = webpmux -@BUILD_VWEBP_TRUE@am__append_5 = vwebp -@BUILD_WEBPINFO_TRUE@am__append_6 = webpinfo -@BUILD_LIBWEBPDECODER_TRUE@am__append_7 = ../src/libwebpdecoder.la -@BUILD_LIBWEBPDECODER_TRUE@am__append_8 = ../src/libwebpdecoder.la -@BUILD_LIBWEBPDECODER_TRUE@am__append_9 = ../src/libwebpdecoder.la -@BUILD_LIBWEBPDECODER_FALSE@am__append_10 = ../src/libwebp.la -@BUILD_LIBWEBPDECODER_FALSE@am__append_11 = ../src/libwebp.la -@BUILD_LIBWEBPDECODER_FALSE@am__append_12 = ../src/libwebp.la -subdir = examples -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pthread.m4 \ - $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ - $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ - $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = $(top_builddir)/src/webp/config.h -CONFIG_CLEAN_FILES = -CONFIG_CLEAN_VPATH_FILES = -@BUILD_DEMUX_TRUE@am__EXEEXT_1 = dwebp$(EXEEXT) cwebp$(EXEEXT) -@BUILD_GIF2WEBP_TRUE@am__EXEEXT_2 = gif2webp$(EXEEXT) -@BUILD_IMG2WEBP_TRUE@am__EXEEXT_3 = img2webp$(EXEEXT) -@BUILD_MUX_TRUE@am__EXEEXT_4 = webpmux$(EXEEXT) -@BUILD_VWEBP_TRUE@am__EXEEXT_5 = vwebp$(EXEEXT) -@BUILD_WEBPINFO_TRUE@am__EXEEXT_6 = webpinfo$(EXEEXT) -am__installdirs = "$(DESTDIR)$(bindir)" -PROGRAMS = $(bin_PROGRAMS) $(noinst_PROGRAMS) -LTLIBRARIES = $(noinst_LTLIBRARIES) -libexample_util_la_DEPENDENCIES = ../src/libwebp.la -am_libexample_util_la_OBJECTS = example_util.lo -libexample_util_la_OBJECTS = $(am_libexample_util_la_OBJECTS) -AM_V_lt = $(am__v_lt_@AM_V@) -am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) -am__v_lt_0 = --silent -am__v_lt_1 = -am_anim_diff_OBJECTS = anim_diff-anim_diff.$(OBJEXT) \ - anim_diff-anim_util.$(OBJEXT) anim_diff-gifdec.$(OBJEXT) -anim_diff_OBJECTS = $(am_anim_diff_OBJECTS) -am__DEPENDENCIES_1 = -anim_diff_DEPENDENCIES = ../src/demux/libwebpdemux.la \ - libexample_util.la ../imageio/libimageio_util.la \ - $(am__DEPENDENCIES_1) $(am__append_7) $(am__append_10) -am_anim_dump_OBJECTS = anim_dump-anim_dump.$(OBJEXT) \ - anim_dump-anim_util.$(OBJEXT) anim_dump-gifdec.$(OBJEXT) -anim_dump_OBJECTS = $(am_anim_dump_OBJECTS) -anim_dump_DEPENDENCIES = ../src/demux/libwebpdemux.la \ - libexample_util.la ../imageio/libimageio_util.la \ - ../imageio/libimageenc.la $(am__DEPENDENCIES_1) \ - $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) $(am__append_8) \ - $(am__append_11) -am_cwebp_OBJECTS = cwebp-cwebp.$(OBJEXT) -cwebp_OBJECTS = $(am_cwebp_OBJECTS) -cwebp_DEPENDENCIES = libexample_util.la ../imageio/libimageio_util.la \ - ../imageio/libimagedec.la ../src/libwebp.la \ - $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ - $(am__DEPENDENCIES_1) -am_dwebp_OBJECTS = dwebp-dwebp.$(OBJEXT) -dwebp_OBJECTS = $(am_dwebp_OBJECTS) -dwebp_DEPENDENCIES = libexample_util.la ../imageio/libimagedec.la \ - ../imageio/libimageenc.la ../imageio/libimageio_util.la \ - ../src/libwebp.la $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) -am_gif2webp_OBJECTS = gif2webp-gif2webp.$(OBJEXT) \ - gif2webp-gifdec.$(OBJEXT) -gif2webp_OBJECTS = $(am_gif2webp_OBJECTS) -gif2webp_DEPENDENCIES = libexample_util.la \ - ../imageio/libimageio_util.la ../src/mux/libwebpmux.la \ - ../src/libwebp.la $(am__DEPENDENCIES_1) -am_img2webp_OBJECTS = img2webp-img2webp.$(OBJEXT) -img2webp_OBJECTS = $(am_img2webp_OBJECTS) -img2webp_DEPENDENCIES = libexample_util.la \ - ../imageio/libimageio_util.la ../imageio/libimagedec.la \ - ../src/mux/libwebpmux.la ../src/libwebp.la \ - $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ - $(am__DEPENDENCIES_1) -am_vwebp_OBJECTS = vwebp-vwebp.$(OBJEXT) -vwebp_OBJECTS = $(am_vwebp_OBJECTS) -vwebp_DEPENDENCIES = libexample_util.la ../imageio/libimageio_util.la \ - ../src/demux/libwebpdemux.la $(am__DEPENDENCIES_1) \ - $(am__append_9) $(am__append_12) -am_webpinfo_OBJECTS = webpinfo-webpinfo.$(OBJEXT) -webpinfo_OBJECTS = $(am_webpinfo_OBJECTS) -webpinfo_DEPENDENCIES = libexample_util.la \ - ../imageio/libimageio_util.la ../src/libwebp.la -am_webpmux_OBJECTS = webpmux-webpmux.$(OBJEXT) -webpmux_OBJECTS = $(am_webpmux_OBJECTS) -webpmux_DEPENDENCIES = libexample_util.la \ - ../imageio/libimageio_util.la ../src/mux/libwebpmux.la \ - ../src/libwebp.la -AM_V_P = $(am__v_P_@AM_V@) -am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) -am__v_P_0 = false -am__v_P_1 = : -AM_V_GEN = $(am__v_GEN_@AM_V@) -am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) -am__v_GEN_0 = @echo " GEN " $@; -am__v_GEN_1 = -AM_V_at = $(am__v_at_@AM_V@) -am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) -am__v_at_0 = @ -am__v_at_1 = -DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/src/webp -depcomp = $(SHELL) $(top_srcdir)/depcomp -am__maybe_remake_depfiles = depfiles -am__depfiles_remade = ./$(DEPDIR)/anim_diff-anim_diff.Po \ - ./$(DEPDIR)/anim_diff-anim_util.Po \ - ./$(DEPDIR)/anim_diff-gifdec.Po \ - ./$(DEPDIR)/anim_dump-anim_dump.Po \ - ./$(DEPDIR)/anim_dump-anim_util.Po \ - ./$(DEPDIR)/anim_dump-gifdec.Po ./$(DEPDIR)/cwebp-cwebp.Po \ - ./$(DEPDIR)/dwebp-dwebp.Po ./$(DEPDIR)/example_util.Plo \ - ./$(DEPDIR)/gif2webp-gif2webp.Po \ - ./$(DEPDIR)/gif2webp-gifdec.Po \ - ./$(DEPDIR)/img2webp-img2webp.Po ./$(DEPDIR)/vwebp-vwebp.Po \ - ./$(DEPDIR)/webpinfo-webpinfo.Po \ - ./$(DEPDIR)/webpmux-webpmux.Po -am__mv = mv -f -COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ - $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CFLAGS) $(CFLAGS) -AM_V_CC = $(am__v_CC_@AM_V@) -am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) -am__v_CC_0 = @echo " CC " $@; -am__v_CC_1 = -CCLD = $(CC) -LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ - $(AM_LDFLAGS) $(LDFLAGS) -o $@ -AM_V_CCLD = $(am__v_CCLD_@AM_V@) -am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) -am__v_CCLD_0 = @echo " CCLD " $@; -am__v_CCLD_1 = -SOURCES = $(libexample_util_la_SOURCES) $(anim_diff_SOURCES) \ - $(anim_dump_SOURCES) $(cwebp_SOURCES) $(dwebp_SOURCES) \ - $(gif2webp_SOURCES) $(img2webp_SOURCES) $(vwebp_SOURCES) \ - $(webpinfo_SOURCES) $(webpmux_SOURCES) -DIST_SOURCES = $(libexample_util_la_SOURCES) $(anim_diff_SOURCES) \ - $(anim_dump_SOURCES) $(cwebp_SOURCES) $(dwebp_SOURCES) \ - $(gif2webp_SOURCES) $(img2webp_SOURCES) $(vwebp_SOURCES) \ - $(webpinfo_SOURCES) $(webpmux_SOURCES) -am__can_run_installinfo = \ - case $$AM_UPDATE_INFO_DIR in \ - n|no|NO) false;; \ - *) (install-info --version) >/dev/null 2>&1;; \ - esac -am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) -# Read a list of newline-separated strings from the standard input, -# and print each of them once, without duplicates. Input order is -# *not* preserved. -am__uniquify_input = $(AWK) '\ - BEGIN { nonempty = 0; } \ - { items[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in items) print i; }; } \ -' -# Make sure the list of sources is unique. This is necessary because, -# e.g., the same source file might be shared among _SOURCES variables -# for different programs/libraries. -am__define_uniq_tagged_files = \ - list='$(am__tagged_files)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | $(am__uniquify_input)` -ETAGS = etags -CTAGS = ctags -am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = @ACLOCAL@ -AMTAR = @AMTAR@ -AM_CFLAGS = @AM_CFLAGS@ -AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_builddir)/src -I$(top_srcdir)/src -AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ -AR = @AR@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -CC = @CC@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -DLLTOOL = @DLLTOOL@ -DSYMUTIL = @DSYMUTIL@ -DUMPBIN = @DUMPBIN@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -FGREP = @FGREP@ -GIF_INCLUDES = @GIF_INCLUDES@ -GIF_LIBS = @GIF_LIBS@ -GL_INCLUDES = @GL_INCLUDES@ -GL_LIBS = @GL_LIBS@ -GREP = @GREP@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -JPEG_INCLUDES = @JPEG_INCLUDES@ -JPEG_LIBS = @JPEG_LIBS@ -LD = @LD@ -LDFLAGS = @LDFLAGS@ -LIBOBJS = @LIBOBJS@ -LIBPNG_CONFIG = @LIBPNG_CONFIG@ -LIBS = @LIBS@ -LIBSDL_CONFIG = @LIBSDL_CONFIG@ -LIBTOOL = @LIBTOOL@ -LIPO = @LIPO@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ -MAKEINFO = @MAKEINFO@ -MANIFEST_TOOL = @MANIFEST_TOOL@ -MKDIR_P = @MKDIR_P@ -NEON_FLAGS = @NEON_FLAGS@ -NM = @NM@ -NMEDIT = @NMEDIT@ -OBJDUMP = @OBJDUMP@ -OBJEXT = @OBJEXT@ -OTOOL = @OTOOL@ -OTOOL64 = @OTOOL64@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_URL = @PACKAGE_URL@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -PNG_INCLUDES = @PNG_INCLUDES@ -PNG_LIBS = @PNG_LIBS@ -PTHREAD_CC = @PTHREAD_CC@ -PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ -PTHREAD_LIBS = @PTHREAD_LIBS@ -RANLIB = @RANLIB@ -SDL_INCLUDES = @SDL_INCLUDES@ -SDL_LIBS = @SDL_LIBS@ -SED = @SED@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -SSE2_FLAGS = @SSE2_FLAGS@ -SSE41_FLAGS = @SSE41_FLAGS@ -STRIP = @STRIP@ -TIFF_INCLUDES = @TIFF_INCLUDES@ -TIFF_LIBS = @TIFF_LIBS@ -USE_SWAP_16BIT_CSP = @USE_SWAP_16BIT_CSP@ -VERSION = @VERSION@ -abs_builddir = @abs_builddir@ -abs_srcdir = @abs_srcdir@ -abs_top_builddir = @abs_top_builddir@ -abs_top_srcdir = @abs_top_srcdir@ -ac_ct_AR = @ac_ct_AR@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ -am__include = @am__include@ -am__leading_dot = @am__leading_dot@ -am__quote = @am__quote@ -am__tar = @am__tar@ -am__untar = @am__untar@ -ax_pthread_config = @ax_pthread_config@ -bindir = @bindir@ -build = @build@ -build_alias = @build_alias@ -build_cpu = @build_cpu@ -build_os = @build_os@ -build_vendor = @build_vendor@ -builddir = @builddir@ -datadir = @datadir@ -datarootdir = @datarootdir@ -docdir = @docdir@ -dvidir = @dvidir@ -exec_prefix = @exec_prefix@ -host = @host@ -host_alias = @host_alias@ -host_cpu = @host_cpu@ -host_os = @host_os@ -host_vendor = @host_vendor@ -htmldir = @htmldir@ -includedir = @includedir@ -infodir = @infodir@ -install_sh = @install_sh@ -libdir = @libdir@ -libexecdir = @libexecdir@ -localedir = @localedir@ -localstatedir = @localstatedir@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -oldincludedir = @oldincludedir@ -pdfdir = @pdfdir@ -pkgconfigdir = @pkgconfigdir@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -psdir = @psdir@ -runstatedir = @runstatedir@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -srcdir = @srcdir@ -sysconfdir = @sysconfdir@ -target_alias = @target_alias@ -top_build_prefix = @top_build_prefix@ -top_builddir = @top_builddir@ -top_srcdir = @top_srcdir@ -noinst_LTLIBRARIES = libexample_util.la -libexample_util_la_SOURCES = example_util.c example_util.h -libexample_util_la_LIBADD = ../src/libwebp.la -anim_diff_SOURCES = anim_diff.c anim_util.c anim_util.h gifdec.c gifdec.h -anim_diff_CPPFLAGS = $(AM_CPPFLAGS) $(GIF_INCLUDES) -anim_diff_LDADD = ../src/demux/libwebpdemux.la libexample_util.la \ - ../imageio/libimageio_util.la $(GIF_LIBS) -lm $(am__append_7) \ - $(am__append_10) -anim_dump_SOURCES = anim_dump.c anim_util.c anim_util.h gifdec.c gifdec.h -anim_dump_CPPFLAGS = $(AM_CPPFLAGS) $(PNG_INCLUDES) $(GIF_INCLUDES) -anim_dump_LDADD = ../src/demux/libwebpdemux.la libexample_util.la \ - ../imageio/libimageio_util.la ../imageio/libimageenc.la \ - $(PNG_LIBS) $(GIF_LIBS) $(TIFF_LIBS) -lm $(am__append_8) \ - $(am__append_11) -cwebp_SOURCES = cwebp.c stopwatch.h -cwebp_CPPFLAGS = $(AM_CPPFLAGS) -cwebp_LDADD = libexample_util.la ../imageio/libimageio_util.la \ - ../imageio/libimagedec.la ../src/libwebp.la $(JPEG_LIBS) \ - $(PNG_LIBS) $(TIFF_LIBS) -dwebp_SOURCES = dwebp.c stopwatch.h -dwebp_CPPFLAGS = $(AM_CPPFLAGS) $(JPEG_INCLUDES) $(PNG_INCLUDES) -dwebp_LDADD = libexample_util.la ../imageio/libimagedec.la \ - ../imageio/libimageenc.la ../imageio/libimageio_util.la \ - ../src/libwebp.la $(PNG_LIBS) $(JPEG_LIBS) -gif2webp_SOURCES = gif2webp.c gifdec.c gifdec.h -gif2webp_CPPFLAGS = $(AM_CPPFLAGS) $(GIF_INCLUDES) -gif2webp_LDADD = libexample_util.la ../imageio/libimageio_util.la \ - ../src/mux/libwebpmux.la ../src/libwebp.la $(GIF_LIBS) -vwebp_SOURCES = vwebp.c -vwebp_CPPFLAGS = $(AM_CPPFLAGS) $(GL_INCLUDES) -vwebp_LDADD = libexample_util.la ../imageio/libimageio_util.la \ - ../src/demux/libwebpdemux.la $(GL_LIBS) $(am__append_9) \ - $(am__append_12) -webpmux_SOURCES = webpmux.c -webpmux_CPPFLAGS = $(AM_CPPFLAGS) -webpmux_LDADD = libexample_util.la ../imageio/libimageio_util.la \ - ../src/mux/libwebpmux.la ../src/libwebp.la -img2webp_SOURCES = img2webp.c -img2webp_CPPFLAGS = $(AM_CPPFLAGS) -img2webp_LDADD = libexample_util.la ../imageio/libimageio_util.la \ - ../imageio/libimagedec.la ../src/mux/libwebpmux.la \ - ../src/libwebp.la $(PNG_LIBS) $(JPEG_LIBS) $(TIFF_LIBS) -webpinfo_SOURCES = webpinfo.c -webpinfo_CPPFLAGS = $(AM_CPPFLAGS) -webpinfo_LDADD = libexample_util.la ../imageio/libimageio_util.la \ - ../src/libwebp.la -all: all-am - -.SUFFIXES: -.SUFFIXES: .c .lo .o .obj -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ - && { if test -f $@; then exit 0; else break; fi; }; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign examples/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --foreign examples/Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(am__aclocal_m4_deps): -install-binPROGRAMS: $(bin_PROGRAMS) - @$(NORMAL_INSTALL) - @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ - if test -n "$$list"; then \ - echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ - $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ - fi; \ - for p in $$list; do echo "$$p $$p"; done | \ - sed 's/$(EXEEXT)$$//' | \ - while read p p1; do if test -f $$p \ - || test -f $$p1 \ - ; then echo "$$p"; echo "$$p"; else :; fi; \ - done | \ - sed -e 'p;s,.*/,,;n;h' \ - -e 's|.*|.|' \ - -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ - sed 'N;N;N;s,\n, ,g' | \ - $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ - { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ - if ($$2 == $$4) files[d] = files[d] " " $$1; \ - else { print "f", $$3 "/" $$4, $$1; } } \ - END { for (d in files) print "f", d, files[d] }' | \ - while read type dir files; do \ - if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ - test -z "$$files" || { \ - echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ - $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ - } \ - ; done - -uninstall-binPROGRAMS: - @$(NORMAL_UNINSTALL) - @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ - files=`for p in $$list; do echo "$$p"; done | \ - sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ - -e 's/$$/$(EXEEXT)/' \ - `; \ - test -n "$$list" || exit 0; \ - echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ - cd "$(DESTDIR)$(bindir)" && rm -f $$files - -clean-binPROGRAMS: - @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ - echo " rm -f" $$list; \ - rm -f $$list || exit $$?; \ - test -n "$(EXEEXT)" || exit 0; \ - list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ - echo " rm -f" $$list; \ - rm -f $$list - -clean-noinstPROGRAMS: - @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ - echo " rm -f" $$list; \ - rm -f $$list || exit $$?; \ - test -n "$(EXEEXT)" || exit 0; \ - list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ - echo " rm -f" $$list; \ - rm -f $$list - -clean-noinstLTLIBRARIES: - -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) - @list='$(noinst_LTLIBRARIES)'; \ - locs=`for p in $$list; do echo $$p; done | \ - sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ - sort -u`; \ - test -z "$$locs" || { \ - echo rm -f $${locs}; \ - rm -f $${locs}; \ - } - -libexample_util.la: $(libexample_util_la_OBJECTS) $(libexample_util_la_DEPENDENCIES) $(EXTRA_libexample_util_la_DEPENDENCIES) - $(AM_V_CCLD)$(LINK) $(libexample_util_la_OBJECTS) $(libexample_util_la_LIBADD) $(LIBS) - -anim_diff$(EXEEXT): $(anim_diff_OBJECTS) $(anim_diff_DEPENDENCIES) $(EXTRA_anim_diff_DEPENDENCIES) - @rm -f anim_diff$(EXEEXT) - $(AM_V_CCLD)$(LINK) $(anim_diff_OBJECTS) $(anim_diff_LDADD) $(LIBS) - -anim_dump$(EXEEXT): $(anim_dump_OBJECTS) $(anim_dump_DEPENDENCIES) $(EXTRA_anim_dump_DEPENDENCIES) - @rm -f anim_dump$(EXEEXT) - $(AM_V_CCLD)$(LINK) $(anim_dump_OBJECTS) $(anim_dump_LDADD) $(LIBS) - -cwebp$(EXEEXT): $(cwebp_OBJECTS) $(cwebp_DEPENDENCIES) $(EXTRA_cwebp_DEPENDENCIES) - @rm -f cwebp$(EXEEXT) - $(AM_V_CCLD)$(LINK) $(cwebp_OBJECTS) $(cwebp_LDADD) $(LIBS) - -dwebp$(EXEEXT): $(dwebp_OBJECTS) $(dwebp_DEPENDENCIES) $(EXTRA_dwebp_DEPENDENCIES) - @rm -f dwebp$(EXEEXT) - $(AM_V_CCLD)$(LINK) $(dwebp_OBJECTS) $(dwebp_LDADD) $(LIBS) - -gif2webp$(EXEEXT): $(gif2webp_OBJECTS) $(gif2webp_DEPENDENCIES) $(EXTRA_gif2webp_DEPENDENCIES) - @rm -f gif2webp$(EXEEXT) - $(AM_V_CCLD)$(LINK) $(gif2webp_OBJECTS) $(gif2webp_LDADD) $(LIBS) - -img2webp$(EXEEXT): $(img2webp_OBJECTS) $(img2webp_DEPENDENCIES) $(EXTRA_img2webp_DEPENDENCIES) - @rm -f img2webp$(EXEEXT) - $(AM_V_CCLD)$(LINK) $(img2webp_OBJECTS) $(img2webp_LDADD) $(LIBS) - -vwebp$(EXEEXT): $(vwebp_OBJECTS) $(vwebp_DEPENDENCIES) $(EXTRA_vwebp_DEPENDENCIES) - @rm -f vwebp$(EXEEXT) - $(AM_V_CCLD)$(LINK) $(vwebp_OBJECTS) $(vwebp_LDADD) $(LIBS) - -webpinfo$(EXEEXT): $(webpinfo_OBJECTS) $(webpinfo_DEPENDENCIES) $(EXTRA_webpinfo_DEPENDENCIES) - @rm -f webpinfo$(EXEEXT) - $(AM_V_CCLD)$(LINK) $(webpinfo_OBJECTS) $(webpinfo_LDADD) $(LIBS) - -webpmux$(EXEEXT): $(webpmux_OBJECTS) $(webpmux_DEPENDENCIES) $(EXTRA_webpmux_DEPENDENCIES) - @rm -f webpmux$(EXEEXT) - $(AM_V_CCLD)$(LINK) $(webpmux_OBJECTS) $(webpmux_LDADD) $(LIBS) - -mostlyclean-compile: - -rm -f *.$(OBJEXT) - -distclean-compile: - -rm -f *.tab.c - -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/anim_diff-anim_diff.Po@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/anim_diff-anim_util.Po@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/anim_diff-gifdec.Po@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/anim_dump-anim_dump.Po@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/anim_dump-anim_util.Po@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/anim_dump-gifdec.Po@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cwebp-cwebp.Po@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwebp-dwebp.Po@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/example_util.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gif2webp-gif2webp.Po@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gif2webp-gifdec.Po@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/img2webp-img2webp.Po@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vwebp-vwebp.Po@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webpinfo-webpinfo.Po@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webpmux-webpmux.Po@am__quote@ # am--include-marker - -$(am__depfiles_remade): - @$(MKDIR_P) $(@D) - @echo '# dummy' >$@-t && $(am__mv) $@-t $@ - -am--depfiles: $(am__depfiles_remade) - -.c.o: -@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ -@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ -@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< - -.c.obj: -@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ -@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ -@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` - -.c.lo: -@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ -@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ -@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< - -anim_diff-anim_diff.o: anim_diff.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(anim_diff_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT anim_diff-anim_diff.o -MD -MP -MF $(DEPDIR)/anim_diff-anim_diff.Tpo -c -o anim_diff-anim_diff.o `test -f 'anim_diff.c' || echo '$(srcdir)/'`anim_diff.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/anim_diff-anim_diff.Tpo $(DEPDIR)/anim_diff-anim_diff.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='anim_diff.c' object='anim_diff-anim_diff.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(anim_diff_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o anim_diff-anim_diff.o `test -f 'anim_diff.c' || echo '$(srcdir)/'`anim_diff.c - -anim_diff-anim_diff.obj: anim_diff.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(anim_diff_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT anim_diff-anim_diff.obj -MD -MP -MF $(DEPDIR)/anim_diff-anim_diff.Tpo -c -o anim_diff-anim_diff.obj `if test -f 'anim_diff.c'; then $(CYGPATH_W) 'anim_diff.c'; else $(CYGPATH_W) '$(srcdir)/anim_diff.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/anim_diff-anim_diff.Tpo $(DEPDIR)/anim_diff-anim_diff.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='anim_diff.c' object='anim_diff-anim_diff.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(anim_diff_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o anim_diff-anim_diff.obj `if test -f 'anim_diff.c'; then $(CYGPATH_W) 'anim_diff.c'; else $(CYGPATH_W) '$(srcdir)/anim_diff.c'; fi` - -anim_diff-anim_util.o: anim_util.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(anim_diff_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT anim_diff-anim_util.o -MD -MP -MF $(DEPDIR)/anim_diff-anim_util.Tpo -c -o anim_diff-anim_util.o `test -f 'anim_util.c' || echo '$(srcdir)/'`anim_util.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/anim_diff-anim_util.Tpo $(DEPDIR)/anim_diff-anim_util.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='anim_util.c' object='anim_diff-anim_util.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(anim_diff_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o anim_diff-anim_util.o `test -f 'anim_util.c' || echo '$(srcdir)/'`anim_util.c - -anim_diff-anim_util.obj: anim_util.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(anim_diff_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT anim_diff-anim_util.obj -MD -MP -MF $(DEPDIR)/anim_diff-anim_util.Tpo -c -o anim_diff-anim_util.obj `if test -f 'anim_util.c'; then $(CYGPATH_W) 'anim_util.c'; else $(CYGPATH_W) '$(srcdir)/anim_util.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/anim_diff-anim_util.Tpo $(DEPDIR)/anim_diff-anim_util.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='anim_util.c' object='anim_diff-anim_util.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(anim_diff_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o anim_diff-anim_util.obj `if test -f 'anim_util.c'; then $(CYGPATH_W) 'anim_util.c'; else $(CYGPATH_W) '$(srcdir)/anim_util.c'; fi` - -anim_diff-gifdec.o: gifdec.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(anim_diff_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT anim_diff-gifdec.o -MD -MP -MF $(DEPDIR)/anim_diff-gifdec.Tpo -c -o anim_diff-gifdec.o `test -f 'gifdec.c' || echo '$(srcdir)/'`gifdec.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/anim_diff-gifdec.Tpo $(DEPDIR)/anim_diff-gifdec.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gifdec.c' object='anim_diff-gifdec.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(anim_diff_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o anim_diff-gifdec.o `test -f 'gifdec.c' || echo '$(srcdir)/'`gifdec.c - -anim_diff-gifdec.obj: gifdec.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(anim_diff_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT anim_diff-gifdec.obj -MD -MP -MF $(DEPDIR)/anim_diff-gifdec.Tpo -c -o anim_diff-gifdec.obj `if test -f 'gifdec.c'; then $(CYGPATH_W) 'gifdec.c'; else $(CYGPATH_W) '$(srcdir)/gifdec.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/anim_diff-gifdec.Tpo $(DEPDIR)/anim_diff-gifdec.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gifdec.c' object='anim_diff-gifdec.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(anim_diff_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o anim_diff-gifdec.obj `if test -f 'gifdec.c'; then $(CYGPATH_W) 'gifdec.c'; else $(CYGPATH_W) '$(srcdir)/gifdec.c'; fi` - -anim_dump-anim_dump.o: anim_dump.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(anim_dump_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT anim_dump-anim_dump.o -MD -MP -MF $(DEPDIR)/anim_dump-anim_dump.Tpo -c -o anim_dump-anim_dump.o `test -f 'anim_dump.c' || echo '$(srcdir)/'`anim_dump.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/anim_dump-anim_dump.Tpo $(DEPDIR)/anim_dump-anim_dump.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='anim_dump.c' object='anim_dump-anim_dump.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(anim_dump_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o anim_dump-anim_dump.o `test -f 'anim_dump.c' || echo '$(srcdir)/'`anim_dump.c - -anim_dump-anim_dump.obj: anim_dump.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(anim_dump_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT anim_dump-anim_dump.obj -MD -MP -MF $(DEPDIR)/anim_dump-anim_dump.Tpo -c -o anim_dump-anim_dump.obj `if test -f 'anim_dump.c'; then $(CYGPATH_W) 'anim_dump.c'; else $(CYGPATH_W) '$(srcdir)/anim_dump.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/anim_dump-anim_dump.Tpo $(DEPDIR)/anim_dump-anim_dump.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='anim_dump.c' object='anim_dump-anim_dump.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(anim_dump_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o anim_dump-anim_dump.obj `if test -f 'anim_dump.c'; then $(CYGPATH_W) 'anim_dump.c'; else $(CYGPATH_W) '$(srcdir)/anim_dump.c'; fi` - -anim_dump-anim_util.o: anim_util.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(anim_dump_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT anim_dump-anim_util.o -MD -MP -MF $(DEPDIR)/anim_dump-anim_util.Tpo -c -o anim_dump-anim_util.o `test -f 'anim_util.c' || echo '$(srcdir)/'`anim_util.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/anim_dump-anim_util.Tpo $(DEPDIR)/anim_dump-anim_util.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='anim_util.c' object='anim_dump-anim_util.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(anim_dump_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o anim_dump-anim_util.o `test -f 'anim_util.c' || echo '$(srcdir)/'`anim_util.c - -anim_dump-anim_util.obj: anim_util.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(anim_dump_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT anim_dump-anim_util.obj -MD -MP -MF $(DEPDIR)/anim_dump-anim_util.Tpo -c -o anim_dump-anim_util.obj `if test -f 'anim_util.c'; then $(CYGPATH_W) 'anim_util.c'; else $(CYGPATH_W) '$(srcdir)/anim_util.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/anim_dump-anim_util.Tpo $(DEPDIR)/anim_dump-anim_util.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='anim_util.c' object='anim_dump-anim_util.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(anim_dump_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o anim_dump-anim_util.obj `if test -f 'anim_util.c'; then $(CYGPATH_W) 'anim_util.c'; else $(CYGPATH_W) '$(srcdir)/anim_util.c'; fi` - -anim_dump-gifdec.o: gifdec.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(anim_dump_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT anim_dump-gifdec.o -MD -MP -MF $(DEPDIR)/anim_dump-gifdec.Tpo -c -o anim_dump-gifdec.o `test -f 'gifdec.c' || echo '$(srcdir)/'`gifdec.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/anim_dump-gifdec.Tpo $(DEPDIR)/anim_dump-gifdec.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gifdec.c' object='anim_dump-gifdec.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(anim_dump_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o anim_dump-gifdec.o `test -f 'gifdec.c' || echo '$(srcdir)/'`gifdec.c - -anim_dump-gifdec.obj: gifdec.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(anim_dump_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT anim_dump-gifdec.obj -MD -MP -MF $(DEPDIR)/anim_dump-gifdec.Tpo -c -o anim_dump-gifdec.obj `if test -f 'gifdec.c'; then $(CYGPATH_W) 'gifdec.c'; else $(CYGPATH_W) '$(srcdir)/gifdec.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/anim_dump-gifdec.Tpo $(DEPDIR)/anim_dump-gifdec.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gifdec.c' object='anim_dump-gifdec.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(anim_dump_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o anim_dump-gifdec.obj `if test -f 'gifdec.c'; then $(CYGPATH_W) 'gifdec.c'; else $(CYGPATH_W) '$(srcdir)/gifdec.c'; fi` - -cwebp-cwebp.o: cwebp.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cwebp_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT cwebp-cwebp.o -MD -MP -MF $(DEPDIR)/cwebp-cwebp.Tpo -c -o cwebp-cwebp.o `test -f 'cwebp.c' || echo '$(srcdir)/'`cwebp.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cwebp-cwebp.Tpo $(DEPDIR)/cwebp-cwebp.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='cwebp.c' object='cwebp-cwebp.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cwebp_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o cwebp-cwebp.o `test -f 'cwebp.c' || echo '$(srcdir)/'`cwebp.c - -cwebp-cwebp.obj: cwebp.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cwebp_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT cwebp-cwebp.obj -MD -MP -MF $(DEPDIR)/cwebp-cwebp.Tpo -c -o cwebp-cwebp.obj `if test -f 'cwebp.c'; then $(CYGPATH_W) 'cwebp.c'; else $(CYGPATH_W) '$(srcdir)/cwebp.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cwebp-cwebp.Tpo $(DEPDIR)/cwebp-cwebp.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='cwebp.c' object='cwebp-cwebp.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cwebp_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o cwebp-cwebp.obj `if test -f 'cwebp.c'; then $(CYGPATH_W) 'cwebp.c'; else $(CYGPATH_W) '$(srcdir)/cwebp.c'; fi` - -dwebp-dwebp.o: dwebp.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(dwebp_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dwebp-dwebp.o -MD -MP -MF $(DEPDIR)/dwebp-dwebp.Tpo -c -o dwebp-dwebp.o `test -f 'dwebp.c' || echo '$(srcdir)/'`dwebp.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/dwebp-dwebp.Tpo $(DEPDIR)/dwebp-dwebp.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dwebp.c' object='dwebp-dwebp.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(dwebp_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dwebp-dwebp.o `test -f 'dwebp.c' || echo '$(srcdir)/'`dwebp.c - -dwebp-dwebp.obj: dwebp.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(dwebp_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dwebp-dwebp.obj -MD -MP -MF $(DEPDIR)/dwebp-dwebp.Tpo -c -o dwebp-dwebp.obj `if test -f 'dwebp.c'; then $(CYGPATH_W) 'dwebp.c'; else $(CYGPATH_W) '$(srcdir)/dwebp.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/dwebp-dwebp.Tpo $(DEPDIR)/dwebp-dwebp.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dwebp.c' object='dwebp-dwebp.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(dwebp_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dwebp-dwebp.obj `if test -f 'dwebp.c'; then $(CYGPATH_W) 'dwebp.c'; else $(CYGPATH_W) '$(srcdir)/dwebp.c'; fi` - -gif2webp-gif2webp.o: gif2webp.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gif2webp_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT gif2webp-gif2webp.o -MD -MP -MF $(DEPDIR)/gif2webp-gif2webp.Tpo -c -o gif2webp-gif2webp.o `test -f 'gif2webp.c' || echo '$(srcdir)/'`gif2webp.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gif2webp-gif2webp.Tpo $(DEPDIR)/gif2webp-gif2webp.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gif2webp.c' object='gif2webp-gif2webp.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gif2webp_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o gif2webp-gif2webp.o `test -f 'gif2webp.c' || echo '$(srcdir)/'`gif2webp.c - -gif2webp-gif2webp.obj: gif2webp.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gif2webp_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT gif2webp-gif2webp.obj -MD -MP -MF $(DEPDIR)/gif2webp-gif2webp.Tpo -c -o gif2webp-gif2webp.obj `if test -f 'gif2webp.c'; then $(CYGPATH_W) 'gif2webp.c'; else $(CYGPATH_W) '$(srcdir)/gif2webp.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gif2webp-gif2webp.Tpo $(DEPDIR)/gif2webp-gif2webp.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gif2webp.c' object='gif2webp-gif2webp.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gif2webp_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o gif2webp-gif2webp.obj `if test -f 'gif2webp.c'; then $(CYGPATH_W) 'gif2webp.c'; else $(CYGPATH_W) '$(srcdir)/gif2webp.c'; fi` - -gif2webp-gifdec.o: gifdec.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gif2webp_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT gif2webp-gifdec.o -MD -MP -MF $(DEPDIR)/gif2webp-gifdec.Tpo -c -o gif2webp-gifdec.o `test -f 'gifdec.c' || echo '$(srcdir)/'`gifdec.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gif2webp-gifdec.Tpo $(DEPDIR)/gif2webp-gifdec.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gifdec.c' object='gif2webp-gifdec.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gif2webp_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o gif2webp-gifdec.o `test -f 'gifdec.c' || echo '$(srcdir)/'`gifdec.c - -gif2webp-gifdec.obj: gifdec.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gif2webp_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT gif2webp-gifdec.obj -MD -MP -MF $(DEPDIR)/gif2webp-gifdec.Tpo -c -o gif2webp-gifdec.obj `if test -f 'gifdec.c'; then $(CYGPATH_W) 'gifdec.c'; else $(CYGPATH_W) '$(srcdir)/gifdec.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gif2webp-gifdec.Tpo $(DEPDIR)/gif2webp-gifdec.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gifdec.c' object='gif2webp-gifdec.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gif2webp_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o gif2webp-gifdec.obj `if test -f 'gifdec.c'; then $(CYGPATH_W) 'gifdec.c'; else $(CYGPATH_W) '$(srcdir)/gifdec.c'; fi` - -img2webp-img2webp.o: img2webp.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(img2webp_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT img2webp-img2webp.o -MD -MP -MF $(DEPDIR)/img2webp-img2webp.Tpo -c -o img2webp-img2webp.o `test -f 'img2webp.c' || echo '$(srcdir)/'`img2webp.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/img2webp-img2webp.Tpo $(DEPDIR)/img2webp-img2webp.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='img2webp.c' object='img2webp-img2webp.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(img2webp_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o img2webp-img2webp.o `test -f 'img2webp.c' || echo '$(srcdir)/'`img2webp.c - -img2webp-img2webp.obj: img2webp.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(img2webp_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT img2webp-img2webp.obj -MD -MP -MF $(DEPDIR)/img2webp-img2webp.Tpo -c -o img2webp-img2webp.obj `if test -f 'img2webp.c'; then $(CYGPATH_W) 'img2webp.c'; else $(CYGPATH_W) '$(srcdir)/img2webp.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/img2webp-img2webp.Tpo $(DEPDIR)/img2webp-img2webp.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='img2webp.c' object='img2webp-img2webp.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(img2webp_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o img2webp-img2webp.obj `if test -f 'img2webp.c'; then $(CYGPATH_W) 'img2webp.c'; else $(CYGPATH_W) '$(srcdir)/img2webp.c'; fi` - -vwebp-vwebp.o: vwebp.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(vwebp_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT vwebp-vwebp.o -MD -MP -MF $(DEPDIR)/vwebp-vwebp.Tpo -c -o vwebp-vwebp.o `test -f 'vwebp.c' || echo '$(srcdir)/'`vwebp.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/vwebp-vwebp.Tpo $(DEPDIR)/vwebp-vwebp.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='vwebp.c' object='vwebp-vwebp.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(vwebp_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o vwebp-vwebp.o `test -f 'vwebp.c' || echo '$(srcdir)/'`vwebp.c - -vwebp-vwebp.obj: vwebp.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(vwebp_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT vwebp-vwebp.obj -MD -MP -MF $(DEPDIR)/vwebp-vwebp.Tpo -c -o vwebp-vwebp.obj `if test -f 'vwebp.c'; then $(CYGPATH_W) 'vwebp.c'; else $(CYGPATH_W) '$(srcdir)/vwebp.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/vwebp-vwebp.Tpo $(DEPDIR)/vwebp-vwebp.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='vwebp.c' object='vwebp-vwebp.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(vwebp_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o vwebp-vwebp.obj `if test -f 'vwebp.c'; then $(CYGPATH_W) 'vwebp.c'; else $(CYGPATH_W) '$(srcdir)/vwebp.c'; fi` - -webpinfo-webpinfo.o: webpinfo.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webpinfo_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT webpinfo-webpinfo.o -MD -MP -MF $(DEPDIR)/webpinfo-webpinfo.Tpo -c -o webpinfo-webpinfo.o `test -f 'webpinfo.c' || echo '$(srcdir)/'`webpinfo.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webpinfo-webpinfo.Tpo $(DEPDIR)/webpinfo-webpinfo.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='webpinfo.c' object='webpinfo-webpinfo.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webpinfo_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o webpinfo-webpinfo.o `test -f 'webpinfo.c' || echo '$(srcdir)/'`webpinfo.c - -webpinfo-webpinfo.obj: webpinfo.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webpinfo_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT webpinfo-webpinfo.obj -MD -MP -MF $(DEPDIR)/webpinfo-webpinfo.Tpo -c -o webpinfo-webpinfo.obj `if test -f 'webpinfo.c'; then $(CYGPATH_W) 'webpinfo.c'; else $(CYGPATH_W) '$(srcdir)/webpinfo.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webpinfo-webpinfo.Tpo $(DEPDIR)/webpinfo-webpinfo.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='webpinfo.c' object='webpinfo-webpinfo.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webpinfo_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o webpinfo-webpinfo.obj `if test -f 'webpinfo.c'; then $(CYGPATH_W) 'webpinfo.c'; else $(CYGPATH_W) '$(srcdir)/webpinfo.c'; fi` - -webpmux-webpmux.o: webpmux.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webpmux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT webpmux-webpmux.o -MD -MP -MF $(DEPDIR)/webpmux-webpmux.Tpo -c -o webpmux-webpmux.o `test -f 'webpmux.c' || echo '$(srcdir)/'`webpmux.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webpmux-webpmux.Tpo $(DEPDIR)/webpmux-webpmux.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='webpmux.c' object='webpmux-webpmux.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webpmux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o webpmux-webpmux.o `test -f 'webpmux.c' || echo '$(srcdir)/'`webpmux.c - -webpmux-webpmux.obj: webpmux.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webpmux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT webpmux-webpmux.obj -MD -MP -MF $(DEPDIR)/webpmux-webpmux.Tpo -c -o webpmux-webpmux.obj `if test -f 'webpmux.c'; then $(CYGPATH_W) 'webpmux.c'; else $(CYGPATH_W) '$(srcdir)/webpmux.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webpmux-webpmux.Tpo $(DEPDIR)/webpmux-webpmux.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='webpmux.c' object='webpmux-webpmux.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webpmux_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o webpmux-webpmux.obj `if test -f 'webpmux.c'; then $(CYGPATH_W) 'webpmux.c'; else $(CYGPATH_W) '$(srcdir)/webpmux.c'; fi` - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs - -ID: $(am__tagged_files) - $(am__define_uniq_tagged_files); mkid -fID $$unique -tags: tags-am -TAGS: tags - -tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) - set x; \ - here=`pwd`; \ - $(am__define_uniq_tagged_files); \ - shift; \ - if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ - test -n "$$unique" || unique=$$empty_fix; \ - if test $$# -gt 0; then \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - "$$@" $$unique; \ - else \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$unique; \ - fi; \ - fi -ctags: ctags-am - -CTAGS: ctags -ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) - $(am__define_uniq_tagged_files); \ - test -z "$(CTAGS_ARGS)$$unique" \ - || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$unique - -GTAGS: - here=`$(am__cd) $(top_builddir) && pwd` \ - && $(am__cd) $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) "$$here" -cscopelist: cscopelist-am - -cscopelist-am: $(am__tagged_files) - list='$(am__tagged_files)'; \ - case "$(srcdir)" in \ - [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ - *) sdir=$(subdir)/$(srcdir) ;; \ - esac; \ - for i in $$list; do \ - if test -f "$$i"; then \ - echo "$(subdir)/$$i"; \ - else \ - echo "$$sdir/$$i"; \ - fi; \ - done >> $(top_builddir)/cscope.files - -distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - -distdir: $(BUILT_SOURCES) - $(MAKE) $(AM_MAKEFLAGS) distdir-am - -distdir-am: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - list='$(DISTFILES)'; \ - dist_files=`for file in $$list; do echo $$file; done | \ - sed -e "s|^$$srcdirstrip/||;t" \ - -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ - case $$dist_files in \ - */*) $(MKDIR_P) `echo "$$dist_files" | \ - sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ - sort -u` ;; \ - esac; \ - for file in $$dist_files; do \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - if test -d $$d/$$file; then \ - dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test -d "$(distdir)/$$file"; then \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ - else \ - test -f "$(distdir)/$$file" \ - || cp -p $$d/$$file "$(distdir)/$$file" \ - || exit 1; \ - fi; \ - done -check-am: all-am -check: check-am -all-am: Makefile $(PROGRAMS) $(LTLIBRARIES) -installdirs: - for dir in "$(DESTDIR)$(bindir)"; do \ - test -z "$$dir" || $(MKDIR_P) "$$dir"; \ - done -install: install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-am -install-strip: - if test -z '$(STRIP)'; then \ - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - install; \ - else \ - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ - fi -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-am - -clean-am: clean-binPROGRAMS clean-generic clean-libtool \ - clean-noinstLTLIBRARIES clean-noinstPROGRAMS mostlyclean-am - -distclean: distclean-am - -rm -f ./$(DEPDIR)/anim_diff-anim_diff.Po - -rm -f ./$(DEPDIR)/anim_diff-anim_util.Po - -rm -f ./$(DEPDIR)/anim_diff-gifdec.Po - -rm -f ./$(DEPDIR)/anim_dump-anim_dump.Po - -rm -f ./$(DEPDIR)/anim_dump-anim_util.Po - -rm -f ./$(DEPDIR)/anim_dump-gifdec.Po - -rm -f ./$(DEPDIR)/cwebp-cwebp.Po - -rm -f ./$(DEPDIR)/dwebp-dwebp.Po - -rm -f ./$(DEPDIR)/example_util.Plo - -rm -f ./$(DEPDIR)/gif2webp-gif2webp.Po - -rm -f ./$(DEPDIR)/gif2webp-gifdec.Po - -rm -f ./$(DEPDIR)/img2webp-img2webp.Po - -rm -f ./$(DEPDIR)/vwebp-vwebp.Po - -rm -f ./$(DEPDIR)/webpinfo-webpinfo.Po - -rm -f ./$(DEPDIR)/webpmux-webpmux.Po - -rm -f Makefile -distclean-am: clean-am distclean-compile distclean-generic \ - distclean-tags - -dvi: dvi-am - -dvi-am: - -html: html-am - -html-am: - -info: info-am - -info-am: - -install-data-am: - -install-dvi: install-dvi-am - -install-dvi-am: - -install-exec-am: install-binPROGRAMS - -install-html: install-html-am - -install-html-am: - -install-info: install-info-am - -install-info-am: - -install-man: - -install-pdf: install-pdf-am - -install-pdf-am: - -install-ps: install-ps-am - -install-ps-am: - -installcheck-am: - -maintainer-clean: maintainer-clean-am - -rm -f ./$(DEPDIR)/anim_diff-anim_diff.Po - -rm -f ./$(DEPDIR)/anim_diff-anim_util.Po - -rm -f ./$(DEPDIR)/anim_diff-gifdec.Po - -rm -f ./$(DEPDIR)/anim_dump-anim_dump.Po - -rm -f ./$(DEPDIR)/anim_dump-anim_util.Po - -rm -f ./$(DEPDIR)/anim_dump-gifdec.Po - -rm -f ./$(DEPDIR)/cwebp-cwebp.Po - -rm -f ./$(DEPDIR)/dwebp-dwebp.Po - -rm -f ./$(DEPDIR)/example_util.Plo - -rm -f ./$(DEPDIR)/gif2webp-gif2webp.Po - -rm -f ./$(DEPDIR)/gif2webp-gifdec.Po - -rm -f ./$(DEPDIR)/img2webp-img2webp.Po - -rm -f ./$(DEPDIR)/vwebp-vwebp.Po - -rm -f ./$(DEPDIR)/webpinfo-webpinfo.Po - -rm -f ./$(DEPDIR)/webpmux-webpmux.Po - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-compile mostlyclean-generic \ - mostlyclean-libtool - -pdf: pdf-am - -pdf-am: - -ps: ps-am - -ps-am: - -uninstall-am: uninstall-binPROGRAMS - -.MAKE: install-am install-strip - -.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ - clean-binPROGRAMS clean-generic clean-libtool \ - clean-noinstLTLIBRARIES clean-noinstPROGRAMS cscopelist-am \ - ctags ctags-am distclean distclean-compile distclean-generic \ - distclean-libtool distclean-tags distdir dvi dvi-am html \ - html-am info info-am install install-am install-binPROGRAMS \ - install-data install-data-am install-dvi install-dvi-am \ - install-exec install-exec-am install-html install-html-am \ - install-info install-info-am install-man install-pdf \ - install-pdf-am install-ps install-ps-am install-strip \ - installcheck installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-compile \ - mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ - tags tags-am uninstall uninstall-am uninstall-binPROGRAMS - -.PRECIOUS: Makefile - - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/Extended/libwebp/examples/anim_diff.c b/Extended/libwebp/examples/anim_diff.c deleted file mode 100644 index 7ffabc8..0000000 --- a/Extended/libwebp/examples/anim_diff.c +++ /dev/null @@ -1,317 +0,0 @@ -// Copyright 2015 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Checks if given pair of animated GIF/WebP images are identical: -// That is: their reconstructed canvases match pixel-by-pixel and their other -// animation properties (loop count etc) also match. -// -// example: anim_diff foo.gif bar.webp - -#include -#include -#include -#include // for 'strtod'. -#include // for 'strcmp'. - -#include "./anim_util.h" -#include "./example_util.h" -#include "./unicode.h" - -#if defined(_MSC_VER) && _MSC_VER < 1900 -#define snprintf _snprintf -#endif - -// Returns true if 'a + b' will overflow. -static int AdditionWillOverflow(int a, int b) { - return (b > 0) && (a > INT_MAX - b); -} - -static int FramesAreEqual(const uint8_t* const rgba1, - const uint8_t* const rgba2, int width, int height) { - const int stride = width * 4; // Always true for 'DecodedFrame.rgba'. - return !memcmp(rgba1, rgba2, stride * height); -} - -static WEBP_INLINE int PixelsAreSimilar(uint32_t src, uint32_t dst, - int max_allowed_diff) { - const int src_a = (src >> 24) & 0xff; - const int src_r = (src >> 16) & 0xff; - const int src_g = (src >> 8) & 0xff; - const int src_b = (src >> 0) & 0xff; - const int dst_a = (dst >> 24) & 0xff; - const int dst_r = (dst >> 16) & 0xff; - const int dst_g = (dst >> 8) & 0xff; - const int dst_b = (dst >> 0) & 0xff; - - return (abs(src_r * src_a - dst_r * dst_a) <= (max_allowed_diff * 255)) && - (abs(src_g * src_a - dst_g * dst_a) <= (max_allowed_diff * 255)) && - (abs(src_b * src_a - dst_b * dst_a) <= (max_allowed_diff * 255)) && - (abs(src_a - dst_a) <= max_allowed_diff); -} - -static int FramesAreSimilar(const uint8_t* const rgba1, - const uint8_t* const rgba2, - int width, int height, int max_allowed_diff) { - int i, j; - assert(max_allowed_diff > 0); - for (j = 0; j < height; ++j) { - for (i = 0; i < width; ++i) { - const int stride = width * 4; - const size_t offset = j * stride + i; - if (!PixelsAreSimilar(rgba1[offset], rgba2[offset], max_allowed_diff)) { - return 0; - } - } - } - return 1; -} - -// Minimize number of frames by combining successive frames that have at max -// 'max_diff' difference per channel between corresponding pixels. -static void MinimizeAnimationFrames(AnimatedImage* const img, int max_diff) { - uint32_t i; - for (i = 1; i < img->num_frames; ++i) { - DecodedFrame* const frame1 = &img->frames[i - 1]; - DecodedFrame* const frame2 = &img->frames[i]; - const uint8_t* const rgba1 = frame1->rgba; - const uint8_t* const rgba2 = frame2->rgba; - int should_merge_frames = 0; - // If merging frames will result in integer overflow for 'duration', - // skip merging. - if (AdditionWillOverflow(frame1->duration, frame2->duration)) continue; - if (max_diff > 0) { - should_merge_frames = FramesAreSimilar(rgba1, rgba2, img->canvas_width, - img->canvas_height, max_diff); - } else { - should_merge_frames = - FramesAreEqual(rgba1, rgba2, img->canvas_width, img->canvas_height); - } - if (should_merge_frames) { // Merge 'i+1'th frame into 'i'th frame. - frame1->duration += frame2->duration; - if (i + 1 < img->num_frames) { - memmove(&img->frames[i], &img->frames[i + 1], - (img->num_frames - i - 1) * sizeof(*img->frames)); - } - --img->num_frames; - --i; - } - } -} - -static int CompareValues(uint32_t a, uint32_t b, const char* output_str) { - if (a != b) { - fprintf(stderr, "%s: %d vs %d\n", output_str, a, b); - return 0; - } - return 1; -} - -static int CompareBackgroundColor(uint32_t bg1, uint32_t bg2, int premultiply) { - if (premultiply) { - const int alpha1 = (bg1 >> 24) & 0xff; - const int alpha2 = (bg2 >> 24) & 0xff; - if (alpha1 == 0 && alpha2 == 0) return 1; - } - if (bg1 != bg2) { - fprintf(stderr, "Background color mismatch: 0x%08x vs 0x%08x\n", - bg1, bg2); - return 0; - } - return 1; -} - -// Note: As long as frame durations and reconstructed frames are identical, it -// is OK for other aspects like offsets, dispose/blend method to vary. -static int CompareAnimatedImagePair(const AnimatedImage* const img1, - const AnimatedImage* const img2, - int premultiply, - double min_psnr) { - int ok = 1; - const int is_multi_frame_image = (img1->num_frames > 1); - uint32_t i; - - ok = CompareValues(img1->canvas_width, img2->canvas_width, - "Canvas width mismatch") && ok; - ok = CompareValues(img1->canvas_height, img2->canvas_height, - "Canvas height mismatch") && ok; - ok = CompareValues(img1->num_frames, img2->num_frames, - "Frame count mismatch") && ok; - if (!ok) return 0; // These are fatal failures, can't proceed. - - if (is_multi_frame_image) { // Checks relevant for multi-frame images only. - int max_loop_count_workaround = 0; - // Transcodes to webp increase the gif loop count by 1 for compatibility. - // When the gif has the maximum value the webp value will be off by one. - if ((img1->format == ANIM_GIF && img1->loop_count == 65536 && - img2->format == ANIM_WEBP && img2->loop_count == 65535) || - (img1->format == ANIM_WEBP && img1->loop_count == 65535 && - img2->format == ANIM_GIF && img2->loop_count == 65536)) { - max_loop_count_workaround = 1; - } - ok = (max_loop_count_workaround || - CompareValues(img1->loop_count, img2->loop_count, - "Loop count mismatch")) && ok; - ok = CompareBackgroundColor(img1->bgcolor, img2->bgcolor, - premultiply) && ok; - } - - for (i = 0; i < img1->num_frames; ++i) { - // Pixel-by-pixel comparison. - const uint8_t* const rgba1 = img1->frames[i].rgba; - const uint8_t* const rgba2 = img2->frames[i].rgba; - int max_diff; - double psnr; - if (is_multi_frame_image) { // Check relevant for multi-frame images only. - const char format[] = "Frame #%d, duration mismatch"; - char tmp[sizeof(format) + 8]; - ok = ok && (snprintf(tmp, sizeof(tmp), format, i) >= 0); - ok = ok && CompareValues(img1->frames[i].duration, - img2->frames[i].duration, tmp); - } - GetDiffAndPSNR(rgba1, rgba2, img1->canvas_width, img1->canvas_height, - premultiply, &max_diff, &psnr); - if (min_psnr > 0.) { - if (psnr < min_psnr) { - fprintf(stderr, "Frame #%d, psnr = %.2lf (min_psnr = %f)\n", i, - psnr, min_psnr); - ok = 0; - } - } else { - if (max_diff != 0) { - fprintf(stderr, "Frame #%d, max pixel diff: %d\n", i, max_diff); - ok = 0; - } - } - } - return ok; -} - -static void Help(void) { - printf("Usage: anim_diff [options]\n"); - printf("\nOptions:\n"); - printf(" -dump_frames dump decoded frames in PAM format\n"); - printf(" -min_psnr ... minimum per-frame PSNR\n"); - printf(" -raw_comparison ..... if this flag is not used, RGB is\n"); - printf(" premultiplied before comparison\n"); - printf(" -max_diff ..... maximum allowed difference per channel\n" - " between corresponding pixels in subsequent\n" - " frames\n"); - printf(" -h .................. this help\n"); - printf(" -version ............ print version number and exit\n"); -} - -int main(int argc, const char* argv[]) { - int return_code = -1; - int dump_frames = 0; - const char* dump_folder = NULL; - double min_psnr = 0.; - int got_input1 = 0; - int got_input2 = 0; - int premultiply = 1; - int max_diff = 0; - int i, c; - const char* files[2] = { NULL, NULL }; - AnimatedImage images[2]; - - INIT_WARGV(argc, argv); - - for (c = 1; c < argc; ++c) { - int parse_error = 0; - if (!strcmp(argv[c], "-dump_frames")) { - if (c < argc - 1) { - dump_frames = 1; - dump_folder = (const char*)GET_WARGV(argv, ++c); - } else { - parse_error = 1; - } - } else if (!strcmp(argv[c], "-min_psnr")) { - if (c < argc - 1) { - min_psnr = ExUtilGetFloat(argv[++c], &parse_error); - } else { - parse_error = 1; - } - } else if (!strcmp(argv[c], "-raw_comparison")) { - premultiply = 0; - } else if (!strcmp(argv[c], "-max_diff")) { - if (c < argc - 1) { - max_diff = ExUtilGetInt(argv[++c], 0, &parse_error); - } else { - parse_error = 1; - } - } else if (!strcmp(argv[c], "-h") || !strcmp(argv[c], "-help")) { - Help(); - FREE_WARGV_AND_RETURN(0); - } else if (!strcmp(argv[c], "-version")) { - int dec_version, demux_version; - GetAnimatedImageVersions(&dec_version, &demux_version); - printf("WebP Decoder version: %d.%d.%d\nWebP Demux version: %d.%d.%d\n", - (dec_version >> 16) & 0xff, (dec_version >> 8) & 0xff, - (dec_version >> 0) & 0xff, - (demux_version >> 16) & 0xff, (demux_version >> 8) & 0xff, - (demux_version >> 0) & 0xff); - FREE_WARGV_AND_RETURN(0); - } else { - if (!got_input1) { - files[0] = (const char*)GET_WARGV(argv, c); - got_input1 = 1; - } else if (!got_input2) { - files[1] = (const char*)GET_WARGV(argv, c); - got_input2 = 1; - } else { - parse_error = 1; - } - } - if (parse_error) { - Help(); - FREE_WARGV_AND_RETURN(-1); - } - } - if (argc < 3) { - Help(); - FREE_WARGV_AND_RETURN(-1); - } - - - if (!got_input2) { - Help(); - FREE_WARGV_AND_RETURN(-1); - } - - if (dump_frames) { - WPRINTF("Dumping decoded frames in: %s\n", (const W_CHAR*)dump_folder); - } - - memset(images, 0, sizeof(images)); - for (i = 0; i < 2; ++i) { - WPRINTF("Decoding file: %s\n", (const W_CHAR*)files[i]); - if (!ReadAnimatedImage(files[i], &images[i], dump_frames, dump_folder)) { - WFPRINTF(stderr, "Error decoding file: %s\n Aborting.\n", - (const W_CHAR*)files[i]); - return_code = -2; - goto End; - } else { - MinimizeAnimationFrames(&images[i], max_diff); - } - } - - if (!CompareAnimatedImagePair(&images[0], &images[1], - premultiply, min_psnr)) { - WFPRINTF(stderr, "\nFiles %s and %s differ.\n", (const W_CHAR*)files[0], - (const W_CHAR*)files[1]); - return_code = -3; - } else { - WPRINTF("\nFiles %s and %s are identical.\n", (const W_CHAR*)files[0], - (const W_CHAR*)files[1]); - return_code = 0; - } - End: - ClearAnimatedImage(&images[0]); - ClearAnimatedImage(&images[1]); - FREE_WARGV_AND_RETURN(return_code); -} diff --git a/Extended/libwebp/examples/anim_dump.c b/Extended/libwebp/examples/anim_dump.c deleted file mode 100644 index e447338..0000000 --- a/Extended/libwebp/examples/anim_dump.c +++ /dev/null @@ -1,121 +0,0 @@ -// Copyright 2017 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Decodes an animated WebP file and dumps the decoded frames as PNG or TIFF. -// -// Author: Skal (pascal.massimino@gmail.com) - -#include -#include // for 'strcmp'. - -#include "./anim_util.h" -#include "webp/decode.h" -#include "../imageio/image_enc.h" -#include "./unicode.h" - -#if defined(_MSC_VER) && _MSC_VER < 1900 -#define snprintf _snprintf -#endif - -static void Help(void) { - printf("Usage: anim_dump [options] files...\n"); - printf("\nOptions:\n"); - printf(" -folder .... dump folder (default: '.')\n"); - printf(" -prefix .... prefix for dumped frames " - "(default: 'dump_')\n"); - printf(" -tiff ............... save frames as TIFF\n"); - printf(" -pam ................ save frames as PAM\n"); - printf(" -h .................. this help\n"); - printf(" -version ............ print version number and exit\n"); -} - -int main(int argc, const char* argv[]) { - int error = 0; - const W_CHAR* dump_folder = TO_W_CHAR("."); - const W_CHAR* prefix = TO_W_CHAR("dump_"); - const W_CHAR* suffix = TO_W_CHAR("png"); - WebPOutputFileFormat format = PNG; - int c; - - INIT_WARGV(argc, argv); - - if (argc < 2) { - Help(); - FREE_WARGV_AND_RETURN(-1); - } - - for (c = 1; !error && c < argc; ++c) { - if (!strcmp(argv[c], "-folder")) { - if (c + 1 == argc) { - fprintf(stderr, "missing argument after option '%s'\n", argv[c]); - error = 1; - break; - } - dump_folder = GET_WARGV(argv, ++c); - } else if (!strcmp(argv[c], "-prefix")) { - if (c + 1 == argc) { - fprintf(stderr, "missing argument after option '%s'\n", argv[c]); - error = 1; - break; - } - prefix = GET_WARGV(argv, ++c); - } else if (!strcmp(argv[c], "-tiff")) { - format = TIFF; - suffix = TO_W_CHAR("tiff"); - } else if (!strcmp(argv[c], "-pam")) { - format = PAM; - suffix = TO_W_CHAR("pam"); - } else if (!strcmp(argv[c], "-h") || !strcmp(argv[c], "-help")) { - Help(); - FREE_WARGV_AND_RETURN(0); - } else if (!strcmp(argv[c], "-version")) { - int dec_version, demux_version; - GetAnimatedImageVersions(&dec_version, &demux_version); - printf("WebP Decoder version: %d.%d.%d\nWebP Demux version: %d.%d.%d\n", - (dec_version >> 16) & 0xff, (dec_version >> 8) & 0xff, - (dec_version >> 0) & 0xff, - (demux_version >> 16) & 0xff, (demux_version >> 8) & 0xff, - (demux_version >> 0) & 0xff); - FREE_WARGV_AND_RETURN(0); - } else { - uint32_t i; - AnimatedImage image; - const W_CHAR* const file = GET_WARGV(argv, c); - memset(&image, 0, sizeof(image)); - WPRINTF("Decoding file: %s as %s/%sxxxx.%s\n", - file, dump_folder, prefix, suffix); - if (!ReadAnimatedImage((const char*)file, &image, 0, NULL)) { - WFPRINTF(stderr, "Error decoding file: %s\n Aborting.\n", file); - error = 1; - break; - } - for (i = 0; !error && i < image.num_frames; ++i) { - W_CHAR out_file[1024]; - WebPDecBuffer buffer; - WebPInitDecBuffer(&buffer); - buffer.colorspace = MODE_RGBA; - buffer.is_external_memory = 1; - buffer.width = image.canvas_width; - buffer.height = image.canvas_height; - buffer.u.RGBA.rgba = image.frames[i].rgba; - buffer.u.RGBA.stride = buffer.width * sizeof(uint32_t); - buffer.u.RGBA.size = buffer.u.RGBA.stride * buffer.height; - WSNPRINTF(out_file, sizeof(out_file), "%s/%s%.4d.%s", - dump_folder, prefix, i, suffix); - if (!WebPSaveImage(&buffer, format, (const char*)out_file)) { - WFPRINTF(stderr, "Error while saving image '%s'\n", out_file); - error = 1; - } - WebPFreeDecBuffer(&buffer); - } - ClearAnimatedImage(&image); - } - } - FREE_WARGV_AND_RETURN(error ? 1 : 0); -} diff --git a/Extended/libwebp/examples/anim_util.c b/Extended/libwebp/examples/anim_util.c deleted file mode 100644 index b6ee97b..0000000 --- a/Extended/libwebp/examples/anim_util.c +++ /dev/null @@ -1,779 +0,0 @@ -// Copyright 2015 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Utilities for animated images - -#include "./anim_util.h" - -#include -#include -#include -#include - -#if defined(WEBP_HAVE_GIF) -#include -#endif -#include "webp/format_constants.h" -#include "webp/decode.h" -#include "webp/demux.h" -#include "../imageio/imageio_util.h" -#include "./gifdec.h" -#include "./unicode.h" -#include "./unicode_gif.h" - -#if defined(_MSC_VER) && _MSC_VER < 1900 -#define snprintf _snprintf -#endif - -static const int kNumChannels = 4; - -// ----------------------------------------------------------------------------- -// Common utilities. - -#if defined(WEBP_HAVE_GIF) -// Returns true if the frame covers the full canvas. -static int IsFullFrame(int width, int height, - int canvas_width, int canvas_height) { - return (width == canvas_width && height == canvas_height); -} -#endif // WEBP_HAVE_GIF - -static int CheckSizeForOverflow(uint64_t size) { - return (size == (size_t)size); -} - -static int AllocateFrames(AnimatedImage* const image, uint32_t num_frames) { - uint32_t i; - uint8_t* mem = NULL; - DecodedFrame* frames = NULL; - const uint64_t rgba_size = - (uint64_t)image->canvas_width * kNumChannels * image->canvas_height; - const uint64_t total_size = (uint64_t)num_frames * rgba_size * sizeof(*mem); - const uint64_t total_frame_size = (uint64_t)num_frames * sizeof(*frames); - if (!CheckSizeForOverflow(total_size) || - !CheckSizeForOverflow(total_frame_size)) { - return 0; - } - mem = (uint8_t*)WebPMalloc((size_t)total_size); - frames = (DecodedFrame*)WebPMalloc((size_t)total_frame_size); - - if (mem == NULL || frames == NULL) { - WebPFree(mem); - WebPFree(frames); - return 0; - } - WebPFree(image->raw_mem); - image->num_frames = num_frames; - image->frames = frames; - for (i = 0; i < num_frames; ++i) { - frames[i].rgba = mem + i * rgba_size; - frames[i].duration = 0; - frames[i].is_key_frame = 0; - } - image->raw_mem = mem; - return 1; -} - -void ClearAnimatedImage(AnimatedImage* const image) { - if (image != NULL) { - WebPFree(image->raw_mem); - WebPFree(image->frames); - image->num_frames = 0; - image->frames = NULL; - image->raw_mem = NULL; - } -} - -#if defined(WEBP_HAVE_GIF) -// Clear the canvas to transparent. -static void ZeroFillCanvas(uint8_t* rgba, - uint32_t canvas_width, uint32_t canvas_height) { - memset(rgba, 0, canvas_width * kNumChannels * canvas_height); -} - -// Clear given frame rectangle to transparent. -static void ZeroFillFrameRect(uint8_t* rgba, int rgba_stride, int x_offset, - int y_offset, int width, int height) { - int j; - assert(width * kNumChannels <= rgba_stride); - rgba += y_offset * rgba_stride + x_offset * kNumChannels; - for (j = 0; j < height; ++j) { - memset(rgba, 0, width * kNumChannels); - rgba += rgba_stride; - } -} - -// Copy width * height pixels from 'src' to 'dst'. -static void CopyCanvas(const uint8_t* src, uint8_t* dst, - uint32_t width, uint32_t height) { - assert(src != NULL && dst != NULL); - memcpy(dst, src, width * kNumChannels * height); -} - -// Copy pixels in the given rectangle from 'src' to 'dst' honoring the 'stride'. -static void CopyFrameRectangle(const uint8_t* src, uint8_t* dst, int stride, - int x_offset, int y_offset, - int width, int height) { - int j; - const int width_in_bytes = width * kNumChannels; - const size_t offset = y_offset * stride + x_offset * kNumChannels; - assert(width_in_bytes <= stride); - src += offset; - dst += offset; - for (j = 0; j < height; ++j) { - memcpy(dst, src, width_in_bytes); - src += stride; - dst += stride; - } -} -#endif // WEBP_HAVE_GIF - -// Canonicalize all transparent pixels to transparent black to aid comparison. -static void CleanupTransparentPixels(uint32_t* rgba, - uint32_t width, uint32_t height) { - const uint32_t* const rgba_end = rgba + width * height; - while (rgba < rgba_end) { - const uint8_t alpha = (*rgba >> 24) & 0xff; - if (alpha == 0) { - *rgba = 0; - } - ++rgba; - } -} - -// Dump frame to a PAM file. Returns true on success. -static int DumpFrame(const char filename[], const char dump_folder[], - uint32_t frame_num, const uint8_t rgba[], - int canvas_width, int canvas_height) { - int ok = 0; - size_t max_len; - int y; - const W_CHAR* base_name = NULL; - W_CHAR* file_name = NULL; - FILE* f = NULL; - const char* row; - - if (dump_folder == NULL) dump_folder = (const char*)TO_W_CHAR("."); - - base_name = WSTRRCHR(filename, '/'); - base_name = (base_name == NULL) ? (const W_CHAR*)filename : base_name + 1; - max_len = WSTRLEN(dump_folder) + 1 + WSTRLEN(base_name) - + strlen("_frame_") + strlen(".pam") + 8; - file_name = (W_CHAR*)WebPMalloc(max_len * sizeof(*file_name)); - if (file_name == NULL) goto End; - - if (WSNPRINTF(file_name, max_len, "%s/%s_frame_%d.pam", - (const W_CHAR*)dump_folder, base_name, frame_num) < 0) { - fprintf(stderr, "Error while generating file name\n"); - goto End; - } - - f = WFOPEN(file_name, "wb"); - if (f == NULL) { - WFPRINTF(stderr, "Error opening file for writing: %s\n", file_name); - ok = 0; - goto End; - } - if (fprintf(f, "P7\nWIDTH %d\nHEIGHT %d\n" - "DEPTH 4\nMAXVAL 255\nTUPLTYPE RGB_ALPHA\nENDHDR\n", - canvas_width, canvas_height) < 0) { - WFPRINTF(stderr, "Write error for file %s\n", file_name); - goto End; - } - row = (const char*)rgba; - for (y = 0; y < canvas_height; ++y) { - if (fwrite(row, canvas_width * kNumChannels, 1, f) != 1) { - WFPRINTF(stderr, "Error writing to file: %s\n", file_name); - goto End; - } - row += canvas_width * kNumChannels; - } - ok = 1; - End: - if (f != NULL) fclose(f); - WebPFree(file_name); - return ok; -} - -// ----------------------------------------------------------------------------- -// WebP Decoding. - -// Returns true if this is a valid WebP bitstream. -static int IsWebP(const WebPData* const webp_data) { - return (WebPGetInfo(webp_data->bytes, webp_data->size, NULL, NULL) != 0); -} - -// Read animated WebP bitstream 'webp_data' into 'AnimatedImage' struct. -static int ReadAnimatedWebP(const char filename[], - const WebPData* const webp_data, - AnimatedImage* const image, int dump_frames, - const char dump_folder[]) { - int ok = 0; - int dump_ok = 1; - uint32_t frame_index = 0; - int prev_frame_timestamp = 0; - WebPAnimDecoder* dec; - WebPAnimInfo anim_info; - - memset(image, 0, sizeof(*image)); - - dec = WebPAnimDecoderNew(webp_data, NULL); - if (dec == NULL) { - WFPRINTF(stderr, "Error parsing image: %s\n", (const W_CHAR*)filename); - goto End; - } - - if (!WebPAnimDecoderGetInfo(dec, &anim_info)) { - fprintf(stderr, "Error getting global info about the animation\n"); - goto End; - } - - // Animation properties. - image->canvas_width = anim_info.canvas_width; - image->canvas_height = anim_info.canvas_height; - image->loop_count = anim_info.loop_count; - image->bgcolor = anim_info.bgcolor; - - // Allocate frames. - if (!AllocateFrames(image, anim_info.frame_count)) return 0; - - // Decode frames. - while (WebPAnimDecoderHasMoreFrames(dec)) { - DecodedFrame* curr_frame; - uint8_t* curr_rgba; - uint8_t* frame_rgba; - int timestamp; - - if (!WebPAnimDecoderGetNext(dec, &frame_rgba, ×tamp)) { - fprintf(stderr, "Error decoding frame #%u\n", frame_index); - goto End; - } - assert(frame_index < anim_info.frame_count); - curr_frame = &image->frames[frame_index]; - curr_rgba = curr_frame->rgba; - curr_frame->duration = timestamp - prev_frame_timestamp; - curr_frame->is_key_frame = 0; // Unused. - memcpy(curr_rgba, frame_rgba, - image->canvas_width * kNumChannels * image->canvas_height); - - // Needed only because we may want to compare with GIF later. - CleanupTransparentPixels((uint32_t*)curr_rgba, - image->canvas_width, image->canvas_height); - - if (dump_frames && dump_ok) { - dump_ok = DumpFrame(filename, dump_folder, frame_index, curr_rgba, - image->canvas_width, image->canvas_height); - if (!dump_ok) { // Print error once, but continue decode loop. - fprintf(stderr, "Error dumping frames to %s\n", dump_folder); - } - } - - ++frame_index; - prev_frame_timestamp = timestamp; - } - ok = dump_ok; - if (ok) image->format = ANIM_WEBP; - - End: - WebPAnimDecoderDelete(dec); - return ok; -} - -// ----------------------------------------------------------------------------- -// GIF Decoding. - -#if defined(WEBP_HAVE_GIF) - -// Returns true if this is a valid GIF bitstream. -static int IsGIF(const WebPData* const data) { - return data->size > GIF_STAMP_LEN && - (!memcmp(GIF_STAMP, data->bytes, GIF_STAMP_LEN) || - !memcmp(GIF87_STAMP, data->bytes, GIF_STAMP_LEN) || - !memcmp(GIF89_STAMP, data->bytes, GIF_STAMP_LEN)); -} - -// GIFLIB_MAJOR is only defined in libgif >= 4.2.0. -#if defined(GIFLIB_MAJOR) && defined(GIFLIB_MINOR) -# define LOCAL_GIF_VERSION ((GIFLIB_MAJOR << 8) | GIFLIB_MINOR) -# define LOCAL_GIF_PREREQ(maj, min) \ - (LOCAL_GIF_VERSION >= (((maj) << 8) | (min))) -#else -# define LOCAL_GIF_VERSION 0 -# define LOCAL_GIF_PREREQ(maj, min) 0 -#endif - -#if !LOCAL_GIF_PREREQ(5, 0) - -// Added in v5.0 -typedef struct { - int DisposalMode; -#define DISPOSAL_UNSPECIFIED 0 // No disposal specified -#define DISPOSE_DO_NOT 1 // Leave image in place -#define DISPOSE_BACKGROUND 2 // Set area to background color -#define DISPOSE_PREVIOUS 3 // Restore to previous content - int UserInputFlag; // User confirmation required before disposal - int DelayTime; // Pre-display delay in 0.01sec units - int TransparentColor; // Palette index for transparency, -1 if none -#define NO_TRANSPARENT_COLOR -1 -} GraphicsControlBlock; - -static int DGifExtensionToGCB(const size_t GifExtensionLength, - const GifByteType* GifExtension, - GraphicsControlBlock* gcb) { - if (GifExtensionLength != 4) { - return GIF_ERROR; - } - gcb->DisposalMode = (GifExtension[0] >> 2) & 0x07; - gcb->UserInputFlag = (GifExtension[0] & 0x02) != 0; - gcb->DelayTime = GifExtension[1] | (GifExtension[2] << 8); - if (GifExtension[0] & 0x01) { - gcb->TransparentColor = (int)GifExtension[3]; - } else { - gcb->TransparentColor = NO_TRANSPARENT_COLOR; - } - return GIF_OK; -} - -static int DGifSavedExtensionToGCB(GifFileType* GifFile, int ImageIndex, - GraphicsControlBlock* gcb) { - int i; - if (ImageIndex < 0 || ImageIndex > GifFile->ImageCount - 1) { - return GIF_ERROR; - } - gcb->DisposalMode = DISPOSAL_UNSPECIFIED; - gcb->UserInputFlag = 0; - gcb->DelayTime = 0; - gcb->TransparentColor = NO_TRANSPARENT_COLOR; - - for (i = 0; i < GifFile->SavedImages[ImageIndex].ExtensionBlockCount; i++) { - ExtensionBlock* ep = &GifFile->SavedImages[ImageIndex].ExtensionBlocks[i]; - if (ep->Function == GRAPHICS_EXT_FUNC_CODE) { - return DGifExtensionToGCB( - ep->ByteCount, (const GifByteType*)ep->Bytes, gcb); - } - } - return GIF_ERROR; -} - -#define CONTINUE_EXT_FUNC_CODE 0x00 - -// Signature was changed in v5.0 -#define DGifOpenFileName(a, b) DGifOpenFileName(a) - -#endif // !LOCAL_GIF_PREREQ(5, 0) - -// Signature changed in v5.1 -#if !LOCAL_GIF_PREREQ(5, 1) -#define DGifCloseFile(a, b) DGifCloseFile(a) -#endif - -static int IsKeyFrameGIF(const GifImageDesc* prev_desc, int prev_dispose, - const DecodedFrame* const prev_frame, - int canvas_width, int canvas_height) { - if (prev_frame == NULL) return 1; - if (prev_dispose == DISPOSE_BACKGROUND) { - if (IsFullFrame(prev_desc->Width, prev_desc->Height, - canvas_width, canvas_height)) { - return 1; - } - if (prev_frame->is_key_frame) return 1; - } - return 0; -} - -static int GetTransparentIndexGIF(GifFileType* gif) { - GraphicsControlBlock first_gcb; - memset(&first_gcb, 0, sizeof(first_gcb)); - DGifSavedExtensionToGCB(gif, 0, &first_gcb); - return first_gcb.TransparentColor; -} - -static uint32_t GetBackgroundColorGIF(GifFileType* gif) { - const int transparent_index = GetTransparentIndexGIF(gif); - const ColorMapObject* const color_map = gif->SColorMap; - if (transparent_index != NO_TRANSPARENT_COLOR && - gif->SBackGroundColor == transparent_index) { - return 0x00000000; // Special case: transparent black. - } else if (color_map == NULL || color_map->Colors == NULL - || gif->SBackGroundColor >= color_map->ColorCount) { - return 0xffffffff; // Invalid: assume white. - } else { - const GifColorType color = color_map->Colors[gif->SBackGroundColor]; - return (0xff << 24) | - (color.Red << 16) | - (color.Green << 8) | - (color.Blue << 0); - } -} - -// Find appropriate app extension and get loop count from the next extension. -// We use Chrome's interpretation of the 'loop_count' semantics: -// if not present -> loop once -// if present and loop_count == 0, return 0 ('infinite'). -// if present and loop_count != 0, it's the number of *extra* loops -// so we need to return loop_count + 1 as total loop number. -static uint32_t GetLoopCountGIF(const GifFileType* const gif) { - int i; - for (i = 0; i < gif->ImageCount; ++i) { - const SavedImage* const image = &gif->SavedImages[i]; - int j; - for (j = 0; (j + 1) < image->ExtensionBlockCount; ++j) { - const ExtensionBlock* const eb1 = image->ExtensionBlocks + j; - const ExtensionBlock* const eb2 = image->ExtensionBlocks + j + 1; - const char* const signature = (const char*)eb1->Bytes; - const int signature_is_ok = - (eb1->Function == APPLICATION_EXT_FUNC_CODE) && - (eb1->ByteCount == 11) && - (!memcmp(signature, "NETSCAPE2.0", 11) || - !memcmp(signature, "ANIMEXTS1.0", 11)); - if (signature_is_ok && - eb2->Function == CONTINUE_EXT_FUNC_CODE && eb2->ByteCount >= 3 && - eb2->Bytes[0] == 1) { - const uint32_t extra_loop = ((uint32_t)(eb2->Bytes[2]) << 8) + - ((uint32_t)(eb2->Bytes[1]) << 0); - return (extra_loop > 0) ? extra_loop + 1 : 0; - } - } - } - return 1; // Default. -} - -// Get duration of 'n'th frame in milliseconds. -static int GetFrameDurationGIF(GifFileType* gif, int n) { - GraphicsControlBlock gcb; - memset(&gcb, 0, sizeof(gcb)); - DGifSavedExtensionToGCB(gif, n, &gcb); - return gcb.DelayTime * 10; -} - -// Returns true if frame 'target' completely covers 'covered'. -static int CoversFrameGIF(const GifImageDesc* const target, - const GifImageDesc* const covered) { - return target->Left <= covered->Left && - covered->Left + covered->Width <= target->Left + target->Width && - target->Top <= covered->Top && - covered->Top + covered->Height <= target->Top + target->Height; -} - -static void RemapPixelsGIF(const uint8_t* const src, - const ColorMapObject* const cmap, - int transparent_color, int len, uint8_t* dst) { - int i; - for (i = 0; i < len; ++i) { - if (src[i] != transparent_color) { - // If a pixel in the current frame is transparent, we don't modify it, so - // that we can see-through the corresponding pixel from an earlier frame. - const GifColorType c = cmap->Colors[src[i]]; - dst[4 * i + 0] = c.Red; - dst[4 * i + 1] = c.Green; - dst[4 * i + 2] = c.Blue; - dst[4 * i + 3] = 0xff; - } - } -} - -static int ReadFrameGIF(const SavedImage* const gif_image, - const ColorMapObject* cmap, int transparent_color, - int out_stride, uint8_t* const dst) { - const GifImageDesc* image_desc = &gif_image->ImageDesc; - const uint8_t* in; - uint8_t* out; - int j; - - if (image_desc->ColorMap) cmap = image_desc->ColorMap; - - if (cmap == NULL || cmap->ColorCount != (1 << cmap->BitsPerPixel)) { - fprintf(stderr, "Potentially corrupt color map.\n"); - return 0; - } - - in = (const uint8_t*)gif_image->RasterBits; - out = dst + image_desc->Top * out_stride + image_desc->Left * kNumChannels; - - for (j = 0; j < image_desc->Height; ++j) { - RemapPixelsGIF(in, cmap, transparent_color, image_desc->Width, out); - in += image_desc->Width; - out += out_stride; - } - return 1; -} - -// Read animated GIF bitstream from 'filename' into 'AnimatedImage' struct. -static int ReadAnimatedGIF(const char filename[], AnimatedImage* const image, - int dump_frames, const char dump_folder[]) { - uint32_t frame_count; - uint32_t canvas_width, canvas_height; - uint32_t i; - int gif_error; - GifFileType* gif; - - gif = DGifOpenFileUnicode((const W_CHAR*)filename, NULL); - if (gif == NULL) { - WFPRINTF(stderr, "Could not read file: %s.\n", (const W_CHAR*)filename); - return 0; - } - - gif_error = DGifSlurp(gif); - if (gif_error != GIF_OK) { - WFPRINTF(stderr, "Could not parse image: %s.\n", (const W_CHAR*)filename); - GIFDisplayError(gif, gif_error); - DGifCloseFile(gif, NULL); - return 0; - } - - // Animation properties. - image->canvas_width = (uint32_t)gif->SWidth; - image->canvas_height = (uint32_t)gif->SHeight; - if (image->canvas_width > MAX_CANVAS_SIZE || - image->canvas_height > MAX_CANVAS_SIZE) { - fprintf(stderr, "Invalid canvas dimension: %d x %d\n", - image->canvas_width, image->canvas_height); - DGifCloseFile(gif, NULL); - return 0; - } - image->loop_count = GetLoopCountGIF(gif); - image->bgcolor = GetBackgroundColorGIF(gif); - - frame_count = (uint32_t)gif->ImageCount; - if (frame_count == 0) { - DGifCloseFile(gif, NULL); - return 0; - } - - if (image->canvas_width == 0 || image->canvas_height == 0) { - image->canvas_width = gif->SavedImages[0].ImageDesc.Width; - image->canvas_height = gif->SavedImages[0].ImageDesc.Height; - gif->SavedImages[0].ImageDesc.Left = 0; - gif->SavedImages[0].ImageDesc.Top = 0; - if (image->canvas_width == 0 || image->canvas_height == 0) { - fprintf(stderr, "Invalid canvas size in GIF.\n"); - DGifCloseFile(gif, NULL); - return 0; - } - } - // Allocate frames. - AllocateFrames(image, frame_count); - - canvas_width = image->canvas_width; - canvas_height = image->canvas_height; - - // Decode and reconstruct frames. - for (i = 0; i < frame_count; ++i) { - const int canvas_width_in_bytes = canvas_width * kNumChannels; - const SavedImage* const curr_gif_image = &gif->SavedImages[i]; - GraphicsControlBlock curr_gcb; - DecodedFrame* curr_frame; - uint8_t* curr_rgba; - - memset(&curr_gcb, 0, sizeof(curr_gcb)); - DGifSavedExtensionToGCB(gif, i, &curr_gcb); - - curr_frame = &image->frames[i]; - curr_rgba = curr_frame->rgba; - curr_frame->duration = GetFrameDurationGIF(gif, i); - // Force frames with a small or no duration to 100ms to be consistent - // with web browsers and other transcoding tools (like gif2webp itself). - if (curr_frame->duration <= 10) curr_frame->duration = 100; - - if (i == 0) { // Initialize as transparent. - curr_frame->is_key_frame = 1; - ZeroFillCanvas(curr_rgba, canvas_width, canvas_height); - } else { - DecodedFrame* const prev_frame = &image->frames[i - 1]; - const GifImageDesc* const prev_desc = &gif->SavedImages[i - 1].ImageDesc; - GraphicsControlBlock prev_gcb; - memset(&prev_gcb, 0, sizeof(prev_gcb)); - DGifSavedExtensionToGCB(gif, i - 1, &prev_gcb); - - curr_frame->is_key_frame = - IsKeyFrameGIF(prev_desc, prev_gcb.DisposalMode, prev_frame, - canvas_width, canvas_height); - - if (curr_frame->is_key_frame) { // Initialize as transparent. - ZeroFillCanvas(curr_rgba, canvas_width, canvas_height); - } else { - int prev_frame_disposed, curr_frame_opaque; - int prev_frame_completely_covered; - // Initialize with previous canvas. - uint8_t* const prev_rgba = image->frames[i - 1].rgba; - CopyCanvas(prev_rgba, curr_rgba, canvas_width, canvas_height); - - // Dispose previous frame rectangle. - prev_frame_disposed = - (prev_gcb.DisposalMode == DISPOSE_BACKGROUND || - prev_gcb.DisposalMode == DISPOSE_PREVIOUS); - curr_frame_opaque = - (curr_gcb.TransparentColor == NO_TRANSPARENT_COLOR); - prev_frame_completely_covered = - curr_frame_opaque && - CoversFrameGIF(&curr_gif_image->ImageDesc, prev_desc); - - if (prev_frame_disposed && !prev_frame_completely_covered) { - switch (prev_gcb.DisposalMode) { - case DISPOSE_BACKGROUND: { - ZeroFillFrameRect(curr_rgba, canvas_width_in_bytes, - prev_desc->Left, prev_desc->Top, - prev_desc->Width, prev_desc->Height); - break; - } - case DISPOSE_PREVIOUS: { - int src_frame_num = i - 2; - while (src_frame_num >= 0) { - GraphicsControlBlock src_frame_gcb; - memset(&src_frame_gcb, 0, sizeof(src_frame_gcb)); - DGifSavedExtensionToGCB(gif, src_frame_num, &src_frame_gcb); - if (src_frame_gcb.DisposalMode != DISPOSE_PREVIOUS) break; - --src_frame_num; - } - if (src_frame_num >= 0) { - // Restore pixels inside previous frame rectangle to - // corresponding pixels in source canvas. - uint8_t* const src_frame_rgba = - image->frames[src_frame_num].rgba; - CopyFrameRectangle(src_frame_rgba, curr_rgba, - canvas_width_in_bytes, - prev_desc->Left, prev_desc->Top, - prev_desc->Width, prev_desc->Height); - } else { - // Source canvas doesn't exist. So clear previous frame - // rectangle to background. - ZeroFillFrameRect(curr_rgba, canvas_width_in_bytes, - prev_desc->Left, prev_desc->Top, - prev_desc->Width, prev_desc->Height); - } - break; - } - default: - break; // Nothing to do. - } - } - } - } - - // Decode current frame. - if (!ReadFrameGIF(curr_gif_image, gif->SColorMap, curr_gcb.TransparentColor, - canvas_width_in_bytes, curr_rgba)) { - DGifCloseFile(gif, NULL); - return 0; - } - - if (dump_frames) { - if (!DumpFrame(filename, dump_folder, i, curr_rgba, - canvas_width, canvas_height)) { - DGifCloseFile(gif, NULL); - return 0; - } - } - } - image->format = ANIM_GIF; - DGifCloseFile(gif, NULL); - return 1; -} - -#else - -static int IsGIF(const WebPData* const data) { - (void)data; - return 0; -} - -static int ReadAnimatedGIF(const char filename[], AnimatedImage* const image, - int dump_frames, const char dump_folder[]) { - (void)filename; - (void)image; - (void)dump_frames; - (void)dump_folder; - fprintf(stderr, "GIF support not compiled. Please install the libgif-dev " - "package before building.\n"); - return 0; -} - -#endif // WEBP_HAVE_GIF - -// ----------------------------------------------------------------------------- - -int ReadAnimatedImage(const char filename[], AnimatedImage* const image, - int dump_frames, const char dump_folder[]) { - int ok = 0; - WebPData webp_data; - - WebPDataInit(&webp_data); - memset(image, 0, sizeof(*image)); - - if (!ImgIoUtilReadFile(filename, &webp_data.bytes, &webp_data.size)) { - WFPRINTF(stderr, "Error reading file: %s\n", (const W_CHAR*)filename); - return 0; - } - - if (IsWebP(&webp_data)) { - ok = ReadAnimatedWebP(filename, &webp_data, image, dump_frames, - dump_folder); - } else if (IsGIF(&webp_data)) { - ok = ReadAnimatedGIF(filename, image, dump_frames, dump_folder); - } else { - WFPRINTF(stderr, - "Unknown file type: %s. Supported file types are WebP and GIF\n", - (const W_CHAR*)filename); - ok = 0; - } - if (!ok) ClearAnimatedImage(image); - WebPDataClear(&webp_data); - return ok; -} - -static void Accumulate(double v1, double v2, double* const max_diff, - double* const sse) { - const double diff = fabs(v1 - v2); - if (diff > *max_diff) *max_diff = diff; - *sse += diff * diff; -} - -void GetDiffAndPSNR(const uint8_t rgba1[], const uint8_t rgba2[], - uint32_t width, uint32_t height, int premultiply, - int* const max_diff, double* const psnr) { - const uint32_t stride = width * kNumChannels; - const int kAlphaChannel = kNumChannels - 1; - double f_max_diff = 0.; - double sse = 0.; - uint32_t x, y; - for (y = 0; y < height; ++y) { - for (x = 0; x < stride; x += kNumChannels) { - int k; - const size_t offset = (size_t)y * stride + x; - const int alpha1 = rgba1[offset + kAlphaChannel]; - const int alpha2 = rgba2[offset + kAlphaChannel]; - Accumulate(alpha1, alpha2, &f_max_diff, &sse); - if (!premultiply) { - for (k = 0; k < kAlphaChannel; ++k) { - Accumulate(rgba1[offset + k], rgba2[offset + k], &f_max_diff, &sse); - } - } else { - // premultiply R/G/B channels with alpha value - for (k = 0; k < kAlphaChannel; ++k) { - Accumulate(rgba1[offset + k] * alpha1 / 255., - rgba2[offset + k] * alpha2 / 255., - &f_max_diff, &sse); - } - } - } - } - *max_diff = (int)f_max_diff; - if (*max_diff == 0) { - *psnr = 99.; // PSNR when images are identical. - } else { - sse /= stride * height; - *psnr = 4.3429448 * log(255. * 255. / sse); - } -} - -void GetAnimatedImageVersions(int* const decoder_version, - int* const demux_version) { - *decoder_version = WebPGetDecoderVersion(); - *demux_version = WebPGetDemuxVersion(); -} diff --git a/Extended/libwebp/examples/anim_util.h b/Extended/libwebp/examples/anim_util.h deleted file mode 100644 index 574e032..0000000 --- a/Extended/libwebp/examples/anim_util.h +++ /dev/null @@ -1,73 +0,0 @@ -// Copyright 2015 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Utilities for animated images - -#ifndef WEBP_EXAMPLES_ANIM_UTIL_H_ -#define WEBP_EXAMPLES_ANIM_UTIL_H_ - -#ifdef HAVE_CONFIG_H -#include "webp/config.h" -#endif - -#include "webp/types.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef enum { - ANIM_GIF, - ANIM_WEBP -} AnimatedFileFormat; - -typedef struct { - uint8_t* rgba; // Decoded and reconstructed full frame. - int duration; // Frame duration in milliseconds. - int is_key_frame; // True if this frame is a key-frame. -} DecodedFrame; - -typedef struct { - AnimatedFileFormat format; - uint32_t canvas_width; - uint32_t canvas_height; - uint32_t bgcolor; - uint32_t loop_count; - DecodedFrame* frames; - uint32_t num_frames; - void* raw_mem; -} AnimatedImage; - -// Deallocate everything in 'image' (but not the object itself). -void ClearAnimatedImage(AnimatedImage* const image); - -// Read animated image file into 'AnimatedImage' struct. -// If 'dump_frames' is true, dump frames to 'dump_folder'. -// Previous content of 'image' is obliterated. -// Upon successful return, content of 'image' must be deleted by -// calling 'ClearAnimatedImage'. -int ReadAnimatedImage(const char filename[], AnimatedImage* const image, - int dump_frames, const char dump_folder[]); - -// Given two RGBA buffers, calculate max pixel difference and PSNR. -// If 'premultiply' is true, R/G/B values will be pre-multiplied by the -// transparency before comparison. -void GetDiffAndPSNR(const uint8_t rgba1[], const uint8_t rgba2[], - uint32_t width, uint32_t height, int premultiply, - int* const max_diff, double* const psnr); - -// Return library versions used by anim_util. -void GetAnimatedImageVersions(int* const decoder_version, - int* const demux_version); - -#ifdef __cplusplus -} // extern "C" -#endif - -#endif // WEBP_EXAMPLES_ANIM_UTIL_H_ diff --git a/Extended/libwebp/examples/cwebp.c b/Extended/libwebp/examples/cwebp.c deleted file mode 100644 index aa96caf..0000000 --- a/Extended/libwebp/examples/cwebp.c +++ /dev/null @@ -1,1183 +0,0 @@ -// Copyright 2011 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// simple command line calling the WebPEncode function. -// Encodes a raw .YUV into WebP bitstream -// -// Author: Skal (pascal.massimino@gmail.com) - -#include -#include -#include - -#ifdef HAVE_CONFIG_H -#include "webp/config.h" -#endif - -#include "../examples/example_util.h" -#include "../imageio/image_dec.h" -#include "../imageio/imageio_util.h" -#include "./stopwatch.h" -#include "./unicode.h" -#include "webp/encode.h" - -#ifndef WEBP_DLL -#ifdef __cplusplus -extern "C" { -#endif - -extern void* VP8GetCPUInfo; // opaque forward declaration. - -#ifdef __cplusplus -} // extern "C" -#endif -#endif // WEBP_DLL - -//------------------------------------------------------------------------------ - -static int verbose = 0; - -static int ReadYUV(const uint8_t* const data, size_t data_size, - WebPPicture* const pic) { - const int use_argb = pic->use_argb; - const int uv_width = (pic->width + 1) / 2; - const int uv_height = (pic->height + 1) / 2; - const int y_plane_size = pic->width * pic->height; - const int uv_plane_size = uv_width * uv_height; - const size_t expected_data_size = y_plane_size + 2 * uv_plane_size; - - if (data_size != expected_data_size) { - fprintf(stderr, - "input data doesn't have the expected size (%d instead of %d)\n", - (int)data_size, (int)expected_data_size); - return 0; - } - - pic->use_argb = 0; - if (!WebPPictureAlloc(pic)) return 0; - ImgIoUtilCopyPlane(data, pic->width, pic->y, pic->y_stride, - pic->width, pic->height); - ImgIoUtilCopyPlane(data + y_plane_size, uv_width, - pic->u, pic->uv_stride, uv_width, uv_height); - ImgIoUtilCopyPlane(data + y_plane_size + uv_plane_size, uv_width, - pic->v, pic->uv_stride, uv_width, uv_height); - return use_argb ? WebPPictureYUVAToARGB(pic) : 1; -} - -#ifdef HAVE_WINCODEC_H - -static int ReadPicture(const char* const filename, WebPPicture* const pic, - int keep_alpha, Metadata* const metadata) { - int ok = 0; - const uint8_t* data = NULL; - size_t data_size = 0; - if (pic->width != 0 && pic->height != 0) { - ok = ImgIoUtilReadFile(filename, &data, &data_size); - ok = ok && ReadYUV(data, data_size, pic); - } else { - // If no size specified, try to decode it using WIC. - ok = ReadPictureWithWIC(filename, pic, keep_alpha, metadata); - if (!ok) { - ok = ImgIoUtilReadFile(filename, &data, &data_size); - ok = ok && ReadWebP(data, data_size, pic, keep_alpha, metadata); - } - } - if (!ok) { - WFPRINTF(stderr, "Error! Could not process file %s\n", - (const W_CHAR*)filename); - } - free((void*)data); - return ok; -} - -#else // !HAVE_WINCODEC_H - -static int ReadPicture(const char* const filename, WebPPicture* const pic, - int keep_alpha, Metadata* const metadata) { - const uint8_t* data = NULL; - size_t data_size = 0; - int ok = 0; - - ok = ImgIoUtilReadFile(filename, &data, &data_size); - if (!ok) goto End; - - if (pic->width == 0 || pic->height == 0) { - WebPImageReader reader = WebPGuessImageReader(data, data_size); - ok = reader(data, data_size, pic, keep_alpha, metadata); - } else { - // If image size is specified, infer it as YUV format. - ok = ReadYUV(data, data_size, pic); - } - End: - if (!ok) { - WFPRINTF(stderr, "Error! Could not process file %s\n", - (const W_CHAR*)filename); - } - free((void*)data); - return ok; -} - -#endif // !HAVE_WINCODEC_H - -static void AllocExtraInfo(WebPPicture* const pic) { - const int mb_w = (pic->width + 15) / 16; - const int mb_h = (pic->height + 15) / 16; - pic->extra_info = - (uint8_t*)WebPMalloc(mb_w * mb_h * sizeof(*pic->extra_info)); -} - -static void PrintByteCount(const int bytes[4], int total_size, - int* const totals) { - int s; - int total = 0; - for (s = 0; s < 4; ++s) { - fprintf(stderr, "| %7d ", bytes[s]); - total += bytes[s]; - if (totals) totals[s] += bytes[s]; - } - fprintf(stderr, "| %7d (%.1f%%)\n", total, 100.f * total / total_size); -} - -static void PrintPercents(const int counts[4]) { - int s; - const int total = counts[0] + counts[1] + counts[2] + counts[3]; - for (s = 0; s < 4; ++s) { - fprintf(stderr, "| %2d%%", (int)(100. * counts[s] / total + .5)); - } - fprintf(stderr, "| %7d\n", total); -} - -static void PrintValues(const int values[4]) { - int s; - for (s = 0; s < 4; ++s) { - fprintf(stderr, "| %7d ", values[s]); - } - fprintf(stderr, "|\n"); -} - -static void PrintFullLosslessInfo(const WebPAuxStats* const stats, - const char* const description) { - fprintf(stderr, "Lossless-%s compressed size: %d bytes\n", - description, stats->lossless_size); - fprintf(stderr, " * Header size: %d bytes, image data size: %d\n", - stats->lossless_hdr_size, stats->lossless_data_size); - if (stats->lossless_features) { - fprintf(stderr, " * Lossless features used:"); - if (stats->lossless_features & 1) fprintf(stderr, " PREDICTION"); - if (stats->lossless_features & 2) fprintf(stderr, " CROSS-COLOR-TRANSFORM"); - if (stats->lossless_features & 4) fprintf(stderr, " SUBTRACT-GREEN"); - if (stats->lossless_features & 8) fprintf(stderr, " PALETTE"); - fprintf(stderr, "\n"); - } - fprintf(stderr, " * Precision Bits: histogram=%d transform=%d cache=%d\n", - stats->histogram_bits, stats->transform_bits, stats->cache_bits); - if (stats->palette_size > 0) { - fprintf(stderr, " * Palette size: %d\n", stats->palette_size); - } -} - -static void PrintExtraInfoLossless(const WebPPicture* const pic, - int short_output, - const char* const file_name) { - const WebPAuxStats* const stats = pic->stats; - if (short_output) { - fprintf(stderr, "%7d %2.2f\n", stats->coded_size, stats->PSNR[3]); - } else { - WFPRINTF(stderr, "File: %s\n", (const W_CHAR*)file_name); - fprintf(stderr, "Dimension: %d x %d\n", pic->width, pic->height); - fprintf(stderr, "Output: %d bytes (%.2f bpp)\n", stats->coded_size, - 8.f * stats->coded_size / pic->width / pic->height); - PrintFullLosslessInfo(stats, "ARGB"); - } -} - -static void PrintExtraInfoLossy(const WebPPicture* const pic, int short_output, - int full_details, - const char* const file_name) { - const WebPAuxStats* const stats = pic->stats; - if (short_output) { - fprintf(stderr, "%7d %2.2f\n", stats->coded_size, stats->PSNR[3]); - } else { - const int num_i4 = stats->block_count[0]; - const int num_i16 = stats->block_count[1]; - const int num_skip = stats->block_count[2]; - const int total = num_i4 + num_i16; - WFPRINTF(stderr, "File: %s\n", (const W_CHAR*)file_name); - fprintf(stderr, "Dimension: %d x %d%s\n", - pic->width, pic->height, - stats->alpha_data_size ? " (with alpha)" : ""); - fprintf(stderr, "Output: " - "%d bytes Y-U-V-All-PSNR %2.2f %2.2f %2.2f %2.2f dB\n" - " (%.2f bpp)\n", - stats->coded_size, - stats->PSNR[0], stats->PSNR[1], stats->PSNR[2], stats->PSNR[3], - 8.f * stats->coded_size / pic->width / pic->height); - if (total > 0) { - int totals[4] = { 0, 0, 0, 0 }; - fprintf(stderr, "block count: intra4: %6d (%.2f%%)\n" - " intra16: %6d (%.2f%%)\n" - " skipped: %6d (%.2f%%)\n", - num_i4, 100.f * num_i4 / total, - num_i16, 100.f * num_i16 / total, - num_skip, 100.f * num_skip / total); - fprintf(stderr, "bytes used: header: %6d (%.1f%%)\n" - " mode-partition: %6d (%.1f%%)\n", - stats->header_bytes[0], - 100.f * stats->header_bytes[0] / stats->coded_size, - stats->header_bytes[1], - 100.f * stats->header_bytes[1] / stats->coded_size); - if (stats->alpha_data_size > 0) { - fprintf(stderr, " transparency: %6d (%.1f dB)\n", - stats->alpha_data_size, stats->PSNR[4]); - } - fprintf(stderr, " Residuals bytes " - "|segment 1|segment 2|segment 3" - "|segment 4| total\n"); - if (full_details) { - fprintf(stderr, " intra4-coeffs: "); - PrintByteCount(stats->residual_bytes[0], stats->coded_size, totals); - fprintf(stderr, " intra16-coeffs: "); - PrintByteCount(stats->residual_bytes[1], stats->coded_size, totals); - fprintf(stderr, " chroma coeffs: "); - PrintByteCount(stats->residual_bytes[2], stats->coded_size, totals); - } - fprintf(stderr, " macroblocks: "); - PrintPercents(stats->segment_size); - fprintf(stderr, " quantizer: "); - PrintValues(stats->segment_quant); - fprintf(stderr, " filter level: "); - PrintValues(stats->segment_level); - if (full_details) { - fprintf(stderr, "------------------+---------"); - fprintf(stderr, "+---------+---------+---------+-----------------\n"); - fprintf(stderr, " segments total: "); - PrintByteCount(totals, stats->coded_size, NULL); - } - } - if (stats->lossless_size > 0) { - PrintFullLosslessInfo(stats, "alpha"); - } - } -} - -static void PrintMapInfo(const WebPPicture* const pic) { - if (pic->extra_info != NULL) { - const int mb_w = (pic->width + 15) / 16; - const int mb_h = (pic->height + 15) / 16; - const int type = pic->extra_info_type; - int x, y; - for (y = 0; y < mb_h; ++y) { - for (x = 0; x < mb_w; ++x) { - const int c = pic->extra_info[x + y * mb_w]; - if (type == 1) { // intra4/intra16 - fprintf(stderr, "%c", "+."[c]); - } else if (type == 2) { // segments - fprintf(stderr, "%c", ".-*X"[c]); - } else if (type == 3) { // quantizers - fprintf(stderr, "%.2d ", c); - } else if (type == 6 || type == 7) { - fprintf(stderr, "%3d ", c); - } else { - fprintf(stderr, "0x%.2x ", c); - } - } - fprintf(stderr, "\n"); - } - } -} - -//------------------------------------------------------------------------------ - -static int MyWriter(const uint8_t* data, size_t data_size, - const WebPPicture* const pic) { - FILE* const out = (FILE*)pic->custom_ptr; - return data_size ? (fwrite(data, data_size, 1, out) == 1) : 1; -} - -// Dumps a picture as a PGM file using the IMC4 layout. -static int DumpPicture(const WebPPicture* const picture, const char* PGM_name) { - int y; - const int uv_width = (picture->width + 1) / 2; - const int uv_height = (picture->height + 1) / 2; - const int stride = (picture->width + 1) & ~1; - const uint8_t* src_y = picture->y; - const uint8_t* src_u = picture->u; - const uint8_t* src_v = picture->v; - const uint8_t* src_a = picture->a; - const int alpha_height = - WebPPictureHasTransparency(picture) ? picture->height : 0; - const int height = picture->height + uv_height + alpha_height; - FILE* const f = WFOPEN(PGM_name, "wb"); - if (f == NULL) return 0; - fprintf(f, "P5\n%d %d\n255\n", stride, height); - for (y = 0; y < picture->height; ++y) { - if (fwrite(src_y, picture->width, 1, f) != 1) return 0; - if (picture->width & 1) fputc(0, f); // pad - src_y += picture->y_stride; - } - for (y = 0; y < uv_height; ++y) { - if (fwrite(src_u, uv_width, 1, f) != 1) return 0; - if (fwrite(src_v, uv_width, 1, f) != 1) return 0; - src_u += picture->uv_stride; - src_v += picture->uv_stride; - } - for (y = 0; y < alpha_height; ++y) { - if (fwrite(src_a, picture->width, 1, f) != 1) return 0; - if (picture->width & 1) fputc(0, f); // pad - src_a += picture->a_stride; - } - fclose(f); - return 1; -} - -// ----------------------------------------------------------------------------- -// Metadata writing. - -enum { - METADATA_EXIF = (1 << 0), - METADATA_ICC = (1 << 1), - METADATA_XMP = (1 << 2), - METADATA_ALL = METADATA_EXIF | METADATA_ICC | METADATA_XMP -}; - -static const int kChunkHeaderSize = 8; -static const int kTagSize = 4; - -static void PrintMetadataInfo(const Metadata* const metadata, - int metadata_written) { - if (metadata == NULL || metadata_written == 0) return; - - fprintf(stderr, "Metadata:\n"); - if (metadata_written & METADATA_ICC) { - fprintf(stderr, " * ICC profile: %6d bytes\n", (int)metadata->iccp.size); - } - if (metadata_written & METADATA_EXIF) { - fprintf(stderr, " * EXIF data: %6d bytes\n", (int)metadata->exif.size); - } - if (metadata_written & METADATA_XMP) { - fprintf(stderr, " * XMP data: %6d bytes\n", (int)metadata->xmp.size); - } -} - -// Outputs, in little endian, 'num' bytes from 'val' to 'out'. -static int WriteLE(FILE* const out, uint32_t val, int num) { - uint8_t buf[4]; - int i; - for (i = 0; i < num; ++i) { - buf[i] = (uint8_t)(val & 0xff); - val >>= 8; - } - return (fwrite(buf, num, 1, out) == 1); -} - -static int WriteLE24(FILE* const out, uint32_t val) { - return WriteLE(out, val, 3); -} - -static int WriteLE32(FILE* const out, uint32_t val) { - return WriteLE(out, val, 4); -} - -static int WriteMetadataChunk(FILE* const out, const char fourcc[4], - const MetadataPayload* const payload) { - const uint8_t zero = 0; - const size_t need_padding = payload->size & 1; - int ok = (fwrite(fourcc, kTagSize, 1, out) == 1); - ok = ok && WriteLE32(out, (uint32_t)payload->size); - ok = ok && (fwrite(payload->bytes, payload->size, 1, out) == 1); - return ok && (fwrite(&zero, need_padding, need_padding, out) == need_padding); -} - -// Sets 'flag' in 'vp8x_flags' and updates 'metadata_size' with the size of the -// chunk if there is metadata and 'keep' is true. -static int UpdateFlagsAndSize(const MetadataPayload* const payload, - int keep, int flag, - uint32_t* vp8x_flags, uint64_t* metadata_size) { - if (keep && payload->bytes != NULL && payload->size > 0) { - *vp8x_flags |= flag; - *metadata_size += kChunkHeaderSize + payload->size + (payload->size & 1); - return 1; - } - return 0; -} - -// Writes a WebP file using the image contained in 'memory_writer' and the -// metadata from 'metadata'. Metadata is controlled by 'keep_metadata' and the -// availability in 'metadata'. Returns true on success. -// For details see doc/webp-container-spec.txt#extended-file-format. -static int WriteWebPWithMetadata(FILE* const out, - const WebPPicture* const picture, - const WebPMemoryWriter* const memory_writer, - const Metadata* const metadata, - int keep_metadata, - int* const metadata_written) { - const char kVP8XHeader[] = "VP8X\x0a\x00\x00\x00"; - const int kAlphaFlag = 0x10; - const int kEXIFFlag = 0x08; - const int kICCPFlag = 0x20; - const int kXMPFlag = 0x04; - const size_t kRiffHeaderSize = 12; - const size_t kMaxChunkPayload = ~0 - kChunkHeaderSize - 1; - const size_t kMinSize = kRiffHeaderSize + kChunkHeaderSize; - uint32_t flags = 0; - uint64_t metadata_size = 0; - const int write_exif = UpdateFlagsAndSize(&metadata->exif, - !!(keep_metadata & METADATA_EXIF), - kEXIFFlag, &flags, &metadata_size); - const int write_iccp = UpdateFlagsAndSize(&metadata->iccp, - !!(keep_metadata & METADATA_ICC), - kICCPFlag, &flags, &metadata_size); - const int write_xmp = UpdateFlagsAndSize(&metadata->xmp, - !!(keep_metadata & METADATA_XMP), - kXMPFlag, &flags, &metadata_size); - uint8_t* webp = memory_writer->mem; - size_t webp_size = memory_writer->size; - - *metadata_written = 0; - - if (webp_size < kMinSize) return 0; - if (webp_size - kChunkHeaderSize + metadata_size > kMaxChunkPayload) { - fprintf(stderr, "Error! Addition of metadata would exceed " - "container size limit.\n"); - return 0; - } - - if (metadata_size > 0) { - const int kVP8XChunkSize = 18; - const int has_vp8x = !memcmp(webp + kRiffHeaderSize, "VP8X", kTagSize); - const uint32_t riff_size = (uint32_t)(webp_size - kChunkHeaderSize + - (has_vp8x ? 0 : kVP8XChunkSize) + - metadata_size); - // RIFF - int ok = (fwrite(webp, kTagSize, 1, out) == 1); - // RIFF size (file header size is not recorded) - ok = ok && WriteLE32(out, riff_size); - webp += kChunkHeaderSize; - webp_size -= kChunkHeaderSize; - // WEBP - ok = ok && (fwrite(webp, kTagSize, 1, out) == 1); - webp += kTagSize; - webp_size -= kTagSize; - if (has_vp8x) { // update the existing VP8X flags - webp[kChunkHeaderSize] |= (uint8_t)(flags & 0xff); - ok = ok && (fwrite(webp, kVP8XChunkSize, 1, out) == 1); - webp += kVP8XChunkSize; - webp_size -= kVP8XChunkSize; - } else { - const int is_lossless = !memcmp(webp, "VP8L", kTagSize); - if (is_lossless) { - // Presence of alpha is stored in the 37th bit (29th after the - // signature) of VP8L data. - if (webp[kChunkHeaderSize + 4] & (1 << 4)) flags |= kAlphaFlag; - } - ok = ok && (fwrite(kVP8XHeader, kChunkHeaderSize, 1, out) == 1); - ok = ok && WriteLE32(out, flags); - ok = ok && WriteLE24(out, picture->width - 1); - ok = ok && WriteLE24(out, picture->height - 1); - } - if (write_iccp) { - ok = ok && WriteMetadataChunk(out, "ICCP", &metadata->iccp); - *metadata_written |= METADATA_ICC; - } - // Image - ok = ok && (fwrite(webp, webp_size, 1, out) == 1); - if (write_exif) { - ok = ok && WriteMetadataChunk(out, "EXIF", &metadata->exif); - *metadata_written |= METADATA_EXIF; - } - if (write_xmp) { - ok = ok && WriteMetadataChunk(out, "XMP ", &metadata->xmp); - *metadata_written |= METADATA_XMP; - } - return ok; - } - - // No metadata, just write the original image file. - return (fwrite(webp, webp_size, 1, out) == 1); -} - -//------------------------------------------------------------------------------ - -static int ProgressReport(int percent, const WebPPicture* const picture) { - fprintf(stderr, "[%s]: %3d %% \r", - (char*)picture->user_data, percent); - return 1; // all ok -} - -//------------------------------------------------------------------------------ - -static void HelpShort(void) { - printf("Usage:\n\n"); - printf(" cwebp [options] -q quality input.png -o output.webp\n\n"); - printf("where quality is between 0 (poor) to 100 (very good).\n"); - printf("Typical value is around 80.\n\n"); - printf("Try -longhelp for an exhaustive list of advanced options.\n"); -} - -static void HelpLong(void) { - printf("Usage:\n"); - printf(" cwebp [-preset <...>] [options] in_file [-o out_file]\n\n"); - printf("If input size (-s) for an image is not specified, it is\n" - "assumed to be a PNG, JPEG, TIFF or WebP file.\n"); -#ifdef HAVE_WINCODEC_H - printf("Windows builds can take as input any of the files handled by WIC.\n"); -#endif - printf("\nOptions:\n"); - printf(" -h / -help ............. short help\n"); - printf(" -H / -longhelp ......... long help\n"); - printf(" -q ............. quality factor (0:small..100:big), " - "default=75\n"); - printf(" -alpha_q ......... transparency-compression quality (0..100)," - "\n default=100\n"); - printf(" -preset ....... preset setting, one of:\n"); - printf(" default, photo, picture,\n"); - printf(" drawing, icon, text\n"); - printf(" -preset must come first, as it overwrites other parameters\n"); - printf(" -z ............... activates lossless preset with given\n" - " level in [0:fast, ..., 9:slowest]\n"); - printf("\n"); - printf(" -m ............... compression method (0=fast, 6=slowest), " - "default=4\n"); - printf(" -segments ........ number of segments to use (1..4), " - "default=4\n"); - printf(" -size ............ target size (in bytes)\n"); - printf(" -psnr .......... target PSNR (in dB. typically: 42)\n"); - printf("\n"); - printf(" -s ......... input size (width x height) for YUV\n"); - printf(" -sns ............. spatial noise shaping (0:off, 100:max), " - "default=50\n"); - printf(" -f ............... filter strength (0=off..100), " - "default=60\n"); - printf(" -sharpness ....... " - "filter sharpness (0:most .. 7:least sharp), default=0\n"); - printf(" -strong ................ use strong filter instead " - "of simple (default)\n"); - printf(" -nostrong .............. use simple filter instead of strong\n"); - printf(" -sharp_yuv ............. use sharper (and slower) RGB->YUV " - "conversion\n"); - printf(" -partition_limit . limit quality to fit the 512k limit on\n"); - printf(" " - "the first partition (0=no degradation ... 100=full)\n"); - printf(" -pass ............ analysis pass number (1..10)\n"); - printf(" -crop .. crop picture with the given rectangle\n"); - printf(" -resize ........ resize picture (after any cropping)\n"); - printf(" -mt .................... use multi-threading if available\n"); - printf(" -low_memory ............ reduce memory usage (slower encoding)\n"); - printf(" -map ............. print map of extra info\n"); - printf(" -print_psnr ............ prints averaged PSNR distortion\n"); - printf(" -print_ssim ............ prints averaged SSIM distortion\n"); - printf(" -print_lsim ............ prints local-similarity distortion\n"); - printf(" -d .......... dump the compressed output (PGM file)\n"); - printf(" -alpha_method .... transparency-compression method (0..1), " - "default=1\n"); - printf(" -alpha_filter . predictive filtering for alpha plane,\n"); - printf(" one of: none, fast (default) or best\n"); - printf(" -exact ................. preserve RGB values in transparent area, " - "default=off\n"); - printf(" -blend_alpha ..... blend colors against background color\n" - " expressed as RGB values written in\n" - " hexadecimal, e.g. 0xc0e0d0 for red=0xc0\n" - " green=0xe0 and blue=0xd0\n"); - printf(" -noalpha ............... discard any transparency information\n"); - printf(" -lossless .............. encode image losslessly, default=off\n"); - printf(" -near_lossless ... use near-lossless image\n" - " preprocessing (0..100=off), " - "default=100\n"); - printf(" -hint ......... specify image characteristics hint,\n"); - printf(" one of: photo, picture or graph\n"); - - printf("\n"); - printf(" -metadata ..... comma separated list of metadata to\n"); - printf(" "); - printf("copy from the input to the output if present.\n"); - printf(" " - "Valid values: all, none (default), exif, icc, xmp\n"); - - printf("\n"); - printf(" -short ................. condense printed message\n"); - printf(" -quiet ................. don't print anything\n"); - printf(" -version ............... print version number and exit\n"); -#ifndef WEBP_DLL - printf(" -noasm ................. disable all assembly optimizations\n"); -#endif - printf(" -v ..................... verbose, e.g. print encoding/decoding " - "times\n"); - printf(" -progress .............. report encoding progress\n"); - printf("\n"); - printf("Experimental Options:\n"); - printf(" -jpeg_like ............. roughly match expected JPEG size\n"); - printf(" -af .................... auto-adjust filter strength\n"); - printf(" -pre ............. pre-processing filter\n"); - printf("\n"); -} - -//------------------------------------------------------------------------------ -// Error messages - -static const char* const kErrorMessages[VP8_ENC_ERROR_LAST] = { - "OK", - "OUT_OF_MEMORY: Out of memory allocating objects", - "BITSTREAM_OUT_OF_MEMORY: Out of memory re-allocating byte buffer", - "NULL_PARAMETER: NULL parameter passed to function", - "INVALID_CONFIGURATION: configuration is invalid", - "BAD_DIMENSION: Bad picture dimension. Maximum width and height " - "allowed is 16383 pixels.", - "PARTITION0_OVERFLOW: Partition #0 is too big to fit 512k.\n" - "To reduce the size of this partition, try using less segments " - "with the -segments option, and eventually reduce the number of " - "header bits using -partition_limit. More details are available " - "in the manual (`man cwebp`)", - "PARTITION_OVERFLOW: Partition is too big to fit 16M", - "BAD_WRITE: Picture writer returned an I/O error", - "FILE_TOO_BIG: File would be too big to fit in 4G", - "USER_ABORT: encoding abort requested by user" -}; - -//------------------------------------------------------------------------------ - -int main(int argc, const char* argv[]) { - int return_value = -1; - const char* in_file = NULL, *out_file = NULL, *dump_file = NULL; - FILE* out = NULL; - int c; - int short_output = 0; - int quiet = 0; - int keep_alpha = 1; - int blend_alpha = 0; - uint32_t background_color = 0xffffffu; - int crop = 0, crop_x = 0, crop_y = 0, crop_w = 0, crop_h = 0; - int resize_w = 0, resize_h = 0; - int lossless_preset = 6; - int use_lossless_preset = -1; // -1=unset, 0=don't use, 1=use it - int show_progress = 0; - int keep_metadata = 0; - int metadata_written = 0; - WebPPicture picture; - int print_distortion = -1; // -1=off, 0=PSNR, 1=SSIM, 2=LSIM - WebPPicture original_picture; // when PSNR or SSIM is requested - WebPConfig config; - WebPAuxStats stats; - WebPMemoryWriter memory_writer; - Metadata metadata; - Stopwatch stop_watch; - - INIT_WARGV(argc, argv); - - MetadataInit(&metadata); - WebPMemoryWriterInit(&memory_writer); - if (!WebPPictureInit(&picture) || - !WebPPictureInit(&original_picture) || - !WebPConfigInit(&config)) { - fprintf(stderr, "Error! Version mismatch!\n"); - FREE_WARGV_AND_RETURN(-1); - } - - if (argc == 1) { - HelpShort(); - FREE_WARGV_AND_RETURN(0); - } - - for (c = 1; c < argc; ++c) { - int parse_error = 0; - if (!strcmp(argv[c], "-h") || !strcmp(argv[c], "-help")) { - HelpShort(); - FREE_WARGV_AND_RETURN(0); - } else if (!strcmp(argv[c], "-H") || !strcmp(argv[c], "-longhelp")) { - HelpLong(); - FREE_WARGV_AND_RETURN(0); - } else if (!strcmp(argv[c], "-o") && c < argc - 1) { - out_file = (const char*)GET_WARGV(argv, ++c); - } else if (!strcmp(argv[c], "-d") && c < argc - 1) { - dump_file = (const char*)GET_WARGV(argv, ++c); - config.show_compressed = 1; - } else if (!strcmp(argv[c], "-print_psnr")) { - config.show_compressed = 1; - print_distortion = 0; - } else if (!strcmp(argv[c], "-print_ssim")) { - config.show_compressed = 1; - print_distortion = 1; - } else if (!strcmp(argv[c], "-print_lsim")) { - config.show_compressed = 1; - print_distortion = 2; - } else if (!strcmp(argv[c], "-short")) { - ++short_output; - } else if (!strcmp(argv[c], "-s") && c < argc - 2) { - picture.width = ExUtilGetInt(argv[++c], 0, &parse_error); - picture.height = ExUtilGetInt(argv[++c], 0, &parse_error); - if (picture.width > WEBP_MAX_DIMENSION || picture.width < 0 || - picture.height > WEBP_MAX_DIMENSION || picture.height < 0) { - fprintf(stderr, - "Specified dimension (%d x %d) is out of range.\n", - picture.width, picture.height); - goto Error; - } - } else if (!strcmp(argv[c], "-m") && c < argc - 1) { - config.method = ExUtilGetInt(argv[++c], 0, &parse_error); - use_lossless_preset = 0; // disable -z option - } else if (!strcmp(argv[c], "-q") && c < argc - 1) { - config.quality = ExUtilGetFloat(argv[++c], &parse_error); - use_lossless_preset = 0; // disable -z option - } else if (!strcmp(argv[c], "-z") && c < argc - 1) { - lossless_preset = ExUtilGetInt(argv[++c], 0, &parse_error); - if (use_lossless_preset != 0) use_lossless_preset = 1; - } else if (!strcmp(argv[c], "-alpha_q") && c < argc - 1) { - config.alpha_quality = ExUtilGetInt(argv[++c], 0, &parse_error); - } else if (!strcmp(argv[c], "-alpha_method") && c < argc - 1) { - config.alpha_compression = ExUtilGetInt(argv[++c], 0, &parse_error); - } else if (!strcmp(argv[c], "-alpha_cleanup")) { - // This flag is obsolete, does opposite of -exact. - config.exact = 0; - } else if (!strcmp(argv[c], "-exact")) { - config.exact = 1; - } else if (!strcmp(argv[c], "-blend_alpha") && c < argc - 1) { - blend_alpha = 1; - // background color is given in hex with an optional '0x' prefix - background_color = ExUtilGetInt(argv[++c], 16, &parse_error); - background_color = background_color & 0x00ffffffu; - } else if (!strcmp(argv[c], "-alpha_filter") && c < argc - 1) { - ++c; - if (!strcmp(argv[c], "none")) { - config.alpha_filtering = 0; - } else if (!strcmp(argv[c], "fast")) { - config.alpha_filtering = 1; - } else if (!strcmp(argv[c], "best")) { - config.alpha_filtering = 2; - } else { - fprintf(stderr, "Error! Unrecognized alpha filter: %s\n", argv[c]); - goto Error; - } - } else if (!strcmp(argv[c], "-noalpha")) { - keep_alpha = 0; - } else if (!strcmp(argv[c], "-lossless")) { - config.lossless = 1; - } else if (!strcmp(argv[c], "-near_lossless") && c < argc - 1) { - config.near_lossless = ExUtilGetInt(argv[++c], 0, &parse_error); - config.lossless = 1; // use near-lossless only with lossless - } else if (!strcmp(argv[c], "-hint") && c < argc - 1) { - ++c; - if (!strcmp(argv[c], "photo")) { - config.image_hint = WEBP_HINT_PHOTO; - } else if (!strcmp(argv[c], "picture")) { - config.image_hint = WEBP_HINT_PICTURE; - } else if (!strcmp(argv[c], "graph")) { - config.image_hint = WEBP_HINT_GRAPH; - } else { - fprintf(stderr, "Error! Unrecognized image hint: %s\n", argv[c]); - goto Error; - } - } else if (!strcmp(argv[c], "-size") && c < argc - 1) { - config.target_size = ExUtilGetInt(argv[++c], 0, &parse_error); - } else if (!strcmp(argv[c], "-psnr") && c < argc - 1) { - config.target_PSNR = ExUtilGetFloat(argv[++c], &parse_error); - } else if (!strcmp(argv[c], "-sns") && c < argc - 1) { - config.sns_strength = ExUtilGetInt(argv[++c], 0, &parse_error); - } else if (!strcmp(argv[c], "-f") && c < argc - 1) { - config.filter_strength = ExUtilGetInt(argv[++c], 0, &parse_error); - } else if (!strcmp(argv[c], "-af")) { - config.autofilter = 1; - } else if (!strcmp(argv[c], "-jpeg_like")) { - config.emulate_jpeg_size = 1; - } else if (!strcmp(argv[c], "-mt")) { - ++config.thread_level; // increase thread level - } else if (!strcmp(argv[c], "-low_memory")) { - config.low_memory = 1; - } else if (!strcmp(argv[c], "-strong")) { - config.filter_type = 1; - } else if (!strcmp(argv[c], "-nostrong")) { - config.filter_type = 0; - } else if (!strcmp(argv[c], "-sharpness") && c < argc - 1) { - config.filter_sharpness = ExUtilGetInt(argv[++c], 0, &parse_error); - } else if (!strcmp(argv[c], "-sharp_yuv")) { - config.use_sharp_yuv = 1; - } else if (!strcmp(argv[c], "-pass") && c < argc - 1) { - config.pass = ExUtilGetInt(argv[++c], 0, &parse_error); - } else if (!strcmp(argv[c], "-pre") && c < argc - 1) { - config.preprocessing = ExUtilGetInt(argv[++c], 0, &parse_error); - } else if (!strcmp(argv[c], "-segments") && c < argc - 1) { - config.segments = ExUtilGetInt(argv[++c], 0, &parse_error); - } else if (!strcmp(argv[c], "-partition_limit") && c < argc - 1) { - config.partition_limit = ExUtilGetInt(argv[++c], 0, &parse_error); - } else if (!strcmp(argv[c], "-map") && c < argc - 1) { - picture.extra_info_type = ExUtilGetInt(argv[++c], 0, &parse_error); - } else if (!strcmp(argv[c], "-crop") && c < argc - 4) { - crop = 1; - crop_x = ExUtilGetInt(argv[++c], 0, &parse_error); - crop_y = ExUtilGetInt(argv[++c], 0, &parse_error); - crop_w = ExUtilGetInt(argv[++c], 0, &parse_error); - crop_h = ExUtilGetInt(argv[++c], 0, &parse_error); - } else if (!strcmp(argv[c], "-resize") && c < argc - 2) { - resize_w = ExUtilGetInt(argv[++c], 0, &parse_error); - resize_h = ExUtilGetInt(argv[++c], 0, &parse_error); -#ifndef WEBP_DLL - } else if (!strcmp(argv[c], "-noasm")) { - VP8GetCPUInfo = NULL; -#endif - } else if (!strcmp(argv[c], "-version")) { - const int version = WebPGetEncoderVersion(); - printf("%d.%d.%d\n", - (version >> 16) & 0xff, (version >> 8) & 0xff, version & 0xff); - FREE_WARGV_AND_RETURN(0); - } else if (!strcmp(argv[c], "-progress")) { - show_progress = 1; - } else if (!strcmp(argv[c], "-quiet")) { - quiet = 1; - } else if (!strcmp(argv[c], "-preset") && c < argc - 1) { - WebPPreset preset; - ++c; - if (!strcmp(argv[c], "default")) { - preset = WEBP_PRESET_DEFAULT; - } else if (!strcmp(argv[c], "photo")) { - preset = WEBP_PRESET_PHOTO; - } else if (!strcmp(argv[c], "picture")) { - preset = WEBP_PRESET_PICTURE; - } else if (!strcmp(argv[c], "drawing")) { - preset = WEBP_PRESET_DRAWING; - } else if (!strcmp(argv[c], "icon")) { - preset = WEBP_PRESET_ICON; - } else if (!strcmp(argv[c], "text")) { - preset = WEBP_PRESET_TEXT; - } else { - fprintf(stderr, "Error! Unrecognized preset: %s\n", argv[c]); - goto Error; - } - if (!WebPConfigPreset(&config, preset, config.quality)) { - fprintf(stderr, "Error! Could initialize configuration with preset.\n"); - goto Error; - } - } else if (!strcmp(argv[c], "-metadata") && c < argc - 1) { - static const struct { - const char* option; - int flag; - } kTokens[] = { - { "all", METADATA_ALL }, - { "none", 0 }, - { "exif", METADATA_EXIF }, - { "icc", METADATA_ICC }, - { "xmp", METADATA_XMP }, - }; - const size_t kNumTokens = sizeof(kTokens) / sizeof(kTokens[0]); - const char* start = argv[++c]; - const char* const end = start + strlen(start); - - while (start < end) { - size_t i; - const char* token = strchr(start, ','); - if (token == NULL) token = end; - - for (i = 0; i < kNumTokens; ++i) { - if ((size_t)(token - start) == strlen(kTokens[i].option) && - !strncmp(start, kTokens[i].option, strlen(kTokens[i].option))) { - if (kTokens[i].flag != 0) { - keep_metadata |= kTokens[i].flag; - } else { - keep_metadata = 0; - } - break; - } - } - if (i == kNumTokens) { - fprintf(stderr, "Error! Unknown metadata type '%.*s'\n", - (int)(token - start), start); - FREE_WARGV_AND_RETURN(-1); - } - start = token + 1; - } -#ifdef HAVE_WINCODEC_H - if (keep_metadata != 0 && keep_metadata != METADATA_ICC) { - // TODO(jzern): remove when -metadata is supported on all platforms. - fprintf(stderr, "Warning: only ICC profile extraction is currently" - " supported on this platform!\n"); - } -#endif - } else if (!strcmp(argv[c], "-v")) { - verbose = 1; - } else if (!strcmp(argv[c], "--")) { - if (c < argc - 1) in_file = (const char*)GET_WARGV(argv, ++c); - break; - } else if (argv[c][0] == '-') { - fprintf(stderr, "Error! Unknown option '%s'\n", argv[c]); - HelpLong(); - FREE_WARGV_AND_RETURN(-1); - } else { - in_file = (const char*)GET_WARGV(argv, c); - } - - if (parse_error) { - HelpLong(); - FREE_WARGV_AND_RETURN(-1); - } - } - if (in_file == NULL) { - fprintf(stderr, "No input file specified!\n"); - HelpShort(); - goto Error; - } - - if (use_lossless_preset == 1) { - if (!WebPConfigLosslessPreset(&config, lossless_preset)) { - fprintf(stderr, "Invalid lossless preset (-z %d)\n", lossless_preset); - goto Error; - } - } - - // Check for unsupported command line options for lossless mode and log - // warning for such options. - if (!quiet && config.lossless == 1) { - if (config.target_size > 0 || config.target_PSNR > 0) { - fprintf(stderr, "Encoding for specified size or PSNR is not supported" - " for lossless encoding. Ignoring such option(s)!\n"); - } - if (config.partition_limit > 0) { - fprintf(stderr, "Partition limit option is not required for lossless" - " encoding. Ignoring this option!\n"); - } - } - // If a target size or PSNR was given, but somehow the -pass option was - // omitted, force a reasonable value. - if (config.target_size > 0 || config.target_PSNR > 0) { - if (config.pass == 1) config.pass = 6; - } - - if (!WebPValidateConfig(&config)) { - fprintf(stderr, "Error! Invalid configuration.\n"); - goto Error; - } - - // Read the input. We need to decide if we prefer ARGB or YUVA - // samples, depending on the expected compression mode (this saves - // some conversion steps). - picture.use_argb = (config.lossless || config.use_sharp_yuv || - config.preprocessing > 0 || - crop || (resize_w | resize_h) > 0); - if (verbose) { - StopwatchReset(&stop_watch); - } - if (!ReadPicture(in_file, &picture, keep_alpha, - (keep_metadata == 0) ? NULL : &metadata)) { - WFPRINTF(stderr, "Error! Cannot read input picture file '%s'\n", - (const W_CHAR*)in_file); - goto Error; - } - picture.progress_hook = (show_progress && !quiet) ? ProgressReport : NULL; - - if (blend_alpha) { - WebPBlendAlpha(&picture, background_color); - } - - if (verbose) { - const double read_time = StopwatchReadAndReset(&stop_watch); - fprintf(stderr, "Time to read input: %.3fs\n", read_time); - } - - // Open the output - if (out_file != NULL) { - const int use_stdout = !WSTRCMP(out_file, "-"); - out = use_stdout ? ImgIoUtilSetBinaryMode(stdout) : WFOPEN(out_file, "wb"); - if (out == NULL) { - WFPRINTF(stderr, "Error! Cannot open output file '%s'\n", - (const W_CHAR*)out_file); - goto Error; - } else { - if (!short_output && !quiet) { - WFPRINTF(stderr, "Saving file '%s'\n", (const W_CHAR*)out_file); - } - } - if (keep_metadata == 0) { - picture.writer = MyWriter; - picture.custom_ptr = (void*)out; - } else { - picture.writer = WebPMemoryWrite; - picture.custom_ptr = (void*)&memory_writer; - } - } else { - out = NULL; - if (!quiet && !short_output) { - fprintf(stderr, "No output file specified (no -o flag). Encoding will\n"); - fprintf(stderr, "be performed, but its results discarded.\n\n"); - } - } - if (!quiet) { - picture.stats = &stats; - picture.user_data = (void*)in_file; - } - - // Crop & resize. - if (verbose) { - StopwatchReset(&stop_watch); - } - if (crop != 0) { - // We use self-cropping using a view. - if (!WebPPictureView(&picture, crop_x, crop_y, crop_w, crop_h, &picture)) { - fprintf(stderr, "Error! Cannot crop picture\n"); - goto Error; - } - } - if ((resize_w | resize_h) > 0) { - WebPPicture picture_no_alpha; - if (config.exact) { - // If -exact, we can't premultiply RGB by A otherwise RGB is lost if A=0. - // We rescale an opaque copy and assemble scaled A and non-premultiplied - // RGB channels. This is slower but it's a very uncommon use case. Color - // leak at sharp alpha edges is possible. - if (!WebPPictureCopy(&picture, &picture_no_alpha)) { - fprintf(stderr, "Error! Cannot copy temporary picture\n"); - goto Error; - } - - // We enforced picture.use_argb = 1 above. Now, remove the alpha values. - { - int x, y; - uint32_t* argb_no_alpha = picture_no_alpha.argb; - for (y = 0; y < picture_no_alpha.height; ++y) { - for (x = 0; x < picture_no_alpha.width; ++x) { - argb_no_alpha[x] |= 0xff000000; // Opaque copy. - } - argb_no_alpha += picture_no_alpha.argb_stride; - } - } - - if (!WebPPictureRescale(&picture_no_alpha, resize_w, resize_h)) { - fprintf(stderr, "Error! Cannot resize temporary picture\n"); - goto Error; - } - } - - if (!WebPPictureRescale(&picture, resize_w, resize_h)) { - fprintf(stderr, "Error! Cannot resize picture\n"); - goto Error; - } - - if (config.exact) { // Put back the alpha information. - int x, y; - uint32_t* argb_no_alpha = picture_no_alpha.argb; - uint32_t* argb = picture.argb; - for (y = 0; y < picture_no_alpha.height; ++y) { - for (x = 0; x < picture_no_alpha.width; ++x) { - argb[x] = (argb[x] & 0xff000000) | (argb_no_alpha[x] & 0x00ffffff); - } - argb_no_alpha += picture_no_alpha.argb_stride; - argb += picture.argb_stride; - } - WebPPictureFree(&picture_no_alpha); - } - } - if (verbose && (crop != 0 || (resize_w | resize_h) > 0)) { - const double preproc_time = StopwatchReadAndReset(&stop_watch); - fprintf(stderr, "Time to crop/resize picture: %.3fs\n", preproc_time); - } - - if (picture.extra_info_type > 0) { - AllocExtraInfo(&picture); - } - if (print_distortion >= 0) { // Save original picture for later comparison - WebPPictureCopy(&picture, &original_picture); - } - - // Compress. - if (verbose) { - StopwatchReset(&stop_watch); - } - if (!WebPEncode(&config, &picture)) { - fprintf(stderr, "Error! Cannot encode picture as WebP\n"); - fprintf(stderr, "Error code: %d (%s)\n", - picture.error_code, kErrorMessages[picture.error_code]); - goto Error; - } - if (verbose) { - const double encode_time = StopwatchReadAndReset(&stop_watch); - fprintf(stderr, "Time to encode picture: %.3fs\n", encode_time); - } - - // Write info - if (dump_file) { - if (picture.use_argb) { - fprintf(stderr, "Warning: can't dump file (-d option) " - "in lossless mode.\n"); - } else if (!DumpPicture(&picture, dump_file)) { - WFPRINTF(stderr, "Warning, couldn't dump picture %s\n", - (const W_CHAR*)dump_file); - } - } - - if (keep_metadata != 0) { - if (out != NULL) { - if (!WriteWebPWithMetadata(out, &picture, &memory_writer, - &metadata, keep_metadata, &metadata_written)) { - fprintf(stderr, "Error writing WebP file with metadata!\n"); - goto Error; - } - } else { // output is disabled, just display the metadata stats. - const struct { - const MetadataPayload* const payload; - int flag; - } *iter, info[] = { - { &metadata.exif, METADATA_EXIF }, - { &metadata.iccp, METADATA_ICC }, - { &metadata.xmp, METADATA_XMP }, - { NULL, 0 } - }; - uint32_t unused1 = 0; - uint64_t unused2 = 0; - - for (iter = info; iter->payload != NULL; ++iter) { - if (UpdateFlagsAndSize(iter->payload, !!(keep_metadata & iter->flag), - 0, &unused1, &unused2)) { - metadata_written |= iter->flag; - } - } - } - } - - if (!quiet) { - if (!short_output || print_distortion < 0) { - if (config.lossless) { - PrintExtraInfoLossless(&picture, short_output, in_file); - } else { - PrintExtraInfoLossy(&picture, short_output, config.low_memory, in_file); - } - } - if (!short_output && picture.extra_info_type > 0) { - PrintMapInfo(&picture); - } - if (print_distortion >= 0) { // print distortion - static const char* distortion_names[] = { "PSNR", "SSIM", "LSIM" }; - float values[5]; - if (!WebPPictureDistortion(&picture, &original_picture, - print_distortion, values)) { - fprintf(stderr, "Error while computing the distortion.\n"); - goto Error; - } - if (!short_output) { - fprintf(stderr, "%s: ", distortion_names[print_distortion]); - fprintf(stderr, "B:%.2f G:%.2f R:%.2f A:%.2f Total:%.2f\n", - values[0], values[1], values[2], values[3], values[4]); - } else { - fprintf(stderr, "%7d %.4f\n", picture.stats->coded_size, values[4]); - } - } - if (!short_output) { - PrintMetadataInfo(&metadata, metadata_written); - } - } - return_value = 0; - - Error: - WebPMemoryWriterClear(&memory_writer); - WebPFree(picture.extra_info); - MetadataFree(&metadata); - WebPPictureFree(&picture); - WebPPictureFree(&original_picture); - if (out != NULL && out != stdout) { - fclose(out); - } - - FREE_WARGV_AND_RETURN(return_value); -} - -//------------------------------------------------------------------------------ diff --git a/Extended/libwebp/examples/dwebp.c b/Extended/libwebp/examples/dwebp.c deleted file mode 100644 index cc75cb7..0000000 --- a/Extended/libwebp/examples/dwebp.c +++ /dev/null @@ -1,420 +0,0 @@ -// Copyright 2010 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Command-line tool for decoding a WebP image. -// -// Author: Skal (pascal.massimino@gmail.com) - -#include -#include -#include -#include - -#ifdef HAVE_CONFIG_H -#include "webp/config.h" -#endif - -#include "../examples/example_util.h" -#include "../imageio/image_enc.h" -#include "../imageio/webpdec.h" -#include "./stopwatch.h" -#include "./unicode.h" - -static int verbose = 0; -static int quiet = 0; -#ifndef WEBP_DLL -#ifdef __cplusplus -extern "C" { -#endif - -extern void* VP8GetCPUInfo; // opaque forward declaration. - -#ifdef __cplusplus -} // extern "C" -#endif -#endif // WEBP_DLL - - -static int SaveOutput(const WebPDecBuffer* const buffer, - WebPOutputFileFormat format, const char* const out_file) { - const int use_stdout = (out_file != NULL) && !WSTRCMP(out_file, "-"); - int ok = 1; - Stopwatch stop_watch; - - if (verbose) { - StopwatchReset(&stop_watch); - } - ok = WebPSaveImage(buffer, format, out_file); - - if (ok) { - if (!quiet) { - if (use_stdout) { - fprintf(stderr, "Saved to stdout\n"); - } else { - WFPRINTF(stderr, "Saved file %s\n", (const W_CHAR*)out_file); - } - } - if (verbose) { - const double write_time = StopwatchReadAndReset(&stop_watch); - fprintf(stderr, "Time to write output: %.3fs\n", write_time); - } - } else { - if (use_stdout) { - fprintf(stderr, "Error writing to stdout !!\n"); - } else { - WFPRINTF(stderr, "Error writing file %s !!\n", (const W_CHAR*)out_file); - } - } - return ok; -} - -static void Help(void) { - printf("Usage: dwebp in_file [options] [-o out_file]\n\n" - "Decodes the WebP image file to PNG format [Default]\n" - "Use following options to convert into alternate image formats:\n" - " -pam ......... save the raw RGBA samples as a color PAM\n" - " -ppm ......... save the raw RGB samples as a color PPM\n" - " -bmp ......... save as uncompressed BMP format\n" - " -tiff ........ save as uncompressed TIFF format\n" - " -pgm ......... save the raw YUV samples as a grayscale PGM\n" - " file with IMC4 layout\n" - " -yuv ......... save the raw YUV samples in flat layout\n" - "\n" - " Other options are:\n" - " -version ..... print version number and exit\n" - " -nofancy ..... don't use the fancy YUV420 upscaler\n" - " -nofilter .... disable in-loop filtering\n" - " -nodither .... disable dithering\n" - " -dither .. dithering strength (in 0..100)\n" - " -alpha_dither use alpha-plane dithering if needed\n" - " -mt .......... use multi-threading\n" - " -crop ... crop output with the given rectangle\n" - " -resize ......... scale the output (*after* any cropping)\n" - " -flip ........ flip the output vertically\n" - " -alpha ....... only save the alpha plane\n" - " -incremental . use incremental decoding (useful for tests)\n" - " -h ........... this help message\n" - " -v ........... verbose (e.g. print encoding/decoding times)\n" - " -quiet ....... quiet mode, don't print anything\n" -#ifndef WEBP_DLL - " -noasm ....... disable all assembly optimizations\n" -#endif - ); -} - -static const char* const kFormatType[] = { - "unspecified", "lossy", "lossless" -}; - -static uint8_t* AllocateExternalBuffer(WebPDecoderConfig* config, - WebPOutputFileFormat format, - int use_external_memory) { - uint8_t* external_buffer = NULL; - WebPDecBuffer* const output_buffer = &config->output; - int w = config->input.width; - int h = config->input.height; - if (config->options.use_scaling) { - w = config->options.scaled_width; - h = config->options.scaled_height; - } else if (config->options.use_cropping) { - w = config->options.crop_width; - h = config->options.crop_height; - } - if (format >= RGB && format <= rgbA_4444) { - const int bpp = (format == RGB || format == BGR) ? 3 - : (format == RGBA_4444 || format == rgbA_4444 || - format == RGB_565) ? 2 - : 4; - uint32_t stride = bpp * w + 7; // <- just for exercising - external_buffer = (uint8_t*)WebPMalloc(stride * h); - if (external_buffer == NULL) return NULL; - output_buffer->u.RGBA.stride = stride; - output_buffer->u.RGBA.size = stride * h; - output_buffer->u.RGBA.rgba = external_buffer; - } else { // YUV and YUVA - const int has_alpha = WebPIsAlphaMode(output_buffer->colorspace); - uint8_t* tmp; - uint32_t stride = w + 3; - uint32_t uv_stride = (w + 1) / 2 + 13; - uint32_t total_size = stride * h * (has_alpha ? 2 : 1) - + 2 * uv_stride * (h + 1) / 2; - assert(format >= YUV && format <= YUVA); - external_buffer = (uint8_t*)WebPMalloc(total_size); - if (external_buffer == NULL) return NULL; - tmp = external_buffer; - output_buffer->u.YUVA.y = tmp; - output_buffer->u.YUVA.y_stride = stride; - output_buffer->u.YUVA.y_size = stride * h; - tmp += output_buffer->u.YUVA.y_size; - if (has_alpha) { - output_buffer->u.YUVA.a = tmp; - output_buffer->u.YUVA.a_stride = stride; - output_buffer->u.YUVA.a_size = stride * h; - tmp += output_buffer->u.YUVA.a_size; - } else { - output_buffer->u.YUVA.a = NULL; - output_buffer->u.YUVA.a_stride = 0; - } - output_buffer->u.YUVA.u = tmp; - output_buffer->u.YUVA.u_stride = uv_stride; - output_buffer->u.YUVA.u_size = uv_stride * (h + 1) / 2; - tmp += output_buffer->u.YUVA.u_size; - - output_buffer->u.YUVA.v = tmp; - output_buffer->u.YUVA.v_stride = uv_stride; - output_buffer->u.YUVA.v_size = uv_stride * (h + 1) / 2; - tmp += output_buffer->u.YUVA.v_size; - assert(tmp <= external_buffer + total_size); - } - output_buffer->is_external_memory = use_external_memory; - return external_buffer; -} - -int main(int argc, const char* argv[]) { - int ok = 0; - const char* in_file = NULL; - const char* out_file = NULL; - - WebPDecoderConfig config; - WebPDecBuffer* const output_buffer = &config.output; - WebPBitstreamFeatures* const bitstream = &config.input; - WebPOutputFileFormat format = PNG; - uint8_t* external_buffer = NULL; - int use_external_memory = 0; - const uint8_t* data = NULL; - - int incremental = 0; - int c; - - INIT_WARGV(argc, argv); - - if (!WebPInitDecoderConfig(&config)) { - fprintf(stderr, "Library version mismatch!\n"); - FREE_WARGV_AND_RETURN(-1); - } - - for (c = 1; c < argc; ++c) { - int parse_error = 0; - if (!strcmp(argv[c], "-h") || !strcmp(argv[c], "-help")) { - Help(); - FREE_WARGV_AND_RETURN(0); - } else if (!strcmp(argv[c], "-o") && c < argc - 1) { - out_file = (const char*)GET_WARGV(argv, ++c); - } else if (!strcmp(argv[c], "-alpha")) { - format = ALPHA_PLANE_ONLY; - } else if (!strcmp(argv[c], "-nofancy")) { - config.options.no_fancy_upsampling = 1; - } else if (!strcmp(argv[c], "-nofilter")) { - config.options.bypass_filtering = 1; - } else if (!strcmp(argv[c], "-pam")) { - format = PAM; - } else if (!strcmp(argv[c], "-ppm")) { - format = PPM; - } else if (!strcmp(argv[c], "-bmp")) { - format = BMP; - } else if (!strcmp(argv[c], "-tiff")) { - format = TIFF; - } else if (!strcmp(argv[c], "-quiet")) { - quiet = 1; - } else if (!strcmp(argv[c], "-version")) { - const int version = WebPGetDecoderVersion(); - printf("%d.%d.%d\n", - (version >> 16) & 0xff, (version >> 8) & 0xff, version & 0xff); - FREE_WARGV_AND_RETURN(0); - } else if (!strcmp(argv[c], "-pgm")) { - format = PGM; - } else if (!strcmp(argv[c], "-yuv")) { - format = RAW_YUV; - } else if (!strcmp(argv[c], "-pixel_format") && c < argc - 1) { - const char* const fmt = argv[++c]; - if (!strcmp(fmt, "RGB")) format = RGB; - else if (!strcmp(fmt, "RGBA")) format = RGBA; - else if (!strcmp(fmt, "BGR")) format = BGR; - else if (!strcmp(fmt, "BGRA")) format = BGRA; - else if (!strcmp(fmt, "ARGB")) format = ARGB; - else if (!strcmp(fmt, "RGBA_4444")) format = RGBA_4444; - else if (!strcmp(fmt, "RGB_565")) format = RGB_565; - else if (!strcmp(fmt, "rgbA")) format = rgbA; - else if (!strcmp(fmt, "bgrA")) format = bgrA; - else if (!strcmp(fmt, "Argb")) format = Argb; - else if (!strcmp(fmt, "rgbA_4444")) format = rgbA_4444; - else if (!strcmp(fmt, "YUV")) format = YUV; - else if (!strcmp(fmt, "YUVA")) format = YUVA; - else { - fprintf(stderr, "Can't parse pixel_format %s\n", fmt); - parse_error = 1; - } - } else if (!strcmp(argv[c], "-external_memory") && c < argc - 1) { - use_external_memory = ExUtilGetInt(argv[++c], 0, &parse_error); - parse_error |= (use_external_memory > 2 || use_external_memory < 0); - if (parse_error) { - fprintf(stderr, "Can't parse 'external_memory' value %s\n", argv[c]); - } - } else if (!strcmp(argv[c], "-mt")) { - config.options.use_threads = 1; - } else if (!strcmp(argv[c], "-alpha_dither")) { - config.options.alpha_dithering_strength = 100; - } else if (!strcmp(argv[c], "-nodither")) { - config.options.dithering_strength = 0; - } else if (!strcmp(argv[c], "-dither") && c < argc - 1) { - config.options.dithering_strength = - ExUtilGetInt(argv[++c], 0, &parse_error); - } else if (!strcmp(argv[c], "-crop") && c < argc - 4) { - config.options.use_cropping = 1; - config.options.crop_left = ExUtilGetInt(argv[++c], 0, &parse_error); - config.options.crop_top = ExUtilGetInt(argv[++c], 0, &parse_error); - config.options.crop_width = ExUtilGetInt(argv[++c], 0, &parse_error); - config.options.crop_height = ExUtilGetInt(argv[++c], 0, &parse_error); - } else if ((!strcmp(argv[c], "-scale") || !strcmp(argv[c], "-resize")) && - c < argc - 2) { // '-scale' is left for compatibility - config.options.use_scaling = 1; - config.options.scaled_width = ExUtilGetInt(argv[++c], 0, &parse_error); - config.options.scaled_height = ExUtilGetInt(argv[++c], 0, &parse_error); - } else if (!strcmp(argv[c], "-flip")) { - config.options.flip = 1; - } else if (!strcmp(argv[c], "-v")) { - verbose = 1; -#ifndef WEBP_DLL - } else if (!strcmp(argv[c], "-noasm")) { - VP8GetCPUInfo = NULL; -#endif - } else if (!strcmp(argv[c], "-incremental")) { - incremental = 1; - } else if (!strcmp(argv[c], "--")) { - if (c < argc - 1) in_file = (const char*)GET_WARGV(argv, ++c); - break; - } else if (argv[c][0] == '-') { - fprintf(stderr, "Unknown option '%s'\n", argv[c]); - Help(); - FREE_WARGV_AND_RETURN(-1); - } else { - in_file = (const char*)GET_WARGV(argv, c); - } - - if (parse_error) { - Help(); - FREE_WARGV_AND_RETURN(-1); - } - } - - if (in_file == NULL) { - fprintf(stderr, "missing input file!!\n"); - Help(); - FREE_WARGV_AND_RETURN(-1); - } - - if (quiet) verbose = 0; - - { - VP8StatusCode status = VP8_STATUS_OK; - size_t data_size = 0; - if (!LoadWebP(in_file, &data, &data_size, bitstream)) { - FREE_WARGV_AND_RETURN(-1); - } - - switch (format) { - case PNG: -#ifdef HAVE_WINCODEC_H - output_buffer->colorspace = bitstream->has_alpha ? MODE_BGRA : MODE_BGR; -#else - output_buffer->colorspace = bitstream->has_alpha ? MODE_RGBA : MODE_RGB; -#endif - break; - case PAM: - output_buffer->colorspace = MODE_RGBA; - break; - case PPM: - output_buffer->colorspace = MODE_RGB; // drops alpha for PPM - break; - case BMP: - output_buffer->colorspace = bitstream->has_alpha ? MODE_BGRA : MODE_BGR; - break; - case TIFF: - output_buffer->colorspace = bitstream->has_alpha ? MODE_RGBA : MODE_RGB; - break; - case PGM: - case RAW_YUV: - output_buffer->colorspace = bitstream->has_alpha ? MODE_YUVA : MODE_YUV; - break; - case ALPHA_PLANE_ONLY: - output_buffer->colorspace = MODE_YUVA; - break; - // forced modes: - case RGB: output_buffer->colorspace = MODE_RGB; break; - case RGBA: output_buffer->colorspace = MODE_RGBA; break; - case BGR: output_buffer->colorspace = MODE_BGR; break; - case BGRA: output_buffer->colorspace = MODE_BGRA; break; - case ARGB: output_buffer->colorspace = MODE_ARGB; break; - case RGBA_4444: output_buffer->colorspace = MODE_RGBA_4444; break; - case RGB_565: output_buffer->colorspace = MODE_RGB_565; break; - case rgbA: output_buffer->colorspace = MODE_rgbA; break; - case bgrA: output_buffer->colorspace = MODE_bgrA; break; - case Argb: output_buffer->colorspace = MODE_Argb; break; - case rgbA_4444: output_buffer->colorspace = MODE_rgbA_4444; break; - case YUV: output_buffer->colorspace = MODE_YUV; break; - case YUVA: output_buffer->colorspace = MODE_YUVA; break; - default: goto Exit; - } - - if (use_external_memory > 0 && format >= RGB) { - external_buffer = AllocateExternalBuffer(&config, format, - use_external_memory); - if (external_buffer == NULL) goto Exit; - } - - { - Stopwatch stop_watch; - if (verbose) StopwatchReset(&stop_watch); - - if (incremental) { - status = DecodeWebPIncremental(data, data_size, &config); - } else { - status = DecodeWebP(data, data_size, &config); - } - if (verbose) { - const double decode_time = StopwatchReadAndReset(&stop_watch); - fprintf(stderr, "Time to decode picture: %.3fs\n", decode_time); - } - } - - ok = (status == VP8_STATUS_OK); - if (!ok) { - PrintWebPError(in_file, status); - goto Exit; - } - } - - if (out_file != NULL) { - if (!quiet) { - WFPRINTF(stderr, "Decoded %s.", (const W_CHAR*)in_file); - fprintf(stderr, " Dimensions: %d x %d %s. Format: %s. Now saving...\n", - output_buffer->width, output_buffer->height, - bitstream->has_alpha ? " (with alpha)" : "", - kFormatType[bitstream->format]); - } - ok = SaveOutput(output_buffer, format, out_file); - } else { - if (!quiet) { - WFPRINTF(stderr, "File %s can be decoded ", (const W_CHAR*)in_file); - fprintf(stderr, "(dimensions: %d x %d %s. Format: %s).\n", - output_buffer->width, output_buffer->height, - bitstream->has_alpha ? " (with alpha)" : "", - kFormatType[bitstream->format]); - fprintf(stderr, "Nothing written; " - "use -o flag to save the result as e.g. PNG.\n"); - } - } - Exit: - WebPFreeDecBuffer(output_buffer); - WebPFree((void*)external_buffer); - WebPFree((void*)data); - FREE_WARGV_AND_RETURN(ok ? 0 : -1); -} - -//------------------------------------------------------------------------------ diff --git a/Extended/libwebp/examples/example_util.c b/Extended/libwebp/examples/example_util.c deleted file mode 100644 index b043654..0000000 --- a/Extended/libwebp/examples/example_util.c +++ /dev/null @@ -1,135 +0,0 @@ -// Copyright 2012 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Utility functions used by the example programs. -// - -#include "./example_util.h" - -#include -#include -#include -#include - -#include "webp/mux_types.h" -#include "../imageio/imageio_util.h" - -//------------------------------------------------------------------------------ -// String parsing - -uint32_t ExUtilGetUInt(const char* const v, int base, int* const error) { - char* end = NULL; - const uint32_t n = (v != NULL) ? (uint32_t)strtoul(v, &end, base) : 0u; - if (end == v && error != NULL && !*error) { - *error = 1; - fprintf(stderr, "Error! '%s' is not an integer.\n", - (v != NULL) ? v : "(null)"); - } - return n; -} - -int ExUtilGetInt(const char* const v, int base, int* const error) { - return (int)ExUtilGetUInt(v, base, error); -} - -int ExUtilGetInts(const char* v, int base, int max_output, int output[]) { - int n, error = 0; - for (n = 0; v != NULL && n < max_output; ++n) { - const int value = ExUtilGetInt(v, base, &error); - if (error) return -1; - output[n] = value; - v = strchr(v, ','); - if (v != NULL) ++v; // skip over the trailing ',' - } - return n; -} - -float ExUtilGetFloat(const char* const v, int* const error) { - char* end = NULL; - const float f = (v != NULL) ? (float)strtod(v, &end) : 0.f; - if (end == v && error != NULL && !*error) { - *error = 1; - fprintf(stderr, "Error! '%s' is not a floating point number.\n", - (v != NULL) ? v : "(null)"); - } - return f; -} - -//------------------------------------------------------------------------------ - -static void ResetCommandLineArguments(int argc, const char* argv[], - CommandLineArguments* const args) { - assert(args != NULL); - args->argc_ = argc; - args->argv_ = argv; - args->own_argv_ = 0; - WebPDataInit(&args->argv_data_); -} - -void ExUtilDeleteCommandLineArguments(CommandLineArguments* const args) { - if (args != NULL) { - if (args->own_argv_) { - WebPFree((void*)args->argv_); - WebPDataClear(&args->argv_data_); - } - ResetCommandLineArguments(0, NULL, args); - } -} - -#define MAX_ARGC 16384 -int ExUtilInitCommandLineArguments(int argc, const char* argv[], - CommandLineArguments* const args) { - if (args == NULL || argv == NULL) return 0; - ResetCommandLineArguments(argc, argv, args); - if (argc == 1 && argv[0][0] != '-') { - char* cur; - const char sep[] = " \t\r\n\f\v"; - -#if defined(_WIN32) && defined(_UNICODE) - fprintf(stderr, - "Error: Reading arguments from a file is a feature unavailable " - "with Unicode binaries.\n"); - return 0; -#endif - - if (!ExUtilReadFileToWebPData(argv[0], &args->argv_data_)) { - return 0; - } - args->own_argv_ = 1; - args->argv_ = (const char**)WebPMalloc(MAX_ARGC * sizeof(*args->argv_)); - if (args->argv_ == NULL) return 0; - - argc = 0; - for (cur = strtok((char*)args->argv_data_.bytes, sep); - cur != NULL; - cur = strtok(NULL, sep)) { - if (argc == MAX_ARGC) { - fprintf(stderr, "ERROR: Arguments limit %d reached\n", MAX_ARGC); - return 0; - } - assert(strlen(cur) != 0); - args->argv_[argc++] = cur; - } - args->argc_ = argc; - } - return 1; -} - -//------------------------------------------------------------------------------ - -int ExUtilReadFileToWebPData(const char* const filename, - WebPData* const webp_data) { - const uint8_t* data; - size_t size; - if (webp_data == NULL) return 0; - if (!ImgIoUtilReadFile(filename, &data, &size)) return 0; - webp_data->bytes = data; - webp_data->size = size; - return 1; -} diff --git a/Extended/libwebp/examples/example_util.h b/Extended/libwebp/examples/example_util.h deleted file mode 100644 index fe762a4..0000000 --- a/Extended/libwebp/examples/example_util.h +++ /dev/null @@ -1,70 +0,0 @@ -// Copyright 2012 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Utility functions used by the example programs. -// - -#ifndef WEBP_EXAMPLES_EXAMPLE_UTIL_H_ -#define WEBP_EXAMPLES_EXAMPLE_UTIL_H_ - -#include "webp/types.h" -#include "webp/mux_types.h" - -#ifdef __cplusplus -extern "C" { -#endif - -//------------------------------------------------------------------------------ -// String parsing - -// Parses 'v' using strto(ul|l|d)(). If error is non-NULL, '*error' is set to -// true on failure while on success it is left unmodified to allow chaining of -// calls. An error is only printed on the first occurrence. -uint32_t ExUtilGetUInt(const char* const v, int base, int* const error); -int ExUtilGetInt(const char* const v, int base, int* const error); -float ExUtilGetFloat(const char* const v, int* const error); - -// This variant of ExUtilGetInt() will parse multiple integers from a -// comma-separated list. Up to 'max_output' integers are parsed. -// The result is placed in the output[] array, and the number of integers -// actually parsed is returned, or -1 if an error occurred. -int ExUtilGetInts(const char* v, int base, int max_output, int output[]); - -// Reads a file named 'filename' into a WebPData structure. The content of -// webp_data is overwritten. Returns false in case of error. -int ExUtilReadFileToWebPData(const char* const filename, - WebPData* const webp_data); - -//------------------------------------------------------------------------------ -// Command-line arguments - -typedef struct { - int argc_; - const char** argv_; - WebPData argv_data_; - int own_argv_; -} CommandLineArguments; - -// Initializes the structure from the command-line parameters. If there is -// only one parameter and it does not start with a '-', then it is assumed to -// be a file name. This file will be read and tokenized into command-line -// arguments. The content of 'args' is overwritten. -// Returns false in case of error (memory allocation failure, non -// existing file, too many arguments, ...). -int ExUtilInitCommandLineArguments(int argc, const char* argv[], - CommandLineArguments* const args); - -// Deallocate all memory and reset 'args'. -void ExUtilDeleteCommandLineArguments(CommandLineArguments* const args); - -#ifdef __cplusplus -} // extern "C" -#endif - -#endif // WEBP_EXAMPLES_EXAMPLE_UTIL_H_ diff --git a/Extended/libwebp/examples/gif2webp.c b/Extended/libwebp/examples/gif2webp.c deleted file mode 100644 index a9f5936..0000000 --- a/Extended/libwebp/examples/gif2webp.c +++ /dev/null @@ -1,604 +0,0 @@ -// Copyright 2012 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// simple tool to convert animated GIFs to WebP -// -// Authors: Skal (pascal.massimino@gmail.com) -// Urvang (urvang@google.com) - -#include -#include -#include -#include - -#ifdef HAVE_CONFIG_H -#include "webp/config.h" -#endif - -#ifdef WEBP_HAVE_GIF - -#if defined(HAVE_UNISTD_H) && HAVE_UNISTD_H -#include -#endif - -#include -#include "webp/encode.h" -#include "webp/mux.h" -#include "../examples/example_util.h" -#include "../imageio/imageio_util.h" -#include "./gifdec.h" -#include "./unicode.h" -#include "./unicode_gif.h" - -#if !defined(STDIN_FILENO) -#define STDIN_FILENO 0 -#endif - -//------------------------------------------------------------------------------ - -static int transparent_index = GIF_INDEX_INVALID; // Opaque by default. - -static const char* const kErrorMessages[-WEBP_MUX_NOT_ENOUGH_DATA + 1] = { - "WEBP_MUX_NOT_FOUND", "WEBP_MUX_INVALID_ARGUMENT", "WEBP_MUX_BAD_DATA", - "WEBP_MUX_MEMORY_ERROR", "WEBP_MUX_NOT_ENOUGH_DATA" -}; - -static const char* ErrorString(WebPMuxError err) { - assert(err <= WEBP_MUX_NOT_FOUND && err >= WEBP_MUX_NOT_ENOUGH_DATA); - return kErrorMessages[-err]; -} - -enum { - METADATA_ICC = (1 << 0), - METADATA_XMP = (1 << 1), - METADATA_ALL = METADATA_ICC | METADATA_XMP -}; - -//------------------------------------------------------------------------------ - -static void Help(void) { - printf("Usage:\n"); - printf(" gif2webp [options] gif_file -o webp_file\n"); - printf("Options:\n"); - printf(" -h / -help ............. this help\n"); - printf(" -lossy ................. encode image using lossy compression\n"); - printf(" -mixed ................. for each frame in the image, pick lossy\n" - " or lossless compression heuristically\n"); - printf(" -q ............. quality factor (0:small..100:big)\n"); - printf(" -m ............... compression method (0=fast, 6=slowest)\n"); - printf(" -min_size .............. minimize output size (default:off)\n" - " lossless compression by default; can be\n" - " combined with -q, -m, -lossy or -mixed\n" - " options\n"); - printf(" -kmin ............ min distance between key frames\n"); - printf(" -kmax ............ max distance between key frames\n"); - printf(" -f ............... filter strength (0=off..100)\n"); - printf(" -metadata ..... comma separated list of metadata to\n"); - printf(" "); - printf("copy from the input to the output if present\n"); - printf(" "); - printf("Valid values: all, none, icc, xmp (default)\n"); - printf(" -loop_compatibility .... use compatibility mode for Chrome\n"); - printf(" version prior to M62 (inclusive)\n"); - printf(" -mt .................... use multi-threading if available\n"); - printf("\n"); - printf(" -version ............... print version number and exit\n"); - printf(" -v ..................... verbose\n"); - printf(" -quiet ................. don't print anything\n"); - printf("\n"); -} - -//------------------------------------------------------------------------------ - -int main(int argc, const char* argv[]) { - int verbose = 0; - int gif_error = GIF_ERROR; - WebPMuxError err = WEBP_MUX_OK; - int ok = 0; - const W_CHAR* in_file = NULL, *out_file = NULL; - GifFileType* gif = NULL; - int frame_duration = 0; - int frame_timestamp = 0; - GIFDisposeMethod orig_dispose = GIF_DISPOSE_NONE; - - WebPPicture frame; // Frame rectangle only (not disposed). - WebPPicture curr_canvas; // Not disposed. - WebPPicture prev_canvas; // Disposed. - - WebPAnimEncoder* enc = NULL; - WebPAnimEncoderOptions enc_options; - WebPConfig config; - - int frame_number = 0; // Whether we are processing the first frame. - int done; - int c; - int quiet = 0; - WebPData webp_data; - - int keep_metadata = METADATA_XMP; // ICC not output by default. - WebPData icc_data; - int stored_icc = 0; // Whether we have already stored an ICC profile. - WebPData xmp_data; - int stored_xmp = 0; // Whether we have already stored an XMP profile. - int loop_count = 0; // default: infinite - int stored_loop_count = 0; // Whether we have found an explicit loop count. - int loop_compatibility = 0; - WebPMux* mux = NULL; - - int default_kmin = 1; // Whether to use default kmin value. - int default_kmax = 1; - - INIT_WARGV(argc, argv); - - if (!WebPConfigInit(&config) || !WebPAnimEncoderOptionsInit(&enc_options) || - !WebPPictureInit(&frame) || !WebPPictureInit(&curr_canvas) || - !WebPPictureInit(&prev_canvas)) { - fprintf(stderr, "Error! Version mismatch!\n"); - FREE_WARGV_AND_RETURN(-1); - } - config.lossless = 1; // Use lossless compression by default. - - WebPDataInit(&webp_data); - WebPDataInit(&icc_data); - WebPDataInit(&xmp_data); - - if (argc == 1) { - Help(); - FREE_WARGV_AND_RETURN(0); - } - - for (c = 1; c < argc; ++c) { - int parse_error = 0; - if (!strcmp(argv[c], "-h") || !strcmp(argv[c], "-help")) { - Help(); - FREE_WARGV_AND_RETURN(0); - } else if (!strcmp(argv[c], "-o") && c < argc - 1) { - out_file = GET_WARGV(argv, ++c); - } else if (!strcmp(argv[c], "-lossy")) { - config.lossless = 0; - } else if (!strcmp(argv[c], "-mixed")) { - enc_options.allow_mixed = 1; - config.lossless = 0; - } else if (!strcmp(argv[c], "-loop_compatibility")) { - loop_compatibility = 1; - } else if (!strcmp(argv[c], "-q") && c < argc - 1) { - config.quality = ExUtilGetFloat(argv[++c], &parse_error); - } else if (!strcmp(argv[c], "-m") && c < argc - 1) { - config.method = ExUtilGetInt(argv[++c], 0, &parse_error); - } else if (!strcmp(argv[c], "-min_size")) { - enc_options.minimize_size = 1; - } else if (!strcmp(argv[c], "-kmax") && c < argc - 1) { - enc_options.kmax = ExUtilGetInt(argv[++c], 0, &parse_error); - default_kmax = 0; - } else if (!strcmp(argv[c], "-kmin") && c < argc - 1) { - enc_options.kmin = ExUtilGetInt(argv[++c], 0, &parse_error); - default_kmin = 0; - } else if (!strcmp(argv[c], "-f") && c < argc - 1) { - config.filter_strength = ExUtilGetInt(argv[++c], 0, &parse_error); - } else if (!strcmp(argv[c], "-metadata") && c < argc - 1) { - static const struct { - const char* option; - int flag; - } kTokens[] = { - { "all", METADATA_ALL }, - { "none", 0 }, - { "icc", METADATA_ICC }, - { "xmp", METADATA_XMP }, - }; - const size_t kNumTokens = sizeof(kTokens) / sizeof(*kTokens); - const char* start = argv[++c]; - const char* const end = start + strlen(start); - - keep_metadata = 0; - while (start < end) { - size_t i; - const char* token = strchr(start, ','); - if (token == NULL) token = end; - - for (i = 0; i < kNumTokens; ++i) { - if ((size_t)(token - start) == strlen(kTokens[i].option) && - !strncmp(start, kTokens[i].option, strlen(kTokens[i].option))) { - if (kTokens[i].flag != 0) { - keep_metadata |= kTokens[i].flag; - } else { - keep_metadata = 0; - } - break; - } - } - if (i == kNumTokens) { - fprintf(stderr, "Error! Unknown metadata type '%.*s'\n", - (int)(token - start), start); - Help(); - FREE_WARGV_AND_RETURN(-1); - } - start = token + 1; - } - } else if (!strcmp(argv[c], "-mt")) { - ++config.thread_level; - } else if (!strcmp(argv[c], "-version")) { - const int enc_version = WebPGetEncoderVersion(); - const int mux_version = WebPGetMuxVersion(); - printf("WebP Encoder version: %d.%d.%d\nWebP Mux version: %d.%d.%d\n", - (enc_version >> 16) & 0xff, (enc_version >> 8) & 0xff, - enc_version & 0xff, (mux_version >> 16) & 0xff, - (mux_version >> 8) & 0xff, mux_version & 0xff); - FREE_WARGV_AND_RETURN(0); - } else if (!strcmp(argv[c], "-quiet")) { - quiet = 1; - enc_options.verbose = 0; - } else if (!strcmp(argv[c], "-v")) { - verbose = 1; - enc_options.verbose = 1; - } else if (!strcmp(argv[c], "--")) { - if (c < argc - 1) in_file = GET_WARGV(argv, ++c); - break; - } else if (argv[c][0] == '-') { - fprintf(stderr, "Error! Unknown option '%s'\n", argv[c]); - Help(); - FREE_WARGV_AND_RETURN(-1); - } else { - in_file = GET_WARGV(argv, c); - } - - if (parse_error) { - Help(); - FREE_WARGV_AND_RETURN(-1); - } - } - - // Appropriate default kmin, kmax values for lossy and lossless. - if (default_kmin) { - enc_options.kmin = config.lossless ? 9 : 3; - } - if (default_kmax) { - enc_options.kmax = config.lossless ? 17 : 5; - } - - if (!WebPValidateConfig(&config)) { - fprintf(stderr, "Error! Invalid configuration.\n"); - goto End; - } - - if (in_file == NULL) { - fprintf(stderr, "No input file specified!\n"); - Help(); - goto End; - } - - // Start the decoder object - gif = DGifOpenFileUnicode(in_file, &gif_error); - if (gif == NULL) goto End; - - // Loop over GIF images - done = 0; - do { - GifRecordType type; - if (DGifGetRecordType(gif, &type) == GIF_ERROR) goto End; - - switch (type) { - case IMAGE_DESC_RECORD_TYPE: { - GIFFrameRect gif_rect; - GifImageDesc* const image_desc = &gif->Image; - - if (!DGifGetImageDesc(gif)) goto End; - - if (frame_number == 0) { - if (verbose) { - printf("Canvas screen: %d x %d\n", gif->SWidth, gif->SHeight); - } - // Fix some broken GIF global headers that report - // 0 x 0 screen dimension. - if (gif->SWidth == 0 || gif->SHeight == 0) { - image_desc->Left = 0; - image_desc->Top = 0; - gif->SWidth = image_desc->Width; - gif->SHeight = image_desc->Height; - if (gif->SWidth <= 0 || gif->SHeight <= 0) { - goto End; - } - if (verbose) { - printf("Fixed canvas screen dimension to: %d x %d\n", - gif->SWidth, gif->SHeight); - } - } - // Allocate current buffer. - frame.width = gif->SWidth; - frame.height = gif->SHeight; - frame.use_argb = 1; - if (!WebPPictureAlloc(&frame)) goto End; - GIFClearPic(&frame, NULL); - WebPPictureCopy(&frame, &curr_canvas); - WebPPictureCopy(&frame, &prev_canvas); - - // Background color. - GIFGetBackgroundColor(gif->SColorMap, gif->SBackGroundColor, - transparent_index, - &enc_options.anim_params.bgcolor); - - // Initialize encoder. - enc = WebPAnimEncoderNew(curr_canvas.width, curr_canvas.height, - &enc_options); - if (enc == NULL) { - fprintf(stderr, - "Error! Could not create encoder object. Possibly due to " - "a memory error.\n"); - goto End; - } - } - - // Some even more broken GIF can have sub-rect with zero width/height. - if (image_desc->Width == 0 || image_desc->Height == 0) { - image_desc->Width = gif->SWidth; - image_desc->Height = gif->SHeight; - } - - if (!GIFReadFrame(gif, transparent_index, &gif_rect, &frame)) { - goto End; - } - // Blend frame rectangle with previous canvas to compose full canvas. - // Note that 'curr_canvas' is same as 'prev_canvas' at this point. - GIFBlendFrames(&frame, &gif_rect, &curr_canvas); - - if (!WebPAnimEncoderAdd(enc, &curr_canvas, frame_timestamp, &config)) { - fprintf(stderr, "Error while adding frame #%d: %s\n", frame_number, - WebPAnimEncoderGetError(enc)); - goto End; - } else { - ++frame_number; - } - - // Update canvases. - GIFDisposeFrame(orig_dispose, &gif_rect, &prev_canvas, &curr_canvas); - GIFCopyPixels(&curr_canvas, &prev_canvas); - - // Force frames with a small or no duration to 100ms to be consistent - // with web browsers and other transcoding tools. This also avoids - // incorrect durations between frames when padding frames are - // discarded. - if (frame_duration <= 10) { - frame_duration = 100; - } - - // Update timestamp (for next frame). - frame_timestamp += frame_duration; - - // In GIF, graphic control extensions are optional for a frame, so we - // may not get one before reading the next frame. To handle this case, - // we reset frame properties to reasonable defaults for the next frame. - orig_dispose = GIF_DISPOSE_NONE; - frame_duration = 0; - transparent_index = GIF_INDEX_INVALID; - break; - } - case EXTENSION_RECORD_TYPE: { - int extension; - GifByteType* data = NULL; - if (DGifGetExtension(gif, &extension, &data) == GIF_ERROR) { - goto End; - } - if (data == NULL) continue; - - switch (extension) { - case COMMENT_EXT_FUNC_CODE: { - break; // Do nothing for now. - } - case GRAPHICS_EXT_FUNC_CODE: { - if (!GIFReadGraphicsExtension(data, &frame_duration, &orig_dispose, - &transparent_index)) { - goto End; - } - break; - } - case PLAINTEXT_EXT_FUNC_CODE: { - break; - } - case APPLICATION_EXT_FUNC_CODE: { - if (data[0] != 11) break; // Chunk is too short - if (!memcmp(data + 1, "NETSCAPE2.0", 11) || - !memcmp(data + 1, "ANIMEXTS1.0", 11)) { - if (!GIFReadLoopCount(gif, &data, &loop_count)) { - goto End; - } - if (verbose) { - fprintf(stderr, "Loop count: %d\n", loop_count); - } - stored_loop_count = loop_compatibility ? (loop_count != 0) : 1; - } else { // An extension containing metadata. - // We only store the first encountered chunk of each type, and - // only if requested by the user. - const int is_xmp = (keep_metadata & METADATA_XMP) && - !stored_xmp && - !memcmp(data + 1, "XMP DataXMP", 11); - const int is_icc = (keep_metadata & METADATA_ICC) && - !stored_icc && - !memcmp(data + 1, "ICCRGBG1012", 11); - if (is_xmp || is_icc) { - if (!GIFReadMetadata(gif, &data, - is_xmp ? &xmp_data : &icc_data)) { - goto End; - } - if (is_icc) { - stored_icc = 1; - } else if (is_xmp) { - stored_xmp = 1; - } - } - } - break; - } - default: { - break; // skip - } - } - while (data != NULL) { - if (DGifGetExtensionNext(gif, &data) == GIF_ERROR) goto End; - } - break; - } - case TERMINATE_RECORD_TYPE: { - done = 1; - break; - } - default: { - if (verbose) { - fprintf(stderr, "Skipping over unknown record type %d\n", type); - } - break; - } - } - } while (!done); - - // Last NULL frame. - if (!WebPAnimEncoderAdd(enc, NULL, frame_timestamp, NULL)) { - fprintf(stderr, "Error flushing WebP muxer.\n"); - fprintf(stderr, "%s\n", WebPAnimEncoderGetError(enc)); - } - - if (!WebPAnimEncoderAssemble(enc, &webp_data)) { - fprintf(stderr, "%s\n", WebPAnimEncoderGetError(enc)); - goto End; - } - - if (!loop_compatibility) { - if (!stored_loop_count) { - // if no loop-count element is seen, the default is '1' (loop-once) - // and we need to signal it explicitly in WebP. Note however that - // in case there's a single frame, we still don't need to store it. - if (frame_number > 1) { - stored_loop_count = 1; - loop_count = 1; - } - } else if (loop_count > 0 && loop_count < 65535) { - // adapt GIF's semantic to WebP's (except in the infinite-loop case) - loop_count += 1; - } - } - // loop_count of 0 is the default (infinite), so no need to signal it - if (loop_count == 0) stored_loop_count = 0; - - if (stored_loop_count || stored_icc || stored_xmp) { - // Re-mux to add loop count and/or metadata as needed. - mux = WebPMuxCreate(&webp_data, 1); - if (mux == NULL) { - fprintf(stderr, "ERROR: Could not re-mux to add loop count/metadata.\n"); - goto End; - } - WebPDataClear(&webp_data); - - if (stored_loop_count) { // Update loop count. - WebPMuxAnimParams new_params; - err = WebPMuxGetAnimationParams(mux, &new_params); - if (err != WEBP_MUX_OK) { - fprintf(stderr, "ERROR (%s): Could not fetch loop count.\n", - ErrorString(err)); - goto End; - } - new_params.loop_count = loop_count; - err = WebPMuxSetAnimationParams(mux, &new_params); - if (err != WEBP_MUX_OK) { - fprintf(stderr, "ERROR (%s): Could not update loop count.\n", - ErrorString(err)); - goto End; - } - } - - if (stored_icc) { // Add ICCP chunk. - err = WebPMuxSetChunk(mux, "ICCP", &icc_data, 1); - if (verbose) { - fprintf(stderr, "ICC size: %d\n", (int)icc_data.size); - } - if (err != WEBP_MUX_OK) { - fprintf(stderr, "ERROR (%s): Could not set ICC chunk.\n", - ErrorString(err)); - goto End; - } - } - - if (stored_xmp) { // Add XMP chunk. - err = WebPMuxSetChunk(mux, "XMP ", &xmp_data, 1); - if (verbose) { - fprintf(stderr, "XMP size: %d\n", (int)xmp_data.size); - } - if (err != WEBP_MUX_OK) { - fprintf(stderr, "ERROR (%s): Could not set XMP chunk.\n", - ErrorString(err)); - goto End; - } - } - - err = WebPMuxAssemble(mux, &webp_data); - if (err != WEBP_MUX_OK) { - fprintf(stderr, "ERROR (%s): Could not assemble when re-muxing to add " - "loop count/metadata.\n", ErrorString(err)); - goto End; - } - } - - if (out_file != NULL) { - if (!ImgIoUtilWriteFile((const char*)out_file, webp_data.bytes, - webp_data.size)) { - WFPRINTF(stderr, "Error writing output file: %s\n", out_file); - goto End; - } - if (!quiet) { - if (!WSTRCMP(out_file, "-")) { - fprintf(stderr, "Saved %d bytes to STDIO\n", - (int)webp_data.size); - } else { - WFPRINTF(stderr, "Saved output file (%d bytes): %s\n", - (int)webp_data.size, out_file); - } - } - } else { - if (!quiet) { - fprintf(stderr, "Nothing written; use -o flag to save the result " - "(%d bytes).\n", (int)webp_data.size); - } - } - - // All OK. - ok = 1; - gif_error = GIF_OK; - - End: - WebPDataClear(&icc_data); - WebPDataClear(&xmp_data); - WebPMuxDelete(mux); - WebPDataClear(&webp_data); - WebPPictureFree(&frame); - WebPPictureFree(&curr_canvas); - WebPPictureFree(&prev_canvas); - WebPAnimEncoderDelete(enc); - - if (gif_error != GIF_OK) { - GIFDisplayError(gif, gif_error); - } - if (gif != NULL) { -#if LOCAL_GIF_PREREQ(5,1) - DGifCloseFile(gif, &gif_error); -#else - DGifCloseFile(gif); -#endif - } - - FREE_WARGV_AND_RETURN(!ok); -} - -#else // !WEBP_HAVE_GIF - -int main(int argc, const char* argv[]) { - fprintf(stderr, "GIF support not enabled in %s.\n", argv[0]); - (void)argc; - return 0; -} - -#endif - -//------------------------------------------------------------------------------ diff --git a/Extended/libwebp/examples/gifdec.c b/Extended/libwebp/examples/gifdec.c deleted file mode 100644 index 99ee996..0000000 --- a/Extended/libwebp/examples/gifdec.c +++ /dev/null @@ -1,416 +0,0 @@ -// Copyright 2012 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// GIF decode. - -#include "./gifdec.h" - -#include - -#ifdef WEBP_HAVE_GIF -#include -#include -#include - -#include "webp/encode.h" -#include "webp/mux_types.h" - -#define GIF_TRANSPARENT_COLOR 0x00000000u -#define GIF_WHITE_COLOR 0xffffffffu -#define GIF_TRANSPARENT_MASK 0x01 -#define GIF_DISPOSE_MASK 0x07 -#define GIF_DISPOSE_SHIFT 2 - -// from utils/utils.h -#ifdef __cplusplus -extern "C" { -#endif -extern void WebPCopyPlane(const uint8_t* src, int src_stride, - uint8_t* dst, int dst_stride, - int width, int height); -extern void WebPCopyPixels(const WebPPicture* const src, - WebPPicture* const dst); -#ifdef __cplusplus -} -#endif - -void GIFGetBackgroundColor(const ColorMapObject* const color_map, - int bgcolor_index, int transparent_index, - uint32_t* const bgcolor) { - if (transparent_index != GIF_INDEX_INVALID && - bgcolor_index == transparent_index) { - *bgcolor = GIF_TRANSPARENT_COLOR; // Special case. - } else if (color_map == NULL || color_map->Colors == NULL - || bgcolor_index >= color_map->ColorCount) { - *bgcolor = GIF_WHITE_COLOR; - fprintf(stderr, - "GIF decode warning: invalid background color index. Assuming " - "white background.\n"); - } else { - const GifColorType color = color_map->Colors[bgcolor_index]; - *bgcolor = (0xffu << 24) - | (color.Red << 16) - | (color.Green << 8) - | (color.Blue << 0); - } -} - -int GIFReadGraphicsExtension(const GifByteType* const buf, int* const duration, - GIFDisposeMethod* const dispose, - int* const transparent_index) { - const int flags = buf[1]; - const int dispose_raw = (flags >> GIF_DISPOSE_SHIFT) & GIF_DISPOSE_MASK; - const int duration_raw = buf[2] | (buf[3] << 8); // In 10 ms units. - if (buf[0] != 4) return 0; - *duration = duration_raw * 10; // Duration is in 1 ms units. - switch (dispose_raw) { - case 3: - *dispose = GIF_DISPOSE_RESTORE_PREVIOUS; - break; - case 2: - *dispose = GIF_DISPOSE_BACKGROUND; - break; - case 1: - case 0: - default: - *dispose = GIF_DISPOSE_NONE; - break; - } - *transparent_index = - (flags & GIF_TRANSPARENT_MASK) ? buf[4] : GIF_INDEX_INVALID; - return 1; -} - -static int Remap(const GifFileType* const gif, const uint8_t* const src, - int len, int transparent_index, uint32_t* dst) { - int i; - const GifColorType* colors; - const ColorMapObject* const cmap = - gif->Image.ColorMap ? gif->Image.ColorMap : gif->SColorMap; - if (cmap == NULL) return 1; - if (cmap->Colors == NULL || cmap->ColorCount <= 0) return 0; - colors = cmap->Colors; - - for (i = 0; i < len; ++i) { - if (src[i] == transparent_index) { - dst[i] = GIF_TRANSPARENT_COLOR; - } else if (src[i] < cmap->ColorCount) { - const GifColorType c = colors[src[i]]; - dst[i] = c.Blue | (c.Green << 8) | (c.Red << 16) | (0xffu << 24); - } else { - return 0; - } - } - return 1; -} - -int GIFReadFrame(GifFileType* const gif, int transparent_index, - GIFFrameRect* const gif_rect, WebPPicture* const picture) { - WebPPicture sub_image; - const GifImageDesc* const image_desc = &gif->Image; - uint32_t* dst = NULL; - uint8_t* tmp = NULL; - const GIFFrameRect rect = { - image_desc->Left, image_desc->Top, image_desc->Width, image_desc->Height - }; - const uint64_t memory_needed = 4 * rect.width * (uint64_t)rect.height; - int ok = 0; - *gif_rect = rect; - - if (memory_needed != (size_t)memory_needed || memory_needed > (4ULL << 32)) { - fprintf(stderr, "Image is too large (%d x %d).", rect.width, rect.height); - return 0; - } - - // Use a view for the sub-picture: - if (!WebPPictureView(picture, rect.x_offset, rect.y_offset, - rect.width, rect.height, &sub_image)) { - fprintf(stderr, "Sub-image %dx%d at position %d,%d is invalid!\n", - rect.width, rect.height, rect.x_offset, rect.y_offset); - return 0; - } - dst = sub_image.argb; - - tmp = (uint8_t*)WebPMalloc(rect.width * sizeof(*tmp)); - if (tmp == NULL) goto End; - - if (image_desc->Interlace) { // Interlaced image. - // We need 4 passes, with the following offsets and jumps. - const int interlace_offsets[] = { 0, 4, 2, 1 }; - const int interlace_jumps[] = { 8, 8, 4, 2 }; - int pass; - for (pass = 0; pass < 4; ++pass) { - const size_t stride = (size_t)sub_image.argb_stride; - int y = interlace_offsets[pass]; - uint32_t* row = dst + y * stride; - const size_t jump = interlace_jumps[pass] * stride; - for (; y < rect.height; y += interlace_jumps[pass], row += jump) { - if (DGifGetLine(gif, tmp, rect.width) == GIF_ERROR) goto End; - if (!Remap(gif, tmp, rect.width, transparent_index, row)) goto End; - } - } - } else { // Non-interlaced image. - int y; - uint32_t* ptr = dst; - for (y = 0; y < rect.height; ++y, ptr += sub_image.argb_stride) { - if (DGifGetLine(gif, tmp, rect.width) == GIF_ERROR) goto End; - if (!Remap(gif, tmp, rect.width, transparent_index, ptr)) goto End; - } - } - ok = 1; - - End: - if (!ok) picture->error_code = sub_image.error_code; - WebPPictureFree(&sub_image); - WebPFree(tmp); - return ok; -} - -int GIFReadLoopCount(GifFileType* const gif, GifByteType** const buf, - int* const loop_count) { - assert(!memcmp(*buf + 1, "NETSCAPE2.0", 11) || - !memcmp(*buf + 1, "ANIMEXTS1.0", 11)); - if (DGifGetExtensionNext(gif, buf) == GIF_ERROR) { - return 0; - } - if (*buf == NULL) { - return 0; // Loop count sub-block missing. - } - if ((*buf)[0] < 3 || (*buf)[1] != 1) { - return 0; // wrong size/marker - } - *loop_count = (*buf)[2] | ((*buf)[3] << 8); - return 1; -} - -int GIFReadMetadata(GifFileType* const gif, GifByteType** const buf, - WebPData* const metadata) { - const int is_xmp = !memcmp(*buf + 1, "XMP DataXMP", 11); - const int is_icc = !memcmp(*buf + 1, "ICCRGBG1012", 11); - assert(is_xmp || is_icc); - (void)is_icc; // silence unused warning. - // Construct metadata from sub-blocks. - // Usual case (including ICC profile): In each sub-block, the - // first byte specifies its size in bytes (0 to 255) and the - // rest of the bytes contain the data. - // Special case for XMP data: In each sub-block, the first byte - // is also part of the XMP payload. XMP in GIF also has a 257 - // byte padding data. See the XMP specification for details. - while (1) { - WebPData subblock; - const uint8_t* tmp; - if (DGifGetExtensionNext(gif, buf) == GIF_ERROR) { - return 0; - } - if (*buf == NULL) break; // Finished. - subblock.size = is_xmp ? (*buf)[0] + 1 : (*buf)[0]; - assert(subblock.size > 0); - subblock.bytes = is_xmp ? *buf : *buf + 1; - // Note: We store returned value in 'tmp' first, to avoid - // leaking old memory in metadata->bytes on error. - tmp = (uint8_t*)realloc((void*)metadata->bytes, - metadata->size + subblock.size); - if (tmp == NULL) { - return 0; - } - memcpy((void*)(tmp + metadata->size), - subblock.bytes, subblock.size); - metadata->bytes = tmp; - metadata->size += subblock.size; - } - if (is_xmp) { - // XMP padding data is 0x01, 0xff, 0xfe ... 0x01, 0x00. - const size_t xmp_pading_size = 257; - if (metadata->size > xmp_pading_size) { - metadata->size -= xmp_pading_size; - } - } - return 1; -} - -static void ClearRectangle(WebPPicture* const picture, - int left, int top, int width, int height) { - int i, j; - const size_t stride = picture->argb_stride; - uint32_t* dst = picture->argb + top * stride + left; - for (j = 0; j < height; ++j, dst += stride) { - for (i = 0; i < width; ++i) dst[i] = GIF_TRANSPARENT_COLOR; - } -} - -void GIFClearPic(WebPPicture* const pic, const GIFFrameRect* const rect) { - if (rect != NULL) { - ClearRectangle(pic, rect->x_offset, rect->y_offset, - rect->width, rect->height); - } else { - ClearRectangle(pic, 0, 0, pic->width, pic->height); - } -} - -void GIFCopyPixels(const WebPPicture* const src, WebPPicture* const dst) { - WebPCopyPixels(src, dst); -} - -void GIFDisposeFrame(GIFDisposeMethod dispose, const GIFFrameRect* const rect, - const WebPPicture* const prev_canvas, - WebPPicture* const curr_canvas) { - assert(rect != NULL); - if (dispose == GIF_DISPOSE_BACKGROUND) { - GIFClearPic(curr_canvas, rect); - } else if (dispose == GIF_DISPOSE_RESTORE_PREVIOUS) { - const size_t src_stride = prev_canvas->argb_stride; - const uint32_t* const src = prev_canvas->argb + rect->x_offset - + rect->y_offset * src_stride; - const size_t dst_stride = curr_canvas->argb_stride; - uint32_t* const dst = curr_canvas->argb + rect->x_offset - + rect->y_offset * dst_stride; - assert(prev_canvas != NULL); - WebPCopyPlane((uint8_t*)src, (int)(4 * src_stride), - (uint8_t*)dst, (int)(4 * dst_stride), - 4 * rect->width, rect->height); - } -} - -void GIFBlendFrames(const WebPPicture* const src, - const GIFFrameRect* const rect, WebPPicture* const dst) { - int i, j; - const size_t src_stride = src->argb_stride; - const size_t dst_stride = dst->argb_stride; - assert(src->width == dst->width && src->height == dst->height); - for (j = rect->y_offset; j < rect->y_offset + rect->height; ++j) { - for (i = rect->x_offset; i < rect->x_offset + rect->width; ++i) { - const uint32_t src_pixel = src->argb[j * src_stride + i]; - const int src_alpha = src_pixel >> 24; - if (src_alpha != 0) { - dst->argb[j * dst_stride + i] = src_pixel; - } - } - } -} - -void GIFDisplayError(const GifFileType* const gif, int gif_error) { - // libgif 4.2.0 has retired PrintGifError() and added GifErrorString(). -#if LOCAL_GIF_PREREQ(4,2) -#if LOCAL_GIF_PREREQ(5,0) - // Static string actually, hence the const char* cast. - const char* error_str = (const char*)GifErrorString( - (gif == NULL) ? gif_error : gif->Error); -#else - const char* error_str = (const char*)GifErrorString(); - (void)gif; -#endif - if (error_str == NULL) error_str = "Unknown error"; - fprintf(stderr, "GIFLib Error %d: %s\n", gif_error, error_str); -#else - (void)gif; - fprintf(stderr, "GIFLib Error %d: ", gif_error); - PrintGifError(); - fprintf(stderr, "\n"); -#endif -} - -#else // !WEBP_HAVE_GIF - -static void ErrorGIFNotAvailable() { - fprintf(stderr, "GIF support not compiled. Please install the libgif-dev " - "package before building.\n"); -} - -void GIFGetBackgroundColor(const struct ColorMapObject* const color_map, - int bgcolor_index, int transparent_index, - uint32_t* const bgcolor) { - (void)color_map; - (void)bgcolor_index; - (void)transparent_index; - (void)bgcolor; - ErrorGIFNotAvailable(); -} - -int GIFReadGraphicsExtension(const GifByteType* const data, int* const duration, - GIFDisposeMethod* const dispose, - int* const transparent_index) { - (void)data; - (void)duration; - (void)dispose; - (void)transparent_index; - ErrorGIFNotAvailable(); - return 0; -} - -int GIFReadFrame(struct GifFileType* const gif, int transparent_index, - GIFFrameRect* const gif_rect, - struct WebPPicture* const picture) { - (void)gif; - (void)transparent_index; - (void)gif_rect; - (void)picture; - ErrorGIFNotAvailable(); - return 0; -} - -int GIFReadLoopCount(struct GifFileType* const gif, GifByteType** const buf, - int* const loop_count) { - (void)gif; - (void)buf; - (void)loop_count; - ErrorGIFNotAvailable(); - return 0; -} - -int GIFReadMetadata(struct GifFileType* const gif, GifByteType** const buf, - struct WebPData* const metadata) { - (void)gif; - (void)buf; - (void)metadata; - ErrorGIFNotAvailable(); - return 0; -} - -void GIFDisposeFrame(GIFDisposeMethod dispose, const GIFFrameRect* const rect, - const struct WebPPicture* const prev_canvas, - struct WebPPicture* const curr_canvas) { - (void)dispose; - (void)rect; - (void)prev_canvas; - (void)curr_canvas; - ErrorGIFNotAvailable(); -} - -void GIFBlendFrames(const struct WebPPicture* const src, - const GIFFrameRect* const rect, - struct WebPPicture* const dst) { - (void)src; - (void)rect; - (void)dst; - ErrorGIFNotAvailable(); -} - -void GIFDisplayError(const struct GifFileType* const gif, int gif_error) { - (void)gif; - (void)gif_error; - ErrorGIFNotAvailable(); -} - -void GIFClearPic(struct WebPPicture* const pic, - const GIFFrameRect* const rect) { - (void)pic; - (void)rect; - ErrorGIFNotAvailable(); -} - -void GIFCopyPixels(const struct WebPPicture* const src, - struct WebPPicture* const dst) { - (void)src; - (void)dst; - ErrorGIFNotAvailable(); -} - -#endif // WEBP_HAVE_GIF - -// ----------------------------------------------------------------------------- diff --git a/Extended/libwebp/examples/gifdec.h b/Extended/libwebp/examples/gifdec.h deleted file mode 100644 index 5eba9dd..0000000 --- a/Extended/libwebp/examples/gifdec.h +++ /dev/null @@ -1,116 +0,0 @@ -// Copyright 2014 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// GIF decode. - -#ifndef WEBP_EXAMPLES_GIFDEC_H_ -#define WEBP_EXAMPLES_GIFDEC_H_ - -#include -#include "webp/types.h" - -#ifdef HAVE_CONFIG_H -#include "webp/config.h" -#endif - -#ifdef WEBP_HAVE_GIF -#include -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -// GIFLIB_MAJOR is only defined in libgif >= 4.2.0. -#if defined(GIFLIB_MAJOR) && defined(GIFLIB_MINOR) -# define LOCAL_GIF_VERSION ((GIFLIB_MAJOR << 8) | GIFLIB_MINOR) -# define LOCAL_GIF_PREREQ(maj, min) \ - (LOCAL_GIF_VERSION >= (((maj) << 8) | (min))) -#else -# define LOCAL_GIF_VERSION 0 -# define LOCAL_GIF_PREREQ(maj, min) 0 -#endif - -#define GIF_INDEX_INVALID (-1) - -typedef enum GIFDisposeMethod { - GIF_DISPOSE_NONE, - GIF_DISPOSE_BACKGROUND, - GIF_DISPOSE_RESTORE_PREVIOUS -} GIFDisposeMethod; - -typedef struct { - int x_offset, y_offset, width, height; -} GIFFrameRect; - -struct WebPData; -struct WebPPicture; - -#ifndef WEBP_HAVE_GIF -struct ColorMapObject; -struct GifFileType; -typedef unsigned char GifByteType; -#endif - -// Given the index of background color and transparent color, returns the -// corresponding background color (in BGRA format) in 'bgcolor'. -void GIFGetBackgroundColor(const struct ColorMapObject* const color_map, - int bgcolor_index, int transparent_index, - uint32_t* const bgcolor); - -// Parses the given graphics extension data to get frame duration (in 1ms -// units), dispose method and transparent color index. -// Returns true on success. -int GIFReadGraphicsExtension(const GifByteType* const buf, int* const duration, - GIFDisposeMethod* const dispose, - int* const transparent_index); - -// Reads the next GIF frame from 'gif' into 'picture'. Also, returns the GIF -// frame dimensions and offsets in 'rect'. -// Returns true on success. -int GIFReadFrame(struct GifFileType* const gif, int transparent_index, - GIFFrameRect* const gif_rect, - struct WebPPicture* const picture); - -// Parses loop count from the given Netscape extension data. -int GIFReadLoopCount(struct GifFileType* const gif, GifByteType** const buf, - int* const loop_count); - -// Parses the given ICC or XMP extension data and stores it into 'metadata'. -// Returns true on success. -int GIFReadMetadata(struct GifFileType* const gif, GifByteType** const buf, - struct WebPData* const metadata); - -// Dispose the pixels within 'rect' of 'curr_canvas' based on 'dispose' method -// and 'prev_canvas'. -void GIFDisposeFrame(GIFDisposeMethod dispose, const GIFFrameRect* const rect, - const struct WebPPicture* const prev_canvas, - struct WebPPicture* const curr_canvas); - -// Given 'src' picture and its frame rectangle 'rect', blend it into 'dst'. -void GIFBlendFrames(const struct WebPPicture* const src, - const GIFFrameRect* const rect, - struct WebPPicture* const dst); - -// Prints an error string based on 'gif_error'. -void GIFDisplayError(const struct GifFileType* const gif, int gif_error); - -// In the given 'pic', clear the pixels in 'rect' to transparent color. -void GIFClearPic(struct WebPPicture* const pic, const GIFFrameRect* const rect); - -// Copy pixels from 'src' to 'dst' honoring strides. 'src' and 'dst' are assumed -// to be already allocated. -void GIFCopyPixels(const struct WebPPicture* const src, - struct WebPPicture* const dst); - -#ifdef __cplusplus -} // extern "C" -#endif - -#endif // WEBP_EXAMPLES_GIFDEC_H_ diff --git a/Extended/libwebp/examples/img2webp.c b/Extended/libwebp/examples/img2webp.c deleted file mode 100644 index f7e5489..0000000 --- a/Extended/libwebp/examples/img2webp.c +++ /dev/null @@ -1,324 +0,0 @@ -// Copyright 2016 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// generate an animated WebP out of a sequence of images -// (PNG, JPEG, ...) -// -// Example usage: -// img2webp -o out.webp -q 40 -mixed -duration 40 input??.png -// -// Author: skal@google.com (Pascal Massimino) - -#include -#include -#include - -#ifdef HAVE_CONFIG_H -#include "webp/config.h" -#endif - -#include "../examples/example_util.h" -#include "../imageio/image_dec.h" -#include "../imageio/imageio_util.h" -#include "./stopwatch.h" -#include "./unicode.h" -#include "webp/encode.h" -#include "webp/mux.h" - -//------------------------------------------------------------------------------ - -static void Help(void) { - printf("Usage:\n\n"); - printf(" img2webp [file-level options] [image files...] " - "[per-frame options...]\n"); - printf("\n"); - - printf("File-level options (only used at the start of compression):\n"); - printf(" -min_size ............ minimize size\n"); - printf(" -loop .......... loop count (default: 0, = infinite loop)\n"); - printf(" -kmax .......... maximum number of frame between key-frames\n" - " (0=only keyframes)\n"); - printf(" -kmin .......... minimum number of frame between key-frames\n" - " (0=disable key-frames altogether)\n"); - printf(" -mixed ............... use mixed lossy/lossless automatic mode\n"); - printf(" -v ................... verbose mode\n"); - printf(" -h ................... this help\n"); - printf(" -version ............. print version number and exit\n"); - printf("\n"); - - printf("Per-frame options (only used for subsequent images input):\n"); - printf(" -d ............. frame duration in ms (default: 100)\n"); - printf(" -lossless ........... use lossless mode (default)\n"); - printf(" -lossy ... ........... use lossy mode\n"); - printf(" -q ........... quality\n"); - printf(" -m ............. method to use\n"); - - printf("\n"); - printf("example: img2webp -loop 2 in0.png -lossy in1.jpg\n" - " -d 80 in2.tiff -o out.webp\n"); - printf("\nNote: if a single file name is passed as the argument, the " - "arguments will be\n"); - printf("tokenized from this file. The file name must not start with " - "the character '-'.\n"); -} - -//------------------------------------------------------------------------------ - -static int ReadImage(const char filename[], WebPPicture* const pic) { - const uint8_t* data = NULL; - size_t data_size = 0; - WebPImageReader reader; - int ok; -#ifdef HAVE_WINCODEC_H - // Try to decode the file using WIC falling back to the other readers for - // e.g., WebP. - ok = ReadPictureWithWIC(filename, pic, 1, NULL); - if (ok) return 1; -#endif - if (!ImgIoUtilReadFile(filename, &data, &data_size)) return 0; - reader = WebPGuessImageReader(data, data_size); - ok = reader(data, data_size, pic, 1, NULL); - free((void*)data); - return ok; -} - -static int SetLoopCount(int loop_count, WebPData* const webp_data) { - int ok = 1; - WebPMuxError err; - uint32_t features; - WebPMuxAnimParams new_params; - WebPMux* const mux = WebPMuxCreate(webp_data, 1); - if (mux == NULL) return 0; - - err = WebPMuxGetFeatures(mux, &features); - ok = (err == WEBP_MUX_OK); - if (!ok || !(features & ANIMATION_FLAG)) goto End; - - err = WebPMuxGetAnimationParams(mux, &new_params); - ok = (err == WEBP_MUX_OK); - if (ok) { - new_params.loop_count = loop_count; - err = WebPMuxSetAnimationParams(mux, &new_params); - ok = (err == WEBP_MUX_OK); - } - if (ok) { - WebPDataClear(webp_data); - err = WebPMuxAssemble(mux, webp_data); - ok = (err == WEBP_MUX_OK); - } - - End: - WebPMuxDelete(mux); - if (!ok) { - fprintf(stderr, "Error during loop-count setting\n"); - } - return ok; -} - -//------------------------------------------------------------------------------ - -int main(int argc, const char* argv[]) { - const char* output = NULL; - WebPAnimEncoder* enc = NULL; - int verbose = 0; - int pic_num = 0; - int duration = 100; - int timestamp_ms = 0; - int loop_count = 0; - int width = 0, height = 0; - WebPAnimEncoderOptions anim_config; - WebPConfig config; - WebPPicture pic; - WebPData webp_data; - int c; - int have_input = 0; - CommandLineArguments cmd_args; - int ok; - - INIT_WARGV(argc, argv); - - ok = ExUtilInitCommandLineArguments(argc - 1, argv + 1, &cmd_args); - if (!ok) FREE_WARGV_AND_RETURN(1); - - argc = cmd_args.argc_; - argv = cmd_args.argv_; - - WebPDataInit(&webp_data); - if (!WebPAnimEncoderOptionsInit(&anim_config) || - !WebPConfigInit(&config) || - !WebPPictureInit(&pic)) { - fprintf(stderr, "Library version mismatch!\n"); - ok = 0; - goto End; - } - - // 1st pass of option parsing - for (c = 0; ok && c < argc; ++c) { - if (argv[c][0] == '-') { - int parse_error = 0; - if (!strcmp(argv[c], "-o") && c + 1 < argc) { - argv[c] = NULL; - output = (const char*)GET_WARGV_SHIFTED(argv, ++c); - } else if (!strcmp(argv[c], "-kmin") && c + 1 < argc) { - argv[c] = NULL; - anim_config.kmin = ExUtilGetInt(argv[++c], 0, &parse_error); - } else if (!strcmp(argv[c], "-kmax") && c + 1 < argc) { - argv[c] = NULL; - anim_config.kmax = ExUtilGetInt(argv[++c], 0, &parse_error); - } else if (!strcmp(argv[c], "-loop") && c + 1 < argc) { - argv[c] = NULL; - loop_count = ExUtilGetInt(argv[++c], 0, &parse_error); - if (loop_count < 0) { - fprintf(stderr, "Invalid non-positive loop-count (%d)\n", loop_count); - parse_error = 1; - } - } else if (!strcmp(argv[c], "-min_size")) { - anim_config.minimize_size = 1; - } else if (!strcmp(argv[c], "-mixed")) { - anim_config.allow_mixed = 1; - config.lossless = 0; - } else if (!strcmp(argv[c], "-v")) { - verbose = 1; - } else if (!strcmp(argv[c], "-h") || !strcmp(argv[c], "-help")) { - Help(); - goto End; - } else if (!strcmp(argv[c], "-version")) { - const int enc_version = WebPGetEncoderVersion(); - const int mux_version = WebPGetMuxVersion(); - printf("WebP Encoder version: %d.%d.%d\nWebP Mux version: %d.%d.%d\n", - (enc_version >> 16) & 0xff, (enc_version >> 8) & 0xff, - enc_version & 0xff, (mux_version >> 16) & 0xff, - (mux_version >> 8) & 0xff, mux_version & 0xff); - goto End; - } else { - continue; - } - ok = !parse_error; - if (!ok) goto End; - argv[c] = NULL; // mark option as 'parsed' during 1st pass - } else { - have_input |= 1; - } - } - if (!have_input) { - fprintf(stderr, "No input file(s) for generating animation!\n"); - goto End; - } - - // image-reading pass - pic_num = 0; - config.lossless = 1; - for (c = 0; ok && c < argc; ++c) { - if (argv[c] == NULL) continue; - if (argv[c][0] == '-') { // parse local options - int parse_error = 0; - if (!strcmp(argv[c], "-lossy")) { - if (!anim_config.allow_mixed) config.lossless = 0; - } else if (!strcmp(argv[c], "-lossless")) { - if (!anim_config.allow_mixed) config.lossless = 1; - } else if (!strcmp(argv[c], "-q") && c + 1 < argc) { - config.quality = ExUtilGetFloat(argv[++c], &parse_error); - } else if (!strcmp(argv[c], "-m") && c + 1 < argc) { - config.method = ExUtilGetInt(argv[++c], 0, &parse_error); - } else if (!strcmp(argv[c], "-d") && c + 1 < argc) { - duration = ExUtilGetInt(argv[++c], 0, &parse_error); - if (duration <= 0) { - fprintf(stderr, "Invalid negative duration (%d)\n", duration); - parse_error = 1; - } - } else { - parse_error = 1; // shouldn't be here. - fprintf(stderr, "Unknown option [%s]\n", argv[c]); - } - ok = !parse_error; - if (!ok) goto End; - continue; - } - - if (ok) { - ok = WebPValidateConfig(&config); - if (!ok) { - fprintf(stderr, "Invalid configuration.\n"); - goto End; - } - } - - // read next input image - pic.use_argb = 1; - ok = ReadImage((const char*)GET_WARGV_SHIFTED(argv, c), &pic); - if (!ok) goto End; - - if (enc == NULL) { - width = pic.width; - height = pic.height; - enc = WebPAnimEncoderNew(width, height, &anim_config); - ok = (enc != NULL); - if (!ok) { - fprintf(stderr, "Could not create WebPAnimEncoder object.\n"); - } - } - - if (ok) { - ok = (width == pic.width && height == pic.height); - if (!ok) { - fprintf(stderr, "Frame #%d dimension mismatched! " - "Got %d x %d. Was expecting %d x %d.\n", - pic_num, pic.width, pic.height, width, height); - } - } - - if (ok) { - ok = WebPAnimEncoderAdd(enc, &pic, timestamp_ms, &config); - if (!ok) { - fprintf(stderr, "Error while adding frame #%d\n", pic_num); - } - } - WebPPictureFree(&pic); - if (!ok) goto End; - - if (verbose) { - WFPRINTF(stderr, "Added frame #%3d at time %4d (file: %s)\n", - pic_num, timestamp_ms, GET_WARGV_SHIFTED(argv, c)); - } - timestamp_ms += duration; - ++pic_num; - } - - // add a last fake frame to signal the last duration - ok = ok && WebPAnimEncoderAdd(enc, NULL, timestamp_ms, NULL); - ok = ok && WebPAnimEncoderAssemble(enc, &webp_data); - if (!ok) { - fprintf(stderr, "Error during final animation assembly.\n"); - } - - End: - // free resources - WebPAnimEncoderDelete(enc); - - if (ok && loop_count > 0) { // Re-mux to add loop count. - ok = SetLoopCount(loop_count, &webp_data); - } - - if (ok) { - if (output != NULL) { - ok = ImgIoUtilWriteFile(output, webp_data.bytes, webp_data.size); - if (ok) WFPRINTF(stderr, "output file: %s ", (const W_CHAR*)output); - } else { - fprintf(stderr, "[no output file specified] "); - } - } - - if (ok) { - fprintf(stderr, "[%d frames, %u bytes].\n", - pic_num, (unsigned int)webp_data.size); - } - WebPDataClear(&webp_data); - ExUtilDeleteCommandLineArguments(&cmd_args); - FREE_WARGV_AND_RETURN(ok ? 0 : 1); -} diff --git a/Extended/libwebp/examples/stopwatch.h b/Extended/libwebp/examples/stopwatch.h deleted file mode 100644 index f1b0fac..0000000 --- a/Extended/libwebp/examples/stopwatch.h +++ /dev/null @@ -1,63 +0,0 @@ -// Copyright 2011 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Helper functions to measure elapsed time. -// -// Author: Mikolaj Zalewski (mikolajz@google.com) - -#ifndef WEBP_EXAMPLES_STOPWATCH_H_ -#define WEBP_EXAMPLES_STOPWATCH_H_ - -#include "webp/types.h" - -#if defined _WIN32 && !defined __GNUC__ -#include - -typedef LARGE_INTEGER Stopwatch; - -static WEBP_INLINE void StopwatchReset(Stopwatch* watch) { - QueryPerformanceCounter(watch); -} - -static WEBP_INLINE double StopwatchReadAndReset(Stopwatch* watch) { - const LARGE_INTEGER old_value = *watch; - LARGE_INTEGER freq; - if (!QueryPerformanceCounter(watch)) - return 0.0; - if (!QueryPerformanceFrequency(&freq)) - return 0.0; - if (freq.QuadPart == 0) - return 0.0; - return (watch->QuadPart - old_value.QuadPart) / (double)freq.QuadPart; -} - - -#else /* !_WIN32 */ -#include // memcpy -#include - -typedef struct timeval Stopwatch; - -static WEBP_INLINE void StopwatchReset(Stopwatch* watch) { - gettimeofday(watch, NULL); -} - -static WEBP_INLINE double StopwatchReadAndReset(Stopwatch* watch) { - struct timeval old_value; - double delta_sec, delta_usec; - memcpy(&old_value, watch, sizeof(old_value)); - gettimeofday(watch, NULL); - delta_sec = (double)watch->tv_sec - old_value.tv_sec; - delta_usec = (double)watch->tv_usec - old_value.tv_usec; - return delta_sec + delta_usec / 1000000.0; -} - -#endif /* _WIN32 */ - -#endif // WEBP_EXAMPLES_STOPWATCH_H_ diff --git a/Extended/libwebp/examples/test.webp b/Extended/libwebp/examples/test.webp deleted file mode 100644 index 3e4bca1d8500ec465177ebac7c30d6cfde656c10..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4880 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 Cu81!H diff --git a/Extended/libwebp/examples/test_ref.ppm b/Extended/libwebp/examples/test_ref.ppm deleted file mode 100644 index 97719f0..0000000 --- a/Extended/libwebp/examples/test_ref.ppm +++ /dev/null @@ -1,4 +0,0 @@ -P6 -128 128 -255 -�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������܇����������Ο������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������m{�dq�ht�lv�s{����y������������ƽ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lz�\j�mz�hq�mw�������������������Ÿ�˕����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ځ��r��Wd~\i�~�����jq����z����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������y��M[vXf�Vc}[deo�ip����fj����xz�}}�~{�qo������������������ڽ�՘�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������fw�M]wLZtMZsOXq_f�jq�~��rv�rs�������ss�vs�}������������������Nj�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Xk�IZsL\vP^yN[tbi�sx�������~�������ˁ��}}�qq�~���������������������{�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������[m�GWqLZtIWrFQmox����������yz�ss���½�ٲ�̉��lm�z{�vx���������ڏ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������k~�JXvLWvLTqFNkQXtlq���ڣ����ﷷą����������������ţ��yy���������ƈ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Vi�IXvN\yHPpLSpHOlei���������������ۂ����������ٰ��������yy����������������������Ū��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Sc{FVpIWtS^}MUtLSpHOllp����������������jly���wy����ikxjlysv������ׅ��xz����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Td}IWqIWrQ]{P\zOWwLTqFMjcf�z�il~x{�y}�z~�]_o~�����kmzikxehw^artw����~�����sv�iit�����̕�����}��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������q��IZrJXrIWrO[yJVtPXxT\{FNkV]zv}�os�X\pqv�fkw���fj{������sx����y}�hkei}X]kty����cewbbo��������ȱ����ӷ�ġ����ƶ�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������^o�HXqM[vDQlP\xNZxIUsLTsMUtHPm]e�kr�SZsSWoW[pfj{qt�tx�jm�]arZ^lmq�^bv[^sdh}fj{dhyil�ehy~~���������������Ǫ����������׶�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������TdzEUmM[tAOjWc�MXwJSrS[zIQqJSr[c�^f�NWrLSoPTqINhW\sim�X]tae}V\oX^qU[m]bwW\s]bykq�flV[pTWkqp��������������������������������̹��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������N^tIZpIWqHVqQ_zJXvLWvNZxEPoLWvQZyV^{W_}U\yOVsQUsTWt{��\azSWqPUoPUlOTiV[pmr�TXrOTmmr�x}�_d{X\qz}����������z~����{�ww���������ե��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Zh�N[tN[tO]xQ_zM[vLZtL\vJZwBQoP^{Q]{W_W]~W[{UXwQUs\_}hl�TXrLOmIMkDGdDH_EI^���lq�TXr~����TWtaeqv�������~��qp������������������г��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������}��O_yNZvNVsLWsQ]yLWsN\wN\wHXrIZsHWtSa~S^}[a�be�hi�WXxW[yVZwZ^xTWtPTrOSqNQoBGaINc{��^c}[_y������X\yQVpjo}���������wv�������������rp}�����˄��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������w��M]wDQlLWsLTqS[xV^{O[wS^zLWsBPkLZtO]xUa}Zbls�_c�op���^bUXv\azW\vGJiHLjMPmFJbIObX^qZ^vy~����w{�UZq[_tty�ty����������������������vv�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������~��HXrHXrIWrIUqMUrQZwNVsQZwPXvNVsJVrS_yO\vU^y^e�VZw^bsv����y}�UZs]byX]wPTqPTqMQkNSjPViLQdSWo~�����jp�]bw[_trv�UZhZ\kkm}�����������̩��ffsxx�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hv�HVqHVqHVqGUpHTpOWtU]zLTqLTqOVsLSpS\wOXqV]wU\v]b{pt�jo�km�z}�kp�X]wLPhNSjTWtOSpW\vLPhMQfPUjV[rae}U[mU[mkp�X]r^bv^bvehybdseer������������km}fixtw�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������dr�FToIWrESmFToMXtS^zU]zHPmLSpJQoU\y\c�sw�[_w\ax^czdi�chchdf_bzSWoNSjX]r\ax\azOTmPUlae}QVmHMdLPjINhMQfdj}y~�ejVZojm�������������������y{�������z}�}{�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������w��HTpMXtO[wLWsNZvT_{P\xLTqIQoLSpOSq\_~il����mp�SVkdh}���W[p[^sUZoNShV[r_h~^fzw�qx�PWqPXock�DJdGNjNUqFMiXawt}����V[rSUmtw�������������������xz���������}{����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������}��DOkIUqMXtJVrMXtP\xS^zLWvHPpGNkELiNQodh������ě��[^r{�il�SVkQUjMQfGLaJSf_h{lt�W_vT[t^eJSiGNhNUqLSoFMjFMiIPjrz�V^tLPhOQlxz����������������������������xw�ts�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������m{�LWsJSpJSpNVsT\yZbXa~NVvGOqFLoGMmIPlQXrbj~�����͈��fk�im�\axNSjJOfQVmLPeV[p^cxchFIfMTqHOlFOjNUqZa}FIfQUrMPmTWtej�MQkMQkWZt}�xz�[\rbasfev���������������]\oa_r��������л�Ǥ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������p~�TazNVsLTsLTsNVvV^~V^~NVvEMlGMpNTwLSpFMi[cypx�������^cx_d{\axW\sTXpNSjNSj\avio�Z^sdi�FIfGNkIOpGOlSZvfk�^c}}��[_yPTqei�OTmNSlbd���]_x]^t{z�zy����������������]Zm[Zlkj}��������¾�Ĭ�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������IVpW_}PXxMUwMUwPXzU]NVxGOqDLmNTwIOpBIfJQmLTjmv����px�W\schZ^vMQiSWoOTkPUjaez\btio�ae}AEbLSpLSpGOlJQkW\ssw����tw�X[vik�JMjQTopr���MOh\]syx����������������sp�ro�a_r^]p��������������ɝ�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PZtS\wLTqQZyNVxNVxQZ{OWyHPrFNpIQqQWxW^{LSoMTmHOiS[qz��[cwX]wV[tHMf@E\INebf~PUjrx�iodjzPUjHMfOVrHOlMUrFMiHMdX\qjm�ei~�����PSkik�wy�lo�TWl_av{z����������������������rq�ZXkmp�����������ԛ�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������򕤯��Ƚ��z��S\rV]wQXtV]zS[zT\{PXxLTsFNmIQqOWwT\{W^zQXtJQkELeELeNUoU]sGNhGLePTqNSlUZqMQipt�[_tz��jq{}��X^oHMdT[wOVsNVvSZwUWrHI_TUkrs���wx�hi~st�UXmMPeUXmst����������������������������qp�mp���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������eqzit~NZeOXhPXlX]tX]w[^{QXvS[xS[xPXvNVsQZwT\yT\yMTmMTmBIcAHbMTmELeBIc@GcIMjOSpOTmjo�rw�hl�dj}MScPWaahrMScV[pT[tQXvOWtT[wVXqVWlijqs�actqs����vx�SVjTWlW[ohj{�����������������������������������������������Φ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������󀉔y��bkxNTdV\oX\qW[p^aySZsU^yU^yQ[vS\wU^yS\wNWpFNdAI_BJa>E^GNhGNj7>Z;B_?Ba?B_BGaX]wINech}���GM]DIWOUeafy_dyJSiMTmWawdl�[]ofevsr�hfwfevml}������qt�_cxadx[]o�����������������}y�zw�{z���������������������ɲ����ƴ�Ĝ�������������������������������������������������������������������������������������������������������������������������������������������������������������������������󅌖t{�pt�lqhlzehyTVh_avZ^sXatU]sPXoQXrT[tNUoELeAHbDH_AF_@GaELh=Da=Da@Gd>A_>A^JNkHMfAF]PUjOTiOUhX^qsy�ejOTiS[qFNdLViT\pX\pZ\m^arihzdcvjiy������rs�y}�~��xz�wy����������~{������������������������������ž�ǿ�˽�ȶ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������󏓝�����������Ա��������sv�hjyps�VZmUZqPUoLOlFIhFIhGHhEFeAEc@Db@Dd>Dd>Eb>Eb?FbHOkFMiAHbAHbBIcNVlXatS[m]eydl�U]sLSlJQkLSlTWtHJhOQj]^tcdyxz�������mp�}~���������������vv��ss��������������������������¾�Ƥ�������Ʋ�������������������������������������������������������������������������������������������������������������������������������������������������������������������������󏐖�����������������Ϭ����ķ�����[]obc{bd�MNmIMkJLkLMlIJjFGi@Dd@Dd>Dd>Eb?Fb>EaGNjDJfBIeAHd?FbFMfDLb@H\IQeck�QZpIPjFMfOVrMPoLOmPSm]_x]^spr����~}���~��vx����������pr�vx�������ss�������~~������������������ۤ�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Ƥ�������������������ɿ�Ĵ�����{z�cd}hh�VWyLMoILiJMjHJhEFe@Db@Db>Eb>Eb?Fb>EaELhAHdAHdAHd>Ea@GcELh>E^ELe]e{JSiGOcNVjV^rPUoNSlOQjX\qQShbdvom�{z�{}�mp�QTc[]j���������������ddqbboyy���������������������������������������Ę����������������������������������������������������������������������������������������������������������������������������������������������������������������������ʹ�������������������ݸ�������Ъ��zx�dd�__NOoDFaDFaAD^?A^@Da@Db>Eb>Eb@Gc>EaDJf?Fb=D_@Gc>Ea@GcFMi@GcJQkXawPXoJSfXasPXlGLcQVm\_tQUjSTi\^pts�vt����ik}UWfikxx{�������������^^kzz���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������󩫪���������mpoz}{�����������������˲�Ė��de~OOkHLaGJ_HJcFHa@E^=@]:A]=D_>Ea?Fb>Ea;B^>Ea?Fb@GcAHdMTmSZsHPfFNdS[qOWmQZpLTjJOi_d{JNc_cw]_qjl{lly�y{�VXjWZirt�lpz������������ww�}}���������������������������Σ�������������黻ǔ�����������������������������������������������������������������������������������������������������������������������������������������������������������������~����������deh��������θ����������װ�����wv�WXmOSdNQeNQeLOd@E\>B\:A]>Ea?Fb>Ea;B^=D_@Gc?Fb>Ea=D]=E[FNdDLbMUkS[qQZpT[tU\vV[rej�TWlX\pcewjlyyy����y{�\^plo~y{�������vx�~�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{}�dei��������������������������̰��eisV[fTXfQUfOSfAF]>B\;B^?Fb>Ea;B^=D_=D_?Fb>Ea=D_;B\BJaEMa@H^MUkIQhJSiNUoV^tdi~{��W[odhysv�z}����qp�VXjxz�rt�vx�������fixdfv������ww���������˗����������������ɥ����������������Խ�ƞ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������{}�efjmor_^c�����֗�����������������^blV[fSWePTeBF[?D[?B_>Ea;B^=D_=D_>Ea:A];B^=D_>EaFNdAI_;DZJQkHOiBIc;B\AHbV[pafy]arhlzy{������jiywy�bdvjl{}�fiv~��oq~zz�������������~~������������������������������������������ǯ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������~}�zy~���tsxqpt�����ɍ��VU^WV_ljwyy�lpzTWbSVaUWfGJ^GIb@Da>Eb?Fc>Gb=Fa;E];E];E_;E_;E_?Ha?Ha?Ha?Hc@Id>Gb>GbAHdMQiNSh_ctqv������vt�sr�zy�kjzvt�~�yy������������������������������������������������֪��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rqv���������{z������wvz�������˜��a^k_]jb_mdbpss\_hNQ\\^kNQeGIbDGd>A_?Fc>Fc=Fa;E];E];E_;Da;Da>Gb>G_>Gb>Gb=Fa=Fa?GdELhUZsOTi]ar������sv�yx�kjzom~dcs~����~~�}}���������������������������������������������������ֽ�������������Ť����͞�����������������������������������������������������������������������������������������������������������������������������������������������������}{�wvzrqvvty������������������������������a^lZWe^^j[^iZ]h]_lPTeJNcGLe@Db?Fc>Fc=Fa;E_;E_;E_;Da;Da=Fa=F^=Fa=Fa=Fa=Fa?GdELh\azOTicfx���jly\^k{z�_^oVUebaqqp�~�}}�ss������������������������Ψ�������������������������������ȱ����ɾ�ů����ȓ�����������������������������������������������������������������������������������������������������������������������������������������������������‰��\[_edi���������������������[Zc�����ɓ��cao]]iVZdkoy_boNQcNQfGLeGJh?Fb>Fc=Fa;E_;E_;E_;Da;E_=F^=F^=Fa=Fa@Id>Gb>FcAHdGLeX]rcfxdiw]_leht~�baq\[ksr�xw�{z����yy������������������������������������������������������Ž����������͹�¾�ɾ�ɍ�������������������������������������������������������������������������������������������������������������������������������������������������򩨬���edi~����������������������~}�WUb������hesbbmps~Z]ecfq_drMPdINeJOiAHd=Fa=Eb;Da;Da;Da;E_;E_;E];E];E_;E_>Gb;E_AIfJQmJOiW\qZ]olq_boz}���ml}ihxrq�~}�vt�tt�tt������������������������������Ǧ����������������������������ƿ����ڲ����ž�ɟ�������������������������������������������������������������������������������������������������������������������������������������������������򻺿��ơ��������������������������������[Xe^\j���]]iX\f_ck\_jlq}fj{DH]GLcDJd>Gb=Eb;Da;Da;Da;E_;E_;E];E];E_;E_=Fa;E_?GdGNjPUoQVkSVhlqvx�y{�edtedtxw�xw�sr�������qq~��������̽�������Ÿ��������{y�����������������������������������ƻ�Ŀ����̰��}�������������������������������������������������������������������������������������������������������������������������������������������������ԯ�����������������������������������^\ib_mqo}SS^Z]h[^fadohlx}��FL^=AVFMf@Id=Eb=Eb;Da;Da;E_;E];E];E];E_;E_:D^:D^=EbAHdFJdNShMPb]bp������������xw����yx�������tt���������������������������������������������������������������������ֻ�Ŧ�����y����������������������������������������������������������������������������������������������������������������������������������������������̪�����������������������{z���������ljwVTbVVcNP]Z]hilwbepcfqimyrv�FL^BJaDJd?Fb>Eb=Da;Da;E_;E];E];E_;E_;E_9B]:D^;Da=D_@Ga?D[FI]ps����������������xw�~����������vv������Ų����������������������ĭ�������������������������ι����������������˾�̢����������������������������������������������������������������������������������������������������������������������������������������������������¥�����������������������rsy���hhtNM]NP_SUdacrllxffrllxrt�}�fizAEZHJcJNkDGd>A_9@];B^@Ga?Fb?Fc>Eb>Eb=D_;B^;B^=D_;B\AF_DHb@B[LOcmp���������zz����rr~xx�tt�������������������������������������������������������Ų�������������������ɾ�ƴ�������������������������������������������������������������������������������������������������������������������������������������������������˽����������������ɫ�����������[^fTVcPSbX[lVXjbdsoo{������~~�hhtkjz^_tHI_HJeMOlFIf?B_9@\;B^>Eb>Eb>Eb>Eb>Ea=D_;B^;B^;B\@Ga>A^@E^QUjNQcUWd������������iitffrllx�����������������������������������������Ź�������������͹����������������������ǥ�������������������������������������������������������������������������������������������������������������������������������������������������Ԛ�����������������������������z~�jlyNP_QTewy�hjyzz�������\\hllyts�y{�PQfEG_HJeGJhAEb=D_>Ea>Eb>Eb=Da=Da>Ea>Ea=D_;B^=D]9@Z@Da?D]PTi^bsdfswz�]]immy���{{�jjvzz������������������������������������������������������������˺�������������������ϰ����ƚ��x���������������������������������������������������������������������������������������������������������������������������������������ڳ�����������������������������������WZiTVhpr�\^m~�ffs���ZZe���������tw�EH]FHaLPjGJh?Fb;B^=Da=Da=Da=Da=D_>Ea>Ea=D_>E^:A[;?\@E^NQfcfx������������ww����{{����������������������������������������������Ͻ����������»����ɘ�������������������϶�����y�������������������������������������������������������������������������������������������������������������������������������������������Ҹ����������Ŭ��������������������LN]IL]qs�lo~kjzNM]FFSOO\eeq~~�y{����_cw>@XOTmFIfAHd>Ea>Eb>Eb>Eb>Eb9@\:A]>Ea>Ea=D]=D];?\HMfHLa\_q�����������������������������������������������������������������������˽�������������Ȥ�������������������������ۖ�������������������������������������������������������������������������������������������������������������������������������������·����;�������������ɲ�����������������GIXIL]SUdehw���XWhML\^^k]]ipp{���������ILdINhHLiAHdAHd?Fc>Eb>Eb>Eb:A]:A]=D_>Ea>E^@Ga>A^AF_AEZ]arrt�{�}}������������������������������������������������������ƫ����������Ǻ����������������������������������������ԏ����������������������������������������������������������������������������������������������������������������������������������ĺ����Ǿ����������������ž��������������LN]OQc\^macr���ji{TScbboZZejjs������_ctVZo@E^>A^FMiBIeBIf?Fc>Eb>Eb:A];B^=D_=D_?F_>E^@Da@E^GJ_\_q{~�z~�ss������������������������Ի�³����������������������ӭ�������������ƿ�³�������������������������̽�������䚜������������������������������������������������������������������������������������������������������������������������������������ƽ����������������������Dz�����������NM_IL]UWiik}PObqp�edt^^kaaljjs������}�{}�SUmFHcHLiGJhDJfAJe>Gb>Ea:A];B^>Ea=D_?F_9@Z@DaFJd=?WLOc~��wz�ooz��������������������������������ƌ�������Ʀ����������Ҵ����������IJ����������˶���������������������Ƭ����̴�����������������������������������������������������������������������������������������������������������������������������𑑑��������˾�������������������Э��������PMaNMbHF]qo�\[pzy���\\i���llv}~�������������NLeNLhJMjJTlGTkANe=F^=D]:A[;?\=@]?D]?D]?B_?B_AF_?DXfmx~��swvv���~~����ww���������������������������������������������ȱ����������������������������������������̭�������͑�����������������������������������������������������������������������������������������������������������������������������xxx�����Ҷ����̜��������������������������OL_LH^VTkWUlMLahfy���ddp���ss}iho�����������ډ��XToTTpDMeN[rDPh>G_:A[:A[>A^>A^?D]?D]?B_?B_BFc=AXZ_my~�tx�ppy������������zz���������������������������Ě�������ĸ�������ɬ����������Ⱦ�������������������������շ����ƿ�ū�����������������������������������������������������������������������������������������������������������������������������llj�����Ϳ�����~~{������������������������HFTOM]XWjXWjSQb\\itt�ww�{{�fhmomt��������Ƚ�˲��[WmVWpBIcQ[vISmBIe=D_>A^?B_>A^?D]?D]?D]?D]?B_BG^MSasx�xz�zz�����{{����������zx���������������������Ͱ����������������������ȳ����������Ĺ����������˽����ɸ����Ź����Ϲ�����������������������������������������������������������������������������������������������������������������������������aa^yyw��������ƅ��wwt���������������������VTaLIVNN[UUbPP\EEPaalMMVMNThiokjo�����£����ϻ��ws�QPeFJdMTpNUqHLiEHeAEb>A^=A[?D[?D[?D]?D]?B_DHbBHXqv�sv�qq~wv����������������qo}��������������������������������ƻ����������𸸺��������ǽ�������������������Ǻ����������О��������������������������������������������������������������������������������������������������������������������������VWSopk���������vwr��}�����������������������kjqddmTT]TT]OOXZ[aTU[NOSdeiomr�����������˦��qo}edtSVk?D]OTmOTmHLiBFc;?\>B\?DX?DX>BZ>B\AEb>B\?EWz�sv�oo{ml}������������������rp}��������������������������ƺ�������������θ����������������º�������������߿�½�¸�������҇��y��������������������������������������������������������������������������������������������������������������������TUPbc^}~y������bc^���stpklh��������~������������ijm]^bXZ]deiZ[^\]aTUXefjooqwwy������������������cewLOdPTiPSkOQlIMj?B_>B\?DX@EZ?D[?D]?B_?D]BH[jo}���{{�ddqxx�������������������xw���������������������������̾�������������ϸ�������������������Ż�������������ͨ�������Ο��{��������������������������������������������������������������������������������������������������������������������UVOef_lmf������WXQ��~mohde^stpjkfddbaa^eee������ijljkm^_b]^aefi���LMOijlrrtkkk���������jimfel���}}�fivUWiPQfPSkOTmDGd;B\@EZAGZ@E\?D]?B_@E^BH[SWey}�yy�mmwww���������������������������������������������������������������⻻���������������������������ˬ�������������׾��{��������������������������������������������������������������������������������������������������������������������UVQ[\Wfhclmffha^_Xef_cd][\U^_[^_[Z[Viifcca���ttrceddfe]_^TVUehf{}bcekmlsssiiilll���}}}vvxxxz{z������ddpVXhTUjTVoINh@E^AGZAGZ@EZ?D[?B_@E^>BWBFWkmz���llvxx����jiytt����������������zy������������������������������������������������������������������ƾ�Ĵ�������������݌�����~��������������������������������������������������������������������������������������������������������������OOM[[Xiif���klhefbcd]cd]NOJTTQUUSQQOppmppmXXVddbjjhbb_[[XWWUffdjjjjjjffdhheddbaa^^^\iifxxxqqqttrmmmomr__iPO_LMbGIbAD\AEVLOaNQf?AZAD\?AZ?BWBFZacr���}}�kkx������ddq���������������������������������������������������������������������������������Ͼ�ĭ�������������ڷ��������������������������������������������������������������������������������������������������������������������SSSNNNkkissqqrm]^Zbc\ijeQQOLLIZZWMMJbb_���^^\ZZWiifbb_\\Z[[Xbb_hheaa^ddbeecVVTddbaa^__]eeceecmmksrojieiii���__kTScTVhQUfLP\UZeUXjEH\AEZ?AZ?BWBDXIHXlly���}}�������������__kppy������������������������������������������������������������������������������Ν�������������ޜ�����������������������������������������������������������������������������������������������������������������JJJMMM]][hhefhcbc^_aZfhcTTQOOM__]TTQUUS���~~{SSPbc^]^Z[\W\]Xbc^efb^_[efbiifPPN]][eechhemmkjjhddbppmbb____���{}�^^hZZeX\dU[_\biZ^jFI[@DW@DXBF[HI^TSeiivzz�ww������������̉��bboZZf�����������������������������������������������������������˥�������������Ϳ����˛�������Ծ����ǎ��������������������������������������������������������������������������������������������������������������AAALLLUUSccabc^Z[V^_Xab]WWUXXVUUSNNLXXVeec���LLI[\WWXTWXTZ[V_a\\]X\]X_a\^^\ZZW]][eeceecmmkjjhZZWffd[]\^a_vxw���klo]^bZ[]X]\]bcX\dDFS@BTDEZLMbTVhLJ[aam~~������������������҅��XWhbbo�����������������������¶����������������������������̎��yy{�����������Ŀ����۫�������������ݕ��������������������������������������������������������������������������������������������������������������HHHNNNVVTffd]^ZNOJQSL_a\WWU\\ZPPNPPN^^\cca}}zVVTXZU_aZWXQ_aZab[\]VZ[T_a\bb_]][ZZW^^\eeceecddbUUSX[ZX[Z^a_ceddddiiihheTVSTVQ[]Z^_cQQ[IIVEDTML\^]m]]jaaliir���}~���������������ۇ��QQ^qqz���������~}���Ǭ�������������ž�������ȸ�������������������ί�������͸�������֓��������������������������������������������������������������������������������������������������������������������������OOOGGGQQO]][VWSMNIUVOab]]][__]__][[XVVTaa^aa^]][TUPhibUVObc\bc\]^WWXQ^_[[[X]][VVT]][eecddbddbVXWSWXX]^[\^bdcbbbccalljWXTZ[Vbd_abdTU[JJTFFQJJVWWcaajijp\]c��z{~}~���������������ss�^^j��������������������dz����������������Ԫ����������������������뷷������в����ȯ��������������������������������������������������������������������������������������������������������������������������ZZZPPPQQOOOMPQMNOJWXQ^_[[[X^^\__]\\ZVVTcca^^\ZZW_a\de^XZSde^ab[_aZbc\TUPZZW]][\\Z__]cca__]aa^VXWUZ[PUWNSUcdfiik]]]cab[ZWVWSccaddd\[_WV]TSZSQVTSW]^bvwycdfqrttwvwyx��������������ι�[[hxx���������������ߢ�������������������Ԧ�������������������������ۿ����տ�������Σ�����������������������������������������������������������������������������������������������������������������������XXXaa^XXVTTQOPLOPLWXQZ[V[\Weec__]bb_[[X__]XXVUVQbc\de^STMXZSde^cd]]^WUVOWXTSSP]][XXV]][XXV[[XTVSNSTGLMEIJ_acaac]]]b_a_^\VVTcca^^^VVXTTVWWZZZ\WWWZ\[fih_ba_bafihqsr�����������������٥��vv�eeq�����������囚������������������������������������������������������������ǽ�����������������������������������������������������������������������������������������������������������������������UUS\]X_a\UVQQSNIJFOPL\]XZ[V]^Z^_[]^Z]^ZWXTZ[VXZUab[de^[\UMNG^_XWXQZ[TZ[TVWSWXT_a\XZUab]QSNXZU\\ZNPMVXWGIHXXXeee^^\aa^ccaUUSeecddbZZZSSS___[[[OOO[[[hhhXXVddbjjhyyw�����������������˶�����~}�^]fvs������������������������������������������������������������������������·��������������������������������������������������������������������������������������������������������������������OPLUVQ]^ZZ[VHIEEFAMNIXZUTUP]^Z^_[WXT^_[XZUTUP]^Z\]V]^WXZSEF?WXQUVOZ[TZ[TXZU]^Z[\WZ[V^_[STOQSN]^ZSSP\\ZPPNVVTZZWQQOWWU\\ZPPNXXViif^^\LLIUUSWWUSSP^^^cca_a\cd_rsowxsttrqqs{z���������������������dbp}z���������������������������ٺ�������������������������������������������ǰ�����������������������������������������������������������������������������������������������������������������IJFQSN^_[^_[JLGBD?GHDTUPSTO\]X]^ZVWS^_[XZUTUP]^ZZ[T[\U]^WGHAVWPVWP[\UXZSXZS^_XZ[TXZS\]VNOHOPI^_[]^ZZ[VQSNSTO^_[QSNSTOXZUQSNWXTjkfXZUMNIQSNZ[V[[X__]eec_a\de^fhadeappmlllihl~}�rrp��~���������ecpb_lljw�����������������������������������������������������������������ƾ��������������������������������������������������������������������������������������������������������������������HIETUPbc^^_[MNI>?:EFA[\WXZU\]X]^Z\]X]^ZWXTZ[VXZU^_X^_Xbc\STM[\U[\U]^WVWPZ[T]^WZ[TUVO[\UHIBQSL_aZUVQWXTWXTQSN\]XOPLSTO]^ZPQM\]XijeXZUVWSUVQbc^^_[ccaab]fhacd]bc\de^efb___aacqqsmmmhheqqo{{~���{z�\[d[Zcdcjjim��������������������������������������������������������̹����̜�����������������������������������������������������������������������������������������������������������������IJFIJFZ[V\]XLMH9:6BD?]^ZVWSUVQXZU\]X[\WZ[V^_[WXTab[\]V]^WXZSNOHTUNXZSXZSZ[Q]^UbcZ\]T\]TTULWXOZ[TSTMXZS]^WLMFZ[T[\U_aZbc\OPI]^Wde^bc\^_XWXQab[]^Z[\W^_[hibde\abX_aZ]^Zbb_VVXjjljjh_a\jkfccahhj�����ώ�����zy~~�������bbd�����������������������������������������������������ȝ���������������������������̗�������������Ӱ�˺�����������������������������������������������������������������LMHLMH\]X^_[QSN?@;EFA[\WOPLQSNZ[VVWSZ[VZ[VZ[VUVQ\]V[\U]^W\]VJLEPQJUVOUVOWXO\]TabXZ[QQSITULXZP[\SOPIWXQbc\UVOTUNWXQ[\U[\UNOHde^ab[[\U\]VUVO]^WXZS\]Xcd]Z[Q]^Ucd[]^UZ[T__]ZZZfffbb_Z[V_a\bb____���������������~~�������kkm��������������������������������������������̸����ҿ�¡����������������������׭�������Ɲ��������������������������������������������������������������������������������VWSQSN[\WZ[V[\WGHDHIEXZUNOJSTOZ[VXZUZ[VVWSXZUOPLWXQXZSWXQXZSGHAMNGPQJQSLSTJ[\S_aWUVMMNEQSIUVMZ[Q\]VQSLXZSXZSVWPZ[TXZSUVOOPIde^^_XWXQ\]VTUN[\UUVOZ[VZ[T]^U_bU^aTbcZUVOaa^\\\bbb\\ZXZUbc^iif^^^iiikkk����������������jjl�����Ɣ����������������������������������������������Ԛ�������������������������ָ�������΍�����~��z��}����������������������������������������������������������������WXTTUP]^Z\]Xab]MNIJLGWXTIJFPQMNOJ[\W[\WPQMZ[VIJFUVOVWPOPIPQMDE@IJFNOJNOJPQJZ[Q^_VSTJOPGOPGNOFXZP[\UNOHUVOVWPIJDSTMWXQUVOPQJ\]V_aZZ[T^_XUVO[\UTUP\]XZ[V_aWcd[WXO\]Tab]^^\]][aa^\]X^_[dealmieecbbbTTQddb������}}}������SSUyy{������ppr������������ppp�����������������������������Ǝ�������������������ڻ�ǽ�͸�Ϝ��������}��{��{��y��x��}��������������������������������������������������������STOVWSWXTUVQUVQVWSPQMXZUGHDJLGOPLab]LMH[\WPQMIJFQSNMNISTOTTQIIGNNLLLLMMJSTOSTMUVOUVOQSLWXQSTMVWPVWPPQJOPISTMGHAQSLPQJSTMUVMUVM\]V^_XXZUUVQUVQMMJTTQZ[V]^W_aZab[[\UXZU^^\[[X\\Zdeade^ab[lmiffd__]UVQZ[Tjkf}~yool���iifXXXlll���������������~~~hhhddb�����������������ԯ����Ǻ����ӱ����������������������������������������������������������t{�������������������������������������������������JLGPQMVWSVWS[\WXZUNOJSTOGHDIJFUVQ_a\LMHWXTNOJEFAQSNLMHNNLUUSLLLLLLGGIJJJOPLPQJTUNTUNSTMMNGZ[T[\UVWPPQJOPISTMNOHLMFSTMOPIUVMUVMXZS]^WVWSTUPOOMHHFPPNXXV]^Zab[cd]^_[XXV]][^^\__]^_[^_XUVO^_[XXVTUPQSLVWNcd]mohbc^xytffd\\Z___qqq������vvvmmm\\\^^\qrm��������ԫ����������̷����������۽�������������ھ�ɬ��������������������������������������y�����������������������������������������������FGBNOJTUPVWSVWSTUPJLGOPLPQMLMHZ[VTUPJLGVWSVWSNOJOPLMNIMMJSSPPPPGGG@@BGGGIJFQSLMNGUVONOHWXQ]^W^_XVWPPQJOPISTMUVOHIBOPINOHUVMUVMVWN[\UQSLUVQQSNPQMOOMVVTWXTZ[Tef_deaZZW^^\[[Xaa^XZU^_X[\U]^ZPPNJLGUVO\]Tab[bc\TUPefb[[XQQO\\Z__]eeeqqqxxxiiiqqsVVV\\Zffdlljyyw���{{y���rrp��������������Ȭ����������������ܖ�������{{�������wy�~����������ɟ��������{��������������������������������������������@@>FFDJJHJJHVVTPPNBB@DE@QSNJLG[\WTUPJLGTUPUVQIJFIJFPQMNNLOOMSSSEEE::=EEEHIEHIEQSNQSNNOJQSNTUPZ[VVWSPQMOPLSTOXZUIJFJLGNOHJLBTULXZP]^WNOHSTOMNIJLGPPNPPNOPLPQJ]^Wbc^XXVVVT\\ZccaPQMVWPWXQWXTJJHGHDVWP]^U^_XXZSPQMcd_bb_]][TTQ\\Z___hhh[[[TTV^^aLLNNNNbb_ddbiif���eecmmk]][���������������{{{��������������Ұ������ٕ�����wx�xy�}�������������������t�w�����������������������������������������>>>AAAMMMFFFHHHJJJAAA@@>PQMPQMXZUMNI@A=HIENOJEFAGHDFGBFFDGGENNNAAA99;>>>DDA@@>LLIMMJLLIJJHNNLOOMUUSMMJIIGPPN]][SSPJJHMNISTJWXO^_X^_XPQMEFAHHFIIGLLIPPNVWSSTM^_X]^ZSSPTTQUUS]][UVQUVOZ[TUVQHHFMNIWXQ_aWab[]^WUVQ\]XZZWPPNUVQXXVQQO[[[UUUMMOONSGGIPPPZZZZZZ\\\TTT[[[\\\iii�����–�����sss�����������������ŕ�������昚����{}�xy�xz�}�������������������r}�s�������������������������������������666;;;GGG>>>DDDAAA>>>AAAMMJJLGPQMNOJBD?HIELMHDE@DE@EFAEEBDDASSSFFF88:::=;;;@@>??=IIGGGELLIGGEFFDOOMLLIFFDQQOXXVSSPNNLHIELMFSTJ\]V^_XWXTGHDFFDDDAGGEJJHQSNMNG[\U]^ZSSPOOMVVTXXVUVQPQJVWPLMHIIGSTO^_Xfh^fhabc\VWSQSNSSPXXVNOJTUPWWUPPPQQTGGIHGLA@ENNP[[[UUU___WWWSSS]]]ZZZbbb���~~~jjjlllooo�����������Ī��xy���}����xy�rt�y{�{~�wz�������������������rz�lw�r}����������������������������������>>@::=FFHFFHJJMHHJBBE999MMJIJFGHDDE@BD?FGBLMHGHDBD?FGBFFDBB@TTTJJJ88:99;888777>>>BBBLLLEEEGGGGGGJJJFFFGGGQQQQQQUUUOOODDAMNGPQHVWPVWPWXTIJFLLILLINNLLLIMNIHIB^_Xfhc\\ZTTQWWU[[XZ[VUVOWXQOPLHHFTUPbc\ijahibab[XZUFGBJJHXXVOPLXZUUUSNNNSSUPPSQPUDBGJJMUUWPPS^^aJJMHHJPPSbbd^^acceXX[VVX[[]ddf~~�������������mot���z~�oq~qs�ps�{�{�rv�tx����������������iq�fo�s~����������������������������������???>>>IIIGGI??A;;>AADAAAEEBHIEEFA?@;?@;BD?LMHMNIDE@IJFIIGDDAQQQNNN:::;;;777666===AAAJJJNNNMMMNNNGGG>>>JJJPPPMMMVVVLLLFFDGHDMNGUVOVWP]^ZOPLQQOQQOJJHEEBHIEFGBUVQbc^VVTJJHOOMZ[VVWSXZUQSNXZULLI]][^_Xde\cd]\]Vab]NOJNNLSSP\]XXZUXXVJJHQQQPPSUTXLJOFEIIHMNMQZZ\PPSMMOOOQ[[][[]]]___bWWZTTViik���ooq���yy{���fhkz~�kotfjrilwoq~vx�rt�fizwx����~����������vz����qy�py�������������������������������480794BEALNM>?A236687FHE@@>FFDFFD>>;GGEAA?FFDHHFDDALLIJJHJJHVVT]][TTQFFD442997;;9@@>DDALLIJJHBB@BEAEGFILJEFHFGINPO@BAGIFDDAIIGUVQ[\WOPLLMH997???GGEBB@FFDEEB]][[[XQQONNLLMHSTONOJWWUSSPMMMIIIUUSef_de\ab[ef_cd_TUPMMJNNLWWU\\Z[[XTUPMMJNNLUUUSSUDEJEFLFGMVW[MNQIJNIJMUVX[[[QQQUUUVVVOOO]]]eeeeeeefi^_bijlabdcdhopshilefjdekqqzssjjwrq�������������oq�cfzw}�{��s{�t{�~��������������������������AE:AE=EGBDFE9:=013687ILHEEBLLIGGE886663@@>GGEEEB??=MMJPPNQQOaa^bb_XXVTTQ??=@@>;;9DDAFFDLLIJJHAA?JMIEGFGHJFGIDEGIJMJMLFHEFFFGGGVVTXZUQSNTTQ???;;;FFD@@>FFDNNLiif__]SSPSSPMNIOPLOOMJJHQQQFFFDDFBBBVWPab[ab[TUP\]XVVTMMJMMJSSSWWWPPNXZUIJFNNLNNNOOQFGMDDMGHNTU[NOSEFIEFHVWZSSSMMMTTTXXXQQQVVV[[[WWW^_bUVX^_b]^a]^abcebce]^abcfdei{}�ffpvv�������������ij�advsx����{��tx�t{�������������������������BF;=@8>@;>@?78:-/1243BEAMMJOOMFFD220220??=EEBGGE@@>IIGJJHLLIUUSbb_ccaaa^OOMEEB997BB@DDALLIJJHBB@DFB>@??@B?@B:;>@ADNPOILHLLLNNNZZW\]XUVQOOMPPP@@@LLIMMJIIGJJHbb___]TTQLLIUVQMNIOOMNNLNNN===::=???PQMXZS[\WGHD\\ZLLIFFFIIIQQQWWWLLIXZUJLGOOMOOOJJMGHL@AGEFLNOSOPTFGIFGIWZXMMMHHHNNNTTTVVVUUUSSSWWWTUWUVX\]_VWZbce]^a]^abcebcfdeibci^^hhhsllyzy�������qr�ikz���������qs�rw�r{�v��������������������TWMNQI?A=@BA@AD347243?A>NNLIIG??=774>>;;;9==:JJHGGEHHFHHFQQOJJHQQOSSPXXV]][HHF774AA???=IIGMMJGGE:=9;>=@AD=>@;=?;=?EGFDFBGGGOOOOOMXZUWXTJJHJJJ???LLIHHFAA?GGEZZWTTQJJHJJHHIEHIEHHFGGE@@@;;;88:AAA\]XXZUXZUUUSLLI???IIIGGGJJJQQQQQO_a\QSNQQOSSSFFH@AE;=BBDGGHLPQTMNPMONX[ZJJJEEEIIINNNIIITTTTTTVVVOPSNOQTUWVWZXZ\_acXZ\[\^^_cefjfhmQSXeeoddpxx�������z}�_bomq{������~�tx�qw�w��������������������[^TOSJ8:68:9@AD124364>@=LLIJJHAA?::8HHF;;9??=QQOBB@??=QQOSSPNNLOOMOOMNNLZZWEEB::8EEBEEBFFDLLIPPN9;80219:=46801389;>@?@B?FFFQQQSSPNOJXZUSSP>>>BBBOOMLLIGGEFFDOOMHHFBB@BB@EFA?@;AA?DDADDD???::=EEEPPNPQM[[XAA?>>>:::FFHPPSFFFMMMNNLXZUSTOMMJSSSIIL?@D:;?GHLSTVIJMMONNPOUWTOOONNNFFFMMMHHHQQQOOOQQQLMONOQOPSMNPXZ\]^aVWZPQTVWZVW[^_c]^b[\b_afffpmmyz}�acp[^feiqmp}���{z�oq�lq{ipw������������������TWMLOGDFA;>=@AD679132@B?LLIQQOGGE774MMJEEBAA?NNLEEBAA?PPNLLIWWULLIFFDIIGVVTAA?442??=BB@IIGJJHTTQ>@=79889;/02124>?A?A@GIFGGGEEEHHFQSN[\W^^\LLLLLLLLIIIGJJHEEBIIGIIGAA?GGE@A=DE@HHF@@>BBBHHHEEGBBBJJHMMJZZWBBB@@@NNPGGIMMODDDAAA>>;NOJXZUMMJPPPIIIBDFBDGNOQZ[]LNMLNMJMIQTPVVVQQQEEELLLHHHNNNSSSVVVPQTOPSPQTFGITUW[\^UVXTUWQSUTUW\]_^_cOPTVW[cdhklrdhpSV^W\^efjss}���vt�oo{eiqekpv~���������������MPFMPHNPL=?>=>@78:8:9LNJGGENNLHHF>>;PPNNNL>>;JJHBB@@@>MMJFFDUUSTTQNNLHHFWWU@@>331;;9DDAQQOIIGUUSFHE;>=89;34789;@AD:=;>@=HHH>>>HHF]^Zab]\\ZZZZLLLLLIMMJHHF@@>DDAEEB774IIG@A=;=8FFDBB@DDDJJJNNPGGGGGELLI[[[EEENNPQQT@?DBBE;;;>>>??=QSN^_[LLIJJJIIIGHJHILMNPUWVNPOHJGEGDMOLSSSVVVLLLOOOMMMJJJWWWWWWVWZMNPIJMIJMPQTPQTZ[]WX[LMONOQ[\^_acUVXUVX^_bbceX]_TX[dehdehdcjvt~wt�jirbfibhjjpt�����Ѝ��������IMBSVNPSN=?>=>@1249;:HJGMMJFFD??=@@>AA?UUS>>;TTQFFDGGEUUSMMJLLIOOMOOMLLI\\ZEEB663>>;FFD[[XFFDNNLBEA8:92364682369;:HJGILHDDDFFDIJFJLG[\WPQMJJH??=GGETTQJJH886>>;MMJ;;9HHFFGB?@;NNLIIGFFFSSSUUU???GGGMMM^^^JJMIILEDHDBG;:?88:>>>==:HIE^_[GGEFFFHHJBDFFGIGHJSUTOQPGIF@B?ILHGGEXXXWWWVVVSSSHHHXXXUUUQTSQSUGHJMNPMNPNOQXZ\\]_QSUPQTVXWX[Z[]\UWV^a_abd^cdPUVacbbdcbaehfmmlsbah^cdejkilrv{����}��������GH?PQJWXTMMM@@B//1BBBBB@JMH:=8362798>@?TVSFHDTVQDE@MNIVWSOPLNOJJLGMNIHIEQQOOOM9:6FGBVWSab]GHDLMHJJJ>>@224224DDDIII??=DDALLIHHFMNINOJVWP^_XSTMHIEJJHMMJDDA442::8886886EEBNNL@@>EEBTTQAA?LLIXXVIIIOOOEEETTVPPSVUZFEIBAH:9>88:???@@>JJH]][AA????JJMABFFGJHIMFGIXZ\MONILJMOLIIGTTQ^^\MMJTTQPPNNNLTTQSUTQTSNPOLNMILJILJQTS\^][\^UVXUVXVWZ^_b[\^[\^]^a\]__ac\]_^_babd^_c^_c_ac^_bijlhioeiq_dp^co������@A8MNGOPLIIIDDF113:::;;9PSNAD?3644768:9NPO@B>OSJNOJLMHOPLLMHPQMFGBLMHAB>UUS[[XGHD?@;HIBZ[THIBJLGFFH327224BBELLLPPPAA???=??=??=HHFNOJPQM\]VUVONOHJLGPPNNNL;;9442663774GGEPPNBB@AA?QQOIIGEEBPPNSSPWWWIIIGGI??AFEI@?D=;B98=779??ADDDZZWaa^LLL@@BJJM9:>?@DDEHFGJOPSGHJGIHJMLJJHOPLZ[VUVQXZUVWSQSNVVTPSQX[ZWZXLNMHJIFHGJMLUWV\]_TUWQSUTUWZ[]WX[STVXZ\[\^XZ\[\^Z[]^_bQSUVWZ\]_bbbcce_afadlX\fX]hsy�}��GH?LMFTUPFFFQQT113111;;9MOJAD@/10/02468JML=?;JMHNOJIJFOPLMNIGHD?@;IJFEFAFFDUUSWXTPQMNOHWXQJLEQSNLLL99;,,/;;;UUUUUSNNL@@>@@>>>>EEBGGELMHVWSNOHGHABD?MMJPPNHHF886220997@@>SSPDDA==:NNLJJHFFDPPNTTQWWUJJJNNNHHJ@@B;:??>BIHM@@B??AMMMZZWZZWQQQ;;>GGI:;?;=@?@DBDGMNPHILGIHHJIMMJNNLUUSZZWVVTUUSPPNTTQQTSWZXVXWOQPHJIGIHGIHOQPXZ\QSUNOQVWZXZ\Z[]PQTWX[XZ\VWZXZ\WX[]^aPQTQSU]^a_acWX[TU[[^fSV^LOW_ej_ejLMDQSLNOJ@@@SSU>>@777;;9LNJFHE236347679LMO>@=MOLPPNIIGOOMEEBBB@AA?FFDDDAMMJVVTVWSFGBFG@VWPQSLVWSFFF447;;;777LLITTQHIEEFADDDAAAGGGIIGFFDTUPQSNMNIMMJUUSMMJPPN==:++)997??=TTQDDA>>;LLILLIIIGNNLPPN\\ZIIGUUULLLWWZMMOFEI87;668==?HHHQQO\\ZJJJMMOHHJ89=9:>@AEHIMIJMEFHADB?A@OOOQQQSSSVVVNNNQQQNNNPPPSUTLNMMONSUTNPOILJHJIMONWX[TUWJLNMNPTUWTUWIJMTUWTUWWX[TUWVWZUVXSTVJLNXZ\WX[OTVIMSPTZQU]OSXZ^aW\^VWNUVOMNIDDDOOQTTVHHH::8>@==?>*+-&(+67:@AD@BAEGFFFF>>>FFFFFFMMMPPPPPPMMJAA?QQOWXTHIEIJDNOHTUNPQMJJHGGGTTTFFDIIGVWSSTO>?:888668>>>AAA>>;HHFPPNSSPSSPMMJNNLQQOIIG774442??=VVTOOMEEBFFDUUSMMJIIGMMJXZUXXVWWULLLTTTLLN--0336113>>@HHHUUS\\ZOOOLLN??A67::;?=>AGHLDEGFGI=?>EGFLLLTTVLLNOOQLLNNNPGGIQQQSUTOQPQTSOQPWZXPSQOQPZ\[VWZUVXGHJLMOPQTXZ\FGIHILPQTQSUTUWWX[STVZ[]MNPPQTMQSPUWJNTBFLLOUVZ_TXZTUWWXOLMFHIE???DDFGGI>>>11/79878:)*-*+/237469468:=;DDD======AAADDD@@@@@@DDDEEBUUSVWS?@;@A:FG@VWP[\WQQO[[[SSPEEBNOJQSNOPI894AAA>>@>>@======JJHPPNJJHIIGMMJHHFNNLOOM@@>AA?BB@UUSVVTNNLHHFSSPIIGMMJJJHUVQSTOLLIQQONNNOOO;;>IIL88:;;>QQQOOM[[X\\\BBEDDF?@D?@D;=@>?BDEGDEG9;:;>=EEGPPSJJMGGIGGIJJMFFHLLNJMLMONQTSPSQSUTSUTUWVTVUOPSNOQEFHIJMIJMPQTBDFFGILMOPQTSTVTUWMNPVWZTUWOTUFMMPVXPTZEHNIMSTUXQTSQTSUVMPQJEFABBB??AEEGBBB886243236(),/0634:67:78:=?>FFH::=::=??AAAD::=::=AAATTQVVTWXTMNIJLEFG@NOHOPLTTQ^^\]][GHDMNIQSLEF?9:6IILGFJ??A::=999HHHMMJGGEGGEJJHGGENNLSSPGGE??=;;9OOMWWUTTQGGEIIGJJHNNLFFDQSNLMHMNILLINNLNNNFFF@@@GGIMMOUUUGGEXXVNNNAAD88:78;9:>?@D@AE:;>>?A?A@@BAEEGNNPLLNFFHEEGGGIEEGEEGFHGMONOQPSUTTVUQTSVXWOQPTUWNOQEFHEFHBDFMNPHILNOQHILJLNPQTQSUHILPQTWX[MQSAGIMSUQW\IMSMQTTUWTTQVVTJLEIJDHIE??=BBBQQQIII444-/1236+,0/03-/29:>;=??A@JJM447@@B@@B>>@::=::=>>@@@@UUS[\WGHD?@;BD?OPLWXTPPN\\Z\\ZLMHGHDLMHDE@==:LLNMMOAAD==?777AAAJJHLLIHHFBB@>>;@@>@@>BB@>>>999HHHPPPMMJFFDJJHFFDFFDLLIMNINOJJJHIIGMMJ[[[XXXUUULLNPPSQQQDDAUUSPPP99;44778;=>AIJNIJM9:=?@BDEGBDFBBEEEGFFHBBBBBBEEGFFHAADEGFNPONPOSUTPSQILJVXWVXWUVXOPSJLNJLNEFHJLNFGIFGIFGIHILLMOPQTHILMNPWX[GLM=BEJPSOUWJOQLPQPSQNPMTTQNOJOPLPQMGHDDE@GGEBBE87;:;A01778;013124468:;>>?AEEG779779AADIIL99;336::=HHHZZWUUSEEB>>;FFDLLI[[XPPNZZZ\\\PPNBB@MMJBB@BBBDFEILJ;>=FHG=?>8:9MONFHGLNM@B?9;8=?;?A>;>=78:348=>AGHJHJIILHLNIJMIHJGFHGHJINPOFHGFHGFHGLMO?@B:;>ABEIJMEGF?A>TVSOQP@AD89;/039:>FGIUWV=?>;=?:;>?@D=>AEFHSUTOQNEGD=?>@AD?@BLNMNPOPSQQTSQTSJMLNPOX[ZTUWPQTIJMNOQJLNGHJGHJIJMDFEGIHGIHMONFHGLNMVXWMNPINOHMNMQSLPQHMNINOMQPQTSPPNMMJLMHDE>;=8AA?>>@32911:/06;=@6796879;:9:=:;>>>@224779??A==?224//1668===IIGVVTNNL>>;EEBPPNTTQZZZXXX\\\IIIAAAGGGFFF@@@?A@BEDDFEBED:=;8:9JMLEGFILJ>@?362362:=;89;46923967=@AEDFEEGDGIEFHEEGFDFEJLNNOQDEGABEFGIQSUDEG9:=BDFABEDFE@B?OQNTVUIJMABE2379:>EFHVXWEGF;=?78;:;?>?BIJMTVSTVQJMHBEADEG?@DGHJHJILNMQTSMONHJILNMTVUWX[OPSIJMMNPPQTJLNEFHABEGIHHJINPOLNMJMLSUTTVUMONFJLEIJINOHMNEIJGLMINOLPQIIGQQOTUPFG@9:6??===?329,,6-/4?@D?@B243=?>;=?>?A?@D12667:78;-/2+,0126;=?>>>HHFUUSQQOAA?AA?JJHUUSUUUZZZWWWPPP@@@JJJEEEEEEADB@BAHJIADB9;:9;:HJIEGFMONDFE9;8796=?>9:=46912889??@D=?>;>:?A=BEAFHGILJGHJJLN?@B?@B?@BQSUNOQLMO>?AEFHILJ?A>NPMSUTHIL@AD:;?ABFGHJVXWSUT>?A78;89=469GHJQTPWZUOQMILHEFH>?BJLNHILFGIGHJEFHBDFFGILMONOQIJMGHJEFHJLNJLNHILEFHEGFFHGJMLEGFBEDMONQTSNPOHMNGLMLPQJOPBGHDHIGLMINOQQOUUSUVQGHA=>9BB@AAD98?//8+,2>?BEFH687ADB:;>:;>>?B126:;?:;?237014348:;>???MMJLLIDDA>>;FFDHHFQQOWWWUUUZZZPPPEEEIIINNNGGG@BA8:9=?>:=;7989;:FHGDFEHJIDFE=?;9;8DFE>?A469/0667=>?B>@?=?;FHDFHEFHGFHG>?AFGI?@BBDF;=?EFH;=?9:=78:?@B=?>=?>PSQLNM=>@67:67:ABFDEGJML\^]GHJ>?B89=:;?MNPPSOTVQOQMILHGHJABFHILGHJEFHEFH?@B?@BBDFFGIHILMNPNOQ?@BIJMJLNIJMEFHFHGNPOJMLFHGILJMONVXWLNMEIJDHIHMNGLM?DEAFGDHIFJLSSPWWUWXTPQJ=>9??=DDFA@GEEN12878;347798@BA@AD4687;>&*037=14:-17*-3*-3-/2:::NNLQQOIIG??=AA?GGELLINNNUUUWWWNNNAAAHHHQQQGGGEGF?A@9;:ADB8:99;:DFE@BAEGFBED@B?=?;GIH9:=126-/478>;=@ADB>@=BE@?A>:=;798>?A;=?67978:67989;78:3479:>:;?9:=>?AGHJPQTFGJ46989=?@DEFHEGF\^]LMO=>A12667:FGIQTPX[V^a\JMIHIL;=@?@D>?B?@D?@D;=@:;?@AEHIMGHJ?@BJLN9:=ABELMODEG=>@HJIOQPJMLFHGFHGEGFNPOHJIAFG@EFDHIAFG>BD;@ABGHGLMOOMUUSUVQOPI894886==?>=D88A/0689=6799;:ADB>?A12637=$(-,06(+1*-3(+1*-3014;;;LLINNLHHF@@>==:??=HHFJJJUUUTTTQQQ===GGGMMMIII@BA=?>9;:HJI?A@>@?DFEBEDADBBEDEGDGIFILJ;=?46912834:78;>@?>@=GIEEGDBEDADB>?A9:=12434767989;89;67:78>;=B89=89;DEGNOSDEJ12878;=>AABEDFE[]\PQTBDG9:>FGJMNPSUQWZU]_[PSOLMO?@D;=@:;??@D>?B78;9:>ABFIJNMNPGHJPQT@ADGHJIJMGHJGHJPSQOQPNPOEGFGIHEGFMONMONFJLDHIFJLDHI;@A;@ABGHEIJSSPUUSPQMGHA340997;;>218++4,-378;679364>@?>?A469-17&*2/2:,08%)1%)1*-6239PPPQQOBB@442==:??=;;9==:IIIOOOUUUSSS;;;AAAIIIDDD@BA=?>>@?JMLEGF?A@?A@?A@9;:?A@GIFLNJILJ;=?469128/060149;::=9FHDBEA=?>8:99:=67901334746878:78:46934:89?46967:HIMIJN?@F67=34889=?@BDFESUTPQTDEH>?BGHLIJMOQNSUPZ\WUWTOPS?@D9:@9:@>?E:;A78>89?=>D@AEABEABENOQEFHEFHFGIJLNLMOGIHGIHMONJMLGIHADBFHGHJIBGH?DE@EF=AB9>?;@ABGHBGHNNLQSNOPIFG@:;7::8779,+2%&,,-3469124687>?A;=?014),4#&/&*2"%-"%-#&,*-3348DFELLIFFD??=886DDALLIGGEBBBNNNPPNTTQ;;9IIG@@@>>>9;:@BAGIHPSQOQPEGFDFE?A@=?>BEDLNJQTPGIH9:=126-/467=237:=;=?;@B?=?;9;:78:89=67:01434812634834812622;33=12878;IJNNOSDEJ78>12889==>@ABESTVVWZJLNFGJNOSHILILHJMHQTOTVSMON;=?9:>67=:;A9:@12878>>?EABH>?B?@BHILABE89;?@BJLNIJMFHGJMLLNMQTSNPOADBFHGIJMDHI?DE?DE;@A7;=;@ABGH@EFPQMMNGOPISTMMNIBBB=;@43:)*0()/78;3474689:=78;/06**6%%1$$-%%/()/126236013>@?BED@BA9;:;>=ADBFHGLNMPPPHHFQSNQSNHIELMHHHFBBB78:@ADFHEMOLLNJJMIIJM@AD>?ADFEOQNNPMADB78:34:,,612812689;9;::=;89;78;78>14:14=03;/2=-1;69A26>03;009009/0678;GHJJLO@AG34:1289:@?@D=>AFGJVWZEFHEFH@@BLLNFFFIIGUUSUUSNNLGGGEFH89=34:67=11:88A66?88A?@DEFHHILBDF=>@=>@GHJEFHEFHBDFIJMNOQGHJGHJEFHHIL:;?=>A>?B:;?9:>9:>=>A:;?PQJIJDZ[TMNIDDA===76:218*+1,-3:;?236-/1348128((1))4%%2%%1&&0&(--/2468687?A@:=;798798?A@?A@BEDADB???GGGJLGOPI892>?:???;;>89=ABEFHENPLQTOGIFFGIFGJBDFABEGIHNPMJML=>@239,,634:67=9:>236?@B?@D;=B46;37?,0:+-:02?13@79F14?,08--922;017237:;>QSVFGM67=34:78>EFL=>DBDGNOSGHJ>?A??ALLNHHHFFFSSPWWUPQMEEBNOQ?@D34:239//866?11=>>G?@DDEGGHJ@AD:;>=>@DEGDEG>?A=>@HILNOQMNPFGIABEGHJDEH@AE;=@78;=>A=>A>?B=>AQSLGHAWXQOPLBB@III649107+,2128>?B013+,/126/06%%/&&2$$1%%1))2%&,*+/9:=>@?>@?9;:364243:=;BED>@?>@?GGIGGGNNLLMHAB>IIG;;;==?9:>>?A>@=DFASUP@B?;=?@AE@AD9:=:=;GIFNPO?@B017//834:89?=>A89;>?A89=34:34:26>+/9*,9/1>13@79F14?,0822>//8,-3348?@BOPT@AG23923967=DEJ;=BABFMNQHIL;=?JJMIILFFFHHHVVTTTQMNIHHFX[ZWX\89=67=34:66?11:88A=>A@AEABF:;?78;;=@?@DABF?@B>?AHILNOQMNPFGIABEGHJ?@D9:>67:469BDGEFIBDGDEHLMFQSLTUNNOJMMJ@@@327/-4()/128=>A)*,*+-/03,-3$$-%%1$$1&&2**3#$*&(+;=?BEDEGF679/02679679:;>ABE@ADDDFDDFNNLPPNOOMMMJJJMAAD>?BDEG>@=>@;NPL:=9124014@AD>?A:=;BEALNM=>@-/400967=23934812478:78;67=34:/2:-1;,/;+-:-0=68E26@03;11=11:,-3014FGISTWIJP67=-/467==>D9:@ABFQSVIJM=>@>>@@@BEEEFFFTTQVVTOPLFFDZ\[abdABF237/0612899B67=BDIEFIEFI=>A469:;?;=@@AE?@B=>@DEGHILGHJGHJEFHHILGHL=>A469126>?BBDG@AE?@DSTMIJDQSLVWSEEB@@@98=/-4()/128;=@+,/*+-)*-#$*$$-%%1##0$$0&&0&(-)*-BDFILJ236/03,-1348;=@67:78;34898===?GGGLLLAAA???336-,1+,0236AD@HJFTVQGIF124/03=>@>?AADBEGDBED89;,-3++412846;78;01378:89=89?78>,08(+6-0=02?+-:+-:+/9+/7--9,,6,-3469LMOLMPNOU:;A/0646;89?9:@@AEIJN@AD9:=AAD==?:::AAATTQ[[XLMHLLIZ\[TUWMNP=>A126/06*+19:@;=B;=B>?E46;67==>D?@F>?B;=?;=?BDFEFHIJMIJMHILFGIDEGEFH679124?@BHILHILDEG?@9@A:PQJUVQTTQFFF438(&-()/78>BDG/02)*,)*-#$*%%/##/""/$$0**3()/014GHJTUW89=/03+,0-/2/03014:;?237,+0;:?BBEHHHEEE@@B76:0/34699:=:=9?A=OQMLNJ:;>78;89;;=?>@?=?;>@?78:-/4,,646;46;469,-089;67:128-/4+/7),7,/;,/;*,9*,9*-8*-6--9,,6&(-9:>JLNJLOQSXLMS0172399:@46;BDGDEH>?A;=?HHJ99;888>>>MMJOOMIJFMNIPSOTVUUVXNOQ:;?014/0646;89?67=78>34:01789?;=B:;A9:>468=>@EFHGHJGHJEFHBDFDEGABE9:=89;=>@DEGEFH>?A:;4>?8PQJWXTMMJBBB327%$+*+1?@FJLO347,-0,-1)*0++4((3$$1**666?$%+126BDFSTV:;?-/4,-3+,2239-/4017)*00/698=HHJHHHEEE??A98=/-4:;?;=?8:79;7NPLJMI9:=67:89;@AD@BA9;88:9679/06--746;128126,-078:4699:@ABH+/7),7,/;(*7)+8)+8),7),4))4009+,278;BDFFGJFGM:;A9:@01723934:>?B@AE;=?:;>>>@::=>>>===IIGOOMSTOQSNLNJQTSNPOIJM469-/2126;=B:;A66?33=22;11:77@;;E;=B@AE9:=;=?@AD?@BDEGGHJIJMHJI=?>687798=?>ADBFHGADB>?8:;4IJDTUPIIGHHH:9>&%,+,2DEJQSV78:124237/0622;%%1""/**699B()/78;?@BQSU9:>+,2/06,-3,-39:@89?67=43::9>AADHHHBBB::=76:+*189=78:;>::=8QTOEGD-/1+,0236>?A>@?241364468017--7017,-3014/0223678;78>34:*-6*-8+-:$&3(*7(*7(+6(+3++7))2,-39:>GHJIJNOPVQSX@AG017*+146;;=@?@D89;89;??A==?777;;;FFDOOMTUPPQMLNJSUQLNMGHJ/03-/2+,0;=B??H66?22;33=33=22;33=67=78;4689:=9:=@ADEFHHILIJMDFE4763648:9@BA@BAFHGHJI \ No newline at end of file diff --git a/Extended/libwebp/examples/unicode.h b/Extended/libwebp/examples/unicode.h deleted file mode 100644 index 61199ce..0000000 --- a/Extended/libwebp/examples/unicode.h +++ /dev/null @@ -1,102 +0,0 @@ -// Copyright 2018 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Unicode support for Windows. The main idea is to maintain an array of Unicode -// arguments (wargv) and use it only for file paths. The regular argv is used -// for everything else. -// -// Author: Yannis Guyon (yguyon@google.com) - -#ifndef WEBP_EXAMPLES_UNICODE_H_ -#define WEBP_EXAMPLES_UNICODE_H_ - -#if defined(_WIN32) && defined(_UNICODE) - -// wchar_t is used instead of TCHAR because we only perform additional work when -// Unicode is enabled and because the output of CommandLineToArgvW() is wchar_t. - -#include -#include -#include - -// Create a wchar_t array containing Unicode parameters. -#define INIT_WARGV(ARGC, ARGV) \ - int wargc; \ - const W_CHAR** const wargv = \ - (const W_CHAR**)CommandLineToArgvW(GetCommandLineW(), &wargc); \ - do { \ - if (wargv == NULL || wargc != (ARGC)) { \ - fprintf(stderr, "Error: Unable to get Unicode arguments.\n"); \ - FREE_WARGV_AND_RETURN(-1); \ - } \ - } while (0) - -// Use this to get a Unicode argument (e.g. file path). -#define GET_WARGV(UNUSED, C) wargv[C] -// For cases where argv is shifted by one compared to wargv. -#define GET_WARGV_SHIFTED(UNUSED, C) wargv[(C) + 1] -#define GET_WARGV_OR_NULL() wargv - -// Release resources. LocalFree() is needed after CommandLineToArgvW(). -#define FREE_WARGV() LOCAL_FREE((W_CHAR** const)wargv) -#define LOCAL_FREE(WARGV) \ - do { \ - if ((WARGV) != NULL) LocalFree(WARGV); \ - } while (0) - -#define W_CHAR wchar_t // WCHAR without underscore might already be defined. -#define TO_W_CHAR(STR) (L##STR) - -#define WFOPEN(ARG, OPT) _wfopen((const W_CHAR*)ARG, TO_W_CHAR(OPT)) - -#define WPRINTF(STR, ...) wprintf(TO_W_CHAR(STR), __VA_ARGS__) -#define WFPRINTF(STDERR, STR, ...) fwprintf(STDERR, TO_W_CHAR(STR), __VA_ARGS__) - -#define WSTRLEN(FILENAME) wcslen((const W_CHAR*)FILENAME) -#define WSTRCMP(FILENAME, STR) wcscmp((const W_CHAR*)FILENAME, TO_W_CHAR(STR)) -#define WSTRRCHR(FILENAME, STR) wcsrchr((const W_CHAR*)FILENAME, TO_W_CHAR(STR)) -#define WSNPRINTF(A, B, STR, ...) _snwprintf(A, B, TO_W_CHAR(STR), __VA_ARGS__) - -#else - -// Unicode file paths work as is on Unix platforms, and no extra work is done on -// Windows either if Unicode is disabled. - -#define INIT_WARGV(ARGC, ARGV) - -#define GET_WARGV(ARGV, C) (ARGV)[C] -#define GET_WARGV_SHIFTED(ARGV, C) (ARGV)[C] -#define GET_WARGV_OR_NULL() NULL - -#define FREE_WARGV() -#define LOCAL_FREE(WARGV) - -#define W_CHAR char -#define TO_W_CHAR(STR) (STR) - -#define WFOPEN(ARG, OPT) fopen(ARG, OPT) - -#define WPRINTF(STR, ...) printf(STR, __VA_ARGS__) -#define WFPRINTF(STDERR, STR, ...) fprintf(STDERR, STR, __VA_ARGS__) - -#define WSTRLEN(FILENAME) strlen(FILENAME) -#define WSTRCMP(FILENAME, STR) strcmp(FILENAME, STR) -#define WSTRRCHR(FILENAME, STR) strrchr(FILENAME, STR) -#define WSNPRINTF(A, B, STR, ...) snprintf(A, B, STR, __VA_ARGS__) - -#endif // defined(_WIN32) && defined(_UNICODE) - -// Don't forget to free wargv before returning (e.g. from main). -#define FREE_WARGV_AND_RETURN(VALUE) \ - do { \ - FREE_WARGV(); \ - return (VALUE); \ - } while (0) - -#endif // WEBP_EXAMPLES_UNICODE_H_ diff --git a/Extended/libwebp/examples/unicode_gif.h b/Extended/libwebp/examples/unicode_gif.h deleted file mode 100644 index afcd46b..0000000 --- a/Extended/libwebp/examples/unicode_gif.h +++ /dev/null @@ -1,75 +0,0 @@ -// Copyright 2018 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// giflib doesn't have a Unicode DGifOpenFileName(). Let's make one. -// -// Author: Yannis Guyon (yguyon@google.com) - -#ifndef WEBP_EXAMPLES_UNICODE_GIF_H_ -#define WEBP_EXAMPLES_UNICODE_GIF_H_ - -#include "./unicode.h" -#ifdef HAVE_CONFIG_H -#include "webp/config.h" // For WEBP_HAVE_GIF -#endif - -#if defined(WEBP_HAVE_GIF) - -#ifdef _WIN32 -#include // Not standard, needed for _topen and flags. -#include -#endif - -#include -#include -#include "./gifdec.h" - -#if !defined(STDIN_FILENO) -#define STDIN_FILENO 0 -#endif - -static GifFileType* DGifOpenFileUnicode(const W_CHAR* file_name, int* error) { - if (!WSTRCMP(file_name, "-")) { -#if LOCAL_GIF_PREREQ(5, 0) - return DGifOpenFileHandle(STDIN_FILENO, error); -#else - (void)error; - return DGifOpenFileHandle(STDIN_FILENO); -#endif - } - -#if defined(_WIN32) && defined(_UNICODE) - - int file_handle = _wopen(file_name, _O_RDONLY | _O_BINARY); - if (file_handle == -1) { - if (error != NULL) *error = D_GIF_ERR_OPEN_FAILED; - return NULL; - } - -#if LOCAL_GIF_PREREQ(5, 0) - return DGifOpenFileHandle(file_handle, error); -#else - return DGifOpenFileHandle(file_handle); -#endif - -#else - -#if LOCAL_GIF_PREREQ(5, 0) - return DGifOpenFileName(file_name, error); -#else - return DGifOpenFileName(file_name); -#endif - -#endif // defined(_WIN32) && defined(_UNICODE) - // DGifCloseFile() is called later. -} - -#endif // defined(WEBP_HAVE_GIF) - -#endif // WEBP_EXAMPLES_UNICODE_GIF_H_ diff --git a/Extended/libwebp/examples/vwebp.c b/Extended/libwebp/examples/vwebp.c deleted file mode 100644 index ef26e1b..0000000 --- a/Extended/libwebp/examples/vwebp.c +++ /dev/null @@ -1,641 +0,0 @@ -// Copyright 2011 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Simple OpenGL-based WebP file viewer. -// -// Author: Skal (pascal.massimino@gmail.com) -#ifdef HAVE_CONFIG_H -#include "webp/config.h" -#endif - -#if defined(__unix__) || defined(__CYGWIN__) -#define _POSIX_C_SOURCE 200112L // for setenv -#endif - -#include -#include -#include - -#if defined(WEBP_HAVE_GL) - -#if defined(HAVE_GLUT_GLUT_H) -#include -#else -#include -#ifdef FREEGLUT -#include -#endif -#endif - -#ifdef WEBP_HAVE_QCMS -#include -#endif - -#include "webp/decode.h" -#include "webp/demux.h" - -#include "../examples/example_util.h" -#include "../imageio/imageio_util.h" -#include "./unicode.h" - -#if defined(_MSC_VER) && _MSC_VER < 1900 -#define snprintf _snprintf -#endif - -// Unfortunate global variables. Gathered into a struct for comfort. -static struct { - int has_animation; - int has_color_profile; - int done; - int decoding_error; - int print_info; - int only_deltas; - int use_color_profile; - int draw_anim_background_color; - - int canvas_width, canvas_height; - int loop_count; - uint32_t bg_color; - - const char* file_name; - WebPData data; - WebPDecoderConfig config; - const WebPDecBuffer* pic; - WebPDemuxer* dmux; - WebPIterator curr_frame; - WebPIterator prev_frame; - WebPChunkIterator iccp; - int viewport_width, viewport_height; -} kParams; - -static void ClearPreviousPic(void) { - WebPFreeDecBuffer((WebPDecBuffer*)kParams.pic); - kParams.pic = NULL; -} - -static void ClearParams(void) { - ClearPreviousPic(); - WebPDataClear(&kParams.data); - WebPDemuxReleaseIterator(&kParams.curr_frame); - WebPDemuxReleaseIterator(&kParams.prev_frame); - WebPDemuxReleaseChunkIterator(&kParams.iccp); - WebPDemuxDelete(kParams.dmux); - kParams.dmux = NULL; -} - -// Sets the previous frame to the dimensions of the canvas and has it dispose -// to background to cause the canvas to be cleared. -static void ClearPreviousFrame(void) { - WebPIterator* const prev = &kParams.prev_frame; - prev->width = kParams.canvas_width; - prev->height = kParams.canvas_height; - prev->x_offset = prev->y_offset = 0; - prev->dispose_method = WEBP_MUX_DISPOSE_BACKGROUND; -} - -// ----------------------------------------------------------------------------- -// Color profile handling -static int ApplyColorProfile(const WebPData* const profile, - WebPDecBuffer* const rgba) { -#ifdef WEBP_HAVE_QCMS - int i, ok = 0; - uint8_t* line; - uint8_t major_revision; - qcms_profile* input_profile = NULL; - qcms_profile* output_profile = NULL; - qcms_transform* transform = NULL; - const qcms_data_type input_type = QCMS_DATA_RGBA_8; - const qcms_data_type output_type = QCMS_DATA_RGBA_8; - const qcms_intent intent = QCMS_INTENT_DEFAULT; - - if (profile == NULL || rgba == NULL) return 0; - if (profile->bytes == NULL || profile->size < 10) return 1; - major_revision = profile->bytes[8]; - - qcms_enable_iccv4(); - input_profile = qcms_profile_from_memory(profile->bytes, profile->size); - // qcms_profile_is_bogus() is broken with ICCv4. - if (input_profile == NULL || - (major_revision < 4 && qcms_profile_is_bogus(input_profile))) { - fprintf(stderr, "Color profile is bogus!\n"); - goto Error; - } - - output_profile = qcms_profile_sRGB(); - if (output_profile == NULL) { - fprintf(stderr, "Error creating output color profile!\n"); - goto Error; - } - - qcms_profile_precache_output_transform(output_profile); - transform = qcms_transform_create(input_profile, input_type, - output_profile, output_type, - intent); - if (transform == NULL) { - fprintf(stderr, "Error creating color transform!\n"); - goto Error; - } - - line = rgba->u.RGBA.rgba; - for (i = 0; i < rgba->height; ++i, line += rgba->u.RGBA.stride) { - qcms_transform_data(transform, line, line, rgba->width); - } - ok = 1; - - Error: - if (input_profile != NULL) qcms_profile_release(input_profile); - if (output_profile != NULL) qcms_profile_release(output_profile); - if (transform != NULL) qcms_transform_release(transform); - return ok; -#else - (void)profile; - (void)rgba; - return 1; -#endif // WEBP_HAVE_QCMS -} - -//------------------------------------------------------------------------------ -// File decoding - -static int Decode(void) { // Fills kParams.curr_frame - const WebPIterator* const curr = &kParams.curr_frame; - WebPDecoderConfig* const config = &kParams.config; - WebPDecBuffer* const output_buffer = &config->output; - int ok = 0; - - ClearPreviousPic(); - output_buffer->colorspace = MODE_RGBA; - ok = (WebPDecode(curr->fragment.bytes, curr->fragment.size, - config) == VP8_STATUS_OK); - if (!ok) { - fprintf(stderr, "Decoding of frame #%d failed!\n", curr->frame_num); - } else { - kParams.pic = output_buffer; - if (kParams.use_color_profile) { - ok = ApplyColorProfile(&kParams.iccp.chunk, output_buffer); - if (!ok) { - fprintf(stderr, "Applying color profile to frame #%d failed!\n", - curr->frame_num); - } - } - } - return ok; -} - -static void decode_callback(int what) { - if (what == 0 && !kParams.done) { - int duration = 0; - if (kParams.dmux != NULL) { - WebPIterator* const curr = &kParams.curr_frame; - if (!WebPDemuxNextFrame(curr)) { - WebPDemuxReleaseIterator(curr); - if (WebPDemuxGetFrame(kParams.dmux, 1, curr)) { - --kParams.loop_count; - kParams.done = (kParams.loop_count == 0); - if (kParams.done) return; - ClearPreviousFrame(); - } else { - kParams.decoding_error = 1; - kParams.done = 1; - return; - } - } - duration = curr->duration; - // Behavior copied from Chrome, cf: - // https://cs.chromium.org/chromium/src/third_party/WebKit/Source/ - // platform/graphics/DeferredImageDecoder.cpp? - // rcl=b4c33049f096cd283f32be9a58b9a9e768227c26&l=246 - if (duration <= 10) duration = 100; - } - if (!Decode()) { - kParams.decoding_error = 1; - kParams.done = 1; - } else { - glutPostRedisplay(); - glutTimerFunc(duration, decode_callback, what); - } - } -} - -//------------------------------------------------------------------------------ -// Callbacks - -static void HandleKey(unsigned char key, int pos_x, int pos_y) { - // Note: rescaling the window or toggling some features during an animation - // generates visual artifacts. This is not fixed because refreshing the frame - // may require rendering the whole animation from start till current frame. - (void)pos_x; - (void)pos_y; - if (key == 'q' || key == 'Q' || key == 27 /* Esc */) { -#ifdef FREEGLUT - glutLeaveMainLoop(); -#else - ClearParams(); - exit(0); -#endif - } else if (key == 'c') { - if (kParams.has_color_profile && !kParams.decoding_error) { - kParams.use_color_profile = 1 - kParams.use_color_profile; - - if (kParams.has_animation) { - // Restart the completed animation to pickup the color profile change. - if (kParams.done && kParams.loop_count == 0) { - kParams.loop_count = - (int)WebPDemuxGetI(kParams.dmux, WEBP_FF_LOOP_COUNT) + 1; - kParams.done = 0; - // Start the decode loop immediately. - glutTimerFunc(0, decode_callback, 0); - } - } else { - Decode(); - glutPostRedisplay(); - } - } - } else if (key == 'b') { - kParams.draw_anim_background_color = 1 - kParams.draw_anim_background_color; - if (!kParams.has_animation) ClearPreviousFrame(); - glutPostRedisplay(); - } else if (key == 'i') { - kParams.print_info = 1 - kParams.print_info; - if (!kParams.has_animation) ClearPreviousFrame(); - glutPostRedisplay(); - } else if (key == 'd') { - kParams.only_deltas = 1 - kParams.only_deltas; - glutPostRedisplay(); - } -} - -static void HandleReshape(int width, int height) { - // Note: reshape doesn't preserve aspect ratio, and might - // be handling larger-than-screen pictures incorrectly. - glViewport(0, 0, width, height); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - kParams.viewport_width = width; - kParams.viewport_height = height; - if (!kParams.has_animation) ClearPreviousFrame(); -} - -static void PrintString(const char* const text) { - void* const font = GLUT_BITMAP_9_BY_15; - int i; - for (i = 0; text[i]; ++i) { - glutBitmapCharacter(font, text[i]); - } -} - -static float GetColorf(uint32_t color, int shift) { - return ((color >> shift) & 0xff) / 255.f; -} - -static void DrawCheckerBoard(void) { - const int square_size = 8; // must be a power of 2 - int x, y; - GLint viewport[4]; // x, y, width, height - - glPushMatrix(); - - glGetIntegerv(GL_VIEWPORT, viewport); - // shift to integer coordinates with (0,0) being top-left. - glOrtho(0, viewport[2], viewport[3], 0, -1, 1); - for (y = 0; y < viewport[3]; y += square_size) { - for (x = 0; x < viewport[2]; x += square_size) { - const GLubyte color = 128 + 64 * (!((x + y) & square_size)); - glColor3ub(color, color, color); - glRecti(x, y, x + square_size, y + square_size); - } - } - glPopMatrix(); -} - -static void DrawBackground(void) { - // Whole window cleared with clear color, checkerboard rendered on top of it. - glClear(GL_COLOR_BUFFER_BIT); - DrawCheckerBoard(); - - // ANIM background color rendered (blend) on top. Default is white for still - // images (without ANIM chunk). glClear() can't be used for that (no blend). - if (kParams.draw_anim_background_color) { - glPushMatrix(); - glLoadIdentity(); - glColor4f(GetColorf(kParams.bg_color, 16), // BGRA from spec - GetColorf(kParams.bg_color, 8), - GetColorf(kParams.bg_color, 0), - GetColorf(kParams.bg_color, 24)); - glRecti(-1, -1, +1, +1); - glPopMatrix(); - } -} - -// Draw background in a scissored rectangle. -static void DrawBackgroundScissored(int window_x, int window_y, int frame_w, - int frame_h) { - // Only update the requested area, not the whole canvas. - window_x = window_x * kParams.viewport_width / kParams.canvas_width; - window_y = window_y * kParams.viewport_height / kParams.canvas_height; - frame_w = frame_w * kParams.viewport_width / kParams.canvas_width; - frame_h = frame_h * kParams.viewport_height / kParams.canvas_height; - - // glScissor() takes window coordinates (0,0 at bottom left). - window_y = kParams.viewport_height - window_y - frame_h; - - glEnable(GL_SCISSOR_TEST); - glScissor(window_x, window_y, frame_w, frame_h); - DrawBackground(); - glDisable(GL_SCISSOR_TEST); -} - -static void HandleDisplay(void) { - const WebPDecBuffer* const pic = kParams.pic; - const WebPIterator* const curr = &kParams.curr_frame; - WebPIterator* const prev = &kParams.prev_frame; - GLfloat xoff, yoff; - if (pic == NULL) return; - glPushMatrix(); - glPixelZoom((GLfloat)(+1. / kParams.canvas_width * kParams.viewport_width), - (GLfloat)(-1. / kParams.canvas_height * kParams.viewport_height)); - xoff = (GLfloat)(2. * curr->x_offset / kParams.canvas_width); - yoff = (GLfloat)(2. * curr->y_offset / kParams.canvas_height); - glRasterPos2f(-1.f + xoff, 1.f - yoff); - glPixelStorei(GL_UNPACK_ALIGNMENT, 1); - glPixelStorei(GL_UNPACK_ROW_LENGTH, pic->u.RGBA.stride / 4); - - if (kParams.only_deltas) { - DrawBackground(); - } else { - // The rectangle of the previous frame might be different than the current - // frame, so we may need to DrawBackgroundScissored for both. - if (prev->dispose_method == WEBP_MUX_DISPOSE_BACKGROUND) { - // Clear the previous frame rectangle. - DrawBackgroundScissored(prev->x_offset, prev->y_offset, prev->width, - prev->height); - } - if (curr->blend_method == WEBP_MUX_NO_BLEND) { - // We simulate no-blending behavior by first clearing the current frame - // rectangle and then alpha-blending against it. - DrawBackgroundScissored(curr->x_offset, curr->y_offset, curr->width, - curr->height); - } - } - - *prev = *curr; - - glDrawPixels(pic->width, pic->height, - GL_RGBA, GL_UNSIGNED_BYTE, - (GLvoid*)pic->u.RGBA.rgba); - if (kParams.print_info) { - char tmp[32]; - - glColor4f(0.90f, 0.0f, 0.90f, 1.0f); - glRasterPos2f(-0.95f, 0.90f); - PrintString(kParams.file_name); - - snprintf(tmp, sizeof(tmp), "Dimension:%d x %d", pic->width, pic->height); - glColor4f(0.90f, 0.0f, 0.90f, 1.0f); - glRasterPos2f(-0.95f, 0.80f); - PrintString(tmp); - if (curr->x_offset != 0 || curr->y_offset != 0) { - snprintf(tmp, sizeof(tmp), " (offset:%d,%d)", - curr->x_offset, curr->y_offset); - glRasterPos2f(-0.95f, 0.70f); - PrintString(tmp); - } - } - glPopMatrix(); -#if defined(__APPLE__) || defined(_WIN32) - glFlush(); -#else - glutSwapBuffers(); -#endif -} - -static void StartDisplay(void) { - int width = kParams.canvas_width; - int height = kParams.canvas_height; - int screen_width, screen_height; - // TODO(webp:365) GLUT_DOUBLE results in flickering / old frames to be - // partially displayed with animated webp + alpha. -#if defined(__APPLE__) || defined(_WIN32) - glutInitDisplayMode(GLUT_RGBA); -#else - glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA); -#endif - screen_width = glutGet(GLUT_SCREEN_WIDTH); - screen_height = glutGet(GLUT_SCREEN_HEIGHT); - if (width > screen_width || height > screen_height) { - if (width > screen_width) { - height = (height * screen_width + width - 1) / width; - width = screen_width; - } - if (height > screen_height) { - width = (width * screen_height + height - 1) / height; - height = screen_height; - } - } - glutInitWindowSize(width, height); - glutCreateWindow("WebP viewer"); - glutDisplayFunc(HandleDisplay); - glutReshapeFunc(HandleReshape); - glutIdleFunc(NULL); - glutKeyboardFunc(HandleKey); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - glEnable(GL_BLEND); - glClearColor(0, 0, 0, 0); // window will be cleared to black (no blend) - DrawBackground(); -} - -//------------------------------------------------------------------------------ -// Main - -static void Help(void) { - printf( - "Usage: vwebp in_file [options]\n\n" - "Decodes the WebP image file and visualize it using OpenGL\n" - "Options are:\n" - " -version ..... print version number and exit\n" - " -noicc ....... don't use the icc profile if present\n" - " -nofancy ..... don't use the fancy YUV420 upscaler\n" - " -nofilter .... disable in-loop filtering\n" - " -dither dithering strength (0..100), default=50\n" - " -noalphadither disable alpha plane dithering\n" - " -usebgcolor .. display background color\n" - " -mt .......... use multi-threading\n" - " -info ........ print info\n" - " -h ........... this help message\n" - "\n" - "Keyboard shortcuts:\n" - " 'c' ................ toggle use of color profile\n" - " 'b' ................ toggle background color display\n" - " 'i' ................ overlay file information\n" - " 'd' ................ disable blending & disposal (debug)\n" - " 'q' / 'Q' / ESC .... quit\n"); -} - -int main(int argc, char* argv[]) { - int c; - WebPDecoderConfig* const config = &kParams.config; - WebPIterator* const curr = &kParams.curr_frame; - - INIT_WARGV(argc, argv); - - if (!WebPInitDecoderConfig(config)) { - fprintf(stderr, "Library version mismatch!\n"); - FREE_WARGV_AND_RETURN(-1); - } - config->options.dithering_strength = 50; - config->options.alpha_dithering_strength = 100; - kParams.use_color_profile = 1; - // Background color hidden by default to see transparent areas. - kParams.draw_anim_background_color = 0; - - for (c = 1; c < argc; ++c) { - int parse_error = 0; - if (!strcmp(argv[c], "-h") || !strcmp(argv[c], "-help")) { - Help(); - FREE_WARGV_AND_RETURN(0); - } else if (!strcmp(argv[c], "-noicc")) { - kParams.use_color_profile = 0; - } else if (!strcmp(argv[c], "-nofancy")) { - config->options.no_fancy_upsampling = 1; - } else if (!strcmp(argv[c], "-nofilter")) { - config->options.bypass_filtering = 1; - } else if (!strcmp(argv[c], "-noalphadither")) { - config->options.alpha_dithering_strength = 0; - } else if (!strcmp(argv[c], "-usebgcolor")) { - kParams.draw_anim_background_color = 1; - } else if (!strcmp(argv[c], "-dither") && c + 1 < argc) { - config->options.dithering_strength = - ExUtilGetInt(argv[++c], 0, &parse_error); - } else if (!strcmp(argv[c], "-info")) { - kParams.print_info = 1; - } else if (!strcmp(argv[c], "-version")) { - const int dec_version = WebPGetDecoderVersion(); - const int dmux_version = WebPGetDemuxVersion(); - printf("WebP Decoder version: %d.%d.%d\nWebP Demux version: %d.%d.%d\n", - (dec_version >> 16) & 0xff, (dec_version >> 8) & 0xff, - dec_version & 0xff, (dmux_version >> 16) & 0xff, - (dmux_version >> 8) & 0xff, dmux_version & 0xff); - FREE_WARGV_AND_RETURN(0); - } else if (!strcmp(argv[c], "-mt")) { - config->options.use_threads = 1; - } else if (!strcmp(argv[c], "--")) { - if (c < argc - 1) kParams.file_name = (const char*)GET_WARGV(argv, ++c); - break; - } else if (argv[c][0] == '-') { - printf("Unknown option '%s'\n", argv[c]); - Help(); - FREE_WARGV_AND_RETURN(-1); - } else { - kParams.file_name = (const char*)GET_WARGV(argv, c); - } - - if (parse_error) { - Help(); - FREE_WARGV_AND_RETURN(-1); - } - } - - if (kParams.file_name == NULL) { - printf("missing input file!!\n"); - Help(); - FREE_WARGV_AND_RETURN(0); - } - - if (!ImgIoUtilReadFile(kParams.file_name, - &kParams.data.bytes, &kParams.data.size)) { - goto Error; - } - - if (!WebPGetInfo(kParams.data.bytes, kParams.data.size, NULL, NULL)) { - fprintf(stderr, "Input file doesn't appear to be WebP format.\n"); - goto Error; - } - - kParams.dmux = WebPDemux(&kParams.data); - if (kParams.dmux == NULL) { - fprintf(stderr, "Could not create demuxing object!\n"); - goto Error; - } - - kParams.canvas_width = WebPDemuxGetI(kParams.dmux, WEBP_FF_CANVAS_WIDTH); - kParams.canvas_height = WebPDemuxGetI(kParams.dmux, WEBP_FF_CANVAS_HEIGHT); - if (kParams.print_info) { - printf("Canvas: %d x %d\n", kParams.canvas_width, kParams.canvas_height); - } - - ClearPreviousFrame(); - - memset(&kParams.iccp, 0, sizeof(kParams.iccp)); - kParams.has_color_profile = - !!(WebPDemuxGetI(kParams.dmux, WEBP_FF_FORMAT_FLAGS) & ICCP_FLAG); - if (kParams.has_color_profile) { -#ifdef WEBP_HAVE_QCMS - if (!WebPDemuxGetChunk(kParams.dmux, "ICCP", 1, &kParams.iccp)) goto Error; - printf("VP8X: Found color profile\n"); -#else - fprintf(stderr, "Warning: color profile present, but qcms is unavailable!\n" - "Build libqcms from Mozilla or Chromium and define WEBP_HAVE_QCMS " - "before building.\n"); -#endif - } - - if (!WebPDemuxGetFrame(kParams.dmux, 1, curr)) goto Error; - - kParams.has_animation = (curr->num_frames > 1); - kParams.loop_count = (int)WebPDemuxGetI(kParams.dmux, WEBP_FF_LOOP_COUNT); - kParams.bg_color = WebPDemuxGetI(kParams.dmux, WEBP_FF_BACKGROUND_COLOR); - printf("VP8X: Found %d images in file (loop count = %d)\n", - curr->num_frames, kParams.loop_count); - - // Decode first frame - if (!Decode()) goto Error; - - // Position iterator to last frame. Next call to HandleDisplay will wrap over. - // We take this into account by bumping up loop_count. - WebPDemuxGetFrame(kParams.dmux, 0, curr); - if (kParams.loop_count) ++kParams.loop_count; - -#if defined(__unix__) || defined(__CYGWIN__) - // Work around GLUT compositor bug. - // https://bugs.launchpad.net/ubuntu/+source/freeglut/+bug/369891 - setenv("XLIB_SKIP_ARGB_VISUALS", "1", 1); -#endif - - // Start display (and timer) - glutInit(&argc, argv); -#ifdef FREEGLUT - glutSetOption(GLUT_ACTION_ON_WINDOW_CLOSE, GLUT_ACTION_CONTINUE_EXECUTION); -#endif - StartDisplay(); - - if (kParams.has_animation) glutTimerFunc(0, decode_callback, 0); - glutMainLoop(); - - // Should only be reached when using FREEGLUT: - ClearParams(); - FREE_WARGV_AND_RETURN(0); - - Error: - ClearParams(); - FREE_WARGV_AND_RETURN(-1); -} - -#else // !WEBP_HAVE_GL - -int main(int argc, const char* argv[]) { - fprintf(stderr, "OpenGL support not enabled in %s.\n", argv[0]); - (void)argc; - return 0; -} - -#endif - -//------------------------------------------------------------------------------ diff --git a/Extended/libwebp/examples/webpinfo.c b/Extended/libwebp/examples/webpinfo.c deleted file mode 100644 index eec4784..0000000 --- a/Extended/libwebp/examples/webpinfo.c +++ /dev/null @@ -1,1182 +0,0 @@ -// Copyright 2017 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Command-line tool to print out the chunk level structure of WebP files -// along with basic integrity checks. -// -// Author: Hui Su (huisu@google.com) - -#include -#include - -#ifdef HAVE_CONFIG_H -#include "webp/config.h" -#endif - -#include "../imageio/imageio_util.h" -#include "./unicode.h" -#include "webp/decode.h" -#include "webp/format_constants.h" -#include "webp/mux_types.h" - -#if defined(_MSC_VER) && _MSC_VER < 1900 -#define snprintf _snprintf -#endif - -#define LOG_ERROR(MESSAGE) \ - do { \ - if (webp_info->show_diagnosis_) { \ - fprintf(stderr, "Error: %s\n", MESSAGE); \ - } \ - } while (0) - -#define LOG_WARN(MESSAGE) \ - do { \ - if (webp_info->show_diagnosis_) { \ - fprintf(stderr, "Warning: %s\n", MESSAGE); \ - } \ - } while (0) - -static const char* const kFormats[3] = { - "Unknown", - "Lossy", - "Lossless" -}; - -static const char* const kLosslessTransforms[4] = { - "Predictor", - "Cross Color", - "Subtract Green", - "Color Indexing" -}; - -static const char* const kAlphaFilterMethods[4] = { - "None", - "Horizontal", - "Vertical", - "Gradient" -}; - -typedef enum { - WEBP_INFO_OK = 0, - WEBP_INFO_TRUNCATED_DATA, - WEBP_INFO_PARSE_ERROR, - WEBP_INFO_INVALID_PARAM, - WEBP_INFO_BITSTREAM_ERROR, - WEBP_INFO_MISSING_DATA, - WEBP_INFO_INVALID_COMMAND -} WebPInfoStatus; - -typedef enum ChunkID { - CHUNK_VP8, - CHUNK_VP8L, - CHUNK_VP8X, - CHUNK_ALPHA, - CHUNK_ANIM, - CHUNK_ANMF, - CHUNK_ICCP, - CHUNK_EXIF, - CHUNK_XMP, - CHUNK_UNKNOWN, - CHUNK_TYPES = CHUNK_UNKNOWN -} ChunkID; - -typedef struct { - size_t start_; - size_t end_; - const uint8_t* buf_; -} MemBuffer; - -typedef struct { - size_t offset_; - size_t size_; - const uint8_t* payload_; - ChunkID id_; -} ChunkData; - -typedef struct WebPInfo { - int canvas_width_; - int canvas_height_; - int loop_count_; - int num_frames_; - int chunk_counts_[CHUNK_TYPES]; - int anmf_subchunk_counts_[3]; // 0 VP8; 1 VP8L; 2 ALPH. - uint32_t bgcolor_; - int feature_flags_; - int has_alpha_; - // Used for parsing ANMF chunks. - int frame_width_, frame_height_; - size_t anim_frame_data_size_; - int is_processing_anim_frame_, seen_alpha_subchunk_, seen_image_subchunk_; - // Print output control. - int quiet_, show_diagnosis_, show_summary_; - int parse_bitstream_; -} WebPInfo; - -static void WebPInfoInit(WebPInfo* const webp_info) { - memset(webp_info, 0, sizeof(*webp_info)); -} - -static const char kWebPChunkTags[CHUNK_TYPES][4] = { - { 'V', 'P', '8', ' ' }, - { 'V', 'P', '8', 'L' }, - { 'V', 'P', '8', 'X' }, - { 'A', 'L', 'P', 'H' }, - { 'A', 'N', 'I', 'M' }, - { 'A', 'N', 'M', 'F' }, - { 'I', 'C', 'C', 'P' }, - { 'E', 'X', 'I', 'F' }, - { 'X', 'M', 'P', ' ' }, -}; - -// ----------------------------------------------------------------------------- -// Data reading. - -static int GetLE16(const uint8_t* const data) { - return (data[0] << 0) | (data[1] << 8); -} - -static int GetLE24(const uint8_t* const data) { - return GetLE16(data) | (data[2] << 16); -} - -static uint32_t GetLE32(const uint8_t* const data) { - return GetLE16(data) | ((uint32_t)GetLE16(data + 2) << 16); -} - -static int ReadLE16(const uint8_t** data) { - const int val = GetLE16(*data); - *data += 2; - return val; -} - -static int ReadLE24(const uint8_t** data) { - const int val = GetLE24(*data); - *data += 3; - return val; -} - -static uint32_t ReadLE32(const uint8_t** data) { - const uint32_t val = GetLE32(*data); - *data += 4; - return val; -} - -static int ReadFileToWebPData(const char* const filename, - WebPData* const webp_data) { - const uint8_t* data; - size_t size; - if (!ImgIoUtilReadFile(filename, &data, &size)) return 0; - webp_data->bytes = data; - webp_data->size = size; - return 1; -} - -// ----------------------------------------------------------------------------- -// MemBuffer object. - -static void InitMemBuffer(MemBuffer* const mem, const WebPData* webp_data) { - mem->buf_ = webp_data->bytes; - mem->start_ = 0; - mem->end_ = webp_data->size; -} - -static size_t MemDataSize(const MemBuffer* const mem) { - return (mem->end_ - mem->start_); -} - -static const uint8_t* GetBuffer(MemBuffer* const mem) { - return mem->buf_ + mem->start_; -} - -static void Skip(MemBuffer* const mem, size_t size) { - mem->start_ += size; -} - -static uint32_t ReadMemBufLE32(MemBuffer* const mem) { - const uint8_t* const data = mem->buf_ + mem->start_; - const uint32_t val = GetLE32(data); - assert(MemDataSize(mem) >= 4); - Skip(mem, 4); - return val; -} - -// ----------------------------------------------------------------------------- -// Lossy bitstream analysis. - -static int GetBits(const uint8_t* const data, size_t data_size, size_t nb, - int* val, uint64_t* const bit_pos) { - *val = 0; - while (nb-- > 0) { - const uint64_t p = (*bit_pos)++; - if ((p >> 3) >= data_size) { - return 0; - } else { - const int bit = !!(data[p >> 3] & (128 >> ((p & 7)))); - *val = (*val << 1) | bit; - } - } - return 1; -} - -static int GetSignedBits(const uint8_t* const data, size_t data_size, size_t nb, - int* val, uint64_t* const bit_pos) { - int sign; - if (!GetBits(data, data_size, nb, val, bit_pos)) return 0; - if (!GetBits(data, data_size, 1, &sign, bit_pos)) return 0; - if (sign) *val = -(*val); - return 1; -} - -#define GET_BITS(v, n) \ - do { \ - if (!GetBits(data, data_size, n, &(v), bit_pos)) { \ - LOG_ERROR("Truncated lossy bitstream."); \ - return WEBP_INFO_TRUNCATED_DATA; \ - } \ - } while (0) - -#define GET_SIGNED_BITS(v, n) \ - do { \ - if (!GetSignedBits(data, data_size, n, &(v), bit_pos)) { \ - LOG_ERROR("Truncated lossy bitstream."); \ - return WEBP_INFO_TRUNCATED_DATA; \ - } \ - } while (0) - -static WebPInfoStatus ParseLossySegmentHeader(const WebPInfo* const webp_info, - const uint8_t* const data, - size_t data_size, - uint64_t* const bit_pos) { - int use_segment; - GET_BITS(use_segment, 1); - printf(" Use segment: %d\n", use_segment); - if (use_segment) { - int update_map, update_data; - GET_BITS(update_map, 1); - GET_BITS(update_data, 1); - printf(" Update map: %d\n" - " Update data: %d\n", - update_map, update_data); - if (update_data) { - int i, a_delta; - int quantizer[4] = {0, 0, 0, 0}; - int filter_strength[4] = {0, 0, 0, 0}; - GET_BITS(a_delta, 1); - printf(" Absolute delta: %d\n", a_delta); - for (i = 0; i < 4; ++i) { - int bit; - GET_BITS(bit, 1); - if (bit) GET_SIGNED_BITS(quantizer[i], 7); - } - for (i = 0; i < 4; ++i) { - int bit; - GET_BITS(bit, 1); - if (bit) GET_SIGNED_BITS(filter_strength[i], 6); - } - printf(" Quantizer: %d %d %d %d\n", quantizer[0], quantizer[1], - quantizer[2], quantizer[3]); - printf(" Filter strength: %d %d %d %d\n", filter_strength[0], - filter_strength[1], filter_strength[2], filter_strength[3]); - } - if (update_map) { - int i; - int prob_segment[3] = {255, 255, 255}; - for (i = 0; i < 3; ++i) { - int bit; - GET_BITS(bit, 1); - if (bit) GET_BITS(prob_segment[i], 8); - } - printf(" Prob segment: %d %d %d\n", - prob_segment[0], prob_segment[1], prob_segment[2]); - } - } - return WEBP_INFO_OK; -} - -static WebPInfoStatus ParseLossyFilterHeader(const WebPInfo* const webp_info, - const uint8_t* const data, - size_t data_size, - uint64_t* const bit_pos) { - int simple_filter, level, sharpness, use_lf_delta; - GET_BITS(simple_filter, 1); - GET_BITS(level, 6); - GET_BITS(sharpness, 3); - GET_BITS(use_lf_delta, 1); - printf(" Simple filter: %d\n", simple_filter); - printf(" Level: %d\n", level); - printf(" Sharpness: %d\n", sharpness); - printf(" Use lf delta: %d\n", use_lf_delta); - if (use_lf_delta) { - int update; - GET_BITS(update, 1); - printf(" Update lf delta: %d\n", update); - if (update) { - int i; - for (i = 0; i < 4 + 4; ++i) { - int temp; - GET_BITS(temp, 1); - if (temp) GET_BITS(temp, 7); - } - } - } - return WEBP_INFO_OK; -} - -static WebPInfoStatus ParseLossyHeader(const ChunkData* const chunk_data, - const WebPInfo* const webp_info) { - const uint8_t* data = chunk_data->payload_; - size_t data_size = chunk_data->size_ - CHUNK_HEADER_SIZE; - const uint32_t bits = (uint32_t)data[0] | (data[1] << 8) | (data[2] << 16); - const int key_frame = !(bits & 1); - const int profile = (bits >> 1) & 7; - const int display = (bits >> 4) & 1; - const uint32_t partition0_length = (bits >> 5); - WebPInfoStatus status = WEBP_INFO_OK; - uint64_t bit_position = 0; - uint64_t* const bit_pos = &bit_position; - int colorspace, clamp_type; - printf(" Parsing lossy bitstream...\n"); - // Calling WebPGetFeatures() in ProcessImageChunk() should ensure this. - assert(chunk_data->size_ >= CHUNK_HEADER_SIZE + 10); - if (profile > 3) { - LOG_ERROR("Unknown profile."); - return WEBP_INFO_BITSTREAM_ERROR; - } - if (!display) { - LOG_ERROR("Frame is not displayable."); - return WEBP_INFO_BITSTREAM_ERROR; - } - data += 3; - data_size -= 3; - printf(" Key frame: %s\n" - " Profile: %d\n" - " Display: %s\n" - " Part. 0 length: %d\n", - key_frame ? "Yes" : "No", profile, - display ? "Yes" : "No", partition0_length); - if (key_frame) { - if (!(data[0] == 0x9d && data[1] == 0x01 && data[2] == 0x2a)) { - LOG_ERROR("Invalid lossy bitstream signature."); - return WEBP_INFO_BITSTREAM_ERROR; - } - printf(" Width: %d\n" - " X scale: %d\n" - " Height: %d\n" - " Y scale: %d\n", - ((data[4] << 8) | data[3]) & 0x3fff, data[4] >> 6, - ((data[6] << 8) | data[5]) & 0x3fff, data[6] >> 6); - data += 7; - data_size -= 7; - } else { - LOG_ERROR("Non-keyframe detected in lossy bitstream."); - return WEBP_INFO_BITSTREAM_ERROR; - } - if (partition0_length >= data_size) { - LOG_ERROR("Bad partition length."); - return WEBP_INFO_BITSTREAM_ERROR; - } - GET_BITS(colorspace, 1); - GET_BITS(clamp_type, 1); - printf(" Color space: %d\n", colorspace); - printf(" Clamp type: %d\n", clamp_type); - status = ParseLossySegmentHeader(webp_info, data, data_size, bit_pos); - if (status != WEBP_INFO_OK) return status; - status = ParseLossyFilterHeader(webp_info, data, data_size, bit_pos); - if (status != WEBP_INFO_OK) return status; - { // Partition number and size. - const uint8_t* part_size = data + partition0_length; - int num_parts, i; - size_t part_data_size; - GET_BITS(num_parts, 2); - num_parts = 1 << num_parts; - if ((int)(data_size - partition0_length) < (num_parts - 1) * 3) { - LOG_ERROR("Truncated lossy bitstream."); - return WEBP_INFO_TRUNCATED_DATA; - } - part_data_size = data_size - partition0_length - (num_parts - 1) * 3; - printf(" Total partitions: %d\n", num_parts); - for (i = 1; i < num_parts; ++i) { - const size_t psize = - part_size[0] | (part_size[1] << 8) | (part_size[2] << 16); - if (psize > part_data_size) { - LOG_ERROR("Truncated partition."); - return WEBP_INFO_TRUNCATED_DATA; - } - printf(" Part. %d length: %d\n", i, (int)psize); - part_data_size -= psize; - part_size += 3; - } - } - // Quantizer. - { - int base_q, bit; - int dq_y1_dc = 0, dq_y2_dc = 0, dq_y2_ac = 0, dq_uv_dc = 0, dq_uv_ac = 0; - GET_BITS(base_q, 7); - GET_BITS(bit, 1); - if (bit) GET_SIGNED_BITS(dq_y1_dc, 4); - GET_BITS(bit, 1); - if (bit) GET_SIGNED_BITS(dq_y2_dc, 4); - GET_BITS(bit, 1); - if (bit) GET_SIGNED_BITS(dq_y2_ac, 4); - GET_BITS(bit, 1); - if (bit) GET_SIGNED_BITS(dq_uv_dc, 4); - GET_BITS(bit, 1); - if (bit) GET_SIGNED_BITS(dq_uv_ac, 4); - printf(" Base Q: %d\n", base_q); - printf(" DQ Y1 DC: %d\n", dq_y1_dc); - printf(" DQ Y2 DC: %d\n", dq_y2_dc); - printf(" DQ Y2 AC: %d\n", dq_y2_ac); - printf(" DQ UV DC: %d\n", dq_uv_dc); - printf(" DQ UV AC: %d\n", dq_uv_ac); - } - if ((*bit_pos >> 3) >= partition0_length) { - LOG_ERROR("Truncated lossy bitstream."); - return WEBP_INFO_TRUNCATED_DATA; - } - return WEBP_INFO_OK; -} - -// ----------------------------------------------------------------------------- -// Lossless bitstream analysis. - -static int LLGetBits(const uint8_t* const data, size_t data_size, size_t nb, - int* val, uint64_t* const bit_pos) { - uint32_t i = 0; - *val = 0; - while (i < nb) { - const uint64_t p = (*bit_pos)++; - if ((p >> 3) >= data_size) { - return 0; - } else { - const int bit = !!(data[p >> 3] & (1 << ((p & 7)))); - *val = *val | (bit << i); - ++i; - } - } - return 1; -} - -#define LL_GET_BITS(v, n) \ - do { \ - if (!LLGetBits(data, data_size, n, &(v), bit_pos)) { \ - LOG_ERROR("Truncated lossless bitstream."); \ - return WEBP_INFO_TRUNCATED_DATA; \ - } \ - } while (0) - -static WebPInfoStatus ParseLosslessTransform(WebPInfo* const webp_info, - const uint8_t* const data, - size_t data_size, - uint64_t* const bit_pos) { - int use_transform, block_size, n_colors; - LL_GET_BITS(use_transform, 1); - printf(" Use transform: %s\n", use_transform ? "Yes" : "No"); - if (use_transform) { - int type; - LL_GET_BITS(type, 2); - printf(" 1st transform: %s (%d)\n", kLosslessTransforms[type], type); - switch (type) { - case PREDICTOR_TRANSFORM: - case CROSS_COLOR_TRANSFORM: - LL_GET_BITS(block_size, 3); - block_size = 1 << (block_size + 2); - printf(" Tran. block size: %d\n", block_size); - break; - case COLOR_INDEXING_TRANSFORM: - LL_GET_BITS(n_colors, 8); - n_colors += 1; - printf(" No. of colors: %d\n", n_colors); - break; - default: break; - } - } - return WEBP_INFO_OK; -} - -static WebPInfoStatus ParseLosslessHeader(const ChunkData* const chunk_data, - WebPInfo* const webp_info) { - const uint8_t* data = chunk_data->payload_; - size_t data_size = chunk_data->size_ - CHUNK_HEADER_SIZE; - uint64_t bit_position = 0; - uint64_t* const bit_pos = &bit_position; - WebPInfoStatus status; - printf(" Parsing lossless bitstream...\n"); - if (data_size < VP8L_FRAME_HEADER_SIZE) { - LOG_ERROR("Truncated lossless bitstream."); - return WEBP_INFO_TRUNCATED_DATA; - } - if (data[0] != VP8L_MAGIC_BYTE) { - LOG_ERROR("Invalid lossless bitstream signature."); - return WEBP_INFO_BITSTREAM_ERROR; - } - data += 1; - data_size -= 1; - { - int width, height, has_alpha, version; - LL_GET_BITS(width, 14); - LL_GET_BITS(height, 14); - LL_GET_BITS(has_alpha, 1); - LL_GET_BITS(version, 3); - width += 1; - height += 1; - printf(" Width: %d\n", width); - printf(" Height: %d\n", height); - printf(" Alpha: %d\n", has_alpha); - printf(" Version: %d\n", version); - } - status = ParseLosslessTransform(webp_info, data, data_size, bit_pos); - if (status != WEBP_INFO_OK) return status; - return WEBP_INFO_OK; -} - -static WebPInfoStatus ParseAlphaHeader(const ChunkData* const chunk_data, - WebPInfo* const webp_info) { - const uint8_t* data = chunk_data->payload_; - size_t data_size = chunk_data->size_ - CHUNK_HEADER_SIZE; - if (data_size <= ALPHA_HEADER_LEN) { - LOG_ERROR("Truncated ALPH chunk."); - return WEBP_INFO_TRUNCATED_DATA; - } - printf(" Parsing ALPH chunk...\n"); - { - const int compression_method = (data[0] >> 0) & 0x03; - const int filter = (data[0] >> 2) & 0x03; - const int pre_processing = (data[0] >> 4) & 0x03; - const int reserved_bits = (data[0] >> 6) & 0x03; - printf(" Compression: %d\n", compression_method); - printf(" Filter: %s (%d)\n", - kAlphaFilterMethods[filter], filter); - printf(" Pre-processing: %d\n", pre_processing); - if (compression_method > ALPHA_LOSSLESS_COMPRESSION) { - LOG_ERROR("Invalid Alpha compression method."); - return WEBP_INFO_BITSTREAM_ERROR; - } - if (pre_processing > ALPHA_PREPROCESSED_LEVELS) { - LOG_ERROR("Invalid Alpha pre-processing method."); - return WEBP_INFO_BITSTREAM_ERROR; - } - if (reserved_bits != 0) { - LOG_WARN("Reserved bits in ALPH chunk header are not all 0."); - } - data += ALPHA_HEADER_LEN; - data_size -= ALPHA_HEADER_LEN; - if (compression_method == ALPHA_LOSSLESS_COMPRESSION) { - uint64_t bit_pos = 0; - WebPInfoStatus status = - ParseLosslessTransform(webp_info, data, data_size, &bit_pos); - if (status != WEBP_INFO_OK) return status; - } - } - return WEBP_INFO_OK; -} - -// ----------------------------------------------------------------------------- -// Chunk parsing. - -static WebPInfoStatus ParseRIFFHeader(const WebPInfo* const webp_info, - MemBuffer* const mem) { - const size_t min_size = RIFF_HEADER_SIZE + CHUNK_HEADER_SIZE; - size_t riff_size; - - if (MemDataSize(mem) < min_size) { - LOG_ERROR("Truncated data detected when parsing RIFF header."); - return WEBP_INFO_TRUNCATED_DATA; - } - if (memcmp(GetBuffer(mem), "RIFF", CHUNK_SIZE_BYTES) || - memcmp(GetBuffer(mem) + CHUNK_HEADER_SIZE, "WEBP", CHUNK_SIZE_BYTES)) { - LOG_ERROR("Corrupted RIFF header."); - return WEBP_INFO_PARSE_ERROR; - } - riff_size = GetLE32(GetBuffer(mem) + TAG_SIZE); - if (riff_size < CHUNK_HEADER_SIZE) { - LOG_ERROR("RIFF size is too small."); - return WEBP_INFO_PARSE_ERROR; - } - if (riff_size > MAX_CHUNK_PAYLOAD) { - LOG_ERROR("RIFF size is over limit."); - return WEBP_INFO_PARSE_ERROR; - } - riff_size += CHUNK_HEADER_SIZE; - if (!webp_info->quiet_) { - printf("RIFF HEADER:\n"); - printf(" File size: %6d\n", (int)riff_size); - } - if (riff_size < mem->end_) { - LOG_WARN("RIFF size is smaller than the file size."); - mem->end_ = riff_size; - } else if (riff_size > mem->end_) { - LOG_ERROR("Truncated data detected when parsing RIFF payload."); - return WEBP_INFO_TRUNCATED_DATA; - } - Skip(mem, RIFF_HEADER_SIZE); - return WEBP_INFO_OK; -} - -static WebPInfoStatus ParseChunk(const WebPInfo* const webp_info, - MemBuffer* const mem, - ChunkData* const chunk_data) { - memset(chunk_data, 0, sizeof(*chunk_data)); - if (MemDataSize(mem) < CHUNK_HEADER_SIZE) { - LOG_ERROR("Truncated data detected when parsing chunk header."); - return WEBP_INFO_TRUNCATED_DATA; - } else { - const size_t chunk_start_offset = mem->start_; - const uint32_t fourcc = ReadMemBufLE32(mem); - const uint32_t payload_size = ReadMemBufLE32(mem); - const uint32_t payload_size_padded = payload_size + (payload_size & 1); - const size_t chunk_size = CHUNK_HEADER_SIZE + payload_size_padded; - int i; - if (payload_size > MAX_CHUNK_PAYLOAD) { - LOG_ERROR("Size of chunk payload is over limit."); - return WEBP_INFO_INVALID_PARAM; - } - if (payload_size_padded > MemDataSize(mem)){ - LOG_ERROR("Truncated data detected when parsing chunk payload."); - return WEBP_INFO_TRUNCATED_DATA; - } - for (i = 0; i < CHUNK_TYPES; ++i) { - if (!memcmp(kWebPChunkTags[i], &fourcc, TAG_SIZE)) break; - } - chunk_data->offset_ = chunk_start_offset; - chunk_data->size_ = chunk_size; - chunk_data->id_ = (ChunkID)i; - chunk_data->payload_ = GetBuffer(mem); - if (chunk_data->id_ == CHUNK_ANMF) { - if (payload_size != payload_size_padded) { - LOG_ERROR("ANMF chunk size should always be even."); - return WEBP_INFO_PARSE_ERROR; - } - // There are sub-chunks to be parsed in an ANMF chunk. - Skip(mem, ANMF_CHUNK_SIZE); - } else { - Skip(mem, payload_size_padded); - } - return WEBP_INFO_OK; - } -} - -// ----------------------------------------------------------------------------- -// Chunk analysis. - -static WebPInfoStatus ProcessVP8XChunk(const ChunkData* const chunk_data, - WebPInfo* const webp_info) { - const uint8_t* data = chunk_data->payload_; - if (webp_info->chunk_counts_[CHUNK_VP8] || - webp_info->chunk_counts_[CHUNK_VP8L] || - webp_info->chunk_counts_[CHUNK_VP8X]) { - LOG_ERROR("Already seen a VP8/VP8L/VP8X chunk when parsing VP8X chunk."); - return WEBP_INFO_PARSE_ERROR; - } - if (chunk_data->size_ != VP8X_CHUNK_SIZE + CHUNK_HEADER_SIZE) { - LOG_ERROR("Corrupted VP8X chunk."); - return WEBP_INFO_PARSE_ERROR; - } - ++webp_info->chunk_counts_[CHUNK_VP8X]; - webp_info->feature_flags_ = *data; - data += 4; - webp_info->canvas_width_ = 1 + ReadLE24(&data); - webp_info->canvas_height_ = 1 + ReadLE24(&data); - if (!webp_info->quiet_) { - printf(" ICCP: %d\n Alpha: %d\n EXIF: %d\n XMP: %d\n Animation: %d\n", - (webp_info->feature_flags_ & ICCP_FLAG) != 0, - (webp_info->feature_flags_ & ALPHA_FLAG) != 0, - (webp_info->feature_flags_ & EXIF_FLAG) != 0, - (webp_info->feature_flags_ & XMP_FLAG) != 0, - (webp_info->feature_flags_ & ANIMATION_FLAG) != 0); - printf(" Canvas size %d x %d\n", - webp_info->canvas_width_, webp_info->canvas_height_); - } - if (webp_info->canvas_width_ > MAX_CANVAS_SIZE) { - LOG_WARN("Canvas width is out of range in VP8X chunk."); - } - if (webp_info->canvas_height_ > MAX_CANVAS_SIZE) { - LOG_WARN("Canvas height is out of range in VP8X chunk."); - } - if ((uint64_t)webp_info->canvas_width_ * webp_info->canvas_height_ > - MAX_IMAGE_AREA) { - LOG_WARN("Canvas area is out of range in VP8X chunk."); - } - return WEBP_INFO_OK; -} - -static WebPInfoStatus ProcessANIMChunk(const ChunkData* const chunk_data, - WebPInfo* const webp_info) { - const uint8_t* data = chunk_data->payload_; - if (!webp_info->chunk_counts_[CHUNK_VP8X]) { - LOG_ERROR("ANIM chunk detected before VP8X chunk."); - return WEBP_INFO_PARSE_ERROR; - } - if (chunk_data->size_ != ANIM_CHUNK_SIZE + CHUNK_HEADER_SIZE) { - LOG_ERROR("Corrupted ANIM chunk."); - return WEBP_INFO_PARSE_ERROR; - } - webp_info->bgcolor_ = ReadLE32(&data); - webp_info->loop_count_ = ReadLE16(&data); - ++webp_info->chunk_counts_[CHUNK_ANIM]; - if (!webp_info->quiet_) { - printf(" Background color:(ARGB) %02x %02x %02x %02x\n", - (webp_info->bgcolor_ >> 24) & 0xff, - (webp_info->bgcolor_ >> 16) & 0xff, - (webp_info->bgcolor_ >> 8) & 0xff, - webp_info->bgcolor_ & 0xff); - printf(" Loop count : %d\n", webp_info->loop_count_); - } - if (webp_info->loop_count_ > MAX_LOOP_COUNT) { - LOG_WARN("Loop count is out of range in ANIM chunk."); - } - return WEBP_INFO_OK; -} - -static WebPInfoStatus ProcessANMFChunk(const ChunkData* const chunk_data, - WebPInfo* const webp_info) { - const uint8_t* data = chunk_data->payload_; - int offset_x, offset_y, width, height, duration, blend, dispose, temp; - if (webp_info->is_processing_anim_frame_) { - LOG_ERROR("ANMF chunk detected within another ANMF chunk."); - return WEBP_INFO_PARSE_ERROR; - } - if (!webp_info->chunk_counts_[CHUNK_ANIM]) { - LOG_ERROR("ANMF chunk detected before ANIM chunk."); - return WEBP_INFO_PARSE_ERROR; - } - if (chunk_data->size_ <= CHUNK_HEADER_SIZE + ANMF_CHUNK_SIZE) { - LOG_ERROR("Truncated data detected when parsing ANMF chunk."); - return WEBP_INFO_TRUNCATED_DATA; - } - offset_x = 2 * ReadLE24(&data); - offset_y = 2 * ReadLE24(&data); - width = 1 + ReadLE24(&data); - height = 1 + ReadLE24(&data); - duration = ReadLE24(&data); - temp = *data; - dispose = temp & 1; - blend = (temp >> 1) & 1; - ++webp_info->chunk_counts_[CHUNK_ANMF]; - if (!webp_info->quiet_) { - printf(" Offset_X: %d\n Offset_Y: %d\n Width: %d\n Height: %d\n" - " Duration: %d\n Dispose: %d\n Blend: %d\n", - offset_x, offset_y, width, height, duration, dispose, blend); - } - if (duration > MAX_DURATION) { - LOG_ERROR("Invalid duration parameter in ANMF chunk."); - return WEBP_INFO_INVALID_PARAM; - } - if (offset_x > MAX_POSITION_OFFSET || offset_y > MAX_POSITION_OFFSET) { - LOG_ERROR("Invalid offset parameters in ANMF chunk."); - return WEBP_INFO_INVALID_PARAM; - } - if ((uint64_t)offset_x + width > (uint64_t)webp_info->canvas_width_ || - (uint64_t)offset_y + height > (uint64_t)webp_info->canvas_height_) { - LOG_ERROR("Frame exceeds canvas in ANMF chunk."); - return WEBP_INFO_INVALID_PARAM; - } - webp_info->is_processing_anim_frame_ = 1; - webp_info->seen_alpha_subchunk_ = 0; - webp_info->seen_image_subchunk_ = 0; - webp_info->frame_width_ = width; - webp_info->frame_height_ = height; - webp_info->anim_frame_data_size_ = - chunk_data->size_ - CHUNK_HEADER_SIZE - ANMF_CHUNK_SIZE; - return WEBP_INFO_OK; -} - -static WebPInfoStatus ProcessImageChunk(const ChunkData* const chunk_data, - WebPInfo* const webp_info) { - const uint8_t* data = chunk_data->payload_ - CHUNK_HEADER_SIZE; - WebPBitstreamFeatures features; - const VP8StatusCode vp8_status = - WebPGetFeatures(data, chunk_data->size_, &features); - if (vp8_status != VP8_STATUS_OK) { - LOG_ERROR("VP8/VP8L bitstream error."); - return WEBP_INFO_BITSTREAM_ERROR; - } - if (!webp_info->quiet_) { - assert(features.format >= 0 && features.format <= 2); - printf(" Width: %d\n Height: %d\n Alpha: %d\n Animation: %d\n" - " Format: %s (%d)\n", - features.width, features.height, features.has_alpha, - features.has_animation, kFormats[features.format], features.format); - } - if (webp_info->is_processing_anim_frame_) { - ++webp_info->anmf_subchunk_counts_[chunk_data->id_ == CHUNK_VP8 ? 0 : 1]; - if (chunk_data->id_ == CHUNK_VP8L && webp_info->seen_alpha_subchunk_) { - LOG_ERROR("Both VP8L and ALPH sub-chunks are present in an ANMF chunk."); - return WEBP_INFO_PARSE_ERROR; - } - if (webp_info->frame_width_ != features.width || - webp_info->frame_height_ != features.height) { - LOG_ERROR("Frame size in VP8/VP8L sub-chunk differs from ANMF header."); - return WEBP_INFO_PARSE_ERROR; - } - if (webp_info->seen_image_subchunk_) { - LOG_ERROR("Consecutive VP8/VP8L sub-chunks in an ANMF chunk."); - return WEBP_INFO_PARSE_ERROR; - } - webp_info->seen_image_subchunk_ = 1; - } else { - if (webp_info->chunk_counts_[CHUNK_VP8] || - webp_info->chunk_counts_[CHUNK_VP8L]) { - LOG_ERROR("Multiple VP8/VP8L chunks detected."); - return WEBP_INFO_PARSE_ERROR; - } - if (chunk_data->id_ == CHUNK_VP8L && - webp_info->chunk_counts_[CHUNK_ALPHA]) { - LOG_WARN("Both VP8L and ALPH chunks are detected."); - } - if (webp_info->chunk_counts_[CHUNK_ANIM] || - webp_info->chunk_counts_[CHUNK_ANMF]) { - LOG_ERROR("VP8/VP8L chunk and ANIM/ANMF chunk are both detected."); - return WEBP_INFO_PARSE_ERROR; - } - if (webp_info->chunk_counts_[CHUNK_VP8X]) { - if (webp_info->canvas_width_ != features.width || - webp_info->canvas_height_ != features.height) { - LOG_ERROR("Image size in VP8/VP8L chunk differs from VP8X chunk."); - return WEBP_INFO_PARSE_ERROR; - } - } else { - webp_info->canvas_width_ = features.width; - webp_info->canvas_height_ = features.height; - if (webp_info->canvas_width_ < 1 || webp_info->canvas_height_ < 1 || - webp_info->canvas_width_ > MAX_CANVAS_SIZE || - webp_info->canvas_height_ > MAX_CANVAS_SIZE || - (uint64_t)webp_info->canvas_width_ * webp_info->canvas_height_ > - MAX_IMAGE_AREA) { - LOG_WARN("Invalid parameters in VP8/VP8L chunk."); - } - } - ++webp_info->chunk_counts_[chunk_data->id_]; - } - ++webp_info->num_frames_; - webp_info->has_alpha_ |= features.has_alpha; - if (webp_info->parse_bitstream_) { - const int is_lossy = (chunk_data->id_ == CHUNK_VP8); - const WebPInfoStatus status = - is_lossy ? ParseLossyHeader(chunk_data, webp_info) - : ParseLosslessHeader(chunk_data, webp_info); - if (status != WEBP_INFO_OK) return status; - } - return WEBP_INFO_OK; -} - -static WebPInfoStatus ProcessALPHChunk(const ChunkData* const chunk_data, - WebPInfo* const webp_info) { - if (webp_info->is_processing_anim_frame_) { - ++webp_info->anmf_subchunk_counts_[2]; - if (webp_info->seen_alpha_subchunk_) { - LOG_ERROR("Consecutive ALPH sub-chunks in an ANMF chunk."); - return WEBP_INFO_PARSE_ERROR; - } - webp_info->seen_alpha_subchunk_ = 1; - - if (webp_info->seen_image_subchunk_) { - LOG_ERROR("ALPHA sub-chunk detected after VP8 sub-chunk " - "in an ANMF chunk."); - return WEBP_INFO_PARSE_ERROR; - } - } else { - if (webp_info->chunk_counts_[CHUNK_ANIM] || - webp_info->chunk_counts_[CHUNK_ANMF]) { - LOG_ERROR("ALPHA chunk and ANIM/ANMF chunk are both detected."); - return WEBP_INFO_PARSE_ERROR; - } - if (!webp_info->chunk_counts_[CHUNK_VP8X]) { - LOG_ERROR("ALPHA chunk detected before VP8X chunk."); - return WEBP_INFO_PARSE_ERROR; - } - if (webp_info->chunk_counts_[CHUNK_VP8]) { - LOG_ERROR("ALPHA chunk detected after VP8 chunk."); - return WEBP_INFO_PARSE_ERROR; - } - if (webp_info->chunk_counts_[CHUNK_ALPHA]) { - LOG_ERROR("Multiple ALPHA chunks detected."); - return WEBP_INFO_PARSE_ERROR; - } - ++webp_info->chunk_counts_[CHUNK_ALPHA]; - } - webp_info->has_alpha_ = 1; - if (webp_info->parse_bitstream_) { - const WebPInfoStatus status = ParseAlphaHeader(chunk_data, webp_info); - if (status != WEBP_INFO_OK) return status; - } - return WEBP_INFO_OK; -} - -static WebPInfoStatus ProcessICCPChunk(const ChunkData* const chunk_data, - WebPInfo* const webp_info) { - (void)chunk_data; - if (!webp_info->chunk_counts_[CHUNK_VP8X]) { - LOG_ERROR("ICCP chunk detected before VP8X chunk."); - return WEBP_INFO_PARSE_ERROR; - } - if (webp_info->chunk_counts_[CHUNK_VP8] || - webp_info->chunk_counts_[CHUNK_VP8L] || - webp_info->chunk_counts_[CHUNK_ANIM]) { - LOG_ERROR("ICCP chunk detected after image data."); - return WEBP_INFO_PARSE_ERROR; - } - ++webp_info->chunk_counts_[CHUNK_ICCP]; - return WEBP_INFO_OK; -} - -static WebPInfoStatus ProcessChunk(const ChunkData* const chunk_data, - WebPInfo* const webp_info) { - WebPInfoStatus status = WEBP_INFO_OK; - ChunkID id = chunk_data->id_; - if (chunk_data->id_ == CHUNK_UNKNOWN) { - char error_message[50]; - snprintf(error_message, 50, "Unknown chunk at offset %6d, length %6d", - (int)chunk_data->offset_, (int)chunk_data->size_); - LOG_WARN(error_message); - } else { - if (!webp_info->quiet_) { - const char* tag = kWebPChunkTags[chunk_data->id_]; - printf("Chunk %c%c%c%c at offset %6d, length %6d\n", - tag[0], tag[1], tag[2], tag[3], (int)chunk_data->offset_, - (int)chunk_data->size_); - } - } - switch (id) { - case CHUNK_VP8: - case CHUNK_VP8L: - status = ProcessImageChunk(chunk_data, webp_info); - break; - case CHUNK_VP8X: - status = ProcessVP8XChunk(chunk_data, webp_info); - break; - case CHUNK_ALPHA: - status = ProcessALPHChunk(chunk_data, webp_info); - break; - case CHUNK_ANIM: - status = ProcessANIMChunk(chunk_data, webp_info); - break; - case CHUNK_ANMF: - status = ProcessANMFChunk(chunk_data, webp_info); - break; - case CHUNK_ICCP: - status = ProcessICCPChunk(chunk_data, webp_info); - break; - case CHUNK_EXIF: - case CHUNK_XMP: - ++webp_info->chunk_counts_[id]; - break; - case CHUNK_UNKNOWN: - default: - break; - } - if (webp_info->is_processing_anim_frame_ && id != CHUNK_ANMF) { - if (webp_info->anim_frame_data_size_ == chunk_data->size_) { - if (!webp_info->seen_image_subchunk_) { - LOG_ERROR("No VP8/VP8L chunk detected in an ANMF chunk."); - return WEBP_INFO_PARSE_ERROR; - } - webp_info->is_processing_anim_frame_ = 0; - } else if (webp_info->anim_frame_data_size_ > chunk_data->size_) { - webp_info->anim_frame_data_size_ -= chunk_data->size_; - } else { - LOG_ERROR("Truncated data detected when parsing ANMF chunk."); - return WEBP_INFO_TRUNCATED_DATA; - } - } - return status; -} - -static WebPInfoStatus Validate(const WebPInfo* const webp_info) { - if (webp_info->num_frames_ < 1) { - LOG_ERROR("No image/frame detected."); - return WEBP_INFO_MISSING_DATA; - } - if (webp_info->chunk_counts_[CHUNK_VP8X]) { - const int iccp = !!(webp_info->feature_flags_ & ICCP_FLAG); - const int exif = !!(webp_info->feature_flags_ & EXIF_FLAG); - const int xmp = !!(webp_info->feature_flags_ & XMP_FLAG); - const int animation = !!(webp_info->feature_flags_ & ANIMATION_FLAG); - const int alpha = !!(webp_info->feature_flags_ & ALPHA_FLAG); - if (!alpha && webp_info->has_alpha_) { - LOG_ERROR("Unexpected alpha data detected."); - return WEBP_INFO_PARSE_ERROR; - } - if (alpha && !webp_info->has_alpha_) { - LOG_WARN("Alpha flag is set with no alpha data present."); - } - if (iccp && !webp_info->chunk_counts_[CHUNK_ICCP]) { - LOG_ERROR("Missing ICCP chunk."); - return WEBP_INFO_MISSING_DATA; - } - if (exif && !webp_info->chunk_counts_[CHUNK_EXIF]) { - LOG_ERROR("Missing EXIF chunk."); - return WEBP_INFO_MISSING_DATA; - } - if (xmp && !webp_info->chunk_counts_[CHUNK_XMP]) { - LOG_ERROR("Missing XMP chunk."); - return WEBP_INFO_MISSING_DATA; - } - if (!iccp && webp_info->chunk_counts_[CHUNK_ICCP]) { - LOG_ERROR("Unexpected ICCP chunk detected."); - return WEBP_INFO_PARSE_ERROR; - } - if (!exif && webp_info->chunk_counts_[CHUNK_EXIF]) { - LOG_ERROR("Unexpected EXIF chunk detected."); - return WEBP_INFO_PARSE_ERROR; - } - if (!xmp && webp_info->chunk_counts_[CHUNK_XMP]) { - LOG_ERROR("Unexpected XMP chunk detected."); - return WEBP_INFO_PARSE_ERROR; - } - // Incomplete animation frame. - if (webp_info->is_processing_anim_frame_) return WEBP_INFO_MISSING_DATA; - if (!animation && webp_info->num_frames_ > 1) { - LOG_ERROR("More than 1 frame detected in non-animation file."); - return WEBP_INFO_PARSE_ERROR; - } - if (animation && (!webp_info->chunk_counts_[CHUNK_ANIM] || - !webp_info->chunk_counts_[CHUNK_ANMF])) { - LOG_ERROR("No ANIM/ANMF chunk detected in animation file."); - return WEBP_INFO_PARSE_ERROR; - } - } - return WEBP_INFO_OK; -} - -static void ShowSummary(const WebPInfo* const webp_info) { - int i; - printf("Summary:\n"); - printf("Number of frames: %d\n", webp_info->num_frames_); - printf("Chunk type : VP8 VP8L VP8X ALPH ANIM ANMF(VP8 /VP8L/ALPH) ICCP " - "EXIF XMP\n"); - printf("Chunk counts: "); - for (i = 0; i < CHUNK_TYPES; ++i) { - printf("%4d ", webp_info->chunk_counts_[i]); - if (i == CHUNK_ANMF) { - printf("%4d %4d %4d ", - webp_info->anmf_subchunk_counts_[0], - webp_info->anmf_subchunk_counts_[1], - webp_info->anmf_subchunk_counts_[2]); - } - } - printf("\n"); -} - -static WebPInfoStatus AnalyzeWebP(WebPInfo* const webp_info, - const WebPData* webp_data) { - ChunkData chunk_data; - MemBuffer mem_buffer; - WebPInfoStatus webp_info_status = WEBP_INFO_OK; - - InitMemBuffer(&mem_buffer, webp_data); - webp_info_status = ParseRIFFHeader(webp_info, &mem_buffer); - if (webp_info_status != WEBP_INFO_OK) goto Error; - - // Loop through all the chunks. Terminate immediately in case of error. - while (webp_info_status == WEBP_INFO_OK && MemDataSize(&mem_buffer) > 0) { - webp_info_status = ParseChunk(webp_info, &mem_buffer, &chunk_data); - if (webp_info_status != WEBP_INFO_OK) goto Error; - webp_info_status = ProcessChunk(&chunk_data, webp_info); - } - if (webp_info_status != WEBP_INFO_OK) goto Error; - if (webp_info->show_summary_) ShowSummary(webp_info); - - // Final check. - webp_info_status = Validate(webp_info); - - Error: - if (!webp_info->quiet_) { - if (webp_info_status == WEBP_INFO_OK) { - printf("No error detected.\n"); - } else { - printf("Errors detected.\n"); - } - } - return webp_info_status; -} - -static void HelpShort(void) { - printf("Usage: webpinfo [options] in_files\n" - "Try -longhelp for an exhaustive list of options.\n"); -} - -static void HelpLong(void) { - printf("Usage: webpinfo [options] in_files\n" - "Note: there could be multiple input files;\n" - " options must come before input files.\n" - "Options:\n" - " -version ........... Print version number and exit.\n" - " -quiet ............. Do not show chunk parsing information.\n" - " -diag .............. Show parsing error diagnosis.\n" - " -summary ........... Show chunk stats summary.\n" - " -bitstream_info .... Parse bitstream header.\n"); -} - -int main(int argc, const char* argv[]) { - int c, quiet = 0, show_diag = 0, show_summary = 0; - int parse_bitstream = 0; - WebPInfoStatus webp_info_status = WEBP_INFO_OK; - WebPInfo webp_info; - - INIT_WARGV(argc, argv); - - if (argc == 1) { - HelpShort(); - FREE_WARGV_AND_RETURN(WEBP_INFO_OK); - } - - // Parse command-line input. - for (c = 1; c < argc; ++c) { - if (!strcmp(argv[c], "-h") || !strcmp(argv[c], "-help")) { - HelpShort(); - FREE_WARGV_AND_RETURN(WEBP_INFO_OK); - } else if (!strcmp(argv[c], "-H") || !strcmp(argv[c], "-longhelp")) { - HelpLong(); - FREE_WARGV_AND_RETURN(WEBP_INFO_OK); - } else if (!strcmp(argv[c], "-quiet")) { - quiet = 1; - } else if (!strcmp(argv[c], "-diag")) { - show_diag = 1; - } else if (!strcmp(argv[c], "-summary")) { - show_summary = 1; - } else if (!strcmp(argv[c], "-bitstream_info")) { - parse_bitstream = 1; - } else if (!strcmp(argv[c], "-version")) { - const int version = WebPGetDecoderVersion(); - printf("WebP Decoder version: %d.%d.%d\n", - (version >> 16) & 0xff, (version >> 8) & 0xff, version & 0xff); - FREE_WARGV_AND_RETURN(0); - } else { // Assume the remaining are all input files. - break; - } - } - - if (c == argc) { - HelpShort(); - FREE_WARGV_AND_RETURN(WEBP_INFO_INVALID_COMMAND); - } - - // Process input files one by one. - for (; c < argc; ++c) { - WebPData webp_data; - const W_CHAR* in_file = NULL; - WebPInfoInit(&webp_info); - webp_info.quiet_ = quiet; - webp_info.show_diagnosis_ = show_diag; - webp_info.show_summary_ = show_summary; - webp_info.parse_bitstream_ = parse_bitstream; - in_file = GET_WARGV(argv, c); - if (in_file == NULL || - !ReadFileToWebPData((const char*)in_file, &webp_data)) { - webp_info_status = WEBP_INFO_INVALID_COMMAND; - WFPRINTF(stderr, "Failed to open input file %s.\n", in_file); - continue; - } - if (!webp_info.quiet_) WPRINTF("File: %s\n", in_file); - webp_info_status = AnalyzeWebP(&webp_info, &webp_data); - WebPDataClear(&webp_data); - } - FREE_WARGV_AND_RETURN(webp_info_status); -} diff --git a/Extended/libwebp/examples/webpmux.c b/Extended/libwebp/examples/webpmux.c deleted file mode 100644 index 49eff51..0000000 --- a/Extended/libwebp/examples/webpmux.c +++ /dev/null @@ -1,1165 +0,0 @@ -// Copyright 2011 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Simple command-line to create a WebP container file and to extract or strip -// relevant data from the container file. -// -// Authors: Vikas (vikaas.arora@gmail.com), -// Urvang (urvang@google.com) - -/* Usage examples: - - Create container WebP file: - webpmux -frame anim_1.webp +100+10+10 \ - -frame anim_2.webp +100+25+25+1 \ - -frame anim_3.webp +100+50+50+1 \ - -frame anim_4.webp +100 \ - -loop 10 -bgcolor 128,255,255,255 \ - -o out_animation_container.webp - - webpmux -set icc image_profile.icc in.webp -o out_icc_container.webp - webpmux -set exif image_metadata.exif in.webp -o out_exif_container.webp - webpmux -set xmp image_metadata.xmp in.webp -o out_xmp_container.webp - - Extract relevant data from WebP container file: - webpmux -get frame n in.webp -o out_frame.webp - webpmux -get icc in.webp -o image_profile.icc - webpmux -get exif in.webp -o image_metadata.exif - webpmux -get xmp in.webp -o image_metadata.xmp - - Strip data from WebP Container file: - webpmux -strip icc in.webp -o out.webp - webpmux -strip exif in.webp -o out.webp - webpmux -strip xmp in.webp -o out.webp - - Change duration of frame intervals: - webpmux -duration 150 in.webp -o out.webp - webpmux -duration 33,2 in.webp -o out.webp - webpmux -duration 200,10,0 -duration 150,6,50 in.webp -o out.webp - - Misc: - webpmux -info in.webp - webpmux [ -h | -help ] - webpmux -version - webpmux argument_file_name -*/ - -#ifdef HAVE_CONFIG_H -#include "webp/config.h" -#endif - -#include -#include -#include -#include -#include "webp/decode.h" -#include "webp/mux.h" -#include "../examples/example_util.h" -#include "../imageio/imageio_util.h" -#include "./unicode.h" - -//------------------------------------------------------------------------------ -// Config object to parse command-line arguments. - -typedef enum { - NIL_ACTION = 0, - ACTION_GET, - ACTION_SET, - ACTION_STRIP, - ACTION_INFO, - ACTION_HELP, - ACTION_DURATION -} ActionType; - -typedef enum { - NIL_SUBTYPE = 0, - SUBTYPE_ANMF, - SUBTYPE_LOOP, - SUBTYPE_BGCOLOR -} FeatureSubType; - -typedef struct { - FeatureSubType subtype_; - const char* filename_; - const char* params_; -} FeatureArg; - -typedef enum { - NIL_FEATURE = 0, - FEATURE_EXIF, - FEATURE_XMP, - FEATURE_ICCP, - FEATURE_ANMF, - FEATURE_DURATION, - LAST_FEATURE -} FeatureType; - -static const char* const kFourccList[LAST_FEATURE] = { - NULL, "EXIF", "XMP ", "ICCP", "ANMF" -}; - -static const char* const kDescriptions[LAST_FEATURE] = { - NULL, "EXIF metadata", "XMP metadata", "ICC profile", - "Animation frame" -}; - -typedef struct { - CommandLineArguments cmd_args_; - - ActionType action_type_; - const char* input_; - const char* output_; - FeatureType type_; - FeatureArg* args_; - int arg_count_; -} Config; - -//------------------------------------------------------------------------------ -// Helper functions. - -static int CountOccurrences(const CommandLineArguments* const args, - const char* const arg) { - int i; - int num_occurences = 0; - - for (i = 0; i < args->argc_; ++i) { - if (!strcmp(args->argv_[i], arg)) { - ++num_occurences; - } - } - return num_occurences; -} - -static const char* const kErrorMessages[-WEBP_MUX_NOT_ENOUGH_DATA + 1] = { - "WEBP_MUX_NOT_FOUND", "WEBP_MUX_INVALID_ARGUMENT", "WEBP_MUX_BAD_DATA", - "WEBP_MUX_MEMORY_ERROR", "WEBP_MUX_NOT_ENOUGH_DATA" -}; - -static const char* ErrorString(WebPMuxError err) { - assert(err <= WEBP_MUX_NOT_FOUND && err >= WEBP_MUX_NOT_ENOUGH_DATA); - return kErrorMessages[-err]; -} - -#define RETURN_IF_ERROR(ERR_MSG) \ - if (err != WEBP_MUX_OK) { \ - fprintf(stderr, ERR_MSG); \ - return err; \ - } - -#define RETURN_IF_ERROR3(ERR_MSG, FORMAT_STR1, FORMAT_STR2) \ - if (err != WEBP_MUX_OK) { \ - fprintf(stderr, ERR_MSG, FORMAT_STR1, FORMAT_STR2); \ - return err; \ - } - -#define ERROR_GOTO1(ERR_MSG, LABEL) \ - do { \ - fprintf(stderr, ERR_MSG); \ - ok = 0; \ - goto LABEL; \ - } while (0) - -#define ERROR_GOTO2(ERR_MSG, FORMAT_STR, LABEL) \ - do { \ - fprintf(stderr, ERR_MSG, FORMAT_STR); \ - ok = 0; \ - goto LABEL; \ - } while (0) - -#define ERROR_GOTO3(ERR_MSG, FORMAT_STR1, FORMAT_STR2, LABEL) \ - do { \ - fprintf(stderr, ERR_MSG, FORMAT_STR1, FORMAT_STR2); \ - ok = 0; \ - goto LABEL; \ - } while (0) - -static WebPMuxError DisplayInfo(const WebPMux* mux) { - int width, height; - uint32_t flag; - - WebPMuxError err = WebPMuxGetCanvasSize(mux, &width, &height); - assert(err == WEBP_MUX_OK); // As WebPMuxCreate() was successful earlier. - printf("Canvas size: %d x %d\n", width, height); - - err = WebPMuxGetFeatures(mux, &flag); - RETURN_IF_ERROR("Failed to retrieve features\n"); - - if (flag == 0) { - printf("No features present.\n"); - return err; - } - - // Print the features present. - printf("Features present:"); - if (flag & ANIMATION_FLAG) printf(" animation"); - if (flag & ICCP_FLAG) printf(" ICC profile"); - if (flag & EXIF_FLAG) printf(" EXIF metadata"); - if (flag & XMP_FLAG) printf(" XMP metadata"); - if (flag & ALPHA_FLAG) printf(" transparency"); - printf("\n"); - - if (flag & ANIMATION_FLAG) { - const WebPChunkId id = WEBP_CHUNK_ANMF; - const char* const type_str = "frame"; - int nFrames; - - WebPMuxAnimParams params; - err = WebPMuxGetAnimationParams(mux, ¶ms); - assert(err == WEBP_MUX_OK); - printf("Background color : 0x%.8X Loop Count : %d\n", - params.bgcolor, params.loop_count); - - err = WebPMuxNumChunks(mux, id, &nFrames); - assert(err == WEBP_MUX_OK); - - printf("Number of %ss: %d\n", type_str, nFrames); - if (nFrames > 0) { - int i; - printf("No.: width height alpha x_offset y_offset "); - printf("duration dispose blend "); - printf("image_size compression\n"); - for (i = 1; i <= nFrames; i++) { - WebPMuxFrameInfo frame; - err = WebPMuxGetFrame(mux, i, &frame); - if (err == WEBP_MUX_OK) { - WebPBitstreamFeatures features; - const VP8StatusCode status = WebPGetFeatures( - frame.bitstream.bytes, frame.bitstream.size, &features); - assert(status == VP8_STATUS_OK); // Checked by WebPMuxCreate(). - (void)status; - printf("%3d: %5d %5d %5s %8d %8d ", i, features.width, - features.height, features.has_alpha ? "yes" : "no", - frame.x_offset, frame.y_offset); - { - const char* const dispose = - (frame.dispose_method == WEBP_MUX_DISPOSE_NONE) ? "none" - : "background"; - const char* const blend = - (frame.blend_method == WEBP_MUX_BLEND) ? "yes" : "no"; - printf("%8d %10s %5s ", frame.duration, dispose, blend); - } - printf("%10d %11s\n", (int)frame.bitstream.size, - (features.format == 1) ? "lossy" : - (features.format == 2) ? "lossless" : - "undefined"); - } - WebPDataClear(&frame.bitstream); - RETURN_IF_ERROR3("Failed to retrieve %s#%d\n", type_str, i); - } - } - } - - if (flag & ICCP_FLAG) { - WebPData icc_profile; - err = WebPMuxGetChunk(mux, "ICCP", &icc_profile); - assert(err == WEBP_MUX_OK); - printf("Size of the ICC profile data: %d\n", (int)icc_profile.size); - } - - if (flag & EXIF_FLAG) { - WebPData exif; - err = WebPMuxGetChunk(mux, "EXIF", &exif); - assert(err == WEBP_MUX_OK); - printf("Size of the EXIF metadata: %d\n", (int)exif.size); - } - - if (flag & XMP_FLAG) { - WebPData xmp; - err = WebPMuxGetChunk(mux, "XMP ", &xmp); - assert(err == WEBP_MUX_OK); - printf("Size of the XMP metadata: %d\n", (int)xmp.size); - } - - if ((flag & ALPHA_FLAG) && !(flag & ANIMATION_FLAG)) { - WebPMuxFrameInfo image; - err = WebPMuxGetFrame(mux, 1, &image); - if (err == WEBP_MUX_OK) { - printf("Size of the image (with alpha): %d\n", (int)image.bitstream.size); - } - WebPDataClear(&image.bitstream); - RETURN_IF_ERROR("Failed to retrieve the image\n"); - } - - return WEBP_MUX_OK; -} - -static void PrintHelp(void) { - printf("Usage: webpmux -get GET_OPTIONS INPUT -o OUTPUT\n"); - printf(" webpmux -set SET_OPTIONS INPUT -o OUTPUT\n"); - printf(" webpmux -duration DURATION_OPTIONS [-duration ...]\n"); - printf(" INPUT -o OUTPUT\n"); - printf(" webpmux -strip STRIP_OPTIONS INPUT -o OUTPUT\n"); - printf(" webpmux -frame FRAME_OPTIONS [-frame...] [-loop LOOP_COUNT]" - "\n"); - printf(" [-bgcolor BACKGROUND_COLOR] -o OUTPUT\n"); - printf(" webpmux -info INPUT\n"); - printf(" webpmux [-h|-help]\n"); - printf(" webpmux -version\n"); - printf(" webpmux argument_file_name\n"); - - printf("\n"); - printf("GET_OPTIONS:\n"); - printf(" Extract relevant data:\n"); - printf(" icc get ICC profile\n"); - printf(" exif get EXIF metadata\n"); - printf(" xmp get XMP metadata\n"); - printf(" frame n get nth frame\n"); - - printf("\n"); - printf("SET_OPTIONS:\n"); - printf(" Set color profile/metadata:\n"); - printf(" icc file.icc set ICC profile\n"); - printf(" exif file.exif set EXIF metadata\n"); - printf(" xmp file.xmp set XMP metadata\n"); - printf(" where: 'file.icc' contains the ICC profile to be set,\n"); - printf(" 'file.exif' contains the EXIF metadata to be set\n"); - printf(" 'file.xmp' contains the XMP metadata to be set\n"); - - printf("\n"); - printf("DURATION_OPTIONS:\n"); - printf(" Set duration of selected frames:\n"); - printf(" duration set duration for each frames\n"); - printf(" duration,frame set duration of a particular frame\n"); - printf(" duration,start,end set duration of frames in the\n"); - printf(" interval [start,end])\n"); - printf(" where: 'duration' is the duration in milliseconds\n"); - printf(" 'start' is the start frame index\n"); - printf(" 'end' is the inclusive end frame index\n"); - printf(" The special 'end' value '0' means: last frame.\n"); - - printf("\n"); - printf("STRIP_OPTIONS:\n"); - printf(" Strip color profile/metadata:\n"); - printf(" icc strip ICC profile\n"); - printf(" exif strip EXIF metadata\n"); - printf(" xmp strip XMP metadata\n"); - - printf("\n"); - printf("FRAME_OPTIONS(i):\n"); - printf(" Create animation:\n"); - printf(" file_i +di+[xi+yi[+mi[bi]]]\n"); - printf(" where: 'file_i' is the i'th animation frame (WebP format),\n"); - printf(" 'di' is the pause duration before next frame,\n"); - printf(" 'xi','yi' specify the image offset for this frame,\n"); - printf(" 'mi' is the dispose method for this frame (0 or 1),\n"); - printf(" 'bi' is the blending method for this frame (+b or -b)" - "\n"); - - printf("\n"); - printf("LOOP_COUNT:\n"); - printf(" Number of times to repeat the animation.\n"); - printf(" Valid range is 0 to 65535 [Default: 0 (infinite)].\n"); - - printf("\n"); - printf("BACKGROUND_COLOR:\n"); - printf(" Background color of the canvas.\n"); - printf(" A,R,G,B\n"); - printf(" where: 'A', 'R', 'G' and 'B' are integers in the range 0 to 255 " - "specifying\n"); - printf(" the Alpha, Red, Green and Blue component values " - "respectively\n"); - printf(" [Default: 255,255,255,255]\n"); - - printf("\nINPUT & OUTPUT are in WebP format.\n"); - - printf("\nNote: The nature of EXIF, XMP and ICC data is not checked"); - printf(" and is assumed to be\nvalid.\n"); - printf("\nNote: if a single file name is passed as the argument, the " - "arguments will be\n"); - printf("tokenized from this file. The file name must not start with " - "the character '-'.\n"); -} - -static void WarnAboutOddOffset(const WebPMuxFrameInfo* const info) { - if ((info->x_offset | info->y_offset) & 1) { - fprintf(stderr, "Warning: odd offsets will be snapped to even values" - " (%d, %d) -> (%d, %d)\n", info->x_offset, info->y_offset, - info->x_offset & ~1, info->y_offset & ~1); - } -} - -static int CreateMux(const char* const filename, WebPMux** mux) { - WebPData bitstream; - assert(mux != NULL); - if (!ExUtilReadFileToWebPData(filename, &bitstream)) return 0; - *mux = WebPMuxCreate(&bitstream, 1); - WebPDataClear(&bitstream); - if (*mux != NULL) return 1; - WFPRINTF(stderr, "Failed to create mux object from file %s.\n", - (const W_CHAR*)filename); - return 0; -} - -static int WriteData(const char* filename, const WebPData* const webpdata) { - int ok = 0; - FILE* fout = WSTRCMP(filename, "-") ? WFOPEN(filename, "wb") - : ImgIoUtilSetBinaryMode(stdout); - if (fout == NULL) { - WFPRINTF(stderr, "Error opening output WebP file %s!\n", - (const W_CHAR*)filename); - return 0; - } - if (fwrite(webpdata->bytes, webpdata->size, 1, fout) != 1) { - WFPRINTF(stderr, "Error writing file %s!\n", (const W_CHAR*)filename); - } else { - WFPRINTF(stderr, "Saved file %s (%d bytes)\n", - (const W_CHAR*)filename, (int)webpdata->size); - ok = 1; - } - if (fout != stdout) fclose(fout); - return ok; -} - -static int WriteWebP(WebPMux* const mux, const char* filename) { - int ok; - WebPData webp_data; - const WebPMuxError err = WebPMuxAssemble(mux, &webp_data); - if (err != WEBP_MUX_OK) { - fprintf(stderr, "Error (%s) assembling the WebP file.\n", ErrorString(err)); - return 0; - } - ok = WriteData(filename, &webp_data); - WebPDataClear(&webp_data); - return ok; -} - -static WebPMux* DuplicateMuxHeader(const WebPMux* const mux) { - WebPMux* new_mux = WebPMuxNew(); - WebPMuxAnimParams p; - WebPMuxError err; - int i; - int ok = 1; - - if (new_mux == NULL) return NULL; - - err = WebPMuxGetAnimationParams(mux, &p); - if (err == WEBP_MUX_OK) { - err = WebPMuxSetAnimationParams(new_mux, &p); - if (err != WEBP_MUX_OK) { - ERROR_GOTO2("Error (%s) handling animation params.\n", - ErrorString(err), End); - } - } else { - /* it might not be an animation. Just keep moving. */ - } - - for (i = 1; i <= 3; ++i) { - WebPData metadata; - err = WebPMuxGetChunk(mux, kFourccList[i], &metadata); - if (err == WEBP_MUX_OK && metadata.size > 0) { - err = WebPMuxSetChunk(new_mux, kFourccList[i], &metadata, 1); - if (err != WEBP_MUX_OK) { - ERROR_GOTO1("Error transferring metadata in DuplicateMux().", End); - } - } - } - - End: - if (!ok) { - WebPMuxDelete(new_mux); - new_mux = NULL; - } - return new_mux; -} - -static int ParseFrameArgs(const char* args, WebPMuxFrameInfo* const info) { - int dispose_method, dummy; - char plus_minus, blend_method; - const int num_args = sscanf(args, "+%d+%d+%d+%d%c%c+%d", &info->duration, - &info->x_offset, &info->y_offset, &dispose_method, - &plus_minus, &blend_method, &dummy); - switch (num_args) { - case 1: - info->x_offset = info->y_offset = 0; // fall through - case 3: - dispose_method = 0; // fall through - case 4: - plus_minus = '+'; - blend_method = 'b'; // fall through - case 6: - break; - case 2: - case 5: - default: - return 0; - } - - WarnAboutOddOffset(info); - - // Note: The sanity of the following conversion is checked by - // WebPMuxPushFrame(). - info->dispose_method = (WebPMuxAnimDispose)dispose_method; - - if (blend_method != 'b') return 0; - if (plus_minus != '-' && plus_minus != '+') return 0; - info->blend_method = - (plus_minus == '+') ? WEBP_MUX_BLEND : WEBP_MUX_NO_BLEND; - return 1; -} - -static int ParseBgcolorArgs(const char* args, uint32_t* const bgcolor) { - uint32_t a, r, g, b; - if (sscanf(args, "%u,%u,%u,%u", &a, &r, &g, &b) != 4) return 0; - if (a >= 256 || r >= 256 || g >= 256 || b >= 256) return 0; - *bgcolor = (a << 24) | (r << 16) | (g << 8) | (b << 0); - return 1; -} - -//------------------------------------------------------------------------------ -// Clean-up. - -static void DeleteConfig(Config* const config) { - if (config != NULL) { - free(config->args_); - ExUtilDeleteCommandLineArguments(&config->cmd_args_); - memset(config, 0, sizeof(*config)); - } -} - -//------------------------------------------------------------------------------ -// Parsing. - -// Basic syntactic checks on the command-line arguments. -// Returns 1 on valid, 0 otherwise. -// Also fills up num_feature_args to be number of feature arguments given. -// (e.g. if there are 4 '-frame's and 1 '-loop', then num_feature_args = 5). -static int ValidateCommandLine(const CommandLineArguments* const cmd_args, - int* num_feature_args) { - int num_frame_args; - int num_loop_args; - int num_bgcolor_args; - int num_durations_args; - int ok = 1; - - assert(num_feature_args != NULL); - *num_feature_args = 0; - - // Simple checks. - if (CountOccurrences(cmd_args, "-get") > 1) { - ERROR_GOTO1("ERROR: Multiple '-get' arguments specified.\n", ErrValidate); - } - if (CountOccurrences(cmd_args, "-set") > 1) { - ERROR_GOTO1("ERROR: Multiple '-set' arguments specified.\n", ErrValidate); - } - if (CountOccurrences(cmd_args, "-strip") > 1) { - ERROR_GOTO1("ERROR: Multiple '-strip' arguments specified.\n", ErrValidate); - } - if (CountOccurrences(cmd_args, "-info") > 1) { - ERROR_GOTO1("ERROR: Multiple '-info' arguments specified.\n", ErrValidate); - } - if (CountOccurrences(cmd_args, "-o") > 1) { - ERROR_GOTO1("ERROR: Multiple output files specified.\n", ErrValidate); - } - - // Compound checks. - num_frame_args = CountOccurrences(cmd_args, "-frame"); - num_loop_args = CountOccurrences(cmd_args, "-loop"); - num_bgcolor_args = CountOccurrences(cmd_args, "-bgcolor"); - num_durations_args = CountOccurrences(cmd_args, "-duration"); - - if (num_loop_args > 1) { - ERROR_GOTO1("ERROR: Multiple loop counts specified.\n", ErrValidate); - } - if (num_bgcolor_args > 1) { - ERROR_GOTO1("ERROR: Multiple background colors specified.\n", ErrValidate); - } - - if ((num_frame_args == 0) && (num_loop_args + num_bgcolor_args > 0)) { - ERROR_GOTO1("ERROR: Loop count and background color are relevant only in " - "case of animation.\n", ErrValidate); - } - if (num_durations_args > 0 && num_frame_args != 0) { - ERROR_GOTO1("ERROR: Can not combine -duration and -frame commands.\n", - ErrValidate); - } - - assert(ok == 1); - if (num_durations_args > 0) { - *num_feature_args = num_durations_args; - } else if (num_frame_args == 0) { - // Single argument ('set' action for ICCP/EXIF/XMP, OR a 'get' action). - *num_feature_args = 1; - } else { - // Multiple arguments ('set' action for animation) - *num_feature_args = num_frame_args + num_loop_args + num_bgcolor_args; - } - - ErrValidate: - return ok; -} - -#define ACTION_IS_NIL (config->action_type_ == NIL_ACTION) - -#define FEATURETYPE_IS_NIL (config->type_ == NIL_FEATURE) - -#define CHECK_NUM_ARGS_AT_LEAST(NUM, LABEL) \ - if (argc < i + (NUM)) { \ - fprintf(stderr, "ERROR: Too few arguments for '%s'.\n", argv[i]); \ - goto LABEL; \ - } - -#define CHECK_NUM_ARGS_AT_MOST(NUM, LABEL) \ - if (argc > i + (NUM)) { \ - fprintf(stderr, "ERROR: Too many arguments for '%s'.\n", argv[i]); \ - goto LABEL; \ - } - -#define CHECK_NUM_ARGS_EXACTLY(NUM, LABEL) \ - CHECK_NUM_ARGS_AT_LEAST(NUM, LABEL); \ - CHECK_NUM_ARGS_AT_MOST(NUM, LABEL); - -// Parses command-line arguments to fill up config object. Also performs some -// semantic checks. unicode_argv contains wchar_t arguments or is null. -static int ParseCommandLine(Config* config, const W_CHAR** const unicode_argv) { - int i = 0; - int feature_arg_index = 0; - int ok = 1; - int argc = config->cmd_args_.argc_; - const char* const* argv = config->cmd_args_.argv_; - // Unicode file paths will be used if available. - const char* const* wargv = - (unicode_argv != NULL) ? (const char**)(unicode_argv + 1) : argv; - - while (i < argc) { - FeatureArg* const arg = &config->args_[feature_arg_index]; - if (argv[i][0] == '-') { // One of the action types or output. - if (!strcmp(argv[i], "-set")) { - if (ACTION_IS_NIL) { - config->action_type_ = ACTION_SET; - } else { - ERROR_GOTO1("ERROR: Multiple actions specified.\n", ErrParse); - } - ++i; - } else if (!strcmp(argv[i], "-duration")) { - CHECK_NUM_ARGS_AT_LEAST(2, ErrParse); - if (ACTION_IS_NIL || config->action_type_ == ACTION_DURATION) { - config->action_type_ = ACTION_DURATION; - } else { - ERROR_GOTO1("ERROR: Multiple actions specified.\n", ErrParse); - } - if (FEATURETYPE_IS_NIL || config->type_ == FEATURE_DURATION) { - config->type_ = FEATURE_DURATION; - } else { - ERROR_GOTO1("ERROR: Multiple features specified.\n", ErrParse); - } - arg->params_ = argv[i + 1]; - ++feature_arg_index; - i += 2; - } else if (!strcmp(argv[i], "-get")) { - if (ACTION_IS_NIL) { - config->action_type_ = ACTION_GET; - } else { - ERROR_GOTO1("ERROR: Multiple actions specified.\n", ErrParse); - } - ++i; - } else if (!strcmp(argv[i], "-strip")) { - if (ACTION_IS_NIL) { - config->action_type_ = ACTION_STRIP; - config->arg_count_ = 0; - } else { - ERROR_GOTO1("ERROR: Multiple actions specified.\n", ErrParse); - } - ++i; - } else if (!strcmp(argv[i], "-frame")) { - CHECK_NUM_ARGS_AT_LEAST(3, ErrParse); - if (ACTION_IS_NIL || config->action_type_ == ACTION_SET) { - config->action_type_ = ACTION_SET; - } else { - ERROR_GOTO1("ERROR: Multiple actions specified.\n", ErrParse); - } - if (FEATURETYPE_IS_NIL || config->type_ == FEATURE_ANMF) { - config->type_ = FEATURE_ANMF; - } else { - ERROR_GOTO1("ERROR: Multiple features specified.\n", ErrParse); - } - arg->subtype_ = SUBTYPE_ANMF; - arg->filename_ = argv[i + 1]; - arg->params_ = argv[i + 2]; - ++feature_arg_index; - i += 3; - } else if (!strcmp(argv[i], "-loop") || !strcmp(argv[i], "-bgcolor")) { - CHECK_NUM_ARGS_AT_LEAST(2, ErrParse); - if (ACTION_IS_NIL || config->action_type_ == ACTION_SET) { - config->action_type_ = ACTION_SET; - } else { - ERROR_GOTO1("ERROR: Multiple actions specified.\n", ErrParse); - } - if (FEATURETYPE_IS_NIL || config->type_ == FEATURE_ANMF) { - config->type_ = FEATURE_ANMF; - } else { - ERROR_GOTO1("ERROR: Multiple features specified.\n", ErrParse); - } - arg->subtype_ = - !strcmp(argv[i], "-loop") ? SUBTYPE_LOOP : SUBTYPE_BGCOLOR; - arg->params_ = argv[i + 1]; - ++feature_arg_index; - i += 2; - } else if (!strcmp(argv[i], "-o")) { - CHECK_NUM_ARGS_AT_LEAST(2, ErrParse); - config->output_ = wargv[i + 1]; - i += 2; - } else if (!strcmp(argv[i], "-info")) { - CHECK_NUM_ARGS_EXACTLY(2, ErrParse); - if (config->action_type_ != NIL_ACTION) { - ERROR_GOTO1("ERROR: Multiple actions specified.\n", ErrParse); - } else { - config->action_type_ = ACTION_INFO; - config->arg_count_ = 0; - config->input_ = wargv[i + 1]; - } - i += 2; - } else if (!strcmp(argv[i], "-h") || !strcmp(argv[i], "-help")) { - PrintHelp(); - DeleteConfig(config); - LOCAL_FREE((W_CHAR** const)unicode_argv); - exit(0); - } else if (!strcmp(argv[i], "-version")) { - const int version = WebPGetMuxVersion(); - printf("%d.%d.%d\n", - (version >> 16) & 0xff, (version >> 8) & 0xff, version & 0xff); - DeleteConfig(config); - LOCAL_FREE((W_CHAR** const)unicode_argv); - exit(0); - } else if (!strcmp(argv[i], "--")) { - if (i < argc - 1) { - ++i; - if (config->input_ == NULL) { - config->input_ = wargv[i]; - } else { - ERROR_GOTO2("ERROR at '%s': Multiple input files specified.\n", - argv[i], ErrParse); - } - } - break; - } else { - ERROR_GOTO2("ERROR: Unknown option: '%s'.\n", argv[i], ErrParse); - } - } else { // One of the feature types or input. - if (ACTION_IS_NIL) { - ERROR_GOTO1("ERROR: Action must be specified before other arguments.\n", - ErrParse); - } - if (!strcmp(argv[i], "icc") || !strcmp(argv[i], "exif") || - !strcmp(argv[i], "xmp")) { - if (FEATURETYPE_IS_NIL) { - config->type_ = (!strcmp(argv[i], "icc")) ? FEATURE_ICCP : - (!strcmp(argv[i], "exif")) ? FEATURE_EXIF : FEATURE_XMP; - } else { - ERROR_GOTO1("ERROR: Multiple features specified.\n", ErrParse); - } - if (config->action_type_ == ACTION_SET) { - CHECK_NUM_ARGS_AT_LEAST(2, ErrParse); - arg->filename_ = wargv[i + 1]; - ++feature_arg_index; - i += 2; - } else { - ++i; - } - } else if (!strcmp(argv[i], "frame") && - (config->action_type_ == ACTION_GET)) { - CHECK_NUM_ARGS_AT_LEAST(2, ErrParse); - config->type_ = FEATURE_ANMF; - arg->params_ = argv[i + 1]; - ++feature_arg_index; - i += 2; - } else { // Assume input file. - if (config->input_ == NULL) { - config->input_ = wargv[i]; - } else { - ERROR_GOTO2("ERROR at '%s': Multiple input files specified.\n", - argv[i], ErrParse); - } - ++i; - } - } - } - ErrParse: - return ok; -} - -// Additional checks after config is filled. -static int ValidateConfig(Config* const config) { - int ok = 1; - - // Action. - if (ACTION_IS_NIL) { - ERROR_GOTO1("ERROR: No action specified.\n", ErrValidate2); - } - - // Feature type. - if (FEATURETYPE_IS_NIL && config->action_type_ != ACTION_INFO) { - ERROR_GOTO1("ERROR: No feature specified.\n", ErrValidate2); - } - - // Input file. - if (config->input_ == NULL) { - if (config->action_type_ != ACTION_SET) { - ERROR_GOTO1("ERROR: No input file specified.\n", ErrValidate2); - } else if (config->type_ != FEATURE_ANMF) { - ERROR_GOTO1("ERROR: No input file specified.\n", ErrValidate2); - } - } - - // Output file. - if (config->output_ == NULL && config->action_type_ != ACTION_INFO) { - ERROR_GOTO1("ERROR: No output file specified.\n", ErrValidate2); - } - - ErrValidate2: - return ok; -} - -// Create config object from command-line arguments. -static int InitializeConfig(int argc, const char* argv[], Config* const config, - const W_CHAR** const unicode_argv) { - int num_feature_args = 0; - int ok; - - memset(config, 0, sizeof(*config)); - - ok = ExUtilInitCommandLineArguments(argc, argv, &config->cmd_args_); - if (!ok) return 0; - - // Validate command-line arguments. - if (!ValidateCommandLine(&config->cmd_args_, &num_feature_args)) { - ERROR_GOTO1("Exiting due to command-line parsing error.\n", Err1); - } - - config->arg_count_ = num_feature_args; - config->args_ = (FeatureArg*)calloc(num_feature_args, sizeof(*config->args_)); - if (config->args_ == NULL) { - ERROR_GOTO1("ERROR: Memory allocation error.\n", Err1); - } - - // Parse command-line. - if (!ParseCommandLine(config, unicode_argv) || !ValidateConfig(config)) { - ERROR_GOTO1("Exiting due to command-line parsing error.\n", Err1); - } - - Err1: - return ok; -} - -#undef ACTION_IS_NIL -#undef FEATURETYPE_IS_NIL -#undef CHECK_NUM_ARGS_AT_LEAST -#undef CHECK_NUM_ARGS_AT_MOST -#undef CHECK_NUM_ARGS_EXACTLY - -//------------------------------------------------------------------------------ -// Processing. - -static int GetFrame(const WebPMux* mux, const Config* config) { - WebPMuxError err = WEBP_MUX_OK; - WebPMux* mux_single = NULL; - int num = 0; - int ok = 1; - int parse_error = 0; - const WebPChunkId id = WEBP_CHUNK_ANMF; - WebPMuxFrameInfo info; - WebPDataInit(&info.bitstream); - - num = ExUtilGetInt(config->args_[0].params_, 10, &parse_error); - if (num < 0) { - ERROR_GOTO1("ERROR: Frame/Fragment index must be non-negative.\n", ErrGet); - } - if (parse_error) goto ErrGet; - - err = WebPMuxGetFrame(mux, num, &info); - if (err == WEBP_MUX_OK && info.id != id) err = WEBP_MUX_NOT_FOUND; - if (err != WEBP_MUX_OK) { - ERROR_GOTO3("ERROR (%s): Could not get frame %d.\n", - ErrorString(err), num, ErrGet); - } - - mux_single = WebPMuxNew(); - if (mux_single == NULL) { - err = WEBP_MUX_MEMORY_ERROR; - ERROR_GOTO2("ERROR (%s): Could not allocate a mux object.\n", - ErrorString(err), ErrGet); - } - err = WebPMuxSetImage(mux_single, &info.bitstream, 1); - if (err != WEBP_MUX_OK) { - ERROR_GOTO2("ERROR (%s): Could not create single image mux object.\n", - ErrorString(err), ErrGet); - } - - ok = WriteWebP(mux_single, config->output_); - - ErrGet: - WebPDataClear(&info.bitstream); - WebPMuxDelete(mux_single); - return ok && !parse_error; -} - -// Read and process config. -static int Process(const Config* config) { - WebPMux* mux = NULL; - WebPData chunk; - WebPMuxError err = WEBP_MUX_OK; - int ok = 1; - - switch (config->action_type_) { - case ACTION_GET: { - ok = CreateMux(config->input_, &mux); - if (!ok) goto Err2; - switch (config->type_) { - case FEATURE_ANMF: - ok = GetFrame(mux, config); - break; - - case FEATURE_ICCP: - case FEATURE_EXIF: - case FEATURE_XMP: - err = WebPMuxGetChunk(mux, kFourccList[config->type_], &chunk); - if (err != WEBP_MUX_OK) { - ERROR_GOTO3("ERROR (%s): Could not get the %s.\n", - ErrorString(err), kDescriptions[config->type_], Err2); - } - ok = WriteData(config->output_, &chunk); - break; - - default: - ERROR_GOTO1("ERROR: Invalid feature for action 'get'.\n", Err2); - break; - } - break; - } - case ACTION_SET: { - switch (config->type_) { - case FEATURE_ANMF: { - int i; - WebPMuxAnimParams params = { 0xFFFFFFFF, 0 }; - mux = WebPMuxNew(); - if (mux == NULL) { - ERROR_GOTO2("ERROR (%s): Could not allocate a mux object.\n", - ErrorString(WEBP_MUX_MEMORY_ERROR), Err2); - } - for (i = 0; i < config->arg_count_; ++i) { - switch (config->args_[i].subtype_) { - case SUBTYPE_BGCOLOR: { - uint32_t bgcolor; - ok = ParseBgcolorArgs(config->args_[i].params_, &bgcolor); - if (!ok) { - ERROR_GOTO1("ERROR: Could not parse the background color \n", - Err2); - } - params.bgcolor = bgcolor; - break; - } - case SUBTYPE_LOOP: { - int parse_error = 0; - const int loop_count = - ExUtilGetInt(config->args_[i].params_, 10, &parse_error); - if (loop_count < 0 || loop_count > 65535) { - // Note: This is only a 'necessary' condition for loop_count - // to be valid. The 'sufficient' conditioned in checked in - // WebPMuxSetAnimationParams() method called later. - ERROR_GOTO1("ERROR: Loop count must be in the range 0 to " - "65535.\n", Err2); - } - ok = !parse_error; - if (!ok) goto Err2; - params.loop_count = loop_count; - break; - } - case SUBTYPE_ANMF: { - WebPMuxFrameInfo frame; - frame.id = WEBP_CHUNK_ANMF; - ok = ExUtilReadFileToWebPData(config->args_[i].filename_, - &frame.bitstream); - if (!ok) goto Err2; - ok = ParseFrameArgs(config->args_[i].params_, &frame); - if (!ok) { - WebPDataClear(&frame.bitstream); - ERROR_GOTO1("ERROR: Could not parse frame properties.\n", - Err2); - } - err = WebPMuxPushFrame(mux, &frame, 1); - WebPDataClear(&frame.bitstream); - if (err != WEBP_MUX_OK) { - ERROR_GOTO3("ERROR (%s): Could not add a frame at index %d." - "\n", ErrorString(err), i, Err2); - } - break; - } - default: { - ERROR_GOTO1("ERROR: Invalid subtype for 'frame'", Err2); - break; - } - } - } - err = WebPMuxSetAnimationParams(mux, ¶ms); - if (err != WEBP_MUX_OK) { - ERROR_GOTO2("ERROR (%s): Could not set animation parameters.\n", - ErrorString(err), Err2); - } - break; - } - - case FEATURE_ICCP: - case FEATURE_EXIF: - case FEATURE_XMP: { - ok = CreateMux(config->input_, &mux); - if (!ok) goto Err2; - ok = ExUtilReadFileToWebPData(config->args_[0].filename_, &chunk); - if (!ok) goto Err2; - err = WebPMuxSetChunk(mux, kFourccList[config->type_], &chunk, 1); - free((void*)chunk.bytes); - if (err != WEBP_MUX_OK) { - ERROR_GOTO3("ERROR (%s): Could not set the %s.\n", - ErrorString(err), kDescriptions[config->type_], Err2); - } - break; - } - default: { - ERROR_GOTO1("ERROR: Invalid feature for action 'set'.\n", Err2); - break; - } - } - ok = WriteWebP(mux, config->output_); - break; - } - case ACTION_DURATION: { - int num_frames; - ok = CreateMux(config->input_, &mux); - if (!ok) goto Err2; - err = WebPMuxNumChunks(mux, WEBP_CHUNK_ANMF, &num_frames); - ok = (err == WEBP_MUX_OK); - if (!ok) { - ERROR_GOTO1("ERROR: can not parse the number of frames.\n", Err2); - } - if (num_frames == 0) { - fprintf(stderr, "Doesn't look like the source is animated. " - "Skipping duration setting.\n"); - ok = WriteWebP(mux, config->output_); - if (!ok) goto Err2; - } else { - int i; - int* durations = NULL; - WebPMux* new_mux = DuplicateMuxHeader(mux); - if (new_mux == NULL) goto Err2; - durations = (int*)WebPMalloc((size_t)num_frames * sizeof(*durations)); - if (durations == NULL) goto Err2; - for (i = 0; i < num_frames; ++i) durations[i] = -1; - - // Parse intervals to process. - for (i = 0; i < config->arg_count_; ++i) { - int k; - int args[3]; - int duration, start, end; - const int nb_args = ExUtilGetInts(config->args_[i].params_, - 10, 3, args); - ok = (nb_args >= 1); - if (!ok) goto Err3; - duration = args[0]; - if (duration < 0) { - ERROR_GOTO1("ERROR: duration must be strictly positive.\n", Err3); - } - - if (nb_args == 1) { // only duration is present -> use full interval - start = 1; - end = num_frames; - } else { - start = args[1]; - if (start <= 0) { - start = 1; - } else if (start > num_frames) { - start = num_frames; - } - end = (nb_args >= 3) ? args[2] : start; - if (end == 0 || end > num_frames) end = num_frames; - } - - for (k = start; k <= end; ++k) { - assert(k >= 1 && k <= num_frames); - durations[k - 1] = duration; - } - } - - // Apply non-negative durations to their destination frames. - for (i = 1; i <= num_frames; ++i) { - WebPMuxFrameInfo frame; - err = WebPMuxGetFrame(mux, i, &frame); - if (err != WEBP_MUX_OK || frame.id != WEBP_CHUNK_ANMF) { - ERROR_GOTO2("ERROR: can not retrieve frame #%d.\n", i, Err3); - } - if (durations[i - 1] >= 0) frame.duration = durations[i - 1]; - err = WebPMuxPushFrame(new_mux, &frame, 1); - if (err != WEBP_MUX_OK) { - ERROR_GOTO2("ERROR: error push frame data #%d\n", i, Err3); - } - WebPDataClear(&frame.bitstream); - } - WebPMuxDelete(mux); - ok = WriteWebP(new_mux, config->output_); - mux = new_mux; // transfer for the WebPMuxDelete() call - new_mux = NULL; - - Err3: - WebPFree(durations); - WebPMuxDelete(new_mux); - if (!ok) goto Err2; - } - break; - } - case ACTION_STRIP: { - ok = CreateMux(config->input_, &mux); - if (!ok) goto Err2; - if (config->type_ == FEATURE_ICCP || config->type_ == FEATURE_EXIF || - config->type_ == FEATURE_XMP) { - err = WebPMuxDeleteChunk(mux, kFourccList[config->type_]); - if (err != WEBP_MUX_OK) { - ERROR_GOTO3("ERROR (%s): Could not strip the %s.\n", - ErrorString(err), kDescriptions[config->type_], Err2); - } - } else { - ERROR_GOTO1("ERROR: Invalid feature for action 'strip'.\n", Err2); - break; - } - ok = WriteWebP(mux, config->output_); - break; - } - case ACTION_INFO: { - ok = CreateMux(config->input_, &mux); - if (!ok) goto Err2; - ok = (DisplayInfo(mux) == WEBP_MUX_OK); - break; - } - default: { - assert(0); // Invalid action. - break; - } - } - - Err2: - WebPMuxDelete(mux); - return ok; -} - -//------------------------------------------------------------------------------ -// Main. - -int main(int argc, const char* argv[]) { - Config config; - int ok; - - INIT_WARGV(argc, argv); - - ok = InitializeConfig(argc - 1, argv + 1, &config, GET_WARGV_OR_NULL()); - if (ok) { - ok = Process(&config); - } else { - PrintHelp(); - } - DeleteConfig(&config); - FREE_WARGV_AND_RETURN(!ok); -} - -//------------------------------------------------------------------------------ diff --git a/Extended/libwebp/extras/.deps/get_disto-get_disto.Po b/Extended/libwebp/extras/.deps/get_disto-get_disto.Po deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/extras/.deps/get_disto-get_disto.Po +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/extras/.deps/libwebpextras_la-extras.Plo b/Extended/libwebp/extras/.deps/libwebpextras_la-extras.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/extras/.deps/libwebpextras_la-extras.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/extras/.deps/libwebpextras_la-quality_estimate.Plo b/Extended/libwebp/extras/.deps/libwebpextras_la-quality_estimate.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/extras/.deps/libwebpextras_la-quality_estimate.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/extras/.deps/vwebp_sdl-vwebp_sdl.Po b/Extended/libwebp/extras/.deps/vwebp_sdl-vwebp_sdl.Po deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/extras/.deps/vwebp_sdl-vwebp_sdl.Po +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/extras/.deps/vwebp_sdl-webp_to_sdl.Po b/Extended/libwebp/extras/.deps/vwebp_sdl-webp_to_sdl.Po deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/extras/.deps/vwebp_sdl-webp_to_sdl.Po +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/extras/.deps/webp_quality-webp_quality.Po b/Extended/libwebp/extras/.deps/webp_quality-webp_quality.Po deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/extras/.deps/webp_quality-webp_quality.Po +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/extras/Makefile b/Extended/libwebp/extras/Makefile deleted file mode 100644 index 41abed3..0000000 --- a/Extended/libwebp/extras/Makefile +++ /dev/null @@ -1,784 +0,0 @@ -# Makefile.in generated by automake 1.16.1 from Makefile.am. -# extras/Makefile. Generated from Makefile.in by configure. - -# Copyright (C) 1994-2018 Free Software Foundation, Inc. - -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - - - - - - -am__is_gnu_make = { \ - if test -z '$(MAKELEVEL)'; then \ - false; \ - elif test -n '$(MAKE_HOST)'; then \ - true; \ - elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ - true; \ - else \ - false; \ - fi; \ -} -am__make_running_with_option = \ - case $${target_option-} in \ - ?) ;; \ - *) echo "am__make_running_with_option: internal error: invalid" \ - "target option '$${target_option-}' specified" >&2; \ - exit 1;; \ - esac; \ - has_opt=no; \ - sane_makeflags=$$MAKEFLAGS; \ - if $(am__is_gnu_make); then \ - sane_makeflags=$$MFLAGS; \ - else \ - case $$MAKEFLAGS in \ - *\\[\ \ ]*) \ - bs=\\; \ - sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ - | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ - esac; \ - fi; \ - skip_next=no; \ - strip_trailopt () \ - { \ - flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ - }; \ - for flg in $$sane_makeflags; do \ - test $$skip_next = yes && { skip_next=no; continue; }; \ - case $$flg in \ - *=*|--*) continue;; \ - -*I) strip_trailopt 'I'; skip_next=yes;; \ - -*I?*) strip_trailopt 'I';; \ - -*O) strip_trailopt 'O'; skip_next=yes;; \ - -*O?*) strip_trailopt 'O';; \ - -*l) strip_trailopt 'l'; skip_next=yes;; \ - -*l?*) strip_trailopt 'l';; \ - -[dEDm]) skip_next=yes;; \ - -[JT]) skip_next=yes;; \ - esac; \ - case $$flg in \ - *$$target_option*) has_opt=yes; break;; \ - esac; \ - done; \ - test $$has_opt = yes -am__make_dryrun = (target_option=n; $(am__make_running_with_option)) -am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) -pkgdatadir = $(datadir)/libwebp -pkgincludedir = $(includedir)/libwebp -pkglibdir = $(libdir)/libwebp -pkglibexecdir = $(libexecdir)/libwebp -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = x86_64-apple-darwin19.6.0 -host_triplet = x86_64-apple-darwin19.6.0 -noinst_PROGRAMS = webp_quality$(EXEEXT) $(am__EXEEXT_1) \ - $(am__EXEEXT_2) -am__append_1 = get_disto -#am__append_2 = vwebp_sdl -subdir = extras -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pthread.m4 \ - $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ - $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ - $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ - $(am__DIST_COMMON) -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = $(top_builddir)/src/webp/config.h -CONFIG_CLEAN_FILES = -CONFIG_CLEAN_VPATH_FILES = -am__EXEEXT_1 = get_disto$(EXEEXT) -#am__EXEEXT_2 = vwebp_sdl$(EXEEXT) -PROGRAMS = $(noinst_PROGRAMS) -LTLIBRARIES = $(noinst_LTLIBRARIES) -libwebpextras_la_DEPENDENCIES = ../src/libwebp.la -am_libwebpextras_la_OBJECTS = libwebpextras_la-extras.lo \ - libwebpextras_la-quality_estimate.lo -libwebpextras_la_OBJECTS = $(am_libwebpextras_la_OBJECTS) -AM_V_lt = $(am__v_lt_$(V)) -am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) -am__v_lt_0 = --silent -am__v_lt_1 = -libwebpextras_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ - $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ - $(AM_CFLAGS) $(CFLAGS) $(libwebpextras_la_LDFLAGS) $(LDFLAGS) \ - -o $@ -am_get_disto_OBJECTS = get_disto-get_disto.$(OBJEXT) -get_disto_OBJECTS = $(am_get_disto_OBJECTS) -am__DEPENDENCIES_1 = -get_disto_DEPENDENCIES = ../imageio/libimageio_util.la \ - ../imageio/libimagedec.la ../src/libwebp.la \ - $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ - $(am__DEPENDENCIES_1) -am_vwebp_sdl_OBJECTS = vwebp_sdl-vwebp_sdl.$(OBJEXT) \ - vwebp_sdl-webp_to_sdl.$(OBJEXT) -vwebp_sdl_OBJECTS = $(am_vwebp_sdl_OBJECTS) -vwebp_sdl_DEPENDENCIES = ../imageio/libimageio_util.la \ - ../src/libwebp.la $(am__DEPENDENCIES_1) -am_webp_quality_OBJECTS = webp_quality-webp_quality.$(OBJEXT) -webp_quality_OBJECTS = $(am_webp_quality_OBJECTS) -webp_quality_DEPENDENCIES = ../imageio/libimageio_util.la \ - libwebpextras.la ../src/libwebp.la -AM_V_P = $(am__v_P_$(V)) -am__v_P_ = $(am__v_P_$(AM_DEFAULT_VERBOSITY)) -am__v_P_0 = false -am__v_P_1 = : -AM_V_GEN = $(am__v_GEN_$(V)) -am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) -am__v_GEN_0 = @echo " GEN " $@; -am__v_GEN_1 = -AM_V_at = $(am__v_at_$(V)) -am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) -am__v_at_0 = @ -am__v_at_1 = -DEFAULT_INCLUDES = -I. -I$(top_builddir)/src/webp -depcomp = $(SHELL) $(top_srcdir)/depcomp -am__maybe_remake_depfiles = depfiles -am__depfiles_remade = ./$(DEPDIR)/get_disto-get_disto.Po \ - ./$(DEPDIR)/libwebpextras_la-extras.Plo \ - ./$(DEPDIR)/libwebpextras_la-quality_estimate.Plo \ - ./$(DEPDIR)/vwebp_sdl-vwebp_sdl.Po \ - ./$(DEPDIR)/vwebp_sdl-webp_to_sdl.Po \ - ./$(DEPDIR)/webp_quality-webp_quality.Po -am__mv = mv -f -COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ - $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CFLAGS) $(CFLAGS) -AM_V_CC = $(am__v_CC_$(V)) -am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) -am__v_CC_0 = @echo " CC " $@; -am__v_CC_1 = -CCLD = $(CC) -LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ - $(AM_LDFLAGS) $(LDFLAGS) -o $@ -AM_V_CCLD = $(am__v_CCLD_$(V)) -am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) -am__v_CCLD_0 = @echo " CCLD " $@; -am__v_CCLD_1 = -SOURCES = $(libwebpextras_la_SOURCES) $(get_disto_SOURCES) \ - $(vwebp_sdl_SOURCES) $(webp_quality_SOURCES) -DIST_SOURCES = $(libwebpextras_la_SOURCES) $(get_disto_SOURCES) \ - $(vwebp_sdl_SOURCES) $(webp_quality_SOURCES) -am__can_run_installinfo = \ - case $$AM_UPDATE_INFO_DIR in \ - n|no|NO) false;; \ - *) (install-info --version) >/dev/null 2>&1;; \ - esac -HEADERS = $(noinst_HEADERS) -am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) -# Read a list of newline-separated strings from the standard input, -# and print each of them once, without duplicates. Input order is -# *not* preserved. -am__uniquify_input = $(AWK) '\ - BEGIN { nonempty = 0; } \ - { items[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in items) print i; }; } \ -' -# Make sure the list of sources is unique. This is necessary because, -# e.g., the same source file might be shared among _SOURCES variables -# for different programs/libraries. -am__define_uniq_tagged_files = \ - list='$(am__tagged_files)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | $(am__uniquify_input)` -ETAGS = etags -CTAGS = ctags -am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = ${SHELL} /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp/missing aclocal-1.16 -AMTAR = $${TAR-tar} -AM_CFLAGS = -fvisibility=hidden -Wall -Wconstant-conversion -Wdeclaration-after-statement -Wextra -Wfloat-conversion -Wformat -Wformat-nonliteral -Wformat -Wformat-security -Wmissing-declarations -Wmissing-prototypes -Wold-style-definition -Wparentheses-equality -Wshadow -Wshorten-64-to-32 -Wundef -Wunreachable-code -Wunused -Wvla -Wno-deprecated-declarations -AM_CPPFLAGS = -DNDEBUG -I$(top_builddir) -I$(top_srcdir) \ - -I$(top_builddir)/src -I$(top_srcdir)/src -AM_DEFAULT_VERBOSITY = 0 -AR = ar -AUTOCONF = ${SHELL} /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp/missing autoconf -AUTOHEADER = ${SHELL} /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp/missing autoheader -AUTOMAKE = ${SHELL} /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp/missing automake-1.16 -AWK = awk -CC = gcc -CCDEPMODE = depmode=gcc3 -CFLAGS = -g -O2 -D_THREAD_SAFE -pthread -CPP = gcc -E -CPPFLAGS = -CYGPATH_W = echo -DEFS = -DHAVE_CONFIG_H -DEPDIR = .deps -DLLTOOL = false -DSYMUTIL = dsymutil -DUMPBIN = -ECHO_C = \c -ECHO_N = -ECHO_T = -EGREP = /usr/bin/grep -E -EXEEXT = -FGREP = /usr/bin/grep -F -GIF_INCLUDES = -GIF_LIBS = -lgif -GL_INCLUDES = -GL_LIBS = -framework GLUT -framework OpenGL -GREP = /usr/bin/grep -INSTALL = /opt/twitter_mde/homebrew_minimal/mde_bin/ginstall -c -INSTALL_DATA = ${INSTALL} -m 644 -INSTALL_PROGRAM = ${INSTALL} -INSTALL_SCRIPT = ${INSTALL} -INSTALL_STRIP_PROGRAM = $(install_sh) -c -s -JPEG_INCLUDES = -DWEBP_HAVE_JPEG -JPEG_LIBS = -ljpeg -LD = /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld -LDFLAGS = -LIBOBJS = -LIBPNG_CONFIG = /opt/twitter_mde/bin/libpng-config -LIBS = -LIBSDL_CONFIG = -LIBTOOL = $(SHELL) $(top_builddir)/libtool -LIPO = lipo -LN_S = ln -s -LTLIBOBJS = -LT_SYS_LIBRARY_PATH = -MAKEINFO = ${SHELL} /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp/missing makeinfo -MANIFEST_TOOL = : -MKDIR_P = /opt/twitter_mde/homebrew_minimal/mde_bin/gmkdir -p -NEON_FLAGS = -NM = /usr/bin/nm -B -NMEDIT = nmedit -OBJDUMP = objdump -OBJEXT = o -OTOOL = otool -OTOOL64 = : -PACKAGE = libwebp -PACKAGE_BUGREPORT = https://bugs.chromium.org/p/webp -PACKAGE_NAME = libwebp -PACKAGE_STRING = libwebp 1.1.0 -PACKAGE_TARNAME = libwebp -PACKAGE_URL = http://developers.google.com/speed/webp -PACKAGE_VERSION = 1.1.0 -PATH_SEPARATOR = : -PNG_INCLUDES = -I/opt/twitter_mde/package/twitter_dev_homebrew/current/Cellar/libpng/1.6.34/include/libpng16 -DWEBP_HAVE_PNG -PNG_LIBS = -L/opt/twitter_mde/package/twitter_dev_homebrew/current/Cellar/libpng/1.6.34/lib -lpng16 -PTHREAD_CC = gcc -PTHREAD_CFLAGS = -D_THREAD_SAFE -pthread -PTHREAD_LIBS = -RANLIB = ranlib -SDL_INCLUDES = -SDL_LIBS = -SED = /usr/bin/sed -SET_MAKE = -SHELL = /bin/sh -SSE2_FLAGS = -msse2 -SSE41_FLAGS = -msse4.1 -STRIP = strip -TIFF_INCLUDES = -DWEBP_HAVE_TIFF -TIFF_LIBS = -ltiff -USE_SWAP_16BIT_CSP = -VERSION = 1.1.0 -abs_builddir = /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp/extras -abs_srcdir = /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp/extras -abs_top_builddir = /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp -abs_top_srcdir = /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp -ac_ct_AR = ar -ac_ct_CC = gcc -ac_ct_DUMPBIN = -am__include = include -am__leading_dot = . -am__quote = -am__tar = $${TAR-tar} chof - "$$tardir" -am__untar = $${TAR-tar} xf - -ax_pthread_config = -bindir = ${exec_prefix}/bin -build = x86_64-apple-darwin19.6.0 -build_alias = -build_cpu = x86_64 -build_os = darwin19.6.0 -build_vendor = apple -builddir = . -datadir = ${datarootdir} -datarootdir = ${prefix}/share -docdir = ${datarootdir}/doc/${PACKAGE_TARNAME} -dvidir = ${docdir} -exec_prefix = ${prefix} -host = x86_64-apple-darwin19.6.0 -host_alias = -host_cpu = x86_64 -host_os = darwin19.6.0 -host_vendor = apple -htmldir = ${docdir} -includedir = ${prefix}/include -infodir = ${datarootdir}/info -install_sh = ${SHELL} /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp/install-sh -libdir = ${exec_prefix}/lib -libexecdir = ${exec_prefix}/libexec -localedir = ${datarootdir}/locale -localstatedir = ${prefix}/var -mandir = ${datarootdir}/man -mkdir_p = $(MKDIR_P) -oldincludedir = /usr/include -pdfdir = ${docdir} -pkgconfigdir = ${libdir}/pkgconfig -prefix = /usr/local -program_transform_name = s,x,x, -psdir = ${docdir} -runstatedir = ${localstatedir}/run -sbindir = ${exec_prefix}/sbin -sharedstatedir = ${prefix}/com -srcdir = . -sysconfdir = ${prefix}/etc -target_alias = -top_build_prefix = ../ -top_builddir = .. -top_srcdir = .. -noinst_LTLIBRARIES = libwebpextras.la -noinst_HEADERS = ../src/webp/types.h -libwebpextras_la_SOURCES = extras.c extras.h quality_estimate.c -libwebpextras_la_CPPFLAGS = $(AM_CPPFLAGS) -libwebpextras_la_LDFLAGS = -lm -libwebpextras_la_LIBADD = ../src/libwebp.la -get_disto_SOURCES = get_disto.c -get_disto_CPPFLAGS = $(AM_CPPFLAGS) -get_disto_LDADD = ../imageio/libimageio_util.la \ - ../imageio/libimagedec.la ../src/libwebp.la $(PNG_LIBS) \ - $(JPEG_LIBS) $(TIFF_LIBS) -webp_quality_SOURCES = webp_quality.c -webp_quality_CPPFLAGS = $(AM_CPPFLAGS) -webp_quality_LDADD = ../imageio/libimageio_util.la libwebpextras.la \ - ../src/libwebp.la -vwebp_sdl_SOURCES = vwebp_sdl.c webp_to_sdl.c webp_to_sdl.h -vwebp_sdl_CPPFLAGS = $(AM_CPPFLAGS) $(SDL_INCLUDES) -vwebp_sdl_LDADD = ../imageio/libimageio_util.la ../src/libwebp.la \ - $(SDL_LIBS) -all: all-am - -.SUFFIXES: -.SUFFIXES: .c .lo .o .obj -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ - && { if test -f $@; then exit 0; else break; fi; }; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign extras/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --foreign extras/Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(am__aclocal_m4_deps): - -clean-noinstPROGRAMS: - @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ - echo " rm -f" $$list; \ - rm -f $$list || exit $$?; \ - test -n "$(EXEEXT)" || exit 0; \ - list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ - echo " rm -f" $$list; \ - rm -f $$list - -clean-noinstLTLIBRARIES: - -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) - @list='$(noinst_LTLIBRARIES)'; \ - locs=`for p in $$list; do echo $$p; done | \ - sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ - sort -u`; \ - test -z "$$locs" || { \ - echo rm -f $${locs}; \ - rm -f $${locs}; \ - } - -libwebpextras.la: $(libwebpextras_la_OBJECTS) $(libwebpextras_la_DEPENDENCIES) $(EXTRA_libwebpextras_la_DEPENDENCIES) - $(AM_V_CCLD)$(libwebpextras_la_LINK) $(libwebpextras_la_OBJECTS) $(libwebpextras_la_LIBADD) $(LIBS) - -get_disto$(EXEEXT): $(get_disto_OBJECTS) $(get_disto_DEPENDENCIES) $(EXTRA_get_disto_DEPENDENCIES) - @rm -f get_disto$(EXEEXT) - $(AM_V_CCLD)$(LINK) $(get_disto_OBJECTS) $(get_disto_LDADD) $(LIBS) - -vwebp_sdl$(EXEEXT): $(vwebp_sdl_OBJECTS) $(vwebp_sdl_DEPENDENCIES) $(EXTRA_vwebp_sdl_DEPENDENCIES) - @rm -f vwebp_sdl$(EXEEXT) - $(AM_V_CCLD)$(LINK) $(vwebp_sdl_OBJECTS) $(vwebp_sdl_LDADD) $(LIBS) - -webp_quality$(EXEEXT): $(webp_quality_OBJECTS) $(webp_quality_DEPENDENCIES) $(EXTRA_webp_quality_DEPENDENCIES) - @rm -f webp_quality$(EXEEXT) - $(AM_V_CCLD)$(LINK) $(webp_quality_OBJECTS) $(webp_quality_LDADD) $(LIBS) - -mostlyclean-compile: - -rm -f *.$(OBJEXT) - -distclean-compile: - -rm -f *.tab.c - -include ./$(DEPDIR)/get_disto-get_disto.Po # am--include-marker -include ./$(DEPDIR)/libwebpextras_la-extras.Plo # am--include-marker -include ./$(DEPDIR)/libwebpextras_la-quality_estimate.Plo # am--include-marker -include ./$(DEPDIR)/vwebp_sdl-vwebp_sdl.Po # am--include-marker -include ./$(DEPDIR)/vwebp_sdl-webp_to_sdl.Po # am--include-marker -include ./$(DEPDIR)/webp_quality-webp_quality.Po # am--include-marker - -$(am__depfiles_remade): - @$(MKDIR_P) $(@D) - @echo '# dummy' >$@-t && $(am__mv) $@-t $@ - -am--depfiles: $(am__depfiles_remade) - -.c.o: - $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ - $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ - $(am__mv) $$depbase.Tpo $$depbase.Po -# $(AM_V_CC)source='$<' object='$@' libtool=no \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(COMPILE) -c -o $@ $< - -.c.obj: - $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ - $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ - $(am__mv) $$depbase.Tpo $$depbase.Po -# $(AM_V_CC)source='$<' object='$@' libtool=no \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` - -.c.lo: - $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ - $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ - $(am__mv) $$depbase.Tpo $$depbase.Plo -# $(AM_V_CC)source='$<' object='$@' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LTCOMPILE) -c -o $@ $< - -libwebpextras_la-extras.lo: extras.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpextras_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwebpextras_la-extras.lo -MD -MP -MF $(DEPDIR)/libwebpextras_la-extras.Tpo -c -o libwebpextras_la-extras.lo `test -f 'extras.c' || echo '$(srcdir)/'`extras.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpextras_la-extras.Tpo $(DEPDIR)/libwebpextras_la-extras.Plo -# $(AM_V_CC)source='extras.c' object='libwebpextras_la-extras.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpextras_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwebpextras_la-extras.lo `test -f 'extras.c' || echo '$(srcdir)/'`extras.c - -libwebpextras_la-quality_estimate.lo: quality_estimate.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpextras_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwebpextras_la-quality_estimate.lo -MD -MP -MF $(DEPDIR)/libwebpextras_la-quality_estimate.Tpo -c -o libwebpextras_la-quality_estimate.lo `test -f 'quality_estimate.c' || echo '$(srcdir)/'`quality_estimate.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpextras_la-quality_estimate.Tpo $(DEPDIR)/libwebpextras_la-quality_estimate.Plo -# $(AM_V_CC)source='quality_estimate.c' object='libwebpextras_la-quality_estimate.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpextras_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwebpextras_la-quality_estimate.lo `test -f 'quality_estimate.c' || echo '$(srcdir)/'`quality_estimate.c - -get_disto-get_disto.o: get_disto.c - $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(get_disto_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT get_disto-get_disto.o -MD -MP -MF $(DEPDIR)/get_disto-get_disto.Tpo -c -o get_disto-get_disto.o `test -f 'get_disto.c' || echo '$(srcdir)/'`get_disto.c - $(AM_V_at)$(am__mv) $(DEPDIR)/get_disto-get_disto.Tpo $(DEPDIR)/get_disto-get_disto.Po -# $(AM_V_CC)source='get_disto.c' object='get_disto-get_disto.o' libtool=no \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(get_disto_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o get_disto-get_disto.o `test -f 'get_disto.c' || echo '$(srcdir)/'`get_disto.c - -get_disto-get_disto.obj: get_disto.c - $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(get_disto_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT get_disto-get_disto.obj -MD -MP -MF $(DEPDIR)/get_disto-get_disto.Tpo -c -o get_disto-get_disto.obj `if test -f 'get_disto.c'; then $(CYGPATH_W) 'get_disto.c'; else $(CYGPATH_W) '$(srcdir)/get_disto.c'; fi` - $(AM_V_at)$(am__mv) $(DEPDIR)/get_disto-get_disto.Tpo $(DEPDIR)/get_disto-get_disto.Po -# $(AM_V_CC)source='get_disto.c' object='get_disto-get_disto.obj' libtool=no \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(get_disto_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o get_disto-get_disto.obj `if test -f 'get_disto.c'; then $(CYGPATH_W) 'get_disto.c'; else $(CYGPATH_W) '$(srcdir)/get_disto.c'; fi` - -vwebp_sdl-vwebp_sdl.o: vwebp_sdl.c - $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(vwebp_sdl_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT vwebp_sdl-vwebp_sdl.o -MD -MP -MF $(DEPDIR)/vwebp_sdl-vwebp_sdl.Tpo -c -o vwebp_sdl-vwebp_sdl.o `test -f 'vwebp_sdl.c' || echo '$(srcdir)/'`vwebp_sdl.c - $(AM_V_at)$(am__mv) $(DEPDIR)/vwebp_sdl-vwebp_sdl.Tpo $(DEPDIR)/vwebp_sdl-vwebp_sdl.Po -# $(AM_V_CC)source='vwebp_sdl.c' object='vwebp_sdl-vwebp_sdl.o' libtool=no \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(vwebp_sdl_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o vwebp_sdl-vwebp_sdl.o `test -f 'vwebp_sdl.c' || echo '$(srcdir)/'`vwebp_sdl.c - -vwebp_sdl-vwebp_sdl.obj: vwebp_sdl.c - $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(vwebp_sdl_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT vwebp_sdl-vwebp_sdl.obj -MD -MP -MF $(DEPDIR)/vwebp_sdl-vwebp_sdl.Tpo -c -o vwebp_sdl-vwebp_sdl.obj `if test -f 'vwebp_sdl.c'; then $(CYGPATH_W) 'vwebp_sdl.c'; else $(CYGPATH_W) '$(srcdir)/vwebp_sdl.c'; fi` - $(AM_V_at)$(am__mv) $(DEPDIR)/vwebp_sdl-vwebp_sdl.Tpo $(DEPDIR)/vwebp_sdl-vwebp_sdl.Po -# $(AM_V_CC)source='vwebp_sdl.c' object='vwebp_sdl-vwebp_sdl.obj' libtool=no \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(vwebp_sdl_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o vwebp_sdl-vwebp_sdl.obj `if test -f 'vwebp_sdl.c'; then $(CYGPATH_W) 'vwebp_sdl.c'; else $(CYGPATH_W) '$(srcdir)/vwebp_sdl.c'; fi` - -vwebp_sdl-webp_to_sdl.o: webp_to_sdl.c - $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(vwebp_sdl_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT vwebp_sdl-webp_to_sdl.o -MD -MP -MF $(DEPDIR)/vwebp_sdl-webp_to_sdl.Tpo -c -o vwebp_sdl-webp_to_sdl.o `test -f 'webp_to_sdl.c' || echo '$(srcdir)/'`webp_to_sdl.c - $(AM_V_at)$(am__mv) $(DEPDIR)/vwebp_sdl-webp_to_sdl.Tpo $(DEPDIR)/vwebp_sdl-webp_to_sdl.Po -# $(AM_V_CC)source='webp_to_sdl.c' object='vwebp_sdl-webp_to_sdl.o' libtool=no \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(vwebp_sdl_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o vwebp_sdl-webp_to_sdl.o `test -f 'webp_to_sdl.c' || echo '$(srcdir)/'`webp_to_sdl.c - -vwebp_sdl-webp_to_sdl.obj: webp_to_sdl.c - $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(vwebp_sdl_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT vwebp_sdl-webp_to_sdl.obj -MD -MP -MF $(DEPDIR)/vwebp_sdl-webp_to_sdl.Tpo -c -o vwebp_sdl-webp_to_sdl.obj `if test -f 'webp_to_sdl.c'; then $(CYGPATH_W) 'webp_to_sdl.c'; else $(CYGPATH_W) '$(srcdir)/webp_to_sdl.c'; fi` - $(AM_V_at)$(am__mv) $(DEPDIR)/vwebp_sdl-webp_to_sdl.Tpo $(DEPDIR)/vwebp_sdl-webp_to_sdl.Po -# $(AM_V_CC)source='webp_to_sdl.c' object='vwebp_sdl-webp_to_sdl.obj' libtool=no \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(vwebp_sdl_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o vwebp_sdl-webp_to_sdl.obj `if test -f 'webp_to_sdl.c'; then $(CYGPATH_W) 'webp_to_sdl.c'; else $(CYGPATH_W) '$(srcdir)/webp_to_sdl.c'; fi` - -webp_quality-webp_quality.o: webp_quality.c - $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webp_quality_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT webp_quality-webp_quality.o -MD -MP -MF $(DEPDIR)/webp_quality-webp_quality.Tpo -c -o webp_quality-webp_quality.o `test -f 'webp_quality.c' || echo '$(srcdir)/'`webp_quality.c - $(AM_V_at)$(am__mv) $(DEPDIR)/webp_quality-webp_quality.Tpo $(DEPDIR)/webp_quality-webp_quality.Po -# $(AM_V_CC)source='webp_quality.c' object='webp_quality-webp_quality.o' libtool=no \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webp_quality_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o webp_quality-webp_quality.o `test -f 'webp_quality.c' || echo '$(srcdir)/'`webp_quality.c - -webp_quality-webp_quality.obj: webp_quality.c - $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webp_quality_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT webp_quality-webp_quality.obj -MD -MP -MF $(DEPDIR)/webp_quality-webp_quality.Tpo -c -o webp_quality-webp_quality.obj `if test -f 'webp_quality.c'; then $(CYGPATH_W) 'webp_quality.c'; else $(CYGPATH_W) '$(srcdir)/webp_quality.c'; fi` - $(AM_V_at)$(am__mv) $(DEPDIR)/webp_quality-webp_quality.Tpo $(DEPDIR)/webp_quality-webp_quality.Po -# $(AM_V_CC)source='webp_quality.c' object='webp_quality-webp_quality.obj' libtool=no \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webp_quality_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o webp_quality-webp_quality.obj `if test -f 'webp_quality.c'; then $(CYGPATH_W) 'webp_quality.c'; else $(CYGPATH_W) '$(srcdir)/webp_quality.c'; fi` - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs - -ID: $(am__tagged_files) - $(am__define_uniq_tagged_files); mkid -fID $$unique -tags: tags-am -TAGS: tags - -tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) - set x; \ - here=`pwd`; \ - $(am__define_uniq_tagged_files); \ - shift; \ - if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ - test -n "$$unique" || unique=$$empty_fix; \ - if test $$# -gt 0; then \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - "$$@" $$unique; \ - else \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$unique; \ - fi; \ - fi -ctags: ctags-am - -CTAGS: ctags -ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) - $(am__define_uniq_tagged_files); \ - test -z "$(CTAGS_ARGS)$$unique" \ - || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$unique - -GTAGS: - here=`$(am__cd) $(top_builddir) && pwd` \ - && $(am__cd) $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) "$$here" -cscopelist: cscopelist-am - -cscopelist-am: $(am__tagged_files) - list='$(am__tagged_files)'; \ - case "$(srcdir)" in \ - [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ - *) sdir=$(subdir)/$(srcdir) ;; \ - esac; \ - for i in $$list; do \ - if test -f "$$i"; then \ - echo "$(subdir)/$$i"; \ - else \ - echo "$$sdir/$$i"; \ - fi; \ - done >> $(top_builddir)/cscope.files - -distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - -distdir: $(BUILT_SOURCES) - $(MAKE) $(AM_MAKEFLAGS) distdir-am - -distdir-am: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - list='$(DISTFILES)'; \ - dist_files=`for file in $$list; do echo $$file; done | \ - sed -e "s|^$$srcdirstrip/||;t" \ - -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ - case $$dist_files in \ - */*) $(MKDIR_P) `echo "$$dist_files" | \ - sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ - sort -u` ;; \ - esac; \ - for file in $$dist_files; do \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - if test -d $$d/$$file; then \ - dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test -d "$(distdir)/$$file"; then \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ - else \ - test -f "$(distdir)/$$file" \ - || cp -p $$d/$$file "$(distdir)/$$file" \ - || exit 1; \ - fi; \ - done -check-am: all-am -check: check-am -all-am: Makefile $(PROGRAMS) $(LTLIBRARIES) $(HEADERS) -installdirs: -install: install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-am -install-strip: - if test -z '$(STRIP)'; then \ - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - install; \ - else \ - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ - fi -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-am - -clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ - clean-noinstPROGRAMS mostlyclean-am - -distclean: distclean-am - -rm -f ./$(DEPDIR)/get_disto-get_disto.Po - -rm -f ./$(DEPDIR)/libwebpextras_la-extras.Plo - -rm -f ./$(DEPDIR)/libwebpextras_la-quality_estimate.Plo - -rm -f ./$(DEPDIR)/vwebp_sdl-vwebp_sdl.Po - -rm -f ./$(DEPDIR)/vwebp_sdl-webp_to_sdl.Po - -rm -f ./$(DEPDIR)/webp_quality-webp_quality.Po - -rm -f Makefile -distclean-am: clean-am distclean-compile distclean-generic \ - distclean-tags - -dvi: dvi-am - -dvi-am: - -html: html-am - -html-am: - -info: info-am - -info-am: - -install-data-am: - -install-dvi: install-dvi-am - -install-dvi-am: - -install-exec-am: - -install-html: install-html-am - -install-html-am: - -install-info: install-info-am - -install-info-am: - -install-man: - -install-pdf: install-pdf-am - -install-pdf-am: - -install-ps: install-ps-am - -install-ps-am: - -installcheck-am: - -maintainer-clean: maintainer-clean-am - -rm -f ./$(DEPDIR)/get_disto-get_disto.Po - -rm -f ./$(DEPDIR)/libwebpextras_la-extras.Plo - -rm -f ./$(DEPDIR)/libwebpextras_la-quality_estimate.Plo - -rm -f ./$(DEPDIR)/vwebp_sdl-vwebp_sdl.Po - -rm -f ./$(DEPDIR)/vwebp_sdl-webp_to_sdl.Po - -rm -f ./$(DEPDIR)/webp_quality-webp_quality.Po - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-compile mostlyclean-generic \ - mostlyclean-libtool - -pdf: pdf-am - -pdf-am: - -ps: ps-am - -ps-am: - -uninstall-am: - -.MAKE: install-am install-strip - -.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ - clean-generic clean-libtool clean-noinstLTLIBRARIES \ - clean-noinstPROGRAMS cscopelist-am ctags ctags-am distclean \ - distclean-compile distclean-generic distclean-libtool \ - distclean-tags distdir dvi dvi-am html html-am info info-am \ - install install-am install-data install-data-am install-dvi \ - install-dvi-am install-exec install-exec-am install-html \ - install-html-am install-info install-info-am install-man \ - install-pdf install-pdf-am install-ps install-ps-am \ - install-strip installcheck installcheck-am installdirs \ - maintainer-clean maintainer-clean-generic mostlyclean \ - mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ - pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am - -.PRECIOUS: Makefile - - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/Extended/libwebp/extras/Makefile.am b/Extended/libwebp/extras/Makefile.am deleted file mode 100644 index 7e29888..0000000 --- a/Extended/libwebp/extras/Makefile.am +++ /dev/null @@ -1,44 +0,0 @@ -AM_CPPFLAGS += -I$(top_builddir) -I$(top_srcdir) -AM_CPPFLAGS += -I$(top_builddir)/src -I$(top_srcdir)/src -noinst_LTLIBRARIES = libwebpextras.la - -noinst_HEADERS = -noinst_HEADERS += ../src/webp/types.h - -libwebpextras_la_SOURCES = -libwebpextras_la_SOURCES += extras.c extras.h quality_estimate.c - -libwebpextras_la_CPPFLAGS = $(AM_CPPFLAGS) -libwebpextras_la_LDFLAGS = -lm -libwebpextras_la_LIBADD = ../src/libwebp.la - -noinst_PROGRAMS = -noinst_PROGRAMS += webp_quality -if BUILD_DEMUX - noinst_PROGRAMS += get_disto -endif -if BUILD_VWEBP_SDL - noinst_PROGRAMS += vwebp_sdl -endif - -get_disto_SOURCES = get_disto.c -get_disto_CPPFLAGS = $(AM_CPPFLAGS) -get_disto_LDADD = -get_disto_LDADD += ../imageio/libimageio_util.la -get_disto_LDADD += ../imageio/libimagedec.la -get_disto_LDADD += ../src/libwebp.la -get_disto_LDADD += $(PNG_LIBS) $(JPEG_LIBS) $(TIFF_LIBS) - -webp_quality_SOURCES = webp_quality.c -webp_quality_CPPFLAGS = $(AM_CPPFLAGS) -webp_quality_LDADD = -webp_quality_LDADD += ../imageio/libimageio_util.la -webp_quality_LDADD += libwebpextras.la -webp_quality_LDADD += ../src/libwebp.la - -vwebp_sdl_SOURCES = vwebp_sdl.c webp_to_sdl.c webp_to_sdl.h -vwebp_sdl_CPPFLAGS = $(AM_CPPFLAGS) $(SDL_INCLUDES) -vwebp_sdl_LDADD = -vwebp_sdl_LDADD += ../imageio/libimageio_util.la -vwebp_sdl_LDADD += ../src/libwebp.la -vwebp_sdl_LDADD += $(SDL_LIBS) diff --git a/Extended/libwebp/extras/Makefile.in b/Extended/libwebp/extras/Makefile.in deleted file mode 100644 index f608f4b..0000000 --- a/Extended/libwebp/extras/Makefile.in +++ /dev/null @@ -1,784 +0,0 @@ -# Makefile.in generated by automake 1.16.1 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994-2018 Free Software Foundation, Inc. - -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -@SET_MAKE@ - - - -VPATH = @srcdir@ -am__is_gnu_make = { \ - if test -z '$(MAKELEVEL)'; then \ - false; \ - elif test -n '$(MAKE_HOST)'; then \ - true; \ - elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ - true; \ - else \ - false; \ - fi; \ -} -am__make_running_with_option = \ - case $${target_option-} in \ - ?) ;; \ - *) echo "am__make_running_with_option: internal error: invalid" \ - "target option '$${target_option-}' specified" >&2; \ - exit 1;; \ - esac; \ - has_opt=no; \ - sane_makeflags=$$MAKEFLAGS; \ - if $(am__is_gnu_make); then \ - sane_makeflags=$$MFLAGS; \ - else \ - case $$MAKEFLAGS in \ - *\\[\ \ ]*) \ - bs=\\; \ - sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ - | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ - esac; \ - fi; \ - skip_next=no; \ - strip_trailopt () \ - { \ - flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ - }; \ - for flg in $$sane_makeflags; do \ - test $$skip_next = yes && { skip_next=no; continue; }; \ - case $$flg in \ - *=*|--*) continue;; \ - -*I) strip_trailopt 'I'; skip_next=yes;; \ - -*I?*) strip_trailopt 'I';; \ - -*O) strip_trailopt 'O'; skip_next=yes;; \ - -*O?*) strip_trailopt 'O';; \ - -*l) strip_trailopt 'l'; skip_next=yes;; \ - -*l?*) strip_trailopt 'l';; \ - -[dEDm]) skip_next=yes;; \ - -[JT]) skip_next=yes;; \ - esac; \ - case $$flg in \ - *$$target_option*) has_opt=yes; break;; \ - esac; \ - done; \ - test $$has_opt = yes -am__make_dryrun = (target_option=n; $(am__make_running_with_option)) -am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) -pkgdatadir = $(datadir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkglibexecdir = $(libexecdir)/@PACKAGE@ -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = @build@ -host_triplet = @host@ -noinst_PROGRAMS = webp_quality$(EXEEXT) $(am__EXEEXT_1) \ - $(am__EXEEXT_2) -@BUILD_DEMUX_TRUE@am__append_1 = get_disto -@BUILD_VWEBP_SDL_TRUE@am__append_2 = vwebp_sdl -subdir = extras -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pthread.m4 \ - $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ - $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ - $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ - $(am__DIST_COMMON) -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = $(top_builddir)/src/webp/config.h -CONFIG_CLEAN_FILES = -CONFIG_CLEAN_VPATH_FILES = -@BUILD_DEMUX_TRUE@am__EXEEXT_1 = get_disto$(EXEEXT) -@BUILD_VWEBP_SDL_TRUE@am__EXEEXT_2 = vwebp_sdl$(EXEEXT) -PROGRAMS = $(noinst_PROGRAMS) -LTLIBRARIES = $(noinst_LTLIBRARIES) -libwebpextras_la_DEPENDENCIES = ../src/libwebp.la -am_libwebpextras_la_OBJECTS = libwebpextras_la-extras.lo \ - libwebpextras_la-quality_estimate.lo -libwebpextras_la_OBJECTS = $(am_libwebpextras_la_OBJECTS) -AM_V_lt = $(am__v_lt_@AM_V@) -am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) -am__v_lt_0 = --silent -am__v_lt_1 = -libwebpextras_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ - $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ - $(AM_CFLAGS) $(CFLAGS) $(libwebpextras_la_LDFLAGS) $(LDFLAGS) \ - -o $@ -am_get_disto_OBJECTS = get_disto-get_disto.$(OBJEXT) -get_disto_OBJECTS = $(am_get_disto_OBJECTS) -am__DEPENDENCIES_1 = -get_disto_DEPENDENCIES = ../imageio/libimageio_util.la \ - ../imageio/libimagedec.la ../src/libwebp.la \ - $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ - $(am__DEPENDENCIES_1) -am_vwebp_sdl_OBJECTS = vwebp_sdl-vwebp_sdl.$(OBJEXT) \ - vwebp_sdl-webp_to_sdl.$(OBJEXT) -vwebp_sdl_OBJECTS = $(am_vwebp_sdl_OBJECTS) -vwebp_sdl_DEPENDENCIES = ../imageio/libimageio_util.la \ - ../src/libwebp.la $(am__DEPENDENCIES_1) -am_webp_quality_OBJECTS = webp_quality-webp_quality.$(OBJEXT) -webp_quality_OBJECTS = $(am_webp_quality_OBJECTS) -webp_quality_DEPENDENCIES = ../imageio/libimageio_util.la \ - libwebpextras.la ../src/libwebp.la -AM_V_P = $(am__v_P_@AM_V@) -am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) -am__v_P_0 = false -am__v_P_1 = : -AM_V_GEN = $(am__v_GEN_@AM_V@) -am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) -am__v_GEN_0 = @echo " GEN " $@; -am__v_GEN_1 = -AM_V_at = $(am__v_at_@AM_V@) -am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) -am__v_at_0 = @ -am__v_at_1 = -DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/src/webp -depcomp = $(SHELL) $(top_srcdir)/depcomp -am__maybe_remake_depfiles = depfiles -am__depfiles_remade = ./$(DEPDIR)/get_disto-get_disto.Po \ - ./$(DEPDIR)/libwebpextras_la-extras.Plo \ - ./$(DEPDIR)/libwebpextras_la-quality_estimate.Plo \ - ./$(DEPDIR)/vwebp_sdl-vwebp_sdl.Po \ - ./$(DEPDIR)/vwebp_sdl-webp_to_sdl.Po \ - ./$(DEPDIR)/webp_quality-webp_quality.Po -am__mv = mv -f -COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ - $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CFLAGS) $(CFLAGS) -AM_V_CC = $(am__v_CC_@AM_V@) -am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) -am__v_CC_0 = @echo " CC " $@; -am__v_CC_1 = -CCLD = $(CC) -LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ - $(AM_LDFLAGS) $(LDFLAGS) -o $@ -AM_V_CCLD = $(am__v_CCLD_@AM_V@) -am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) -am__v_CCLD_0 = @echo " CCLD " $@; -am__v_CCLD_1 = -SOURCES = $(libwebpextras_la_SOURCES) $(get_disto_SOURCES) \ - $(vwebp_sdl_SOURCES) $(webp_quality_SOURCES) -DIST_SOURCES = $(libwebpextras_la_SOURCES) $(get_disto_SOURCES) \ - $(vwebp_sdl_SOURCES) $(webp_quality_SOURCES) -am__can_run_installinfo = \ - case $$AM_UPDATE_INFO_DIR in \ - n|no|NO) false;; \ - *) (install-info --version) >/dev/null 2>&1;; \ - esac -HEADERS = $(noinst_HEADERS) -am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) -# Read a list of newline-separated strings from the standard input, -# and print each of them once, without duplicates. Input order is -# *not* preserved. -am__uniquify_input = $(AWK) '\ - BEGIN { nonempty = 0; } \ - { items[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in items) print i; }; } \ -' -# Make sure the list of sources is unique. This is necessary because, -# e.g., the same source file might be shared among _SOURCES variables -# for different programs/libraries. -am__define_uniq_tagged_files = \ - list='$(am__tagged_files)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | $(am__uniquify_input)` -ETAGS = etags -CTAGS = ctags -am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = @ACLOCAL@ -AMTAR = @AMTAR@ -AM_CFLAGS = @AM_CFLAGS@ -AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_builddir) -I$(top_srcdir) \ - -I$(top_builddir)/src -I$(top_srcdir)/src -AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ -AR = @AR@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -CC = @CC@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -DLLTOOL = @DLLTOOL@ -DSYMUTIL = @DSYMUTIL@ -DUMPBIN = @DUMPBIN@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -FGREP = @FGREP@ -GIF_INCLUDES = @GIF_INCLUDES@ -GIF_LIBS = @GIF_LIBS@ -GL_INCLUDES = @GL_INCLUDES@ -GL_LIBS = @GL_LIBS@ -GREP = @GREP@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -JPEG_INCLUDES = @JPEG_INCLUDES@ -JPEG_LIBS = @JPEG_LIBS@ -LD = @LD@ -LDFLAGS = @LDFLAGS@ -LIBOBJS = @LIBOBJS@ -LIBPNG_CONFIG = @LIBPNG_CONFIG@ -LIBS = @LIBS@ -LIBSDL_CONFIG = @LIBSDL_CONFIG@ -LIBTOOL = @LIBTOOL@ -LIPO = @LIPO@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ -MAKEINFO = @MAKEINFO@ -MANIFEST_TOOL = @MANIFEST_TOOL@ -MKDIR_P = @MKDIR_P@ -NEON_FLAGS = @NEON_FLAGS@ -NM = @NM@ -NMEDIT = @NMEDIT@ -OBJDUMP = @OBJDUMP@ -OBJEXT = @OBJEXT@ -OTOOL = @OTOOL@ -OTOOL64 = @OTOOL64@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_URL = @PACKAGE_URL@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -PNG_INCLUDES = @PNG_INCLUDES@ -PNG_LIBS = @PNG_LIBS@ -PTHREAD_CC = @PTHREAD_CC@ -PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ -PTHREAD_LIBS = @PTHREAD_LIBS@ -RANLIB = @RANLIB@ -SDL_INCLUDES = @SDL_INCLUDES@ -SDL_LIBS = @SDL_LIBS@ -SED = @SED@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -SSE2_FLAGS = @SSE2_FLAGS@ -SSE41_FLAGS = @SSE41_FLAGS@ -STRIP = @STRIP@ -TIFF_INCLUDES = @TIFF_INCLUDES@ -TIFF_LIBS = @TIFF_LIBS@ -USE_SWAP_16BIT_CSP = @USE_SWAP_16BIT_CSP@ -VERSION = @VERSION@ -abs_builddir = @abs_builddir@ -abs_srcdir = @abs_srcdir@ -abs_top_builddir = @abs_top_builddir@ -abs_top_srcdir = @abs_top_srcdir@ -ac_ct_AR = @ac_ct_AR@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ -am__include = @am__include@ -am__leading_dot = @am__leading_dot@ -am__quote = @am__quote@ -am__tar = @am__tar@ -am__untar = @am__untar@ -ax_pthread_config = @ax_pthread_config@ -bindir = @bindir@ -build = @build@ -build_alias = @build_alias@ -build_cpu = @build_cpu@ -build_os = @build_os@ -build_vendor = @build_vendor@ -builddir = @builddir@ -datadir = @datadir@ -datarootdir = @datarootdir@ -docdir = @docdir@ -dvidir = @dvidir@ -exec_prefix = @exec_prefix@ -host = @host@ -host_alias = @host_alias@ -host_cpu = @host_cpu@ -host_os = @host_os@ -host_vendor = @host_vendor@ -htmldir = @htmldir@ -includedir = @includedir@ -infodir = @infodir@ -install_sh = @install_sh@ -libdir = @libdir@ -libexecdir = @libexecdir@ -localedir = @localedir@ -localstatedir = @localstatedir@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -oldincludedir = @oldincludedir@ -pdfdir = @pdfdir@ -pkgconfigdir = @pkgconfigdir@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -psdir = @psdir@ -runstatedir = @runstatedir@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -srcdir = @srcdir@ -sysconfdir = @sysconfdir@ -target_alias = @target_alias@ -top_build_prefix = @top_build_prefix@ -top_builddir = @top_builddir@ -top_srcdir = @top_srcdir@ -noinst_LTLIBRARIES = libwebpextras.la -noinst_HEADERS = ../src/webp/types.h -libwebpextras_la_SOURCES = extras.c extras.h quality_estimate.c -libwebpextras_la_CPPFLAGS = $(AM_CPPFLAGS) -libwebpextras_la_LDFLAGS = -lm -libwebpextras_la_LIBADD = ../src/libwebp.la -get_disto_SOURCES = get_disto.c -get_disto_CPPFLAGS = $(AM_CPPFLAGS) -get_disto_LDADD = ../imageio/libimageio_util.la \ - ../imageio/libimagedec.la ../src/libwebp.la $(PNG_LIBS) \ - $(JPEG_LIBS) $(TIFF_LIBS) -webp_quality_SOURCES = webp_quality.c -webp_quality_CPPFLAGS = $(AM_CPPFLAGS) -webp_quality_LDADD = ../imageio/libimageio_util.la libwebpextras.la \ - ../src/libwebp.la -vwebp_sdl_SOURCES = vwebp_sdl.c webp_to_sdl.c webp_to_sdl.h -vwebp_sdl_CPPFLAGS = $(AM_CPPFLAGS) $(SDL_INCLUDES) -vwebp_sdl_LDADD = ../imageio/libimageio_util.la ../src/libwebp.la \ - $(SDL_LIBS) -all: all-am - -.SUFFIXES: -.SUFFIXES: .c .lo .o .obj -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ - && { if test -f $@; then exit 0; else break; fi; }; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign extras/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --foreign extras/Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(am__aclocal_m4_deps): - -clean-noinstPROGRAMS: - @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ - echo " rm -f" $$list; \ - rm -f $$list || exit $$?; \ - test -n "$(EXEEXT)" || exit 0; \ - list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ - echo " rm -f" $$list; \ - rm -f $$list - -clean-noinstLTLIBRARIES: - -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) - @list='$(noinst_LTLIBRARIES)'; \ - locs=`for p in $$list; do echo $$p; done | \ - sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ - sort -u`; \ - test -z "$$locs" || { \ - echo rm -f $${locs}; \ - rm -f $${locs}; \ - } - -libwebpextras.la: $(libwebpextras_la_OBJECTS) $(libwebpextras_la_DEPENDENCIES) $(EXTRA_libwebpextras_la_DEPENDENCIES) - $(AM_V_CCLD)$(libwebpextras_la_LINK) $(libwebpextras_la_OBJECTS) $(libwebpextras_la_LIBADD) $(LIBS) - -get_disto$(EXEEXT): $(get_disto_OBJECTS) $(get_disto_DEPENDENCIES) $(EXTRA_get_disto_DEPENDENCIES) - @rm -f get_disto$(EXEEXT) - $(AM_V_CCLD)$(LINK) $(get_disto_OBJECTS) $(get_disto_LDADD) $(LIBS) - -vwebp_sdl$(EXEEXT): $(vwebp_sdl_OBJECTS) $(vwebp_sdl_DEPENDENCIES) $(EXTRA_vwebp_sdl_DEPENDENCIES) - @rm -f vwebp_sdl$(EXEEXT) - $(AM_V_CCLD)$(LINK) $(vwebp_sdl_OBJECTS) $(vwebp_sdl_LDADD) $(LIBS) - -webp_quality$(EXEEXT): $(webp_quality_OBJECTS) $(webp_quality_DEPENDENCIES) $(EXTRA_webp_quality_DEPENDENCIES) - @rm -f webp_quality$(EXEEXT) - $(AM_V_CCLD)$(LINK) $(webp_quality_OBJECTS) $(webp_quality_LDADD) $(LIBS) - -mostlyclean-compile: - -rm -f *.$(OBJEXT) - -distclean-compile: - -rm -f *.tab.c - -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/get_disto-get_disto.Po@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwebpextras_la-extras.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwebpextras_la-quality_estimate.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vwebp_sdl-vwebp_sdl.Po@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vwebp_sdl-webp_to_sdl.Po@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webp_quality-webp_quality.Po@am__quote@ # am--include-marker - -$(am__depfiles_remade): - @$(MKDIR_P) $(@D) - @echo '# dummy' >$@-t && $(am__mv) $@-t $@ - -am--depfiles: $(am__depfiles_remade) - -.c.o: -@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ -@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ -@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< - -.c.obj: -@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ -@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ -@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` - -.c.lo: -@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ -@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ -@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< - -libwebpextras_la-extras.lo: extras.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpextras_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwebpextras_la-extras.lo -MD -MP -MF $(DEPDIR)/libwebpextras_la-extras.Tpo -c -o libwebpextras_la-extras.lo `test -f 'extras.c' || echo '$(srcdir)/'`extras.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpextras_la-extras.Tpo $(DEPDIR)/libwebpextras_la-extras.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='extras.c' object='libwebpextras_la-extras.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpextras_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwebpextras_la-extras.lo `test -f 'extras.c' || echo '$(srcdir)/'`extras.c - -libwebpextras_la-quality_estimate.lo: quality_estimate.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpextras_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwebpextras_la-quality_estimate.lo -MD -MP -MF $(DEPDIR)/libwebpextras_la-quality_estimate.Tpo -c -o libwebpextras_la-quality_estimate.lo `test -f 'quality_estimate.c' || echo '$(srcdir)/'`quality_estimate.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpextras_la-quality_estimate.Tpo $(DEPDIR)/libwebpextras_la-quality_estimate.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='quality_estimate.c' object='libwebpextras_la-quality_estimate.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpextras_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwebpextras_la-quality_estimate.lo `test -f 'quality_estimate.c' || echo '$(srcdir)/'`quality_estimate.c - -get_disto-get_disto.o: get_disto.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(get_disto_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT get_disto-get_disto.o -MD -MP -MF $(DEPDIR)/get_disto-get_disto.Tpo -c -o get_disto-get_disto.o `test -f 'get_disto.c' || echo '$(srcdir)/'`get_disto.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/get_disto-get_disto.Tpo $(DEPDIR)/get_disto-get_disto.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='get_disto.c' object='get_disto-get_disto.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(get_disto_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o get_disto-get_disto.o `test -f 'get_disto.c' || echo '$(srcdir)/'`get_disto.c - -get_disto-get_disto.obj: get_disto.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(get_disto_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT get_disto-get_disto.obj -MD -MP -MF $(DEPDIR)/get_disto-get_disto.Tpo -c -o get_disto-get_disto.obj `if test -f 'get_disto.c'; then $(CYGPATH_W) 'get_disto.c'; else $(CYGPATH_W) '$(srcdir)/get_disto.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/get_disto-get_disto.Tpo $(DEPDIR)/get_disto-get_disto.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='get_disto.c' object='get_disto-get_disto.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(get_disto_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o get_disto-get_disto.obj `if test -f 'get_disto.c'; then $(CYGPATH_W) 'get_disto.c'; else $(CYGPATH_W) '$(srcdir)/get_disto.c'; fi` - -vwebp_sdl-vwebp_sdl.o: vwebp_sdl.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(vwebp_sdl_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT vwebp_sdl-vwebp_sdl.o -MD -MP -MF $(DEPDIR)/vwebp_sdl-vwebp_sdl.Tpo -c -o vwebp_sdl-vwebp_sdl.o `test -f 'vwebp_sdl.c' || echo '$(srcdir)/'`vwebp_sdl.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/vwebp_sdl-vwebp_sdl.Tpo $(DEPDIR)/vwebp_sdl-vwebp_sdl.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='vwebp_sdl.c' object='vwebp_sdl-vwebp_sdl.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(vwebp_sdl_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o vwebp_sdl-vwebp_sdl.o `test -f 'vwebp_sdl.c' || echo '$(srcdir)/'`vwebp_sdl.c - -vwebp_sdl-vwebp_sdl.obj: vwebp_sdl.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(vwebp_sdl_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT vwebp_sdl-vwebp_sdl.obj -MD -MP -MF $(DEPDIR)/vwebp_sdl-vwebp_sdl.Tpo -c -o vwebp_sdl-vwebp_sdl.obj `if test -f 'vwebp_sdl.c'; then $(CYGPATH_W) 'vwebp_sdl.c'; else $(CYGPATH_W) '$(srcdir)/vwebp_sdl.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/vwebp_sdl-vwebp_sdl.Tpo $(DEPDIR)/vwebp_sdl-vwebp_sdl.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='vwebp_sdl.c' object='vwebp_sdl-vwebp_sdl.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(vwebp_sdl_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o vwebp_sdl-vwebp_sdl.obj `if test -f 'vwebp_sdl.c'; then $(CYGPATH_W) 'vwebp_sdl.c'; else $(CYGPATH_W) '$(srcdir)/vwebp_sdl.c'; fi` - -vwebp_sdl-webp_to_sdl.o: webp_to_sdl.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(vwebp_sdl_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT vwebp_sdl-webp_to_sdl.o -MD -MP -MF $(DEPDIR)/vwebp_sdl-webp_to_sdl.Tpo -c -o vwebp_sdl-webp_to_sdl.o `test -f 'webp_to_sdl.c' || echo '$(srcdir)/'`webp_to_sdl.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/vwebp_sdl-webp_to_sdl.Tpo $(DEPDIR)/vwebp_sdl-webp_to_sdl.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='webp_to_sdl.c' object='vwebp_sdl-webp_to_sdl.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(vwebp_sdl_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o vwebp_sdl-webp_to_sdl.o `test -f 'webp_to_sdl.c' || echo '$(srcdir)/'`webp_to_sdl.c - -vwebp_sdl-webp_to_sdl.obj: webp_to_sdl.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(vwebp_sdl_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT vwebp_sdl-webp_to_sdl.obj -MD -MP -MF $(DEPDIR)/vwebp_sdl-webp_to_sdl.Tpo -c -o vwebp_sdl-webp_to_sdl.obj `if test -f 'webp_to_sdl.c'; then $(CYGPATH_W) 'webp_to_sdl.c'; else $(CYGPATH_W) '$(srcdir)/webp_to_sdl.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/vwebp_sdl-webp_to_sdl.Tpo $(DEPDIR)/vwebp_sdl-webp_to_sdl.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='webp_to_sdl.c' object='vwebp_sdl-webp_to_sdl.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(vwebp_sdl_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o vwebp_sdl-webp_to_sdl.obj `if test -f 'webp_to_sdl.c'; then $(CYGPATH_W) 'webp_to_sdl.c'; else $(CYGPATH_W) '$(srcdir)/webp_to_sdl.c'; fi` - -webp_quality-webp_quality.o: webp_quality.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webp_quality_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT webp_quality-webp_quality.o -MD -MP -MF $(DEPDIR)/webp_quality-webp_quality.Tpo -c -o webp_quality-webp_quality.o `test -f 'webp_quality.c' || echo '$(srcdir)/'`webp_quality.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webp_quality-webp_quality.Tpo $(DEPDIR)/webp_quality-webp_quality.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='webp_quality.c' object='webp_quality-webp_quality.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webp_quality_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o webp_quality-webp_quality.o `test -f 'webp_quality.c' || echo '$(srcdir)/'`webp_quality.c - -webp_quality-webp_quality.obj: webp_quality.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webp_quality_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT webp_quality-webp_quality.obj -MD -MP -MF $(DEPDIR)/webp_quality-webp_quality.Tpo -c -o webp_quality-webp_quality.obj `if test -f 'webp_quality.c'; then $(CYGPATH_W) 'webp_quality.c'; else $(CYGPATH_W) '$(srcdir)/webp_quality.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webp_quality-webp_quality.Tpo $(DEPDIR)/webp_quality-webp_quality.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='webp_quality.c' object='webp_quality-webp_quality.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webp_quality_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o webp_quality-webp_quality.obj `if test -f 'webp_quality.c'; then $(CYGPATH_W) 'webp_quality.c'; else $(CYGPATH_W) '$(srcdir)/webp_quality.c'; fi` - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs - -ID: $(am__tagged_files) - $(am__define_uniq_tagged_files); mkid -fID $$unique -tags: tags-am -TAGS: tags - -tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) - set x; \ - here=`pwd`; \ - $(am__define_uniq_tagged_files); \ - shift; \ - if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ - test -n "$$unique" || unique=$$empty_fix; \ - if test $$# -gt 0; then \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - "$$@" $$unique; \ - else \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$unique; \ - fi; \ - fi -ctags: ctags-am - -CTAGS: ctags -ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) - $(am__define_uniq_tagged_files); \ - test -z "$(CTAGS_ARGS)$$unique" \ - || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$unique - -GTAGS: - here=`$(am__cd) $(top_builddir) && pwd` \ - && $(am__cd) $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) "$$here" -cscopelist: cscopelist-am - -cscopelist-am: $(am__tagged_files) - list='$(am__tagged_files)'; \ - case "$(srcdir)" in \ - [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ - *) sdir=$(subdir)/$(srcdir) ;; \ - esac; \ - for i in $$list; do \ - if test -f "$$i"; then \ - echo "$(subdir)/$$i"; \ - else \ - echo "$$sdir/$$i"; \ - fi; \ - done >> $(top_builddir)/cscope.files - -distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - -distdir: $(BUILT_SOURCES) - $(MAKE) $(AM_MAKEFLAGS) distdir-am - -distdir-am: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - list='$(DISTFILES)'; \ - dist_files=`for file in $$list; do echo $$file; done | \ - sed -e "s|^$$srcdirstrip/||;t" \ - -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ - case $$dist_files in \ - */*) $(MKDIR_P) `echo "$$dist_files" | \ - sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ - sort -u` ;; \ - esac; \ - for file in $$dist_files; do \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - if test -d $$d/$$file; then \ - dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test -d "$(distdir)/$$file"; then \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ - else \ - test -f "$(distdir)/$$file" \ - || cp -p $$d/$$file "$(distdir)/$$file" \ - || exit 1; \ - fi; \ - done -check-am: all-am -check: check-am -all-am: Makefile $(PROGRAMS) $(LTLIBRARIES) $(HEADERS) -installdirs: -install: install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-am -install-strip: - if test -z '$(STRIP)'; then \ - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - install; \ - else \ - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ - fi -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-am - -clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ - clean-noinstPROGRAMS mostlyclean-am - -distclean: distclean-am - -rm -f ./$(DEPDIR)/get_disto-get_disto.Po - -rm -f ./$(DEPDIR)/libwebpextras_la-extras.Plo - -rm -f ./$(DEPDIR)/libwebpextras_la-quality_estimate.Plo - -rm -f ./$(DEPDIR)/vwebp_sdl-vwebp_sdl.Po - -rm -f ./$(DEPDIR)/vwebp_sdl-webp_to_sdl.Po - -rm -f ./$(DEPDIR)/webp_quality-webp_quality.Po - -rm -f Makefile -distclean-am: clean-am distclean-compile distclean-generic \ - distclean-tags - -dvi: dvi-am - -dvi-am: - -html: html-am - -html-am: - -info: info-am - -info-am: - -install-data-am: - -install-dvi: install-dvi-am - -install-dvi-am: - -install-exec-am: - -install-html: install-html-am - -install-html-am: - -install-info: install-info-am - -install-info-am: - -install-man: - -install-pdf: install-pdf-am - -install-pdf-am: - -install-ps: install-ps-am - -install-ps-am: - -installcheck-am: - -maintainer-clean: maintainer-clean-am - -rm -f ./$(DEPDIR)/get_disto-get_disto.Po - -rm -f ./$(DEPDIR)/libwebpextras_la-extras.Plo - -rm -f ./$(DEPDIR)/libwebpextras_la-quality_estimate.Plo - -rm -f ./$(DEPDIR)/vwebp_sdl-vwebp_sdl.Po - -rm -f ./$(DEPDIR)/vwebp_sdl-webp_to_sdl.Po - -rm -f ./$(DEPDIR)/webp_quality-webp_quality.Po - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-compile mostlyclean-generic \ - mostlyclean-libtool - -pdf: pdf-am - -pdf-am: - -ps: ps-am - -ps-am: - -uninstall-am: - -.MAKE: install-am install-strip - -.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ - clean-generic clean-libtool clean-noinstLTLIBRARIES \ - clean-noinstPROGRAMS cscopelist-am ctags ctags-am distclean \ - distclean-compile distclean-generic distclean-libtool \ - distclean-tags distdir dvi dvi-am html html-am info info-am \ - install install-am install-data install-data-am install-dvi \ - install-dvi-am install-exec install-exec-am install-html \ - install-html-am install-info install-info-am install-man \ - install-pdf install-pdf-am install-ps install-ps-am \ - install-strip installcheck installcheck-am installdirs \ - maintainer-clean maintainer-clean-generic mostlyclean \ - mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ - pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am - -.PRECIOUS: Makefile - - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/Extended/libwebp/extras/extras.c b/Extended/libwebp/extras/extras.c deleted file mode 100644 index cf867f3..0000000 --- a/Extended/libwebp/extras/extras.c +++ /dev/null @@ -1,162 +0,0 @@ -// Copyright 2015 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Additional WebP utilities. -// - -#include "extras/extras.h" -#include "webp/format_constants.h" -#include "src/dsp/dsp.h" - -#include -#include - -#define XTRA_MAJ_VERSION 1 -#define XTRA_MIN_VERSION 1 -#define XTRA_REV_VERSION 0 - -//------------------------------------------------------------------------------ - -int WebPGetExtrasVersion(void) { - return (XTRA_MAJ_VERSION << 16) | (XTRA_MIN_VERSION << 8) | XTRA_REV_VERSION; -} - -//------------------------------------------------------------------------------ - -int WebPImportGray(const uint8_t* gray_data, WebPPicture* pic) { - int y, width, uv_width; - if (pic == NULL || gray_data == NULL) return 0; - pic->colorspace = WEBP_YUV420; - if (!WebPPictureAlloc(pic)) return 0; - width = pic->width; - uv_width = (width + 1) >> 1; - for (y = 0; y < pic->height; ++y) { - memcpy(pic->y + y * pic->y_stride, gray_data, width); - gray_data += width; // <- we could use some 'data_stride' here if needed - if ((y & 1) == 0) { - memset(pic->u + (y >> 1) * pic->uv_stride, 128, uv_width); - memset(pic->v + (y >> 1) * pic->uv_stride, 128, uv_width); - } - } - return 1; -} - -int WebPImportRGB565(const uint8_t* rgb565, WebPPicture* pic) { - int x, y; - uint32_t* dst; - if (pic == NULL || rgb565 == NULL) return 0; - pic->colorspace = WEBP_YUV420; - pic->use_argb = 1; - if (!WebPPictureAlloc(pic)) return 0; - dst = pic->argb; - for (y = 0; y < pic->height; ++y) { - const int width = pic->width; - for (x = 0; x < width; ++x) { -#if defined(WEBP_SWAP_16BIT_CSP) && (WEBP_SWAP_16BIT_CSP == 1) - const uint32_t rg = rgb565[2 * x + 1]; - const uint32_t gb = rgb565[2 * x + 0]; -#else - const uint32_t rg = rgb565[2 * x + 0]; - const uint32_t gb = rgb565[2 * x + 1]; -#endif - uint32_t r = rg & 0xf8; - uint32_t g = ((rg << 5) | (gb >> 3)) & 0xfc; - uint32_t b = (gb << 5); - // dithering - r = r | (r >> 5); - g = g | (g >> 6); - b = b | (b >> 5); - dst[x] = (0xffu << 24) | (r << 16) | (g << 8) | b; - } - rgb565 += 2 * width; - dst += pic->argb_stride; - } - return 1; -} - -int WebPImportRGB4444(const uint8_t* rgb4444, WebPPicture* pic) { - int x, y; - uint32_t* dst; - if (pic == NULL || rgb4444 == NULL) return 0; - pic->colorspace = WEBP_YUV420; - pic->use_argb = 1; - if (!WebPPictureAlloc(pic)) return 0; - dst = pic->argb; - for (y = 0; y < pic->height; ++y) { - const int width = pic->width; - for (x = 0; x < width; ++x) { -#if defined(WEBP_SWAP_16BIT_CSP) && (WEBP_SWAP_16BIT_CSP == 1) - const uint32_t rg = rgb4444[2 * x + 1]; - const uint32_t ba = rgb4444[2 * x + 0]; -#else - const uint32_t rg = rgb4444[2 * x + 0]; - const uint32_t ba = rgb4444[2 * x + 1]; -#endif - uint32_t r = rg & 0xf0; - uint32_t g = (rg << 4); - uint32_t b = (ba & 0xf0); - uint32_t a = (ba << 4); - // dithering - r = r | (r >> 4); - g = g | (g >> 4); - b = b | (b >> 4); - a = a | (a >> 4); - dst[x] = (a << 24) | (r << 16) | (g << 8) | b; - } - rgb4444 += 2 * width; - dst += pic->argb_stride; - } - return 1; -} - -int WebPImportColorMappedARGB(const uint8_t* indexed, int indexed_stride, - const uint32_t palette[], int palette_size, - WebPPicture* pic) { - int x, y; - uint32_t* dst; - // 256 as the input buffer is uint8_t. - assert(MAX_PALETTE_SIZE <= 256); - if (pic == NULL || indexed == NULL || indexed_stride < pic->width || - palette == NULL || palette_size > MAX_PALETTE_SIZE || palette_size <= 0) { - return 0; - } - pic->use_argb = 1; - if (!WebPPictureAlloc(pic)) return 0; - dst = pic->argb; - for (y = 0; y < pic->height; ++y) { - for (x = 0; x < pic->width; ++x) { - // Make sure we are within the palette. - if (indexed[x] >= palette_size) { - WebPPictureFree(pic); - return 0; - } - dst[x] = palette[indexed[x]]; - } - indexed += indexed_stride; - dst += pic->argb_stride; - } - return 1; -} - -//------------------------------------------------------------------------------ - -int WebPUnmultiplyARGB(WebPPicture* pic) { - int y; - uint32_t* dst; - if (pic == NULL || pic->use_argb != 1 || pic->argb == NULL) return 0; - WebPInitAlphaProcessing(); - dst = pic->argb; - for (y = 0; y < pic->height; ++y) { - WebPMultARGBRow(dst, pic->width, /*inverse=*/1); - dst += pic->argb_stride; - } - return 1; -} - -//------------------------------------------------------------------------------ diff --git a/Extended/libwebp/extras/extras.h b/Extended/libwebp/extras/extras.h deleted file mode 100644 index c084682..0000000 --- a/Extended/libwebp/extras/extras.h +++ /dev/null @@ -1,77 +0,0 @@ -// Copyright 2015 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// - -#ifndef WEBP_EXTRAS_EXTRAS_H_ -#define WEBP_EXTRAS_EXTRAS_H_ - -#include "webp/types.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#include "webp/encode.h" - -#define WEBP_EXTRAS_ABI_VERSION 0x0002 // MAJOR(8b) + MINOR(8b) - -//------------------------------------------------------------------------------ - -// Returns the version number of the extras library, packed in hexadecimal using -// 8bits for each of major/minor/revision. E.g: v2.5.7 is 0x020507. -WEBP_EXTERN int WebPGetExtrasVersion(void); - -//------------------------------------------------------------------------------ -// Ad-hoc colorspace importers. - -// Import luma sample (gray scale image) into 'picture'. The 'picture' -// width and height must be set prior to calling this function. -WEBP_EXTERN int WebPImportGray(const uint8_t* gray, WebPPicture* picture); - -// Import rgb sample in RGB565 packed format into 'picture'. The 'picture' -// width and height must be set prior to calling this function. -WEBP_EXTERN int WebPImportRGB565(const uint8_t* rgb565, WebPPicture* pic); - -// Import rgb sample in RGB4444 packed format into 'picture'. The 'picture' -// width and height must be set prior to calling this function. -WEBP_EXTERN int WebPImportRGB4444(const uint8_t* rgb4444, WebPPicture* pic); - -// Import a color mapped image. The number of colors is less or equal to -// MAX_PALETTE_SIZE. 'pic' must have been initialized. Its content, if any, -// will be discarded. Returns 'false' in case of error, or if indexed[] contains -// invalid indices. -WEBP_EXTERN int -WebPImportColorMappedARGB(const uint8_t* indexed, int indexed_stride, - const uint32_t palette[], int palette_size, - WebPPicture* pic); - -// Convert the ARGB content of 'pic' from associated to unassociated. -// 'pic' can be for instance the result of calling of some WebPPictureImportXXX -// functions, with pic->use_argb set to 'true'. It is assumed (and not checked) -// that the pre-multiplied r/g/b values as less or equal than the alpha value. -// Return false in case of error (invalid parameter, ...). -WEBP_EXTERN int WebPUnmultiplyARGB(WebPPicture* pic); - -//------------------------------------------------------------------------------ - -// Parse a bitstream, search for VP8 (lossy) header and report a -// rough estimation of the quality factor used for compressing the bitstream. -// If the bitstream is in lossless format, the special value '101' is returned. -// Otherwise (lossy bitstream), the returned value is in the range [0..100]. -// Any error (invalid bitstream, animated WebP, incomplete header, etc.) -// will return a value of -1. -WEBP_EXTERN int VP8EstimateQuality(const uint8_t* const data, size_t size); - -//------------------------------------------------------------------------------ - -#ifdef __cplusplus -} // extern "C" -#endif - -#endif // WEBP_EXTRAS_EXTRAS_H_ diff --git a/Extended/libwebp/extras/get_disto.c b/Extended/libwebp/extras/get_disto.c deleted file mode 100644 index 151bead..0000000 --- a/Extended/libwebp/extras/get_disto.c +++ /dev/null @@ -1,355 +0,0 @@ -// Copyright 2016 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Simple tool to load two webp/png/jpg/tiff files and compute PSNR/SSIM. -// This is mostly a wrapper around WebPPictureDistortion(). -// -/* - gcc -o get_disto get_disto.c -O3 -I../ -L../examples -L../imageio \ - -lexample_util -limageio_util -limagedec -lwebp -L/opt/local/lib \ - -lpng -lz -ljpeg -ltiff -lm -lpthread -*/ -// -// Author: Skal (pascal.massimino@gmail.com) - -#include -#include -#include -#include - -#include "webp/encode.h" -#include "imageio/image_dec.h" -#include "imageio/imageio_util.h" -#include "../examples/unicode.h" - -static size_t ReadPicture(const char* const filename, WebPPicture* const pic, - int keep_alpha) { - const uint8_t* data = NULL; - size_t data_size = 0; - WebPImageReader reader = NULL; - int ok = ImgIoUtilReadFile(filename, &data, &data_size); - if (!ok) goto End; - - pic->use_argb = 1; // force ARGB - -#ifdef HAVE_WINCODEC_H - // Try to decode the file using WIC falling back to the other readers for - // e.g., WebP. - ok = ReadPictureWithWIC(filename, pic, keep_alpha, NULL); - if (ok) goto End; -#endif - reader = WebPGuessImageReader(data, data_size); - ok = reader(data, data_size, pic, keep_alpha, NULL); - - End: - if (!ok) { - WFPRINTF(stderr, "Error! Could not process file %s\n", - (const W_CHAR*)filename); - } - free((void*)data); - return ok ? data_size : 0; -} - -static void RescalePlane(uint8_t* plane, int width, int height, - int x_stride, int y_stride, int max) { - const uint32_t factor = (max > 0) ? (255u << 16) / max : 0; - int x, y; - for (y = 0; y < height; ++y) { - uint8_t* const ptr = plane + y * y_stride; - for (x = 0; x < width * x_stride; x += x_stride) { - const uint32_t diff = (ptr[x] * factor + (1 << 15)) >> 16; - ptr[x] = diff; - } - } -} - -// Return the max absolute difference. -static int DiffScaleChannel(uint8_t* src1, int stride1, - const uint8_t* src2, int stride2, - int x_stride, int w, int h, int do_scaling) { - int x, y; - int max = 0; - for (y = 0; y < h; ++y) { - uint8_t* const ptr1 = src1 + y * stride1; - const uint8_t* const ptr2 = src2 + y * stride2; - for (x = 0; x < w * x_stride; x += x_stride) { - const int diff = abs(ptr1[x] - ptr2[x]); - if (diff > max) max = diff; - ptr1[x] = diff; - } - } - - if (do_scaling) RescalePlane(src1, w, h, x_stride, stride1, max); - return max; -} - -//------------------------------------------------------------------------------ -// SSIM calculation. We re-implement these functions here, out of dsp/, to avoid -// breaking the library's hidden visibility. This code duplication avoids the -// bigger annoyance of having to open up internal details of libdsp... - -#define SSIM_KERNEL 3 // total size of the kernel: 2 * SSIM_KERNEL + 1 - -// struct for accumulating statistical moments -typedef struct { - uint32_t w; // sum(w_i) : sum of weights - uint32_t xm, ym; // sum(w_i * x_i), sum(w_i * y_i) - uint32_t xxm, xym, yym; // sum(w_i * x_i * x_i), etc. -} DistoStats; - -// hat-shaped filter. Sum of coefficients is equal to 16. -static const uint32_t kWeight[2 * SSIM_KERNEL + 1] = { 1, 2, 3, 4, 3, 2, 1 }; - -static WEBP_INLINE double SSIMCalculation(const DistoStats* const stats) { - const uint32_t N = stats->w; - const uint32_t w2 = N * N; - const uint32_t C1 = 20 * w2; - const uint32_t C2 = 60 * w2; - const uint32_t C3 = 8 * 8 * w2; // 'dark' limit ~= 6 - const uint64_t xmxm = (uint64_t)stats->xm * stats->xm; - const uint64_t ymym = (uint64_t)stats->ym * stats->ym; - if (xmxm + ymym >= C3) { - const int64_t xmym = (int64_t)stats->xm * stats->ym; - const int64_t sxy = (int64_t)stats->xym * N - xmym; // can be negative - const uint64_t sxx = (uint64_t)stats->xxm * N - xmxm; - const uint64_t syy = (uint64_t)stats->yym * N - ymym; - // we descale by 8 to prevent overflow during the fnum/fden multiply. - const uint64_t num_S = (2 * (uint64_t)(sxy < 0 ? 0 : sxy) + C2) >> 8; - const uint64_t den_S = (sxx + syy + C2) >> 8; - const uint64_t fnum = (2 * xmym + C1) * num_S; - const uint64_t fden = (xmxm + ymym + C1) * den_S; - const double r = (double)fnum / fden; - assert(r >= 0. && r <= 1.0); - return r; - } - return 1.; // area is too dark to contribute meaningfully -} - -static double SSIMGetClipped(const uint8_t* src1, int stride1, - const uint8_t* src2, int stride2, - int xo, int yo, int W, int H) { - DistoStats stats = { 0, 0, 0, 0, 0, 0 }; - const int ymin = (yo - SSIM_KERNEL < 0) ? 0 : yo - SSIM_KERNEL; - const int ymax = (yo + SSIM_KERNEL > H - 1) ? H - 1 : yo + SSIM_KERNEL; - const int xmin = (xo - SSIM_KERNEL < 0) ? 0 : xo - SSIM_KERNEL; - const int xmax = (xo + SSIM_KERNEL > W - 1) ? W - 1 : xo + SSIM_KERNEL; - int x, y; - src1 += ymin * stride1; - src2 += ymin * stride2; - for (y = ymin; y <= ymax; ++y, src1 += stride1, src2 += stride2) { - for (x = xmin; x <= xmax; ++x) { - const uint32_t w = kWeight[SSIM_KERNEL + x - xo] - * kWeight[SSIM_KERNEL + y - yo]; - const uint32_t s1 = src1[x]; - const uint32_t s2 = src2[x]; - stats.w += w; - stats.xm += w * s1; - stats.ym += w * s2; - stats.xxm += w * s1 * s1; - stats.xym += w * s1 * s2; - stats.yym += w * s2 * s2; - } - } - return SSIMCalculation(&stats); -} - -// Compute SSIM-score map. Return -1 in case of error, max diff otherwise. -static int SSIMScaleChannel(uint8_t* src1, int stride1, - const uint8_t* src2, int stride2, - int x_stride, int w, int h, int do_scaling) { - int x, y; - int max = 0; - uint8_t* const plane1 = (uint8_t*)malloc(2 * w * h * sizeof(*plane1)); - uint8_t* const plane2 = plane1 + w * h; - if (plane1 == NULL) return -1; - - // extract plane - for (y = 0; y < h; ++y) { - for (x = 0; x < w; ++x) { - plane1[x + y * w] = src1[x * x_stride + y * stride1]; - plane2[x + y * w] = src2[x * x_stride + y * stride2]; - } - } - for (y = 0; y < h; ++y) { - for (x = 0; x < w; ++x) { - const double ssim = SSIMGetClipped(plane1, w, plane2, w, x, y, w, h); - int diff = (int)(255 * (1. - ssim)); - if (diff < 0) { - diff = 0; - } else if (diff > max) { - max = diff; - } - src1[x * x_stride + y * stride1] = (diff > 255) ? 255u : (uint8_t)diff; - } - } - free(plane1); - - if (do_scaling) RescalePlane(src1, w, h, x_stride, stride1, max); - return max; -} - -// Convert an argb picture to luminance. -static void ConvertToGray(WebPPicture* const pic) { - int x, y; - assert(pic != NULL); - assert(pic->use_argb); - for (y = 0; y < pic->height; ++y) { - uint32_t* const row = &pic->argb[y * pic->argb_stride]; - for (x = 0; x < pic->width; ++x) { - const uint32_t argb = row[x]; - const uint32_t r = (argb >> 16) & 0xff; - const uint32_t g = (argb >> 8) & 0xff; - const uint32_t b = (argb >> 0) & 0xff; - // We use BT.709 for converting to luminance. - const uint32_t Y = (uint32_t)(0.2126 * r + 0.7152 * g + 0.0722 * b + .5); - row[x] = (argb & 0xff000000u) | (Y * 0x010101u); - } - } -} - -static void Help(void) { - fprintf(stderr, - "Usage: get_disto [-ssim][-psnr][-alpha] compressed.webp orig.webp\n" - " -ssim ..... print SSIM distortion\n" - " -psnr ..... print PSNR distortion (default)\n" - " -alpha .... preserve alpha plane\n" - " -h ........ this message\n" - " -o . save the diff map as a WebP lossless file\n" - " -scale .... scale the difference map to fit [0..255] range\n" - " -gray ..... use grayscale for difference map (-scale)\n" - " Also handles PNG, JPG and TIFF files, in addition to WebP.\n"); -} - -int main(int argc, const char* argv[]) { - WebPPicture pic1, pic2; - size_t size1 = 0, size2 = 0; - int ret = 1; - float disto[5]; - int type = 0; - int c; - int help = 0; - int keep_alpha = 0; - int scale = 0; - int use_gray = 0; - const char* name1 = NULL; - const char* name2 = NULL; - const char* output = NULL; - - INIT_WARGV(argc, argv); - - if (!WebPPictureInit(&pic1) || !WebPPictureInit(&pic2)) { - fprintf(stderr, "Can't init pictures\n"); - FREE_WARGV_AND_RETURN(1); - } - - for (c = 1; c < argc; ++c) { - if (!strcmp(argv[c], "-ssim")) { - type = 1; - } else if (!strcmp(argv[c], "-psnr")) { - type = 0; - } else if (!strcmp(argv[c], "-alpha")) { - keep_alpha = 1; - } else if (!strcmp(argv[c], "-scale")) { - scale = 1; - } else if (!strcmp(argv[c], "-gray")) { - use_gray = 1; - } else if (!strcmp(argv[c], "-h")) { - help = 1; - ret = 0; - } else if (!strcmp(argv[c], "-o")) { - if (++c == argc) { - fprintf(stderr, "missing file name after %s option.\n", argv[c - 1]); - goto End; - } - output = (const char*)GET_WARGV(argv, c); - } else if (name1 == NULL) { - name1 = (const char*)GET_WARGV(argv, c); - } else { - name2 = (const char*)GET_WARGV(argv, c); - } - } - if (help || name1 == NULL || name2 == NULL) { - if (!help) { - fprintf(stderr, "Error: missing arguments.\n"); - } - Help(); - goto End; - } - size1 = ReadPicture(name1, &pic1, 1); - size2 = ReadPicture(name2, &pic2, 1); - if (size1 == 0 || size2 == 0) goto End; - - if (!keep_alpha) { - WebPBlendAlpha(&pic1, 0x00000000); - WebPBlendAlpha(&pic2, 0x00000000); - } - - if (!WebPPictureDistortion(&pic1, &pic2, type, disto)) { - fprintf(stderr, "Error while computing the distortion.\n"); - goto End; - } - printf("%u %.2f %.2f %.2f %.2f %.2f [ %.2f bpp ]\n", - (unsigned int)size1, - disto[4], disto[0], disto[1], disto[2], disto[3], - 8.f * size1 / pic1.width / pic1.height); - - if (output != NULL) { - uint8_t* data = NULL; - size_t data_size = 0; - if (pic1.use_argb != pic2.use_argb) { - fprintf(stderr, "Pictures are not in the same argb format. " - "Can't save the difference map.\n"); - goto End; - } - if (pic1.use_argb) { - int n; - fprintf(stderr, "max differences per channel: "); - for (n = 0; n < 3; ++n) { // skip the alpha channel - const int range = (type == 1) ? - SSIMScaleChannel((uint8_t*)pic1.argb + n, pic1.argb_stride * 4, - (const uint8_t*)pic2.argb + n, pic2.argb_stride * 4, - 4, pic1.width, pic1.height, scale) : - DiffScaleChannel((uint8_t*)pic1.argb + n, pic1.argb_stride * 4, - (const uint8_t*)pic2.argb + n, pic2.argb_stride * 4, - 4, pic1.width, pic1.height, scale); - if (range < 0) fprintf(stderr, "\nError computing diff map\n"); - fprintf(stderr, "[%d]", range); - } - fprintf(stderr, "\n"); - if (use_gray) ConvertToGray(&pic1); - } else { - fprintf(stderr, "Can only compute the difference map in ARGB format.\n"); - goto End; - } -#if !defined(WEBP_REDUCE_CSP) - data_size = WebPEncodeLosslessBGRA((const uint8_t*)pic1.argb, - pic1.width, pic1.height, - pic1.argb_stride * 4, - &data); - if (data_size == 0) { - fprintf(stderr, "Error during lossless encoding.\n"); - goto End; - } - ret = ImgIoUtilWriteFile(output, data, data_size) ? 0 : 1; - WebPFree(data); - if (ret) goto End; -#else - (void)data; - (void)data_size; - fprintf(stderr, "Cannot save the difference map. Please recompile " - "without the WEBP_REDUCE_CSP flag.\n"); -#endif // WEBP_REDUCE_CSP - } - ret = 0; - - End: - WebPPictureFree(&pic1); - WebPPictureFree(&pic2); - FREE_WARGV_AND_RETURN(ret); -} diff --git a/Extended/libwebp/extras/quality_estimate.c b/Extended/libwebp/extras/quality_estimate.c deleted file mode 100644 index 17e98d9..0000000 --- a/Extended/libwebp/extras/quality_estimate.c +++ /dev/null @@ -1,129 +0,0 @@ -// Copyright 2016 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// VP8EstimateQuality(): rough encoding quality estimate -// -// Author: Skal (pascal.massimino@gmail.com) - -#include "extras/extras.h" -#include "webp/decode.h" - -#include - -//------------------------------------------------------------------------------ - -#define INVALID_BIT_POS (1ull << 63) - -// In most cases, we don't need to use a full arithmetic decoder, since -// all the header's bits are written using a uniform probability of 128. -// We can just parse the header as if it was bits (works in 99.999% cases). -static WEBP_INLINE uint32_t GetBit(const uint8_t* const data, size_t nb, - uint64_t max_size, uint64_t* const bit_pos) { - uint32_t val = 0; - if (*bit_pos + nb <= 8 * max_size) { - while (nb-- > 0) { - const uint64_t p = (*bit_pos)++; - const int bit = !!(data[p >> 3] & (128 >> ((p & 7)))); - val = (val << 1) | bit; - } - } else { - *bit_pos = INVALID_BIT_POS; - } - return val; -} - -#define GET_BIT(n) GetBit(data, (n), size, &bit_pos) -#define CONDITIONAL_SKIP(n) (GET_BIT(1) ? GET_BIT((n)) : 0) - -int VP8EstimateQuality(const uint8_t* const data, size_t size) { - size_t pos = 0; - uint64_t bit_pos; - uint64_t sig = 0x00; - int ok = 0; - int Q = -1; - WebPBitstreamFeatures features; - - if (data == NULL) return -1; - - if (WebPGetFeatures(data, size, &features) != VP8_STATUS_OK) { - return -1; // invalid file - } - if (features.format == 2) return 101; // lossless - if (features.format == 0 || features.has_animation) return -1; // mixed - - while (pos < size) { - sig = (sig >> 8) | ((uint64_t)data[pos++] << 40); - if ((sig >> 24) == 0x2a019dull) { - ok = 1; - break; - } - } - if (!ok) return -1; - if (pos + 4 > size) return -1; - - // Skip main Header - // width = (data[pos + 0] | (data[pos + 1] << 8)) & 0x3fff; - // height = (data[pos + 2] | (data[pos + 3] << 8)) & 0x3fff; - pos += 4; - bit_pos = pos * 8; - - GET_BIT(2); // colorspace + clamp type - - // Segment header - if (GET_BIT(1)) { // use_segment_ - int s; - const int update_map = GET_BIT(1); - if (GET_BIT(1)) { // update data - const int absolute_delta = GET_BIT(1); - int q[4] = { 0, 0, 0, 0 }; - for (s = 0; s < 4; ++s) { - if (GET_BIT(1)) { - q[s] = GET_BIT(7); - if (GET_BIT(1)) q[s] = -q[s]; // sign - } - } - if (absolute_delta) Q = q[0]; // just use the first segment's quantizer - for (s = 0; s < 4; ++s) CONDITIONAL_SKIP(7); // filter strength - } - if (update_map) { - for (s = 0; s < 3; ++s) CONDITIONAL_SKIP(8); - } - } - // Filter header - GET_BIT(1 + 6 + 3); // simple + level + sharpness - if (GET_BIT(1)) { // use_lf_delta - if (GET_BIT(1)) { // update lf_delta? - int n; - for (n = 0; n < 4 + 4; ++n) CONDITIONAL_SKIP(6); - } - } - // num partitions - GET_BIT(2); - - // ParseQuant - { - const int base_q = GET_BIT(7); - /* dqy1_dc = */ CONDITIONAL_SKIP(5); - /* dqy2_dc = */ CONDITIONAL_SKIP(5); - /* dqy2_ac = */ CONDITIONAL_SKIP(5); - /* dquv_dc = */ CONDITIONAL_SKIP(5); - /* dquv_ac = */ CONDITIONAL_SKIP(5); - - if (Q < 0) Q = base_q; - } - if (bit_pos == INVALID_BIT_POS) return -1; - - // base mapping - Q = (127 - Q) * 100 / 127; - // correction for power-law behavior in low range - if (Q < 80) { - Q = (int)(pow(Q / 80., 1. / 0.38) * 80); - } - return Q; -} diff --git a/Extended/libwebp/extras/vwebp_sdl.c b/Extended/libwebp/extras/vwebp_sdl.c deleted file mode 100644 index 3cf4466..0000000 --- a/Extended/libwebp/extras/vwebp_sdl.c +++ /dev/null @@ -1,101 +0,0 @@ -// Copyright 2017 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Simple SDL-based WebP file viewer. -// Does not support animation, just static images. -// -// Press 'q' to exit. -// -// Author: James Zern (jzern@google.com) - -#include - -#ifdef HAVE_CONFIG_H -#include "webp/config.h" -#endif - -#if defined(WEBP_HAVE_SDL) - -#include "webp_to_sdl.h" -#include "webp/decode.h" -#include "imageio/imageio_util.h" -#include "../examples/unicode.h" - -#if defined(WEBP_HAVE_JUST_SDL_H) -#include -#else -#include -#endif - -static void ProcessEvents(void) { - int done = 0; - SDL_Event event; - while (!done && SDL_WaitEvent(&event)) { - switch (event.type) { - case SDL_KEYUP: - switch (event.key.keysym.sym) { - case SDLK_q: done = 1; break; - default: break; - } - break; - default: break; - } - } -} - -int main(int argc, char* argv[]) { - int c; - int ok = 0; - - INIT_WARGV(argc, argv); - - for (c = 1; c < argc; ++c) { - const char* file = NULL; - const uint8_t* webp = NULL; - size_t webp_size = 0; - if (!strcmp(argv[c], "-h")) { - printf("Usage: %s [-h] image.webp [more_files.webp...]\n", argv[0]); - FREE_WARGV_AND_RETURN(0); - } else { - file = (const char*)GET_WARGV(argv, c); - } - if (file == NULL) continue; - if (!ImgIoUtilReadFile(file, &webp, &webp_size)) { - WFPRINTF(stderr, "Error opening file: %s\n", (const W_CHAR*)file); - goto Error; - } - if (webp_size != (size_t)(int)webp_size) { - free((void*)webp); - fprintf(stderr, "File too large.\n"); - goto Error; - } - ok = WebpToSDL((const char*)webp, (int)webp_size); - free((void*)webp); - if (!ok) { - WFPRINTF(stderr, "Error decoding file %s\n", (const W_CHAR*)file); - goto Error; - } - ProcessEvents(); - } - ok = 1; - - Error: - SDL_Quit(); - FREE_WARGV_AND_RETURN(ok ? 0 : 1); -} - -#else // !WEBP_HAVE_SDL - -int main(int argc, const char* argv[]) { - fprintf(stderr, "SDL support not enabled in %s.\n", argv[0]); - (void)argc; - return 0; -} - -#endif diff --git a/Extended/libwebp/extras/webp_quality.c b/Extended/libwebp/extras/webp_quality.c deleted file mode 100644 index 0a3b25f..0000000 --- a/Extended/libwebp/extras/webp_quality.c +++ /dev/null @@ -1,54 +0,0 @@ -// Simple tool to roughly evaluate the quality encoding of a webp bitstream -// -// Result is a *rough* estimation of the quality. You should just consider -// the bucket it's in (q > 80? > 50? > 20?) and not take it for face value. -/* - gcc -o webp_quality webp_quality.c -O3 -I../ -L. -L../imageio \ - -limageio_util -lwebpextras -lwebp -lm -lpthread -*/ - -#include -#include -#include - -#include "extras/extras.h" -#include "imageio/imageio_util.h" -#include "../examples/unicode.h" - -int main(int argc, const char* argv[]) { - int c; - int quiet = 0; - int ok = 1; - - INIT_WARGV(argc, argv); - - for (c = 1; ok && c < argc; ++c) { - if (!strcmp(argv[c], "-quiet")) { - quiet = 1; - } else if (!strcmp(argv[c], "-help") || !strcmp(argv[c], "-h")) { - printf("webp_quality [-h][-quiet] webp_files...\n"); - FREE_WARGV_AND_RETURN(0); - } else { - const char* const filename = (const char*)GET_WARGV(argv, c); - const uint8_t* data = NULL; - size_t data_size = 0; - int q; - ok = ImgIoUtilReadFile(filename, &data, &data_size); - if (!ok) break; - q = VP8EstimateQuality(data, data_size); - if (!quiet) WPRINTF("[%s] ", (const W_CHAR*)filename); - if (q < 0) { - fprintf(stderr, "Not a WebP file, or not a lossy WebP file.\n"); - ok = 0; - } else { - if (!quiet) { - printf("Estimated quality factor: %d\n", q); - } else { - printf("%d\n", q); // just print the number - } - } - free((void*)data); - } - } - FREE_WARGV_AND_RETURN(ok ? 0 : 1); -} diff --git a/Extended/libwebp/extras/webp_to_sdl.c b/Extended/libwebp/extras/webp_to_sdl.c deleted file mode 100644 index b13fc92..0000000 --- a/Extended/libwebp/extras/webp_to_sdl.c +++ /dev/null @@ -1,110 +0,0 @@ -// Copyright 2017 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Simple WebP-to-SDL wrapper. Useful for emscripten. -// -// Author: James Zern (jzern@google.com) - -#ifdef HAVE_CONFIG_H -#include "src/webp/config.h" -#endif - -#if defined(WEBP_HAVE_SDL) - -#include "webp_to_sdl.h" - -#include -#include "src/webp/decode.h" - -#if defined(WEBP_HAVE_JUST_SDL_H) -#include -#else -#include -#endif - -static int init_ok = 0; -int WebpToSDL(const char* data, unsigned int data_size) { - int ok = 0; - VP8StatusCode status; - WebPDecoderConfig config; - WebPBitstreamFeatures* const input = &config.input; - WebPDecBuffer* const output = &config.output; - SDL_Surface* screen = NULL; - SDL_Surface* surface = NULL; - - if (!WebPInitDecoderConfig(&config)) { - fprintf(stderr, "Library version mismatch!\n"); - return 0; - } - - if (!init_ok) { - SDL_Init(SDL_INIT_VIDEO); - init_ok = 1; - } - - status = WebPGetFeatures((uint8_t*)data, (size_t)data_size, &config.input); - if (status != VP8_STATUS_OK) goto Error; - - screen = SDL_SetVideoMode(input->width, input->height, 32, SDL_SWSURFACE); - if (screen == NULL) { - fprintf(stderr, "Unable to set video mode (32bpp %dx%d)!\n", - input->width, input->height); - goto Error; - } - - surface = SDL_CreateRGBSurface(SDL_SWSURFACE, - input->width, input->height, 32, - 0x000000ffu, // R mask - 0x0000ff00u, // G mask - 0x00ff0000u, // B mask - 0xff000000u); // A mask - - if (surface == NULL) { - fprintf(stderr, "Unable to create %dx%d RGBA surface!\n", - input->width, input->height); - goto Error; - } - if (SDL_MUSTLOCK(surface)) SDL_LockSurface(surface); - -#if SDL_BYTEORDER == SDL_BIG_ENDIAN - output->colorspace = MODE_BGRA; -#else - output->colorspace = MODE_RGBA; -#endif - output->width = surface->w; - output->height = surface->h; - output->u.RGBA.rgba = surface->pixels; - output->u.RGBA.stride = surface->pitch; - output->u.RGBA.size = surface->pitch * surface->h; - output->is_external_memory = 1; - - status = WebPDecode((const uint8_t*)data, (size_t)data_size, &config); - if (status != VP8_STATUS_OK) { - fprintf(stderr, "Error decoding image (%d)\n", status); - goto Error; - } - - if (SDL_MUSTLOCK(surface)) SDL_UnlockSurface(surface); - if (SDL_BlitSurface(surface, NULL, screen, NULL) || - SDL_Flip(screen)) { - goto Error; - } - - ok = 1; - - Error: - SDL_FreeSurface(surface); - SDL_FreeSurface(screen); - WebPFreeDecBuffer(output); - return ok; -} - -//------------------------------------------------------------------------------ - -#endif // WEBP_HAVE_SDL diff --git a/Extended/libwebp/extras/webp_to_sdl.h b/Extended/libwebp/extras/webp_to_sdl.h deleted file mode 100644 index 1b5ea98..0000000 --- a/Extended/libwebp/extras/webp_to_sdl.h +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2017 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Simple WebP-to-SDL wrapper. Useful for emscripten. -// -// Author: James Zern (jzern@google.com) - -#ifndef WEBP_EXTRAS_WEBP_TO_SDL_H_ -#define WEBP_EXTRAS_WEBP_TO_SDL_H_ - -// Exports the method WebpToSDL(const char* data, int data_size) which decodes -// a WebP bitstream into an RGBA SDL surface. -// Return false on failure. -extern int WebpToSDL(const char* data, unsigned int data_size); - -#endif // WEBP_EXTRAS_WEBP_TO_SDL_H_ diff --git a/Extended/libwebp/gradle.properties b/Extended/libwebp/gradle.properties deleted file mode 100644 index 28d39f5..0000000 --- a/Extended/libwebp/gradle.properties +++ /dev/null @@ -1,14 +0,0 @@ -# Project-wide Gradle settings. - -# IDE (e.g. Android Studio) users: -# Gradle settings configured through the IDE *will override* -# any settings specified in this file. - -# For more details on how to configure your build environment visit -# http://www.gradle.org/docs/current/userguide/build_environment.html - -# Versions for gradle -BUILD_TOOLS_VERSION=23.0.3 -COMPILE_SDK_VERSION=23 -ANDROID_GRADLE_PLUGIN_VERSION=1.5.0 -GRADLE_DOWNLOAD_TASK_VERSION=2.1.0 diff --git a/Extended/libwebp/gradle/wrapper/gradle-wrapper.jar b/Extended/libwebp/gradle/wrapper/gradle-wrapper.jar deleted file mode 100644 index ca78035ef0501d802d4fc55381ef2d5c3ce0ec6e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 53556 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�H$uJM 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 \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi -done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >/dev/null -APP_HOME="`pwd -P`" -cd "$SAVED" >/dev/null - -APP_NAME="Gradle" -APP_BASE_NAME=`basename "$0"` - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS="" - -# Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD="maximum" - -warn ( ) { - echo "$*" -} - -die ( ) { - echo - echo "$*" - echo - exit 1 -} - -# OS specific support (must be 'true' or 'false'). -cygwin=false -msys=false -darwin=false -nonstop=false -case "`uname`" in - CYGWIN* ) - cygwin=true - ;; - Darwin* ) - darwin=true - ;; - MINGW* ) - msys=true - ;; - NONSTOP* ) - nonstop=true - ;; -esac - -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar - -# Determine the Java command to use to start the JVM. -if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" - else - JAVACMD="$JAVA_HOME/bin/java" - fi - if [ ! -x "$JAVACMD" ] ; then - die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -else - JAVACMD="java" - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." -fi - -# Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then - MAX_FD_LIMIT=`ulimit -H -n` - if [ $? -eq 0 ] ; then - if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then - MAX_FD="$MAX_FD_LIMIT" - fi - ulimit -n $MAX_FD - if [ $? -ne 0 ] ; then - warn "Could not set maximum file descriptor limit: $MAX_FD" - fi - else - warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" - fi -fi - -# For Darwin, add options to specify how the application appears in the dock -if $darwin; then - GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" -fi - -# For Cygwin, switch paths to Windows format before running java -if $cygwin ; then - APP_HOME=`cygpath --path --mixed "$APP_HOME"` - CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` - JAVACMD=`cygpath --unix "$JAVACMD"` - - # We build the pattern for arguments to be converted via cygpath - ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` - SEP="" - for dir in $ROOTDIRSRAW ; do - ROOTDIRS="$ROOTDIRS$SEP$dir" - SEP="|" - done - OURCYGPATTERN="(^($ROOTDIRS))" - # Add a user-defined pattern to the cygpath arguments - if [ "$GRADLE_CYGPATTERN" != "" ] ; then - OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" - fi - # Now convert the arguments - kludge to limit ourselves to /bin/sh - i=0 - for arg in "$@" ; do - CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` - CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option - - if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition - eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` - else - eval `echo args$i`="\"$arg\"" - fi - i=$((i+1)) - done - case $i in - (0) set -- ;; - (1) set -- "$args0" ;; - (2) set -- "$args0" "$args1" ;; - (3) set -- "$args0" "$args1" "$args2" ;; - (4) set -- "$args0" "$args1" "$args2" "$args3" ;; - (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; - esac -fi - -# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules -function splitJvmOpts() { - JVM_OPTS=("$@") -} -eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS -JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" - -exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" diff --git a/Extended/libwebp/gradlew.bat b/Extended/libwebp/gradlew.bat deleted file mode 100644 index f6d5974..0000000 --- a/Extended/libwebp/gradlew.bat +++ /dev/null @@ -1,90 +0,0 @@ -@if "%DEBUG%" == "" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS= - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto init - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto init - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:init -@rem Get command-line arguments, handling Windows variants - -if not "%OS%" == "Windows_NT" goto win9xME_args -if "%@eval[2+2]" == "4" goto 4NT_args - -:win9xME_args -@rem Slurp the command line arguments. -set CMD_LINE_ARGS= -set _SKIP=2 - -:win9xME_args_slurp -if "x%~1" == "x" goto execute - -set CMD_LINE_ARGS=%* -goto execute - -:4NT_args -@rem Get arguments from the 4NT Shell from JP Software -set CMD_LINE_ARGS=%$ - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% - -:end -@rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega diff --git a/Extended/libwebp/imageio/.deps/imageio_util.Plo b/Extended/libwebp/imageio/.deps/imageio_util.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/imageio/.deps/imageio_util.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/imageio/.deps/libimagedec_la-image_dec.Plo b/Extended/libwebp/imageio/.deps/libimagedec_la-image_dec.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/imageio/.deps/libimagedec_la-image_dec.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/imageio/.deps/libimagedec_la-jpegdec.Plo b/Extended/libwebp/imageio/.deps/libimagedec_la-jpegdec.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/imageio/.deps/libimagedec_la-jpegdec.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/imageio/.deps/libimagedec_la-metadata.Plo b/Extended/libwebp/imageio/.deps/libimagedec_la-metadata.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/imageio/.deps/libimagedec_la-metadata.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/imageio/.deps/libimagedec_la-pngdec.Plo b/Extended/libwebp/imageio/.deps/libimagedec_la-pngdec.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/imageio/.deps/libimagedec_la-pngdec.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/imageio/.deps/libimagedec_la-pnmdec.Plo b/Extended/libwebp/imageio/.deps/libimagedec_la-pnmdec.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/imageio/.deps/libimagedec_la-pnmdec.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/imageio/.deps/libimagedec_la-tiffdec.Plo b/Extended/libwebp/imageio/.deps/libimagedec_la-tiffdec.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/imageio/.deps/libimagedec_la-tiffdec.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/imageio/.deps/libimagedec_la-webpdec.Plo b/Extended/libwebp/imageio/.deps/libimagedec_la-webpdec.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/imageio/.deps/libimagedec_la-webpdec.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/imageio/.deps/libimagedec_la-wicdec.Plo b/Extended/libwebp/imageio/.deps/libimagedec_la-wicdec.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/imageio/.deps/libimagedec_la-wicdec.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/imageio/.deps/libimageenc_la-image_enc.Plo b/Extended/libwebp/imageio/.deps/libimageenc_la-image_enc.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/imageio/.deps/libimageenc_la-image_enc.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/imageio/Android.mk b/Extended/libwebp/imageio/Android.mk deleted file mode 100644 index e779f71..0000000 --- a/Extended/libwebp/imageio/Android.mk +++ /dev/null @@ -1,54 +0,0 @@ -LOCAL_PATH := $(call my-dir) - -################################################################################ -# libimageio_util - -include $(CLEAR_VARS) - -LOCAL_SRC_FILES := \ - imageio_util.c \ - -LOCAL_CFLAGS := $(WEBP_CFLAGS) -LOCAL_C_INCLUDES := $(LOCAL_PATH)/../src - -LOCAL_MODULE := imageio_util - -include $(BUILD_STATIC_LIBRARY) - -################################################################################ -# libimagedec - -include $(CLEAR_VARS) - -LOCAL_SRC_FILES := \ - image_dec.c \ - jpegdec.c \ - metadata.c \ - pngdec.c \ - pnmdec.c \ - tiffdec.c \ - webpdec.c \ - -LOCAL_CFLAGS := $(WEBP_CFLAGS) -LOCAL_C_INCLUDES := $(LOCAL_PATH)/../src -LOCAL_STATIC_LIBRARIES := imageio_util - -LOCAL_MODULE := imagedec - -include $(BUILD_STATIC_LIBRARY) - -################################################################################ -# libimageenc - -include $(CLEAR_VARS) - -LOCAL_SRC_FILES := \ - image_enc.c \ - -LOCAL_CFLAGS := $(WEBP_CFLAGS) -LOCAL_C_INCLUDES := $(LOCAL_PATH)/../src -LOCAL_STATIC_LIBRARIES := imageio_util - -LOCAL_MODULE := imageenc - -include $(BUILD_STATIC_LIBRARY) diff --git a/Extended/libwebp/imageio/Makefile b/Extended/libwebp/imageio/Makefile deleted file mode 100644 index 854c565..0000000 --- a/Extended/libwebp/imageio/Makefile +++ /dev/null @@ -1,753 +0,0 @@ -# Makefile.in generated by automake 1.16.1 from Makefile.am. -# imageio/Makefile. Generated from Makefile.in by configure. - -# Copyright (C) 1994-2018 Free Software Foundation, Inc. - -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - - - - - -am__is_gnu_make = { \ - if test -z '$(MAKELEVEL)'; then \ - false; \ - elif test -n '$(MAKE_HOST)'; then \ - true; \ - elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ - true; \ - else \ - false; \ - fi; \ -} -am__make_running_with_option = \ - case $${target_option-} in \ - ?) ;; \ - *) echo "am__make_running_with_option: internal error: invalid" \ - "target option '$${target_option-}' specified" >&2; \ - exit 1;; \ - esac; \ - has_opt=no; \ - sane_makeflags=$$MAKEFLAGS; \ - if $(am__is_gnu_make); then \ - sane_makeflags=$$MFLAGS; \ - else \ - case $$MAKEFLAGS in \ - *\\[\ \ ]*) \ - bs=\\; \ - sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ - | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ - esac; \ - fi; \ - skip_next=no; \ - strip_trailopt () \ - { \ - flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ - }; \ - for flg in $$sane_makeflags; do \ - test $$skip_next = yes && { skip_next=no; continue; }; \ - case $$flg in \ - *=*|--*) continue;; \ - -*I) strip_trailopt 'I'; skip_next=yes;; \ - -*I?*) strip_trailopt 'I';; \ - -*O) strip_trailopt 'O'; skip_next=yes;; \ - -*O?*) strip_trailopt 'O';; \ - -*l) strip_trailopt 'l'; skip_next=yes;; \ - -*l?*) strip_trailopt 'l';; \ - -[dEDm]) skip_next=yes;; \ - -[JT]) skip_next=yes;; \ - esac; \ - case $$flg in \ - *$$target_option*) has_opt=yes; break;; \ - esac; \ - done; \ - test $$has_opt = yes -am__make_dryrun = (target_option=n; $(am__make_running_with_option)) -am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) -pkgdatadir = $(datadir)/libwebp -pkgincludedir = $(includedir)/libwebp -pkglibdir = $(libdir)/libwebp -pkglibexecdir = $(libexecdir)/libwebp -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = x86_64-apple-darwin19.6.0 -host_triplet = x86_64-apple-darwin19.6.0 -am__append_1 = libimagedec.la -subdir = imageio -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pthread.m4 \ - $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ - $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ - $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ - $(am__DIST_COMMON) -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = $(top_builddir)/src/webp/config.h -CONFIG_CLEAN_FILES = -CONFIG_CLEAN_VPATH_FILES = -LTLIBRARIES = $(noinst_LTLIBRARIES) -libimagedec_la_DEPENDENCIES = ../src/demux/libwebpdemux.la -am_libimagedec_la_OBJECTS = libimagedec_la-image_dec.lo \ - libimagedec_la-jpegdec.lo libimagedec_la-metadata.lo \ - libimagedec_la-pngdec.lo libimagedec_la-pnmdec.lo \ - libimagedec_la-tiffdec.lo libimagedec_la-webpdec.lo \ - libimagedec_la-wicdec.lo -libimagedec_la_OBJECTS = $(am_libimagedec_la_OBJECTS) -AM_V_lt = $(am__v_lt_$(V)) -am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) -am__v_lt_0 = --silent -am__v_lt_1 = -am_libimagedec_la_rpath = -libimageenc_la_LIBADD = -am_libimageenc_la_OBJECTS = libimageenc_la-image_enc.lo -libimageenc_la_OBJECTS = $(am_libimageenc_la_OBJECTS) -libimageio_util_la_LIBADD = -am_libimageio_util_la_OBJECTS = imageio_util.lo -libimageio_util_la_OBJECTS = $(am_libimageio_util_la_OBJECTS) -AM_V_P = $(am__v_P_$(V)) -am__v_P_ = $(am__v_P_$(AM_DEFAULT_VERBOSITY)) -am__v_P_0 = false -am__v_P_1 = : -AM_V_GEN = $(am__v_GEN_$(V)) -am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) -am__v_GEN_0 = @echo " GEN " $@; -am__v_GEN_1 = -AM_V_at = $(am__v_at_$(V)) -am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) -am__v_at_0 = @ -am__v_at_1 = -DEFAULT_INCLUDES = -I. -I$(top_builddir)/src/webp -depcomp = $(SHELL) $(top_srcdir)/depcomp -am__maybe_remake_depfiles = depfiles -am__depfiles_remade = ./$(DEPDIR)/imageio_util.Plo \ - ./$(DEPDIR)/libimagedec_la-image_dec.Plo \ - ./$(DEPDIR)/libimagedec_la-jpegdec.Plo \ - ./$(DEPDIR)/libimagedec_la-metadata.Plo \ - ./$(DEPDIR)/libimagedec_la-pngdec.Plo \ - ./$(DEPDIR)/libimagedec_la-pnmdec.Plo \ - ./$(DEPDIR)/libimagedec_la-tiffdec.Plo \ - ./$(DEPDIR)/libimagedec_la-webpdec.Plo \ - ./$(DEPDIR)/libimagedec_la-wicdec.Plo \ - ./$(DEPDIR)/libimageenc_la-image_enc.Plo -am__mv = mv -f -COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ - $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CFLAGS) $(CFLAGS) -AM_V_CC = $(am__v_CC_$(V)) -am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) -am__v_CC_0 = @echo " CC " $@; -am__v_CC_1 = -CCLD = $(CC) -LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ - $(AM_LDFLAGS) $(LDFLAGS) -o $@ -AM_V_CCLD = $(am__v_CCLD_$(V)) -am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) -am__v_CCLD_0 = @echo " CCLD " $@; -am__v_CCLD_1 = -SOURCES = $(libimagedec_la_SOURCES) $(libimageenc_la_SOURCES) \ - $(libimageio_util_la_SOURCES) -DIST_SOURCES = $(libimagedec_la_SOURCES) $(libimageenc_la_SOURCES) \ - $(libimageio_util_la_SOURCES) -am__can_run_installinfo = \ - case $$AM_UPDATE_INFO_DIR in \ - n|no|NO) false;; \ - *) (install-info --version) >/dev/null 2>&1;; \ - esac -HEADERS = $(noinst_HEADERS) -am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) -# Read a list of newline-separated strings from the standard input, -# and print each of them once, without duplicates. Input order is -# *not* preserved. -am__uniquify_input = $(AWK) '\ - BEGIN { nonempty = 0; } \ - { items[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in items) print i; }; } \ -' -# Make sure the list of sources is unique. This is necessary because, -# e.g., the same source file might be shared among _SOURCES variables -# for different programs/libraries. -am__define_uniq_tagged_files = \ - list='$(am__tagged_files)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | $(am__uniquify_input)` -ETAGS = etags -CTAGS = ctags -am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = ${SHELL} /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp/missing aclocal-1.16 -AMTAR = $${TAR-tar} -AM_CFLAGS = -fvisibility=hidden -Wall -Wconstant-conversion -Wdeclaration-after-statement -Wextra -Wfloat-conversion -Wformat -Wformat-nonliteral -Wformat -Wformat-security -Wmissing-declarations -Wmissing-prototypes -Wold-style-definition -Wparentheses-equality -Wshadow -Wshorten-64-to-32 -Wundef -Wunreachable-code -Wunused -Wvla -Wno-deprecated-declarations -AM_CPPFLAGS = -DNDEBUG -I$(top_builddir)/src -I$(top_srcdir)/src -AM_DEFAULT_VERBOSITY = 0 -AR = ar -AUTOCONF = ${SHELL} /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp/missing autoconf -AUTOHEADER = ${SHELL} /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp/missing autoheader -AUTOMAKE = ${SHELL} /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp/missing automake-1.16 -AWK = awk -CC = gcc -CCDEPMODE = depmode=gcc3 -CFLAGS = -g -O2 -D_THREAD_SAFE -pthread -CPP = gcc -E -CPPFLAGS = -CYGPATH_W = echo -DEFS = -DHAVE_CONFIG_H -DEPDIR = .deps -DLLTOOL = false -DSYMUTIL = dsymutil -DUMPBIN = -ECHO_C = \c -ECHO_N = -ECHO_T = -EGREP = /usr/bin/grep -E -EXEEXT = -FGREP = /usr/bin/grep -F -GIF_INCLUDES = -GIF_LIBS = -lgif -GL_INCLUDES = -GL_LIBS = -framework GLUT -framework OpenGL -GREP = /usr/bin/grep -INSTALL = /opt/twitter_mde/homebrew_minimal/mde_bin/ginstall -c -INSTALL_DATA = ${INSTALL} -m 644 -INSTALL_PROGRAM = ${INSTALL} -INSTALL_SCRIPT = ${INSTALL} -INSTALL_STRIP_PROGRAM = $(install_sh) -c -s -JPEG_INCLUDES = -DWEBP_HAVE_JPEG -JPEG_LIBS = -ljpeg -LD = /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld -LDFLAGS = -LIBOBJS = -LIBPNG_CONFIG = /opt/twitter_mde/bin/libpng-config -LIBS = -LIBSDL_CONFIG = -LIBTOOL = $(SHELL) $(top_builddir)/libtool -LIPO = lipo -LN_S = ln -s -LTLIBOBJS = -LT_SYS_LIBRARY_PATH = -MAKEINFO = ${SHELL} /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp/missing makeinfo -MANIFEST_TOOL = : -MKDIR_P = /opt/twitter_mde/homebrew_minimal/mde_bin/gmkdir -p -NEON_FLAGS = -NM = /usr/bin/nm -B -NMEDIT = nmedit -OBJDUMP = objdump -OBJEXT = o -OTOOL = otool -OTOOL64 = : -PACKAGE = libwebp -PACKAGE_BUGREPORT = https://bugs.chromium.org/p/webp -PACKAGE_NAME = libwebp -PACKAGE_STRING = libwebp 1.1.0 -PACKAGE_TARNAME = libwebp -PACKAGE_URL = http://developers.google.com/speed/webp -PACKAGE_VERSION = 1.1.0 -PATH_SEPARATOR = : -PNG_INCLUDES = -I/opt/twitter_mde/package/twitter_dev_homebrew/current/Cellar/libpng/1.6.34/include/libpng16 -DWEBP_HAVE_PNG -PNG_LIBS = -L/opt/twitter_mde/package/twitter_dev_homebrew/current/Cellar/libpng/1.6.34/lib -lpng16 -PTHREAD_CC = gcc -PTHREAD_CFLAGS = -D_THREAD_SAFE -pthread -PTHREAD_LIBS = -RANLIB = ranlib -SDL_INCLUDES = -SDL_LIBS = -SED = /usr/bin/sed -SET_MAKE = -SHELL = /bin/sh -SSE2_FLAGS = -msse2 -SSE41_FLAGS = -msse4.1 -STRIP = strip -TIFF_INCLUDES = -DWEBP_HAVE_TIFF -TIFF_LIBS = -ltiff -USE_SWAP_16BIT_CSP = -VERSION = 1.1.0 -abs_builddir = /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp/imageio -abs_srcdir = /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp/imageio -abs_top_builddir = /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp -abs_top_srcdir = /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp -ac_ct_AR = ar -ac_ct_CC = gcc -ac_ct_DUMPBIN = -am__include = include -am__leading_dot = . -am__quote = -am__tar = $${TAR-tar} chof - "$$tardir" -am__untar = $${TAR-tar} xf - -ax_pthread_config = -bindir = ${exec_prefix}/bin -build = x86_64-apple-darwin19.6.0 -build_alias = -build_cpu = x86_64 -build_os = darwin19.6.0 -build_vendor = apple -builddir = . -datadir = ${datarootdir} -datarootdir = ${prefix}/share -docdir = ${datarootdir}/doc/${PACKAGE_TARNAME} -dvidir = ${docdir} -exec_prefix = ${prefix} -host = x86_64-apple-darwin19.6.0 -host_alias = -host_cpu = x86_64 -host_os = darwin19.6.0 -host_vendor = apple -htmldir = ${docdir} -includedir = ${prefix}/include -infodir = ${datarootdir}/info -install_sh = ${SHELL} /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp/install-sh -libdir = ${exec_prefix}/lib -libexecdir = ${exec_prefix}/libexec -localedir = ${datarootdir}/locale -localstatedir = ${prefix}/var -mandir = ${datarootdir}/man -mkdir_p = $(MKDIR_P) -oldincludedir = /usr/include -pdfdir = ${docdir} -pkgconfigdir = ${libdir}/pkgconfig -prefix = /usr/local -program_transform_name = s,x,x, -psdir = ${docdir} -runstatedir = ${localstatedir}/run -sbindir = ${exec_prefix}/sbin -sharedstatedir = ${prefix}/com -srcdir = . -sysconfdir = ${prefix}/etc -target_alias = -top_build_prefix = ../ -top_builddir = .. -top_srcdir = .. -noinst_LTLIBRARIES = libimageio_util.la $(am__append_1) libimageenc.la -noinst_HEADERS = ../src/webp/decode.h ../src/webp/types.h -libimageio_util_la_SOURCES = imageio_util.c imageio_util.h -libimagedec_la_SOURCES = image_dec.c image_dec.h jpegdec.c jpegdec.h \ - metadata.c metadata.h pngdec.c pngdec.h pnmdec.c pnmdec.h \ - tiffdec.c tiffdec.h webpdec.c webpdec.h wicdec.c wicdec.h -libimagedec_la_CPPFLAGS = $(JPEG_INCLUDES) $(PNG_INCLUDES) \ - $(TIFF_INCLUDES) $(AM_CPPFLAGS) -libimagedec_la_LIBADD = ../src/demux/libwebpdemux.la -libimageenc_la_SOURCES = image_enc.c image_enc.h -libimageenc_la_CPPFLAGS = $(JPEG_INCLUDES) $(PNG_INCLUDES) \ - $(TIFF_INCLUDES) $(AM_CPPFLAGS) -all: all-am - -.SUFFIXES: -.SUFFIXES: .c .lo .o .obj -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ - && { if test -f $@; then exit 0; else break; fi; }; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign imageio/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --foreign imageio/Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(am__aclocal_m4_deps): - -clean-noinstLTLIBRARIES: - -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) - @list='$(noinst_LTLIBRARIES)'; \ - locs=`for p in $$list; do echo $$p; done | \ - sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ - sort -u`; \ - test -z "$$locs" || { \ - echo rm -f $${locs}; \ - rm -f $${locs}; \ - } - -libimagedec.la: $(libimagedec_la_OBJECTS) $(libimagedec_la_DEPENDENCIES) $(EXTRA_libimagedec_la_DEPENDENCIES) - $(AM_V_CCLD)$(LINK) $(am_libimagedec_la_rpath) $(libimagedec_la_OBJECTS) $(libimagedec_la_LIBADD) $(LIBS) - -libimageenc.la: $(libimageenc_la_OBJECTS) $(libimageenc_la_DEPENDENCIES) $(EXTRA_libimageenc_la_DEPENDENCIES) - $(AM_V_CCLD)$(LINK) $(libimageenc_la_OBJECTS) $(libimageenc_la_LIBADD) $(LIBS) - -libimageio_util.la: $(libimageio_util_la_OBJECTS) $(libimageio_util_la_DEPENDENCIES) $(EXTRA_libimageio_util_la_DEPENDENCIES) - $(AM_V_CCLD)$(LINK) $(libimageio_util_la_OBJECTS) $(libimageio_util_la_LIBADD) $(LIBS) - -mostlyclean-compile: - -rm -f *.$(OBJEXT) - -distclean-compile: - -rm -f *.tab.c - -include ./$(DEPDIR)/imageio_util.Plo # am--include-marker -include ./$(DEPDIR)/libimagedec_la-image_dec.Plo # am--include-marker -include ./$(DEPDIR)/libimagedec_la-jpegdec.Plo # am--include-marker -include ./$(DEPDIR)/libimagedec_la-metadata.Plo # am--include-marker -include ./$(DEPDIR)/libimagedec_la-pngdec.Plo # am--include-marker -include ./$(DEPDIR)/libimagedec_la-pnmdec.Plo # am--include-marker -include ./$(DEPDIR)/libimagedec_la-tiffdec.Plo # am--include-marker -include ./$(DEPDIR)/libimagedec_la-webpdec.Plo # am--include-marker -include ./$(DEPDIR)/libimagedec_la-wicdec.Plo # am--include-marker -include ./$(DEPDIR)/libimageenc_la-image_enc.Plo # am--include-marker - -$(am__depfiles_remade): - @$(MKDIR_P) $(@D) - @echo '# dummy' >$@-t && $(am__mv) $@-t $@ - -am--depfiles: $(am__depfiles_remade) - -.c.o: - $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ - $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ - $(am__mv) $$depbase.Tpo $$depbase.Po -# $(AM_V_CC)source='$<' object='$@' libtool=no \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(COMPILE) -c -o $@ $< - -.c.obj: - $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ - $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ - $(am__mv) $$depbase.Tpo $$depbase.Po -# $(AM_V_CC)source='$<' object='$@' libtool=no \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` - -.c.lo: - $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ - $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ - $(am__mv) $$depbase.Tpo $$depbase.Plo -# $(AM_V_CC)source='$<' object='$@' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LTCOMPILE) -c -o $@ $< - -libimagedec_la-image_dec.lo: image_dec.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libimagedec_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libimagedec_la-image_dec.lo -MD -MP -MF $(DEPDIR)/libimagedec_la-image_dec.Tpo -c -o libimagedec_la-image_dec.lo `test -f 'image_dec.c' || echo '$(srcdir)/'`image_dec.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libimagedec_la-image_dec.Tpo $(DEPDIR)/libimagedec_la-image_dec.Plo -# $(AM_V_CC)source='image_dec.c' object='libimagedec_la-image_dec.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libimagedec_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libimagedec_la-image_dec.lo `test -f 'image_dec.c' || echo '$(srcdir)/'`image_dec.c - -libimagedec_la-jpegdec.lo: jpegdec.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libimagedec_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libimagedec_la-jpegdec.lo -MD -MP -MF $(DEPDIR)/libimagedec_la-jpegdec.Tpo -c -o libimagedec_la-jpegdec.lo `test -f 'jpegdec.c' || echo '$(srcdir)/'`jpegdec.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libimagedec_la-jpegdec.Tpo $(DEPDIR)/libimagedec_la-jpegdec.Plo -# $(AM_V_CC)source='jpegdec.c' object='libimagedec_la-jpegdec.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libimagedec_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libimagedec_la-jpegdec.lo `test -f 'jpegdec.c' || echo '$(srcdir)/'`jpegdec.c - -libimagedec_la-metadata.lo: metadata.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libimagedec_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libimagedec_la-metadata.lo -MD -MP -MF $(DEPDIR)/libimagedec_la-metadata.Tpo -c -o libimagedec_la-metadata.lo `test -f 'metadata.c' || echo '$(srcdir)/'`metadata.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libimagedec_la-metadata.Tpo $(DEPDIR)/libimagedec_la-metadata.Plo -# $(AM_V_CC)source='metadata.c' object='libimagedec_la-metadata.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libimagedec_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libimagedec_la-metadata.lo `test -f 'metadata.c' || echo '$(srcdir)/'`metadata.c - -libimagedec_la-pngdec.lo: pngdec.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libimagedec_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libimagedec_la-pngdec.lo -MD -MP -MF $(DEPDIR)/libimagedec_la-pngdec.Tpo -c -o libimagedec_la-pngdec.lo `test -f 'pngdec.c' || echo '$(srcdir)/'`pngdec.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libimagedec_la-pngdec.Tpo $(DEPDIR)/libimagedec_la-pngdec.Plo -# $(AM_V_CC)source='pngdec.c' object='libimagedec_la-pngdec.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libimagedec_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libimagedec_la-pngdec.lo `test -f 'pngdec.c' || echo '$(srcdir)/'`pngdec.c - -libimagedec_la-pnmdec.lo: pnmdec.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libimagedec_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libimagedec_la-pnmdec.lo -MD -MP -MF $(DEPDIR)/libimagedec_la-pnmdec.Tpo -c -o libimagedec_la-pnmdec.lo `test -f 'pnmdec.c' || echo '$(srcdir)/'`pnmdec.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libimagedec_la-pnmdec.Tpo $(DEPDIR)/libimagedec_la-pnmdec.Plo -# $(AM_V_CC)source='pnmdec.c' object='libimagedec_la-pnmdec.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libimagedec_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libimagedec_la-pnmdec.lo `test -f 'pnmdec.c' || echo '$(srcdir)/'`pnmdec.c - -libimagedec_la-tiffdec.lo: tiffdec.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libimagedec_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libimagedec_la-tiffdec.lo -MD -MP -MF $(DEPDIR)/libimagedec_la-tiffdec.Tpo -c -o libimagedec_la-tiffdec.lo `test -f 'tiffdec.c' || echo '$(srcdir)/'`tiffdec.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libimagedec_la-tiffdec.Tpo $(DEPDIR)/libimagedec_la-tiffdec.Plo -# $(AM_V_CC)source='tiffdec.c' object='libimagedec_la-tiffdec.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libimagedec_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libimagedec_la-tiffdec.lo `test -f 'tiffdec.c' || echo '$(srcdir)/'`tiffdec.c - -libimagedec_la-webpdec.lo: webpdec.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libimagedec_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libimagedec_la-webpdec.lo -MD -MP -MF $(DEPDIR)/libimagedec_la-webpdec.Tpo -c -o libimagedec_la-webpdec.lo `test -f 'webpdec.c' || echo '$(srcdir)/'`webpdec.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libimagedec_la-webpdec.Tpo $(DEPDIR)/libimagedec_la-webpdec.Plo -# $(AM_V_CC)source='webpdec.c' object='libimagedec_la-webpdec.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libimagedec_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libimagedec_la-webpdec.lo `test -f 'webpdec.c' || echo '$(srcdir)/'`webpdec.c - -libimagedec_la-wicdec.lo: wicdec.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libimagedec_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libimagedec_la-wicdec.lo -MD -MP -MF $(DEPDIR)/libimagedec_la-wicdec.Tpo -c -o libimagedec_la-wicdec.lo `test -f 'wicdec.c' || echo '$(srcdir)/'`wicdec.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libimagedec_la-wicdec.Tpo $(DEPDIR)/libimagedec_la-wicdec.Plo -# $(AM_V_CC)source='wicdec.c' object='libimagedec_la-wicdec.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libimagedec_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libimagedec_la-wicdec.lo `test -f 'wicdec.c' || echo '$(srcdir)/'`wicdec.c - -libimageenc_la-image_enc.lo: image_enc.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libimageenc_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libimageenc_la-image_enc.lo -MD -MP -MF $(DEPDIR)/libimageenc_la-image_enc.Tpo -c -o libimageenc_la-image_enc.lo `test -f 'image_enc.c' || echo '$(srcdir)/'`image_enc.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libimageenc_la-image_enc.Tpo $(DEPDIR)/libimageenc_la-image_enc.Plo -# $(AM_V_CC)source='image_enc.c' object='libimageenc_la-image_enc.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libimageenc_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libimageenc_la-image_enc.lo `test -f 'image_enc.c' || echo '$(srcdir)/'`image_enc.c - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs - -ID: $(am__tagged_files) - $(am__define_uniq_tagged_files); mkid -fID $$unique -tags: tags-am -TAGS: tags - -tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) - set x; \ - here=`pwd`; \ - $(am__define_uniq_tagged_files); \ - shift; \ - if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ - test -n "$$unique" || unique=$$empty_fix; \ - if test $$# -gt 0; then \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - "$$@" $$unique; \ - else \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$unique; \ - fi; \ - fi -ctags: ctags-am - -CTAGS: ctags -ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) - $(am__define_uniq_tagged_files); \ - test -z "$(CTAGS_ARGS)$$unique" \ - || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$unique - -GTAGS: - here=`$(am__cd) $(top_builddir) && pwd` \ - && $(am__cd) $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) "$$here" -cscopelist: cscopelist-am - -cscopelist-am: $(am__tagged_files) - list='$(am__tagged_files)'; \ - case "$(srcdir)" in \ - [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ - *) sdir=$(subdir)/$(srcdir) ;; \ - esac; \ - for i in $$list; do \ - if test -f "$$i"; then \ - echo "$(subdir)/$$i"; \ - else \ - echo "$$sdir/$$i"; \ - fi; \ - done >> $(top_builddir)/cscope.files - -distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - -distdir: $(BUILT_SOURCES) - $(MAKE) $(AM_MAKEFLAGS) distdir-am - -distdir-am: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - list='$(DISTFILES)'; \ - dist_files=`for file in $$list; do echo $$file; done | \ - sed -e "s|^$$srcdirstrip/||;t" \ - -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ - case $$dist_files in \ - */*) $(MKDIR_P) `echo "$$dist_files" | \ - sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ - sort -u` ;; \ - esac; \ - for file in $$dist_files; do \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - if test -d $$d/$$file; then \ - dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test -d "$(distdir)/$$file"; then \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ - else \ - test -f "$(distdir)/$$file" \ - || cp -p $$d/$$file "$(distdir)/$$file" \ - || exit 1; \ - fi; \ - done -check-am: all-am -check: check-am -all-am: Makefile $(LTLIBRARIES) $(HEADERS) -installdirs: -install: install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-am -install-strip: - if test -z '$(STRIP)'; then \ - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - install; \ - else \ - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ - fi -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-am - -clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ - mostlyclean-am - -distclean: distclean-am - -rm -f ./$(DEPDIR)/imageio_util.Plo - -rm -f ./$(DEPDIR)/libimagedec_la-image_dec.Plo - -rm -f ./$(DEPDIR)/libimagedec_la-jpegdec.Plo - -rm -f ./$(DEPDIR)/libimagedec_la-metadata.Plo - -rm -f ./$(DEPDIR)/libimagedec_la-pngdec.Plo - -rm -f ./$(DEPDIR)/libimagedec_la-pnmdec.Plo - -rm -f ./$(DEPDIR)/libimagedec_la-tiffdec.Plo - -rm -f ./$(DEPDIR)/libimagedec_la-webpdec.Plo - -rm -f ./$(DEPDIR)/libimagedec_la-wicdec.Plo - -rm -f ./$(DEPDIR)/libimageenc_la-image_enc.Plo - -rm -f Makefile -distclean-am: clean-am distclean-compile distclean-generic \ - distclean-tags - -dvi: dvi-am - -dvi-am: - -html: html-am - -html-am: - -info: info-am - -info-am: - -install-data-am: - -install-dvi: install-dvi-am - -install-dvi-am: - -install-exec-am: - -install-html: install-html-am - -install-html-am: - -install-info: install-info-am - -install-info-am: - -install-man: - -install-pdf: install-pdf-am - -install-pdf-am: - -install-ps: install-ps-am - -install-ps-am: - -installcheck-am: - -maintainer-clean: maintainer-clean-am - -rm -f ./$(DEPDIR)/imageio_util.Plo - -rm -f ./$(DEPDIR)/libimagedec_la-image_dec.Plo - -rm -f ./$(DEPDIR)/libimagedec_la-jpegdec.Plo - -rm -f ./$(DEPDIR)/libimagedec_la-metadata.Plo - -rm -f ./$(DEPDIR)/libimagedec_la-pngdec.Plo - -rm -f ./$(DEPDIR)/libimagedec_la-pnmdec.Plo - -rm -f ./$(DEPDIR)/libimagedec_la-tiffdec.Plo - -rm -f ./$(DEPDIR)/libimagedec_la-webpdec.Plo - -rm -f ./$(DEPDIR)/libimagedec_la-wicdec.Plo - -rm -f ./$(DEPDIR)/libimageenc_la-image_enc.Plo - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-compile mostlyclean-generic \ - mostlyclean-libtool - -pdf: pdf-am - -pdf-am: - -ps: ps-am - -ps-am: - -uninstall-am: - -.MAKE: install-am install-strip - -.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ - clean-generic clean-libtool clean-noinstLTLIBRARIES \ - cscopelist-am ctags ctags-am distclean distclean-compile \ - distclean-generic distclean-libtool distclean-tags distdir dvi \ - dvi-am html html-am info info-am install install-am \ - install-data install-data-am install-dvi install-dvi-am \ - install-exec install-exec-am install-html install-html-am \ - install-info install-info-am install-man install-pdf \ - install-pdf-am install-ps install-ps-am install-strip \ - installcheck installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-compile \ - mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ - tags tags-am uninstall uninstall-am - -.PRECIOUS: Makefile - - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/Extended/libwebp/imageio/Makefile.am b/Extended/libwebp/imageio/Makefile.am deleted file mode 100644 index 500ec7e..0000000 --- a/Extended/libwebp/imageio/Makefile.am +++ /dev/null @@ -1,32 +0,0 @@ -AM_CPPFLAGS += -I$(top_builddir)/src -I$(top_srcdir)/src -noinst_LTLIBRARIES = -noinst_LTLIBRARIES += libimageio_util.la -if BUILD_DEMUX - noinst_LTLIBRARIES += libimagedec.la -endif -noinst_LTLIBRARIES += libimageenc.la - -noinst_HEADERS = -noinst_HEADERS += ../src/webp/decode.h -noinst_HEADERS += ../src/webp/types.h - -libimageio_util_la_SOURCES = -libimageio_util_la_SOURCES += imageio_util.c imageio_util.h - -libimagedec_la_SOURCES = -libimagedec_la_SOURCES += image_dec.c image_dec.h -libimagedec_la_SOURCES += jpegdec.c jpegdec.h -libimagedec_la_SOURCES += metadata.c metadata.h -libimagedec_la_SOURCES += pngdec.c pngdec.h -libimagedec_la_SOURCES += pnmdec.c pnmdec.h -libimagedec_la_SOURCES += tiffdec.c tiffdec.h -libimagedec_la_SOURCES += webpdec.c webpdec.h -libimagedec_la_SOURCES += wicdec.c wicdec.h -libimagedec_la_CPPFLAGS = $(JPEG_INCLUDES) $(PNG_INCLUDES) $(TIFF_INCLUDES) -libimagedec_la_CPPFLAGS += $(AM_CPPFLAGS) -libimagedec_la_LIBADD = ../src/demux/libwebpdemux.la - -libimageenc_la_SOURCES = -libimageenc_la_SOURCES += image_enc.c image_enc.h -libimageenc_la_CPPFLAGS = $(JPEG_INCLUDES) $(PNG_INCLUDES) $(TIFF_INCLUDES) -libimageenc_la_CPPFLAGS += $(AM_CPPFLAGS) diff --git a/Extended/libwebp/imageio/Makefile.in b/Extended/libwebp/imageio/Makefile.in deleted file mode 100644 index b3a9896..0000000 --- a/Extended/libwebp/imageio/Makefile.in +++ /dev/null @@ -1,753 +0,0 @@ -# Makefile.in generated by automake 1.16.1 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994-2018 Free Software Foundation, Inc. - -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -@SET_MAKE@ - - -VPATH = @srcdir@ -am__is_gnu_make = { \ - if test -z '$(MAKELEVEL)'; then \ - false; \ - elif test -n '$(MAKE_HOST)'; then \ - true; \ - elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ - true; \ - else \ - false; \ - fi; \ -} -am__make_running_with_option = \ - case $${target_option-} in \ - ?) ;; \ - *) echo "am__make_running_with_option: internal error: invalid" \ - "target option '$${target_option-}' specified" >&2; \ - exit 1;; \ - esac; \ - has_opt=no; \ - sane_makeflags=$$MAKEFLAGS; \ - if $(am__is_gnu_make); then \ - sane_makeflags=$$MFLAGS; \ - else \ - case $$MAKEFLAGS in \ - *\\[\ \ ]*) \ - bs=\\; \ - sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ - | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ - esac; \ - fi; \ - skip_next=no; \ - strip_trailopt () \ - { \ - flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ - }; \ - for flg in $$sane_makeflags; do \ - test $$skip_next = yes && { skip_next=no; continue; }; \ - case $$flg in \ - *=*|--*) continue;; \ - -*I) strip_trailopt 'I'; skip_next=yes;; \ - -*I?*) strip_trailopt 'I';; \ - -*O) strip_trailopt 'O'; skip_next=yes;; \ - -*O?*) strip_trailopt 'O';; \ - -*l) strip_trailopt 'l'; skip_next=yes;; \ - -*l?*) strip_trailopt 'l';; \ - -[dEDm]) skip_next=yes;; \ - -[JT]) skip_next=yes;; \ - esac; \ - case $$flg in \ - *$$target_option*) has_opt=yes; break;; \ - esac; \ - done; \ - test $$has_opt = yes -am__make_dryrun = (target_option=n; $(am__make_running_with_option)) -am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) -pkgdatadir = $(datadir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkglibexecdir = $(libexecdir)/@PACKAGE@ -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = @build@ -host_triplet = @host@ -@BUILD_DEMUX_TRUE@am__append_1 = libimagedec.la -subdir = imageio -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pthread.m4 \ - $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ - $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ - $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ - $(am__DIST_COMMON) -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = $(top_builddir)/src/webp/config.h -CONFIG_CLEAN_FILES = -CONFIG_CLEAN_VPATH_FILES = -LTLIBRARIES = $(noinst_LTLIBRARIES) -libimagedec_la_DEPENDENCIES = ../src/demux/libwebpdemux.la -am_libimagedec_la_OBJECTS = libimagedec_la-image_dec.lo \ - libimagedec_la-jpegdec.lo libimagedec_la-metadata.lo \ - libimagedec_la-pngdec.lo libimagedec_la-pnmdec.lo \ - libimagedec_la-tiffdec.lo libimagedec_la-webpdec.lo \ - libimagedec_la-wicdec.lo -libimagedec_la_OBJECTS = $(am_libimagedec_la_OBJECTS) -AM_V_lt = $(am__v_lt_@AM_V@) -am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) -am__v_lt_0 = --silent -am__v_lt_1 = -@BUILD_DEMUX_TRUE@am_libimagedec_la_rpath = -libimageenc_la_LIBADD = -am_libimageenc_la_OBJECTS = libimageenc_la-image_enc.lo -libimageenc_la_OBJECTS = $(am_libimageenc_la_OBJECTS) -libimageio_util_la_LIBADD = -am_libimageio_util_la_OBJECTS = imageio_util.lo -libimageio_util_la_OBJECTS = $(am_libimageio_util_la_OBJECTS) -AM_V_P = $(am__v_P_@AM_V@) -am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) -am__v_P_0 = false -am__v_P_1 = : -AM_V_GEN = $(am__v_GEN_@AM_V@) -am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) -am__v_GEN_0 = @echo " GEN " $@; -am__v_GEN_1 = -AM_V_at = $(am__v_at_@AM_V@) -am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) -am__v_at_0 = @ -am__v_at_1 = -DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/src/webp -depcomp = $(SHELL) $(top_srcdir)/depcomp -am__maybe_remake_depfiles = depfiles -am__depfiles_remade = ./$(DEPDIR)/imageio_util.Plo \ - ./$(DEPDIR)/libimagedec_la-image_dec.Plo \ - ./$(DEPDIR)/libimagedec_la-jpegdec.Plo \ - ./$(DEPDIR)/libimagedec_la-metadata.Plo \ - ./$(DEPDIR)/libimagedec_la-pngdec.Plo \ - ./$(DEPDIR)/libimagedec_la-pnmdec.Plo \ - ./$(DEPDIR)/libimagedec_la-tiffdec.Plo \ - ./$(DEPDIR)/libimagedec_la-webpdec.Plo \ - ./$(DEPDIR)/libimagedec_la-wicdec.Plo \ - ./$(DEPDIR)/libimageenc_la-image_enc.Plo -am__mv = mv -f -COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ - $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CFLAGS) $(CFLAGS) -AM_V_CC = $(am__v_CC_@AM_V@) -am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) -am__v_CC_0 = @echo " CC " $@; -am__v_CC_1 = -CCLD = $(CC) -LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ - $(AM_LDFLAGS) $(LDFLAGS) -o $@ -AM_V_CCLD = $(am__v_CCLD_@AM_V@) -am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) -am__v_CCLD_0 = @echo " CCLD " $@; -am__v_CCLD_1 = -SOURCES = $(libimagedec_la_SOURCES) $(libimageenc_la_SOURCES) \ - $(libimageio_util_la_SOURCES) -DIST_SOURCES = $(libimagedec_la_SOURCES) $(libimageenc_la_SOURCES) \ - $(libimageio_util_la_SOURCES) -am__can_run_installinfo = \ - case $$AM_UPDATE_INFO_DIR in \ - n|no|NO) false;; \ - *) (install-info --version) >/dev/null 2>&1;; \ - esac -HEADERS = $(noinst_HEADERS) -am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) -# Read a list of newline-separated strings from the standard input, -# and print each of them once, without duplicates. Input order is -# *not* preserved. -am__uniquify_input = $(AWK) '\ - BEGIN { nonempty = 0; } \ - { items[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in items) print i; }; } \ -' -# Make sure the list of sources is unique. This is necessary because, -# e.g., the same source file might be shared among _SOURCES variables -# for different programs/libraries. -am__define_uniq_tagged_files = \ - list='$(am__tagged_files)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | $(am__uniquify_input)` -ETAGS = etags -CTAGS = ctags -am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = @ACLOCAL@ -AMTAR = @AMTAR@ -AM_CFLAGS = @AM_CFLAGS@ -AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_builddir)/src -I$(top_srcdir)/src -AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ -AR = @AR@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -CC = @CC@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -DLLTOOL = @DLLTOOL@ -DSYMUTIL = @DSYMUTIL@ -DUMPBIN = @DUMPBIN@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -FGREP = @FGREP@ -GIF_INCLUDES = @GIF_INCLUDES@ -GIF_LIBS = @GIF_LIBS@ -GL_INCLUDES = @GL_INCLUDES@ -GL_LIBS = @GL_LIBS@ -GREP = @GREP@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -JPEG_INCLUDES = @JPEG_INCLUDES@ -JPEG_LIBS = @JPEG_LIBS@ -LD = @LD@ -LDFLAGS = @LDFLAGS@ -LIBOBJS = @LIBOBJS@ -LIBPNG_CONFIG = @LIBPNG_CONFIG@ -LIBS = @LIBS@ -LIBSDL_CONFIG = @LIBSDL_CONFIG@ -LIBTOOL = @LIBTOOL@ -LIPO = @LIPO@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ -MAKEINFO = @MAKEINFO@ -MANIFEST_TOOL = @MANIFEST_TOOL@ -MKDIR_P = @MKDIR_P@ -NEON_FLAGS = @NEON_FLAGS@ -NM = @NM@ -NMEDIT = @NMEDIT@ -OBJDUMP = @OBJDUMP@ -OBJEXT = @OBJEXT@ -OTOOL = @OTOOL@ -OTOOL64 = @OTOOL64@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_URL = @PACKAGE_URL@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -PNG_INCLUDES = @PNG_INCLUDES@ -PNG_LIBS = @PNG_LIBS@ -PTHREAD_CC = @PTHREAD_CC@ -PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ -PTHREAD_LIBS = @PTHREAD_LIBS@ -RANLIB = @RANLIB@ -SDL_INCLUDES = @SDL_INCLUDES@ -SDL_LIBS = @SDL_LIBS@ -SED = @SED@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -SSE2_FLAGS = @SSE2_FLAGS@ -SSE41_FLAGS = @SSE41_FLAGS@ -STRIP = @STRIP@ -TIFF_INCLUDES = @TIFF_INCLUDES@ -TIFF_LIBS = @TIFF_LIBS@ -USE_SWAP_16BIT_CSP = @USE_SWAP_16BIT_CSP@ -VERSION = @VERSION@ -abs_builddir = @abs_builddir@ -abs_srcdir = @abs_srcdir@ -abs_top_builddir = @abs_top_builddir@ -abs_top_srcdir = @abs_top_srcdir@ -ac_ct_AR = @ac_ct_AR@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ -am__include = @am__include@ -am__leading_dot = @am__leading_dot@ -am__quote = @am__quote@ -am__tar = @am__tar@ -am__untar = @am__untar@ -ax_pthread_config = @ax_pthread_config@ -bindir = @bindir@ -build = @build@ -build_alias = @build_alias@ -build_cpu = @build_cpu@ -build_os = @build_os@ -build_vendor = @build_vendor@ -builddir = @builddir@ -datadir = @datadir@ -datarootdir = @datarootdir@ -docdir = @docdir@ -dvidir = @dvidir@ -exec_prefix = @exec_prefix@ -host = @host@ -host_alias = @host_alias@ -host_cpu = @host_cpu@ -host_os = @host_os@ -host_vendor = @host_vendor@ -htmldir = @htmldir@ -includedir = @includedir@ -infodir = @infodir@ -install_sh = @install_sh@ -libdir = @libdir@ -libexecdir = @libexecdir@ -localedir = @localedir@ -localstatedir = @localstatedir@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -oldincludedir = @oldincludedir@ -pdfdir = @pdfdir@ -pkgconfigdir = @pkgconfigdir@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -psdir = @psdir@ -runstatedir = @runstatedir@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -srcdir = @srcdir@ -sysconfdir = @sysconfdir@ -target_alias = @target_alias@ -top_build_prefix = @top_build_prefix@ -top_builddir = @top_builddir@ -top_srcdir = @top_srcdir@ -noinst_LTLIBRARIES = libimageio_util.la $(am__append_1) libimageenc.la -noinst_HEADERS = ../src/webp/decode.h ../src/webp/types.h -libimageio_util_la_SOURCES = imageio_util.c imageio_util.h -libimagedec_la_SOURCES = image_dec.c image_dec.h jpegdec.c jpegdec.h \ - metadata.c metadata.h pngdec.c pngdec.h pnmdec.c pnmdec.h \ - tiffdec.c tiffdec.h webpdec.c webpdec.h wicdec.c wicdec.h -libimagedec_la_CPPFLAGS = $(JPEG_INCLUDES) $(PNG_INCLUDES) \ - $(TIFF_INCLUDES) $(AM_CPPFLAGS) -libimagedec_la_LIBADD = ../src/demux/libwebpdemux.la -libimageenc_la_SOURCES = image_enc.c image_enc.h -libimageenc_la_CPPFLAGS = $(JPEG_INCLUDES) $(PNG_INCLUDES) \ - $(TIFF_INCLUDES) $(AM_CPPFLAGS) -all: all-am - -.SUFFIXES: -.SUFFIXES: .c .lo .o .obj -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ - && { if test -f $@; then exit 0; else break; fi; }; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign imageio/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --foreign imageio/Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(am__aclocal_m4_deps): - -clean-noinstLTLIBRARIES: - -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) - @list='$(noinst_LTLIBRARIES)'; \ - locs=`for p in $$list; do echo $$p; done | \ - sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ - sort -u`; \ - test -z "$$locs" || { \ - echo rm -f $${locs}; \ - rm -f $${locs}; \ - } - -libimagedec.la: $(libimagedec_la_OBJECTS) $(libimagedec_la_DEPENDENCIES) $(EXTRA_libimagedec_la_DEPENDENCIES) - $(AM_V_CCLD)$(LINK) $(am_libimagedec_la_rpath) $(libimagedec_la_OBJECTS) $(libimagedec_la_LIBADD) $(LIBS) - -libimageenc.la: $(libimageenc_la_OBJECTS) $(libimageenc_la_DEPENDENCIES) $(EXTRA_libimageenc_la_DEPENDENCIES) - $(AM_V_CCLD)$(LINK) $(libimageenc_la_OBJECTS) $(libimageenc_la_LIBADD) $(LIBS) - -libimageio_util.la: $(libimageio_util_la_OBJECTS) $(libimageio_util_la_DEPENDENCIES) $(EXTRA_libimageio_util_la_DEPENDENCIES) - $(AM_V_CCLD)$(LINK) $(libimageio_util_la_OBJECTS) $(libimageio_util_la_LIBADD) $(LIBS) - -mostlyclean-compile: - -rm -f *.$(OBJEXT) - -distclean-compile: - -rm -f *.tab.c - -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/imageio_util.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libimagedec_la-image_dec.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libimagedec_la-jpegdec.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libimagedec_la-metadata.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libimagedec_la-pngdec.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libimagedec_la-pnmdec.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libimagedec_la-tiffdec.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libimagedec_la-webpdec.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libimagedec_la-wicdec.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libimageenc_la-image_enc.Plo@am__quote@ # am--include-marker - -$(am__depfiles_remade): - @$(MKDIR_P) $(@D) - @echo '# dummy' >$@-t && $(am__mv) $@-t $@ - -am--depfiles: $(am__depfiles_remade) - -.c.o: -@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ -@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ -@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< - -.c.obj: -@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ -@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ -@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` - -.c.lo: -@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ -@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ -@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< - -libimagedec_la-image_dec.lo: image_dec.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libimagedec_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libimagedec_la-image_dec.lo -MD -MP -MF $(DEPDIR)/libimagedec_la-image_dec.Tpo -c -o libimagedec_la-image_dec.lo `test -f 'image_dec.c' || echo '$(srcdir)/'`image_dec.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libimagedec_la-image_dec.Tpo $(DEPDIR)/libimagedec_la-image_dec.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='image_dec.c' object='libimagedec_la-image_dec.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libimagedec_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libimagedec_la-image_dec.lo `test -f 'image_dec.c' || echo '$(srcdir)/'`image_dec.c - -libimagedec_la-jpegdec.lo: jpegdec.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libimagedec_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libimagedec_la-jpegdec.lo -MD -MP -MF $(DEPDIR)/libimagedec_la-jpegdec.Tpo -c -o libimagedec_la-jpegdec.lo `test -f 'jpegdec.c' || echo '$(srcdir)/'`jpegdec.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libimagedec_la-jpegdec.Tpo $(DEPDIR)/libimagedec_la-jpegdec.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='jpegdec.c' object='libimagedec_la-jpegdec.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libimagedec_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libimagedec_la-jpegdec.lo `test -f 'jpegdec.c' || echo '$(srcdir)/'`jpegdec.c - -libimagedec_la-metadata.lo: metadata.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libimagedec_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libimagedec_la-metadata.lo -MD -MP -MF $(DEPDIR)/libimagedec_la-metadata.Tpo -c -o libimagedec_la-metadata.lo `test -f 'metadata.c' || echo '$(srcdir)/'`metadata.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libimagedec_la-metadata.Tpo $(DEPDIR)/libimagedec_la-metadata.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='metadata.c' object='libimagedec_la-metadata.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libimagedec_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libimagedec_la-metadata.lo `test -f 'metadata.c' || echo '$(srcdir)/'`metadata.c - -libimagedec_la-pngdec.lo: pngdec.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libimagedec_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libimagedec_la-pngdec.lo -MD -MP -MF $(DEPDIR)/libimagedec_la-pngdec.Tpo -c -o libimagedec_la-pngdec.lo `test -f 'pngdec.c' || echo '$(srcdir)/'`pngdec.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libimagedec_la-pngdec.Tpo $(DEPDIR)/libimagedec_la-pngdec.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='pngdec.c' object='libimagedec_la-pngdec.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libimagedec_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libimagedec_la-pngdec.lo `test -f 'pngdec.c' || echo '$(srcdir)/'`pngdec.c - -libimagedec_la-pnmdec.lo: pnmdec.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libimagedec_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libimagedec_la-pnmdec.lo -MD -MP -MF $(DEPDIR)/libimagedec_la-pnmdec.Tpo -c -o libimagedec_la-pnmdec.lo `test -f 'pnmdec.c' || echo '$(srcdir)/'`pnmdec.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libimagedec_la-pnmdec.Tpo $(DEPDIR)/libimagedec_la-pnmdec.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='pnmdec.c' object='libimagedec_la-pnmdec.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libimagedec_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libimagedec_la-pnmdec.lo `test -f 'pnmdec.c' || echo '$(srcdir)/'`pnmdec.c - -libimagedec_la-tiffdec.lo: tiffdec.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libimagedec_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libimagedec_la-tiffdec.lo -MD -MP -MF $(DEPDIR)/libimagedec_la-tiffdec.Tpo -c -o libimagedec_la-tiffdec.lo `test -f 'tiffdec.c' || echo '$(srcdir)/'`tiffdec.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libimagedec_la-tiffdec.Tpo $(DEPDIR)/libimagedec_la-tiffdec.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tiffdec.c' object='libimagedec_la-tiffdec.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libimagedec_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libimagedec_la-tiffdec.lo `test -f 'tiffdec.c' || echo '$(srcdir)/'`tiffdec.c - -libimagedec_la-webpdec.lo: webpdec.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libimagedec_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libimagedec_la-webpdec.lo -MD -MP -MF $(DEPDIR)/libimagedec_la-webpdec.Tpo -c -o libimagedec_la-webpdec.lo `test -f 'webpdec.c' || echo '$(srcdir)/'`webpdec.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libimagedec_la-webpdec.Tpo $(DEPDIR)/libimagedec_la-webpdec.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='webpdec.c' object='libimagedec_la-webpdec.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libimagedec_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libimagedec_la-webpdec.lo `test -f 'webpdec.c' || echo '$(srcdir)/'`webpdec.c - -libimagedec_la-wicdec.lo: wicdec.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libimagedec_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libimagedec_la-wicdec.lo -MD -MP -MF $(DEPDIR)/libimagedec_la-wicdec.Tpo -c -o libimagedec_la-wicdec.lo `test -f 'wicdec.c' || echo '$(srcdir)/'`wicdec.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libimagedec_la-wicdec.Tpo $(DEPDIR)/libimagedec_la-wicdec.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='wicdec.c' object='libimagedec_la-wicdec.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libimagedec_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libimagedec_la-wicdec.lo `test -f 'wicdec.c' || echo '$(srcdir)/'`wicdec.c - -libimageenc_la-image_enc.lo: image_enc.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libimageenc_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libimageenc_la-image_enc.lo -MD -MP -MF $(DEPDIR)/libimageenc_la-image_enc.Tpo -c -o libimageenc_la-image_enc.lo `test -f 'image_enc.c' || echo '$(srcdir)/'`image_enc.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libimageenc_la-image_enc.Tpo $(DEPDIR)/libimageenc_la-image_enc.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='image_enc.c' object='libimageenc_la-image_enc.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libimageenc_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libimageenc_la-image_enc.lo `test -f 'image_enc.c' || echo '$(srcdir)/'`image_enc.c - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs - -ID: $(am__tagged_files) - $(am__define_uniq_tagged_files); mkid -fID $$unique -tags: tags-am -TAGS: tags - -tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) - set x; \ - here=`pwd`; \ - $(am__define_uniq_tagged_files); \ - shift; \ - if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ - test -n "$$unique" || unique=$$empty_fix; \ - if test $$# -gt 0; then \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - "$$@" $$unique; \ - else \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$unique; \ - fi; \ - fi -ctags: ctags-am - -CTAGS: ctags -ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) - $(am__define_uniq_tagged_files); \ - test -z "$(CTAGS_ARGS)$$unique" \ - || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$unique - -GTAGS: - here=`$(am__cd) $(top_builddir) && pwd` \ - && $(am__cd) $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) "$$here" -cscopelist: cscopelist-am - -cscopelist-am: $(am__tagged_files) - list='$(am__tagged_files)'; \ - case "$(srcdir)" in \ - [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ - *) sdir=$(subdir)/$(srcdir) ;; \ - esac; \ - for i in $$list; do \ - if test -f "$$i"; then \ - echo "$(subdir)/$$i"; \ - else \ - echo "$$sdir/$$i"; \ - fi; \ - done >> $(top_builddir)/cscope.files - -distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - -distdir: $(BUILT_SOURCES) - $(MAKE) $(AM_MAKEFLAGS) distdir-am - -distdir-am: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - list='$(DISTFILES)'; \ - dist_files=`for file in $$list; do echo $$file; done | \ - sed -e "s|^$$srcdirstrip/||;t" \ - -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ - case $$dist_files in \ - */*) $(MKDIR_P) `echo "$$dist_files" | \ - sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ - sort -u` ;; \ - esac; \ - for file in $$dist_files; do \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - if test -d $$d/$$file; then \ - dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test -d "$(distdir)/$$file"; then \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ - else \ - test -f "$(distdir)/$$file" \ - || cp -p $$d/$$file "$(distdir)/$$file" \ - || exit 1; \ - fi; \ - done -check-am: all-am -check: check-am -all-am: Makefile $(LTLIBRARIES) $(HEADERS) -installdirs: -install: install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-am -install-strip: - if test -z '$(STRIP)'; then \ - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - install; \ - else \ - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ - fi -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-am - -clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ - mostlyclean-am - -distclean: distclean-am - -rm -f ./$(DEPDIR)/imageio_util.Plo - -rm -f ./$(DEPDIR)/libimagedec_la-image_dec.Plo - -rm -f ./$(DEPDIR)/libimagedec_la-jpegdec.Plo - -rm -f ./$(DEPDIR)/libimagedec_la-metadata.Plo - -rm -f ./$(DEPDIR)/libimagedec_la-pngdec.Plo - -rm -f ./$(DEPDIR)/libimagedec_la-pnmdec.Plo - -rm -f ./$(DEPDIR)/libimagedec_la-tiffdec.Plo - -rm -f ./$(DEPDIR)/libimagedec_la-webpdec.Plo - -rm -f ./$(DEPDIR)/libimagedec_la-wicdec.Plo - -rm -f ./$(DEPDIR)/libimageenc_la-image_enc.Plo - -rm -f Makefile -distclean-am: clean-am distclean-compile distclean-generic \ - distclean-tags - -dvi: dvi-am - -dvi-am: - -html: html-am - -html-am: - -info: info-am - -info-am: - -install-data-am: - -install-dvi: install-dvi-am - -install-dvi-am: - -install-exec-am: - -install-html: install-html-am - -install-html-am: - -install-info: install-info-am - -install-info-am: - -install-man: - -install-pdf: install-pdf-am - -install-pdf-am: - -install-ps: install-ps-am - -install-ps-am: - -installcheck-am: - -maintainer-clean: maintainer-clean-am - -rm -f ./$(DEPDIR)/imageio_util.Plo - -rm -f ./$(DEPDIR)/libimagedec_la-image_dec.Plo - -rm -f ./$(DEPDIR)/libimagedec_la-jpegdec.Plo - -rm -f ./$(DEPDIR)/libimagedec_la-metadata.Plo - -rm -f ./$(DEPDIR)/libimagedec_la-pngdec.Plo - -rm -f ./$(DEPDIR)/libimagedec_la-pnmdec.Plo - -rm -f ./$(DEPDIR)/libimagedec_la-tiffdec.Plo - -rm -f ./$(DEPDIR)/libimagedec_la-webpdec.Plo - -rm -f ./$(DEPDIR)/libimagedec_la-wicdec.Plo - -rm -f ./$(DEPDIR)/libimageenc_la-image_enc.Plo - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-compile mostlyclean-generic \ - mostlyclean-libtool - -pdf: pdf-am - -pdf-am: - -ps: ps-am - -ps-am: - -uninstall-am: - -.MAKE: install-am install-strip - -.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ - clean-generic clean-libtool clean-noinstLTLIBRARIES \ - cscopelist-am ctags ctags-am distclean distclean-compile \ - distclean-generic distclean-libtool distclean-tags distdir dvi \ - dvi-am html html-am info info-am install install-am \ - install-data install-data-am install-dvi install-dvi-am \ - install-exec install-exec-am install-html install-html-am \ - install-info install-info-am install-man install-pdf \ - install-pdf-am install-ps install-ps-am install-strip \ - installcheck installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-compile \ - mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ - tags tags-am uninstall uninstall-am - -.PRECIOUS: Makefile - - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/Extended/libwebp/imageio/image_dec.c b/Extended/libwebp/imageio/image_dec.c deleted file mode 100644 index 08a1b18..0000000 --- a/Extended/libwebp/imageio/image_dec.c +++ /dev/null @@ -1,66 +0,0 @@ -// Copyright 2016 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Generic image-type guessing. - -#include "./image_dec.h" - -static WEBP_INLINE uint32_t GetBE32(const uint8_t buf[]) { - return ((uint32_t)buf[0] << 24) | (buf[1] << 16) | (buf[2] << 8) | buf[3]; -} - -WebPInputFileFormat WebPGuessImageType(const uint8_t* const data, - size_t data_size) { - WebPInputFileFormat format = WEBP_UNSUPPORTED_FORMAT; - if (data != NULL && data_size >= 12) { - const uint32_t magic1 = GetBE32(data + 0); - const uint32_t magic2 = GetBE32(data + 8); - if (magic1 == 0x89504E47U) { - format = WEBP_PNG_FORMAT; - } else if (magic1 >= 0xFFD8FF00U && magic1 <= 0xFFD8FFFFU) { - format = WEBP_JPEG_FORMAT; - } else if (magic1 == 0x49492A00 || magic1 == 0x4D4D002A) { - format = WEBP_TIFF_FORMAT; - } else if (magic1 == 0x52494646 && magic2 == 0x57454250) { - format = WEBP_WEBP_FORMAT; - } else if (((magic1 >> 24) & 0xff) == 'P') { - const int type = (magic1 >> 16) & 0xff; - // we only support 'P5 -> P7' for now. - if (type >= '5' && type <= '7') format = WEBP_PNM_FORMAT; - } - } - return format; -} - -static int FailReader(const uint8_t* const data, size_t data_size, - struct WebPPicture* const pic, - int keep_alpha, struct Metadata* const metadata) { - (void)data; - (void)data_size; - (void)pic; - (void)keep_alpha; - (void)metadata; - return 0; -} - -WebPImageReader WebPGetImageReader(WebPInputFileFormat format) { - switch (format) { - case WEBP_PNG_FORMAT: return ReadPNG; - case WEBP_JPEG_FORMAT: return ReadJPEG; - case WEBP_TIFF_FORMAT: return ReadTIFF; - case WEBP_WEBP_FORMAT: return ReadWebP; - case WEBP_PNM_FORMAT: return ReadPNM; - default: return FailReader; - } -} - -WebPImageReader WebPGuessImageReader(const uint8_t* const data, - size_t data_size) { - return WebPGetImageReader(WebPGuessImageType(data, data_size)); -} diff --git a/Extended/libwebp/imageio/image_dec.h b/Extended/libwebp/imageio/image_dec.h deleted file mode 100644 index df411e1..0000000 --- a/Extended/libwebp/imageio/image_dec.h +++ /dev/null @@ -1,67 +0,0 @@ -// Copyright 2016 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// All-in-one library to decode PNG/JPEG/WebP/TIFF/WIC input images. -// -// Author: Skal (pascal.massimino@gmail.com) - -#ifndef WEBP_IMAGEIO_IMAGE_DEC_H_ -#define WEBP_IMAGEIO_IMAGE_DEC_H_ - -#include "webp/types.h" - -#ifdef HAVE_CONFIG_H -#include "webp/config.h" -#endif - -#include "./metadata.h" -#include "./jpegdec.h" -#include "./pngdec.h" -#include "./pnmdec.h" -#include "./tiffdec.h" -#include "./webpdec.h" -#include "./wicdec.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef enum { - WEBP_PNG_FORMAT = 0, - WEBP_JPEG_FORMAT, - WEBP_TIFF_FORMAT, - WEBP_WEBP_FORMAT, - WEBP_PNM_FORMAT, - WEBP_UNSUPPORTED_FORMAT -} WebPInputFileFormat; - -// Try to infer the image format. 'data_size' should be larger than 12. -// Returns WEBP_UNSUPPORTED_FORMAT if format can't be guess safely. -WebPInputFileFormat WebPGuessImageType(const uint8_t* const data, - size_t data_size); - -// Signature for common image-reading functions (ReadPNG, ReadJPEG, ...) -typedef int (*WebPImageReader)(const uint8_t* const data, size_t data_size, - struct WebPPicture* const pic, - int keep_alpha, struct Metadata* const metadata); - -// Return the reader associated to a given file format. -WebPImageReader WebPGetImageReader(WebPInputFileFormat format); - -// This function is similar to WebPGuessImageType(), but returns a -// suitable reader function. The returned reader is never NULL, but -// unknown formats will return an always-failing valid reader. -WebPImageReader WebPGuessImageReader(const uint8_t* const data, - size_t data_size); - -#ifdef __cplusplus -} // extern "C" -#endif - -#endif // WEBP_IMAGEIO_IMAGE_DEC_H_ diff --git a/Extended/libwebp/imageio/image_enc.c b/Extended/libwebp/imageio/image_enc.c deleted file mode 100644 index fccb92b..0000000 --- a/Extended/libwebp/imageio/image_enc.c +++ /dev/null @@ -1,604 +0,0 @@ -// Copyright 2016 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Save image - -#include "./image_enc.h" - -#include -#include - -#ifdef WEBP_HAVE_PNG -#include -#include // note: this must be included *after* png.h -#endif - -#ifdef HAVE_WINCODEC_H -#ifdef __MINGW32__ -#define INITGUID // Without this GUIDs are declared extern and fail to link -#endif -#define CINTERFACE -#define COBJMACROS -#define _WIN32_IE 0x500 // Workaround bug in shlwapi.h when compiling C++ - // code with COBJMACROS. -#include // CreateStreamOnHGlobal() -#include -#include -#include -#include -#endif - -#include "./imageio_util.h" -#include "../examples/unicode.h" - -//------------------------------------------------------------------------------ -// PNG - -#ifdef HAVE_WINCODEC_H - -#define IFS(fn) \ - do { \ - if (SUCCEEDED(hr)) { \ - hr = (fn); \ - if (FAILED(hr)) fprintf(stderr, #fn " failed %08lx\n", hr); \ - } \ - } while (0) - -#ifdef __cplusplus -#define MAKE_REFGUID(x) (x) -#else -#define MAKE_REFGUID(x) &(x) -#endif - -static HRESULT CreateOutputStream(const char* out_file_name, - int write_to_mem, IStream** stream) { - HRESULT hr = S_OK; - if (write_to_mem) { - // Output to a memory buffer. This is freed when 'stream' is released. - IFS(CreateStreamOnHGlobal(NULL, TRUE, stream)); - } else { - IFS(SHCreateStreamOnFile((const LPTSTR)out_file_name, - STGM_WRITE | STGM_CREATE, stream)); - } - if (FAILED(hr)) { - _ftprintf(stderr, _T("Error opening output file %s (%08lx)\n"), - (const LPTSTR)out_file_name, hr); - } - return hr; -} - -static HRESULT WriteUsingWIC(const char* out_file_name, int use_stdout, - REFGUID container_guid, - uint8_t* rgb, int stride, - uint32_t width, uint32_t height, int has_alpha) { - HRESULT hr = S_OK; - IWICImagingFactory* factory = NULL; - IWICBitmapFrameEncode* frame = NULL; - IWICBitmapEncoder* encoder = NULL; - IStream* stream = NULL; - WICPixelFormatGUID pixel_format = has_alpha ? GUID_WICPixelFormat32bppBGRA - : GUID_WICPixelFormat24bppBGR; - - if (out_file_name == NULL || rgb == NULL) return E_INVALIDARG; - - IFS(CoInitialize(NULL)); - IFS(CoCreateInstance(MAKE_REFGUID(CLSID_WICImagingFactory), NULL, - CLSCTX_INPROC_SERVER, - MAKE_REFGUID(IID_IWICImagingFactory), - (LPVOID*)&factory)); - if (hr == REGDB_E_CLASSNOTREG) { - fprintf(stderr, - "Couldn't access Windows Imaging Component (are you running " - "Windows XP SP3 or newer?). PNG support not available. " - "Use -ppm or -pgm for available PPM and PGM formats.\n"); - } - IFS(CreateOutputStream(out_file_name, use_stdout, &stream)); - IFS(IWICImagingFactory_CreateEncoder(factory, container_guid, NULL, - &encoder)); - IFS(IWICBitmapEncoder_Initialize(encoder, stream, - WICBitmapEncoderNoCache)); - IFS(IWICBitmapEncoder_CreateNewFrame(encoder, &frame, NULL)); - IFS(IWICBitmapFrameEncode_Initialize(frame, NULL)); - IFS(IWICBitmapFrameEncode_SetSize(frame, width, height)); - IFS(IWICBitmapFrameEncode_SetPixelFormat(frame, &pixel_format)); - IFS(IWICBitmapFrameEncode_WritePixels(frame, height, stride, - height * stride, rgb)); - IFS(IWICBitmapFrameEncode_Commit(frame)); - IFS(IWICBitmapEncoder_Commit(encoder)); - - if (SUCCEEDED(hr) && use_stdout) { - HGLOBAL image; - IFS(GetHGlobalFromStream(stream, &image)); - if (SUCCEEDED(hr)) { - HANDLE std_output = GetStdHandle(STD_OUTPUT_HANDLE); - DWORD mode; - const BOOL update_mode = GetConsoleMode(std_output, &mode); - const void* const image_mem = GlobalLock(image); - DWORD bytes_written = 0; - - // Clear output processing if necessary, then output the image. - if (update_mode) SetConsoleMode(std_output, 0); - if (!WriteFile(std_output, image_mem, (DWORD)GlobalSize(image), - &bytes_written, NULL) || - bytes_written != GlobalSize(image)) { - hr = E_FAIL; - } - if (update_mode) SetConsoleMode(std_output, mode); - GlobalUnlock(image); - } - } - - if (frame != NULL) IUnknown_Release(frame); - if (encoder != NULL) IUnknown_Release(encoder); - if (factory != NULL) IUnknown_Release(factory); - if (stream != NULL) IUnknown_Release(stream); - return hr; -} - -int WebPWritePNG(const char* out_file_name, int use_stdout, - const WebPDecBuffer* const buffer) { - const uint32_t width = buffer->width; - const uint32_t height = buffer->height; - uint8_t* const rgb = buffer->u.RGBA.rgba; - const int stride = buffer->u.RGBA.stride; - const int has_alpha = WebPIsAlphaMode(buffer->colorspace); - - return SUCCEEDED(WriteUsingWIC(out_file_name, use_stdout, - MAKE_REFGUID(GUID_ContainerFormatPng), - rgb, stride, width, height, has_alpha)); -} - -#elif defined(WEBP_HAVE_PNG) // !HAVE_WINCODEC_H -static void PNGAPI PNGErrorFunction(png_structp png, png_const_charp dummy) { - (void)dummy; // remove variable-unused warning - longjmp(png_jmpbuf(png), 1); -} - -int WebPWritePNG(FILE* out_file, const WebPDecBuffer* const buffer) { - volatile png_structp png; - volatile png_infop info; - - if (out_file == NULL || buffer == NULL) return 0; - - png = png_create_write_struct(PNG_LIBPNG_VER_STRING, - NULL, PNGErrorFunction, NULL); - if (png == NULL) { - return 0; - } - info = png_create_info_struct(png); - if (info == NULL) { - png_destroy_write_struct((png_structpp)&png, NULL); - return 0; - } - if (setjmp(png_jmpbuf(png))) { - png_destroy_write_struct((png_structpp)&png, (png_infopp)&info); - return 0; - } - png_init_io(png, out_file); - { - const uint32_t width = buffer->width; - const uint32_t height = buffer->height; - png_bytep row = buffer->u.RGBA.rgba; - const int stride = buffer->u.RGBA.stride; - const int has_alpha = WebPIsAlphaMode(buffer->colorspace); - uint32_t y; - - png_set_IHDR(png, info, width, height, 8, - has_alpha ? PNG_COLOR_TYPE_RGBA : PNG_COLOR_TYPE_RGB, - PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_DEFAULT, - PNG_FILTER_TYPE_DEFAULT); - png_write_info(png, info); - for (y = 0; y < height; ++y) { - png_write_rows(png, &row, 1); - row += stride; - } - } - png_write_end(png, info); - png_destroy_write_struct((png_structpp)&png, (png_infopp)&info); - return 1; -} -#else // !HAVE_WINCODEC_H && !WEBP_HAVE_PNG -int WebPWritePNG(FILE* fout, const WebPDecBuffer* const buffer) { - if (fout == NULL || buffer == NULL) return 0; - - fprintf(stderr, "PNG support not compiled. Please install the libpng " - "development package before building.\n"); - fprintf(stderr, "You can run with -ppm flag to decode in PPM format.\n"); - return 0; -} -#endif - -//------------------------------------------------------------------------------ -// PPM / PAM - -static int WritePPMPAM(FILE* fout, const WebPDecBuffer* const buffer, - int alpha) { - if (fout == NULL || buffer == NULL) { - return 0; - } else { - const uint32_t width = buffer->width; - const uint32_t height = buffer->height; - const uint8_t* row = buffer->u.RGBA.rgba; - const int stride = buffer->u.RGBA.stride; - const size_t bytes_per_px = alpha ? 4 : 3; - uint32_t y; - - if (row == NULL) return 0; - - if (alpha) { - fprintf(fout, "P7\nWIDTH %u\nHEIGHT %u\nDEPTH 4\nMAXVAL 255\n" - "TUPLTYPE RGB_ALPHA\nENDHDR\n", width, height); - } else { - fprintf(fout, "P6\n%u %u\n255\n", width, height); - } - for (y = 0; y < height; ++y) { - if (fwrite(row, width, bytes_per_px, fout) != bytes_per_px) { - return 0; - } - row += stride; - } - } - return 1; -} - -int WebPWritePPM(FILE* fout, const WebPDecBuffer* const buffer) { - return WritePPMPAM(fout, buffer, 0); -} - -int WebPWritePAM(FILE* fout, const WebPDecBuffer* const buffer) { - return WritePPMPAM(fout, buffer, 1); -} - -//------------------------------------------------------------------------------ -// Raw PGM - -// Save 16b mode (RGBA4444, RGB565, ...) for debugging purpose. -int WebPWrite16bAsPGM(FILE* fout, const WebPDecBuffer* const buffer) { - const uint32_t width = buffer->width; - const uint32_t height = buffer->height; - const uint8_t* rgba = buffer->u.RGBA.rgba; - const int stride = buffer->u.RGBA.stride; - const uint32_t bytes_per_px = 2; - uint32_t y; - - if (fout == NULL || buffer == NULL || rgba == NULL) return 0; - - fprintf(fout, "P5\n%u %u\n255\n", width * bytes_per_px, height); - for (y = 0; y < height; ++y) { - if (fwrite(rgba, width, bytes_per_px, fout) != bytes_per_px) { - return 0; - } - rgba += stride; - } - return 1; -} - -//------------------------------------------------------------------------------ -// BMP - -static void PutLE16(uint8_t* const dst, uint32_t value) { - dst[0] = (value >> 0) & 0xff; - dst[1] = (value >> 8) & 0xff; -} - -static void PutLE32(uint8_t* const dst, uint32_t value) { - PutLE16(dst + 0, (value >> 0) & 0xffff); - PutLE16(dst + 2, (value >> 16) & 0xffff); -} - -#define BMP_HEADER_SIZE 54 -int WebPWriteBMP(FILE* fout, const WebPDecBuffer* const buffer) { - const int has_alpha = WebPIsAlphaMode(buffer->colorspace); - const uint32_t width = buffer->width; - const uint32_t height = buffer->height; - const uint8_t* rgba = buffer->u.RGBA.rgba; - const int stride = buffer->u.RGBA.stride; - const uint32_t bytes_per_px = has_alpha ? 4 : 3; - uint32_t y; - const uint32_t line_size = bytes_per_px * width; - const uint32_t bmp_stride = (line_size + 3) & ~3; // pad to 4 - const uint32_t total_size = bmp_stride * height + BMP_HEADER_SIZE; - uint8_t bmp_header[BMP_HEADER_SIZE] = { 0 }; - - if (fout == NULL || buffer == NULL || rgba == NULL) return 0; - - // bitmap file header - PutLE16(bmp_header + 0, 0x4d42); // signature 'BM' - PutLE32(bmp_header + 2, total_size); // size including header - PutLE32(bmp_header + 6, 0); // reserved - PutLE32(bmp_header + 10, BMP_HEADER_SIZE); // offset to pixel array - // bitmap info header - PutLE32(bmp_header + 14, 40); // DIB header size - PutLE32(bmp_header + 18, width); // dimensions - PutLE32(bmp_header + 22, -(int)height); // vertical flip! - PutLE16(bmp_header + 26, 1); // number of planes - PutLE16(bmp_header + 28, bytes_per_px * 8); // bits per pixel - PutLE32(bmp_header + 30, 0); // no compression (BI_RGB) - PutLE32(bmp_header + 34, 0); // image size (dummy) - PutLE32(bmp_header + 38, 2400); // x pixels/meter - PutLE32(bmp_header + 42, 2400); // y pixels/meter - PutLE32(bmp_header + 46, 0); // number of palette colors - PutLE32(bmp_header + 50, 0); // important color count - - // TODO(skal): color profile - - // write header - if (fwrite(bmp_header, sizeof(bmp_header), 1, fout) != 1) { - return 0; - } - - // write pixel array - for (y = 0; y < height; ++y) { - if (fwrite(rgba, line_size, 1, fout) != 1) { - return 0; - } - // write padding zeroes - if (bmp_stride != line_size) { - const uint8_t zeroes[3] = { 0 }; - if (fwrite(zeroes, bmp_stride - line_size, 1, fout) != 1) { - return 0; - } - } - rgba += stride; - } - return 1; -} -#undef BMP_HEADER_SIZE - -//------------------------------------------------------------------------------ -// TIFF - -#define NUM_IFD_ENTRIES 15 -#define EXTRA_DATA_SIZE 16 -// 10b for signature/header + n * 12b entries + 4b for IFD terminator: -#define EXTRA_DATA_OFFSET (10 + 12 * NUM_IFD_ENTRIES + 4) -#define TIFF_HEADER_SIZE (EXTRA_DATA_OFFSET + EXTRA_DATA_SIZE) - -int WebPWriteTIFF(FILE* fout, const WebPDecBuffer* const buffer) { - const int has_alpha = WebPIsAlphaMode(buffer->colorspace); - const uint32_t width = buffer->width; - const uint32_t height = buffer->height; - const uint8_t* rgba = buffer->u.RGBA.rgba; - const int stride = buffer->u.RGBA.stride; - const uint8_t bytes_per_px = has_alpha ? 4 : 3; - const uint8_t assoc_alpha = - WebPIsPremultipliedMode(buffer->colorspace) ? 1 : 2; - // For non-alpha case, we omit tag 0x152 (ExtraSamples). - const uint8_t num_ifd_entries = has_alpha ? NUM_IFD_ENTRIES - : NUM_IFD_ENTRIES - 1; - uint8_t tiff_header[TIFF_HEADER_SIZE] = { - 0x49, 0x49, 0x2a, 0x00, // little endian signature - 8, 0, 0, 0, // offset to the unique IFD that follows - // IFD (offset = 8). Entries must be written in increasing tag order. - num_ifd_entries, 0, // Number of entries in the IFD (12 bytes each). - 0x00, 0x01, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, // 10: Width (TBD) - 0x01, 0x01, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, // 22: Height (TBD) - 0x02, 0x01, 3, 0, bytes_per_px, 0, 0, 0, // 34: BitsPerSample: 8888 - EXTRA_DATA_OFFSET + 0, 0, 0, 0, - 0x03, 0x01, 3, 0, 1, 0, 0, 0, 1, 0, 0, 0, // 46: Compression: none - 0x06, 0x01, 3, 0, 1, 0, 0, 0, 2, 0, 0, 0, // 58: Photometric: RGB - 0x11, 0x01, 4, 0, 1, 0, 0, 0, // 70: Strips offset: - TIFF_HEADER_SIZE, 0, 0, 0, // data follows header - 0x12, 0x01, 3, 0, 1, 0, 0, 0, 1, 0, 0, 0, // 82: Orientation: topleft - 0x15, 0x01, 3, 0, 1, 0, 0, 0, // 94: SamplesPerPixels - bytes_per_px, 0, 0, 0, - 0x16, 0x01, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, // 106: Rows per strip (TBD) - 0x17, 0x01, 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, // 118: StripByteCount (TBD) - 0x1a, 0x01, 5, 0, 1, 0, 0, 0, // 130: X-resolution - EXTRA_DATA_OFFSET + 8, 0, 0, 0, - 0x1b, 0x01, 5, 0, 1, 0, 0, 0, // 142: Y-resolution - EXTRA_DATA_OFFSET + 8, 0, 0, 0, - 0x1c, 0x01, 3, 0, 1, 0, 0, 0, 1, 0, 0, 0, // 154: PlanarConfiguration - 0x28, 0x01, 3, 0, 1, 0, 0, 0, 2, 0, 0, 0, // 166: ResolutionUnit (inch) - 0x52, 0x01, 3, 0, 1, 0, 0, 0, - assoc_alpha, 0, 0, 0, // 178: ExtraSamples: rgbA/RGBA - 0, 0, 0, 0, // 190: IFD terminator - // EXTRA_DATA_OFFSET: - 8, 0, 8, 0, 8, 0, 8, 0, // BitsPerSample - 72, 0, 0, 0, 1, 0, 0, 0 // 72 pixels/inch, for X/Y-resolution - }; - uint32_t y; - - if (fout == NULL || buffer == NULL || rgba == NULL) return 0; - - // Fill placeholders in IFD: - PutLE32(tiff_header + 10 + 8, width); - PutLE32(tiff_header + 22 + 8, height); - PutLE32(tiff_header + 106 + 8, height); - PutLE32(tiff_header + 118 + 8, width * bytes_per_px * height); - if (!has_alpha) PutLE32(tiff_header + 178, 0); // IFD terminator - - // write header - if (fwrite(tiff_header, sizeof(tiff_header), 1, fout) != 1) { - return 0; - } - // write pixel values - for (y = 0; y < height; ++y) { - if (fwrite(rgba, bytes_per_px, width, fout) != width) { - return 0; - } - rgba += stride; - } - - return 1; -} - -#undef TIFF_HEADER_SIZE -#undef EXTRA_DATA_OFFSET -#undef EXTRA_DATA_SIZE -#undef NUM_IFD_ENTRIES - -//------------------------------------------------------------------------------ -// Raw Alpha - -int WebPWriteAlphaPlane(FILE* fout, const WebPDecBuffer* const buffer) { - if (fout == NULL || buffer == NULL) { - return 0; - } else { - const uint32_t width = buffer->width; - const uint32_t height = buffer->height; - const uint8_t* a = buffer->u.YUVA.a; - const int a_stride = buffer->u.YUVA.a_stride; - uint32_t y; - - if (a == NULL) return 0; - - fprintf(fout, "P5\n%u %u\n255\n", width, height); - for (y = 0; y < height; ++y) { - if (fwrite(a, width, 1, fout) != 1) return 0; - a += a_stride; - } - return 1; - } -} - -//------------------------------------------------------------------------------ -// PGM with IMC4 layout - -int WebPWritePGM(FILE* fout, const WebPDecBuffer* const buffer) { - if (fout == NULL || buffer == NULL) { - return 0; - } else { - const int width = buffer->width; - const int height = buffer->height; - const WebPYUVABuffer* const yuv = &buffer->u.YUVA; - const uint8_t* src_y = yuv->y; - const uint8_t* src_u = yuv->u; - const uint8_t* src_v = yuv->v; - const uint8_t* src_a = yuv->a; - const int uv_width = (width + 1) / 2; - const int uv_height = (height + 1) / 2; - const int a_height = (src_a != NULL) ? height : 0; - int ok = 1; - int y; - - if (src_y == NULL || src_u == NULL || src_v == NULL) return 0; - - fprintf(fout, "P5\n%d %d\n255\n", - (width + 1) & ~1, height + uv_height + a_height); - for (y = 0; ok && y < height; ++y) { - ok &= (fwrite(src_y, width, 1, fout) == 1); - if (width & 1) fputc(0, fout); // padding byte - src_y += yuv->y_stride; - } - for (y = 0; ok && y < uv_height; ++y) { - ok &= (fwrite(src_u, uv_width, 1, fout) == 1); - ok &= (fwrite(src_v, uv_width, 1, fout) == 1); - src_u += yuv->u_stride; - src_v += yuv->v_stride; - } - for (y = 0; ok && y < a_height; ++y) { - ok &= (fwrite(src_a, width, 1, fout) == 1); - if (width & 1) fputc(0, fout); // padding byte - src_a += yuv->a_stride; - } - return ok; - } -} - -//------------------------------------------------------------------------------ -// Raw YUV(A) planes - -int WebPWriteYUV(FILE* fout, const WebPDecBuffer* const buffer) { - if (fout == NULL || buffer == NULL) { - return 0; - } else { - const int width = buffer->width; - const int height = buffer->height; - const WebPYUVABuffer* const yuv = &buffer->u.YUVA; - const uint8_t* src_y = yuv->y; - const uint8_t* src_u = yuv->u; - const uint8_t* src_v = yuv->v; - const uint8_t* src_a = yuv->a; - const int uv_width = (width + 1) / 2; - const int uv_height = (height + 1) / 2; - const int a_height = (src_a != NULL) ? height : 0; - int ok = 1; - int y; - - if (src_y == NULL || src_u == NULL || src_v == NULL) return 0; - - for (y = 0; ok && y < height; ++y) { - ok &= (fwrite(src_y, width, 1, fout) == 1); - src_y += yuv->y_stride; - } - for (y = 0; ok && y < uv_height; ++y) { - ok &= (fwrite(src_u, uv_width, 1, fout) == 1); - src_u += yuv->u_stride; - } - for (y = 0; ok && y < uv_height; ++y) { - ok &= (fwrite(src_v, uv_width, 1, fout) == 1); - src_v += yuv->v_stride; - } - for (y = 0; ok && y < a_height; ++y) { - ok &= (fwrite(src_a, width, 1, fout) == 1); - src_a += yuv->a_stride; - } - return ok; - } -} - -//------------------------------------------------------------------------------ -// Generic top-level call - -int WebPSaveImage(const WebPDecBuffer* const buffer, - WebPOutputFileFormat format, - const char* const out_file_name) { - FILE* fout = NULL; - int needs_open_file = 1; - const int use_stdout = - (out_file_name != NULL) && !WSTRCMP(out_file_name, "-"); - int ok = 1; - - if (buffer == NULL || out_file_name == NULL) return 0; - -#ifdef HAVE_WINCODEC_H - needs_open_file = (format != PNG); -#endif - - if (needs_open_file) { - fout = use_stdout ? ImgIoUtilSetBinaryMode(stdout) - : WFOPEN(out_file_name, "wb"); - if (fout == NULL) { - WFPRINTF(stderr, "Error opening output file %s\n", - (const W_CHAR*)out_file_name); - return 0; - } - } - - if (format == PNG || - format == RGBA || format == BGRA || format == ARGB || - format == rgbA || format == bgrA || format == Argb) { -#ifdef HAVE_WINCODEC_H - ok &= WebPWritePNG(out_file_name, use_stdout, buffer); -#else - ok &= WebPWritePNG(fout, buffer); -#endif - } else if (format == PAM) { - ok &= WebPWritePAM(fout, buffer); - } else if (format == PPM || format == RGB || format == BGR) { - ok &= WebPWritePPM(fout, buffer); - } else if (format == RGBA_4444 || format == RGB_565 || format == rgbA_4444) { - ok &= WebPWrite16bAsPGM(fout, buffer); - } else if (format == BMP) { - ok &= WebPWriteBMP(fout, buffer); - } else if (format == TIFF) { - ok &= WebPWriteTIFF(fout, buffer); - } else if (format == RAW_YUV) { - ok &= WebPWriteYUV(fout, buffer); - } else if (format == PGM || format == YUV || format == YUVA) { - ok &= WebPWritePGM(fout, buffer); - } else if (format == ALPHA_PLANE_ONLY) { - ok &= WebPWriteAlphaPlane(fout, buffer); - } - if (fout != NULL && fout != stdout) { - fclose(fout); - } - return ok; -} diff --git a/Extended/libwebp/imageio/image_enc.h b/Extended/libwebp/imageio/image_enc.h deleted file mode 100644 index f8abdac..0000000 --- a/Extended/libwebp/imageio/image_enc.h +++ /dev/null @@ -1,96 +0,0 @@ -// Copyright 2016 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// All-in-one library to save PNG/JPEG/WebP/TIFF/WIC images. -// -// Author: Skal (pascal.massimino@gmail.com) - -#ifndef WEBP_IMAGEIO_IMAGE_ENC_H_ -#define WEBP_IMAGEIO_IMAGE_ENC_H_ - -#include - -#ifdef HAVE_CONFIG_H -#include "webp/config.h" -#endif - -#include "webp/types.h" -#include "webp/decode.h" - -#ifdef __cplusplus -extern "C" { -#endif - -// Output types -typedef enum { - PNG = 0, - PAM, - PPM, - PGM, - BMP, - TIFF, - RAW_YUV, - ALPHA_PLANE_ONLY, // this is for experimenting only - // forced colorspace output (for testing, mostly) - RGB, RGBA, BGR, BGRA, ARGB, - RGBA_4444, RGB_565, - rgbA, bgrA, Argb, rgbA_4444, - YUV, YUVA -} WebPOutputFileFormat; - -// General all-purpose call. -// Most formats expect a 'buffer' containing RGBA-like samples, except -// RAW_YUV, YUV and YUVA formats. -// If 'out_file_name' is "-", data is saved to stdout. -// Returns false if an error occurred, true otherwise. -int WebPSaveImage(const WebPDecBuffer* const buffer, - WebPOutputFileFormat format, const char* const out_file_name); - -// Save to PNG. -#ifdef HAVE_WINCODEC_H -int WebPWritePNG(const char* out_file_name, int use_stdout, - const struct WebPDecBuffer* const buffer); -#else -int WebPWritePNG(FILE* out_file, const WebPDecBuffer* const buffer); -#endif - -// Save to PPM format (RGB, no alpha) -int WebPWritePPM(FILE* fout, const struct WebPDecBuffer* const buffer); - -// Save to PAM format (= PPM + alpha) -int WebPWritePAM(FILE* fout, const struct WebPDecBuffer* const buffer); - -// Save 16b mode (RGBA4444, RGB565, ...) for debugging purposes. -int WebPWrite16bAsPGM(FILE* fout, const struct WebPDecBuffer* const buffer); - -// Save as BMP -int WebPWriteBMP(FILE* fout, const struct WebPDecBuffer* const buffer); - -// Save as TIFF -int WebPWriteTIFF(FILE* fout, const struct WebPDecBuffer* const buffer); - -// Save the ALPHA plane (only) as a PGM -int WebPWriteAlphaPlane(FILE* fout, const struct WebPDecBuffer* const buffer); - -// Save as YUV samples as PGM format (using IMC4 layout). -// See: http://www.fourcc.org/yuv.php#IMC4. -// (very convenient format for viewing the samples, esp. for odd dimensions). -int WebPWritePGM(FILE* fout, const struct WebPDecBuffer* const buffer); - -// Save YUV(A) planes sequentially (raw dump) -int WebPWriteYUV(FILE* fout, const struct WebPDecBuffer* const buffer); - -// Save 16b mode (RGBA4444, RGB565, ...) as PGM format, for debugging purposes. -int WebPWrite16bAsPGM(FILE* fout, const struct WebPDecBuffer* const buffer); - -#ifdef __cplusplus -} // extern "C" -#endif - -#endif // WEBP_IMAGEIO_IMAGE_ENC_H_ diff --git a/Extended/libwebp/imageio/imageio_util.c b/Extended/libwebp/imageio/imageio_util.c deleted file mode 100644 index 9833dcb..0000000 --- a/Extended/libwebp/imageio/imageio_util.c +++ /dev/null @@ -1,160 +0,0 @@ -// Copyright 2016 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Utility functions used by the image decoders. -// - -#include "./imageio_util.h" - -#if defined(_WIN32) -#include // for _O_BINARY -#include // for _setmode() -#endif -#include -#include -#include "../examples/unicode.h" - -// ----------------------------------------------------------------------------- -// File I/O - -FILE* ImgIoUtilSetBinaryMode(FILE* file) { -#if defined(_WIN32) - if (_setmode(_fileno(file), _O_BINARY) == -1) { - fprintf(stderr, "Failed to reopen file in O_BINARY mode.\n"); - return NULL; - } -#endif - return file; -} - -int ImgIoUtilReadFromStdin(const uint8_t** data, size_t* data_size) { - static const size_t kBlockSize = 16384; // default initial size - size_t max_size = 0; - size_t size = 0; - uint8_t* input = NULL; - - if (data == NULL || data_size == NULL) return 0; - *data = NULL; - *data_size = 0; - - if (!ImgIoUtilSetBinaryMode(stdin)) return 0; - - while (!feof(stdin)) { - // We double the buffer size each time and read as much as possible. - const size_t extra_size = (max_size == 0) ? kBlockSize : max_size; - // we allocate one extra byte for the \0 terminator - void* const new_data = realloc(input, max_size + extra_size + 1); - if (new_data == NULL) goto Error; - input = (uint8_t*)new_data; - max_size += extra_size; - size += fread(input + size, 1, extra_size, stdin); - if (size < max_size) break; - } - if (ferror(stdin)) goto Error; - if (input != NULL) input[size] = '\0'; // convenient 0-terminator - *data = input; - *data_size = size; - return 1; - - Error: - free(input); - fprintf(stderr, "Could not read from stdin\n"); - return 0; -} - -int ImgIoUtilReadFile(const char* const file_name, - const uint8_t** data, size_t* data_size) { - int ok; - uint8_t* file_data; - size_t file_size; - FILE* in; - const int from_stdin = (file_name == NULL) || !WSTRCMP(file_name, "-"); - - if (from_stdin) return ImgIoUtilReadFromStdin(data, data_size); - - if (data == NULL || data_size == NULL) return 0; - *data = NULL; - *data_size = 0; - - in = WFOPEN(file_name, "rb"); - if (in == NULL) { - WFPRINTF(stderr, "cannot open input file '%s'\n", (const W_CHAR*)file_name); - return 0; - } - fseek(in, 0, SEEK_END); - file_size = ftell(in); - fseek(in, 0, SEEK_SET); - // we allocate one extra byte for the \0 terminator - file_data = (uint8_t*)malloc(file_size + 1); - if (file_data == NULL) { - fclose(in); - WFPRINTF(stderr, "memory allocation failure when reading file %s\n", - (const W_CHAR*)file_name); - return 0; - } - ok = (fread(file_data, file_size, 1, in) == 1); - fclose(in); - - if (!ok) { - WFPRINTF(stderr, "Could not read %d bytes of data from file %s\n", - (int)file_size, (const W_CHAR*)file_name); - free(file_data); - return 0; - } - file_data[file_size] = '\0'; // convenient 0-terminator - *data = file_data; - *data_size = file_size; - return 1; -} - -// ----------------------------------------------------------------------------- - -int ImgIoUtilWriteFile(const char* const file_name, - const uint8_t* data, size_t data_size) { - int ok; - FILE* out; - const int to_stdout = (file_name == NULL) || !WSTRCMP(file_name, "-"); - - if (data == NULL) { - return 0; - } - out = to_stdout ? ImgIoUtilSetBinaryMode(stdout) : WFOPEN(file_name, "wb"); - if (out == NULL) { - WFPRINTF(stderr, "Error! Cannot open output file '%s'\n", - (const W_CHAR*)file_name); - return 0; - } - ok = (fwrite(data, data_size, 1, out) == 1); - if (out != stdout) fclose(out); - return ok; -} - -// ----------------------------------------------------------------------------- - -void ImgIoUtilCopyPlane(const uint8_t* src, int src_stride, - uint8_t* dst, int dst_stride, int width, int height) { - while (height-- > 0) { - memcpy(dst, src, width * sizeof(*dst)); - src += src_stride; - dst += dst_stride; - } -} - -// ----------------------------------------------------------------------------- - -int ImgIoUtilCheckSizeArgumentsOverflow(uint64_t nmemb, size_t size) { - const uint64_t total_size = nmemb * size; - int ok = (total_size == (size_t)total_size); -#if defined(WEBP_MAX_IMAGE_SIZE) - ok = ok && (total_size <= (uint64_t)WEBP_MAX_IMAGE_SIZE); -#endif - return ok; -} - -// ----------------------------------------------------------------------------- diff --git a/Extended/libwebp/imageio/imageio_util.h b/Extended/libwebp/imageio/imageio_util.h deleted file mode 100644 index 72db159..0000000 --- a/Extended/libwebp/imageio/imageio_util.h +++ /dev/null @@ -1,64 +0,0 @@ -// Copyright 2016 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Utility functions used by the image decoders. -// - -#ifndef WEBP_IMAGEIO_IMAGEIO_UTIL_H_ -#define WEBP_IMAGEIO_IMAGEIO_UTIL_H_ - -#include -#include "webp/types.h" - -#ifdef __cplusplus -extern "C" { -#endif - -//------------------------------------------------------------------------------ -// File I/O - -// Reopen file in binary (O_BINARY) mode. -// Returns 'file' on success, NULL otherwise. -FILE* ImgIoUtilSetBinaryMode(FILE* file); - -// Allocates storage for entire file 'file_name' and returns contents and size -// in 'data' and 'data_size'. Returns 1 on success, 0 otherwise. '*data' should -// be deleted using free(). -// Note: for convenience, the data will be null-terminated with an extra byte -// (not accounted for in *data_size), in case the file is text and intended -// to be used as a C-string. -// If 'file_name' is NULL or equal to "-", input is read from stdin by calling -// the function ImgIoUtilReadFromStdin(). -int ImgIoUtilReadFile(const char* const file_name, - const uint8_t** data, size_t* data_size); - -// Same as ImgIoUtilReadFile(), but reads until EOF from stdin instead. -int ImgIoUtilReadFromStdin(const uint8_t** data, size_t* data_size); - -// Write a data segment into a file named 'file_name'. Returns true if ok. -// If 'file_name' is NULL or equal to "-", output is written to stdout. -int ImgIoUtilWriteFile(const char* const file_name, - const uint8_t* data, size_t data_size); - -//------------------------------------------------------------------------------ - -// Copy width x height pixels from 'src' to 'dst' honoring the strides. -void ImgIoUtilCopyPlane(const uint8_t* src, int src_stride, - uint8_t* dst, int dst_stride, int width, int height); - -//------------------------------------------------------------------------------ - -// Returns 0 in case of overflow of nmemb * size. -int ImgIoUtilCheckSizeArgumentsOverflow(uint64_t nmemb, size_t size); - -#ifdef __cplusplus -} // extern "C" -#endif - -#endif // WEBP_IMAGEIO_IMAGEIO_UTIL_H_ diff --git a/Extended/libwebp/imageio/jpegdec.c b/Extended/libwebp/imageio/jpegdec.c deleted file mode 100644 index 176c239..0000000 --- a/Extended/libwebp/imageio/jpegdec.c +++ /dev/null @@ -1,360 +0,0 @@ -// Copyright 2012 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// JPEG decode. - -#include "./jpegdec.h" - -#ifdef HAVE_CONFIG_H -#include "webp/config.h" -#endif - -#include - -#ifdef WEBP_HAVE_JPEG -#include -#include -#include -#include -#include - -#include "webp/encode.h" -#include "./imageio_util.h" -#include "./metadata.h" - -// ----------------------------------------------------------------------------- -// Metadata processing - -#ifndef JPEG_APP1 -# define JPEG_APP1 (JPEG_APP0 + 1) -#endif -#ifndef JPEG_APP2 -# define JPEG_APP2 (JPEG_APP0 + 2) -#endif - -typedef struct { - const uint8_t* data; - size_t data_length; - int seq; // this segment's sequence number [1, 255] for use in reassembly. -} ICCPSegment; - -static void SaveMetadataMarkers(j_decompress_ptr dinfo) { - const unsigned int max_marker_length = 0xffff; - jpeg_save_markers(dinfo, JPEG_APP1, max_marker_length); // Exif/XMP - jpeg_save_markers(dinfo, JPEG_APP2, max_marker_length); // ICC profile -} - -static int CompareICCPSegments(const void* a, const void* b) { - const ICCPSegment* s1 = (const ICCPSegment*)a; - const ICCPSegment* s2 = (const ICCPSegment*)b; - return s1->seq - s2->seq; -} - -// Extract ICC profile segments from the marker list in 'dinfo', reassembling -// and storing them in 'iccp'. -// Returns true on success and false for memory errors and corrupt profiles. -static int StoreICCP(j_decompress_ptr dinfo, MetadataPayload* const iccp) { - // ICC.1:2010-12 (4.3.0.0) Annex B.4 Embedding ICC Profiles in JPEG files - static const char kICCPSignature[] = "ICC_PROFILE"; - static const size_t kICCPSignatureLength = 12; // signature includes '\0' - static const size_t kICCPSkipLength = 14; // signature + seq & count - int expected_count = 0; - int actual_count = 0; - int seq_max = 0; - size_t total_size = 0; - ICCPSegment iccp_segments[255]; - jpeg_saved_marker_ptr marker; - - memset(iccp_segments, 0, sizeof(iccp_segments)); - for (marker = dinfo->marker_list; marker != NULL; marker = marker->next) { - if (marker->marker == JPEG_APP2 && - marker->data_length > kICCPSkipLength && - !memcmp(marker->data, kICCPSignature, kICCPSignatureLength)) { - // ICC_PROFILE\0; 'seq' starts at 1. - const int seq = marker->data[kICCPSignatureLength]; - const int count = marker->data[kICCPSignatureLength + 1]; - const size_t segment_size = marker->data_length - kICCPSkipLength; - ICCPSegment* segment; - - if (segment_size == 0 || count == 0 || seq == 0) { - fprintf(stderr, "[ICCP] size (%d) / count (%d) / sequence number (%d)" - " cannot be 0!\n", - (int)segment_size, seq, count); - return 0; - } - - if (expected_count == 0) { - expected_count = count; - } else if (expected_count != count) { - fprintf(stderr, "[ICCP] Inconsistent segment count (%d / %d)!\n", - expected_count, count); - return 0; - } - - segment = iccp_segments + seq - 1; - if (segment->data_length != 0) { - fprintf(stderr, "[ICCP] Duplicate segment number (%d)!\n" , seq); - return 0; - } - - segment->data = marker->data + kICCPSkipLength; - segment->data_length = segment_size; - segment->seq = seq; - total_size += segment_size; - if (seq > seq_max) seq_max = seq; - ++actual_count; - } - } - - if (actual_count == 0) return 1; - if (seq_max != actual_count) { - fprintf(stderr, "[ICCP] Discontinuous segments, expected: %d actual: %d!\n", - actual_count, seq_max); - return 0; - } - if (expected_count != actual_count) { - fprintf(stderr, "[ICCP] Segment count: %d does not match expected: %d!\n", - actual_count, expected_count); - return 0; - } - - // The segments may appear out of order in the file, sort them based on - // sequence number before assembling the payload. - qsort(iccp_segments, actual_count, sizeof(*iccp_segments), - CompareICCPSegments); - - iccp->bytes = (uint8_t*)malloc(total_size); - if (iccp->bytes == NULL) return 0; - iccp->size = total_size; - - { - int i; - size_t offset = 0; - for (i = 0; i < seq_max; ++i) { - memcpy(iccp->bytes + offset, - iccp_segments[i].data, iccp_segments[i].data_length); - offset += iccp_segments[i].data_length; - } - } - return 1; -} - -// Returns true on success and false for memory errors and corrupt profiles. -// The caller must use MetadataFree() on 'metadata' in all cases. -static int ExtractMetadataFromJPEG(j_decompress_ptr dinfo, - Metadata* const metadata) { - static const struct { - int marker; - const char* signature; - size_t signature_length; - size_t storage_offset; - } kJPEGMetadataMap[] = { - // Exif 2.2 Section 4.7.2 Interoperability Structure of APP1 ... - { JPEG_APP1, "Exif\0", 6, METADATA_OFFSET(exif) }, - // XMP Specification Part 3 Section 3 Embedding XMP Metadata ... #JPEG - // TODO(jzern) Add support for 'ExtendedXMP' - { JPEG_APP1, "http://ns.adobe.com/xap/1.0/", 29, METADATA_OFFSET(xmp) }, - { 0, NULL, 0, 0 }, - }; - jpeg_saved_marker_ptr marker; - // Treat ICC profiles separately as they may be segmented and out of order. - if (!StoreICCP(dinfo, &metadata->iccp)) return 0; - - for (marker = dinfo->marker_list; marker != NULL; marker = marker->next) { - int i; - for (i = 0; kJPEGMetadataMap[i].marker != 0; ++i) { - if (marker->marker == kJPEGMetadataMap[i].marker && - marker->data_length > kJPEGMetadataMap[i].signature_length && - !memcmp(marker->data, kJPEGMetadataMap[i].signature, - kJPEGMetadataMap[i].signature_length)) { - MetadataPayload* const payload = - (MetadataPayload*)((uint8_t*)metadata + - kJPEGMetadataMap[i].storage_offset); - - if (payload->bytes == NULL) { - const char* marker_data = (const char*)marker->data + - kJPEGMetadataMap[i].signature_length; - const size_t marker_data_length = - marker->data_length - kJPEGMetadataMap[i].signature_length; - if (!MetadataCopy(marker_data, marker_data_length, payload)) return 0; - } else { - fprintf(stderr, "Ignoring additional '%s' marker\n", - kJPEGMetadataMap[i].signature); - } - } - } - } - return 1; -} - -#undef JPEG_APP1 -#undef JPEG_APP2 - -// ----------------------------------------------------------------------------- -// JPEG decoding - -struct my_error_mgr { - struct jpeg_error_mgr pub; - jmp_buf setjmp_buffer; -}; - -static void my_error_exit(j_common_ptr dinfo) { - struct my_error_mgr* myerr = (struct my_error_mgr*)dinfo->err; - fprintf(stderr, "libjpeg error: "); - dinfo->err->output_message(dinfo); - longjmp(myerr->setjmp_buffer, 1); -} - -typedef struct { - struct jpeg_source_mgr pub; - const uint8_t* data; - size_t data_size; -} JPEGReadContext; - -static void ContextInit(j_decompress_ptr cinfo) { - JPEGReadContext* const ctx = (JPEGReadContext*)cinfo->src; - ctx->pub.next_input_byte = ctx->data; - ctx->pub.bytes_in_buffer = ctx->data_size; -} - -static boolean ContextFill(j_decompress_ptr cinfo) { - // we shouldn't get here. - ERREXIT(cinfo, JERR_FILE_READ); - return FALSE; -} - -static void ContextSkip(j_decompress_ptr cinfo, long jump_size) { - JPEGReadContext* const ctx = (JPEGReadContext*)cinfo->src; - size_t jump = (size_t)jump_size; - if (jump > ctx->pub.bytes_in_buffer) { // Don't overflow the buffer. - jump = ctx->pub.bytes_in_buffer; - } - ctx->pub.bytes_in_buffer -= jump; - ctx->pub.next_input_byte += jump; -} - -static void ContextTerm(j_decompress_ptr cinfo) { - (void)cinfo; -} - -static void ContextSetup(volatile struct jpeg_decompress_struct* const cinfo, - JPEGReadContext* const ctx) { - cinfo->src = (struct jpeg_source_mgr*)ctx; - ctx->pub.init_source = ContextInit; - ctx->pub.fill_input_buffer = ContextFill; - ctx->pub.skip_input_data = ContextSkip; - ctx->pub.resync_to_restart = jpeg_resync_to_restart; - ctx->pub.term_source = ContextTerm; - ctx->pub.bytes_in_buffer = 0; - ctx->pub.next_input_byte = NULL; -} - -int ReadJPEG(const uint8_t* const data, size_t data_size, - WebPPicture* const pic, int keep_alpha, - Metadata* const metadata) { - volatile int ok = 0; - int width, height; - int64_t stride; - volatile struct jpeg_decompress_struct dinfo; - struct my_error_mgr jerr; - uint8_t* volatile rgb = NULL; - JSAMPROW buffer[1]; - JPEGReadContext ctx; - - if (data == NULL || data_size == 0 || pic == NULL) return 0; - - (void)keep_alpha; - memset(&ctx, 0, sizeof(ctx)); - ctx.data = data; - ctx.data_size = data_size; - - memset((j_decompress_ptr)&dinfo, 0, sizeof(dinfo)); // for setjmp sanity - dinfo.err = jpeg_std_error(&jerr.pub); - jerr.pub.error_exit = my_error_exit; - - if (setjmp(jerr.setjmp_buffer)) { - Error: - MetadataFree(metadata); - jpeg_destroy_decompress((j_decompress_ptr)&dinfo); - goto End; - } - - jpeg_create_decompress((j_decompress_ptr)&dinfo); - ContextSetup(&dinfo, &ctx); - if (metadata != NULL) SaveMetadataMarkers((j_decompress_ptr)&dinfo); - jpeg_read_header((j_decompress_ptr)&dinfo, TRUE); - - dinfo.out_color_space = JCS_RGB; - dinfo.do_fancy_upsampling = TRUE; - - jpeg_start_decompress((j_decompress_ptr)&dinfo); - - if (dinfo.output_components != 3) { - goto Error; - } - - width = dinfo.output_width; - height = dinfo.output_height; - stride = (int64_t)dinfo.output_width * dinfo.output_components * sizeof(*rgb); - - if (stride != (int)stride || - !ImgIoUtilCheckSizeArgumentsOverflow(stride, height)) { - goto Error; - } - - rgb = (uint8_t*)malloc((size_t)stride * height); - if (rgb == NULL) { - goto Error; - } - buffer[0] = (JSAMPLE*)rgb; - - while (dinfo.output_scanline < dinfo.output_height) { - if (jpeg_read_scanlines((j_decompress_ptr)&dinfo, buffer, 1) != 1) { - goto Error; - } - buffer[0] += stride; - } - - if (metadata != NULL) { - ok = ExtractMetadataFromJPEG((j_decompress_ptr)&dinfo, metadata); - if (!ok) { - fprintf(stderr, "Error extracting JPEG metadata!\n"); - goto Error; - } - } - - jpeg_finish_decompress((j_decompress_ptr)&dinfo); - jpeg_destroy_decompress((j_decompress_ptr)&dinfo); - - // WebP conversion. - pic->width = width; - pic->height = height; - ok = WebPPictureImportRGB(pic, rgb, (int)stride); - if (!ok) goto Error; - - End: - free(rgb); - return ok; -} -#else // !WEBP_HAVE_JPEG -int ReadJPEG(const uint8_t* const data, size_t data_size, - struct WebPPicture* const pic, int keep_alpha, - struct Metadata* const metadata) { - (void)data; - (void)data_size; - (void)pic; - (void)keep_alpha; - (void)metadata; - fprintf(stderr, "JPEG support not compiled. Please install the libjpeg " - "development package before building.\n"); - return 0; -} -#endif // WEBP_HAVE_JPEG - -// ----------------------------------------------------------------------------- diff --git a/Extended/libwebp/imageio/jpegdec.h b/Extended/libwebp/imageio/jpegdec.h deleted file mode 100644 index effc14f..0000000 --- a/Extended/libwebp/imageio/jpegdec.h +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2012 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// JPEG decode. - -#ifndef WEBP_IMAGEIO_JPEGDEC_H_ -#define WEBP_IMAGEIO_JPEGDEC_H_ - -#include "webp/types.h" - -#ifdef __cplusplus -extern "C" { -#endif - -struct Metadata; -struct WebPPicture; - -// Reads a JPEG from 'data', returning the decoded output in 'pic'. -// The output is RGB or YUV depending on pic->use_argb value. -// Returns true on success. -// 'keep_alpha' has no effect, but is kept for coherence with other signatures -// for image readers. -int ReadJPEG(const uint8_t* const data, size_t data_size, - struct WebPPicture* const pic, int keep_alpha, - struct Metadata* const metadata); - -#ifdef __cplusplus -} // extern "C" -#endif - -#endif // WEBP_IMAGEIO_JPEGDEC_H_ diff --git a/Extended/libwebp/imageio/metadata.c b/Extended/libwebp/imageio/metadata.c deleted file mode 100644 index 936f2f4..0000000 --- a/Extended/libwebp/imageio/metadata.c +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2012 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Metadata types and functions. -// - -#include "./metadata.h" - -#include -#include - -#include "webp/types.h" - -void MetadataInit(Metadata* const metadata) { - if (metadata == NULL) return; - memset(metadata, 0, sizeof(*metadata)); -} - -void MetadataPayloadDelete(MetadataPayload* const payload) { - if (payload == NULL) return; - free(payload->bytes); - payload->bytes = NULL; - payload->size = 0; -} - -void MetadataFree(Metadata* const metadata) { - if (metadata == NULL) return; - MetadataPayloadDelete(&metadata->exif); - MetadataPayloadDelete(&metadata->iccp); - MetadataPayloadDelete(&metadata->xmp); -} - -int MetadataCopy(const char* metadata, size_t metadata_len, - MetadataPayload* const payload) { - if (metadata == NULL || metadata_len == 0 || payload == NULL) return 0; - payload->bytes = (uint8_t*)malloc(metadata_len); - if (payload->bytes == NULL) return 0; - payload->size = metadata_len; - memcpy(payload->bytes, metadata, metadata_len); - return 1; -} - -// ----------------------------------------------------------------------------- diff --git a/Extended/libwebp/imageio/metadata.h b/Extended/libwebp/imageio/metadata.h deleted file mode 100644 index 1d5be91..0000000 --- a/Extended/libwebp/imageio/metadata.h +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright 2012 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Metadata types and functions. -// - -#ifndef WEBP_IMAGEIO_METADATA_H_ -#define WEBP_IMAGEIO_METADATA_H_ - -#include "webp/types.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct MetadataPayload { - uint8_t* bytes; - size_t size; -} MetadataPayload; - -typedef struct Metadata { - MetadataPayload exif; - MetadataPayload iccp; - MetadataPayload xmp; -} Metadata; - -#define METADATA_OFFSET(x) offsetof(Metadata, x) - -void MetadataInit(Metadata* const metadata); -void MetadataPayloadDelete(MetadataPayload* const payload); -void MetadataFree(Metadata* const metadata); - -// Stores 'metadata' to 'payload->bytes', returns false on allocation error. -int MetadataCopy(const char* metadata, size_t metadata_len, - MetadataPayload* const payload); - -#ifdef __cplusplus -} // extern "C" -#endif - -#endif // WEBP_IMAGEIO_METADATA_H_ diff --git a/Extended/libwebp/imageio/pngdec.c b/Extended/libwebp/imageio/pngdec.c deleted file mode 100644 index 054c999..0000000 --- a/Extended/libwebp/imageio/pngdec.c +++ /dev/null @@ -1,365 +0,0 @@ -// Copyright 2012 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// PNG decode. - -#include "./pngdec.h" - -#ifdef HAVE_CONFIG_H -#include "webp/config.h" -#endif - -#include - -#ifdef WEBP_HAVE_PNG -#ifndef PNG_USER_MEM_SUPPORTED -#define PNG_USER_MEM_SUPPORTED // for png_create_read_struct_2 -#endif -#include -#include // note: this must be included *after* png.h -#include -#include - -#include "webp/encode.h" -#include "./imageio_util.h" -#include "./metadata.h" - -#define LOCAL_PNG_VERSION ((PNG_LIBPNG_VER_MAJOR << 8) | PNG_LIBPNG_VER_MINOR) -#define LOCAL_PNG_PREREQ(maj, min) \ - (LOCAL_PNG_VERSION >= (((maj) << 8) | (min))) - -static void PNGAPI error_function(png_structp png, png_const_charp error) { - if (error != NULL) fprintf(stderr, "libpng error: %s\n", error); - longjmp(png_jmpbuf(png), 1); -} - -#if LOCAL_PNG_PREREQ(1,4) -typedef png_alloc_size_t LocalPngAllocSize; -#else -typedef png_size_t LocalPngAllocSize; -#endif - -static png_voidp MallocFunc(png_structp png_ptr, LocalPngAllocSize size) { - (void)png_ptr; - if (size != (size_t)size) return NULL; - if (!ImgIoUtilCheckSizeArgumentsOverflow(size, 1)) return NULL; - return (png_voidp)malloc((size_t)size); -} - -static void FreeFunc(png_structp png_ptr, png_voidp ptr) { - (void)png_ptr; - free(ptr); -} - -// Converts the NULL terminated 'hexstring' which contains 2-byte character -// representations of hex values to raw data. -// 'hexstring' may contain values consisting of [A-F][a-f][0-9] in pairs, -// e.g., 7af2..., separated by any number of newlines. -// 'expected_length' is the anticipated processed size. -// On success the raw buffer is returned with its length equivalent to -// 'expected_length'. NULL is returned if the processed length is less than -// 'expected_length' or any character aside from those above is encountered. -// The returned buffer must be freed by the caller. -static uint8_t* HexStringToBytes(const char* hexstring, - size_t expected_length) { - const char* src = hexstring; - size_t actual_length = 0; - uint8_t* const raw_data = (uint8_t*)malloc(expected_length); - uint8_t* dst; - - if (raw_data == NULL) return NULL; - - for (dst = raw_data; actual_length < expected_length && *src != '\0'; ++src) { - char* end; - char val[3]; - if (*src == '\n') continue; - val[0] = *src++; - val[1] = *src; - val[2] = '\0'; - *dst++ = (uint8_t)strtol(val, &end, 16); - if (end != val + 2) break; - ++actual_length; - } - - if (actual_length != expected_length) { - free(raw_data); - return NULL; - } - return raw_data; -} - -static int ProcessRawProfile(const char* profile, size_t profile_len, - MetadataPayload* const payload) { - const char* src = profile; - char* end; - int expected_length; - - if (profile == NULL || profile_len == 0) return 0; - - // ImageMagick formats 'raw profiles' as - // '\n\n(%8lu)\n\n'. - if (*src != '\n') { - fprintf(stderr, "Malformed raw profile, expected '\\n' got '\\x%.2X'\n", - *src); - return 0; - } - ++src; - // skip the profile name and extract the length. - while (*src != '\0' && *src++ != '\n') {} - expected_length = (int)strtol(src, &end, 10); - if (*end != '\n') { - fprintf(stderr, "Malformed raw profile, expected '\\n' got '\\x%.2X'\n", - *end); - return 0; - } - ++end; - - // 'end' now points to the profile payload. - payload->bytes = HexStringToBytes(end, expected_length); - if (payload->bytes == NULL) return 0; - payload->size = expected_length; - return 1; -} - -static const struct { - const char* name; - int (*process)(const char* profile, size_t profile_len, - MetadataPayload* const payload); - size_t storage_offset; -} kPNGMetadataMap[] = { - // http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/PNG.html#TextualData - // See also: ExifTool on CPAN. - { "Raw profile type exif", ProcessRawProfile, METADATA_OFFSET(exif) }, - { "Raw profile type xmp", ProcessRawProfile, METADATA_OFFSET(xmp) }, - // Exiftool puts exif data in APP1 chunk, too. - { "Raw profile type APP1", ProcessRawProfile, METADATA_OFFSET(exif) }, - // XMP Specification Part 3, Section 3 #PNG - { "XML:com.adobe.xmp", MetadataCopy, METADATA_OFFSET(xmp) }, - { NULL, NULL, 0 }, -}; - -// Looks for metadata at both the beginning and end of the PNG file, giving -// preference to the head. -// Returns true on success. The caller must use MetadataFree() on 'metadata' in -// all cases. -static int ExtractMetadataFromPNG(png_structp png, - png_infop const head_info, - png_infop const end_info, - Metadata* const metadata) { - int p; - - for (p = 0; p < 2; ++p) { - png_infop const info = (p == 0) ? head_info : end_info; - png_textp text = NULL; - const png_uint_32 num = png_get_text(png, info, &text, NULL); - png_uint_32 i; - // Look for EXIF / XMP metadata. - for (i = 0; i < num; ++i, ++text) { - int j; - for (j = 0; kPNGMetadataMap[j].name != NULL; ++j) { - if (!strcmp(text->key, kPNGMetadataMap[j].name)) { - MetadataPayload* const payload = - (MetadataPayload*)((uint8_t*)metadata + - kPNGMetadataMap[j].storage_offset); - png_size_t text_length; - switch (text->compression) { -#ifdef PNG_iTXt_SUPPORTED - case PNG_ITXT_COMPRESSION_NONE: - case PNG_ITXT_COMPRESSION_zTXt: - text_length = text->itxt_length; - break; -#endif - case PNG_TEXT_COMPRESSION_NONE: - case PNG_TEXT_COMPRESSION_zTXt: - default: - text_length = text->text_length; - break; - } - if (payload->bytes != NULL) { - fprintf(stderr, "Ignoring additional '%s'\n", text->key); - } else if (!kPNGMetadataMap[j].process(text->text, text_length, - payload)) { - fprintf(stderr, "Failed to process: '%s'\n", text->key); - return 0; - } - break; - } - } - } - // Look for an ICC profile. - { - png_charp name; - int comp_type; -#if LOCAL_PNG_PREREQ(1,5) - png_bytep profile; -#else - png_charp profile; -#endif - png_uint_32 len; - - if (png_get_iCCP(png, info, - &name, &comp_type, &profile, &len) == PNG_INFO_iCCP) { - if (!MetadataCopy((const char*)profile, len, &metadata->iccp)) return 0; - } - } - } - return 1; -} - -typedef struct { - const uint8_t* data; - size_t data_size; - png_size_t offset; -} PNGReadContext; - -static void ReadFunc(png_structp png_ptr, png_bytep data, png_size_t length) { - PNGReadContext* const ctx = (PNGReadContext*)png_get_io_ptr(png_ptr); - if (ctx->data_size - ctx->offset < length) { - png_error(png_ptr, "ReadFunc: invalid read length (overflow)!"); - } - memcpy(data, ctx->data + ctx->offset, length); - ctx->offset += length; -} - -int ReadPNG(const uint8_t* const data, size_t data_size, - struct WebPPicture* const pic, - int keep_alpha, struct Metadata* const metadata) { - volatile png_structp png = NULL; - volatile png_infop info = NULL; - volatile png_infop end_info = NULL; - PNGReadContext context = { NULL, 0, 0 }; - int color_type, bit_depth, interlaced; - int has_alpha; - int num_passes; - int p; - volatile int ok = 0; - png_uint_32 width, height, y; - int64_t stride; - uint8_t* volatile rgb = NULL; - - if (data == NULL || data_size == 0 || pic == NULL) return 0; - - context.data = data; - context.data_size = data_size; - - png = png_create_read_struct_2(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL, - NULL, MallocFunc, FreeFunc); - if (png == NULL) goto End; - - png_set_error_fn(png, 0, error_function, NULL); - if (setjmp(png_jmpbuf(png))) { - Error: - MetadataFree(metadata); - goto End; - } - - info = png_create_info_struct(png); - if (info == NULL) goto Error; - end_info = png_create_info_struct(png); - if (end_info == NULL) goto Error; - - png_set_read_fn(png, &context, ReadFunc); - png_read_info(png, info); - if (!png_get_IHDR(png, info, - &width, &height, &bit_depth, &color_type, &interlaced, - NULL, NULL)) goto Error; - - png_set_strip_16(png); - png_set_packing(png); - if (color_type == PNG_COLOR_TYPE_PALETTE) { - png_set_palette_to_rgb(png); - } - if (color_type == PNG_COLOR_TYPE_GRAY || - color_type == PNG_COLOR_TYPE_GRAY_ALPHA) { - if (bit_depth < 8) { - png_set_expand_gray_1_2_4_to_8(png); - } - png_set_gray_to_rgb(png); - } - if (png_get_valid(png, info, PNG_INFO_tRNS)) { - png_set_tRNS_to_alpha(png); - has_alpha = 1; - } else { - has_alpha = !!(color_type & PNG_COLOR_MASK_ALPHA); - } - - // Apply gamma correction if needed. - { - double image_gamma = 1 / 2.2, screen_gamma = 2.2; - int srgb_intent; - if (png_get_sRGB(png, info, &srgb_intent) || - png_get_gAMA(png, info, &image_gamma)) { - png_set_gamma(png, screen_gamma, image_gamma); - } - } - - if (!keep_alpha) { - png_set_strip_alpha(png); - has_alpha = 0; - } - - num_passes = png_set_interlace_handling(png); - png_read_update_info(png, info); - - stride = (int64_t)(has_alpha ? 4 : 3) * width * sizeof(*rgb); - if (stride != (int)stride || - !ImgIoUtilCheckSizeArgumentsOverflow(stride, height)) { - goto Error; - } - - rgb = (uint8_t*)malloc((size_t)stride * height); - if (rgb == NULL) goto Error; - for (p = 0; p < num_passes; ++p) { - png_bytep row = rgb; - for (y = 0; y < height; ++y) { - png_read_rows(png, &row, NULL, 1); - row += stride; - } - } - png_read_end(png, end_info); - - if (metadata != NULL && - !ExtractMetadataFromPNG(png, info, end_info, metadata)) { - fprintf(stderr, "Error extracting PNG metadata!\n"); - goto Error; - } - - pic->width = (int)width; - pic->height = (int)height; - ok = has_alpha ? WebPPictureImportRGBA(pic, rgb, (int)stride) - : WebPPictureImportRGB(pic, rgb, (int)stride); - - if (!ok) { - goto Error; - } - - End: - if (png != NULL) { - png_destroy_read_struct((png_structpp)&png, - (png_infopp)&info, (png_infopp)&end_info); - } - free(rgb); - return ok; -} -#else // !WEBP_HAVE_PNG -int ReadPNG(const uint8_t* const data, size_t data_size, - struct WebPPicture* const pic, - int keep_alpha, struct Metadata* const metadata) { - (void)data; - (void)data_size; - (void)pic; - (void)keep_alpha; - (void)metadata; - fprintf(stderr, "PNG support not compiled. Please install the libpng " - "development package before building.\n"); - return 0; -} -#endif // WEBP_HAVE_PNG - -// ----------------------------------------------------------------------------- diff --git a/Extended/libwebp/imageio/pngdec.h b/Extended/libwebp/imageio/pngdec.h deleted file mode 100644 index e0a6122..0000000 --- a/Extended/libwebp/imageio/pngdec.h +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2012 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// PNG decode. - -#ifndef WEBP_IMAGEIO_PNGDEC_H_ -#define WEBP_IMAGEIO_PNGDEC_H_ - -#include "webp/types.h" - -#ifdef __cplusplus -extern "C" { -#endif - -struct Metadata; -struct WebPPicture; - -// Reads a PNG from 'data', returning the decoded output in 'pic'. -// Output is RGBA or YUVA, depending on pic->use_argb value. -// If 'keep_alpha' is true and the PNG has an alpha channel, the output is RGBA -// or YUVA. Otherwise, alpha channel is dropped and output is RGB or YUV. -// Returns true on success. -int ReadPNG(const uint8_t* const data, size_t data_size, - struct WebPPicture* const pic, - int keep_alpha, struct Metadata* const metadata); - -#ifdef __cplusplus -} // extern "C" -#endif - -#endif // WEBP_IMAGEIO_PNGDEC_H_ diff --git a/Extended/libwebp/imageio/pnmdec.c b/Extended/libwebp/imageio/pnmdec.c deleted file mode 100644 index 208c2cf..0000000 --- a/Extended/libwebp/imageio/pnmdec.c +++ /dev/null @@ -1,258 +0,0 @@ -// Copyright 2017 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// (limited) PNM decoder - -#include "./pnmdec.h" - -#include -#include -#include -#include -#include - -#include "webp/encode.h" -#include "./imageio_util.h" - -typedef enum { - WIDTH_FLAG = 1 << 0, - HEIGHT_FLAG = 1 << 1, - DEPTH_FLAG = 1 << 2, - MAXVAL_FLAG = 1 << 3, - TUPLE_FLAG = 1 << 4, - ALL_NEEDED_FLAGS = WIDTH_FLAG | HEIGHT_FLAG | DEPTH_FLAG | MAXVAL_FLAG -} PNMFlags; - -typedef struct { - const uint8_t* data; - size_t data_size; - int width, height; - int bytes_per_px; // 1, 3, 4 - int depth; - int max_value; - int type; // 5, 6 or 7 - int seen_flags; -} PNMInfo; - -// ----------------------------------------------------------------------------- -// PNM decoding - -#define MAX_LINE_SIZE 1024 -static const size_t kMinPNMHeaderSize = 3; - -static size_t ReadLine(const uint8_t* const data, size_t off, size_t data_size, - char out[MAX_LINE_SIZE + 1], size_t* const out_size) { - size_t i = 0; - *out_size = 0; - redo: - for (i = 0; i < MAX_LINE_SIZE && off < data_size; ++i) { - out[i] = data[off++]; - if (out[i] == '\n') break; - } - if (off < data_size) { - if (i == 0) goto redo; // empty line - if (out[0] == '#') goto redo; // skip comment - } - out[i] = 0; // safety sentinel - *out_size = i; - return off; -} - -static size_t FlagError(const char flag[]) { - fprintf(stderr, "PAM header error: flags '%s' already seen.\n", flag); - return 0; -} - -// inspired from http://netpbm.sourceforge.net/doc/pam.html -static size_t ReadPAMFields(PNMInfo* const info, size_t off) { - char out[MAX_LINE_SIZE + 1]; - size_t out_size; - int tmp; - int expected_depth = -1; - assert(info != NULL); - while (1) { - off = ReadLine(info->data, off, info->data_size, out, &out_size); - if (off == 0) return 0; - if (sscanf(out, "WIDTH %d", &tmp) == 1) { - if (info->seen_flags & WIDTH_FLAG) return FlagError("WIDTH"); - info->seen_flags |= WIDTH_FLAG; - info->width = tmp; - } else if (sscanf(out, "HEIGHT %d", &tmp) == 1) { - if (info->seen_flags & HEIGHT_FLAG) return FlagError("HEIGHT"); - info->seen_flags |= HEIGHT_FLAG; - info->height = tmp; - } else if (sscanf(out, "DEPTH %d", &tmp) == 1) { - if (info->seen_flags & DEPTH_FLAG) return FlagError("DEPTH"); - info->seen_flags |= DEPTH_FLAG; - info->depth = tmp; - } else if (sscanf(out, "MAXVAL %d", &tmp) == 1) { - if (info->seen_flags & MAXVAL_FLAG) return FlagError("MAXVAL"); - info->seen_flags |= MAXVAL_FLAG; - info->max_value = tmp; - } else if (!strcmp(out, "TUPLTYPE RGB_ALPHA")) { - expected_depth = 4; - info->seen_flags |= TUPLE_FLAG; - } else if (!strcmp(out, "TUPLTYPE RGB")) { - expected_depth = 3; - info->seen_flags |= TUPLE_FLAG; - } else if (!strcmp(out, "TUPLTYPE GRAYSCALE")) { - expected_depth = 1; - info->seen_flags |= TUPLE_FLAG; - } else if (!strcmp(out, "ENDHDR")) { - break; - } else { - static const char kEllipsis[] = " ..."; - int i; - if (out_size > 20) sprintf(out + 20 - strlen(kEllipsis), kEllipsis); - for (i = 0; i < (int)strlen(out); ++i) { - // isprint() might trigger a "char-subscripts" warning if given a char. - if (!isprint((int)out[i])) out[i] = ' '; - } - fprintf(stderr, "PAM header error: unrecognized entry [%s]\n", out); - return 0; - } - } - if (!(info->seen_flags & ALL_NEEDED_FLAGS)) { - fprintf(stderr, "PAM header error: missing tags%s%s%s%s\n", - (info->seen_flags & WIDTH_FLAG) ? "" : " WIDTH", - (info->seen_flags & HEIGHT_FLAG) ? "" : " HEIGHT", - (info->seen_flags & DEPTH_FLAG) ? "" : " DEPTH", - (info->seen_flags & MAXVAL_FLAG) ? "" : " MAXVAL"); - return 0; - } - if (expected_depth != -1 && info->depth != expected_depth) { - fprintf(stderr, "PAM header error: expected DEPTH %d but got DEPTH %d\n", - expected_depth, info->depth); - return 0; - } - return off; -} - -static size_t ReadHeader(PNMInfo* const info) { - size_t off = 0; - char out[MAX_LINE_SIZE + 1]; - size_t out_size; - if (info == NULL) return 0; - if (info->data == NULL || info->data_size < kMinPNMHeaderSize) return 0; - - info->width = info->height = 0; - info->type = -1; - info->seen_flags = 0; - info->bytes_per_px = 0; - info->depth = 0; - info->max_value = 0; - - off = ReadLine(info->data, off, info->data_size, out, &out_size); - if (off == 0 || sscanf(out, "P%d", &info->type) != 1) return 0; - if (info->type == 7) { - off = ReadPAMFields(info, off); - } else { - off = ReadLine(info->data, off, info->data_size, out, &out_size); - if (off == 0 || sscanf(out, "%d %d", &info->width, &info->height) != 2) { - return 0; - } - off = ReadLine(info->data, off, info->data_size, out, &out_size); - if (off == 0 || sscanf(out, "%d", &info->max_value) != 1) return 0; - - // finish initializing missing fields - info->depth = (info->type == 5) ? 1 : 3; - } - // perform some basic numerical validation - if (info->width <= 0 || info->height <= 0 || - info->type <= 0 || info->type >= 9 || - info->depth <= 0 || info->depth == 2 || info->depth > 4 || - info->max_value <= 0 || info->max_value >= 65536) { - return 0; - } - info->bytes_per_px = info->depth * (info->max_value > 255 ? 2 : 1); - return off; -} - -int ReadPNM(const uint8_t* const data, size_t data_size, - WebPPicture* const pic, int keep_alpha, - struct Metadata* const metadata) { - int ok = 0; - int i, j; - uint64_t stride, pixel_bytes; - uint8_t* rgb = NULL, *tmp_rgb; - size_t offset; - PNMInfo info; - - info.data = data; - info.data_size = data_size; - offset = ReadHeader(&info); - if (offset == 0) { - fprintf(stderr, "Error parsing PNM header.\n"); - goto End; - } - - if (info.type < 5 || info.type > 7) { - fprintf(stderr, "Unsupported P%d PNM format.\n", info.type); - goto End; - } - - // Some basic validations. - if (pic == NULL) goto End; - if (info.width > WEBP_MAX_DIMENSION || info.height > WEBP_MAX_DIMENSION) { - fprintf(stderr, "Invalid %dx%d dimension for PNM\n", - info.width, info.height); - goto End; - } - - pixel_bytes = (uint64_t)info.width * info.height * info.bytes_per_px; - if (data_size < offset + pixel_bytes) { - fprintf(stderr, "Truncated PNM file (P%d).\n", info.type); - goto End; - } - stride = - (uint64_t)(info.bytes_per_px < 3 ? 3 : info.bytes_per_px) * info.width; - if (stride != (size_t)stride || - !ImgIoUtilCheckSizeArgumentsOverflow(stride, info.height)) { - goto End; - } - - rgb = (uint8_t*)malloc((size_t)stride * info.height); - if (rgb == NULL) goto End; - - // Convert input - tmp_rgb = rgb; - for (j = 0; j < info.height; ++j) { - assert(offset + info.bytes_per_px * info.width <= data_size); - if (info.depth == 1) { - // convert grayscale -> RGB - for (i = 0; i < info.width; ++i) { - const uint8_t v = data[offset + i]; - tmp_rgb[3 * i + 0] = tmp_rgb[3 * i + 1] = tmp_rgb[3 * i + 2] = v; - } - } else if (info.depth == 3) { // RGB - memcpy(tmp_rgb, data + offset, 3 * info.width * sizeof(*data)); - } else if (info.depth == 4) { // RGBA - memcpy(tmp_rgb, data + offset, 4 * info.width * sizeof(*data)); - } - offset += info.bytes_per_px * info.width; - tmp_rgb += stride; - } - - // WebP conversion. - pic->width = info.width; - pic->height = info.height; - ok = (info.depth == 4) ? WebPPictureImportRGBA(pic, rgb, (int)stride) - : WebPPictureImportRGB(pic, rgb, (int)stride); - if (!ok) goto End; - - ok = 1; - End: - free((void*)rgb); - - (void)metadata; - (void)keep_alpha; - return ok; -} - -// ----------------------------------------------------------------------------- diff --git a/Extended/libwebp/imageio/pnmdec.h b/Extended/libwebp/imageio/pnmdec.h deleted file mode 100644 index c4d5823..0000000 --- a/Extended/libwebp/imageio/pnmdec.h +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2017 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// partial PNM format decoder (ppm/pgm) - -#ifndef WEBP_IMAGEIO_PNMDEC_H_ -#define WEBP_IMAGEIO_PNMDEC_H_ - -#include "webp/types.h" - -#ifdef __cplusplus -extern "C" { -#endif - -struct Metadata; -struct WebPPicture; - -// Reads a PNM file from 'data', returning the decoded output in 'pic'. -// The output is RGB or YUV depending on pic->use_argb value. -// Returns true on success. -// 'metadata' has no effect, but is kept for coherence with other signatures -// for image readers. -int ReadPNM(const uint8_t* const data, size_t data_size, - struct WebPPicture* const pic, int keep_alpha, - struct Metadata* const metadata); - -#ifdef __cplusplus -} // extern "C" -#endif - -#endif // WEBP_IMAGEIO_PNMDEC_H_ diff --git a/Extended/libwebp/imageio/tiffdec.c b/Extended/libwebp/imageio/tiffdec.c deleted file mode 100644 index 89819d4..0000000 --- a/Extended/libwebp/imageio/tiffdec.c +++ /dev/null @@ -1,281 +0,0 @@ -// Copyright 2012 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// TIFF decode. - -#include "./tiffdec.h" - -#ifdef HAVE_CONFIG_H -#include "webp/config.h" -#endif - -#include -#include -#include - -#ifdef WEBP_HAVE_TIFF -#include - -#include "webp/encode.h" -#include "./imageio_util.h" -#include "./metadata.h" - -static const struct { - ttag_t tag; - size_t storage_offset; -} kTIFFMetadataMap[] = { - { TIFFTAG_ICCPROFILE, METADATA_OFFSET(iccp) }, - { TIFFTAG_XMLPACKET, METADATA_OFFSET(xmp) }, - { 0, 0 }, -}; - -// Returns true on success. The caller must use MetadataFree() on 'metadata' in -// all cases. -static int ExtractMetadataFromTIFF(TIFF* const tif, Metadata* const metadata) { - int i; - toff_t exif_ifd_offset; - - for (i = 0; kTIFFMetadataMap[i].tag != 0; ++i) { - MetadataPayload* const payload = - (MetadataPayload*)((uint8_t*)metadata + - kTIFFMetadataMap[i].storage_offset); - void* tag_data; - uint32 tag_data_len; - - if (TIFFGetField(tif, kTIFFMetadataMap[i].tag, &tag_data_len, &tag_data) && - !MetadataCopy((const char*)tag_data, tag_data_len, payload)) { - return 0; - } - } - - // TODO(jzern): To extract the raw EXIF directory some parsing of it would be - // necessary to determine the overall size. In addition, value offsets in - // individual directory entries may need to be updated as, depending on the - // type, they are file based. - // Exif 2.2 Section 4.6.2 Tag Structure - // TIFF Revision 6.0 Part 1 Section 2 TIFF Structure #Image File Directory - if (TIFFGetField(tif, TIFFTAG_EXIFIFD, &exif_ifd_offset)) { - fprintf(stderr, "Warning: EXIF extraction from TIFF is unsupported.\n"); - } - return 1; -} - -// Ad-hoc structure to supply read-from-memory functionalities. -typedef struct { - const uint8_t* data; - toff_t size; - toff_t pos; -} MyData; - -static int MyClose(thandle_t opaque) { - (void)opaque; - return 0; -} - -static toff_t MySize(thandle_t opaque) { - const MyData* const my_data = (MyData*)opaque; - return my_data->size; -} - -static toff_t MySeek(thandle_t opaque, toff_t offset, int whence) { - MyData* const my_data = (MyData*)opaque; - offset += (whence == SEEK_CUR) ? my_data->pos - : (whence == SEEK_SET) ? 0 - : my_data->size; - if (offset > my_data->size) return (toff_t)-1; - my_data->pos = offset; - return offset; -} - -static int MyMapFile(thandle_t opaque, void** base, toff_t* size) { - (void)opaque; - (void)base; - (void)size; - return 0; -} -static void MyUnmapFile(thandle_t opaque, void* base, toff_t size) { - (void)opaque; - (void)base; - (void)size; -} - -static tsize_t MyRead(thandle_t opaque, void* dst, tsize_t size) { - MyData* const my_data = (MyData*)opaque; - if (my_data->pos + size > my_data->size) { - size = (tsize_t)(my_data->size - my_data->pos); - } - if (size > 0) { - memcpy(dst, my_data->data + my_data->pos, size); - my_data->pos += size; - } - return size; -} - -// Unmultiply Argb data. Taken from dsp/alpha_processing -// (we don't want to force a dependency to a libdspdec library). -#define MFIX 24 // 24bit fixed-point arithmetic -#define HALF ((1u << MFIX) >> 1) - -static uint32_t Unmult(uint8_t x, uint32_t mult) { - const uint32_t v = (x * mult + HALF) >> MFIX; - return (v > 255u) ? 255u : v; -} - -static WEBP_INLINE uint32_t GetScale(uint32_t a) { - return (255u << MFIX) / a; -} - -#undef MFIX -#undef HALF - -static void MultARGBRow(uint8_t* ptr, int width) { - int x; - for (x = 0; x < width; ++x, ptr += 4) { - const uint32_t alpha = ptr[3]; - if (alpha < 255) { - if (alpha == 0) { // alpha == 0 - ptr[0] = ptr[1] = ptr[2] = 0; - } else { - const uint32_t scale = GetScale(alpha); - ptr[0] = Unmult(ptr[0], scale); - ptr[1] = Unmult(ptr[1], scale); - ptr[2] = Unmult(ptr[2], scale); - } - } - } -} - -int ReadTIFF(const uint8_t* const data, size_t data_size, - WebPPicture* const pic, int keep_alpha, - Metadata* const metadata) { - MyData my_data = { data, (toff_t)data_size, 0 }; - TIFF* tif; - uint32_t image_width, image_height, tile_width, tile_height; - uint16_t samples_per_px = 0; - uint16_t extra_samples = 0; - uint16_t* extra_samples_ptr = NULL; - uint32_t* raster; - int64_t alloc_size; - int ok = 0; - tdir_t dircount; - - if (data == NULL || data_size == 0 || data_size > INT_MAX || pic == NULL) { - return 0; - } - - tif = TIFFClientOpen("Memory", "r", &my_data, - MyRead, MyRead, MySeek, MyClose, - MySize, MyMapFile, MyUnmapFile); - if (tif == NULL) { - fprintf(stderr, "Error! Cannot parse TIFF file\n"); - return 0; - } - - dircount = TIFFNumberOfDirectories(tif); - if (dircount > 1) { - fprintf(stderr, "Warning: multi-directory TIFF files are not supported.\n" - "Only the first will be used, %d will be ignored.\n", - dircount - 1); - } - if (!TIFFGetFieldDefaulted(tif, TIFFTAG_SAMPLESPERPIXEL, &samples_per_px)) { - fprintf(stderr, "Error! Cannot retrieve TIFF samples-per-pixel info.\n"); - goto End; - } - if (samples_per_px < 3 || samples_per_px > 4) goto End; // not supported - - if (!(TIFFGetField(tif, TIFFTAG_IMAGEWIDTH, &image_width) && - TIFFGetField(tif, TIFFTAG_IMAGELENGTH, &image_height))) { - fprintf(stderr, "Error! Cannot retrieve TIFF image dimensions.\n"); - goto End; - } - if (!ImgIoUtilCheckSizeArgumentsOverflow((uint64_t)image_width * image_height, - sizeof(*raster))) { - goto End; - } - // According to spec, a tile can be bigger than the image. However it should - // be a multiple of 16 and not way too large, so check that it's not more than - // twice the image size, for dimensions above some arbitrary minimum 32. - if ((TIFFGetField(tif, TIFFTAG_TILEWIDTH, &tile_width) && - tile_width > 32 && tile_width / 2 > image_width) || - (TIFFGetField(tif, TIFFTAG_TILELENGTH, &tile_height) && - tile_height > 32 && tile_height / 2 > image_height)) { - fprintf(stderr, "Error! TIFF tile dimensions are too big.\n"); - goto End; - } - if (samples_per_px > 3 && !TIFFGetField(tif, TIFFTAG_EXTRASAMPLES, - &extra_samples, &extra_samples_ptr)) { - fprintf(stderr, "Error! Cannot retrieve TIFF ExtraSamples info.\n"); - goto End; - } - - // _Tiffmalloc uses a signed type for size. - alloc_size = - (int64_t)((uint64_t)image_width * image_height * sizeof(*raster)); - if (alloc_size < 0 || alloc_size != (tsize_t)alloc_size) goto End; - - raster = (uint32*)_TIFFmalloc((tsize_t)alloc_size); - if (raster != NULL) { - if (TIFFReadRGBAImageOriented(tif, image_width, image_height, raster, - ORIENTATION_TOPLEFT, 1)) { - const int stride = image_width * sizeof(*raster); - pic->width = image_width; - pic->height = image_height; - // TIFF data is ABGR -#ifdef WORDS_BIGENDIAN - TIFFSwabArrayOfLong(raster, image_width * image_height); -#endif - // if we have an alpha channel, we must un-multiply from rgbA to RGBA - if (extra_samples == 1 && extra_samples_ptr != NULL && - extra_samples_ptr[0] == EXTRASAMPLE_ASSOCALPHA) { - uint32_t y; - uint8_t* tmp = (uint8_t*)raster; - for (y = 0; y < image_height; ++y) { - MultARGBRow(tmp, image_width); - tmp += stride; - } - } - ok = keep_alpha - ? WebPPictureImportRGBA(pic, (const uint8_t*)raster, stride) - : WebPPictureImportRGBX(pic, (const uint8_t*)raster, stride); - } - _TIFFfree(raster); - } else { - fprintf(stderr, "Error allocating TIFF RGBA memory!\n"); - } - - if (ok) { - if (metadata != NULL) { - ok = ExtractMetadataFromTIFF(tif, metadata); - if (!ok) { - fprintf(stderr, "Error extracting TIFF metadata!\n"); - MetadataFree(metadata); - WebPPictureFree(pic); - } - } - } - End: - TIFFClose(tif); - return ok; -} -#else // !WEBP_HAVE_TIFF -int ReadTIFF(const uint8_t* const data, size_t data_size, - struct WebPPicture* const pic, int keep_alpha, - struct Metadata* const metadata) { - (void)data; - (void)data_size; - (void)pic; - (void)keep_alpha; - (void)metadata; - fprintf(stderr, "TIFF support not compiled. Please install the libtiff " - "development package before building.\n"); - return 0; -} -#endif // WEBP_HAVE_TIFF - -// ----------------------------------------------------------------------------- diff --git a/Extended/libwebp/imageio/tiffdec.h b/Extended/libwebp/imageio/tiffdec.h deleted file mode 100644 index 0c8becc..0000000 --- a/Extended/libwebp/imageio/tiffdec.h +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2012 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// TIFF decode. - -#ifndef WEBP_IMAGEIO_TIFFDEC_H_ -#define WEBP_IMAGEIO_TIFFDEC_H_ - -#include "webp/types.h" - -#ifdef __cplusplus -extern "C" { -#endif - -struct Metadata; -struct WebPPicture; - -// Reads a TIFF from 'data', returning the decoded output in 'pic'. -// Output is RGBA or YUVA, depending on pic->use_argb value. -// If 'keep_alpha' is true and the TIFF has an alpha channel, the output is RGBA -// or YUVA. Otherwise, alpha channel is dropped and output is RGB or YUV. -// Returns true on success. -int ReadTIFF(const uint8_t* const data, size_t data_size, - struct WebPPicture* const pic, int keep_alpha, - struct Metadata* const metadata); - -#ifdef __cplusplus -} // extern "C" -#endif - -#endif // WEBP_IMAGEIO_TIFFDEC_H_ diff --git a/Extended/libwebp/imageio/webpdec.c b/Extended/libwebp/imageio/webpdec.c deleted file mode 100644 index 785eef3..0000000 --- a/Extended/libwebp/imageio/webpdec.c +++ /dev/null @@ -1,244 +0,0 @@ -// Copyright 2014 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// WebP decode. - -#ifdef HAVE_CONFIG_H -#include "webp/config.h" -#endif - -#include "./webpdec.h" - -#include -#include -#include - -#include "webp/decode.h" -#include "webp/demux.h" -#include "webp/encode.h" -#include "../examples/unicode.h" -#include "./imageio_util.h" -#include "./metadata.h" - -//------------------------------------------------------------------------------ -// WebP decoding - -static const char* const kStatusMessages[VP8_STATUS_NOT_ENOUGH_DATA + 1] = { - "OK", "OUT_OF_MEMORY", "INVALID_PARAM", "BITSTREAM_ERROR", - "UNSUPPORTED_FEATURE", "SUSPENDED", "USER_ABORT", "NOT_ENOUGH_DATA" -}; - -static void PrintAnimationWarning(const WebPDecoderConfig* const config) { - if (config->input.has_animation) { - fprintf(stderr, - "Error! Decoding of an animated WebP file is not supported.\n" - " Use webpmux to extract the individual frames or\n" - " vwebp to view this image.\n"); - } -} - -void PrintWebPError(const char* const in_file, int status) { - WFPRINTF(stderr, "Decoding of %s failed.\n", (const W_CHAR*)in_file); - fprintf(stderr, "Status: %d", status); - if (status >= VP8_STATUS_OK && status <= VP8_STATUS_NOT_ENOUGH_DATA) { - fprintf(stderr, "(%s)", kStatusMessages[status]); - } - fprintf(stderr, "\n"); -} - -int LoadWebP(const char* const in_file, - const uint8_t** data, size_t* data_size, - WebPBitstreamFeatures* bitstream) { - VP8StatusCode status; - WebPBitstreamFeatures local_features; - if (!ImgIoUtilReadFile(in_file, data, data_size)) return 0; - - if (bitstream == NULL) { - bitstream = &local_features; - } - - status = WebPGetFeatures(*data, *data_size, bitstream); - if (status != VP8_STATUS_OK) { - free((void*)*data); - *data = NULL; - *data_size = 0; - PrintWebPError(in_file, status); - return 0; - } - return 1; -} - -//------------------------------------------------------------------------------ - -VP8StatusCode DecodeWebP(const uint8_t* const data, size_t data_size, - WebPDecoderConfig* const config) { - if (config == NULL) return VP8_STATUS_INVALID_PARAM; - PrintAnimationWarning(config); - return WebPDecode(data, data_size, config); -} - -VP8StatusCode DecodeWebPIncremental( - const uint8_t* const data, size_t data_size, - WebPDecoderConfig* const config) { - VP8StatusCode status = VP8_STATUS_OK; - if (config == NULL) return VP8_STATUS_INVALID_PARAM; - - PrintAnimationWarning(config); - - // Decoding call. - { - WebPIDecoder* const idec = WebPIDecode(data, data_size, config); - if (idec == NULL) { - fprintf(stderr, "Failed during WebPINewDecoder().\n"); - return VP8_STATUS_OUT_OF_MEMORY; - } else { - status = WebPIUpdate(idec, data, data_size); - WebPIDelete(idec); - } - } - return status; -} - -// ----------------------------------------------------------------------------- -// Metadata - -static int ExtractMetadata(const uint8_t* const data, size_t data_size, - Metadata* const metadata) { - WebPData webp_data = { data, data_size }; - WebPDemuxer* const demux = WebPDemux(&webp_data); - WebPChunkIterator chunk_iter; - uint32_t flags; - - if (demux == NULL) return 0; - assert(metadata != NULL); - - flags = WebPDemuxGetI(demux, WEBP_FF_FORMAT_FLAGS); - - if ((flags & ICCP_FLAG) && WebPDemuxGetChunk(demux, "ICCP", 1, &chunk_iter)) { - MetadataCopy((const char*)chunk_iter.chunk.bytes, chunk_iter.chunk.size, - &metadata->iccp); - WebPDemuxReleaseChunkIterator(&chunk_iter); - } - if ((flags & EXIF_FLAG) && WebPDemuxGetChunk(demux, "EXIF", 1, &chunk_iter)) { - MetadataCopy((const char*)chunk_iter.chunk.bytes, chunk_iter.chunk.size, - &metadata->exif); - WebPDemuxReleaseChunkIterator(&chunk_iter); - } - if ((flags & XMP_FLAG) && WebPDemuxGetChunk(demux, "XMP ", 1, &chunk_iter)) { - MetadataCopy((const char*)chunk_iter.chunk.bytes, chunk_iter.chunk.size, - &metadata->xmp); - WebPDemuxReleaseChunkIterator(&chunk_iter); - } - WebPDemuxDelete(demux); - return 1; -} - -// ----------------------------------------------------------------------------- - -int ReadWebP(const uint8_t* const data, size_t data_size, - WebPPicture* const pic, - int keep_alpha, Metadata* const metadata) { - int ok = 0; - VP8StatusCode status = VP8_STATUS_OK; - WebPDecoderConfig config; - WebPDecBuffer* const output_buffer = &config.output; - WebPBitstreamFeatures* const bitstream = &config.input; - - if (data == NULL || data_size == 0 || pic == NULL) return 0; - - if (!WebPInitDecoderConfig(&config)) { - fprintf(stderr, "Library version mismatch!\n"); - return 0; - } - - status = WebPGetFeatures(data, data_size, bitstream); - if (status != VP8_STATUS_OK) { - PrintWebPError("input data", status); - return 0; - } - - do { - const int has_alpha = keep_alpha && bitstream->has_alpha; - uint64_t stride; - pic->width = bitstream->width; - pic->height = bitstream->height; - if (pic->use_argb) { - stride = (uint64_t)bitstream->width * 4; - } else { - stride = (uint64_t)bitstream->width * (has_alpha ? 5 : 3) / 2; - pic->colorspace = has_alpha ? WEBP_YUV420A : WEBP_YUV420; - } - - if (!ImgIoUtilCheckSizeArgumentsOverflow(stride, bitstream->height)) { - status = VP8_STATUS_OUT_OF_MEMORY; - break; - } - - ok = WebPPictureAlloc(pic); - if (!ok) { - status = VP8_STATUS_OUT_OF_MEMORY; - break; - } - if (pic->use_argb) { -#ifdef WORDS_BIGENDIAN - output_buffer->colorspace = MODE_ARGB; -#else - output_buffer->colorspace = MODE_BGRA; -#endif - output_buffer->u.RGBA.rgba = (uint8_t*)pic->argb; - output_buffer->u.RGBA.stride = pic->argb_stride * sizeof(uint32_t); - output_buffer->u.RGBA.size = output_buffer->u.RGBA.stride * pic->height; - } else { - output_buffer->colorspace = has_alpha ? MODE_YUVA : MODE_YUV; - output_buffer->u.YUVA.y = pic->y; - output_buffer->u.YUVA.u = pic->u; - output_buffer->u.YUVA.v = pic->v; - output_buffer->u.YUVA.a = has_alpha ? pic->a : NULL; - output_buffer->u.YUVA.y_stride = pic->y_stride; - output_buffer->u.YUVA.u_stride = pic->uv_stride; - output_buffer->u.YUVA.v_stride = pic->uv_stride; - output_buffer->u.YUVA.a_stride = has_alpha ? pic->a_stride : 0; - output_buffer->u.YUVA.y_size = pic->height * pic->y_stride; - output_buffer->u.YUVA.u_size = (pic->height + 1) / 2 * pic->uv_stride; - output_buffer->u.YUVA.v_size = (pic->height + 1) / 2 * pic->uv_stride; - output_buffer->u.YUVA.a_size = pic->height * pic->a_stride; - } - output_buffer->is_external_memory = 1; - - status = DecodeWebP(data, data_size, &config); - ok = (status == VP8_STATUS_OK); - if (ok && !keep_alpha && pic->use_argb) { - // Need to wipe out the alpha value, as requested. - int x, y; - uint32_t* argb = pic->argb; - for (y = 0; y < pic->height; ++y) { - for (x = 0; x < pic->width; ++x) argb[x] |= 0xff000000u; - argb += pic->argb_stride; - } - } - } while (0); // <- so we can 'break' out of the loop - - if (status != VP8_STATUS_OK) { - PrintWebPError("input data", status); - ok = 0; - } - - WebPFreeDecBuffer(output_buffer); - - if (ok && metadata != NULL) { - ok = ExtractMetadata(data, data_size, metadata); - if (!ok) { - PrintWebPError("metadata", VP8_STATUS_BITSTREAM_ERROR); - } - } - if (!ok) WebPPictureFree(pic); - return ok; -} - -// ----------------------------------------------------------------------------- diff --git a/Extended/libwebp/imageio/webpdec.h b/Extended/libwebp/imageio/webpdec.h deleted file mode 100644 index d329d41..0000000 --- a/Extended/libwebp/imageio/webpdec.h +++ /dev/null @@ -1,67 +0,0 @@ -// Copyright 2014 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// WebP decode. - -#ifndef WEBP_IMAGEIO_WEBPDEC_H_ -#define WEBP_IMAGEIO_WEBPDEC_H_ - -#include "webp/decode.h" - -#ifdef __cplusplus -extern "C" { -#endif - -struct Metadata; -struct WebPPicture; - -//------------------------------------------------------------------------------ -// WebP decoding - -// Prints an informative error message regarding decode failure of 'in_file'. -// 'status' is treated as a VP8StatusCode and if valid will be printed as a -// text string. -void PrintWebPError(const char* const in_file, int status); - -// Reads a WebP from 'in_file', returning the contents and size in 'data' and -// 'data_size'. If not NULL, 'bitstream' is populated using WebPGetFeatures(). -// Returns true on success. -int LoadWebP(const char* const in_file, - const uint8_t** data, size_t* data_size, - WebPBitstreamFeatures* bitstream); - -// Decodes the WebP contained in 'data'. -// 'config' is a structure previously initialized by WebPInitDecoderConfig(). -// 'config->output' should have the desired colorspace selected. -// Returns the decoder status. On success 'config->output' will contain the -// decoded picture. -VP8StatusCode DecodeWebP(const uint8_t* const data, size_t data_size, - WebPDecoderConfig* const config); - -// Same as DecodeWebP(), but using the incremental decoder. -VP8StatusCode DecodeWebPIncremental( - const uint8_t* const data, size_t data_size, - WebPDecoderConfig* const config); - -//------------------------------------------------------------------------------ - -// Decodes a WebP contained in 'data', returning the decoded output in 'pic'. -// Output is RGBA or YUVA, depending on pic->use_argb value. -// If 'keep_alpha' is true and the WebP has an alpha channel, the output is RGBA -// or YUVA. Otherwise, alpha channel is dropped and output is RGB or YUV. -// Returns true on success. -int ReadWebP(const uint8_t* const data, size_t data_size, - struct WebPPicture* const pic, - int keep_alpha, struct Metadata* const metadata); - -#ifdef __cplusplus -} // extern "C" -#endif - -#endif // WEBP_IMAGEIO_WEBPDEC_H_ diff --git a/Extended/libwebp/imageio/wicdec.c b/Extended/libwebp/imageio/wicdec.c deleted file mode 100644 index 249d1c2..0000000 --- a/Extended/libwebp/imageio/wicdec.c +++ /dev/null @@ -1,399 +0,0 @@ -// Copyright 2013 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Windows Imaging Component (WIC) decode. - -#include "./wicdec.h" - -#ifdef HAVE_CONFIG_H -#include "webp/config.h" -#endif - -#include -#include -#include - -#ifdef HAVE_WINCODEC_H -#ifdef __MINGW32__ -#define INITGUID // Without this GUIDs are declared extern and fail to link -#endif -#define CINTERFACE -#define COBJMACROS -#define _WIN32_IE 0x500 // Workaround bug in shlwapi.h when compiling C++ - // code with COBJMACROS. -#include // CreateStreamOnHGlobal() -#include -#include -#include -#include - -#include "../examples/unicode.h" -#include "./imageio_util.h" -#include "./metadata.h" -#include "webp/encode.h" - -#define IFS(fn) \ - do { \ - if (SUCCEEDED(hr)) { \ - hr = (fn); \ - if (FAILED(hr)) fprintf(stderr, #fn " failed %08lx\n", hr); \ - } \ - } while (0) - -// modified version of DEFINE_GUID from guiddef.h. -#define WEBP_DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \ - static const GUID name = \ - { l, w1, w2, { b1, b2, b3, b4, b5, b6, b7, b8 } } - -#ifdef __cplusplus -#define MAKE_REFGUID(x) (x) -#else -#define MAKE_REFGUID(x) &(x) -#endif - -typedef struct WICFormatImporter { - const GUID* pixel_format; - int bytes_per_pixel; - int (*import)(WebPPicture* const, const uint8_t* const, int); -} WICFormatImporter; - -// From Microsoft SDK 7.0a -- wincodec.h -// Create local copies for compatibility when building against earlier -// versions of the SDK. -WEBP_DEFINE_GUID(GUID_WICPixelFormat24bppBGR_, - 0x6fddc324, 0x4e03, 0x4bfe, - 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x0c); -WEBP_DEFINE_GUID(GUID_WICPixelFormat24bppRGB_, - 0x6fddc324, 0x4e03, 0x4bfe, - 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x0d); -WEBP_DEFINE_GUID(GUID_WICPixelFormat32bppBGRA_, - 0x6fddc324, 0x4e03, 0x4bfe, - 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x0f); -WEBP_DEFINE_GUID(GUID_WICPixelFormat32bppRGBA_, - 0xf5c7ad2d, 0x6a8d, 0x43dd, - 0xa7, 0xa8, 0xa2, 0x99, 0x35, 0x26, 0x1a, 0xe9); -WEBP_DEFINE_GUID(GUID_WICPixelFormat64bppBGRA_, - 0x1562ff7c, 0xd352, 0x46f9, - 0x97, 0x9e, 0x42, 0x97, 0x6b, 0x79, 0x22, 0x46); -WEBP_DEFINE_GUID(GUID_WICPixelFormat64bppRGBA_, - 0x6fddc324, 0x4e03, 0x4bfe, - 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x16); - -static HRESULT OpenInputStream(const char* filename, IStream** stream) { - HRESULT hr = S_OK; - if (!WSTRCMP(filename, "-")) { - const uint8_t* data = NULL; - size_t data_size = 0; - const int ok = ImgIoUtilReadFile(filename, &data, &data_size); - if (ok) { - HGLOBAL image = GlobalAlloc(GMEM_MOVEABLE, data_size); - if (image != NULL) { - void* const image_mem = GlobalLock(image); - if (image_mem != NULL) { - memcpy(image_mem, data, data_size); - GlobalUnlock(image); - IFS(CreateStreamOnHGlobal(image, TRUE, stream)); - } else { - hr = E_FAIL; - } - } else { - hr = E_OUTOFMEMORY; - } - free((void*)data); - } else { - hr = E_FAIL; - } - } else { - IFS(SHCreateStreamOnFile((const LPTSTR)filename, STGM_READ, stream)); - } - - if (FAILED(hr)) { - _ftprintf(stderr, _T("Error opening input file %s (%08lx)\n"), - (const LPTSTR)filename, hr); - } - return hr; -} - -// ----------------------------------------------------------------------------- -// Metadata processing - -// Stores the first non-zero sized color profile from 'frame' to 'iccp'. -// Returns an HRESULT to indicate success or failure. The caller is responsible -// for freeing 'iccp->bytes' in either case. -static HRESULT ExtractICCP(IWICImagingFactory* const factory, - IWICBitmapFrameDecode* const frame, - MetadataPayload* const iccp) { - HRESULT hr = S_OK; - UINT i, count; - IWICColorContext** color_contexts; - - IFS(IWICBitmapFrameDecode_GetColorContexts(frame, 0, NULL, &count)); - if (FAILED(hr) || count == 0) return hr; - - color_contexts = (IWICColorContext**)calloc(count, sizeof(*color_contexts)); - if (color_contexts == NULL) return E_OUTOFMEMORY; - for (i = 0; SUCCEEDED(hr) && i < count; ++i) { - IFS(IWICImagingFactory_CreateColorContext(factory, &color_contexts[i])); - } - - if (SUCCEEDED(hr)) { - UINT num_color_contexts; - IFS(IWICBitmapFrameDecode_GetColorContexts(frame, - count, color_contexts, - &num_color_contexts)); - assert(FAILED(hr) || num_color_contexts <= count); - for (i = 0; SUCCEEDED(hr) && i < num_color_contexts; ++i) { - WICColorContextType type; - IFS(IWICColorContext_GetType(color_contexts[i], &type)); - if (SUCCEEDED(hr) && type == WICColorContextProfile) { - UINT size; - IFS(IWICColorContext_GetProfileBytes(color_contexts[i], - 0, NULL, &size)); - if (SUCCEEDED(hr) && size > 0) { - iccp->bytes = (uint8_t*)malloc(size); - if (iccp->bytes == NULL) { - hr = E_OUTOFMEMORY; - break; - } - iccp->size = size; - IFS(IWICColorContext_GetProfileBytes(color_contexts[i], - (UINT)iccp->size, iccp->bytes, - &size)); - if (SUCCEEDED(hr) && size != iccp->size) { - fprintf(stderr, "Warning! ICC profile size (%u) != expected (%u)\n", - size, (uint32_t)iccp->size); - iccp->size = size; - } - break; - } - } - } - } - for (i = 0; i < count; ++i) { - if (color_contexts[i] != NULL) IUnknown_Release(color_contexts[i]); - } - free(color_contexts); - return hr; -} - -static HRESULT ExtractMetadata(IWICImagingFactory* const factory, - IWICBitmapFrameDecode* const frame, - Metadata* const metadata) { - // TODO(jzern): add XMP/EXIF extraction. - const HRESULT hr = ExtractICCP(factory, frame, &metadata->iccp); - if (FAILED(hr)) MetadataFree(metadata); - return hr; -} - -// ----------------------------------------------------------------------------- - -static int HasPalette(GUID pixel_format) { - return (IsEqualGUID(MAKE_REFGUID(pixel_format), - MAKE_REFGUID(GUID_WICPixelFormat1bppIndexed)) || - IsEqualGUID(MAKE_REFGUID(pixel_format), - MAKE_REFGUID(GUID_WICPixelFormat2bppIndexed)) || - IsEqualGUID(MAKE_REFGUID(pixel_format), - MAKE_REFGUID(GUID_WICPixelFormat4bppIndexed)) || - IsEqualGUID(MAKE_REFGUID(pixel_format), - MAKE_REFGUID(GUID_WICPixelFormat8bppIndexed))); -} - -static int HasAlpha(IWICImagingFactory* const factory, - IWICBitmapDecoder* const decoder, - IWICBitmapFrameDecode* const frame, - GUID pixel_format) { - int has_alpha; - if (HasPalette(pixel_format)) { - IWICPalette* frame_palette = NULL; - IWICPalette* global_palette = NULL; - BOOL frame_palette_has_alpha = FALSE; - BOOL global_palette_has_alpha = FALSE; - - // A palette may exist at the frame or container level, - // check IWICPalette::HasAlpha() for both if present. - if (SUCCEEDED(IWICImagingFactory_CreatePalette(factory, &frame_palette)) && - SUCCEEDED(IWICBitmapFrameDecode_CopyPalette(frame, frame_palette))) { - IWICPalette_HasAlpha(frame_palette, &frame_palette_has_alpha); - } - if (SUCCEEDED(IWICImagingFactory_CreatePalette(factory, &global_palette)) && - SUCCEEDED(IWICBitmapDecoder_CopyPalette(decoder, global_palette))) { - IWICPalette_HasAlpha(global_palette, &global_palette_has_alpha); - } - has_alpha = frame_palette_has_alpha || global_palette_has_alpha; - - if (frame_palette != NULL) IUnknown_Release(frame_palette); - if (global_palette != NULL) IUnknown_Release(global_palette); - } else { - has_alpha = IsEqualGUID(MAKE_REFGUID(pixel_format), - MAKE_REFGUID(GUID_WICPixelFormat32bppRGBA_)) || - IsEqualGUID(MAKE_REFGUID(pixel_format), - MAKE_REFGUID(GUID_WICPixelFormat32bppBGRA_)) || - IsEqualGUID(MAKE_REFGUID(pixel_format), - MAKE_REFGUID(GUID_WICPixelFormat64bppRGBA_)) || - IsEqualGUID(MAKE_REFGUID(pixel_format), - MAKE_REFGUID(GUID_WICPixelFormat64bppBGRA_)); - } - return has_alpha; -} - -int ReadPictureWithWIC(const char* const filename, - WebPPicture* const pic, int keep_alpha, - Metadata* const metadata) { - // From Microsoft SDK 6.0a -- ks.h - // Define a local copy to avoid link errors under mingw. - WEBP_DEFINE_GUID(GUID_NULL_, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); - static const WICFormatImporter kAlphaFormatImporters[] = { - { &GUID_WICPixelFormat32bppBGRA_, 4, WebPPictureImportBGRA }, - { &GUID_WICPixelFormat32bppRGBA_, 4, WebPPictureImportRGBA }, - { NULL, 0, NULL }, - }; - static const WICFormatImporter kNonAlphaFormatImporters[] = { - { &GUID_WICPixelFormat24bppBGR_, 3, WebPPictureImportBGR }, - { &GUID_WICPixelFormat24bppRGB_, 3, WebPPictureImportRGB }, - { NULL, 0, NULL }, - }; - HRESULT hr = S_OK; - IWICBitmapFrameDecode* frame = NULL; - IWICFormatConverter* converter = NULL; - IWICImagingFactory* factory = NULL; - IWICBitmapDecoder* decoder = NULL; - IStream* stream = NULL; - UINT frame_count = 0; - UINT width = 0, height = 0; - BYTE* rgb = NULL; - WICPixelFormatGUID src_pixel_format = GUID_WICPixelFormatUndefined; - const WICFormatImporter* importer = NULL; - GUID src_container_format = GUID_NULL_; - static const GUID* kAlphaContainers[] = { - &GUID_ContainerFormatBmp, - &GUID_ContainerFormatPng, - &GUID_ContainerFormatTiff, - NULL - }; - int has_alpha = 0; - int64_t stride; - - if (filename == NULL || pic == NULL) return 0; - - IFS(CoInitialize(NULL)); - IFS(CoCreateInstance(MAKE_REFGUID(CLSID_WICImagingFactory), NULL, - CLSCTX_INPROC_SERVER, - MAKE_REFGUID(IID_IWICImagingFactory), - (LPVOID*)&factory)); - if (hr == REGDB_E_CLASSNOTREG) { - fprintf(stderr, - "Couldn't access Windows Imaging Component (are you running " - "Windows XP SP3 or newer?). Most formats not available. " - "Use -s for the available YUV input.\n"); - } - // Prepare for image decoding. - IFS(OpenInputStream(filename, &stream)); - IFS(IWICImagingFactory_CreateDecoderFromStream( - factory, stream, NULL, - WICDecodeMetadataCacheOnDemand, &decoder)); - IFS(IWICBitmapDecoder_GetFrameCount(decoder, &frame_count)); - if (SUCCEEDED(hr) && frame_count == 0) { - fprintf(stderr, "No frame found in input file.\n"); - hr = E_FAIL; - } - IFS(IWICBitmapDecoder_GetFrame(decoder, 0, &frame)); - IFS(IWICBitmapFrameDecode_GetPixelFormat(frame, &src_pixel_format)); - IFS(IWICBitmapDecoder_GetContainerFormat(decoder, &src_container_format)); - - if (SUCCEEDED(hr) && keep_alpha) { - const GUID** guid; - for (guid = kAlphaContainers; *guid != NULL; ++guid) { - if (IsEqualGUID(MAKE_REFGUID(src_container_format), - MAKE_REFGUID(**guid))) { - has_alpha = HasAlpha(factory, decoder, frame, src_pixel_format); - break; - } - } - } - - // Prepare for pixel format conversion (if necessary). - IFS(IWICImagingFactory_CreateFormatConverter(factory, &converter)); - - for (importer = has_alpha ? kAlphaFormatImporters : kNonAlphaFormatImporters; - hr == S_OK && importer->import != NULL; ++importer) { - BOOL can_convert; - const HRESULT cchr = IWICFormatConverter_CanConvert( - converter, - MAKE_REFGUID(src_pixel_format), - MAKE_REFGUID(*importer->pixel_format), - &can_convert); - if (SUCCEEDED(cchr) && can_convert) break; - } - if (importer->import == NULL) hr = E_FAIL; - - IFS(IWICFormatConverter_Initialize(converter, (IWICBitmapSource*)frame, - importer->pixel_format, - WICBitmapDitherTypeNone, - NULL, 0.0, WICBitmapPaletteTypeCustom)); - - // Decode. - IFS(IWICFormatConverter_GetSize(converter, &width, &height)); - stride = (int64_t)importer->bytes_per_pixel * width * sizeof(*rgb); - if (stride != (int)stride || - !ImgIoUtilCheckSizeArgumentsOverflow(stride, height)) { - hr = E_FAIL; - } - - if (SUCCEEDED(hr)) { - rgb = (BYTE*)malloc((size_t)stride * height); - if (rgb == NULL) - hr = E_OUTOFMEMORY; - } - IFS(IWICFormatConverter_CopyPixels(converter, NULL, - (UINT)stride, (UINT)stride * height, rgb)); - - // WebP conversion. - if (SUCCEEDED(hr)) { - int ok; - pic->width = width; - pic->height = height; - pic->use_argb = 1; // For WIC, we always force to argb - ok = importer->import(pic, rgb, (int)stride); - if (!ok) hr = E_FAIL; - } - if (SUCCEEDED(hr)) { - if (metadata != NULL) { - hr = ExtractMetadata(factory, frame, metadata); - if (FAILED(hr)) { - fprintf(stderr, "Error extracting image metadata using WIC!\n"); - } - } - } - - // Cleanup. - if (converter != NULL) IUnknown_Release(converter); - if (frame != NULL) IUnknown_Release(frame); - if (decoder != NULL) IUnknown_Release(decoder); - if (factory != NULL) IUnknown_Release(factory); - if (stream != NULL) IUnknown_Release(stream); - free(rgb); - return SUCCEEDED(hr); -} -#else // !HAVE_WINCODEC_H -int ReadPictureWithWIC(const char* const filename, - struct WebPPicture* const pic, int keep_alpha, - struct Metadata* const metadata) { - (void)filename; - (void)pic; - (void)keep_alpha; - (void)metadata; - fprintf(stderr, "Windows Imaging Component (WIC) support not compiled. " - "Visual Studio and mingw-w64 builds support WIC. Make sure " - "wincodec.h detection is working correctly if using autoconf " - "and HAVE_WINCODEC_H is defined before building.\n"); - return 0; -} -#endif // HAVE_WINCODEC_H - -// ----------------------------------------------------------------------------- diff --git a/Extended/libwebp/imageio/wicdec.h b/Extended/libwebp/imageio/wicdec.h deleted file mode 100644 index d9eeca8..0000000 --- a/Extended/libwebp/imageio/wicdec.h +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2013 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Windows Imaging Component (WIC) decode. - -#ifndef WEBP_IMAGEIO_WICDEC_H_ -#define WEBP_IMAGEIO_WICDEC_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -struct Metadata; -struct WebPPicture; - -// Reads an image from 'filename', returning the decoded output in 'pic'. -// If 'keep_alpha' is true and the image has an alpha channel, the output is -// RGBA otherwise it will be RGB. pic->use_argb is always forced to true. -// Returns true on success. -int ReadPictureWithWIC(const char* const filename, - struct WebPPicture* const pic, int keep_alpha, - struct Metadata* const metadata); - -#ifdef __cplusplus -} // extern "C" -#endif - -#endif // WEBP_IMAGEIO_WICDEC_H_ diff --git a/Extended/libwebp/install-sh b/Extended/libwebp/install-sh deleted file mode 100755 index 8175c64..0000000 --- a/Extended/libwebp/install-sh +++ /dev/null @@ -1,518 +0,0 @@ -#!/bin/sh -# install - install a program, script, or datafile - -scriptversion=2018-03-11.20; # UTC - -# This originates from X11R5 (mit/util/scripts/install.sh), which was -# later released in X11R6 (xc/config/util/install.sh) with the -# following copyright and license. -# -# Copyright (C) 1994 X Consortium -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to -# deal in the Software without restriction, including without limitation the -# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -# sell copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- -# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -# -# Except as contained in this notice, the name of the X Consortium shall not -# be used in advertising or otherwise to promote the sale, use or other deal- -# ings in this Software without prior written authorization from the X Consor- -# tium. -# -# -# FSF changes to this file are in the public domain. -# -# Calling this script install-sh is preferred over install.sh, to prevent -# 'make' implicit rules from creating a file called install from it -# when there is no Makefile. -# -# This script is compatible with the BSD install script, but was written -# from scratch. - -tab=' ' -nl=' -' -IFS=" $tab$nl" - -# Set DOITPROG to "echo" to test this script. - -doit=${DOITPROG-} -doit_exec=${doit:-exec} - -# Put in absolute file names if you don't have them in your path; -# or use environment vars. - -chgrpprog=${CHGRPPROG-chgrp} -chmodprog=${CHMODPROG-chmod} -chownprog=${CHOWNPROG-chown} -cmpprog=${CMPPROG-cmp} -cpprog=${CPPROG-cp} -mkdirprog=${MKDIRPROG-mkdir} -mvprog=${MVPROG-mv} -rmprog=${RMPROG-rm} -stripprog=${STRIPPROG-strip} - -posix_mkdir= - -# Desired mode of installed file. -mode=0755 - -chgrpcmd= -chmodcmd=$chmodprog -chowncmd= -mvcmd=$mvprog -rmcmd="$rmprog -f" -stripcmd= - -src= -dst= -dir_arg= -dst_arg= - -copy_on_change=false -is_target_a_directory=possibly - -usage="\ -Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE - or: $0 [OPTION]... SRCFILES... DIRECTORY - or: $0 [OPTION]... -t DIRECTORY SRCFILES... - or: $0 [OPTION]... -d DIRECTORIES... - -In the 1st form, copy SRCFILE to DSTFILE. -In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. -In the 4th, create DIRECTORIES. - -Options: - --help display this help and exit. - --version display version info and exit. - - -c (ignored) - -C install only if different (preserve the last data modification time) - -d create directories instead of installing files. - -g GROUP $chgrpprog installed files to GROUP. - -m MODE $chmodprog installed files to MODE. - -o USER $chownprog installed files to USER. - -s $stripprog installed files. - -t DIRECTORY install into DIRECTORY. - -T report an error if DSTFILE is a directory. - -Environment variables override the default commands: - CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG - RMPROG STRIPPROG -" - -while test $# -ne 0; do - case $1 in - -c) ;; - - -C) copy_on_change=true;; - - -d) dir_arg=true;; - - -g) chgrpcmd="$chgrpprog $2" - shift;; - - --help) echo "$usage"; exit $?;; - - -m) mode=$2 - case $mode in - *' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*) - echo "$0: invalid mode: $mode" >&2 - exit 1;; - esac - shift;; - - -o) chowncmd="$chownprog $2" - shift;; - - -s) stripcmd=$stripprog;; - - -t) - is_target_a_directory=always - dst_arg=$2 - # Protect names problematic for 'test' and other utilities. - case $dst_arg in - -* | [=\(\)!]) dst_arg=./$dst_arg;; - esac - shift;; - - -T) is_target_a_directory=never;; - - --version) echo "$0 $scriptversion"; exit $?;; - - --) shift - break;; - - -*) echo "$0: invalid option: $1" >&2 - exit 1;; - - *) break;; - esac - shift -done - -# We allow the use of options -d and -T together, by making -d -# take the precedence; this is for compatibility with GNU install. - -if test -n "$dir_arg"; then - if test -n "$dst_arg"; then - echo "$0: target directory not allowed when installing a directory." >&2 - exit 1 - fi -fi - -if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then - # When -d is used, all remaining arguments are directories to create. - # When -t is used, the destination is already specified. - # Otherwise, the last argument is the destination. Remove it from $@. - for arg - do - if test -n "$dst_arg"; then - # $@ is not empty: it contains at least $arg. - set fnord "$@" "$dst_arg" - shift # fnord - fi - shift # arg - dst_arg=$arg - # Protect names problematic for 'test' and other utilities. - case $dst_arg in - -* | [=\(\)!]) dst_arg=./$dst_arg;; - esac - done -fi - -if test $# -eq 0; then - if test -z "$dir_arg"; then - echo "$0: no input file specified." >&2 - exit 1 - fi - # It's OK to call 'install-sh -d' without argument. - # This can happen when creating conditional directories. - exit 0 -fi - -if test -z "$dir_arg"; then - if test $# -gt 1 || test "$is_target_a_directory" = always; then - if test ! -d "$dst_arg"; then - echo "$0: $dst_arg: Is not a directory." >&2 - exit 1 - fi - fi -fi - -if test -z "$dir_arg"; then - do_exit='(exit $ret); exit $ret' - trap "ret=129; $do_exit" 1 - trap "ret=130; $do_exit" 2 - trap "ret=141; $do_exit" 13 - trap "ret=143; $do_exit" 15 - - # Set umask so as not to create temps with too-generous modes. - # However, 'strip' requires both read and write access to temps. - case $mode in - # Optimize common cases. - *644) cp_umask=133;; - *755) cp_umask=22;; - - *[0-7]) - if test -z "$stripcmd"; then - u_plus_rw= - else - u_plus_rw='% 200' - fi - cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; - *) - if test -z "$stripcmd"; then - u_plus_rw= - else - u_plus_rw=,u+rw - fi - cp_umask=$mode$u_plus_rw;; - esac -fi - -for src -do - # Protect names problematic for 'test' and other utilities. - case $src in - -* | [=\(\)!]) src=./$src;; - esac - - if test -n "$dir_arg"; then - dst=$src - dstdir=$dst - test -d "$dstdir" - dstdir_status=$? - else - - # Waiting for this to be detected by the "$cpprog $src $dsttmp" command - # might cause directories to be created, which would be especially bad - # if $src (and thus $dsttmp) contains '*'. - if test ! -f "$src" && test ! -d "$src"; then - echo "$0: $src does not exist." >&2 - exit 1 - fi - - if test -z "$dst_arg"; then - echo "$0: no destination specified." >&2 - exit 1 - fi - dst=$dst_arg - - # If destination is a directory, append the input filename. - if test -d "$dst"; then - if test "$is_target_a_directory" = never; then - echo "$0: $dst_arg: Is a directory" >&2 - exit 1 - fi - dstdir=$dst - dstbase=`basename "$src"` - case $dst in - */) dst=$dst$dstbase;; - *) dst=$dst/$dstbase;; - esac - dstdir_status=0 - else - dstdir=`dirname "$dst"` - test -d "$dstdir" - dstdir_status=$? - fi - fi - - case $dstdir in - */) dstdirslash=$dstdir;; - *) dstdirslash=$dstdir/;; - esac - - obsolete_mkdir_used=false - - if test $dstdir_status != 0; then - case $posix_mkdir in - '') - # Create intermediate dirs using mode 755 as modified by the umask. - # This is like FreeBSD 'install' as of 1997-10-28. - umask=`umask` - case $stripcmd.$umask in - # Optimize common cases. - *[2367][2367]) mkdir_umask=$umask;; - .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; - - *[0-7]) - mkdir_umask=`expr $umask + 22 \ - - $umask % 100 % 40 + $umask % 20 \ - - $umask % 10 % 4 + $umask % 2 - `;; - *) mkdir_umask=$umask,go-w;; - esac - - # With -d, create the new directory with the user-specified mode. - # Otherwise, rely on $mkdir_umask. - if test -n "$dir_arg"; then - mkdir_mode=-m$mode - else - mkdir_mode= - fi - - posix_mkdir=false - case $umask in - *[123567][0-7][0-7]) - # POSIX mkdir -p sets u+wx bits regardless of umask, which - # is incompatible with FreeBSD 'install' when (umask & 300) != 0. - ;; - *) - # Note that $RANDOM variable is not portable (e.g. dash); Use it - # here however when possible just to lower collision chance. - tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ - - trap 'ret=$?; rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null; exit $ret' 0 - - # Because "mkdir -p" follows existing symlinks and we likely work - # directly in world-writeable /tmp, make sure that the '$tmpdir' - # directory is successfully created first before we actually test - # 'mkdir -p' feature. - if (umask $mkdir_umask && - $mkdirprog $mkdir_mode "$tmpdir" && - exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1 - then - if test -z "$dir_arg" || { - # Check for POSIX incompatibilities with -m. - # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or - # other-writable bit of parent directory when it shouldn't. - # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. - test_tmpdir="$tmpdir/a" - ls_ld_tmpdir=`ls -ld "$test_tmpdir"` - case $ls_ld_tmpdir in - d????-?r-*) different_mode=700;; - d????-?--*) different_mode=755;; - *) false;; - esac && - $mkdirprog -m$different_mode -p -- "$test_tmpdir" && { - ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"` - test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" - } - } - then posix_mkdir=: - fi - rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" - else - # Remove any dirs left behind by ancient mkdir implementations. - rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null - fi - trap '' 0;; - esac;; - esac - - if - $posix_mkdir && ( - umask $mkdir_umask && - $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" - ) - then : - else - - # The umask is ridiculous, or mkdir does not conform to POSIX, - # or it failed possibly due to a race condition. Create the - # directory the slow way, step by step, checking for races as we go. - - case $dstdir in - /*) prefix='/';; - [-=\(\)!]*) prefix='./';; - *) prefix='';; - esac - - oIFS=$IFS - IFS=/ - set -f - set fnord $dstdir - shift - set +f - IFS=$oIFS - - prefixes= - - for d - do - test X"$d" = X && continue - - prefix=$prefix$d - if test -d "$prefix"; then - prefixes= - else - if $posix_mkdir; then - (umask=$mkdir_umask && - $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break - # Don't fail if two instances are running concurrently. - test -d "$prefix" || exit 1 - else - case $prefix in - *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; - *) qprefix=$prefix;; - esac - prefixes="$prefixes '$qprefix'" - fi - fi - prefix=$prefix/ - done - - if test -n "$prefixes"; then - # Don't fail if two instances are running concurrently. - (umask $mkdir_umask && - eval "\$doit_exec \$mkdirprog $prefixes") || - test -d "$dstdir" || exit 1 - obsolete_mkdir_used=true - fi - fi - fi - - if test -n "$dir_arg"; then - { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && - { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && - { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || - test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 - else - - # Make a couple of temp file names in the proper directory. - dsttmp=${dstdirslash}_inst.$$_ - rmtmp=${dstdirslash}_rm.$$_ - - # Trap to clean up those temp files at exit. - trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 - - # Copy the file name to the temp name. - (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && - - # and set any options; do chmod last to preserve setuid bits. - # - # If any of these fail, we abort the whole thing. If we want to - # ignore errors from any of these, just make sure not to ignore - # errors from the above "$doit $cpprog $src $dsttmp" command. - # - { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && - { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && - { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && - { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && - - # If -C, don't bother to copy if it wouldn't change the file. - if $copy_on_change && - old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && - new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && - set -f && - set X $old && old=:$2:$4:$5:$6 && - set X $new && new=:$2:$4:$5:$6 && - set +f && - test "$old" = "$new" && - $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 - then - rm -f "$dsttmp" - else - # Rename the file to the real destination. - $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || - - # The rename failed, perhaps because mv can't rename something else - # to itself, or perhaps because mv is so ancient that it does not - # support -f. - { - # Now remove or move aside any old file at destination location. - # We try this two ways since rm can't unlink itself on some - # systems and the destination file might be busy for other - # reasons. In this case, the final cleanup might fail but the new - # file should still install successfully. - { - test ! -f "$dst" || - $doit $rmcmd -f "$dst" 2>/dev/null || - { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && - { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } - } || - { echo "$0: cannot unlink or rename $dst" >&2 - (exit 1); exit 1 - } - } && - - # Now rename the file to the real destination. - $doit $mvcmd "$dsttmp" "$dst" - } - fi || exit 1 - - trap '' 0 - fi -done - -# Local variables: -# eval: (add-hook 'before-save-hook 'time-stamp) -# time-stamp-start: "scriptversion=" -# time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-time-zone: "UTC0" -# time-stamp-end: "; # UTC" -# End: diff --git a/Extended/libwebp/iosbuild.sh b/Extended/libwebp/iosbuild.sh deleted file mode 100755 index e4031de..0000000 --- a/Extended/libwebp/iosbuild.sh +++ /dev/null @@ -1,150 +0,0 @@ -#!/bin/bash -# -# This script generates 'WebP.framework' and 'WebPDecoder.framework'. An iOS -# app can decode WebP images by including 'WebPDecoder.framework' and both -# encode and decode WebP images by including 'WebP.framework'. -# -# Run ./iosbuild.sh to generate the frameworks under the current directory -# (the previous build will be erased if it exists). -# -# This script is inspired by the build script written by Carson McDonald. -# (http://www.ioncannon.net/programming/1483/using-webp-to-reduce-native-ios-app-size/). - -set -e - -# Extract the latest SDK version from the final field of the form: iphoneosX.Y -readonly SDK=$(xcodebuild -showsdks \ - | grep iphoneos | sort | tail -n 1 | awk '{print substr($NF, 9)}' -) -# Extract Xcode version. -readonly XCODE=$(xcodebuild -version | grep Xcode | cut -d " " -f2) -if [[ -z "${XCODE}" ]]; then - echo "Xcode not available" - exit 1 -fi - -readonly OLDPATH=${PATH} - -# Add iPhoneOS-V6 to the list of platforms below if you need armv6 support. -# Note that iPhoneOS-V6 support is not available with the iOS6 SDK. -PLATFORMS="iPhoneSimulator iPhoneSimulator64" -PLATFORMS+=" iPhoneOS-V7 iPhoneOS-V7s iPhoneOS-V7-arm64" -readonly PLATFORMS -readonly SRCDIR=$(dirname $0) -readonly TOPDIR=$(pwd) -readonly BUILDDIR="${TOPDIR}/iosbuild" -readonly TARGETDIR="${TOPDIR}/WebP.framework" -readonly DECTARGETDIR="${TOPDIR}/WebPDecoder.framework" -readonly MUXTARGETDIR="${TOPDIR}/WebPMux.framework" -readonly DEMUXTARGETDIR="${TOPDIR}/WebPDemux.framework" -readonly DEVELOPER=$(xcode-select --print-path) -readonly PLATFORMSROOT="${DEVELOPER}/Platforms" -readonly LIPO=$(xcrun -sdk iphoneos${SDK} -find lipo) -LIBLIST='' -DECLIBLIST='' -MUXLIBLIST='' -DEMUXLIBLIST='' - -if [[ -z "${SDK}" ]]; then - echo "iOS SDK not available" - exit 1 -elif [[ ${SDK%%.*} -gt 8 ]]; then - EXTRA_CFLAGS="-fembed-bitcode" -elif [[ ${SDK} < 6.0 ]]; then - echo "You need iOS SDK version 6.0 or above" - exit 1 -else - echo "iOS SDK Version ${SDK}" -fi - -rm -rf ${BUILDDIR} ${TARGETDIR} ${DECTARGETDIR} \ - ${MUXTARGETDIR} ${DEMUXTARGETDIR} -mkdir -p ${BUILDDIR} ${TARGETDIR}/Headers/ ${DECTARGETDIR}/Headers/ \ - ${MUXTARGETDIR}/Headers/ ${DEMUXTARGETDIR}/Headers/ - -if [[ ! -e ${SRCDIR}/configure ]]; then - if ! (cd ${SRCDIR} && sh autogen.sh); then - cat <. - - -# The names of the tagged configurations supported by this script. -available_tags='' - -# Configured defaults for sys_lib_dlsearch_path munging. -: ${LT_SYS_LIBRARY_PATH=""} - -# ### BEGIN LIBTOOL CONFIG - -# Which release of libtool.m4 was used? -macro_version=2.4.6 -macro_revision=2.4.6 - -# Whether or not to build shared libraries. -build_libtool_libs=yes - -# Whether or not to build static libraries. -build_old_libs=yes - -# What type of objects to build. -pic_mode=default - -# Whether or not to optimize for fast installation. -fast_install=needless - -# Shared archive member basename,for filename based shared library versioning on AIX. -shared_archive_member_spec= - -# Shell to use when invoking shell scripts. -SHELL="/bin/sh" - -# An echo program that protects backslashes. -ECHO="printf %s\\n" - -# The PATH separator for the build system. -PATH_SEPARATOR=":" - -# The host system. -host_alias= -host=x86_64-apple-darwin19.6.0 -host_os=darwin19.6.0 - -# The build system. -build_alias= -build=x86_64-apple-darwin19.6.0 -build_os=darwin19.6.0 - -# A sed program that does not truncate output. -SED="/usr/bin/sed" - -# Sed that helps us avoid accidentally triggering echo(1) options like -n. -Xsed="$SED -e 1s/^X//" - -# A grep program that handles long lines. -GREP="/usr/bin/grep" - -# An ERE matcher. -EGREP="/usr/bin/grep -E" - -# A literal string matcher. -FGREP="/usr/bin/grep -F" - -# A BSD- or MS-compatible name lister. -NM="/usr/bin/nm -B" - -# Whether we need soft or hard links. -LN_S="ln -s" - -# What is the maximum length of a command? -max_cmd_len=196608 - -# Object file suffix (normally "o"). -objext=o - -# Executable file suffix (normally ""). -exeext= - -# whether the shell understands "unset". -lt_unset=unset - -# turn spaces into newlines. -SP2NL="tr \\040 \\012" - -# turn newlines into spaces. -NL2SP="tr \\015\\012 \\040\\040" - -# convert $build file names to $host format. -to_host_file_cmd=func_convert_file_noop - -# convert $build files to toolchain format. -to_tool_file_cmd=func_convert_file_noop - -# An object symbol dumper. -OBJDUMP="objdump" - -# Method to check whether dependent libraries are shared objects. -deplibs_check_method="pass_all" - -# Command to use when deplibs_check_method = "file_magic". -file_magic_cmd="\$MAGIC_CMD" - -# How to find potential files when deplibs_check_method = "file_magic". -file_magic_glob="" - -# Find potential files using nocaseglob when deplibs_check_method = "file_magic". -want_nocaseglob="no" - -# DLL creation program. -DLLTOOL="false" - -# Command to associate shared and link libraries. -sharedlib_from_linklib_cmd="printf %s\\n" - -# The archiver. -AR="ar" - -# Flags to create an archive. -AR_FLAGS="cru" - -# How to feed a file listing to the archiver. -archiver_list_spec="" - -# A symbol stripping program. -STRIP="strip" - -# Commands used to install an old-style archive. -RANLIB="ranlib" -old_postinstall_cmds="chmod 644 \$oldlib~\$RANLIB \$tool_oldlib" -old_postuninstall_cmds="" - -# Whether to use a lock for old archive extraction. -lock_old_archive_extraction=yes - -# A C compiler. -LTCC="gcc" - -# LTCC compiler flags. -LTCFLAGS="-g -O2 -D_THREAD_SAFE -pthread" - -# Take the output of nm and produce a listing of raw symbols and C names. -global_symbol_pipe="sed -n -e 's/^.*[ ]\\([BCDEGRST][BCDEGRST]*\\)[ ][ ]*_\\([_A-Za-z][_A-Za-z0-9]*\\)\$/\\1 _\\2 \\2/p' | sed '/ __gnu_lto/d'" - -# Transform the output of nm in a proper C declaration. -global_symbol_to_cdecl="sed -n -e 's/^T .* \\(.*\\)\$/extern int \\1();/p' -e 's/^[BCDEGRST][BCDEGRST]* .* \\(.*\\)\$/extern char \\1;/p'" - -# Transform the output of nm into a list of symbols to manually relocate. -global_symbol_to_import="" - -# Transform the output of nm in a C name address pair. -global_symbol_to_c_name_address="sed -n -e 's/^: \\(.*\\) .*\$/ {\"\\1\", (void *) 0},/p' -e 's/^[BCDEGRST][BCDEGRST]* .* \\(.*\\)\$/ {\"\\1\", (void *) \\&\\1},/p'" - -# Transform the output of nm in a C name address pair when lib prefix is needed. -global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \\(.*\\) .*\$/ {\"\\1\", (void *) 0},/p' -e 's/^[BCDEGRST][BCDEGRST]* .* \\(lib.*\\)\$/ {\"\\1\", (void *) \\&\\1},/p' -e 's/^[BCDEGRST][BCDEGRST]* .* \\(.*\\)\$/ {\"lib\\1\", (void *) \\&\\1},/p'" - -# The name lister interface. -nm_interface="BSD nm" - -# Specify filename containing input files for $NM. -nm_file_list_spec="@" - -# The root where to search for dependent libraries,and where our libraries should be installed. -lt_sysroot= - -# Command to truncate a binary pipe. -lt_truncate_bin="/bin/dd bs=4096 count=1" - -# The name of the directory that contains temporary libtool files. -objdir=.libs - -# Used to examine libraries when file_magic_cmd begins with "file". -MAGIC_CMD=file - -# Must we lock files when doing compilation? -need_locks="no" - -# Manifest tool. -MANIFEST_TOOL=":" - -# Tool to manipulate archived DWARF debug symbol files on Mac OS X. -DSYMUTIL="dsymutil" - -# Tool to change global to local symbols on Mac OS X. -NMEDIT="nmedit" - -# Tool to manipulate fat objects and archives on Mac OS X. -LIPO="lipo" - -# ldd/readelf like tool for Mach-O binaries on Mac OS X. -OTOOL="otool" - -# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. -OTOOL64=":" - -# Old archive suffix (normally "a"). -libext=a - -# Shared library suffix (normally ".so"). -shrext_cmds="\`test .\$module = .yes && echo .so || echo .dylib\`" - -# The commands to extract the exported symbol list from a shared archive. -extract_expsyms_cmds="" - -# Variables whose values should be saved in libtool wrapper scripts and -# restored at link time. -variables_saved_for_relink="PATH DYLD_LIBRARY_PATH GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" - -# Do we need the "lib" prefix for modules? -need_lib_prefix=no - -# Do we need a version for libraries? -need_version=no - -# Library versioning type. -version_type=darwin - -# Shared library runtime path variable. -runpath_var= - -# Shared library path variable. -shlibpath_var=DYLD_LIBRARY_PATH - -# Is shlibpath searched before the hard-coded library search path? -shlibpath_overrides_runpath=yes - -# Format of library name prefix. -libname_spec="lib\$name" - -# List of archive names. First name is the real one, the rest are links. -# The last name is the one that the linker finds with -lNAME -library_names_spec="\$libname\$release\$major\$shared_ext \$libname\$shared_ext" - -# The coded name of the library, if different from the real name. -soname_spec="\$libname\$release\$major\$shared_ext" - -# Permission mode override for installation of shared libraries. -install_override_mode="" - -# Command to use after installation of a shared archive. -postinstall_cmds="" - -# Command to use after uninstallation of a shared archive. -postuninstall_cmds="" - -# Commands used to finish a libtool library installation in a directory. -finish_cmds="" - -# As "finish_cmds", except a single script fragment to be evaled but -# not shown. -finish_eval="" - -# Whether we should hardcode library paths into libraries. -hardcode_into_libs=no - -# Compile-time system search path for libraries. -sys_lib_search_path_spec="/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/11.0.3 /usr/local/lib" - -# Detected run-time system search path for libraries. -sys_lib_dlsearch_path_spec="/usr/local/lib /lib /usr/lib" - -# Explicit LT_SYS_LIBRARY_PATH set during ./configure time. -configure_time_lt_sys_library_path="" - -# Whether dlopen is supported. -dlopen_support=unknown - -# Whether dlopen of programs is supported. -dlopen_self=unknown - -# Whether dlopen of statically linked programs is supported. -dlopen_self_static=unknown - -# Commands to strip libraries. -old_striplib="strip -S" -striplib="strip -x" - - -# The linker used to build libraries. -LD="/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld" - -# How to create reloadable object files. -reload_flag=" -r" -reload_cmds="\$LTCC \$LTCFLAGS -nostdlib \$wl-r -o \$output\$reload_objs" - -# Commands used to build an old-style archive. -old_archive_cmds="\$AR \$AR_FLAGS \$oldlib\$oldobjs~\$RANLIB \$tool_oldlib" - -# A language specific compiler. -CC="gcc" - -# Is the compiler the GNU compiler? -with_gcc=yes - -# Compiler flag to turn off builtin functions. -no_builtin_flag=" -fno-builtin -fno-rtti -fno-exceptions" - -# Additional compiler flags for building library objects. -pic_flag=" -fno-common -DPIC" - -# How to pass a linker flag through the compiler. -wl="-Wl," - -# Compiler flag to prevent dynamic linking. -link_static_flag="" - -# Does compiler simultaneously support -c and -o options? -compiler_c_o="yes" - -# Whether or not to add -lc for building shared libraries. -build_libtool_need_lc=no - -# Whether or not to disallow shared libs when runtime libs are static. -allow_libtool_libs_with_static_runtimes=no - -# Compiler flag to allow reflexive dlopens. -export_dynamic_flag_spec="" - -# Compiler flag to generate shared objects directly from archives. -whole_archive_flag_spec="\`for conv in \$convenience\\\"\\\"; do test -n \\\"\$conv\\\" && new_convenience=\\\"\$new_convenience \$wl-force_load,\$conv\\\"; done; func_echo_all \\\"\$new_convenience\\\"\`" - -# Whether the compiler copes with passing no objects directly. -compiler_needs_object="no" - -# Create an old-style archive from a shared archive. -old_archive_from_new_cmds="" - -# Create a temporary old-style archive to link instead of a shared archive. -old_archive_from_expsyms_cmds="" - -# Commands used to build a shared archive. -archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring \$single_module" -archive_expsym_cmds="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring \$single_module \$wl-exported_symbols_list,\$output_objdir/\$libname-symbols.expsym" - -# Commands used to build a loadable module if different from building -# a shared archive. -module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags" -module_expsym_cmds="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags \$wl-exported_symbols_list,\$output_objdir/\$libname-symbols.expsym" - -# Whether we are building with GNU ld or not. -with_gnu_ld="no" - -# Flag that allows shared libraries with undefined symbols to be built. -allow_undefined_flag="\$wl-undefined \${wl}dynamic_lookup" - -# Flag that enforces no undefined symbols. -no_undefined_flag="" - -# Flag to hardcode $libdir into a binary during linking. -# This must work even if $libdir does not exist -hardcode_libdir_flag_spec="" - -# Whether we need a single "-rpath" flag with a separated argument. -hardcode_libdir_separator="" - -# Set to "yes" if using DIR/libNAME$shared_ext during linking hardcodes -# DIR into the resulting binary. -hardcode_direct=no - -# Set to "yes" if using DIR/libNAME$shared_ext during linking hardcodes -# DIR into the resulting binary and the resulting library dependency is -# "absolute",i.e impossible to change by setting $shlibpath_var if the -# library is relocated. -hardcode_direct_absolute=no - -# Set to "yes" if using the -LDIR flag during linking hardcodes DIR -# into the resulting binary. -hardcode_minus_L=no - -# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR -# into the resulting binary. -hardcode_shlibpath_var=unsupported - -# Set to "yes" if building a shared library automatically hardcodes DIR -# into the library and all subsequent libraries and executables linked -# against it. -hardcode_automatic=yes - -# Set to yes if linker adds runtime paths of dependent libraries -# to runtime path list. -inherit_rpath=no - -# Whether libtool must link a program against all its dependency libraries. -link_all_deplibs=yes - -# Set to "yes" if exported symbols are required. -always_export_symbols=no - -# The commands to list exported symbols. -export_symbols_cmds="\$NM \$libobjs \$convenience | \$global_symbol_pipe | \$SED 's/.* //' | sort | uniq > \$export_symbols" - -# Symbols that should not be listed in the preloaded symbols. -exclude_expsyms="_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*" - -# Symbols that must always be exported. -include_expsyms="" - -# Commands necessary for linking programs (against libraries) with templates. -prelink_cmds="" - -# Commands necessary for finishing linking programs. -postlink_cmds="" - -# Specify filename containing input files. -file_list_spec="" - -# How to hardcode a shared library path into an executable. -hardcode_action=immediate - -# ### END LIBTOOL CONFIG - - -# ### BEGIN FUNCTIONS SHARED WITH CONFIGURE - -# func_munge_path_list VARIABLE PATH -# ----------------------------------- -# VARIABLE is name of variable containing _space_ separated list of -# directories to be munged by the contents of PATH, which is string -# having a format: -# "DIR[:DIR]:" -# string "DIR[ DIR]" will be prepended to VARIABLE -# ":DIR[:DIR]" -# string "DIR[ DIR]" will be appended to VARIABLE -# "DIRP[:DIRP]::[DIRA:]DIRA" -# string "DIRP[ DIRP]" will be prepended to VARIABLE and string -# "DIRA[ DIRA]" will be appended to VARIABLE -# "DIR[:DIR]" -# VARIABLE will be replaced by "DIR[ DIR]" -func_munge_path_list () -{ - case x$2 in - x) - ;; - *:) - eval $1=\"`$ECHO $2 | $SED 's/:/ /g'` \$$1\" - ;; - x:*) - eval $1=\"\$$1 `$ECHO $2 | $SED 's/:/ /g'`\" - ;; - *::*) - eval $1=\"\$$1\ `$ECHO $2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" - eval $1=\"`$ECHO $2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \$$1\" - ;; - *) - eval $1=\"`$ECHO $2 | $SED 's/:/ /g'`\" - ;; - esac -} - - -# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. -func_cc_basename () -{ - for cc_temp in $*""; do - case $cc_temp in - compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; - distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; - \-*) ;; - *) break;; - esac - done - func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` -} - - -# ### END FUNCTIONS SHARED WITH CONFIGURE - -#! /bin/sh -## DO NOT EDIT - This file generated from ./build-aux/ltmain.in -## by inline-source v2014-01-03.01 - -# libtool (GNU libtool) 2.4.6 -# Provide generalized library-building support services. -# Written by Gordon Matzigkeit , 1996 - -# Copyright (C) 1996-2015 Free Software Foundation, Inc. -# This is free software; see the source for copying conditions. There is NO -# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -# GNU Libtool is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# As a special exception to the GNU General Public License, -# if you distribute this file as part of a program or library that -# is built using GNU Libtool, you may include this file under the -# same distribution terms that you use for the rest of that program. -# -# GNU Libtool is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . - - -PROGRAM=libtool -PACKAGE=libtool -VERSION="2.4.6 Debian-2.4.6-9" -package_revision=2.4.6 - - -## ------ ## -## Usage. ## -## ------ ## - -# Run './libtool --help' for help with using this script from the -# command line. - - -## ------------------------------- ## -## User overridable command paths. ## -## ------------------------------- ## - -# After configure completes, it has a better idea of some of the -# shell tools we need than the defaults used by the functions shared -# with bootstrap, so set those here where they can still be over- -# ridden by the user, but otherwise take precedence. - -: ${AUTOCONF="autoconf"} -: ${AUTOMAKE="automake"} - - -## -------------------------- ## -## Source external libraries. ## -## -------------------------- ## - -# Much of our low-level functionality needs to be sourced from external -# libraries, which are installed to $pkgauxdir. - -# Set a version string for this script. -scriptversion=2015-01-20.17; # UTC - -# General shell script boiler plate, and helper functions. -# Written by Gary V. Vaughan, 2004 - -# Copyright (C) 2004-2015 Free Software Foundation, Inc. -# This is free software; see the source for copying conditions. There is NO -# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3 of the License, or -# (at your option) any later version. - -# As a special exception to the GNU General Public License, if you distribute -# this file as part of a program or library that is built using GNU Libtool, -# you may include this file under the same distribution terms that you use -# for the rest of that program. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNES FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . - -# Please report bugs or propose patches to gary@gnu.org. - - -## ------ ## -## Usage. ## -## ------ ## - -# Evaluate this file near the top of your script to gain access to -# the functions and variables defined here: -# -# . `echo "$0" | ${SED-sed} 's|[^/]*$||'`/build-aux/funclib.sh -# -# If you need to override any of the default environment variable -# settings, do that before evaluating this file. - - -## -------------------- ## -## Shell normalisation. ## -## -------------------- ## - -# Some shells need a little help to be as Bourne compatible as possible. -# Before doing anything else, make sure all that help has been provided! - -DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac -fi - -# NLS nuisances: We save the old values in case they are required later. -_G_user_locale= -_G_safe_locale= -for _G_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES -do - eval "if test set = \"\${$_G_var+set}\"; then - save_$_G_var=\$$_G_var - $_G_var=C - export $_G_var - _G_user_locale=\"$_G_var=\\\$save_\$_G_var; \$_G_user_locale\" - _G_safe_locale=\"$_G_var=C; \$_G_safe_locale\" - fi" -done - -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -# Make sure IFS has a sensible default -sp=' ' -nl=' -' -IFS="$sp $nl" - -# There are apparently some retarded systems that use ';' as a PATH separator! -if test "${PATH_SEPARATOR+set}" != set; then - PATH_SEPARATOR=: - (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { - (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || - PATH_SEPARATOR=';' - } -fi - - - -## ------------------------- ## -## Locate command utilities. ## -## ------------------------- ## - - -# func_executable_p FILE -# ---------------------- -# Check that FILE is an executable regular file. -func_executable_p () -{ - test -f "$1" && test -x "$1" -} - - -# func_path_progs PROGS_LIST CHECK_FUNC [PATH] -# -------------------------------------------- -# Search for either a program that responds to --version with output -# containing "GNU", or else returned by CHECK_FUNC otherwise, by -# trying all the directories in PATH with each of the elements of -# PROGS_LIST. -# -# CHECK_FUNC should accept the path to a candidate program, and -# set $func_check_prog_result if it truncates its output less than -# $_G_path_prog_max characters. -func_path_progs () -{ - _G_progs_list=$1 - _G_check_func=$2 - _G_PATH=${3-"$PATH"} - - _G_path_prog_max=0 - _G_path_prog_found=false - _G_save_IFS=$IFS; IFS=${PATH_SEPARATOR-:} - for _G_dir in $_G_PATH; do - IFS=$_G_save_IFS - test -z "$_G_dir" && _G_dir=. - for _G_prog_name in $_G_progs_list; do - for _exeext in '' .EXE; do - _G_path_prog=$_G_dir/$_G_prog_name$_exeext - func_executable_p "$_G_path_prog" || continue - case `"$_G_path_prog" --version 2>&1` in - *GNU*) func_path_progs_result=$_G_path_prog _G_path_prog_found=: ;; - *) $_G_check_func $_G_path_prog - func_path_progs_result=$func_check_prog_result - ;; - esac - $_G_path_prog_found && break 3 - done - done - done - IFS=$_G_save_IFS - test -z "$func_path_progs_result" && { - echo "no acceptable sed could be found in \$PATH" >&2 - exit 1 - } -} - - -# We want to be able to use the functions in this file before configure -# has figured out where the best binaries are kept, which means we have -# to search for them ourselves - except when the results are already set -# where we skip the searches. - -# Unless the user overrides by setting SED, search the path for either GNU -# sed, or the sed that truncates its output the least. -test -z "$SED" && { - _G_sed_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ - for _G_i in 1 2 3 4 5 6 7; do - _G_sed_script=$_G_sed_script$nl$_G_sed_script - done - echo "$_G_sed_script" 2>/dev/null | sed 99q >conftest.sed - _G_sed_script= - - func_check_prog_sed () - { - _G_path_prog=$1 - - _G_count=0 - printf 0123456789 >conftest.in - while : - do - cat conftest.in conftest.in >conftest.tmp - mv conftest.tmp conftest.in - cp conftest.in conftest.nl - echo '' >> conftest.nl - "$_G_path_prog" -f conftest.sed conftest.out 2>/dev/null || break - diff conftest.out conftest.nl >/dev/null 2>&1 || break - _G_count=`expr $_G_count + 1` - if test "$_G_count" -gt "$_G_path_prog_max"; then - # Best one so far, save it but keep looking for a better one - func_check_prog_result=$_G_path_prog - _G_path_prog_max=$_G_count - fi - # 10*(2^10) chars as input seems more than enough - test 10 -lt "$_G_count" && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out - } - - func_path_progs "sed gsed" func_check_prog_sed $PATH:/usr/xpg4/bin - rm -f conftest.sed - SED=$func_path_progs_result -} - - -# Unless the user overrides by setting GREP, search the path for either GNU -# grep, or the grep that truncates its output the least. -test -z "$GREP" && { - func_check_prog_grep () - { - _G_path_prog=$1 - - _G_count=0 - _G_path_prog_max=0 - printf 0123456789 >conftest.in - while : - do - cat conftest.in conftest.in >conftest.tmp - mv conftest.tmp conftest.in - cp conftest.in conftest.nl - echo 'GREP' >> conftest.nl - "$_G_path_prog" -e 'GREP$' -e '-(cannot match)-' conftest.out 2>/dev/null || break - diff conftest.out conftest.nl >/dev/null 2>&1 || break - _G_count=`expr $_G_count + 1` - if test "$_G_count" -gt "$_G_path_prog_max"; then - # Best one so far, save it but keep looking for a better one - func_check_prog_result=$_G_path_prog - _G_path_prog_max=$_G_count - fi - # 10*(2^10) chars as input seems more than enough - test 10 -lt "$_G_count" && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out - } - - func_path_progs "grep ggrep" func_check_prog_grep $PATH:/usr/xpg4/bin - GREP=$func_path_progs_result -} - - -## ------------------------------- ## -## User overridable command paths. ## -## ------------------------------- ## - -# All uppercase variable names are used for environment variables. These -# variables can be overridden by the user before calling a script that -# uses them if a suitable command of that name is not already available -# in the command search PATH. - -: ${CP="cp -f"} -: ${ECHO="printf %s\n"} -: ${EGREP="$GREP -E"} -: ${FGREP="$GREP -F"} -: ${LN_S="ln -s"} -: ${MAKE="make"} -: ${MKDIR="mkdir"} -: ${MV="mv -f"} -: ${RM="rm -f"} -: ${SHELL="${CONFIG_SHELL-/bin/sh}"} - - -## -------------------- ## -## Useful sed snippets. ## -## -------------------- ## - -sed_dirname='s|/[^/]*$||' -sed_basename='s|^.*/||' - -# Sed substitution that helps us do robust quoting. It backslashifies -# metacharacters that are still active within double-quoted strings. -sed_quote_subst='s|\([`"$\\]\)|\\\1|g' - -# Same as above, but do not quote variable references. -sed_double_quote_subst='s/\(["`\\]\)/\\\1/g' - -# Sed substitution that turns a string into a regex matching for the -# string literally. -sed_make_literal_regex='s|[].[^$\\*\/]|\\&|g' - -# Sed substitution that converts a w32 file name or path -# that contains forward slashes, into one that contains -# (escaped) backslashes. A very naive implementation. -sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' - -# Re-'\' parameter expansions in output of sed_double_quote_subst that -# were '\'-ed in input to the same. If an odd number of '\' preceded a -# '$' in input to sed_double_quote_subst, that '$' was protected from -# expansion. Since each input '\' is now two '\'s, look for any number -# of runs of four '\'s followed by two '\'s and then a '$'. '\' that '$'. -_G_bs='\\' -_G_bs2='\\\\' -_G_bs4='\\\\\\\\' -_G_dollar='\$' -sed_double_backslash="\ - s/$_G_bs4/&\\ -/g - s/^$_G_bs2$_G_dollar/$_G_bs&/ - s/\\([^$_G_bs]\\)$_G_bs2$_G_dollar/\\1$_G_bs2$_G_bs$_G_dollar/g - s/\n//g" - - -## ----------------- ## -## Global variables. ## -## ----------------- ## - -# Except for the global variables explicitly listed below, the following -# functions in the '^func_' namespace, and the '^require_' namespace -# variables initialised in the 'Resource management' section, sourcing -# this file will not pollute your global namespace with anything -# else. There's no portable way to scope variables in Bourne shell -# though, so actually running these functions will sometimes place -# results into a variable named after the function, and often use -# temporary variables in the '^_G_' namespace. If you are careful to -# avoid using those namespaces casually in your sourcing script, things -# should continue to work as you expect. And, of course, you can freely -# overwrite any of the functions or variables defined here before -# calling anything to customize them. - -EXIT_SUCCESS=0 -EXIT_FAILURE=1 -EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. -EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. - -# Allow overriding, eg assuming that you follow the convention of -# putting '$debug_cmd' at the start of all your functions, you can get -# bash to show function call trace with: -# -# debug_cmd='eval echo "${FUNCNAME[0]} $*" >&2' bash your-script-name -debug_cmd=${debug_cmd-":"} -exit_cmd=: - -# By convention, finish your script with: -# -# exit $exit_status -# -# so that you can set exit_status to non-zero if you want to indicate -# something went wrong during execution without actually bailing out at -# the point of failure. -exit_status=$EXIT_SUCCESS - -# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh -# is ksh but when the shell is invoked as "sh" and the current value of -# the _XPG environment variable is not equal to 1 (one), the special -# positional parameter $0, within a function call, is the name of the -# function. -progpath=$0 - -# The name of this program. -progname=`$ECHO "$progpath" |$SED "$sed_basename"` - -# Make sure we have an absolute progpath for reexecution: -case $progpath in - [\\/]*|[A-Za-z]:\\*) ;; - *[\\/]*) - progdir=`$ECHO "$progpath" |$SED "$sed_dirname"` - progdir=`cd "$progdir" && pwd` - progpath=$progdir/$progname - ;; - *) - _G_IFS=$IFS - IFS=${PATH_SEPARATOR-:} - for progdir in $PATH; do - IFS=$_G_IFS - test -x "$progdir/$progname" && break - done - IFS=$_G_IFS - test -n "$progdir" || progdir=`pwd` - progpath=$progdir/$progname - ;; -esac - - -## ----------------- ## -## Standard options. ## -## ----------------- ## - -# The following options affect the operation of the functions defined -# below, and should be set appropriately depending on run-time para- -# meters passed on the command line. - -opt_dry_run=false -opt_quiet=false -opt_verbose=false - -# Categories 'all' and 'none' are always available. Append any others -# you will pass as the first argument to func_warning from your own -# code. -warning_categories= - -# By default, display warnings according to 'opt_warning_types'. Set -# 'warning_func' to ':' to elide all warnings, or func_fatal_error to -# treat the next displayed warning as a fatal error. -warning_func=func_warn_and_continue - -# Set to 'all' to display all warnings, 'none' to suppress all -# warnings, or a space delimited list of some subset of -# 'warning_categories' to display only the listed warnings. -opt_warning_types=all - - -## -------------------- ## -## Resource management. ## -## -------------------- ## - -# This section contains definitions for functions that each ensure a -# particular resource (a file, or a non-empty configuration variable for -# example) is available, and if appropriate to extract default values -# from pertinent package files. Call them using their associated -# 'require_*' variable to ensure that they are executed, at most, once. -# -# It's entirely deliberate that calling these functions can set -# variables that don't obey the namespace limitations obeyed by the rest -# of this file, in order that that they be as useful as possible to -# callers. - - -# require_term_colors -# ------------------- -# Allow display of bold text on terminals that support it. -require_term_colors=func_require_term_colors -func_require_term_colors () -{ - $debug_cmd - - test -t 1 && { - # COLORTERM and USE_ANSI_COLORS environment variables take - # precedence, because most terminfo databases neglect to describe - # whether color sequences are supported. - test -n "${COLORTERM+set}" && : ${USE_ANSI_COLORS="1"} - - if test 1 = "$USE_ANSI_COLORS"; then - # Standard ANSI escape sequences - tc_reset='' - tc_bold=''; tc_standout='' - tc_red=''; tc_green='' - tc_blue=''; tc_cyan='' - else - # Otherwise trust the terminfo database after all. - test -n "`tput sgr0 2>/dev/null`" && { - tc_reset=`tput sgr0` - test -n "`tput bold 2>/dev/null`" && tc_bold=`tput bold` - tc_standout=$tc_bold - test -n "`tput smso 2>/dev/null`" && tc_standout=`tput smso` - test -n "`tput setaf 1 2>/dev/null`" && tc_red=`tput setaf 1` - test -n "`tput setaf 2 2>/dev/null`" && tc_green=`tput setaf 2` - test -n "`tput setaf 4 2>/dev/null`" && tc_blue=`tput setaf 4` - test -n "`tput setaf 5 2>/dev/null`" && tc_cyan=`tput setaf 5` - } - fi - } - - require_term_colors=: -} - - -## ----------------- ## -## Function library. ## -## ----------------- ## - -# This section contains a variety of useful functions to call in your -# scripts. Take note of the portable wrappers for features provided by -# some modern shells, which will fall back to slower equivalents on -# less featureful shells. - - -# func_append VAR VALUE -# --------------------- -# Append VALUE onto the existing contents of VAR. - - # We should try to minimise forks, especially on Windows where they are - # unreasonably slow, so skip the feature probes when bash or zsh are - # being used: - if test set = "${BASH_VERSION+set}${ZSH_VERSION+set}"; then - : ${_G_HAVE_ARITH_OP="yes"} - : ${_G_HAVE_XSI_OPS="yes"} - # The += operator was introduced in bash 3.1 - case $BASH_VERSION in - [12].* | 3.0 | 3.0*) ;; - *) - : ${_G_HAVE_PLUSEQ_OP="yes"} - ;; - esac - fi - - # _G_HAVE_PLUSEQ_OP - # Can be empty, in which case the shell is probed, "yes" if += is - # useable or anything else if it does not work. - test -z "$_G_HAVE_PLUSEQ_OP" \ - && (eval 'x=a; x+=" b"; test "a b" = "$x"') 2>/dev/null \ - && _G_HAVE_PLUSEQ_OP=yes - -if test yes = "$_G_HAVE_PLUSEQ_OP" -then - # This is an XSI compatible shell, allowing a faster implementation... - eval 'func_append () - { - $debug_cmd - - eval "$1+=\$2" - }' -else - # ...otherwise fall back to using expr, which is often a shell builtin. - func_append () - { - $debug_cmd - - eval "$1=\$$1\$2" - } -fi - - -# func_append_quoted VAR VALUE -# ---------------------------- -# Quote VALUE and append to the end of shell variable VAR, separated -# by a space. -if test yes = "$_G_HAVE_PLUSEQ_OP"; then - eval 'func_append_quoted () - { - $debug_cmd - - func_quote_for_eval "$2" - eval "$1+=\\ \$func_quote_for_eval_result" - }' -else - func_append_quoted () - { - $debug_cmd - - func_quote_for_eval "$2" - eval "$1=\$$1\\ \$func_quote_for_eval_result" - } -fi - - -# func_append_uniq VAR VALUE -# -------------------------- -# Append unique VALUE onto the existing contents of VAR, assuming -# entries are delimited by the first character of VALUE. For example: -# -# func_append_uniq options " --another-option option-argument" -# -# will only append to $options if " --another-option option-argument " -# is not already present somewhere in $options already (note spaces at -# each end implied by leading space in second argument). -func_append_uniq () -{ - $debug_cmd - - eval _G_current_value='`$ECHO $'$1'`' - _G_delim=`expr "$2" : '\(.\)'` - - case $_G_delim$_G_current_value$_G_delim in - *"$2$_G_delim"*) ;; - *) func_append "$@" ;; - esac -} - - -# func_arith TERM... -# ------------------ -# Set func_arith_result to the result of evaluating TERMs. - test -z "$_G_HAVE_ARITH_OP" \ - && (eval 'test 2 = $(( 1 + 1 ))') 2>/dev/null \ - && _G_HAVE_ARITH_OP=yes - -if test yes = "$_G_HAVE_ARITH_OP"; then - eval 'func_arith () - { - $debug_cmd - - func_arith_result=$(( $* )) - }' -else - func_arith () - { - $debug_cmd - - func_arith_result=`expr "$@"` - } -fi - - -# func_basename FILE -# ------------------ -# Set func_basename_result to FILE with everything up to and including -# the last / stripped. -if test yes = "$_G_HAVE_XSI_OPS"; then - # If this shell supports suffix pattern removal, then use it to avoid - # forking. Hide the definitions single quotes in case the shell chokes - # on unsupported syntax... - _b='func_basename_result=${1##*/}' - _d='case $1 in - */*) func_dirname_result=${1%/*}$2 ;; - * ) func_dirname_result=$3 ;; - esac' - -else - # ...otherwise fall back to using sed. - _b='func_basename_result=`$ECHO "$1" |$SED "$sed_basename"`' - _d='func_dirname_result=`$ECHO "$1" |$SED "$sed_dirname"` - if test "X$func_dirname_result" = "X$1"; then - func_dirname_result=$3 - else - func_append func_dirname_result "$2" - fi' -fi - -eval 'func_basename () -{ - $debug_cmd - - '"$_b"' -}' - - -# func_dirname FILE APPEND NONDIR_REPLACEMENT -# ------------------------------------------- -# Compute the dirname of FILE. If nonempty, add APPEND to the result, -# otherwise set result to NONDIR_REPLACEMENT. -eval 'func_dirname () -{ - $debug_cmd - - '"$_d"' -}' - - -# func_dirname_and_basename FILE APPEND NONDIR_REPLACEMENT -# -------------------------------------------------------- -# Perform func_basename and func_dirname in a single function -# call: -# dirname: Compute the dirname of FILE. If nonempty, -# add APPEND to the result, otherwise set result -# to NONDIR_REPLACEMENT. -# value returned in "$func_dirname_result" -# basename: Compute filename of FILE. -# value retuned in "$func_basename_result" -# For efficiency, we do not delegate to the functions above but instead -# duplicate the functionality here. -eval 'func_dirname_and_basename () -{ - $debug_cmd - - '"$_b"' - '"$_d"' -}' - - -# func_echo ARG... -# ---------------- -# Echo program name prefixed message. -func_echo () -{ - $debug_cmd - - _G_message=$* - - func_echo_IFS=$IFS - IFS=$nl - for _G_line in $_G_message; do - IFS=$func_echo_IFS - $ECHO "$progname: $_G_line" - done - IFS=$func_echo_IFS -} - - -# func_echo_all ARG... -# -------------------- -# Invoke $ECHO with all args, space-separated. -func_echo_all () -{ - $ECHO "$*" -} - - -# func_echo_infix_1 INFIX ARG... -# ------------------------------ -# Echo program name, followed by INFIX on the first line, with any -# additional lines not showing INFIX. -func_echo_infix_1 () -{ - $debug_cmd - - $require_term_colors - - _G_infix=$1; shift - _G_indent=$_G_infix - _G_prefix="$progname: $_G_infix: " - _G_message=$* - - # Strip color escape sequences before counting printable length - for _G_tc in "$tc_reset" "$tc_bold" "$tc_standout" "$tc_red" "$tc_green" "$tc_blue" "$tc_cyan" - do - test -n "$_G_tc" && { - _G_esc_tc=`$ECHO "$_G_tc" | $SED "$sed_make_literal_regex"` - _G_indent=`$ECHO "$_G_indent" | $SED "s|$_G_esc_tc||g"` - } - done - _G_indent="$progname: "`echo "$_G_indent" | $SED 's|.| |g'`" " ## exclude from sc_prohibit_nested_quotes - - func_echo_infix_1_IFS=$IFS - IFS=$nl - for _G_line in $_G_message; do - IFS=$func_echo_infix_1_IFS - $ECHO "$_G_prefix$tc_bold$_G_line$tc_reset" >&2 - _G_prefix=$_G_indent - done - IFS=$func_echo_infix_1_IFS -} - - -# func_error ARG... -# ----------------- -# Echo program name prefixed message to standard error. -func_error () -{ - $debug_cmd - - $require_term_colors - - func_echo_infix_1 " $tc_standout${tc_red}error$tc_reset" "$*" >&2 -} - - -# func_fatal_error ARG... -# ----------------------- -# Echo program name prefixed message to standard error, and exit. -func_fatal_error () -{ - $debug_cmd - - func_error "$*" - exit $EXIT_FAILURE -} - - -# func_grep EXPRESSION FILENAME -# ----------------------------- -# Check whether EXPRESSION matches any line of FILENAME, without output. -func_grep () -{ - $debug_cmd - - $GREP "$1" "$2" >/dev/null 2>&1 -} - - -# func_len STRING -# --------------- -# Set func_len_result to the length of STRING. STRING may not -# start with a hyphen. - test -z "$_G_HAVE_XSI_OPS" \ - && (eval 'x=a/b/c; - test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ - && _G_HAVE_XSI_OPS=yes - -if test yes = "$_G_HAVE_XSI_OPS"; then - eval 'func_len () - { - $debug_cmd - - func_len_result=${#1} - }' -else - func_len () - { - $debug_cmd - - func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len` - } -fi - - -# func_mkdir_p DIRECTORY-PATH -# --------------------------- -# Make sure the entire path to DIRECTORY-PATH is available. -func_mkdir_p () -{ - $debug_cmd - - _G_directory_path=$1 - _G_dir_list= - - if test -n "$_G_directory_path" && test : != "$opt_dry_run"; then - - # Protect directory names starting with '-' - case $_G_directory_path in - -*) _G_directory_path=./$_G_directory_path ;; - esac - - # While some portion of DIR does not yet exist... - while test ! -d "$_G_directory_path"; do - # ...make a list in topmost first order. Use a colon delimited - # list incase some portion of path contains whitespace. - _G_dir_list=$_G_directory_path:$_G_dir_list - - # If the last portion added has no slash in it, the list is done - case $_G_directory_path in */*) ;; *) break ;; esac - - # ...otherwise throw away the child directory and loop - _G_directory_path=`$ECHO "$_G_directory_path" | $SED -e "$sed_dirname"` - done - _G_dir_list=`$ECHO "$_G_dir_list" | $SED 's|:*$||'` - - func_mkdir_p_IFS=$IFS; IFS=: - for _G_dir in $_G_dir_list; do - IFS=$func_mkdir_p_IFS - # mkdir can fail with a 'File exist' error if two processes - # try to create one of the directories concurrently. Don't - # stop in that case! - $MKDIR "$_G_dir" 2>/dev/null || : - done - IFS=$func_mkdir_p_IFS - - # Bail out if we (or some other process) failed to create a directory. - test -d "$_G_directory_path" || \ - func_fatal_error "Failed to create '$1'" - fi -} - - -# func_mktempdir [BASENAME] -# ------------------------- -# Make a temporary directory that won't clash with other running -# libtool processes, and avoids race conditions if possible. If -# given, BASENAME is the basename for that directory. -func_mktempdir () -{ - $debug_cmd - - _G_template=${TMPDIR-/tmp}/${1-$progname} - - if test : = "$opt_dry_run"; then - # Return a directory name, but don't create it in dry-run mode - _G_tmpdir=$_G_template-$$ - else - - # If mktemp works, use that first and foremost - _G_tmpdir=`mktemp -d "$_G_template-XXXXXXXX" 2>/dev/null` - - if test ! -d "$_G_tmpdir"; then - # Failing that, at least try and use $RANDOM to avoid a race - _G_tmpdir=$_G_template-${RANDOM-0}$$ - - func_mktempdir_umask=`umask` - umask 0077 - $MKDIR "$_G_tmpdir" - umask $func_mktempdir_umask - fi - - # If we're not in dry-run mode, bomb out on failure - test -d "$_G_tmpdir" || \ - func_fatal_error "cannot create temporary directory '$_G_tmpdir'" - fi - - $ECHO "$_G_tmpdir" -} - - -# func_normal_abspath PATH -# ------------------------ -# Remove doubled-up and trailing slashes, "." path components, -# and cancel out any ".." path components in PATH after making -# it an absolute path. -func_normal_abspath () -{ - $debug_cmd - - # These SED scripts presuppose an absolute path with a trailing slash. - _G_pathcar='s|^/\([^/]*\).*$|\1|' - _G_pathcdr='s|^/[^/]*||' - _G_removedotparts=':dotsl - s|/\./|/|g - t dotsl - s|/\.$|/|' - _G_collapseslashes='s|/\{1,\}|/|g' - _G_finalslash='s|/*$|/|' - - # Start from root dir and reassemble the path. - func_normal_abspath_result= - func_normal_abspath_tpath=$1 - func_normal_abspath_altnamespace= - case $func_normal_abspath_tpath in - "") - # Empty path, that just means $cwd. - func_stripname '' '/' "`pwd`" - func_normal_abspath_result=$func_stripname_result - return - ;; - # The next three entries are used to spot a run of precisely - # two leading slashes without using negated character classes; - # we take advantage of case's first-match behaviour. - ///*) - # Unusual form of absolute path, do nothing. - ;; - //*) - # Not necessarily an ordinary path; POSIX reserves leading '//' - # and for example Cygwin uses it to access remote file shares - # over CIFS/SMB, so we conserve a leading double slash if found. - func_normal_abspath_altnamespace=/ - ;; - /*) - # Absolute path, do nothing. - ;; - *) - # Relative path, prepend $cwd. - func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath - ;; - esac - - # Cancel out all the simple stuff to save iterations. We also want - # the path to end with a slash for ease of parsing, so make sure - # there is one (and only one) here. - func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ - -e "$_G_removedotparts" -e "$_G_collapseslashes" -e "$_G_finalslash"` - while :; do - # Processed it all yet? - if test / = "$func_normal_abspath_tpath"; then - # If we ascended to the root using ".." the result may be empty now. - if test -z "$func_normal_abspath_result"; then - func_normal_abspath_result=/ - fi - break - fi - func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ - -e "$_G_pathcar"` - func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ - -e "$_G_pathcdr"` - # Figure out what to do with it - case $func_normal_abspath_tcomponent in - "") - # Trailing empty path component, ignore it. - ;; - ..) - # Parent dir; strip last assembled component from result. - func_dirname "$func_normal_abspath_result" - func_normal_abspath_result=$func_dirname_result - ;; - *) - # Actual path component, append it. - func_append func_normal_abspath_result "/$func_normal_abspath_tcomponent" - ;; - esac - done - # Restore leading double-slash if one was found on entry. - func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result -} - - -# func_notquiet ARG... -# -------------------- -# Echo program name prefixed message only when not in quiet mode. -func_notquiet () -{ - $debug_cmd - - $opt_quiet || func_echo ${1+"$@"} - - # A bug in bash halts the script if the last line of a function - # fails when set -e is in force, so we need another command to - # work around that: - : -} - - -# func_relative_path SRCDIR DSTDIR -# -------------------------------- -# Set func_relative_path_result to the relative path from SRCDIR to DSTDIR. -func_relative_path () -{ - $debug_cmd - - func_relative_path_result= - func_normal_abspath "$1" - func_relative_path_tlibdir=$func_normal_abspath_result - func_normal_abspath "$2" - func_relative_path_tbindir=$func_normal_abspath_result - - # Ascend the tree starting from libdir - while :; do - # check if we have found a prefix of bindir - case $func_relative_path_tbindir in - $func_relative_path_tlibdir) - # found an exact match - func_relative_path_tcancelled= - break - ;; - $func_relative_path_tlibdir*) - # found a matching prefix - func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" - func_relative_path_tcancelled=$func_stripname_result - if test -z "$func_relative_path_result"; then - func_relative_path_result=. - fi - break - ;; - *) - func_dirname $func_relative_path_tlibdir - func_relative_path_tlibdir=$func_dirname_result - if test -z "$func_relative_path_tlibdir"; then - # Have to descend all the way to the root! - func_relative_path_result=../$func_relative_path_result - func_relative_path_tcancelled=$func_relative_path_tbindir - break - fi - func_relative_path_result=../$func_relative_path_result - ;; - esac - done - - # Now calculate path; take care to avoid doubling-up slashes. - func_stripname '' '/' "$func_relative_path_result" - func_relative_path_result=$func_stripname_result - func_stripname '/' '/' "$func_relative_path_tcancelled" - if test -n "$func_stripname_result"; then - func_append func_relative_path_result "/$func_stripname_result" - fi - - # Normalisation. If bindir is libdir, return '.' else relative path. - if test -n "$func_relative_path_result"; then - func_stripname './' '' "$func_relative_path_result" - func_relative_path_result=$func_stripname_result - fi - - test -n "$func_relative_path_result" || func_relative_path_result=. - - : -} - - -# func_quote_for_eval ARG... -# -------------------------- -# Aesthetically quote ARGs to be evaled later. -# This function returns two values: -# i) func_quote_for_eval_result -# double-quoted, suitable for a subsequent eval -# ii) func_quote_for_eval_unquoted_result -# has all characters that are still active within double -# quotes backslashified. -func_quote_for_eval () -{ - $debug_cmd - - func_quote_for_eval_unquoted_result= - func_quote_for_eval_result= - while test 0 -lt $#; do - case $1 in - *[\\\`\"\$]*) - _G_unquoted_arg=`printf '%s\n' "$1" |$SED "$sed_quote_subst"` ;; - *) - _G_unquoted_arg=$1 ;; - esac - if test -n "$func_quote_for_eval_unquoted_result"; then - func_append func_quote_for_eval_unquoted_result " $_G_unquoted_arg" - else - func_append func_quote_for_eval_unquoted_result "$_G_unquoted_arg" - fi - - case $_G_unquoted_arg in - # Double-quote args containing shell metacharacters to delay - # word splitting, command substitution and variable expansion - # for a subsequent eval. - # Many Bourne shells cannot handle close brackets correctly - # in scan sets, so we specify it separately. - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - _G_quoted_arg=\"$_G_unquoted_arg\" - ;; - *) - _G_quoted_arg=$_G_unquoted_arg - ;; - esac - - if test -n "$func_quote_for_eval_result"; then - func_append func_quote_for_eval_result " $_G_quoted_arg" - else - func_append func_quote_for_eval_result "$_G_quoted_arg" - fi - shift - done -} - - -# func_quote_for_expand ARG -# ------------------------- -# Aesthetically quote ARG to be evaled later; same as above, -# but do not quote variable references. -func_quote_for_expand () -{ - $debug_cmd - - case $1 in - *[\\\`\"]*) - _G_arg=`$ECHO "$1" | $SED \ - -e "$sed_double_quote_subst" -e "$sed_double_backslash"` ;; - *) - _G_arg=$1 ;; - esac - - case $_G_arg in - # Double-quote args containing shell metacharacters to delay - # word splitting and command substitution for a subsequent eval. - # Many Bourne shells cannot handle close brackets correctly - # in scan sets, so we specify it separately. - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - _G_arg=\"$_G_arg\" - ;; - esac - - func_quote_for_expand_result=$_G_arg -} - - -# func_stripname PREFIX SUFFIX NAME -# --------------------------------- -# strip PREFIX and SUFFIX from NAME, and store in func_stripname_result. -# PREFIX and SUFFIX must not contain globbing or regex special -# characters, hashes, percent signs, but SUFFIX may contain a leading -# dot (in which case that matches only a dot). -if test yes = "$_G_HAVE_XSI_OPS"; then - eval 'func_stripname () - { - $debug_cmd - - # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are - # positional parameters, so assign one to ordinary variable first. - func_stripname_result=$3 - func_stripname_result=${func_stripname_result#"$1"} - func_stripname_result=${func_stripname_result%"$2"} - }' -else - func_stripname () - { - $debug_cmd - - case $2 in - .*) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%\\\\$2\$%%"`;; - *) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%$2\$%%"`;; - esac - } -fi - - -# func_show_eval CMD [FAIL_EXP] -# ----------------------------- -# Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is -# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP -# is given, then evaluate it. -func_show_eval () -{ - $debug_cmd - - _G_cmd=$1 - _G_fail_exp=${2-':'} - - func_quote_for_expand "$_G_cmd" - eval "func_notquiet $func_quote_for_expand_result" - - $opt_dry_run || { - eval "$_G_cmd" - _G_status=$? - if test 0 -ne "$_G_status"; then - eval "(exit $_G_status); $_G_fail_exp" - fi - } -} - - -# func_show_eval_locale CMD [FAIL_EXP] -# ------------------------------------ -# Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is -# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP -# is given, then evaluate it. Use the saved locale for evaluation. -func_show_eval_locale () -{ - $debug_cmd - - _G_cmd=$1 - _G_fail_exp=${2-':'} - - $opt_quiet || { - func_quote_for_expand "$_G_cmd" - eval "func_echo $func_quote_for_expand_result" - } - - $opt_dry_run || { - eval "$_G_user_locale - $_G_cmd" - _G_status=$? - eval "$_G_safe_locale" - if test 0 -ne "$_G_status"; then - eval "(exit $_G_status); $_G_fail_exp" - fi - } -} - - -# func_tr_sh -# ---------- -# Turn $1 into a string suitable for a shell variable name. -# Result is stored in $func_tr_sh_result. All characters -# not in the set a-zA-Z0-9_ are replaced with '_'. Further, -# if $1 begins with a digit, a '_' is prepended as well. -func_tr_sh () -{ - $debug_cmd - - case $1 in - [0-9]* | *[!a-zA-Z0-9_]*) - func_tr_sh_result=`$ECHO "$1" | $SED -e 's/^\([0-9]\)/_\1/' -e 's/[^a-zA-Z0-9_]/_/g'` - ;; - * ) - func_tr_sh_result=$1 - ;; - esac -} - - -# func_verbose ARG... -# ------------------- -# Echo program name prefixed message in verbose mode only. -func_verbose () -{ - $debug_cmd - - $opt_verbose && func_echo "$*" - - : -} - - -# func_warn_and_continue ARG... -# ----------------------------- -# Echo program name prefixed warning message to standard error. -func_warn_and_continue () -{ - $debug_cmd - - $require_term_colors - - func_echo_infix_1 "${tc_red}warning$tc_reset" "$*" >&2 -} - - -# func_warning CATEGORY ARG... -# ---------------------------- -# Echo program name prefixed warning message to standard error. Warning -# messages can be filtered according to CATEGORY, where this function -# elides messages where CATEGORY is not listed in the global variable -# 'opt_warning_types'. -func_warning () -{ - $debug_cmd - - # CATEGORY must be in the warning_categories list! - case " $warning_categories " in - *" $1 "*) ;; - *) func_internal_error "invalid warning category '$1'" ;; - esac - - _G_category=$1 - shift - - case " $opt_warning_types " in - *" $_G_category "*) $warning_func ${1+"$@"} ;; - esac -} - - -# func_sort_ver VER1 VER2 -# ----------------------- -# 'sort -V' is not generally available. -# Note this deviates from the version comparison in automake -# in that it treats 1.5 < 1.5.0, and treats 1.4.4a < 1.4-p3a -# but this should suffice as we won't be specifying old -# version formats or redundant trailing .0 in bootstrap.conf. -# If we did want full compatibility then we should probably -# use m4_version_compare from autoconf. -func_sort_ver () -{ - $debug_cmd - - printf '%s\n%s\n' "$1" "$2" \ - | sort -t. -k 1,1n -k 2,2n -k 3,3n -k 4,4n -k 5,5n -k 6,6n -k 7,7n -k 8,8n -k 9,9n -} - -# func_lt_ver PREV CURR -# --------------------- -# Return true if PREV and CURR are in the correct order according to -# func_sort_ver, otherwise false. Use it like this: -# -# func_lt_ver "$prev_ver" "$proposed_ver" || func_fatal_error "..." -func_lt_ver () -{ - $debug_cmd - - test "x$1" = x`func_sort_ver "$1" "$2" | $SED 1q` -} - - -# Local variables: -# mode: shell-script -# sh-indentation: 2 -# eval: (add-hook 'before-save-hook 'time-stamp) -# time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC" -# time-stamp-time-zone: "UTC" -# End: -#! /bin/sh - -# Set a version string for this script. -scriptversion=2015-10-07.11; # UTC - -# A portable, pluggable option parser for Bourne shell. -# Written by Gary V. Vaughan, 2010 - -# Copyright (C) 2010-2015 Free Software Foundation, Inc. -# This is free software; see the source for copying conditions. There is NO -# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . - -# Please report bugs or propose patches to gary@gnu.org. - - -## ------ ## -## Usage. ## -## ------ ## - -# This file is a library for parsing options in your shell scripts along -# with assorted other useful supporting features that you can make use -# of too. -# -# For the simplest scripts you might need only: -# -# #!/bin/sh -# . relative/path/to/funclib.sh -# . relative/path/to/options-parser -# scriptversion=1.0 -# func_options ${1+"$@"} -# eval set dummy "$func_options_result"; shift -# ...rest of your script... -# -# In order for the '--version' option to work, you will need to have a -# suitably formatted comment like the one at the top of this file -# starting with '# Written by ' and ending with '# warranty; '. -# -# For '-h' and '--help' to work, you will also need a one line -# description of your script's purpose in a comment directly above the -# '# Written by ' line, like the one at the top of this file. -# -# The default options also support '--debug', which will turn on shell -# execution tracing (see the comment above debug_cmd below for another -# use), and '--verbose' and the func_verbose function to allow your script -# to display verbose messages only when your user has specified -# '--verbose'. -# -# After sourcing this file, you can plug processing for additional -# options by amending the variables from the 'Configuration' section -# below, and following the instructions in the 'Option parsing' -# section further down. - -## -------------- ## -## Configuration. ## -## -------------- ## - -# You should override these variables in your script after sourcing this -# file so that they reflect the customisations you have added to the -# option parser. - -# The usage line for option parsing errors and the start of '-h' and -# '--help' output messages. You can embed shell variables for delayed -# expansion at the time the message is displayed, but you will need to -# quote other shell meta-characters carefully to prevent them being -# expanded when the contents are evaled. -usage='$progpath [OPTION]...' - -# Short help message in response to '-h' and '--help'. Add to this or -# override it after sourcing this library to reflect the full set of -# options your script accepts. -usage_message="\ - --debug enable verbose shell tracing - -W, --warnings=CATEGORY - report the warnings falling in CATEGORY [all] - -v, --verbose verbosely report processing - --version print version information and exit - -h, --help print short or long help message and exit -" - -# Additional text appended to 'usage_message' in response to '--help'. -long_help_message=" -Warning categories include: - 'all' show all warnings - 'none' turn off all the warnings - 'error' warnings are treated as fatal errors" - -# Help message printed before fatal option parsing errors. -fatal_help="Try '\$progname --help' for more information." - - - -## ------------------------- ## -## Hook function management. ## -## ------------------------- ## - -# This section contains functions for adding, removing, and running hooks -# to the main code. A hook is just a named list of of function, that can -# be run in order later on. - -# func_hookable FUNC_NAME -# ----------------------- -# Declare that FUNC_NAME will run hooks added with -# 'func_add_hook FUNC_NAME ...'. -func_hookable () -{ - $debug_cmd - - func_append hookable_fns " $1" -} - - -# func_add_hook FUNC_NAME HOOK_FUNC -# --------------------------------- -# Request that FUNC_NAME call HOOK_FUNC before it returns. FUNC_NAME must -# first have been declared "hookable" by a call to 'func_hookable'. -func_add_hook () -{ - $debug_cmd - - case " $hookable_fns " in - *" $1 "*) ;; - *) func_fatal_error "'$1' does not accept hook functions." ;; - esac - - eval func_append ${1}_hooks '" $2"' -} - - -# func_remove_hook FUNC_NAME HOOK_FUNC -# ------------------------------------ -# Remove HOOK_FUNC from the list of functions called by FUNC_NAME. -func_remove_hook () -{ - $debug_cmd - - eval ${1}_hooks='`$ECHO "\$'$1'_hooks" |$SED "s| '$2'||"`' -} - - -# func_run_hooks FUNC_NAME [ARG]... -# --------------------------------- -# Run all hook functions registered to FUNC_NAME. -# It is assumed that the list of hook functions contains nothing more -# than a whitespace-delimited list of legal shell function names, and -# no effort is wasted trying to catch shell meta-characters or preserve -# whitespace. -func_run_hooks () -{ - $debug_cmd - - _G_rc_run_hooks=false - - case " $hookable_fns " in - *" $1 "*) ;; - *) func_fatal_error "'$1' does not support hook funcions.n" ;; - esac - - eval _G_hook_fns=\$$1_hooks; shift - - for _G_hook in $_G_hook_fns; do - if eval $_G_hook '"$@"'; then - # store returned options list back into positional - # parameters for next 'cmd' execution. - eval _G_hook_result=\$${_G_hook}_result - eval set dummy "$_G_hook_result"; shift - _G_rc_run_hooks=: - fi - done - - $_G_rc_run_hooks && func_run_hooks_result=$_G_hook_result -} - - - -## --------------- ## -## Option parsing. ## -## --------------- ## - -# In order to add your own option parsing hooks, you must accept the -# full positional parameter list in your hook function, you may remove/edit -# any options that you action, and then pass back the remaining unprocessed -# options in '_result', escaped suitably for -# 'eval'. In this case you also must return $EXIT_SUCCESS to let the -# hook's caller know that it should pay attention to -# '_result'. Returning $EXIT_FAILURE signalizes that -# arguments are left untouched by the hook and therefore caller will ignore the -# result variable. -# -# Like this: -# -# my_options_prep () -# { -# $debug_cmd -# -# # Extend the existing usage message. -# usage_message=$usage_message' -# -s, --silent don'\''t print informational messages -# ' -# # No change in '$@' (ignored completely by this hook). There is -# # no need to do the equivalent (but slower) action: -# # func_quote_for_eval ${1+"$@"} -# # my_options_prep_result=$func_quote_for_eval_result -# false -# } -# func_add_hook func_options_prep my_options_prep -# -# -# my_silent_option () -# { -# $debug_cmd -# -# args_changed=false -# -# # Note that for efficiency, we parse as many options as we can -# # recognise in a loop before passing the remainder back to the -# # caller on the first unrecognised argument we encounter. -# while test $# -gt 0; do -# opt=$1; shift -# case $opt in -# --silent|-s) opt_silent=: -# args_changed=: -# ;; -# # Separate non-argument short options: -# -s*) func_split_short_opt "$_G_opt" -# set dummy "$func_split_short_opt_name" \ -# "-$func_split_short_opt_arg" ${1+"$@"} -# shift -# args_changed=: -# ;; -# *) # Make sure the first unrecognised option "$_G_opt" -# # is added back to "$@", we could need that later -# # if $args_changed is true. -# set dummy "$_G_opt" ${1+"$@"}; shift; break ;; -# esac -# done -# -# if $args_changed; then -# func_quote_for_eval ${1+"$@"} -# my_silent_option_result=$func_quote_for_eval_result -# fi -# -# $args_changed -# } -# func_add_hook func_parse_options my_silent_option -# -# -# my_option_validation () -# { -# $debug_cmd -# -# $opt_silent && $opt_verbose && func_fatal_help "\ -# '--silent' and '--verbose' options are mutually exclusive." -# -# false -# } -# func_add_hook func_validate_options my_option_validation -# -# You'll also need to manually amend $usage_message to reflect the extra -# options you parse. It's preferable to append if you can, so that -# multiple option parsing hooks can be added safely. - - -# func_options_finish [ARG]... -# ---------------------------- -# Finishing the option parse loop (call 'func_options' hooks ATM). -func_options_finish () -{ - $debug_cmd - - _G_func_options_finish_exit=false - if func_run_hooks func_options ${1+"$@"}; then - func_options_finish_result=$func_run_hooks_result - _G_func_options_finish_exit=: - fi - - $_G_func_options_finish_exit -} - - -# func_options [ARG]... -# --------------------- -# All the functions called inside func_options are hookable. See the -# individual implementations for details. -func_hookable func_options -func_options () -{ - $debug_cmd - - _G_rc_options=false - - for my_func in options_prep parse_options validate_options options_finish - do - if eval func_$my_func '${1+"$@"}'; then - eval _G_res_var='$'"func_${my_func}_result" - eval set dummy "$_G_res_var" ; shift - _G_rc_options=: - fi - done - - # Save modified positional parameters for caller. As a top-level - # options-parser function we always need to set the 'func_options_result' - # variable (regardless the $_G_rc_options value). - if $_G_rc_options; then - func_options_result=$_G_res_var - else - func_quote_for_eval ${1+"$@"} - func_options_result=$func_quote_for_eval_result - fi - - $_G_rc_options -} - - -# func_options_prep [ARG]... -# -------------------------- -# All initialisations required before starting the option parse loop. -# Note that when calling hook functions, we pass through the list of -# positional parameters. If a hook function modifies that list, and -# needs to propagate that back to rest of this script, then the complete -# modified list must be put in 'func_run_hooks_result' before -# returning $EXIT_SUCCESS (otherwise $EXIT_FAILURE is returned). -func_hookable func_options_prep -func_options_prep () -{ - $debug_cmd - - # Option defaults: - opt_verbose=false - opt_warning_types= - - _G_rc_options_prep=false - if func_run_hooks func_options_prep ${1+"$@"}; then - _G_rc_options_prep=: - # save modified positional parameters for caller - func_options_prep_result=$func_run_hooks_result - fi - - $_G_rc_options_prep -} - - -# func_parse_options [ARG]... -# --------------------------- -# The main option parsing loop. -func_hookable func_parse_options -func_parse_options () -{ - $debug_cmd - - func_parse_options_result= - - _G_rc_parse_options=false - # this just eases exit handling - while test $# -gt 0; do - # Defer to hook functions for initial option parsing, so they - # get priority in the event of reusing an option name. - if func_run_hooks func_parse_options ${1+"$@"}; then - eval set dummy "$func_run_hooks_result"; shift - _G_rc_parse_options=: - fi - - # Break out of the loop if we already parsed every option. - test $# -gt 0 || break - - _G_match_parse_options=: - _G_opt=$1 - shift - case $_G_opt in - --debug|-x) debug_cmd='set -x' - func_echo "enabling shell trace mode" - $debug_cmd - ;; - - --no-warnings|--no-warning|--no-warn) - set dummy --warnings none ${1+"$@"} - shift - ;; - - --warnings|--warning|-W) - if test $# = 0 && func_missing_arg $_G_opt; then - _G_rc_parse_options=: - break - fi - case " $warning_categories $1" in - *" $1 "*) - # trailing space prevents matching last $1 above - func_append_uniq opt_warning_types " $1" - ;; - *all) - opt_warning_types=$warning_categories - ;; - *none) - opt_warning_types=none - warning_func=: - ;; - *error) - opt_warning_types=$warning_categories - warning_func=func_fatal_error - ;; - *) - func_fatal_error \ - "unsupported warning category: '$1'" - ;; - esac - shift - ;; - - --verbose|-v) opt_verbose=: ;; - --version) func_version ;; - -\?|-h) func_usage ;; - --help) func_help ;; - - # Separate optargs to long options (plugins may need this): - --*=*) func_split_equals "$_G_opt" - set dummy "$func_split_equals_lhs" \ - "$func_split_equals_rhs" ${1+"$@"} - shift - ;; - - # Separate optargs to short options: - -W*) - func_split_short_opt "$_G_opt" - set dummy "$func_split_short_opt_name" \ - "$func_split_short_opt_arg" ${1+"$@"} - shift - ;; - - # Separate non-argument short options: - -\?*|-h*|-v*|-x*) - func_split_short_opt "$_G_opt" - set dummy "$func_split_short_opt_name" \ - "-$func_split_short_opt_arg" ${1+"$@"} - shift - ;; - - --) _G_rc_parse_options=: ; break ;; - -*) func_fatal_help "unrecognised option: '$_G_opt'" ;; - *) set dummy "$_G_opt" ${1+"$@"}; shift - _G_match_parse_options=false - break - ;; - esac - - $_G_match_parse_options && _G_rc_parse_options=: - done - - - if $_G_rc_parse_options; then - # save modified positional parameters for caller - func_quote_for_eval ${1+"$@"} - func_parse_options_result=$func_quote_for_eval_result - fi - - $_G_rc_parse_options -} - - -# func_validate_options [ARG]... -# ------------------------------ -# Perform any sanity checks on option settings and/or unconsumed -# arguments. -func_hookable func_validate_options -func_validate_options () -{ - $debug_cmd - - _G_rc_validate_options=false - - # Display all warnings if -W was not given. - test -n "$opt_warning_types" || opt_warning_types=" $warning_categories" - - if func_run_hooks func_validate_options ${1+"$@"}; then - # save modified positional parameters for caller - func_validate_options_result=$func_run_hooks_result - _G_rc_validate_options=: - fi - - # Bail if the options were screwed! - $exit_cmd $EXIT_FAILURE - - $_G_rc_validate_options -} - - - -## ----------------- ## -## Helper functions. ## -## ----------------- ## - -# This section contains the helper functions used by the rest of the -# hookable option parser framework in ascii-betical order. - - -# func_fatal_help ARG... -# ---------------------- -# Echo program name prefixed message to standard error, followed by -# a help hint, and exit. -func_fatal_help () -{ - $debug_cmd - - eval \$ECHO \""Usage: $usage"\" - eval \$ECHO \""$fatal_help"\" - func_error ${1+"$@"} - exit $EXIT_FAILURE -} - - -# func_help -# --------- -# Echo long help message to standard output and exit. -func_help () -{ - $debug_cmd - - func_usage_message - $ECHO "$long_help_message" - exit 0 -} - - -# func_missing_arg ARGNAME -# ------------------------ -# Echo program name prefixed message to standard error and set global -# exit_cmd. -func_missing_arg () -{ - $debug_cmd - - func_error "Missing argument for '$1'." - exit_cmd=exit -} - - -# func_split_equals STRING -# ------------------------ -# Set func_split_equals_lhs and func_split_equals_rhs shell variables after -# splitting STRING at the '=' sign. -test -z "$_G_HAVE_XSI_OPS" \ - && (eval 'x=a/b/c; - test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ - && _G_HAVE_XSI_OPS=yes - -if test yes = "$_G_HAVE_XSI_OPS" -then - # This is an XSI compatible shell, allowing a faster implementation... - eval 'func_split_equals () - { - $debug_cmd - - func_split_equals_lhs=${1%%=*} - func_split_equals_rhs=${1#*=} - test "x$func_split_equals_lhs" = "x$1" \ - && func_split_equals_rhs= - }' -else - # ...otherwise fall back to using expr, which is often a shell builtin. - func_split_equals () - { - $debug_cmd - - func_split_equals_lhs=`expr "x$1" : 'x\([^=]*\)'` - func_split_equals_rhs= - test "x$func_split_equals_lhs" = "x$1" \ - || func_split_equals_rhs=`expr "x$1" : 'x[^=]*=\(.*\)$'` - } -fi #func_split_equals - - -# func_split_short_opt SHORTOPT -# ----------------------------- -# Set func_split_short_opt_name and func_split_short_opt_arg shell -# variables after splitting SHORTOPT after the 2nd character. -if test yes = "$_G_HAVE_XSI_OPS" -then - # This is an XSI compatible shell, allowing a faster implementation... - eval 'func_split_short_opt () - { - $debug_cmd - - func_split_short_opt_arg=${1#??} - func_split_short_opt_name=${1%"$func_split_short_opt_arg"} - }' -else - # ...otherwise fall back to using expr, which is often a shell builtin. - func_split_short_opt () - { - $debug_cmd - - func_split_short_opt_name=`expr "x$1" : 'x-\(.\)'` - func_split_short_opt_arg=`expr "x$1" : 'x-.\(.*\)$'` - } -fi #func_split_short_opt - - -# func_usage -# ---------- -# Echo short help message to standard output and exit. -func_usage () -{ - $debug_cmd - - func_usage_message - $ECHO "Run '$progname --help |${PAGER-more}' for full usage" - exit 0 -} - - -# func_usage_message -# ------------------ -# Echo short help message to standard output. -func_usage_message () -{ - $debug_cmd - - eval \$ECHO \""Usage: $usage"\" - echo - $SED -n 's|^# || - /^Written by/{ - x;p;x - } - h - /^Written by/q' < "$progpath" - echo - eval \$ECHO \""$usage_message"\" -} - - -# func_version -# ------------ -# Echo version message to standard output and exit. -func_version () -{ - $debug_cmd - - printf '%s\n' "$progname $scriptversion" - $SED -n ' - /(C)/!b go - :more - /\./!{ - N - s|\n# | | - b more - } - :go - /^# Written by /,/# warranty; / { - s|^# || - s|^# *$|| - s|\((C)\)[ 0-9,-]*[ ,-]\([1-9][0-9]* \)|\1 \2| - p - } - /^# Written by / { - s|^# || - p - } - /^warranty; /q' < "$progpath" - - exit $? -} - - -# Local variables: -# mode: shell-script -# sh-indentation: 2 -# eval: (add-hook 'before-save-hook 'time-stamp) -# time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC" -# time-stamp-time-zone: "UTC" -# End: - -# Set a version string. -scriptversion='(GNU libtool) 2.4.6' - - -# func_echo ARG... -# ---------------- -# Libtool also displays the current mode in messages, so override -# funclib.sh func_echo with this custom definition. -func_echo () -{ - $debug_cmd - - _G_message=$* - - func_echo_IFS=$IFS - IFS=$nl - for _G_line in $_G_message; do - IFS=$func_echo_IFS - $ECHO "$progname${opt_mode+: $opt_mode}: $_G_line" - done - IFS=$func_echo_IFS -} - - -# func_warning ARG... -# ------------------- -# Libtool warnings are not categorized, so override funclib.sh -# func_warning with this simpler definition. -func_warning () -{ - $debug_cmd - - $warning_func ${1+"$@"} -} - - -## ---------------- ## -## Options parsing. ## -## ---------------- ## - -# Hook in the functions to make sure our own options are parsed during -# the option parsing loop. - -usage='$progpath [OPTION]... [MODE-ARG]...' - -# Short help message in response to '-h'. -usage_message="Options: - --config show all configuration variables - --debug enable verbose shell tracing - -n, --dry-run display commands without modifying any files - --features display basic configuration information and exit - --mode=MODE use operation mode MODE - --no-warnings equivalent to '-Wnone' - --preserve-dup-deps don't remove duplicate dependency libraries - --quiet, --silent don't print informational messages - --tag=TAG use configuration variables from tag TAG - -v, --verbose print more informational messages than default - --version print version information - -W, --warnings=CATEGORY report the warnings falling in CATEGORY [all] - -h, --help, --help-all print short, long, or detailed help message -" - -# Additional text appended to 'usage_message' in response to '--help'. -func_help () -{ - $debug_cmd - - func_usage_message - $ECHO "$long_help_message - -MODE must be one of the following: - - clean remove files from the build directory - compile compile a source file into a libtool object - execute automatically set library path, then run a program - finish complete the installation of libtool libraries - install install libraries or executables - link create a library or an executable - uninstall remove libraries from an installed directory - -MODE-ARGS vary depending on the MODE. When passed as first option, -'--mode=MODE' may be abbreviated as 'MODE' or a unique abbreviation of that. -Try '$progname --help --mode=MODE' for a more detailed description of MODE. - -When reporting a bug, please describe a test case to reproduce it and -include the following information: - - host-triplet: $host - shell: $SHELL - compiler: $LTCC - compiler flags: $LTCFLAGS - linker: $LD (gnu? $with_gnu_ld) - version: $progname $scriptversion Debian-2.4.6-9 - automake: `($AUTOMAKE --version) 2>/dev/null |$SED 1q` - autoconf: `($AUTOCONF --version) 2>/dev/null |$SED 1q` - -Report bugs to . -GNU libtool home page: . -General help using GNU software: ." - exit 0 -} - - -# func_lo2o OBJECT-NAME -# --------------------- -# Transform OBJECT-NAME from a '.lo' suffix to the platform specific -# object suffix. - -lo2o=s/\\.lo\$/.$objext/ -o2lo=s/\\.$objext\$/.lo/ - -if test yes = "$_G_HAVE_XSI_OPS"; then - eval 'func_lo2o () - { - case $1 in - *.lo) func_lo2o_result=${1%.lo}.$objext ;; - * ) func_lo2o_result=$1 ;; - esac - }' - - # func_xform LIBOBJ-OR-SOURCE - # --------------------------- - # Transform LIBOBJ-OR-SOURCE from a '.o' or '.c' (or otherwise) - # suffix to a '.lo' libtool-object suffix. - eval 'func_xform () - { - func_xform_result=${1%.*}.lo - }' -else - # ...otherwise fall back to using sed. - func_lo2o () - { - func_lo2o_result=`$ECHO "$1" | $SED "$lo2o"` - } - - func_xform () - { - func_xform_result=`$ECHO "$1" | $SED 's|\.[^.]*$|.lo|'` - } -fi - - -# func_fatal_configuration ARG... -# ------------------------------- -# Echo program name prefixed message to standard error, followed by -# a configuration failure hint, and exit. -func_fatal_configuration () -{ - func__fatal_error ${1+"$@"} \ - "See the $PACKAGE documentation for more information." \ - "Fatal configuration error." -} - - -# func_config -# ----------- -# Display the configuration for all the tags in this script. -func_config () -{ - re_begincf='^# ### BEGIN LIBTOOL' - re_endcf='^# ### END LIBTOOL' - - # Default configuration. - $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" - - # Now print the configurations for the tags. - for tagname in $taglist; do - $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" - done - - exit $? -} - - -# func_features -# ------------- -# Display the features supported by this script. -func_features () -{ - echo "host: $host" - if test yes = "$build_libtool_libs"; then - echo "enable shared libraries" - else - echo "disable shared libraries" - fi - if test yes = "$build_old_libs"; then - echo "enable static libraries" - else - echo "disable static libraries" - fi - - exit $? -} - - -# func_enable_tag TAGNAME -# ----------------------- -# Verify that TAGNAME is valid, and either flag an error and exit, or -# enable the TAGNAME tag. We also add TAGNAME to the global $taglist -# variable here. -func_enable_tag () -{ - # Global variable: - tagname=$1 - - re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" - re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" - sed_extractcf=/$re_begincf/,/$re_endcf/p - - # Validate tagname. - case $tagname in - *[!-_A-Za-z0-9,/]*) - func_fatal_error "invalid tag name: $tagname" - ;; - esac - - # Don't test for the "default" C tag, as we know it's - # there but not specially marked. - case $tagname in - CC) ;; - *) - if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then - taglist="$taglist $tagname" - - # Evaluate the configuration. Be careful to quote the path - # and the sed script, to avoid splitting on whitespace, but - # also don't use non-portable quotes within backquotes within - # quotes we have to do it in 2 steps: - extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` - eval "$extractedcf" - else - func_error "ignoring unknown tag $tagname" - fi - ;; - esac -} - - -# func_check_version_match -# ------------------------ -# Ensure that we are using m4 macros, and libtool script from the same -# release of libtool. -func_check_version_match () -{ - if test "$package_revision" != "$macro_revision"; then - if test "$VERSION" != "$macro_version"; then - if test -z "$macro_version"; then - cat >&2 <<_LT_EOF -$progname: Version mismatch error. This is $PACKAGE $VERSION, but the -$progname: definition of this LT_INIT comes from an older release. -$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION -$progname: and run autoconf again. -_LT_EOF - else - cat >&2 <<_LT_EOF -$progname: Version mismatch error. This is $PACKAGE $VERSION, but the -$progname: definition of this LT_INIT comes from $PACKAGE $macro_version. -$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION -$progname: and run autoconf again. -_LT_EOF - fi - else - cat >&2 <<_LT_EOF -$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, -$progname: but the definition of this LT_INIT comes from revision $macro_revision. -$progname: You should recreate aclocal.m4 with macros from revision $package_revision -$progname: of $PACKAGE $VERSION and run autoconf again. -_LT_EOF - fi - - exit $EXIT_MISMATCH - fi -} - - -# libtool_options_prep [ARG]... -# ----------------------------- -# Preparation for options parsed by libtool. -libtool_options_prep () -{ - $debug_mode - - # Option defaults: - opt_config=false - opt_dlopen= - opt_dry_run=false - opt_help=false - opt_mode= - opt_preserve_dup_deps=false - opt_quiet=false - - nonopt= - preserve_args= - - _G_rc_lt_options_prep=: - - # Shorthand for --mode=foo, only valid as the first argument - case $1 in - clean|clea|cle|cl) - shift; set dummy --mode clean ${1+"$@"}; shift - ;; - compile|compil|compi|comp|com|co|c) - shift; set dummy --mode compile ${1+"$@"}; shift - ;; - execute|execut|execu|exec|exe|ex|e) - shift; set dummy --mode execute ${1+"$@"}; shift - ;; - finish|finis|fini|fin|fi|f) - shift; set dummy --mode finish ${1+"$@"}; shift - ;; - install|instal|insta|inst|ins|in|i) - shift; set dummy --mode install ${1+"$@"}; shift - ;; - link|lin|li|l) - shift; set dummy --mode link ${1+"$@"}; shift - ;; - uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) - shift; set dummy --mode uninstall ${1+"$@"}; shift - ;; - *) - _G_rc_lt_options_prep=false - ;; - esac - - if $_G_rc_lt_options_prep; then - # Pass back the list of options. - func_quote_for_eval ${1+"$@"} - libtool_options_prep_result=$func_quote_for_eval_result - fi - - $_G_rc_lt_options_prep -} -func_add_hook func_options_prep libtool_options_prep - - -# libtool_parse_options [ARG]... -# --------------------------------- -# Provide handling for libtool specific options. -libtool_parse_options () -{ - $debug_cmd - - _G_rc_lt_parse_options=false - - # Perform our own loop to consume as many options as possible in - # each iteration. - while test $# -gt 0; do - _G_match_lt_parse_options=: - _G_opt=$1 - shift - case $_G_opt in - --dry-run|--dryrun|-n) - opt_dry_run=: - ;; - - --config) func_config ;; - - --dlopen|-dlopen) - opt_dlopen="${opt_dlopen+$opt_dlopen -}$1" - shift - ;; - - --preserve-dup-deps) - opt_preserve_dup_deps=: ;; - - --features) func_features ;; - - --finish) set dummy --mode finish ${1+"$@"}; shift ;; - - --help) opt_help=: ;; - - --help-all) opt_help=': help-all' ;; - - --mode) test $# = 0 && func_missing_arg $_G_opt && break - opt_mode=$1 - case $1 in - # Valid mode arguments: - clean|compile|execute|finish|install|link|relink|uninstall) ;; - - # Catch anything else as an error - *) func_error "invalid argument for $_G_opt" - exit_cmd=exit - break - ;; - esac - shift - ;; - - --no-silent|--no-quiet) - opt_quiet=false - func_append preserve_args " $_G_opt" - ;; - - --no-warnings|--no-warning|--no-warn) - opt_warning=false - func_append preserve_args " $_G_opt" - ;; - - --no-verbose) - opt_verbose=false - func_append preserve_args " $_G_opt" - ;; - - --silent|--quiet) - opt_quiet=: - opt_verbose=false - func_append preserve_args " $_G_opt" - ;; - - --tag) test $# = 0 && func_missing_arg $_G_opt && break - opt_tag=$1 - func_append preserve_args " $_G_opt $1" - func_enable_tag "$1" - shift - ;; - - --verbose|-v) opt_quiet=false - opt_verbose=: - func_append preserve_args " $_G_opt" - ;; - - # An option not handled by this hook function: - *) set dummy "$_G_opt" ${1+"$@"} ; shift - _G_match_lt_parse_options=false - break - ;; - esac - $_G_match_lt_parse_options && _G_rc_lt_parse_options=: - done - - if $_G_rc_lt_parse_options; then - # save modified positional parameters for caller - func_quote_for_eval ${1+"$@"} - libtool_parse_options_result=$func_quote_for_eval_result - fi - - $_G_rc_lt_parse_options -} -func_add_hook func_parse_options libtool_parse_options - - - -# libtool_validate_options [ARG]... -# --------------------------------- -# Perform any sanity checks on option settings and/or unconsumed -# arguments. -libtool_validate_options () -{ - # save first non-option argument - if test 0 -lt $#; then - nonopt=$1 - shift - fi - - # preserve --debug - test : = "$debug_cmd" || func_append preserve_args " --debug" - - case $host in - # Solaris2 added to fix http://debbugs.gnu.org/cgi/bugreport.cgi?bug=16452 - # see also: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59788 - *cygwin* | *mingw* | *pw32* | *cegcc* | *solaris2* | *os2*) - # don't eliminate duplications in $postdeps and $predeps - opt_duplicate_compiler_generated_deps=: - ;; - *) - opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps - ;; - esac - - $opt_help || { - # Sanity checks first: - func_check_version_match - - test yes != "$build_libtool_libs" \ - && test yes != "$build_old_libs" \ - && func_fatal_configuration "not configured to build any kind of library" - - # Darwin sucks - eval std_shrext=\"$shrext_cmds\" - - # Only execute mode is allowed to have -dlopen flags. - if test -n "$opt_dlopen" && test execute != "$opt_mode"; then - func_error "unrecognized option '-dlopen'" - $ECHO "$help" 1>&2 - exit $EXIT_FAILURE - fi - - # Change the help message to a mode-specific one. - generic_help=$help - help="Try '$progname --help --mode=$opt_mode' for more information." - } - - # Pass back the unparsed argument list - func_quote_for_eval ${1+"$@"} - libtool_validate_options_result=$func_quote_for_eval_result -} -func_add_hook func_validate_options libtool_validate_options - - -# Process options as early as possible so that --help and --version -# can return quickly. -func_options ${1+"$@"} -eval set dummy "$func_options_result"; shift - - - -## ----------- ## -## Main. ## -## ----------- ## - -magic='%%%MAGIC variable%%%' -magic_exe='%%%MAGIC EXE variable%%%' - -# Global variables. -extracted_archives= -extracted_serial=0 - -# If this variable is set in any of the actions, the command in it -# will be execed at the end. This prevents here-documents from being -# left over by shells. -exec_cmd= - - -# A function that is used when there is no print builtin or printf. -func_fallback_echo () -{ - eval 'cat <<_LTECHO_EOF -$1 -_LTECHO_EOF' -} - -# func_generated_by_libtool -# True iff stdin has been generated by Libtool. This function is only -# a basic sanity check; it will hardly flush out determined imposters. -func_generated_by_libtool_p () -{ - $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 -} - -# func_lalib_p file -# True iff FILE is a libtool '.la' library or '.lo' object file. -# This function is only a basic sanity check; it will hardly flush out -# determined imposters. -func_lalib_p () -{ - test -f "$1" && - $SED -e 4q "$1" 2>/dev/null | func_generated_by_libtool_p -} - -# func_lalib_unsafe_p file -# True iff FILE is a libtool '.la' library or '.lo' object file. -# This function implements the same check as func_lalib_p without -# resorting to external programs. To this end, it redirects stdin and -# closes it afterwards, without saving the original file descriptor. -# As a safety measure, use it only where a negative result would be -# fatal anyway. Works if 'file' does not exist. -func_lalib_unsafe_p () -{ - lalib_p=no - if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then - for lalib_p_l in 1 2 3 4 - do - read lalib_p_line - case $lalib_p_line in - \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; - esac - done - exec 0<&5 5<&- - fi - test yes = "$lalib_p" -} - -# func_ltwrapper_script_p file -# True iff FILE is a libtool wrapper script -# This function is only a basic sanity check; it will hardly flush out -# determined imposters. -func_ltwrapper_script_p () -{ - test -f "$1" && - $lt_truncate_bin < "$1" 2>/dev/null | func_generated_by_libtool_p -} - -# func_ltwrapper_executable_p file -# True iff FILE is a libtool wrapper executable -# This function is only a basic sanity check; it will hardly flush out -# determined imposters. -func_ltwrapper_executable_p () -{ - func_ltwrapper_exec_suffix= - case $1 in - *.exe) ;; - *) func_ltwrapper_exec_suffix=.exe ;; - esac - $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 -} - -# func_ltwrapper_scriptname file -# Assumes file is an ltwrapper_executable -# uses $file to determine the appropriate filename for a -# temporary ltwrapper_script. -func_ltwrapper_scriptname () -{ - func_dirname_and_basename "$1" "" "." - func_stripname '' '.exe' "$func_basename_result" - func_ltwrapper_scriptname_result=$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper -} - -# func_ltwrapper_p file -# True iff FILE is a libtool wrapper script or wrapper executable -# This function is only a basic sanity check; it will hardly flush out -# determined imposters. -func_ltwrapper_p () -{ - func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" -} - - -# func_execute_cmds commands fail_cmd -# Execute tilde-delimited COMMANDS. -# If FAIL_CMD is given, eval that upon failure. -# FAIL_CMD may read-access the current command in variable CMD! -func_execute_cmds () -{ - $debug_cmd - - save_ifs=$IFS; IFS='~' - for cmd in $1; do - IFS=$sp$nl - eval cmd=\"$cmd\" - IFS=$save_ifs - func_show_eval "$cmd" "${2-:}" - done - IFS=$save_ifs -} - - -# func_source file -# Source FILE, adding directory component if necessary. -# Note that it is not necessary on cygwin/mingw to append a dot to -# FILE even if both FILE and FILE.exe exist: automatic-append-.exe -# behavior happens only for exec(3), not for open(2)! Also, sourcing -# 'FILE.' does not work on cygwin managed mounts. -func_source () -{ - $debug_cmd - - case $1 in - */* | *\\*) . "$1" ;; - *) . "./$1" ;; - esac -} - - -# func_resolve_sysroot PATH -# Replace a leading = in PATH with a sysroot. Store the result into -# func_resolve_sysroot_result -func_resolve_sysroot () -{ - func_resolve_sysroot_result=$1 - case $func_resolve_sysroot_result in - =*) - func_stripname '=' '' "$func_resolve_sysroot_result" - func_resolve_sysroot_result=$lt_sysroot$func_stripname_result - ;; - esac -} - -# func_replace_sysroot PATH -# If PATH begins with the sysroot, replace it with = and -# store the result into func_replace_sysroot_result. -func_replace_sysroot () -{ - case $lt_sysroot:$1 in - ?*:"$lt_sysroot"*) - func_stripname "$lt_sysroot" '' "$1" - func_replace_sysroot_result='='$func_stripname_result - ;; - *) - # Including no sysroot. - func_replace_sysroot_result=$1 - ;; - esac -} - -# func_infer_tag arg -# Infer tagged configuration to use if any are available and -# if one wasn't chosen via the "--tag" command line option. -# Only attempt this if the compiler in the base compile -# command doesn't match the default compiler. -# arg is usually of the form 'gcc ...' -func_infer_tag () -{ - $debug_cmd - - if test -n "$available_tags" && test -z "$tagname"; then - CC_quoted= - for arg in $CC; do - func_append_quoted CC_quoted "$arg" - done - CC_expanded=`func_echo_all $CC` - CC_quoted_expanded=`func_echo_all $CC_quoted` - case $@ in - # Blanks in the command may have been stripped by the calling shell, - # but not from the CC environment variable when configure was run. - " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ - " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; - # Blanks at the start of $base_compile will cause this to fail - # if we don't check for them as well. - *) - for z in $available_tags; do - if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then - # Evaluate the configuration. - eval "`$SED -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" - CC_quoted= - for arg in $CC; do - # Double-quote args containing other shell metacharacters. - func_append_quoted CC_quoted "$arg" - done - CC_expanded=`func_echo_all $CC` - CC_quoted_expanded=`func_echo_all $CC_quoted` - case "$@ " in - " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ - " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) - # The compiler in the base compile command matches - # the one in the tagged configuration. - # Assume this is the tagged configuration we want. - tagname=$z - break - ;; - esac - fi - done - # If $tagname still isn't set, then no tagged configuration - # was found and let the user know that the "--tag" command - # line option must be used. - if test -z "$tagname"; then - func_echo "unable to infer tagged configuration" - func_fatal_error "specify a tag with '--tag'" -# else -# func_verbose "using $tagname tagged configuration" - fi - ;; - esac - fi -} - - - -# func_write_libtool_object output_name pic_name nonpic_name -# Create a libtool object file (analogous to a ".la" file), -# but don't create it if we're doing a dry run. -func_write_libtool_object () -{ - write_libobj=$1 - if test yes = "$build_libtool_libs"; then - write_lobj=\'$2\' - else - write_lobj=none - fi - - if test yes = "$build_old_libs"; then - write_oldobj=\'$3\' - else - write_oldobj=none - fi - - $opt_dry_run || { - cat >${write_libobj}T </dev/null` - if test "$?" -eq 0 && test -n "$func_convert_core_file_wine_to_w32_tmp"; then - func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | - $SED -e "$sed_naive_backslashify"` - else - func_convert_core_file_wine_to_w32_result= - fi - fi -} -# end: func_convert_core_file_wine_to_w32 - - -# func_convert_core_path_wine_to_w32 ARG -# Helper function used by path conversion functions when $build is *nix, and -# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly -# configured wine environment available, with the winepath program in $build's -# $PATH. Assumes ARG has no leading or trailing path separator characters. -# -# ARG is path to be converted from $build format to win32. -# Result is available in $func_convert_core_path_wine_to_w32_result. -# Unconvertible file (directory) names in ARG are skipped; if no directory names -# are convertible, then the result may be empty. -func_convert_core_path_wine_to_w32 () -{ - $debug_cmd - - # unfortunately, winepath doesn't convert paths, only file names - func_convert_core_path_wine_to_w32_result= - if test -n "$1"; then - oldIFS=$IFS - IFS=: - for func_convert_core_path_wine_to_w32_f in $1; do - IFS=$oldIFS - func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" - if test -n "$func_convert_core_file_wine_to_w32_result"; then - if test -z "$func_convert_core_path_wine_to_w32_result"; then - func_convert_core_path_wine_to_w32_result=$func_convert_core_file_wine_to_w32_result - else - func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" - fi - fi - done - IFS=$oldIFS - fi -} -# end: func_convert_core_path_wine_to_w32 - - -# func_cygpath ARGS... -# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when -# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) -# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or -# (2), returns the Cygwin file name or path in func_cygpath_result (input -# file name or path is assumed to be in w32 format, as previously converted -# from $build's *nix or MSYS format). In case (3), returns the w32 file name -# or path in func_cygpath_result (input file name or path is assumed to be in -# Cygwin format). Returns an empty string on error. -# -# ARGS are passed to cygpath, with the last one being the file name or path to -# be converted. -# -# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH -# environment variable; do not put it in $PATH. -func_cygpath () -{ - $debug_cmd - - if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then - func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` - if test "$?" -ne 0; then - # on failure, ensure result is empty - func_cygpath_result= - fi - else - func_cygpath_result= - func_error "LT_CYGPATH is empty or specifies non-existent file: '$LT_CYGPATH'" - fi -} -#end: func_cygpath - - -# func_convert_core_msys_to_w32 ARG -# Convert file name or path ARG from MSYS format to w32 format. Return -# result in func_convert_core_msys_to_w32_result. -func_convert_core_msys_to_w32 () -{ - $debug_cmd - - # awkward: cmd appends spaces to result - func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | - $SED -e 's/[ ]*$//' -e "$sed_naive_backslashify"` -} -#end: func_convert_core_msys_to_w32 - - -# func_convert_file_check ARG1 ARG2 -# Verify that ARG1 (a file name in $build format) was converted to $host -# format in ARG2. Otherwise, emit an error message, but continue (resetting -# func_to_host_file_result to ARG1). -func_convert_file_check () -{ - $debug_cmd - - if test -z "$2" && test -n "$1"; then - func_error "Could not determine host file name corresponding to" - func_error " '$1'" - func_error "Continuing, but uninstalled executables may not work." - # Fallback: - func_to_host_file_result=$1 - fi -} -# end func_convert_file_check - - -# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH -# Verify that FROM_PATH (a path in $build format) was converted to $host -# format in TO_PATH. Otherwise, emit an error message, but continue, resetting -# func_to_host_file_result to a simplistic fallback value (see below). -func_convert_path_check () -{ - $debug_cmd - - if test -z "$4" && test -n "$3"; then - func_error "Could not determine the host path corresponding to" - func_error " '$3'" - func_error "Continuing, but uninstalled executables may not work." - # Fallback. This is a deliberately simplistic "conversion" and - # should not be "improved". See libtool.info. - if test "x$1" != "x$2"; then - lt_replace_pathsep_chars="s|$1|$2|g" - func_to_host_path_result=`echo "$3" | - $SED -e "$lt_replace_pathsep_chars"` - else - func_to_host_path_result=$3 - fi - fi -} -# end func_convert_path_check - - -# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG -# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT -# and appending REPL if ORIG matches BACKPAT. -func_convert_path_front_back_pathsep () -{ - $debug_cmd - - case $4 in - $1 ) func_to_host_path_result=$3$func_to_host_path_result - ;; - esac - case $4 in - $2 ) func_append func_to_host_path_result "$3" - ;; - esac -} -# end func_convert_path_front_back_pathsep - - -################################################## -# $build to $host FILE NAME CONVERSION FUNCTIONS # -################################################## -# invoked via '$to_host_file_cmd ARG' -# -# In each case, ARG is the path to be converted from $build to $host format. -# Result will be available in $func_to_host_file_result. - - -# func_to_host_file ARG -# Converts the file name ARG from $build format to $host format. Return result -# in func_to_host_file_result. -func_to_host_file () -{ - $debug_cmd - - $to_host_file_cmd "$1" -} -# end func_to_host_file - - -# func_to_tool_file ARG LAZY -# converts the file name ARG from $build format to toolchain format. Return -# result in func_to_tool_file_result. If the conversion in use is listed -# in (the comma separated) LAZY, no conversion takes place. -func_to_tool_file () -{ - $debug_cmd - - case ,$2, in - *,"$to_tool_file_cmd",*) - func_to_tool_file_result=$1 - ;; - *) - $to_tool_file_cmd "$1" - func_to_tool_file_result=$func_to_host_file_result - ;; - esac -} -# end func_to_tool_file - - -# func_convert_file_noop ARG -# Copy ARG to func_to_host_file_result. -func_convert_file_noop () -{ - func_to_host_file_result=$1 -} -# end func_convert_file_noop - - -# func_convert_file_msys_to_w32 ARG -# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic -# conversion to w32 is not available inside the cwrapper. Returns result in -# func_to_host_file_result. -func_convert_file_msys_to_w32 () -{ - $debug_cmd - - func_to_host_file_result=$1 - if test -n "$1"; then - func_convert_core_msys_to_w32 "$1" - func_to_host_file_result=$func_convert_core_msys_to_w32_result - fi - func_convert_file_check "$1" "$func_to_host_file_result" -} -# end func_convert_file_msys_to_w32 - - -# func_convert_file_cygwin_to_w32 ARG -# Convert file name ARG from Cygwin to w32 format. Returns result in -# func_to_host_file_result. -func_convert_file_cygwin_to_w32 () -{ - $debug_cmd - - func_to_host_file_result=$1 - if test -n "$1"; then - # because $build is cygwin, we call "the" cygpath in $PATH; no need to use - # LT_CYGPATH in this case. - func_to_host_file_result=`cygpath -m "$1"` - fi - func_convert_file_check "$1" "$func_to_host_file_result" -} -# end func_convert_file_cygwin_to_w32 - - -# func_convert_file_nix_to_w32 ARG -# Convert file name ARG from *nix to w32 format. Requires a wine environment -# and a working winepath. Returns result in func_to_host_file_result. -func_convert_file_nix_to_w32 () -{ - $debug_cmd - - func_to_host_file_result=$1 - if test -n "$1"; then - func_convert_core_file_wine_to_w32 "$1" - func_to_host_file_result=$func_convert_core_file_wine_to_w32_result - fi - func_convert_file_check "$1" "$func_to_host_file_result" -} -# end func_convert_file_nix_to_w32 - - -# func_convert_file_msys_to_cygwin ARG -# Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. -# Returns result in func_to_host_file_result. -func_convert_file_msys_to_cygwin () -{ - $debug_cmd - - func_to_host_file_result=$1 - if test -n "$1"; then - func_convert_core_msys_to_w32 "$1" - func_cygpath -u "$func_convert_core_msys_to_w32_result" - func_to_host_file_result=$func_cygpath_result - fi - func_convert_file_check "$1" "$func_to_host_file_result" -} -# end func_convert_file_msys_to_cygwin - - -# func_convert_file_nix_to_cygwin ARG -# Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed -# in a wine environment, working winepath, and LT_CYGPATH set. Returns result -# in func_to_host_file_result. -func_convert_file_nix_to_cygwin () -{ - $debug_cmd - - func_to_host_file_result=$1 - if test -n "$1"; then - # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. - func_convert_core_file_wine_to_w32 "$1" - func_cygpath -u "$func_convert_core_file_wine_to_w32_result" - func_to_host_file_result=$func_cygpath_result - fi - func_convert_file_check "$1" "$func_to_host_file_result" -} -# end func_convert_file_nix_to_cygwin - - -############################################# -# $build to $host PATH CONVERSION FUNCTIONS # -############################################# -# invoked via '$to_host_path_cmd ARG' -# -# In each case, ARG is the path to be converted from $build to $host format. -# The result will be available in $func_to_host_path_result. -# -# Path separators are also converted from $build format to $host format. If -# ARG begins or ends with a path separator character, it is preserved (but -# converted to $host format) on output. -# -# All path conversion functions are named using the following convention: -# file name conversion function : func_convert_file_X_to_Y () -# path conversion function : func_convert_path_X_to_Y () -# where, for any given $build/$host combination the 'X_to_Y' value is the -# same. If conversion functions are added for new $build/$host combinations, -# the two new functions must follow this pattern, or func_init_to_host_path_cmd -# will break. - - -# func_init_to_host_path_cmd -# Ensures that function "pointer" variable $to_host_path_cmd is set to the -# appropriate value, based on the value of $to_host_file_cmd. -to_host_path_cmd= -func_init_to_host_path_cmd () -{ - $debug_cmd - - if test -z "$to_host_path_cmd"; then - func_stripname 'func_convert_file_' '' "$to_host_file_cmd" - to_host_path_cmd=func_convert_path_$func_stripname_result - fi -} - - -# func_to_host_path ARG -# Converts the path ARG from $build format to $host format. Return result -# in func_to_host_path_result. -func_to_host_path () -{ - $debug_cmd - - func_init_to_host_path_cmd - $to_host_path_cmd "$1" -} -# end func_to_host_path - - -# func_convert_path_noop ARG -# Copy ARG to func_to_host_path_result. -func_convert_path_noop () -{ - func_to_host_path_result=$1 -} -# end func_convert_path_noop - - -# func_convert_path_msys_to_w32 ARG -# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic -# conversion to w32 is not available inside the cwrapper. Returns result in -# func_to_host_path_result. -func_convert_path_msys_to_w32 () -{ - $debug_cmd - - func_to_host_path_result=$1 - if test -n "$1"; then - # Remove leading and trailing path separator characters from ARG. MSYS - # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; - # and winepath ignores them completely. - func_stripname : : "$1" - func_to_host_path_tmp1=$func_stripname_result - func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" - func_to_host_path_result=$func_convert_core_msys_to_w32_result - func_convert_path_check : ";" \ - "$func_to_host_path_tmp1" "$func_to_host_path_result" - func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" - fi -} -# end func_convert_path_msys_to_w32 - - -# func_convert_path_cygwin_to_w32 ARG -# Convert path ARG from Cygwin to w32 format. Returns result in -# func_to_host_file_result. -func_convert_path_cygwin_to_w32 () -{ - $debug_cmd - - func_to_host_path_result=$1 - if test -n "$1"; then - # See func_convert_path_msys_to_w32: - func_stripname : : "$1" - func_to_host_path_tmp1=$func_stripname_result - func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` - func_convert_path_check : ";" \ - "$func_to_host_path_tmp1" "$func_to_host_path_result" - func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" - fi -} -# end func_convert_path_cygwin_to_w32 - - -# func_convert_path_nix_to_w32 ARG -# Convert path ARG from *nix to w32 format. Requires a wine environment and -# a working winepath. Returns result in func_to_host_file_result. -func_convert_path_nix_to_w32 () -{ - $debug_cmd - - func_to_host_path_result=$1 - if test -n "$1"; then - # See func_convert_path_msys_to_w32: - func_stripname : : "$1" - func_to_host_path_tmp1=$func_stripname_result - func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" - func_to_host_path_result=$func_convert_core_path_wine_to_w32_result - func_convert_path_check : ";" \ - "$func_to_host_path_tmp1" "$func_to_host_path_result" - func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" - fi -} -# end func_convert_path_nix_to_w32 - - -# func_convert_path_msys_to_cygwin ARG -# Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. -# Returns result in func_to_host_file_result. -func_convert_path_msys_to_cygwin () -{ - $debug_cmd - - func_to_host_path_result=$1 - if test -n "$1"; then - # See func_convert_path_msys_to_w32: - func_stripname : : "$1" - func_to_host_path_tmp1=$func_stripname_result - func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" - func_cygpath -u -p "$func_convert_core_msys_to_w32_result" - func_to_host_path_result=$func_cygpath_result - func_convert_path_check : : \ - "$func_to_host_path_tmp1" "$func_to_host_path_result" - func_convert_path_front_back_pathsep ":*" "*:" : "$1" - fi -} -# end func_convert_path_msys_to_cygwin - - -# func_convert_path_nix_to_cygwin ARG -# Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a -# a wine environment, working winepath, and LT_CYGPATH set. Returns result in -# func_to_host_file_result. -func_convert_path_nix_to_cygwin () -{ - $debug_cmd - - func_to_host_path_result=$1 - if test -n "$1"; then - # Remove leading and trailing path separator characters from - # ARG. msys behavior is inconsistent here, cygpath turns them - # into '.;' and ';.', and winepath ignores them completely. - func_stripname : : "$1" - func_to_host_path_tmp1=$func_stripname_result - func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" - func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" - func_to_host_path_result=$func_cygpath_result - func_convert_path_check : : \ - "$func_to_host_path_tmp1" "$func_to_host_path_result" - func_convert_path_front_back_pathsep ":*" "*:" : "$1" - fi -} -# end func_convert_path_nix_to_cygwin - - -# func_dll_def_p FILE -# True iff FILE is a Windows DLL '.def' file. -# Keep in sync with _LT_DLL_DEF_P in libtool.m4 -func_dll_def_p () -{ - $debug_cmd - - func_dll_def_p_tmp=`$SED -n \ - -e 's/^[ ]*//' \ - -e '/^\(;.*\)*$/d' \ - -e 's/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p' \ - -e q \ - "$1"` - test DEF = "$func_dll_def_p_tmp" -} - - -# func_mode_compile arg... -func_mode_compile () -{ - $debug_cmd - - # Get the compilation command and the source file. - base_compile= - srcfile=$nonopt # always keep a non-empty value in "srcfile" - suppress_opt=yes - suppress_output= - arg_mode=normal - libobj= - later= - pie_flag= - - for arg - do - case $arg_mode in - arg ) - # do not "continue". Instead, add this to base_compile - lastarg=$arg - arg_mode=normal - ;; - - target ) - libobj=$arg - arg_mode=normal - continue - ;; - - normal ) - # Accept any command-line options. - case $arg in - -o) - test -n "$libobj" && \ - func_fatal_error "you cannot specify '-o' more than once" - arg_mode=target - continue - ;; - - -pie | -fpie | -fPIE) - func_append pie_flag " $arg" - continue - ;; - - -shared | -static | -prefer-pic | -prefer-non-pic) - func_append later " $arg" - continue - ;; - - -no-suppress) - suppress_opt=no - continue - ;; - - -Xcompiler) - arg_mode=arg # the next one goes into the "base_compile" arg list - continue # The current "srcfile" will either be retained or - ;; # replaced later. I would guess that would be a bug. - - -Wc,*) - func_stripname '-Wc,' '' "$arg" - args=$func_stripname_result - lastarg= - save_ifs=$IFS; IFS=, - for arg in $args; do - IFS=$save_ifs - func_append_quoted lastarg "$arg" - done - IFS=$save_ifs - func_stripname ' ' '' "$lastarg" - lastarg=$func_stripname_result - - # Add the arguments to base_compile. - func_append base_compile " $lastarg" - continue - ;; - - *) - # Accept the current argument as the source file. - # The previous "srcfile" becomes the current argument. - # - lastarg=$srcfile - srcfile=$arg - ;; - esac # case $arg - ;; - esac # case $arg_mode - - # Aesthetically quote the previous argument. - func_append_quoted base_compile "$lastarg" - done # for arg - - case $arg_mode in - arg) - func_fatal_error "you must specify an argument for -Xcompile" - ;; - target) - func_fatal_error "you must specify a target with '-o'" - ;; - *) - # Get the name of the library object. - test -z "$libobj" && { - func_basename "$srcfile" - libobj=$func_basename_result - } - ;; - esac - - # Recognize several different file suffixes. - # If the user specifies -o file.o, it is replaced with file.lo - case $libobj in - *.[cCFSifmso] | \ - *.ada | *.adb | *.ads | *.asm | \ - *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ - *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup) - func_xform "$libobj" - libobj=$func_xform_result - ;; - esac - - case $libobj in - *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; - *) - func_fatal_error "cannot determine name of library object from '$libobj'" - ;; - esac - - func_infer_tag $base_compile - - for arg in $later; do - case $arg in - -shared) - test yes = "$build_libtool_libs" \ - || func_fatal_configuration "cannot build a shared library" - build_old_libs=no - continue - ;; - - -static) - build_libtool_libs=no - build_old_libs=yes - continue - ;; - - -prefer-pic) - pic_mode=yes - continue - ;; - - -prefer-non-pic) - pic_mode=no - continue - ;; - esac - done - - func_quote_for_eval "$libobj" - test "X$libobj" != "X$func_quote_for_eval_result" \ - && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ - && func_warning "libobj name '$libobj' may not contain shell special characters." - func_dirname_and_basename "$obj" "/" "" - objname=$func_basename_result - xdir=$func_dirname_result - lobj=$xdir$objdir/$objname - - test -z "$base_compile" && \ - func_fatal_help "you must specify a compilation command" - - # Delete any leftover library objects. - if test yes = "$build_old_libs"; then - removelist="$obj $lobj $libobj ${libobj}T" - else - removelist="$lobj $libobj ${libobj}T" - fi - - # On Cygwin there's no "real" PIC flag so we must build both object types - case $host_os in - cygwin* | mingw* | pw32* | os2* | cegcc*) - pic_mode=default - ;; - esac - if test no = "$pic_mode" && test pass_all != "$deplibs_check_method"; then - # non-PIC code in shared libraries is not supported - pic_mode=default - fi - - # Calculate the filename of the output object if compiler does - # not support -o with -c - if test no = "$compiler_c_o"; then - output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.$objext - lockfile=$output_obj.lock - else - output_obj= - need_locks=no - lockfile= - fi - - # Lock this critical section if it is needed - # We use this script file to make the link, it avoids creating a new file - if test yes = "$need_locks"; then - until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do - func_echo "Waiting for $lockfile to be removed" - sleep 2 - done - elif test warn = "$need_locks"; then - if test -f "$lockfile"; then - $ECHO "\ -*** ERROR, $lockfile exists and contains: -`cat $lockfile 2>/dev/null` - -This indicates that another process is trying to use the same -temporary object file, and libtool could not work around it because -your compiler does not support '-c' and '-o' together. If you -repeat this compilation, it may succeed, by chance, but you had better -avoid parallel builds (make -j) in this platform, or get a better -compiler." - - $opt_dry_run || $RM $removelist - exit $EXIT_FAILURE - fi - func_append removelist " $output_obj" - $ECHO "$srcfile" > "$lockfile" - fi - - $opt_dry_run || $RM $removelist - func_append removelist " $lockfile" - trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 - - func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 - srcfile=$func_to_tool_file_result - func_quote_for_eval "$srcfile" - qsrcfile=$func_quote_for_eval_result - - # Only build a PIC object if we are building libtool libraries. - if test yes = "$build_libtool_libs"; then - # Without this assignment, base_compile gets emptied. - fbsd_hideous_sh_bug=$base_compile - - if test no != "$pic_mode"; then - command="$base_compile $qsrcfile $pic_flag" - else - # Don't build PIC code - command="$base_compile $qsrcfile" - fi - - func_mkdir_p "$xdir$objdir" - - if test -z "$output_obj"; then - # Place PIC objects in $objdir - func_append command " -o $lobj" - fi - - func_show_eval_locale "$command" \ - 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' - - if test warn = "$need_locks" && - test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then - $ECHO "\ -*** ERROR, $lockfile contains: -`cat $lockfile 2>/dev/null` - -but it should contain: -$srcfile - -This indicates that another process is trying to use the same -temporary object file, and libtool could not work around it because -your compiler does not support '-c' and '-o' together. If you -repeat this compilation, it may succeed, by chance, but you had better -avoid parallel builds (make -j) in this platform, or get a better -compiler." - - $opt_dry_run || $RM $removelist - exit $EXIT_FAILURE - fi - - # Just move the object if needed, then go on to compile the next one - if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then - func_show_eval '$MV "$output_obj" "$lobj"' \ - 'error=$?; $opt_dry_run || $RM $removelist; exit $error' - fi - - # Allow error messages only from the first compilation. - if test yes = "$suppress_opt"; then - suppress_output=' >/dev/null 2>&1' - fi - fi - - # Only build a position-dependent object if we build old libraries. - if test yes = "$build_old_libs"; then - if test yes != "$pic_mode"; then - # Don't build PIC code - command="$base_compile $qsrcfile$pie_flag" - else - command="$base_compile $qsrcfile $pic_flag" - fi - if test yes = "$compiler_c_o"; then - func_append command " -o $obj" - fi - - # Suppress compiler output if we already did a PIC compilation. - func_append command "$suppress_output" - func_show_eval_locale "$command" \ - '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' - - if test warn = "$need_locks" && - test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then - $ECHO "\ -*** ERROR, $lockfile contains: -`cat $lockfile 2>/dev/null` - -but it should contain: -$srcfile - -This indicates that another process is trying to use the same -temporary object file, and libtool could not work around it because -your compiler does not support '-c' and '-o' together. If you -repeat this compilation, it may succeed, by chance, but you had better -avoid parallel builds (make -j) in this platform, or get a better -compiler." - - $opt_dry_run || $RM $removelist - exit $EXIT_FAILURE - fi - - # Just move the object if needed - if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then - func_show_eval '$MV "$output_obj" "$obj"' \ - 'error=$?; $opt_dry_run || $RM $removelist; exit $error' - fi - fi - - $opt_dry_run || { - func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" - - # Unlock the critical section if it was locked - if test no != "$need_locks"; then - removelist=$lockfile - $RM "$lockfile" - fi - } - - exit $EXIT_SUCCESS -} - -$opt_help || { - test compile = "$opt_mode" && func_mode_compile ${1+"$@"} -} - -func_mode_help () -{ - # We need to display help for each of the modes. - case $opt_mode in - "") - # Generic help is extracted from the usage comments - # at the start of this file. - func_help - ;; - - clean) - $ECHO \ -"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... - -Remove files from the build directory. - -RM is the name of the program to use to delete files associated with each FILE -(typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed -to RM. - -If FILE is a libtool library, object or program, all the files associated -with it are deleted. Otherwise, only FILE itself is deleted using RM." - ;; - - compile) - $ECHO \ -"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE - -Compile a source file into a libtool library object. - -This mode accepts the following additional options: - - -o OUTPUT-FILE set the output file name to OUTPUT-FILE - -no-suppress do not suppress compiler output for multiple passes - -prefer-pic try to build PIC objects only - -prefer-non-pic try to build non-PIC objects only - -shared do not build a '.o' file suitable for static linking - -static only build a '.o' file suitable for static linking - -Wc,FLAG pass FLAG directly to the compiler - -COMPILE-COMMAND is a command to be used in creating a 'standard' object file -from the given SOURCEFILE. - -The output file name is determined by removing the directory component from -SOURCEFILE, then substituting the C source code suffix '.c' with the -library object suffix, '.lo'." - ;; - - execute) - $ECHO \ -"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... - -Automatically set library path, then run a program. - -This mode accepts the following additional options: - - -dlopen FILE add the directory containing FILE to the library path - -This mode sets the library path environment variable according to '-dlopen' -flags. - -If any of the ARGS are libtool executable wrappers, then they are translated -into their corresponding uninstalled binary, and any of their required library -directories are added to the library path. - -Then, COMMAND is executed, with ARGS as arguments." - ;; - - finish) - $ECHO \ -"Usage: $progname [OPTION]... --mode=finish [LIBDIR]... - -Complete the installation of libtool libraries. - -Each LIBDIR is a directory that contains libtool libraries. - -The commands that this mode executes may require superuser privileges. Use -the '--dry-run' option if you just want to see what would be executed." - ;; - - install) - $ECHO \ -"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... - -Install executables or libraries. - -INSTALL-COMMAND is the installation command. The first component should be -either the 'install' or 'cp' program. - -The following components of INSTALL-COMMAND are treated specially: - - -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation - -The rest of the components are interpreted as arguments to that command (only -BSD-compatible install options are recognized)." - ;; - - link) - $ECHO \ -"Usage: $progname [OPTION]... --mode=link LINK-COMMAND... - -Link object files or libraries together to form another library, or to -create an executable program. - -LINK-COMMAND is a command using the C compiler that you would use to create -a program from several object files. - -The following components of LINK-COMMAND are treated specially: - - -all-static do not do any dynamic linking at all - -avoid-version do not add a version suffix if possible - -bindir BINDIR specify path to binaries directory (for systems where - libraries must be found in the PATH setting at runtime) - -dlopen FILE '-dlpreopen' FILE if it cannot be dlopened at runtime - -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols - -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) - -export-symbols SYMFILE - try to export only the symbols listed in SYMFILE - -export-symbols-regex REGEX - try to export only the symbols matching REGEX - -LLIBDIR search LIBDIR for required installed libraries - -lNAME OUTPUT-FILE requires the installed library libNAME - -module build a library that can dlopened - -no-fast-install disable the fast-install mode - -no-install link a not-installable executable - -no-undefined declare that a library does not refer to external symbols - -o OUTPUT-FILE create OUTPUT-FILE from the specified objects - -objectlist FILE use a list of object files found in FILE to specify objects - -os2dllname NAME force a short DLL name on OS/2 (no effect on other OSes) - -precious-files-regex REGEX - don't remove output files matching REGEX - -release RELEASE specify package release information - -rpath LIBDIR the created library will eventually be installed in LIBDIR - -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries - -shared only do dynamic linking of libtool libraries - -shrext SUFFIX override the standard shared library file extension - -static do not do any dynamic linking of uninstalled libtool libraries - -static-libtool-libs - do not do any dynamic linking of libtool libraries - -version-info CURRENT[:REVISION[:AGE]] - specify library version info [each variable defaults to 0] - -weak LIBNAME declare that the target provides the LIBNAME interface - -Wc,FLAG - -Xcompiler FLAG pass linker-specific FLAG directly to the compiler - -Wl,FLAG - -Xlinker FLAG pass linker-specific FLAG directly to the linker - -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) - -All other options (arguments beginning with '-') are ignored. - -Every other argument is treated as a filename. Files ending in '.la' are -treated as uninstalled libtool libraries, other files are standard or library -object files. - -If the OUTPUT-FILE ends in '.la', then a libtool library is created, -only library objects ('.lo' files) may be specified, and '-rpath' is -required, except when creating a convenience library. - -If OUTPUT-FILE ends in '.a' or '.lib', then a standard library is created -using 'ar' and 'ranlib', or on Windows using 'lib'. - -If OUTPUT-FILE ends in '.lo' or '.$objext', then a reloadable object file -is created, otherwise an executable program is created." - ;; - - uninstall) - $ECHO \ -"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... - -Remove libraries from an installation directory. - -RM is the name of the program to use to delete files associated with each FILE -(typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed -to RM. - -If FILE is a libtool library, all the files associated with it are deleted. -Otherwise, only FILE itself is deleted using RM." - ;; - - *) - func_fatal_help "invalid operation mode '$opt_mode'" - ;; - esac - - echo - $ECHO "Try '$progname --help' for more information about other modes." -} - -# Now that we've collected a possible --mode arg, show help if necessary -if $opt_help; then - if test : = "$opt_help"; then - func_mode_help - else - { - func_help noexit - for opt_mode in compile link execute install finish uninstall clean; do - func_mode_help - done - } | $SED -n '1p; 2,$s/^Usage:/ or: /p' - { - func_help noexit - for opt_mode in compile link execute install finish uninstall clean; do - echo - func_mode_help - done - } | - $SED '1d - /^When reporting/,/^Report/{ - H - d - } - $x - /information about other modes/d - /more detailed .*MODE/d - s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' - fi - exit $? -fi - - -# func_mode_execute arg... -func_mode_execute () -{ - $debug_cmd - - # The first argument is the command name. - cmd=$nonopt - test -z "$cmd" && \ - func_fatal_help "you must specify a COMMAND" - - # Handle -dlopen flags immediately. - for file in $opt_dlopen; do - test -f "$file" \ - || func_fatal_help "'$file' is not a file" - - dir= - case $file in - *.la) - func_resolve_sysroot "$file" - file=$func_resolve_sysroot_result - - # Check to see that this really is a libtool archive. - func_lalib_unsafe_p "$file" \ - || func_fatal_help "'$lib' is not a valid libtool archive" - - # Read the libtool library. - dlname= - library_names= - func_source "$file" - - # Skip this library if it cannot be dlopened. - if test -z "$dlname"; then - # Warn if it was a shared library. - test -n "$library_names" && \ - func_warning "'$file' was not linked with '-export-dynamic'" - continue - fi - - func_dirname "$file" "" "." - dir=$func_dirname_result - - if test -f "$dir/$objdir/$dlname"; then - func_append dir "/$objdir" - else - if test ! -f "$dir/$dlname"; then - func_fatal_error "cannot find '$dlname' in '$dir' or '$dir/$objdir'" - fi - fi - ;; - - *.lo) - # Just add the directory containing the .lo file. - func_dirname "$file" "" "." - dir=$func_dirname_result - ;; - - *) - func_warning "'-dlopen' is ignored for non-libtool libraries and objects" - continue - ;; - esac - - # Get the absolute pathname. - absdir=`cd "$dir" && pwd` - test -n "$absdir" && dir=$absdir - - # Now add the directory to shlibpath_var. - if eval "test -z \"\$$shlibpath_var\""; then - eval "$shlibpath_var=\"\$dir\"" - else - eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" - fi - done - - # This variable tells wrapper scripts just to set shlibpath_var - # rather than running their programs. - libtool_execute_magic=$magic - - # Check if any of the arguments is a wrapper script. - args= - for file - do - case $file in - -* | *.la | *.lo ) ;; - *) - # Do a test to see if this is really a libtool program. - if func_ltwrapper_script_p "$file"; then - func_source "$file" - # Transform arg to wrapped name. - file=$progdir/$program - elif func_ltwrapper_executable_p "$file"; then - func_ltwrapper_scriptname "$file" - func_source "$func_ltwrapper_scriptname_result" - # Transform arg to wrapped name. - file=$progdir/$program - fi - ;; - esac - # Quote arguments (to preserve shell metacharacters). - func_append_quoted args "$file" - done - - if $opt_dry_run; then - # Display what would be done. - if test -n "$shlibpath_var"; then - eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" - echo "export $shlibpath_var" - fi - $ECHO "$cmd$args" - exit $EXIT_SUCCESS - else - if test -n "$shlibpath_var"; then - # Export the shlibpath_var. - eval "export $shlibpath_var" - fi - - # Restore saved environment variables - for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES - do - eval "if test \"\${save_$lt_var+set}\" = set; then - $lt_var=\$save_$lt_var; export $lt_var - else - $lt_unset $lt_var - fi" - done - - # Now prepare to actually exec the command. - exec_cmd=\$cmd$args - fi -} - -test execute = "$opt_mode" && func_mode_execute ${1+"$@"} - - -# func_mode_finish arg... -func_mode_finish () -{ - $debug_cmd - - libs= - libdirs= - admincmds= - - for opt in "$nonopt" ${1+"$@"} - do - if test -d "$opt"; then - func_append libdirs " $opt" - - elif test -f "$opt"; then - if func_lalib_unsafe_p "$opt"; then - func_append libs " $opt" - else - func_warning "'$opt' is not a valid libtool archive" - fi - - else - func_fatal_error "invalid argument '$opt'" - fi - done - - if test -n "$libs"; then - if test -n "$lt_sysroot"; then - sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` - sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" - else - sysroot_cmd= - fi - - # Remove sysroot references - if $opt_dry_run; then - for lib in $libs; do - echo "removing references to $lt_sysroot and '=' prefixes from $lib" - done - else - tmpdir=`func_mktempdir` - for lib in $libs; do - $SED -e "$sysroot_cmd s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ - > $tmpdir/tmp-la - mv -f $tmpdir/tmp-la $lib - done - ${RM}r "$tmpdir" - fi - fi - - if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then - for libdir in $libdirs; do - if test -n "$finish_cmds"; then - # Do each command in the finish commands. - func_execute_cmds "$finish_cmds" 'admincmds="$admincmds -'"$cmd"'"' - fi - if test -n "$finish_eval"; then - # Do the single finish_eval. - eval cmds=\"$finish_eval\" - $opt_dry_run || eval "$cmds" || func_append admincmds " - $cmds" - fi - done - fi - - # Exit here if they wanted silent mode. - $opt_quiet && exit $EXIT_SUCCESS - - if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then - echo "----------------------------------------------------------------------" - echo "Libraries have been installed in:" - for libdir in $libdirs; do - $ECHO " $libdir" - done - echo - echo "If you ever happen to want to link against installed libraries" - echo "in a given directory, LIBDIR, you must either use libtool, and" - echo "specify the full pathname of the library, or use the '-LLIBDIR'" - echo "flag during linking and do at least one of the following:" - if test -n "$shlibpath_var"; then - echo " - add LIBDIR to the '$shlibpath_var' environment variable" - echo " during execution" - fi - if test -n "$runpath_var"; then - echo " - add LIBDIR to the '$runpath_var' environment variable" - echo " during linking" - fi - if test -n "$hardcode_libdir_flag_spec"; then - libdir=LIBDIR - eval flag=\"$hardcode_libdir_flag_spec\" - - $ECHO " - use the '$flag' linker flag" - fi - if test -n "$admincmds"; then - $ECHO " - have your system administrator run these commands:$admincmds" - fi - if test -f /etc/ld.so.conf; then - echo " - have your system administrator add LIBDIR to '/etc/ld.so.conf'" - fi - echo - - echo "See any operating system documentation about shared libraries for" - case $host in - solaris2.[6789]|solaris2.1[0-9]) - echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" - echo "pages." - ;; - *) - echo "more information, such as the ld(1) and ld.so(8) manual pages." - ;; - esac - echo "----------------------------------------------------------------------" - fi - exit $EXIT_SUCCESS -} - -test finish = "$opt_mode" && func_mode_finish ${1+"$@"} - - -# func_mode_install arg... -func_mode_install () -{ - $debug_cmd - - # There may be an optional sh(1) argument at the beginning of - # install_prog (especially on Windows NT). - if test "$SHELL" = "$nonopt" || test /bin/sh = "$nonopt" || - # Allow the use of GNU shtool's install command. - case $nonopt in *shtool*) :;; *) false;; esac - then - # Aesthetically quote it. - func_quote_for_eval "$nonopt" - install_prog="$func_quote_for_eval_result " - arg=$1 - shift - else - install_prog= - arg=$nonopt - fi - - # The real first argument should be the name of the installation program. - # Aesthetically quote it. - func_quote_for_eval "$arg" - func_append install_prog "$func_quote_for_eval_result" - install_shared_prog=$install_prog - case " $install_prog " in - *[\\\ /]cp\ *) install_cp=: ;; - *) install_cp=false ;; - esac - - # We need to accept at least all the BSD install flags. - dest= - files= - opts= - prev= - install_type= - isdir=false - stripme= - no_mode=: - for arg - do - arg2= - if test -n "$dest"; then - func_append files " $dest" - dest=$arg - continue - fi - - case $arg in - -d) isdir=: ;; - -f) - if $install_cp; then :; else - prev=$arg - fi - ;; - -g | -m | -o) - prev=$arg - ;; - -s) - stripme=" -s" - continue - ;; - -*) - ;; - *) - # If the previous option needed an argument, then skip it. - if test -n "$prev"; then - if test X-m = "X$prev" && test -n "$install_override_mode"; then - arg2=$install_override_mode - no_mode=false - fi - prev= - else - dest=$arg - continue - fi - ;; - esac - - # Aesthetically quote the argument. - func_quote_for_eval "$arg" - func_append install_prog " $func_quote_for_eval_result" - if test -n "$arg2"; then - func_quote_for_eval "$arg2" - fi - func_append install_shared_prog " $func_quote_for_eval_result" - done - - test -z "$install_prog" && \ - func_fatal_help "you must specify an install program" - - test -n "$prev" && \ - func_fatal_help "the '$prev' option requires an argument" - - if test -n "$install_override_mode" && $no_mode; then - if $install_cp; then :; else - func_quote_for_eval "$install_override_mode" - func_append install_shared_prog " -m $func_quote_for_eval_result" - fi - fi - - if test -z "$files"; then - if test -z "$dest"; then - func_fatal_help "no file or destination specified" - else - func_fatal_help "you must specify a destination" - fi - fi - - # Strip any trailing slash from the destination. - func_stripname '' '/' "$dest" - dest=$func_stripname_result - - # Check to see that the destination is a directory. - test -d "$dest" && isdir=: - if $isdir; then - destdir=$dest - destname= - else - func_dirname_and_basename "$dest" "" "." - destdir=$func_dirname_result - destname=$func_basename_result - - # Not a directory, so check to see that there is only one file specified. - set dummy $files; shift - test "$#" -gt 1 && \ - func_fatal_help "'$dest' is not a directory" - fi - case $destdir in - [\\/]* | [A-Za-z]:[\\/]*) ;; - *) - for file in $files; do - case $file in - *.lo) ;; - *) - func_fatal_help "'$destdir' must be an absolute directory name" - ;; - esac - done - ;; - esac - - # This variable tells wrapper scripts just to set variables rather - # than running their programs. - libtool_install_magic=$magic - - staticlibs= - future_libdirs= - current_libdirs= - for file in $files; do - - # Do each installation. - case $file in - *.$libext) - # Do the static libraries later. - func_append staticlibs " $file" - ;; - - *.la) - func_resolve_sysroot "$file" - file=$func_resolve_sysroot_result - - # Check to see that this really is a libtool archive. - func_lalib_unsafe_p "$file" \ - || func_fatal_help "'$file' is not a valid libtool archive" - - library_names= - old_library= - relink_command= - func_source "$file" - - # Add the libdir to current_libdirs if it is the destination. - if test "X$destdir" = "X$libdir"; then - case "$current_libdirs " in - *" $libdir "*) ;; - *) func_append current_libdirs " $libdir" ;; - esac - else - # Note the libdir as a future libdir. - case "$future_libdirs " in - *" $libdir "*) ;; - *) func_append future_libdirs " $libdir" ;; - esac - fi - - func_dirname "$file" "/" "" - dir=$func_dirname_result - func_append dir "$objdir" - - if test -n "$relink_command"; then - # Determine the prefix the user has applied to our future dir. - inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` - - # Don't allow the user to place us outside of our expected - # location b/c this prevents finding dependent libraries that - # are installed to the same prefix. - # At present, this check doesn't affect windows .dll's that - # are installed into $libdir/../bin (currently, that works fine) - # but it's something to keep an eye on. - test "$inst_prefix_dir" = "$destdir" && \ - func_fatal_error "error: cannot install '$file' to a directory not ending in $libdir" - - if test -n "$inst_prefix_dir"; then - # Stick the inst_prefix_dir data into the link command. - relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` - else - relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` - fi - - func_warning "relinking '$file'" - func_show_eval "$relink_command" \ - 'func_fatal_error "error: relink '\''$file'\'' with the above command before installing it"' - fi - - # See the names of the shared library. - set dummy $library_names; shift - if test -n "$1"; then - realname=$1 - shift - - srcname=$realname - test -n "$relink_command" && srcname=${realname}T - - # Install the shared library and build the symlinks. - func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ - 'exit $?' - tstripme=$stripme - case $host_os in - cygwin* | mingw* | pw32* | cegcc*) - case $realname in - *.dll.a) - tstripme= - ;; - esac - ;; - os2*) - case $realname in - *_dll.a) - tstripme= - ;; - esac - ;; - esac - if test -n "$tstripme" && test -n "$striplib"; then - func_show_eval "$striplib $destdir/$realname" 'exit $?' - fi - - if test "$#" -gt 0; then - # Delete the old symlinks, and create new ones. - # Try 'ln -sf' first, because the 'ln' binary might depend on - # the symlink we replace! Solaris /bin/ln does not understand -f, - # so we also need to try rm && ln -s. - for linkname - do - test "$linkname" != "$realname" \ - && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" - done - fi - - # Do each command in the postinstall commands. - lib=$destdir/$realname - func_execute_cmds "$postinstall_cmds" 'exit $?' - fi - - # Install the pseudo-library for information purposes. - func_basename "$file" - name=$func_basename_result - instname=$dir/${name}i - func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' - - # Maybe install the static library, too. - test -n "$old_library" && func_append staticlibs " $dir/$old_library" - ;; - - *.lo) - # Install (i.e. copy) a libtool object. - - # Figure out destination file name, if it wasn't already specified. - if test -n "$destname"; then - destfile=$destdir/$destname - else - func_basename "$file" - destfile=$func_basename_result - destfile=$destdir/$destfile - fi - - # Deduce the name of the destination old-style object file. - case $destfile in - *.lo) - func_lo2o "$destfile" - staticdest=$func_lo2o_result - ;; - *.$objext) - staticdest=$destfile - destfile= - ;; - *) - func_fatal_help "cannot copy a libtool object to '$destfile'" - ;; - esac - - # Install the libtool object if requested. - test -n "$destfile" && \ - func_show_eval "$install_prog $file $destfile" 'exit $?' - - # Install the old object if enabled. - if test yes = "$build_old_libs"; then - # Deduce the name of the old-style object file. - func_lo2o "$file" - staticobj=$func_lo2o_result - func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' - fi - exit $EXIT_SUCCESS - ;; - - *) - # Figure out destination file name, if it wasn't already specified. - if test -n "$destname"; then - destfile=$destdir/$destname - else - func_basename "$file" - destfile=$func_basename_result - destfile=$destdir/$destfile - fi - - # If the file is missing, and there is a .exe on the end, strip it - # because it is most likely a libtool script we actually want to - # install - stripped_ext= - case $file in - *.exe) - if test ! -f "$file"; then - func_stripname '' '.exe' "$file" - file=$func_stripname_result - stripped_ext=.exe - fi - ;; - esac - - # Do a test to see if this is really a libtool program. - case $host in - *cygwin* | *mingw*) - if func_ltwrapper_executable_p "$file"; then - func_ltwrapper_scriptname "$file" - wrapper=$func_ltwrapper_scriptname_result - else - func_stripname '' '.exe' "$file" - wrapper=$func_stripname_result - fi - ;; - *) - wrapper=$file - ;; - esac - if func_ltwrapper_script_p "$wrapper"; then - notinst_deplibs= - relink_command= - - func_source "$wrapper" - - # Check the variables that should have been set. - test -z "$generated_by_libtool_version" && \ - func_fatal_error "invalid libtool wrapper script '$wrapper'" - - finalize=: - for lib in $notinst_deplibs; do - # Check to see that each library is installed. - libdir= - if test -f "$lib"; then - func_source "$lib" - fi - libfile=$libdir/`$ECHO "$lib" | $SED 's%^.*/%%g'` - if test -n "$libdir" && test ! -f "$libfile"; then - func_warning "'$lib' has not been installed in '$libdir'" - finalize=false - fi - done - - relink_command= - func_source "$wrapper" - - outputname= - if test no = "$fast_install" && test -n "$relink_command"; then - $opt_dry_run || { - if $finalize; then - tmpdir=`func_mktempdir` - func_basename "$file$stripped_ext" - file=$func_basename_result - outputname=$tmpdir/$file - # Replace the output file specification. - relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` - - $opt_quiet || { - func_quote_for_expand "$relink_command" - eval "func_echo $func_quote_for_expand_result" - } - if eval "$relink_command"; then : - else - func_error "error: relink '$file' with the above command before installing it" - $opt_dry_run || ${RM}r "$tmpdir" - continue - fi - file=$outputname - else - func_warning "cannot relink '$file'" - fi - } - else - # Install the binary that we compiled earlier. - file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` - fi - fi - - # remove .exe since cygwin /usr/bin/install will append another - # one anyway - case $install_prog,$host in - */usr/bin/install*,*cygwin*) - case $file:$destfile in - *.exe:*.exe) - # this is ok - ;; - *.exe:*) - destfile=$destfile.exe - ;; - *:*.exe) - func_stripname '' '.exe' "$destfile" - destfile=$func_stripname_result - ;; - esac - ;; - esac - func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' - $opt_dry_run || if test -n "$outputname"; then - ${RM}r "$tmpdir" - fi - ;; - esac - done - - for file in $staticlibs; do - func_basename "$file" - name=$func_basename_result - - # Set up the ranlib parameters. - oldlib=$destdir/$name - func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 - tool_oldlib=$func_to_tool_file_result - - func_show_eval "$install_prog \$file \$oldlib" 'exit $?' - - if test -n "$stripme" && test -n "$old_striplib"; then - func_show_eval "$old_striplib $tool_oldlib" 'exit $?' - fi - - # Do each command in the postinstall commands. - func_execute_cmds "$old_postinstall_cmds" 'exit $?' - done - - test -n "$future_libdirs" && \ - func_warning "remember to run '$progname --finish$future_libdirs'" - - if test -n "$current_libdirs"; then - # Maybe just do a dry run. - $opt_dry_run && current_libdirs=" -n$current_libdirs" - exec_cmd='$SHELL "$progpath" $preserve_args --finish$current_libdirs' - else - exit $EXIT_SUCCESS - fi -} - -test install = "$opt_mode" && func_mode_install ${1+"$@"} - - -# func_generate_dlsyms outputname originator pic_p -# Extract symbols from dlprefiles and create ${outputname}S.o with -# a dlpreopen symbol table. -func_generate_dlsyms () -{ - $debug_cmd - - my_outputname=$1 - my_originator=$2 - my_pic_p=${3-false} - my_prefix=`$ECHO "$my_originator" | $SED 's%[^a-zA-Z0-9]%_%g'` - my_dlsyms= - - if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then - if test -n "$NM" && test -n "$global_symbol_pipe"; then - my_dlsyms=${my_outputname}S.c - else - func_error "not configured to extract global symbols from dlpreopened files" - fi - fi - - if test -n "$my_dlsyms"; then - case $my_dlsyms in - "") ;; - *.c) - # Discover the nlist of each of the dlfiles. - nlist=$output_objdir/$my_outputname.nm - - func_show_eval "$RM $nlist ${nlist}S ${nlist}T" - - # Parse the name list into a source file. - func_verbose "creating $output_objdir/$my_dlsyms" - - $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ -/* $my_dlsyms - symbol resolution table for '$my_outputname' dlsym emulation. */ -/* Generated by $PROGRAM (GNU $PACKAGE) $VERSION */ - -#ifdef __cplusplus -extern \"C\" { -#endif - -#if defined __GNUC__ && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) -#pragma GCC diagnostic ignored \"-Wstrict-prototypes\" -#endif - -/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ -#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE -/* DATA imports from DLLs on WIN32 can't be const, because runtime - relocations are performed -- see ld's documentation on pseudo-relocs. */ -# define LT_DLSYM_CONST -#elif defined __osf__ -/* This system does not cope well with relocations in const data. */ -# define LT_DLSYM_CONST -#else -# define LT_DLSYM_CONST const -#endif - -#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) - -/* External symbol declarations for the compiler. */\ -" - - if test yes = "$dlself"; then - func_verbose "generating symbol list for '$output'" - - $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" - - # Add our own program objects to the symbol list. - progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` - for progfile in $progfiles; do - func_to_tool_file "$progfile" func_convert_file_msys_to_w32 - func_verbose "extracting global C symbols from '$func_to_tool_file_result'" - $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" - done - - if test -n "$exclude_expsyms"; then - $opt_dry_run || { - eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' - eval '$MV "$nlist"T "$nlist"' - } - fi - - if test -n "$export_symbols_regex"; then - $opt_dry_run || { - eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' - eval '$MV "$nlist"T "$nlist"' - } - fi - - # Prepare the list of exported symbols - if test -z "$export_symbols"; then - export_symbols=$output_objdir/$outputname.exp - $opt_dry_run || { - $RM $export_symbols - eval "$SED -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' - case $host in - *cygwin* | *mingw* | *cegcc* ) - eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' - eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' - ;; - esac - } - else - $opt_dry_run || { - eval "$SED -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' - eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' - eval '$MV "$nlist"T "$nlist"' - case $host in - *cygwin* | *mingw* | *cegcc* ) - eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' - eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' - ;; - esac - } - fi - fi - - for dlprefile in $dlprefiles; do - func_verbose "extracting global C symbols from '$dlprefile'" - func_basename "$dlprefile" - name=$func_basename_result - case $host in - *cygwin* | *mingw* | *cegcc* ) - # if an import library, we need to obtain dlname - if func_win32_import_lib_p "$dlprefile"; then - func_tr_sh "$dlprefile" - eval "curr_lafile=\$libfile_$func_tr_sh_result" - dlprefile_dlbasename= - if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then - # Use subshell, to avoid clobbering current variable values - dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` - if test -n "$dlprefile_dlname"; then - func_basename "$dlprefile_dlname" - dlprefile_dlbasename=$func_basename_result - else - # no lafile. user explicitly requested -dlpreopen . - $sharedlib_from_linklib_cmd "$dlprefile" - dlprefile_dlbasename=$sharedlib_from_linklib_result - fi - fi - $opt_dry_run || { - if test -n "$dlprefile_dlbasename"; then - eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' - else - func_warning "Could not compute DLL name from $name" - eval '$ECHO ": $name " >> "$nlist"' - fi - func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 - eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | - $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" - } - else # not an import lib - $opt_dry_run || { - eval '$ECHO ": $name " >> "$nlist"' - func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 - eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" - } - fi - ;; - *) - $opt_dry_run || { - eval '$ECHO ": $name " >> "$nlist"' - func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 - eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" - } - ;; - esac - done - - $opt_dry_run || { - # Make sure we have at least an empty file. - test -f "$nlist" || : > "$nlist" - - if test -n "$exclude_expsyms"; then - $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T - $MV "$nlist"T "$nlist" - fi - - # Try sorting and uniquifying the output. - if $GREP -v "^: " < "$nlist" | - if sort -k 3 /dev/null 2>&1; then - sort -k 3 - else - sort +2 - fi | - uniq > "$nlist"S; then - : - else - $GREP -v "^: " < "$nlist" > "$nlist"S - fi - - if test -f "$nlist"S; then - eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' - else - echo '/* NONE */' >> "$output_objdir/$my_dlsyms" - fi - - func_show_eval '$RM "${nlist}I"' - if test -n "$global_symbol_to_import"; then - eval "$global_symbol_to_import"' < "$nlist"S > "$nlist"I' - fi - - echo >> "$output_objdir/$my_dlsyms" "\ - -/* The mapping between symbol names and symbols. */ -typedef struct { - const char *name; - void *address; -} lt_dlsymlist; -extern LT_DLSYM_CONST lt_dlsymlist -lt_${my_prefix}_LTX_preloaded_symbols[];\ -" - - if test -s "$nlist"I; then - echo >> "$output_objdir/$my_dlsyms" "\ -static void lt_syminit(void) -{ - LT_DLSYM_CONST lt_dlsymlist *symbol = lt_${my_prefix}_LTX_preloaded_symbols; - for (; symbol->name; ++symbol) - {" - $SED 's/.*/ if (STREQ (symbol->name, \"&\")) symbol->address = (void *) \&&;/' < "$nlist"I >> "$output_objdir/$my_dlsyms" - echo >> "$output_objdir/$my_dlsyms" "\ - } -}" - fi - echo >> "$output_objdir/$my_dlsyms" "\ -LT_DLSYM_CONST lt_dlsymlist -lt_${my_prefix}_LTX_preloaded_symbols[] = -{ {\"$my_originator\", (void *) 0}," - - if test -s "$nlist"I; then - echo >> "$output_objdir/$my_dlsyms" "\ - {\"@INIT@\", (void *) <_syminit}," - fi - - case $need_lib_prefix in - no) - eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" - ;; - *) - eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" - ;; - esac - echo >> "$output_objdir/$my_dlsyms" "\ - {0, (void *) 0} -}; - -/* This works around a problem in FreeBSD linker */ -#ifdef FREEBSD_WORKAROUND -static const void *lt_preloaded_setup() { - return lt_${my_prefix}_LTX_preloaded_symbols; -} -#endif - -#ifdef __cplusplus -} -#endif\ -" - } # !$opt_dry_run - - pic_flag_for_symtable= - case "$compile_command " in - *" -static "*) ;; - *) - case $host in - # compiling the symbol table file with pic_flag works around - # a FreeBSD bug that causes programs to crash when -lm is - # linked before any other PIC object. But we must not use - # pic_flag when linking with -static. The problem exists in - # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. - *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) - pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; - *-*-hpux*) - pic_flag_for_symtable=" $pic_flag" ;; - *) - $my_pic_p && pic_flag_for_symtable=" $pic_flag" - ;; - esac - ;; - esac - symtab_cflags= - for arg in $LTCFLAGS; do - case $arg in - -pie | -fpie | -fPIE) ;; - *) func_append symtab_cflags " $arg" ;; - esac - done - - # Now compile the dynamic symbol file. - func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' - - # Clean up the generated files. - func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T" "${nlist}I"' - - # Transform the symbol file into the correct name. - symfileobj=$output_objdir/${my_outputname}S.$objext - case $host in - *cygwin* | *mingw* | *cegcc* ) - if test -f "$output_objdir/$my_outputname.def"; then - compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` - finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` - else - compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` - finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` - fi - ;; - *) - compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` - finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` - ;; - esac - ;; - *) - func_fatal_error "unknown suffix for '$my_dlsyms'" - ;; - esac - else - # We keep going just in case the user didn't refer to - # lt_preloaded_symbols. The linker will fail if global_symbol_pipe - # really was required. - - # Nullify the symbol file. - compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` - finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` - fi -} - -# func_cygming_gnu_implib_p ARG -# This predicate returns with zero status (TRUE) if -# ARG is a GNU/binutils-style import library. Returns -# with nonzero status (FALSE) otherwise. -func_cygming_gnu_implib_p () -{ - $debug_cmd - - func_to_tool_file "$1" func_convert_file_msys_to_w32 - func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'` - test -n "$func_cygming_gnu_implib_tmp" -} - -# func_cygming_ms_implib_p ARG -# This predicate returns with zero status (TRUE) if -# ARG is an MS-style import library. Returns -# with nonzero status (FALSE) otherwise. -func_cygming_ms_implib_p () -{ - $debug_cmd - - func_to_tool_file "$1" func_convert_file_msys_to_w32 - func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` - test -n "$func_cygming_ms_implib_tmp" -} - -# func_win32_libid arg -# return the library type of file 'arg' -# -# Need a lot of goo to handle *both* DLLs and import libs -# Has to be a shell function in order to 'eat' the argument -# that is supplied when $file_magic_command is called. -# Despite the name, also deal with 64 bit binaries. -func_win32_libid () -{ - $debug_cmd - - win32_libid_type=unknown - win32_fileres=`file -L $1 2>/dev/null` - case $win32_fileres in - *ar\ archive\ import\ library*) # definitely import - win32_libid_type="x86 archive import" - ;; - *ar\ archive*) # could be an import, or static - # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. - if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | - $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then - case $nm_interface in - "MS dumpbin") - if func_cygming_ms_implib_p "$1" || - func_cygming_gnu_implib_p "$1" - then - win32_nmres=import - else - win32_nmres= - fi - ;; - *) - func_to_tool_file "$1" func_convert_file_msys_to_w32 - win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | - $SED -n -e ' - 1,100{ - / I /{ - s|.*|import| - p - q - } - }'` - ;; - esac - case $win32_nmres in - import*) win32_libid_type="x86 archive import";; - *) win32_libid_type="x86 archive static";; - esac - fi - ;; - *DLL*) - win32_libid_type="x86 DLL" - ;; - *executable*) # but shell scripts are "executable" too... - case $win32_fileres in - *MS\ Windows\ PE\ Intel*) - win32_libid_type="x86 DLL" - ;; - esac - ;; - esac - $ECHO "$win32_libid_type" -} - -# func_cygming_dll_for_implib ARG -# -# Platform-specific function to extract the -# name of the DLL associated with the specified -# import library ARG. -# Invoked by eval'ing the libtool variable -# $sharedlib_from_linklib_cmd -# Result is available in the variable -# $sharedlib_from_linklib_result -func_cygming_dll_for_implib () -{ - $debug_cmd - - sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` -} - -# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs -# -# The is the core of a fallback implementation of a -# platform-specific function to extract the name of the -# DLL associated with the specified import library LIBNAME. -# -# SECTION_NAME is either .idata$6 or .idata$7, depending -# on the platform and compiler that created the implib. -# -# Echos the name of the DLL associated with the -# specified import library. -func_cygming_dll_for_implib_fallback_core () -{ - $debug_cmd - - match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` - $OBJDUMP -s --section "$1" "$2" 2>/dev/null | - $SED '/^Contents of section '"$match_literal"':/{ - # Place marker at beginning of archive member dllname section - s/.*/====MARK====/ - p - d - } - # These lines can sometimes be longer than 43 characters, but - # are always uninteresting - /:[ ]*file format pe[i]\{,1\}-/d - /^In archive [^:]*:/d - # Ensure marker is printed - /^====MARK====/p - # Remove all lines with less than 43 characters - /^.\{43\}/!d - # From remaining lines, remove first 43 characters - s/^.\{43\}//' | - $SED -n ' - # Join marker and all lines until next marker into a single line - /^====MARK====/ b para - H - $ b para - b - :para - x - s/\n//g - # Remove the marker - s/^====MARK====// - # Remove trailing dots and whitespace - s/[\. \t]*$// - # Print - /./p' | - # we now have a list, one entry per line, of the stringified - # contents of the appropriate section of all members of the - # archive that possess that section. Heuristic: eliminate - # all those that have a first or second character that is - # a '.' (that is, objdump's representation of an unprintable - # character.) This should work for all archives with less than - # 0x302f exports -- but will fail for DLLs whose name actually - # begins with a literal '.' or a single character followed by - # a '.'. - # - # Of those that remain, print the first one. - $SED -e '/^\./d;/^.\./d;q' -} - -# func_cygming_dll_for_implib_fallback ARG -# Platform-specific function to extract the -# name of the DLL associated with the specified -# import library ARG. -# -# This fallback implementation is for use when $DLLTOOL -# does not support the --identify-strict option. -# Invoked by eval'ing the libtool variable -# $sharedlib_from_linklib_cmd -# Result is available in the variable -# $sharedlib_from_linklib_result -func_cygming_dll_for_implib_fallback () -{ - $debug_cmd - - if func_cygming_gnu_implib_p "$1"; then - # binutils import library - sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` - elif func_cygming_ms_implib_p "$1"; then - # ms-generated import library - sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` - else - # unknown - sharedlib_from_linklib_result= - fi -} - - -# func_extract_an_archive dir oldlib -func_extract_an_archive () -{ - $debug_cmd - - f_ex_an_ar_dir=$1; shift - f_ex_an_ar_oldlib=$1 - if test yes = "$lock_old_archive_extraction"; then - lockfile=$f_ex_an_ar_oldlib.lock - until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do - func_echo "Waiting for $lockfile to be removed" - sleep 2 - done - fi - func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ - 'stat=$?; rm -f "$lockfile"; exit $stat' - if test yes = "$lock_old_archive_extraction"; then - $opt_dry_run || rm -f "$lockfile" - fi - if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then - : - else - func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" - fi -} - - -# func_extract_archives gentop oldlib ... -func_extract_archives () -{ - $debug_cmd - - my_gentop=$1; shift - my_oldlibs=${1+"$@"} - my_oldobjs= - my_xlib= - my_xabs= - my_xdir= - - for my_xlib in $my_oldlibs; do - # Extract the objects. - case $my_xlib in - [\\/]* | [A-Za-z]:[\\/]*) my_xabs=$my_xlib ;; - *) my_xabs=`pwd`"/$my_xlib" ;; - esac - func_basename "$my_xlib" - my_xlib=$func_basename_result - my_xlib_u=$my_xlib - while :; do - case " $extracted_archives " in - *" $my_xlib_u "*) - func_arith $extracted_serial + 1 - extracted_serial=$func_arith_result - my_xlib_u=lt$extracted_serial-$my_xlib ;; - *) break ;; - esac - done - extracted_archives="$extracted_archives $my_xlib_u" - my_xdir=$my_gentop/$my_xlib_u - - func_mkdir_p "$my_xdir" - - case $host in - *-darwin*) - func_verbose "Extracting $my_xabs" - # Do not bother doing anything if just a dry run - $opt_dry_run || { - darwin_orig_dir=`pwd` - cd $my_xdir || exit $? - darwin_archive=$my_xabs - darwin_curdir=`pwd` - func_basename "$darwin_archive" - darwin_base_archive=$func_basename_result - darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` - if test -n "$darwin_arches"; then - darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` - darwin_arch= - func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" - for darwin_arch in $darwin_arches; do - func_mkdir_p "unfat-$$/$darwin_base_archive-$darwin_arch" - $LIPO -thin $darwin_arch -output "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" "$darwin_archive" - cd "unfat-$$/$darwin_base_archive-$darwin_arch" - func_extract_an_archive "`pwd`" "$darwin_base_archive" - cd "$darwin_curdir" - $RM "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" - done # $darwin_arches - ## Okay now we've a bunch of thin objects, gotta fatten them up :) - darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$sed_basename" | sort -u` - darwin_file= - darwin_files= - for darwin_file in $darwin_filelist; do - darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` - $LIPO -create -output "$darwin_file" $darwin_files - done # $darwin_filelist - $RM -rf unfat-$$ - cd "$darwin_orig_dir" - else - cd $darwin_orig_dir - func_extract_an_archive "$my_xdir" "$my_xabs" - fi # $darwin_arches - } # !$opt_dry_run - ;; - *) - func_extract_an_archive "$my_xdir" "$my_xabs" - ;; - esac - my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` - done - - func_extract_archives_result=$my_oldobjs -} - - -# func_emit_wrapper [arg=no] -# -# Emit a libtool wrapper script on stdout. -# Don't directly open a file because we may want to -# incorporate the script contents within a cygwin/mingw -# wrapper executable. Must ONLY be called from within -# func_mode_link because it depends on a number of variables -# set therein. -# -# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR -# variable will take. If 'yes', then the emitted script -# will assume that the directory where it is stored is -# the $objdir directory. This is a cygwin/mingw-specific -# behavior. -func_emit_wrapper () -{ - func_emit_wrapper_arg1=${1-no} - - $ECHO "\ -#! $SHELL - -# $output - temporary wrapper script for $objdir/$outputname -# Generated by $PROGRAM (GNU $PACKAGE) $VERSION -# -# The $output program cannot be directly executed until all the libtool -# libraries that it depends on are installed. -# -# This wrapper script should never be moved out of the build directory. -# If it is, it will not operate correctly. - -# Sed substitution that helps us do robust quoting. It backslashifies -# metacharacters that are still active within double-quoted strings. -sed_quote_subst='$sed_quote_subst' - -# Be Bourne compatible -if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then - emulate sh - NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which - # is contrary to our usage. Disable this feature. - alias -g '\${1+\"\$@\"}'='\"\$@\"' - setopt NO_GLOB_SUBST -else - case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac -fi -BIN_SH=xpg4; export BIN_SH # for Tru64 -DUALCASE=1; export DUALCASE # for MKS sh - -# The HP-UX ksh and POSIX shell print the target directory to stdout -# if CDPATH is set. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -relink_command=\"$relink_command\" - -# This environment variable determines our operation mode. -if test \"\$libtool_install_magic\" = \"$magic\"; then - # install mode needs the following variables: - generated_by_libtool_version='$macro_version' - notinst_deplibs='$notinst_deplibs' -else - # When we are sourced in execute mode, \$file and \$ECHO are already set. - if test \"\$libtool_execute_magic\" != \"$magic\"; then - file=\"\$0\"" - - qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` - $ECHO "\ - -# A function that is used when there is no print builtin or printf. -func_fallback_echo () -{ - eval 'cat <<_LTECHO_EOF -\$1 -_LTECHO_EOF' -} - ECHO=\"$qECHO\" - fi - -# Very basic option parsing. These options are (a) specific to -# the libtool wrapper, (b) are identical between the wrapper -# /script/ and the wrapper /executable/ that is used only on -# windows platforms, and (c) all begin with the string "--lt-" -# (application programs are unlikely to have options that match -# this pattern). -# -# There are only two supported options: --lt-debug and -# --lt-dump-script. There is, deliberately, no --lt-help. -# -# The first argument to this parsing function should be the -# script's $0 value, followed by "$@". -lt_option_debug= -func_parse_lt_options () -{ - lt_script_arg0=\$0 - shift - for lt_opt - do - case \"\$lt_opt\" in - --lt-debug) lt_option_debug=1 ;; - --lt-dump-script) - lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` - test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. - lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` - cat \"\$lt_dump_D/\$lt_dump_F\" - exit 0 - ;; - --lt-*) - \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 - exit 1 - ;; - esac - done - - # Print the debug banner immediately: - if test -n \"\$lt_option_debug\"; then - echo \"$outputname:$output:\$LINENO: libtool wrapper (GNU $PACKAGE) $VERSION\" 1>&2 - fi -} - -# Used when --lt-debug. Prints its arguments to stdout -# (redirection is the responsibility of the caller) -func_lt_dump_args () -{ - lt_dump_args_N=1; - for lt_arg - do - \$ECHO \"$outputname:$output:\$LINENO: newargv[\$lt_dump_args_N]: \$lt_arg\" - lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` - done -} - -# Core function for launching the target application -func_exec_program_core () -{ -" - case $host in - # Backslashes separate directories on plain windows - *-*-mingw | *-*-os2* | *-cegcc*) - $ECHO "\ - if test -n \"\$lt_option_debug\"; then - \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir\\\\\$program\" 1>&2 - func_lt_dump_args \${1+\"\$@\"} 1>&2 - fi - exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} -" - ;; - - *) - $ECHO "\ - if test -n \"\$lt_option_debug\"; then - \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir/\$program\" 1>&2 - func_lt_dump_args \${1+\"\$@\"} 1>&2 - fi - exec \"\$progdir/\$program\" \${1+\"\$@\"} -" - ;; - esac - $ECHO "\ - \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 - exit 1 -} - -# A function to encapsulate launching the target application -# Strips options in the --lt-* namespace from \$@ and -# launches target application with the remaining arguments. -func_exec_program () -{ - case \" \$* \" in - *\\ --lt-*) - for lt_wr_arg - do - case \$lt_wr_arg in - --lt-*) ;; - *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; - esac - shift - done ;; - esac - func_exec_program_core \${1+\"\$@\"} -} - - # Parse options - func_parse_lt_options \"\$0\" \${1+\"\$@\"} - - # Find the directory that this script lives in. - thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` - test \"x\$thisdir\" = \"x\$file\" && thisdir=. - - # Follow symbolic links until we get to the real thisdir. - file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` - while test -n \"\$file\"; do - destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` - - # If there was a directory component, then change thisdir. - if test \"x\$destdir\" != \"x\$file\"; then - case \"\$destdir\" in - [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; - *) thisdir=\"\$thisdir/\$destdir\" ;; - esac - fi - - file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` - file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` - done - - # Usually 'no', except on cygwin/mingw when embedded into - # the cwrapper. - WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 - if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then - # special case for '.' - if test \"\$thisdir\" = \".\"; then - thisdir=\`pwd\` - fi - # remove .libs from thisdir - case \"\$thisdir\" in - *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; - $objdir ) thisdir=. ;; - esac - fi - - # Try to get the absolute directory name. - absdir=\`cd \"\$thisdir\" && pwd\` - test -n \"\$absdir\" && thisdir=\"\$absdir\" -" - - if test yes = "$fast_install"; then - $ECHO "\ - program=lt-'$outputname'$exeext - progdir=\"\$thisdir/$objdir\" - - if test ! -f \"\$progdir/\$program\" || - { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | $SED 1q\`; \\ - test \"X\$file\" != \"X\$progdir/\$program\"; }; then - - file=\"\$\$-\$program\" - - if test ! -d \"\$progdir\"; then - $MKDIR \"\$progdir\" - else - $RM \"\$progdir/\$file\" - fi" - - $ECHO "\ - - # relink executable if necessary - if test -n \"\$relink_command\"; then - if relink_command_output=\`eval \$relink_command 2>&1\`; then : - else - \$ECHO \"\$relink_command_output\" >&2 - $RM \"\$progdir/\$file\" - exit 1 - fi - fi - - $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || - { $RM \"\$progdir/\$program\"; - $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } - $RM \"\$progdir/\$file\" - fi" - else - $ECHO "\ - program='$outputname' - progdir=\"\$thisdir/$objdir\" -" - fi - - $ECHO "\ - - if test -f \"\$progdir/\$program\"; then" - - # fixup the dll searchpath if we need to. - # - # Fix the DLL searchpath if we need to. Do this before prepending - # to shlibpath, because on Windows, both are PATH and uninstalled - # libraries must come first. - if test -n "$dllsearchpath"; then - $ECHO "\ - # Add the dll search path components to the executable PATH - PATH=$dllsearchpath:\$PATH -" - fi - - # Export our shlibpath_var if we have one. - if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then - $ECHO "\ - # Add our own library path to $shlibpath_var - $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" - - # Some systems cannot cope with colon-terminated $shlibpath_var - # The second colon is a workaround for a bug in BeOS R4 sed - $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` - - export $shlibpath_var -" - fi - - $ECHO "\ - if test \"\$libtool_execute_magic\" != \"$magic\"; then - # Run the actual program with our arguments. - func_exec_program \${1+\"\$@\"} - fi - else - # The program doesn't exist. - \$ECHO \"\$0: error: '\$progdir/\$program' does not exist\" 1>&2 - \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 - \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 - exit 1 - fi -fi\ -" -} - - -# func_emit_cwrapperexe_src -# emit the source code for a wrapper executable on stdout -# Must ONLY be called from within func_mode_link because -# it depends on a number of variable set therein. -func_emit_cwrapperexe_src () -{ - cat < -#include -#ifdef _MSC_VER -# include -# include -# include -#else -# include -# include -# ifdef __CYGWIN__ -# include -# endif -#endif -#include -#include -#include -#include -#include -#include -#include -#include - -#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) - -/* declarations of non-ANSI functions */ -#if defined __MINGW32__ -# ifdef __STRICT_ANSI__ -int _putenv (const char *); -# endif -#elif defined __CYGWIN__ -# ifdef __STRICT_ANSI__ -char *realpath (const char *, char *); -int putenv (char *); -int setenv (const char *, const char *, int); -# endif -/* #elif defined other_platform || defined ... */ -#endif - -/* portability defines, excluding path handling macros */ -#if defined _MSC_VER -# define setmode _setmode -# define stat _stat -# define chmod _chmod -# define getcwd _getcwd -# define putenv _putenv -# define S_IXUSR _S_IEXEC -#elif defined __MINGW32__ -# define setmode _setmode -# define stat _stat -# define chmod _chmod -# define getcwd _getcwd -# define putenv _putenv -#elif defined __CYGWIN__ -# define HAVE_SETENV -# define FOPEN_WB "wb" -/* #elif defined other platforms ... */ -#endif - -#if defined PATH_MAX -# define LT_PATHMAX PATH_MAX -#elif defined MAXPATHLEN -# define LT_PATHMAX MAXPATHLEN -#else -# define LT_PATHMAX 1024 -#endif - -#ifndef S_IXOTH -# define S_IXOTH 0 -#endif -#ifndef S_IXGRP -# define S_IXGRP 0 -#endif - -/* path handling portability macros */ -#ifndef DIR_SEPARATOR -# define DIR_SEPARATOR '/' -# define PATH_SEPARATOR ':' -#endif - -#if defined _WIN32 || defined __MSDOS__ || defined __DJGPP__ || \ - defined __OS2__ -# define HAVE_DOS_BASED_FILE_SYSTEM -# define FOPEN_WB "wb" -# ifndef DIR_SEPARATOR_2 -# define DIR_SEPARATOR_2 '\\' -# endif -# ifndef PATH_SEPARATOR_2 -# define PATH_SEPARATOR_2 ';' -# endif -#endif - -#ifndef DIR_SEPARATOR_2 -# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) -#else /* DIR_SEPARATOR_2 */ -# define IS_DIR_SEPARATOR(ch) \ - (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) -#endif /* DIR_SEPARATOR_2 */ - -#ifndef PATH_SEPARATOR_2 -# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) -#else /* PATH_SEPARATOR_2 */ -# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) -#endif /* PATH_SEPARATOR_2 */ - -#ifndef FOPEN_WB -# define FOPEN_WB "w" -#endif -#ifndef _O_BINARY -# define _O_BINARY 0 -#endif - -#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) -#define XFREE(stale) do { \ - if (stale) { free (stale); stale = 0; } \ -} while (0) - -#if defined LT_DEBUGWRAPPER -static int lt_debug = 1; -#else -static int lt_debug = 0; -#endif - -const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ - -void *xmalloc (size_t num); -char *xstrdup (const char *string); -const char *base_name (const char *name); -char *find_executable (const char *wrapper); -char *chase_symlinks (const char *pathspec); -int make_executable (const char *path); -int check_executable (const char *path); -char *strendzap (char *str, const char *pat); -void lt_debugprintf (const char *file, int line, const char *fmt, ...); -void lt_fatal (const char *file, int line, const char *message, ...); -static const char *nonnull (const char *s); -static const char *nonempty (const char *s); -void lt_setenv (const char *name, const char *value); -char *lt_extend_str (const char *orig_value, const char *add, int to_end); -void lt_update_exe_path (const char *name, const char *value); -void lt_update_lib_path (const char *name, const char *value); -char **prepare_spawn (char **argv); -void lt_dump_script (FILE *f); -EOF - - cat <= 0) - && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) - return 1; - else - return 0; -} - -int -make_executable (const char *path) -{ - int rval = 0; - struct stat st; - - lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", - nonempty (path)); - if ((!path) || (!*path)) - return 0; - - if (stat (path, &st) >= 0) - { - rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); - } - return rval; -} - -/* Searches for the full path of the wrapper. Returns - newly allocated full path name if found, NULL otherwise - Does not chase symlinks, even on platforms that support them. -*/ -char * -find_executable (const char *wrapper) -{ - int has_slash = 0; - const char *p; - const char *p_next; - /* static buffer for getcwd */ - char tmp[LT_PATHMAX + 1]; - size_t tmp_len; - char *concat_name; - - lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", - nonempty (wrapper)); - - if ((wrapper == NULL) || (*wrapper == '\0')) - return NULL; - - /* Absolute path? */ -#if defined HAVE_DOS_BASED_FILE_SYSTEM - if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') - { - concat_name = xstrdup (wrapper); - if (check_executable (concat_name)) - return concat_name; - XFREE (concat_name); - } - else - { -#endif - if (IS_DIR_SEPARATOR (wrapper[0])) - { - concat_name = xstrdup (wrapper); - if (check_executable (concat_name)) - return concat_name; - XFREE (concat_name); - } -#if defined HAVE_DOS_BASED_FILE_SYSTEM - } -#endif - - for (p = wrapper; *p; p++) - if (*p == '/') - { - has_slash = 1; - break; - } - if (!has_slash) - { - /* no slashes; search PATH */ - const char *path = getenv ("PATH"); - if (path != NULL) - { - for (p = path; *p; p = p_next) - { - const char *q; - size_t p_len; - for (q = p; *q; q++) - if (IS_PATH_SEPARATOR (*q)) - break; - p_len = (size_t) (q - p); - p_next = (*q == '\0' ? q : q + 1); - if (p_len == 0) - { - /* empty path: current directory */ - if (getcwd (tmp, LT_PATHMAX) == NULL) - lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", - nonnull (strerror (errno))); - tmp_len = strlen (tmp); - concat_name = - XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); - memcpy (concat_name, tmp, tmp_len); - concat_name[tmp_len] = '/'; - strcpy (concat_name + tmp_len + 1, wrapper); - } - else - { - concat_name = - XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); - memcpy (concat_name, p, p_len); - concat_name[p_len] = '/'; - strcpy (concat_name + p_len + 1, wrapper); - } - if (check_executable (concat_name)) - return concat_name; - XFREE (concat_name); - } - } - /* not found in PATH; assume curdir */ - } - /* Relative path | not found in path: prepend cwd */ - if (getcwd (tmp, LT_PATHMAX) == NULL) - lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", - nonnull (strerror (errno))); - tmp_len = strlen (tmp); - concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); - memcpy (concat_name, tmp, tmp_len); - concat_name[tmp_len] = '/'; - strcpy (concat_name + tmp_len + 1, wrapper); - - if (check_executable (concat_name)) - return concat_name; - XFREE (concat_name); - return NULL; -} - -char * -chase_symlinks (const char *pathspec) -{ -#ifndef S_ISLNK - return xstrdup (pathspec); -#else - char buf[LT_PATHMAX]; - struct stat s; - char *tmp_pathspec = xstrdup (pathspec); - char *p; - int has_symlinks = 0; - while (strlen (tmp_pathspec) && !has_symlinks) - { - lt_debugprintf (__FILE__, __LINE__, - "checking path component for symlinks: %s\n", - tmp_pathspec); - if (lstat (tmp_pathspec, &s) == 0) - { - if (S_ISLNK (s.st_mode) != 0) - { - has_symlinks = 1; - break; - } - - /* search backwards for last DIR_SEPARATOR */ - p = tmp_pathspec + strlen (tmp_pathspec) - 1; - while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) - p--; - if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) - { - /* no more DIR_SEPARATORS left */ - break; - } - *p = '\0'; - } - else - { - lt_fatal (__FILE__, __LINE__, - "error accessing file \"%s\": %s", - tmp_pathspec, nonnull (strerror (errno))); - } - } - XFREE (tmp_pathspec); - - if (!has_symlinks) - { - return xstrdup (pathspec); - } - - tmp_pathspec = realpath (pathspec, buf); - if (tmp_pathspec == 0) - { - lt_fatal (__FILE__, __LINE__, - "could not follow symlinks for %s", pathspec); - } - return xstrdup (tmp_pathspec); -#endif -} - -char * -strendzap (char *str, const char *pat) -{ - size_t len, patlen; - - assert (str != NULL); - assert (pat != NULL); - - len = strlen (str); - patlen = strlen (pat); - - if (patlen <= len) - { - str += len - patlen; - if (STREQ (str, pat)) - *str = '\0'; - } - return str; -} - -void -lt_debugprintf (const char *file, int line, const char *fmt, ...) -{ - va_list args; - if (lt_debug) - { - (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); - va_start (args, fmt); - (void) vfprintf (stderr, fmt, args); - va_end (args); - } -} - -static void -lt_error_core (int exit_status, const char *file, - int line, const char *mode, - const char *message, va_list ap) -{ - fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); - vfprintf (stderr, message, ap); - fprintf (stderr, ".\n"); - - if (exit_status >= 0) - exit (exit_status); -} - -void -lt_fatal (const char *file, int line, const char *message, ...) -{ - va_list ap; - va_start (ap, message); - lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); - va_end (ap); -} - -static const char * -nonnull (const char *s) -{ - return s ? s : "(null)"; -} - -static const char * -nonempty (const char *s) -{ - return (s && !*s) ? "(empty)" : nonnull (s); -} - -void -lt_setenv (const char *name, const char *value) -{ - lt_debugprintf (__FILE__, __LINE__, - "(lt_setenv) setting '%s' to '%s'\n", - nonnull (name), nonnull (value)); - { -#ifdef HAVE_SETENV - /* always make a copy, for consistency with !HAVE_SETENV */ - char *str = xstrdup (value); - setenv (name, str, 1); -#else - size_t len = strlen (name) + 1 + strlen (value) + 1; - char *str = XMALLOC (char, len); - sprintf (str, "%s=%s", name, value); - if (putenv (str) != EXIT_SUCCESS) - { - XFREE (str); - } -#endif - } -} - -char * -lt_extend_str (const char *orig_value, const char *add, int to_end) -{ - char *new_value; - if (orig_value && *orig_value) - { - size_t orig_value_len = strlen (orig_value); - size_t add_len = strlen (add); - new_value = XMALLOC (char, add_len + orig_value_len + 1); - if (to_end) - { - strcpy (new_value, orig_value); - strcpy (new_value + orig_value_len, add); - } - else - { - strcpy (new_value, add); - strcpy (new_value + add_len, orig_value); - } - } - else - { - new_value = xstrdup (add); - } - return new_value; -} - -void -lt_update_exe_path (const char *name, const char *value) -{ - lt_debugprintf (__FILE__, __LINE__, - "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", - nonnull (name), nonnull (value)); - - if (name && *name && value && *value) - { - char *new_value = lt_extend_str (getenv (name), value, 0); - /* some systems can't cope with a ':'-terminated path #' */ - size_t len = strlen (new_value); - while ((len > 0) && IS_PATH_SEPARATOR (new_value[len-1])) - { - new_value[--len] = '\0'; - } - lt_setenv (name, new_value); - XFREE (new_value); - } -} - -void -lt_update_lib_path (const char *name, const char *value) -{ - lt_debugprintf (__FILE__, __LINE__, - "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", - nonnull (name), nonnull (value)); - - if (name && *name && value && *value) - { - char *new_value = lt_extend_str (getenv (name), value, 0); - lt_setenv (name, new_value); - XFREE (new_value); - } -} - -EOF - case $host_os in - mingw*) - cat <<"EOF" - -/* Prepares an argument vector before calling spawn(). - Note that spawn() does not by itself call the command interpreter - (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : - ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); - GetVersionEx(&v); - v.dwPlatformId == VER_PLATFORM_WIN32_NT; - }) ? "cmd.exe" : "command.com"). - Instead it simply concatenates the arguments, separated by ' ', and calls - CreateProcess(). We must quote the arguments since Win32 CreateProcess() - interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a - special way: - - Space and tab are interpreted as delimiters. They are not treated as - delimiters if they are surrounded by double quotes: "...". - - Unescaped double quotes are removed from the input. Their only effect is - that within double quotes, space and tab are treated like normal - characters. - - Backslashes not followed by double quotes are not special. - - But 2*n+1 backslashes followed by a double quote become - n backslashes followed by a double quote (n >= 0): - \" -> " - \\\" -> \" - \\\\\" -> \\" - */ -#define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" -#define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" -char ** -prepare_spawn (char **argv) -{ - size_t argc; - char **new_argv; - size_t i; - - /* Count number of arguments. */ - for (argc = 0; argv[argc] != NULL; argc++) - ; - - /* Allocate new argument vector. */ - new_argv = XMALLOC (char *, argc + 1); - - /* Put quoted arguments into the new argument vector. */ - for (i = 0; i < argc; i++) - { - const char *string = argv[i]; - - if (string[0] == '\0') - new_argv[i] = xstrdup ("\"\""); - else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) - { - int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); - size_t length; - unsigned int backslashes; - const char *s; - char *quoted_string; - char *p; - - length = 0; - backslashes = 0; - if (quote_around) - length++; - for (s = string; *s != '\0'; s++) - { - char c = *s; - if (c == '"') - length += backslashes + 1; - length++; - if (c == '\\') - backslashes++; - else - backslashes = 0; - } - if (quote_around) - length += backslashes + 1; - - quoted_string = XMALLOC (char, length + 1); - - p = quoted_string; - backslashes = 0; - if (quote_around) - *p++ = '"'; - for (s = string; *s != '\0'; s++) - { - char c = *s; - if (c == '"') - { - unsigned int j; - for (j = backslashes + 1; j > 0; j--) - *p++ = '\\'; - } - *p++ = c; - if (c == '\\') - backslashes++; - else - backslashes = 0; - } - if (quote_around) - { - unsigned int j; - for (j = backslashes; j > 0; j--) - *p++ = '\\'; - *p++ = '"'; - } - *p = '\0'; - - new_argv[i] = quoted_string; - } - else - new_argv[i] = (char *) string; - } - new_argv[argc] = NULL; - - return new_argv; -} -EOF - ;; - esac - - cat <<"EOF" -void lt_dump_script (FILE* f) -{ -EOF - func_emit_wrapper yes | - $SED -n -e ' -s/^\(.\{79\}\)\(..*\)/\1\ -\2/ -h -s/\([\\"]\)/\\\1/g -s/$/\\n/ -s/\([^\n]*\).*/ fputs ("\1", f);/p -g -D' - cat <<"EOF" -} -EOF -} -# end: func_emit_cwrapperexe_src - -# func_win32_import_lib_p ARG -# True if ARG is an import lib, as indicated by $file_magic_cmd -func_win32_import_lib_p () -{ - $debug_cmd - - case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in - *import*) : ;; - *) false ;; - esac -} - -# func_suncc_cstd_abi -# !!ONLY CALL THIS FOR SUN CC AFTER $compile_command IS FULLY EXPANDED!! -# Several compiler flags select an ABI that is incompatible with the -# Cstd library. Avoid specifying it if any are in CXXFLAGS. -func_suncc_cstd_abi () -{ - $debug_cmd - - case " $compile_command " in - *" -compat=g "*|*\ -std=c++[0-9][0-9]\ *|*" -library=stdcxx4 "*|*" -library=stlport4 "*) - suncc_use_cstd_abi=no - ;; - *) - suncc_use_cstd_abi=yes - ;; - esac -} - -# func_mode_link arg... -func_mode_link () -{ - $debug_cmd - - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) - # It is impossible to link a dll without this setting, and - # we shouldn't force the makefile maintainer to figure out - # what system we are compiling for in order to pass an extra - # flag for every libtool invocation. - # allow_undefined=no - - # FIXME: Unfortunately, there are problems with the above when trying - # to make a dll that has undefined symbols, in which case not - # even a static library is built. For now, we need to specify - # -no-undefined on the libtool link line when we can be certain - # that all symbols are satisfied, otherwise we get a static library. - allow_undefined=yes - ;; - *) - allow_undefined=yes - ;; - esac - libtool_args=$nonopt - base_compile="$nonopt $@" - compile_command=$nonopt - finalize_command=$nonopt - - compile_rpath= - finalize_rpath= - compile_shlibpath= - finalize_shlibpath= - convenience= - old_convenience= - deplibs= - old_deplibs= - compiler_flags= - linker_flags= - dllsearchpath= - lib_search_path=`pwd` - inst_prefix_dir= - new_inherited_linker_flags= - - avoid_version=no - bindir= - dlfiles= - dlprefiles= - dlself=no - export_dynamic=no - export_symbols= - export_symbols_regex= - generated= - libobjs= - ltlibs= - module=no - no_install=no - objs= - os2dllname= - non_pic_objects= - precious_files_regex= - prefer_static_libs=no - preload=false - prev= - prevarg= - release= - rpath= - xrpath= - perm_rpath= - temp_rpath= - thread_safe=no - vinfo= - vinfo_number=no - weak_libs= - single_module=$wl-single_module - func_infer_tag $base_compile - - # We need to know -static, to get the right output filenames. - for arg - do - case $arg in - -shared) - test yes != "$build_libtool_libs" \ - && func_fatal_configuration "cannot build a shared library" - build_old_libs=no - break - ;; - -all-static | -static | -static-libtool-libs) - case $arg in - -all-static) - if test yes = "$build_libtool_libs" && test -z "$link_static_flag"; then - func_warning "complete static linking is impossible in this configuration" - fi - if test -n "$link_static_flag"; then - dlopen_self=$dlopen_self_static - fi - prefer_static_libs=yes - ;; - -static) - if test -z "$pic_flag" && test -n "$link_static_flag"; then - dlopen_self=$dlopen_self_static - fi - prefer_static_libs=built - ;; - -static-libtool-libs) - if test -z "$pic_flag" && test -n "$link_static_flag"; then - dlopen_self=$dlopen_self_static - fi - prefer_static_libs=yes - ;; - esac - build_libtool_libs=no - build_old_libs=yes - break - ;; - esac - done - - # See if our shared archives depend on static archives. - test -n "$old_archive_from_new_cmds" && build_old_libs=yes - - # Go through the arguments, transforming them on the way. - while test "$#" -gt 0; do - arg=$1 - shift - func_quote_for_eval "$arg" - qarg=$func_quote_for_eval_unquoted_result - func_append libtool_args " $func_quote_for_eval_result" - - # If the previous option needs an argument, assign it. - if test -n "$prev"; then - case $prev in - output) - func_append compile_command " @OUTPUT@" - func_append finalize_command " @OUTPUT@" - ;; - esac - - case $prev in - bindir) - bindir=$arg - prev= - continue - ;; - dlfiles|dlprefiles) - $preload || { - # Add the symbol object into the linking commands. - func_append compile_command " @SYMFILE@" - func_append finalize_command " @SYMFILE@" - preload=: - } - case $arg in - *.la | *.lo) ;; # We handle these cases below. - force) - if test no = "$dlself"; then - dlself=needless - export_dynamic=yes - fi - prev= - continue - ;; - self) - if test dlprefiles = "$prev"; then - dlself=yes - elif test dlfiles = "$prev" && test yes != "$dlopen_self"; then - dlself=yes - else - dlself=needless - export_dynamic=yes - fi - prev= - continue - ;; - *) - if test dlfiles = "$prev"; then - func_append dlfiles " $arg" - else - func_append dlprefiles " $arg" - fi - prev= - continue - ;; - esac - ;; - expsyms) - export_symbols=$arg - test -f "$arg" \ - || func_fatal_error "symbol file '$arg' does not exist" - prev= - continue - ;; - expsyms_regex) - export_symbols_regex=$arg - prev= - continue - ;; - framework) - case $host in - *-*-darwin*) - case "$deplibs " in - *" $qarg.ltframework "*) ;; - *) func_append deplibs " $qarg.ltframework" # this is fixed later - ;; - esac - ;; - esac - prev= - continue - ;; - inst_prefix) - inst_prefix_dir=$arg - prev= - continue - ;; - mllvm) - # Clang does not use LLVM to link, so we can simply discard any - # '-mllvm $arg' options when doing the link step. - prev= - continue - ;; - objectlist) - if test -f "$arg"; then - save_arg=$arg - moreargs= - for fil in `cat "$save_arg"` - do -# func_append moreargs " $fil" - arg=$fil - # A libtool-controlled object. - - # Check to see that this really is a libtool object. - if func_lalib_unsafe_p "$arg"; then - pic_object= - non_pic_object= - - # Read the .lo file - func_source "$arg" - - if test -z "$pic_object" || - test -z "$non_pic_object" || - test none = "$pic_object" && - test none = "$non_pic_object"; then - func_fatal_error "cannot find name of object for '$arg'" - fi - - # Extract subdirectory from the argument. - func_dirname "$arg" "/" "" - xdir=$func_dirname_result - - if test none != "$pic_object"; then - # Prepend the subdirectory the object is found in. - pic_object=$xdir$pic_object - - if test dlfiles = "$prev"; then - if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then - func_append dlfiles " $pic_object" - prev= - continue - else - # If libtool objects are unsupported, then we need to preload. - prev=dlprefiles - fi - fi - - # CHECK ME: I think I busted this. -Ossama - if test dlprefiles = "$prev"; then - # Preload the old-style object. - func_append dlprefiles " $pic_object" - prev= - fi - - # A PIC object. - func_append libobjs " $pic_object" - arg=$pic_object - fi - - # Non-PIC object. - if test none != "$non_pic_object"; then - # Prepend the subdirectory the object is found in. - non_pic_object=$xdir$non_pic_object - - # A standard non-PIC object - func_append non_pic_objects " $non_pic_object" - if test -z "$pic_object" || test none = "$pic_object"; then - arg=$non_pic_object - fi - else - # If the PIC object exists, use it instead. - # $xdir was prepended to $pic_object above. - non_pic_object=$pic_object - func_append non_pic_objects " $non_pic_object" - fi - else - # Only an error if not doing a dry-run. - if $opt_dry_run; then - # Extract subdirectory from the argument. - func_dirname "$arg" "/" "" - xdir=$func_dirname_result - - func_lo2o "$arg" - pic_object=$xdir$objdir/$func_lo2o_result - non_pic_object=$xdir$func_lo2o_result - func_append libobjs " $pic_object" - func_append non_pic_objects " $non_pic_object" - else - func_fatal_error "'$arg' is not a valid libtool object" - fi - fi - done - else - func_fatal_error "link input file '$arg' does not exist" - fi - arg=$save_arg - prev= - continue - ;; - os2dllname) - os2dllname=$arg - prev= - continue - ;; - precious_regex) - precious_files_regex=$arg - prev= - continue - ;; - release) - release=-$arg - prev= - continue - ;; - rpath | xrpath) - # We need an absolute path. - case $arg in - [\\/]* | [A-Za-z]:[\\/]*) ;; - *) - func_fatal_error "only absolute run-paths are allowed" - ;; - esac - if test rpath = "$prev"; then - case "$rpath " in - *" $arg "*) ;; - *) func_append rpath " $arg" ;; - esac - else - case "$xrpath " in - *" $arg "*) ;; - *) func_append xrpath " $arg" ;; - esac - fi - prev= - continue - ;; - shrext) - shrext_cmds=$arg - prev= - continue - ;; - weak) - func_append weak_libs " $arg" - prev= - continue - ;; - xcclinker) - func_append linker_flags " $qarg" - func_append compiler_flags " $qarg" - prev= - func_append compile_command " $qarg" - func_append finalize_command " $qarg" - continue - ;; - xcompiler) - func_append compiler_flags " $qarg" - prev= - func_append compile_command " $qarg" - func_append finalize_command " $qarg" - continue - ;; - xlinker) - func_append linker_flags " $qarg" - func_append compiler_flags " $wl$qarg" - prev= - func_append compile_command " $wl$qarg" - func_append finalize_command " $wl$qarg" - continue - ;; - *) - eval "$prev=\"\$arg\"" - prev= - continue - ;; - esac - fi # test -n "$prev" - - prevarg=$arg - - case $arg in - -all-static) - if test -n "$link_static_flag"; then - # See comment for -static flag below, for more details. - func_append compile_command " $link_static_flag" - func_append finalize_command " $link_static_flag" - fi - continue - ;; - - -allow-undefined) - # FIXME: remove this flag sometime in the future. - func_fatal_error "'-allow-undefined' must not be used because it is the default" - ;; - - -avoid-version) - avoid_version=yes - continue - ;; - - -bindir) - prev=bindir - continue - ;; - - -dlopen) - prev=dlfiles - continue - ;; - - -dlpreopen) - prev=dlprefiles - continue - ;; - - -export-dynamic) - export_dynamic=yes - continue - ;; - - -export-symbols | -export-symbols-regex) - if test -n "$export_symbols" || test -n "$export_symbols_regex"; then - func_fatal_error "more than one -exported-symbols argument is not allowed" - fi - if test X-export-symbols = "X$arg"; then - prev=expsyms - else - prev=expsyms_regex - fi - continue - ;; - - -framework) - prev=framework - continue - ;; - - -inst-prefix-dir) - prev=inst_prefix - continue - ;; - - # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* - # so, if we see these flags be careful not to treat them like -L - -L[A-Z][A-Z]*:*) - case $with_gcc/$host in - no/*-*-irix* | /*-*-irix*) - func_append compile_command " $arg" - func_append finalize_command " $arg" - ;; - esac - continue - ;; - - -L*) - func_stripname "-L" '' "$arg" - if test -z "$func_stripname_result"; then - if test "$#" -gt 0; then - func_fatal_error "require no space between '-L' and '$1'" - else - func_fatal_error "need path for '-L' option" - fi - fi - func_resolve_sysroot "$func_stripname_result" - dir=$func_resolve_sysroot_result - # We need an absolute path. - case $dir in - [\\/]* | [A-Za-z]:[\\/]*) ;; - *) - absdir=`cd "$dir" && pwd` - test -z "$absdir" && \ - func_fatal_error "cannot determine absolute directory name of '$dir'" - dir=$absdir - ;; - esac - case "$deplibs " in - *" -L$dir "* | *" $arg "*) - # Will only happen for absolute or sysroot arguments - ;; - *) - # Preserve sysroot, but never include relative directories - case $dir in - [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; - *) func_append deplibs " -L$dir" ;; - esac - func_append lib_search_path " $dir" - ;; - esac - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) - testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` - case :$dllsearchpath: in - *":$dir:"*) ;; - ::) dllsearchpath=$dir;; - *) func_append dllsearchpath ":$dir";; - esac - case :$dllsearchpath: in - *":$testbindir:"*) ;; - ::) dllsearchpath=$testbindir;; - *) func_append dllsearchpath ":$testbindir";; - esac - ;; - esac - continue - ;; - - -l*) - if test X-lc = "X$arg" || test X-lm = "X$arg"; then - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) - # These systems don't actually have a C or math library (as such) - continue - ;; - *-*-os2*) - # These systems don't actually have a C library (as such) - test X-lc = "X$arg" && continue - ;; - *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*) - # Do not include libc due to us having libc/libc_r. - test X-lc = "X$arg" && continue - ;; - *-*-rhapsody* | *-*-darwin1.[012]) - # Rhapsody C and math libraries are in the System framework - func_append deplibs " System.ltframework" - continue - ;; - *-*-sco3.2v5* | *-*-sco5v6*) - # Causes problems with __ctype - test X-lc = "X$arg" && continue - ;; - *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) - # Compiler inserts libc in the correct place for threads to work - test X-lc = "X$arg" && continue - ;; - esac - elif test X-lc_r = "X$arg"; then - case $host in - *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*) - # Do not include libc_r directly, use -pthread flag. - continue - ;; - esac - fi - func_append deplibs " $arg" - continue - ;; - - -mllvm) - prev=mllvm - continue - ;; - - -module) - module=yes - continue - ;; - - # Tru64 UNIX uses -model [arg] to determine the layout of C++ - # classes, name mangling, and exception handling. - # Darwin uses the -arch flag to determine output architecture. - -model|-arch|-isysroot|--sysroot) - func_append compiler_flags " $arg" - func_append compile_command " $arg" - func_append finalize_command " $arg" - prev=xcompiler - continue - ;; - - -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ - |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) - func_append compiler_flags " $arg" - func_append compile_command " $arg" - func_append finalize_command " $arg" - case "$new_inherited_linker_flags " in - *" $arg "*) ;; - * ) func_append new_inherited_linker_flags " $arg" ;; - esac - continue - ;; - - -multi_module) - single_module=$wl-multi_module - continue - ;; - - -no-fast-install) - fast_install=no - continue - ;; - - -no-install) - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) - # The PATH hackery in wrapper scripts is required on Windows - # and Darwin in order for the loader to find any dlls it needs. - func_warning "'-no-install' is ignored for $host" - func_warning "assuming '-no-fast-install' instead" - fast_install=no - ;; - *) no_install=yes ;; - esac - continue - ;; - - -no-undefined) - allow_undefined=no - continue - ;; - - -objectlist) - prev=objectlist - continue - ;; - - -os2dllname) - prev=os2dllname - continue - ;; - - -o) prev=output ;; - - -precious-files-regex) - prev=precious_regex - continue - ;; - - -release) - prev=release - continue - ;; - - -rpath) - prev=rpath - continue - ;; - - -R) - prev=xrpath - continue - ;; - - -R*) - func_stripname '-R' '' "$arg" - dir=$func_stripname_result - # We need an absolute path. - case $dir in - [\\/]* | [A-Za-z]:[\\/]*) ;; - =*) - func_stripname '=' '' "$dir" - dir=$lt_sysroot$func_stripname_result - ;; - *) - func_fatal_error "only absolute run-paths are allowed" - ;; - esac - case "$xrpath " in - *" $dir "*) ;; - *) func_append xrpath " $dir" ;; - esac - continue - ;; - - -shared) - # The effects of -shared are defined in a previous loop. - continue - ;; - - -shrext) - prev=shrext - continue - ;; - - -static | -static-libtool-libs) - # The effects of -static are defined in a previous loop. - # We used to do the same as -all-static on platforms that - # didn't have a PIC flag, but the assumption that the effects - # would be equivalent was wrong. It would break on at least - # Digital Unix and AIX. - continue - ;; - - -thread-safe) - thread_safe=yes - continue - ;; - - -version-info) - prev=vinfo - continue - ;; - - -version-number) - prev=vinfo - vinfo_number=yes - continue - ;; - - -weak) - prev=weak - continue - ;; - - -Wc,*) - func_stripname '-Wc,' '' "$arg" - args=$func_stripname_result - arg= - save_ifs=$IFS; IFS=, - for flag in $args; do - IFS=$save_ifs - func_quote_for_eval "$flag" - func_append arg " $func_quote_for_eval_result" - func_append compiler_flags " $func_quote_for_eval_result" - done - IFS=$save_ifs - func_stripname ' ' '' "$arg" - arg=$func_stripname_result - ;; - - -Wl,*) - func_stripname '-Wl,' '' "$arg" - args=$func_stripname_result - arg= - save_ifs=$IFS; IFS=, - for flag in $args; do - IFS=$save_ifs - func_quote_for_eval "$flag" - func_append arg " $wl$func_quote_for_eval_result" - func_append compiler_flags " $wl$func_quote_for_eval_result" - func_append linker_flags " $func_quote_for_eval_result" - done - IFS=$save_ifs - func_stripname ' ' '' "$arg" - arg=$func_stripname_result - ;; - - -Xcompiler) - prev=xcompiler - continue - ;; - - -Xlinker) - prev=xlinker - continue - ;; - - -XCClinker) - prev=xcclinker - continue - ;; - - # -msg_* for osf cc - -msg_*) - func_quote_for_eval "$arg" - arg=$func_quote_for_eval_result - ;; - - # Flags to be passed through unchanged, with rationale: - # -64, -mips[0-9] enable 64-bit mode for the SGI compiler - # -r[0-9][0-9]* specify processor for the SGI compiler - # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler - # +DA*, +DD* enable 64-bit mode for the HP compiler - # -q* compiler args for the IBM compiler - # -m*, -t[45]*, -txscale* architecture-specific flags for GCC - # -F/path path to uninstalled frameworks, gcc on darwin - # -p, -pg, --coverage, -fprofile-* profiling flags for GCC - # -fstack-protector* stack protector flags for GCC - # @file GCC response files - # -tp=* Portland pgcc target processor selection - # --sysroot=* for sysroot support - # -O*, -g*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization - # -specs=* GCC specs files - # -stdlib=* select c++ std lib with clang - # -fsanitize=* Clang/GCC memory and address sanitizer - # -fuse-ld=* Linker select flags for GCC - -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ - -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ - -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*| \ - -specs=*|-fsanitize=*|-fuse-ld=*) - func_quote_for_eval "$arg" - arg=$func_quote_for_eval_result - func_append compile_command " $arg" - func_append finalize_command " $arg" - func_append compiler_flags " $arg" - continue - ;; - - -Z*) - if test os2 = "`expr $host : '.*\(os2\)'`"; then - # OS/2 uses -Zxxx to specify OS/2-specific options - compiler_flags="$compiler_flags $arg" - func_append compile_command " $arg" - func_append finalize_command " $arg" - case $arg in - -Zlinker | -Zstack) - prev=xcompiler - ;; - esac - continue - else - # Otherwise treat like 'Some other compiler flag' below - func_quote_for_eval "$arg" - arg=$func_quote_for_eval_result - fi - ;; - - # Some other compiler flag. - -* | +*) - func_quote_for_eval "$arg" - arg=$func_quote_for_eval_result - ;; - - *.$objext) - # A standard object. - func_append objs " $arg" - ;; - - *.lo) - # A libtool-controlled object. - - # Check to see that this really is a libtool object. - if func_lalib_unsafe_p "$arg"; then - pic_object= - non_pic_object= - - # Read the .lo file - func_source "$arg" - - if test -z "$pic_object" || - test -z "$non_pic_object" || - test none = "$pic_object" && - test none = "$non_pic_object"; then - func_fatal_error "cannot find name of object for '$arg'" - fi - - # Extract subdirectory from the argument. - func_dirname "$arg" "/" "" - xdir=$func_dirname_result - - test none = "$pic_object" || { - # Prepend the subdirectory the object is found in. - pic_object=$xdir$pic_object - - if test dlfiles = "$prev"; then - if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then - func_append dlfiles " $pic_object" - prev= - continue - else - # If libtool objects are unsupported, then we need to preload. - prev=dlprefiles - fi - fi - - # CHECK ME: I think I busted this. -Ossama - if test dlprefiles = "$prev"; then - # Preload the old-style object. - func_append dlprefiles " $pic_object" - prev= - fi - - # A PIC object. - func_append libobjs " $pic_object" - arg=$pic_object - } - - # Non-PIC object. - if test none != "$non_pic_object"; then - # Prepend the subdirectory the object is found in. - non_pic_object=$xdir$non_pic_object - - # A standard non-PIC object - func_append non_pic_objects " $non_pic_object" - if test -z "$pic_object" || test none = "$pic_object"; then - arg=$non_pic_object - fi - else - # If the PIC object exists, use it instead. - # $xdir was prepended to $pic_object above. - non_pic_object=$pic_object - func_append non_pic_objects " $non_pic_object" - fi - else - # Only an error if not doing a dry-run. - if $opt_dry_run; then - # Extract subdirectory from the argument. - func_dirname "$arg" "/" "" - xdir=$func_dirname_result - - func_lo2o "$arg" - pic_object=$xdir$objdir/$func_lo2o_result - non_pic_object=$xdir$func_lo2o_result - func_append libobjs " $pic_object" - func_append non_pic_objects " $non_pic_object" - else - func_fatal_error "'$arg' is not a valid libtool object" - fi - fi - ;; - - *.$libext) - # An archive. - func_append deplibs " $arg" - func_append old_deplibs " $arg" - continue - ;; - - *.la) - # A libtool-controlled library. - - func_resolve_sysroot "$arg" - if test dlfiles = "$prev"; then - # This library was specified with -dlopen. - func_append dlfiles " $func_resolve_sysroot_result" - prev= - elif test dlprefiles = "$prev"; then - # The library was specified with -dlpreopen. - func_append dlprefiles " $func_resolve_sysroot_result" - prev= - else - func_append deplibs " $func_resolve_sysroot_result" - fi - continue - ;; - - # Some other compiler argument. - *) - # Unknown arguments in both finalize_command and compile_command need - # to be aesthetically quoted because they are evaled later. - func_quote_for_eval "$arg" - arg=$func_quote_for_eval_result - ;; - esac # arg - - # Now actually substitute the argument into the commands. - if test -n "$arg"; then - func_append compile_command " $arg" - func_append finalize_command " $arg" - fi - done # argument parsing loop - - test -n "$prev" && \ - func_fatal_help "the '$prevarg' option requires an argument" - - if test yes = "$export_dynamic" && test -n "$export_dynamic_flag_spec"; then - eval arg=\"$export_dynamic_flag_spec\" - func_append compile_command " $arg" - func_append finalize_command " $arg" - fi - - oldlibs= - # calculate the name of the file, without its directory - func_basename "$output" - outputname=$func_basename_result - libobjs_save=$libobjs - - if test -n "$shlibpath_var"; then - # get the directories listed in $shlibpath_var - eval shlib_search_path=\`\$ECHO \"\$$shlibpath_var\" \| \$SED \'s/:/ /g\'\` - else - shlib_search_path= - fi - eval sys_lib_search_path=\"$sys_lib_search_path_spec\" - eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" - - # Definition is injected by LT_CONFIG during libtool generation. - func_munge_path_list sys_lib_dlsearch_path "$LT_SYS_LIBRARY_PATH" - - func_dirname "$output" "/" "" - output_objdir=$func_dirname_result$objdir - func_to_tool_file "$output_objdir/" - tool_output_objdir=$func_to_tool_file_result - # Create the object directory. - func_mkdir_p "$output_objdir" - - # Determine the type of output - case $output in - "") - func_fatal_help "you must specify an output file" - ;; - *.$libext) linkmode=oldlib ;; - *.lo | *.$objext) linkmode=obj ;; - *.la) linkmode=lib ;; - *) linkmode=prog ;; # Anything else should be a program. - esac - - specialdeplibs= - - libs= - # Find all interdependent deplibs by searching for libraries - # that are linked more than once (e.g. -la -lb -la) - for deplib in $deplibs; do - if $opt_preserve_dup_deps; then - case "$libs " in - *" $deplib "*) func_append specialdeplibs " $deplib" ;; - esac - fi - func_append libs " $deplib" - done - - if test lib = "$linkmode"; then - libs="$predeps $libs $compiler_lib_search_path $postdeps" - - # Compute libraries that are listed more than once in $predeps - # $postdeps and mark them as special (i.e., whose duplicates are - # not to be eliminated). - pre_post_deps= - if $opt_duplicate_compiler_generated_deps; then - for pre_post_dep in $predeps $postdeps; do - case "$pre_post_deps " in - *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;; - esac - func_append pre_post_deps " $pre_post_dep" - done - fi - pre_post_deps= - fi - - deplibs= - newdependency_libs= - newlib_search_path= - need_relink=no # whether we're linking any uninstalled libtool libraries - notinst_deplibs= # not-installed libtool libraries - notinst_path= # paths that contain not-installed libtool libraries - - case $linkmode in - lib) - passes="conv dlpreopen link" - for file in $dlfiles $dlprefiles; do - case $file in - *.la) ;; - *) - func_fatal_help "libraries can '-dlopen' only libtool libraries: $file" - ;; - esac - done - ;; - prog) - compile_deplibs= - finalize_deplibs= - alldeplibs=false - newdlfiles= - newdlprefiles= - passes="conv scan dlopen dlpreopen link" - ;; - *) passes="conv" - ;; - esac - - for pass in $passes; do - # The preopen pass in lib mode reverses $deplibs; put it back here - # so that -L comes before libs that need it for instance... - if test lib,link = "$linkmode,$pass"; then - ## FIXME: Find the place where the list is rebuilt in the wrong - ## order, and fix it there properly - tmp_deplibs= - for deplib in $deplibs; do - tmp_deplibs="$deplib $tmp_deplibs" - done - deplibs=$tmp_deplibs - fi - - if test lib,link = "$linkmode,$pass" || - test prog,scan = "$linkmode,$pass"; then - libs=$deplibs - deplibs= - fi - if test prog = "$linkmode"; then - case $pass in - dlopen) libs=$dlfiles ;; - dlpreopen) libs=$dlprefiles ;; - link) - libs="$deplibs %DEPLIBS%" - test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs" - ;; - esac - fi - if test lib,dlpreopen = "$linkmode,$pass"; then - # Collect and forward deplibs of preopened libtool libs - for lib in $dlprefiles; do - # Ignore non-libtool-libs - dependency_libs= - func_resolve_sysroot "$lib" - case $lib in - *.la) func_source "$func_resolve_sysroot_result" ;; - esac - - # Collect preopened libtool deplibs, except any this library - # has declared as weak libs - for deplib in $dependency_libs; do - func_basename "$deplib" - deplib_base=$func_basename_result - case " $weak_libs " in - *" $deplib_base "*) ;; - *) func_append deplibs " $deplib" ;; - esac - done - done - libs=$dlprefiles - fi - if test dlopen = "$pass"; then - # Collect dlpreopened libraries - save_deplibs=$deplibs - deplibs= - fi - - for deplib in $libs; do - lib= - found=false - case $deplib in - -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ - |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) - if test prog,link = "$linkmode,$pass"; then - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - func_append compiler_flags " $deplib" - if test lib = "$linkmode"; then - case "$new_inherited_linker_flags " in - *" $deplib "*) ;; - * ) func_append new_inherited_linker_flags " $deplib" ;; - esac - fi - fi - continue - ;; - -l*) - if test lib != "$linkmode" && test prog != "$linkmode"; then - func_warning "'-l' is ignored for archives/objects" - continue - fi - func_stripname '-l' '' "$deplib" - name=$func_stripname_result - if test lib = "$linkmode"; then - searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" - else - searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" - fi - for searchdir in $searchdirs; do - for search_ext in .la $std_shrext .so .a; do - # Search the libtool library - lib=$searchdir/lib$name$search_ext - if test -f "$lib"; then - if test .la = "$search_ext"; then - found=: - else - found=false - fi - break 2 - fi - done - done - if $found; then - # deplib is a libtool library - # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, - # We need to do some special things here, and not later. - if test yes = "$allow_libtool_libs_with_static_runtimes"; then - case " $predeps $postdeps " in - *" $deplib "*) - if func_lalib_p "$lib"; then - library_names= - old_library= - func_source "$lib" - for l in $old_library $library_names; do - ll=$l - done - if test "X$ll" = "X$old_library"; then # only static version available - found=false - func_dirname "$lib" "" "." - ladir=$func_dirname_result - lib=$ladir/$old_library - if test prog,link = "$linkmode,$pass"; then - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - deplibs="$deplib $deplibs" - test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs" - fi - continue - fi - fi - ;; - *) ;; - esac - fi - else - # deplib doesn't seem to be a libtool library - if test prog,link = "$linkmode,$pass"; then - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - deplibs="$deplib $deplibs" - test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs" - fi - continue - fi - ;; # -l - *.ltframework) - if test prog,link = "$linkmode,$pass"; then - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - deplibs="$deplib $deplibs" - if test lib = "$linkmode"; then - case "$new_inherited_linker_flags " in - *" $deplib "*) ;; - * ) func_append new_inherited_linker_flags " $deplib" ;; - esac - fi - fi - continue - ;; - -L*) - case $linkmode in - lib) - deplibs="$deplib $deplibs" - test conv = "$pass" && continue - newdependency_libs="$deplib $newdependency_libs" - func_stripname '-L' '' "$deplib" - func_resolve_sysroot "$func_stripname_result" - func_append newlib_search_path " $func_resolve_sysroot_result" - ;; - prog) - if test conv = "$pass"; then - deplibs="$deplib $deplibs" - continue - fi - if test scan = "$pass"; then - deplibs="$deplib $deplibs" - else - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - fi - func_stripname '-L' '' "$deplib" - func_resolve_sysroot "$func_stripname_result" - func_append newlib_search_path " $func_resolve_sysroot_result" - ;; - *) - func_warning "'-L' is ignored for archives/objects" - ;; - esac # linkmode - continue - ;; # -L - -R*) - if test link = "$pass"; then - func_stripname '-R' '' "$deplib" - func_resolve_sysroot "$func_stripname_result" - dir=$func_resolve_sysroot_result - # Make sure the xrpath contains only unique directories. - case "$xrpath " in - *" $dir "*) ;; - *) func_append xrpath " $dir" ;; - esac - fi - deplibs="$deplib $deplibs" - continue - ;; - *.la) - func_resolve_sysroot "$deplib" - lib=$func_resolve_sysroot_result - ;; - *.$libext) - if test conv = "$pass"; then - deplibs="$deplib $deplibs" - continue - fi - case $linkmode in - lib) - # Linking convenience modules into shared libraries is allowed, - # but linking other static libraries is non-portable. - case " $dlpreconveniencelibs " in - *" $deplib "*) ;; - *) - valid_a_lib=false - case $deplibs_check_method in - match_pattern*) - set dummy $deplibs_check_method; shift - match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` - if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ - | $EGREP "$match_pattern_regex" > /dev/null; then - valid_a_lib=: - fi - ;; - pass_all) - valid_a_lib=: - ;; - esac - if $valid_a_lib; then - echo - $ECHO "*** Warning: Linking the shared library $output against the" - $ECHO "*** static library $deplib is not portable!" - deplibs="$deplib $deplibs" - else - echo - $ECHO "*** Warning: Trying to link with static lib archive $deplib." - echo "*** I have the capability to make that library automatically link in when" - echo "*** you link to this library. But I can only do this if you have a" - echo "*** shared version of the library, which you do not appear to have" - echo "*** because the file extensions .$libext of this argument makes me believe" - echo "*** that it is just a static archive that I should not use here." - fi - ;; - esac - continue - ;; - prog) - if test link != "$pass"; then - deplibs="$deplib $deplibs" - else - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - fi - continue - ;; - esac # linkmode - ;; # *.$libext - *.lo | *.$objext) - if test conv = "$pass"; then - deplibs="$deplib $deplibs" - elif test prog = "$linkmode"; then - if test dlpreopen = "$pass" || test yes != "$dlopen_support" || test no = "$build_libtool_libs"; then - # If there is no dlopen support or we're linking statically, - # we need to preload. - func_append newdlprefiles " $deplib" - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - func_append newdlfiles " $deplib" - fi - fi - continue - ;; - %DEPLIBS%) - alldeplibs=: - continue - ;; - esac # case $deplib - - $found || test -f "$lib" \ - || func_fatal_error "cannot find the library '$lib' or unhandled argument '$deplib'" - - # Check to see that this really is a libtool archive. - func_lalib_unsafe_p "$lib" \ - || func_fatal_error "'$lib' is not a valid libtool archive" - - func_dirname "$lib" "" "." - ladir=$func_dirname_result - - dlname= - dlopen= - dlpreopen= - libdir= - library_names= - old_library= - inherited_linker_flags= - # If the library was installed with an old release of libtool, - # it will not redefine variables installed, or shouldnotlink - installed=yes - shouldnotlink=no - avoidtemprpath= - - - # Read the .la file - func_source "$lib" - - # Convert "-framework foo" to "foo.ltframework" - if test -n "$inherited_linker_flags"; then - tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` - for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do - case " $new_inherited_linker_flags " in - *" $tmp_inherited_linker_flag "*) ;; - *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";; - esac - done - fi - dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` - if test lib,link = "$linkmode,$pass" || - test prog,scan = "$linkmode,$pass" || - { test prog != "$linkmode" && test lib != "$linkmode"; }; then - test -n "$dlopen" && func_append dlfiles " $dlopen" - test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" - fi - - if test conv = "$pass"; then - # Only check for convenience libraries - deplibs="$lib $deplibs" - if test -z "$libdir"; then - if test -z "$old_library"; then - func_fatal_error "cannot find name of link library for '$lib'" - fi - # It is a libtool convenience library, so add in its objects. - func_append convenience " $ladir/$objdir/$old_library" - func_append old_convenience " $ladir/$objdir/$old_library" - tmp_libs= - for deplib in $dependency_libs; do - deplibs="$deplib $deplibs" - if $opt_preserve_dup_deps; then - case "$tmp_libs " in - *" $deplib "*) func_append specialdeplibs " $deplib" ;; - esac - fi - func_append tmp_libs " $deplib" - done - elif test prog != "$linkmode" && test lib != "$linkmode"; then - func_fatal_error "'$lib' is not a convenience library" - fi - continue - fi # $pass = conv - - - # Get the name of the library we link against. - linklib= - if test -n "$old_library" && - { test yes = "$prefer_static_libs" || - test built,no = "$prefer_static_libs,$installed"; }; then - linklib=$old_library - else - for l in $old_library $library_names; do - linklib=$l - done - fi - if test -z "$linklib"; then - func_fatal_error "cannot find name of link library for '$lib'" - fi - - # This library was specified with -dlopen. - if test dlopen = "$pass"; then - test -z "$libdir" \ - && func_fatal_error "cannot -dlopen a convenience library: '$lib'" - if test -z "$dlname" || - test yes != "$dlopen_support" || - test no = "$build_libtool_libs" - then - # If there is no dlname, no dlopen support or we're linking - # statically, we need to preload. We also need to preload any - # dependent libraries so libltdl's deplib preloader doesn't - # bomb out in the load deplibs phase. - func_append dlprefiles " $lib $dependency_libs" - else - func_append newdlfiles " $lib" - fi - continue - fi # $pass = dlopen - - # We need an absolute path. - case $ladir in - [\\/]* | [A-Za-z]:[\\/]*) abs_ladir=$ladir ;; - *) - abs_ladir=`cd "$ladir" && pwd` - if test -z "$abs_ladir"; then - func_warning "cannot determine absolute directory name of '$ladir'" - func_warning "passing it literally to the linker, although it might fail" - abs_ladir=$ladir - fi - ;; - esac - func_basename "$lib" - laname=$func_basename_result - - # Find the relevant object directory and library name. - if test yes = "$installed"; then - if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then - func_warning "library '$lib' was moved." - dir=$ladir - absdir=$abs_ladir - libdir=$abs_ladir - else - dir=$lt_sysroot$libdir - absdir=$lt_sysroot$libdir - fi - test yes = "$hardcode_automatic" && avoidtemprpath=yes - else - if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then - dir=$ladir - absdir=$abs_ladir - # Remove this search path later - func_append notinst_path " $abs_ladir" - else - dir=$ladir/$objdir - absdir=$abs_ladir/$objdir - # Remove this search path later - func_append notinst_path " $abs_ladir" - fi - fi # $installed = yes - func_stripname 'lib' '.la' "$laname" - name=$func_stripname_result - - # This library was specified with -dlpreopen. - if test dlpreopen = "$pass"; then - if test -z "$libdir" && test prog = "$linkmode"; then - func_fatal_error "only libraries may -dlpreopen a convenience library: '$lib'" - fi - case $host in - # special handling for platforms with PE-DLLs. - *cygwin* | *mingw* | *cegcc* ) - # Linker will automatically link against shared library if both - # static and shared are present. Therefore, ensure we extract - # symbols from the import library if a shared library is present - # (otherwise, the dlopen module name will be incorrect). We do - # this by putting the import library name into $newdlprefiles. - # We recover the dlopen module name by 'saving' the la file - # name in a special purpose variable, and (later) extracting the - # dlname from the la file. - if test -n "$dlname"; then - func_tr_sh "$dir/$linklib" - eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" - func_append newdlprefiles " $dir/$linklib" - else - func_append newdlprefiles " $dir/$old_library" - # Keep a list of preopened convenience libraries to check - # that they are being used correctly in the link pass. - test -z "$libdir" && \ - func_append dlpreconveniencelibs " $dir/$old_library" - fi - ;; - * ) - # Prefer using a static library (so that no silly _DYNAMIC symbols - # are required to link). - if test -n "$old_library"; then - func_append newdlprefiles " $dir/$old_library" - # Keep a list of preopened convenience libraries to check - # that they are being used correctly in the link pass. - test -z "$libdir" && \ - func_append dlpreconveniencelibs " $dir/$old_library" - # Otherwise, use the dlname, so that lt_dlopen finds it. - elif test -n "$dlname"; then - func_append newdlprefiles " $dir/$dlname" - else - func_append newdlprefiles " $dir/$linklib" - fi - ;; - esac - fi # $pass = dlpreopen - - if test -z "$libdir"; then - # Link the convenience library - if test lib = "$linkmode"; then - deplibs="$dir/$old_library $deplibs" - elif test prog,link = "$linkmode,$pass"; then - compile_deplibs="$dir/$old_library $compile_deplibs" - finalize_deplibs="$dir/$old_library $finalize_deplibs" - else - deplibs="$lib $deplibs" # used for prog,scan pass - fi - continue - fi - - - if test prog = "$linkmode" && test link != "$pass"; then - func_append newlib_search_path " $ladir" - deplibs="$lib $deplibs" - - linkalldeplibs=false - if test no != "$link_all_deplibs" || test -z "$library_names" || - test no = "$build_libtool_libs"; then - linkalldeplibs=: - fi - - tmp_libs= - for deplib in $dependency_libs; do - case $deplib in - -L*) func_stripname '-L' '' "$deplib" - func_resolve_sysroot "$func_stripname_result" - func_append newlib_search_path " $func_resolve_sysroot_result" - ;; - esac - # Need to link against all dependency_libs? - if $linkalldeplibs; then - deplibs="$deplib $deplibs" - else - # Need to hardcode shared library paths - # or/and link against static libraries - newdependency_libs="$deplib $newdependency_libs" - fi - if $opt_preserve_dup_deps; then - case "$tmp_libs " in - *" $deplib "*) func_append specialdeplibs " $deplib" ;; - esac - fi - func_append tmp_libs " $deplib" - done # for deplib - continue - fi # $linkmode = prog... - - if test prog,link = "$linkmode,$pass"; then - if test -n "$library_names" && - { { test no = "$prefer_static_libs" || - test built,yes = "$prefer_static_libs,$installed"; } || - test -z "$old_library"; }; then - # We need to hardcode the library path - if test -n "$shlibpath_var" && test -z "$avoidtemprpath"; then - # Make sure the rpath contains only unique directories. - case $temp_rpath: in - *"$absdir:"*) ;; - *) func_append temp_rpath "$absdir:" ;; - esac - fi - - # Hardcode the library path. - # Skip directories that are in the system default run-time - # search path. - case " $sys_lib_dlsearch_path " in - *" $absdir "*) ;; - *) - case "$compile_rpath " in - *" $absdir "*) ;; - *) func_append compile_rpath " $absdir" ;; - esac - ;; - esac - case " $sys_lib_dlsearch_path " in - *" $libdir "*) ;; - *) - case "$finalize_rpath " in - *" $libdir "*) ;; - *) func_append finalize_rpath " $libdir" ;; - esac - ;; - esac - fi # $linkmode,$pass = prog,link... - - if $alldeplibs && - { test pass_all = "$deplibs_check_method" || - { test yes = "$build_libtool_libs" && - test -n "$library_names"; }; }; then - # We only need to search for static libraries - continue - fi - fi - - link_static=no # Whether the deplib will be linked statically - use_static_libs=$prefer_static_libs - if test built = "$use_static_libs" && test yes = "$installed"; then - use_static_libs=no - fi - if test -n "$library_names" && - { test no = "$use_static_libs" || test -z "$old_library"; }; then - case $host in - *cygwin* | *mingw* | *cegcc* | *os2*) - # No point in relinking DLLs because paths are not encoded - func_append notinst_deplibs " $lib" - need_relink=no - ;; - *) - if test no = "$installed"; then - func_append notinst_deplibs " $lib" - need_relink=yes - fi - ;; - esac - # This is a shared library - - # Warn about portability, can't link against -module's on some - # systems (darwin). Don't bleat about dlopened modules though! - dlopenmodule= - for dlpremoduletest in $dlprefiles; do - if test "X$dlpremoduletest" = "X$lib"; then - dlopenmodule=$dlpremoduletest - break - fi - done - if test -z "$dlopenmodule" && test yes = "$shouldnotlink" && test link = "$pass"; then - echo - if test prog = "$linkmode"; then - $ECHO "*** Warning: Linking the executable $output against the loadable module" - else - $ECHO "*** Warning: Linking the shared library $output against the loadable module" - fi - $ECHO "*** $linklib is not portable!" - fi - if test lib = "$linkmode" && - test yes = "$hardcode_into_libs"; then - # Hardcode the library path. - # Skip directories that are in the system default run-time - # search path. - case " $sys_lib_dlsearch_path " in - *" $absdir "*) ;; - *) - case "$compile_rpath " in - *" $absdir "*) ;; - *) func_append compile_rpath " $absdir" ;; - esac - ;; - esac - case " $sys_lib_dlsearch_path " in - *" $libdir "*) ;; - *) - case "$finalize_rpath " in - *" $libdir "*) ;; - *) func_append finalize_rpath " $libdir" ;; - esac - ;; - esac - fi - - if test -n "$old_archive_from_expsyms_cmds"; then - # figure out the soname - set dummy $library_names - shift - realname=$1 - shift - libname=`eval "\\$ECHO \"$libname_spec\""` - # use dlname if we got it. it's perfectly good, no? - if test -n "$dlname"; then - soname=$dlname - elif test -n "$soname_spec"; then - # bleh windows - case $host in - *cygwin* | mingw* | *cegcc* | *os2*) - func_arith $current - $age - major=$func_arith_result - versuffix=-$major - ;; - esac - eval soname=\"$soname_spec\" - else - soname=$realname - fi - - # Make a new name for the extract_expsyms_cmds to use - soroot=$soname - func_basename "$soroot" - soname=$func_basename_result - func_stripname 'lib' '.dll' "$soname" - newlib=libimp-$func_stripname_result.a - - # If the library has no export list, then create one now - if test -f "$output_objdir/$soname-def"; then : - else - func_verbose "extracting exported symbol list from '$soname'" - func_execute_cmds "$extract_expsyms_cmds" 'exit $?' - fi - - # Create $newlib - if test -f "$output_objdir/$newlib"; then :; else - func_verbose "generating import library for '$soname'" - func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' - fi - # make sure the library variables are pointing to the new library - dir=$output_objdir - linklib=$newlib - fi # test -n "$old_archive_from_expsyms_cmds" - - if test prog = "$linkmode" || test relink != "$opt_mode"; then - add_shlibpath= - add_dir= - add= - lib_linked=yes - case $hardcode_action in - immediate | unsupported) - if test no = "$hardcode_direct"; then - add=$dir/$linklib - case $host in - *-*-sco3.2v5.0.[024]*) add_dir=-L$dir ;; - *-*-sysv4*uw2*) add_dir=-L$dir ;; - *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ - *-*-unixware7*) add_dir=-L$dir ;; - *-*-darwin* ) - # if the lib is a (non-dlopened) module then we cannot - # link against it, someone is ignoring the earlier warnings - if /usr/bin/file -L $add 2> /dev/null | - $GREP ": [^:]* bundle" >/dev/null; then - if test "X$dlopenmodule" != "X$lib"; then - $ECHO "*** Warning: lib $linklib is a module, not a shared library" - if test -z "$old_library"; then - echo - echo "*** And there doesn't seem to be a static archive available" - echo "*** The link will probably fail, sorry" - else - add=$dir/$old_library - fi - elif test -n "$old_library"; then - add=$dir/$old_library - fi - fi - esac - elif test no = "$hardcode_minus_L"; then - case $host in - *-*-sunos*) add_shlibpath=$dir ;; - esac - add_dir=-L$dir - add=-l$name - elif test no = "$hardcode_shlibpath_var"; then - add_shlibpath=$dir - add=-l$name - else - lib_linked=no - fi - ;; - relink) - if test yes = "$hardcode_direct" && - test no = "$hardcode_direct_absolute"; then - add=$dir/$linklib - elif test yes = "$hardcode_minus_L"; then - add_dir=-L$absdir - # Try looking first in the location we're being installed to. - if test -n "$inst_prefix_dir"; then - case $libdir in - [\\/]*) - func_append add_dir " -L$inst_prefix_dir$libdir" - ;; - esac - fi - add=-l$name - elif test yes = "$hardcode_shlibpath_var"; then - add_shlibpath=$dir - add=-l$name - else - lib_linked=no - fi - ;; - *) lib_linked=no ;; - esac - - if test yes != "$lib_linked"; then - func_fatal_configuration "unsupported hardcode properties" - fi - - if test -n "$add_shlibpath"; then - case :$compile_shlibpath: in - *":$add_shlibpath:"*) ;; - *) func_append compile_shlibpath "$add_shlibpath:" ;; - esac - fi - if test prog = "$linkmode"; then - test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" - test -n "$add" && compile_deplibs="$add $compile_deplibs" - else - test -n "$add_dir" && deplibs="$add_dir $deplibs" - test -n "$add" && deplibs="$add $deplibs" - if test yes != "$hardcode_direct" && - test yes != "$hardcode_minus_L" && - test yes = "$hardcode_shlibpath_var"; then - case :$finalize_shlibpath: in - *":$libdir:"*) ;; - *) func_append finalize_shlibpath "$libdir:" ;; - esac - fi - fi - fi - - if test prog = "$linkmode" || test relink = "$opt_mode"; then - add_shlibpath= - add_dir= - add= - # Finalize command for both is simple: just hardcode it. - if test yes = "$hardcode_direct" && - test no = "$hardcode_direct_absolute"; then - add=$libdir/$linklib - elif test yes = "$hardcode_minus_L"; then - add_dir=-L$libdir - add=-l$name - elif test yes = "$hardcode_shlibpath_var"; then - case :$finalize_shlibpath: in - *":$libdir:"*) ;; - *) func_append finalize_shlibpath "$libdir:" ;; - esac - add=-l$name - elif test yes = "$hardcode_automatic"; then - if test -n "$inst_prefix_dir" && - test -f "$inst_prefix_dir$libdir/$linklib"; then - add=$inst_prefix_dir$libdir/$linklib - else - add=$libdir/$linklib - fi - else - # We cannot seem to hardcode it, guess we'll fake it. - add_dir=-L$libdir - # Try looking first in the location we're being installed to. - if test -n "$inst_prefix_dir"; then - case $libdir in - [\\/]*) - func_append add_dir " -L$inst_prefix_dir$libdir" - ;; - esac - fi - add=-l$name - fi - - if test prog = "$linkmode"; then - test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" - test -n "$add" && finalize_deplibs="$add $finalize_deplibs" - else - test -n "$add_dir" && deplibs="$add_dir $deplibs" - test -n "$add" && deplibs="$add $deplibs" - fi - fi - elif test prog = "$linkmode"; then - # Here we assume that one of hardcode_direct or hardcode_minus_L - # is not unsupported. This is valid on all known static and - # shared platforms. - if test unsupported != "$hardcode_direct"; then - test -n "$old_library" && linklib=$old_library - compile_deplibs="$dir/$linklib $compile_deplibs" - finalize_deplibs="$dir/$linklib $finalize_deplibs" - else - compile_deplibs="-l$name -L$dir $compile_deplibs" - finalize_deplibs="-l$name -L$dir $finalize_deplibs" - fi - elif test yes = "$build_libtool_libs"; then - # Not a shared library - if test pass_all != "$deplibs_check_method"; then - # We're trying link a shared library against a static one - # but the system doesn't support it. - - # Just print a warning and add the library to dependency_libs so - # that the program can be linked against the static library. - echo - $ECHO "*** Warning: This system cannot link to static lib archive $lib." - echo "*** I have the capability to make that library automatically link in when" - echo "*** you link to this library. But I can only do this if you have a" - echo "*** shared version of the library, which you do not appear to have." - if test yes = "$module"; then - echo "*** But as you try to build a module library, libtool will still create " - echo "*** a static module, that should work as long as the dlopening application" - echo "*** is linked with the -dlopen flag to resolve symbols at runtime." - if test -z "$global_symbol_pipe"; then - echo - echo "*** However, this would only work if libtool was able to extract symbol" - echo "*** lists from a program, using 'nm' or equivalent, but libtool could" - echo "*** not find such a program. So, this module is probably useless." - echo "*** 'nm' from GNU binutils and a full rebuild may help." - fi - if test no = "$build_old_libs"; then - build_libtool_libs=module - build_old_libs=yes - else - build_libtool_libs=no - fi - fi - else - deplibs="$dir/$old_library $deplibs" - link_static=yes - fi - fi # link shared/static library? - - if test lib = "$linkmode"; then - if test -n "$dependency_libs" && - { test yes != "$hardcode_into_libs" || - test yes = "$build_old_libs" || - test yes = "$link_static"; }; then - # Extract -R from dependency_libs - temp_deplibs= - for libdir in $dependency_libs; do - case $libdir in - -R*) func_stripname '-R' '' "$libdir" - temp_xrpath=$func_stripname_result - case " $xrpath " in - *" $temp_xrpath "*) ;; - *) func_append xrpath " $temp_xrpath";; - esac;; - *) func_append temp_deplibs " $libdir";; - esac - done - dependency_libs=$temp_deplibs - fi - - func_append newlib_search_path " $absdir" - # Link against this library - test no = "$link_static" && newdependency_libs="$abs_ladir/$laname $newdependency_libs" - # ... and its dependency_libs - tmp_libs= - for deplib in $dependency_libs; do - newdependency_libs="$deplib $newdependency_libs" - case $deplib in - -L*) func_stripname '-L' '' "$deplib" - func_resolve_sysroot "$func_stripname_result";; - *) func_resolve_sysroot "$deplib" ;; - esac - if $opt_preserve_dup_deps; then - case "$tmp_libs " in - *" $func_resolve_sysroot_result "*) - func_append specialdeplibs " $func_resolve_sysroot_result" ;; - esac - fi - func_append tmp_libs " $func_resolve_sysroot_result" - done - - if test no != "$link_all_deplibs"; then - # Add the search paths of all dependency libraries - for deplib in $dependency_libs; do - path= - case $deplib in - -L*) path=$deplib ;; - *.la) - func_resolve_sysroot "$deplib" - deplib=$func_resolve_sysroot_result - func_dirname "$deplib" "" "." - dir=$func_dirname_result - # We need an absolute path. - case $dir in - [\\/]* | [A-Za-z]:[\\/]*) absdir=$dir ;; - *) - absdir=`cd "$dir" && pwd` - if test -z "$absdir"; then - func_warning "cannot determine absolute directory name of '$dir'" - absdir=$dir - fi - ;; - esac - if $GREP "^installed=no" $deplib > /dev/null; then - case $host in - *-*-darwin*) - depdepl= - eval deplibrary_names=`$SED -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` - if test -n "$deplibrary_names"; then - for tmp in $deplibrary_names; do - depdepl=$tmp - done - if test -f "$absdir/$objdir/$depdepl"; then - depdepl=$absdir/$objdir/$depdepl - darwin_install_name=`$OTOOL -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` - if test -z "$darwin_install_name"; then - darwin_install_name=`$OTOOL64 -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` - fi - func_append compiler_flags " $wl-dylib_file $wl$darwin_install_name:$depdepl" - func_append linker_flags " -dylib_file $darwin_install_name:$depdepl" - path= - fi - fi - ;; - *) - path=-L$absdir/$objdir - ;; - esac - else - eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` - test -z "$libdir" && \ - func_fatal_error "'$deplib' is not a valid libtool archive" - test "$absdir" != "$libdir" && \ - func_warning "'$deplib' seems to be moved" - - path=-L$absdir - fi - ;; - esac - case " $deplibs " in - *" $path "*) ;; - *) deplibs="$path $deplibs" ;; - esac - done - fi # link_all_deplibs != no - fi # linkmode = lib - done # for deplib in $libs - if test link = "$pass"; then - if test prog = "$linkmode"; then - compile_deplibs="$new_inherited_linker_flags $compile_deplibs" - finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" - else - compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` - fi - fi - dependency_libs=$newdependency_libs - if test dlpreopen = "$pass"; then - # Link the dlpreopened libraries before other libraries - for deplib in $save_deplibs; do - deplibs="$deplib $deplibs" - done - fi - if test dlopen != "$pass"; then - test conv = "$pass" || { - # Make sure lib_search_path contains only unique directories. - lib_search_path= - for dir in $newlib_search_path; do - case "$lib_search_path " in - *" $dir "*) ;; - *) func_append lib_search_path " $dir" ;; - esac - done - newlib_search_path= - } - - if test prog,link = "$linkmode,$pass"; then - vars="compile_deplibs finalize_deplibs" - else - vars=deplibs - fi - for var in $vars dependency_libs; do - # Add libraries to $var in reverse order - eval tmp_libs=\"\$$var\" - new_libs= - for deplib in $tmp_libs; do - # FIXME: Pedantically, this is the right thing to do, so - # that some nasty dependency loop isn't accidentally - # broken: - #new_libs="$deplib $new_libs" - # Pragmatically, this seems to cause very few problems in - # practice: - case $deplib in - -L*) new_libs="$deplib $new_libs" ;; - -R*) ;; - *) - # And here is the reason: when a library appears more - # than once as an explicit dependence of a library, or - # is implicitly linked in more than once by the - # compiler, it is considered special, and multiple - # occurrences thereof are not removed. Compare this - # with having the same library being listed as a - # dependency of multiple other libraries: in this case, - # we know (pedantically, we assume) the library does not - # need to be listed more than once, so we keep only the - # last copy. This is not always right, but it is rare - # enough that we require users that really mean to play - # such unportable linking tricks to link the library - # using -Wl,-lname, so that libtool does not consider it - # for duplicate removal. - case " $specialdeplibs " in - *" $deplib "*) new_libs="$deplib $new_libs" ;; - *) - case " $new_libs " in - *" $deplib "*) ;; - *) new_libs="$deplib $new_libs" ;; - esac - ;; - esac - ;; - esac - done - tmp_libs= - for deplib in $new_libs; do - case $deplib in - -L*) - case " $tmp_libs " in - *" $deplib "*) ;; - *) func_append tmp_libs " $deplib" ;; - esac - ;; - *) func_append tmp_libs " $deplib" ;; - esac - done - eval $var=\"$tmp_libs\" - done # for var - fi - - # Add Sun CC postdeps if required: - test CXX = "$tagname" && { - case $host_os in - linux*) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) # Sun C++ 5.9 - func_suncc_cstd_abi - - if test no != "$suncc_use_cstd_abi"; then - func_append postdeps ' -library=Cstd -library=Crun' - fi - ;; - esac - ;; - - solaris*) - func_cc_basename "$CC" - case $func_cc_basename_result in - CC* | sunCC*) - func_suncc_cstd_abi - - if test no != "$suncc_use_cstd_abi"; then - func_append postdeps ' -library=Cstd -library=Crun' - fi - ;; - esac - ;; - esac - } - - # Last step: remove runtime libs from dependency_libs - # (they stay in deplibs) - tmp_libs= - for i in $dependency_libs; do - case " $predeps $postdeps $compiler_lib_search_path " in - *" $i "*) - i= - ;; - esac - if test -n "$i"; then - func_append tmp_libs " $i" - fi - done - dependency_libs=$tmp_libs - done # for pass - if test prog = "$linkmode"; then - dlfiles=$newdlfiles - fi - if test prog = "$linkmode" || test lib = "$linkmode"; then - dlprefiles=$newdlprefiles - fi - - case $linkmode in - oldlib) - if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then - func_warning "'-dlopen' is ignored for archives" - fi - - case " $deplibs" in - *\ -l* | *\ -L*) - func_warning "'-l' and '-L' are ignored for archives" ;; - esac - - test -n "$rpath" && \ - func_warning "'-rpath' is ignored for archives" - - test -n "$xrpath" && \ - func_warning "'-R' is ignored for archives" - - test -n "$vinfo" && \ - func_warning "'-version-info/-version-number' is ignored for archives" - - test -n "$release" && \ - func_warning "'-release' is ignored for archives" - - test -n "$export_symbols$export_symbols_regex" && \ - func_warning "'-export-symbols' is ignored for archives" - - # Now set the variables for building old libraries. - build_libtool_libs=no - oldlibs=$output - func_append objs "$old_deplibs" - ;; - - lib) - # Make sure we only generate libraries of the form 'libNAME.la'. - case $outputname in - lib*) - func_stripname 'lib' '.la' "$outputname" - name=$func_stripname_result - eval shared_ext=\"$shrext_cmds\" - eval libname=\"$libname_spec\" - ;; - *) - test no = "$module" \ - && func_fatal_help "libtool library '$output' must begin with 'lib'" - - if test no != "$need_lib_prefix"; then - # Add the "lib" prefix for modules if required - func_stripname '' '.la' "$outputname" - name=$func_stripname_result - eval shared_ext=\"$shrext_cmds\" - eval libname=\"$libname_spec\" - else - func_stripname '' '.la' "$outputname" - libname=$func_stripname_result - fi - ;; - esac - - if test -n "$objs"; then - if test pass_all != "$deplibs_check_method"; then - func_fatal_error "cannot build libtool library '$output' from non-libtool objects on this host:$objs" - else - echo - $ECHO "*** Warning: Linking the shared library $output against the non-libtool" - $ECHO "*** objects $objs is not portable!" - func_append libobjs " $objs" - fi - fi - - test no = "$dlself" \ - || func_warning "'-dlopen self' is ignored for libtool libraries" - - set dummy $rpath - shift - test 1 -lt "$#" \ - && func_warning "ignoring multiple '-rpath's for a libtool library" - - install_libdir=$1 - - oldlibs= - if test -z "$rpath"; then - if test yes = "$build_libtool_libs"; then - # Building a libtool convenience library. - # Some compilers have problems with a '.al' extension so - # convenience libraries should have the same extension an - # archive normally would. - oldlibs="$output_objdir/$libname.$libext $oldlibs" - build_libtool_libs=convenience - build_old_libs=yes - fi - - test -n "$vinfo" && \ - func_warning "'-version-info/-version-number' is ignored for convenience libraries" - - test -n "$release" && \ - func_warning "'-release' is ignored for convenience libraries" - else - - # Parse the version information argument. - save_ifs=$IFS; IFS=: - set dummy $vinfo 0 0 0 - shift - IFS=$save_ifs - - test -n "$7" && \ - func_fatal_help "too many parameters to '-version-info'" - - # convert absolute version numbers to libtool ages - # this retains compatibility with .la files and attempts - # to make the code below a bit more comprehensible - - case $vinfo_number in - yes) - number_major=$1 - number_minor=$2 - number_revision=$3 - # - # There are really only two kinds -- those that - # use the current revision as the major version - # and those that subtract age and use age as - # a minor version. But, then there is irix - # that has an extra 1 added just for fun - # - case $version_type in - # correct linux to gnu/linux during the next big refactor - darwin|freebsd-elf|linux|osf|windows|none) - func_arith $number_major + $number_minor - current=$func_arith_result - age=$number_minor - revision=$number_revision - ;; - freebsd-aout|qnx|sunos) - current=$number_major - revision=$number_minor - age=0 - ;; - irix|nonstopux) - func_arith $number_major + $number_minor - current=$func_arith_result - age=$number_minor - revision=$number_minor - lt_irix_increment=no - ;; - *) - func_fatal_configuration "$modename: unknown library version type '$version_type'" - ;; - esac - ;; - no) - current=$1 - revision=$2 - age=$3 - ;; - esac - - # Check that each of the things are valid numbers. - case $current in - 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; - *) - func_error "CURRENT '$current' must be a nonnegative integer" - func_fatal_error "'$vinfo' is not valid version information" - ;; - esac - - case $revision in - 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; - *) - func_error "REVISION '$revision' must be a nonnegative integer" - func_fatal_error "'$vinfo' is not valid version information" - ;; - esac - - case $age in - 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; - *) - func_error "AGE '$age' must be a nonnegative integer" - func_fatal_error "'$vinfo' is not valid version information" - ;; - esac - - if test "$age" -gt "$current"; then - func_error "AGE '$age' is greater than the current interface number '$current'" - func_fatal_error "'$vinfo' is not valid version information" - fi - - # Calculate the version variables. - major= - versuffix= - verstring= - case $version_type in - none) ;; - - darwin) - # Like Linux, but with the current version available in - # verstring for coding it into the library header - func_arith $current - $age - major=.$func_arith_result - versuffix=$major.$age.$revision - # Darwin ld doesn't like 0 for these options... - func_arith $current + 1 - minor_current=$func_arith_result - xlcverstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision" - verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" - # On Darwin other compilers - case $CC in - nagfor*) - verstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision" - ;; - *) - verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" - ;; - esac - ;; - - freebsd-aout) - major=.$current - versuffix=.$current.$revision - ;; - - freebsd-elf) - func_arith $current - $age - major=.$func_arith_result - versuffix=$major.$age.$revision - ;; - - irix | nonstopux) - if test no = "$lt_irix_increment"; then - func_arith $current - $age - else - func_arith $current - $age + 1 - fi - major=$func_arith_result - - case $version_type in - nonstopux) verstring_prefix=nonstopux ;; - *) verstring_prefix=sgi ;; - esac - verstring=$verstring_prefix$major.$revision - - # Add in all the interfaces that we are compatible with. - loop=$revision - while test 0 -ne "$loop"; do - func_arith $revision - $loop - iface=$func_arith_result - func_arith $loop - 1 - loop=$func_arith_result - verstring=$verstring_prefix$major.$iface:$verstring - done - - # Before this point, $major must not contain '.'. - major=.$major - versuffix=$major.$revision - ;; - - linux) # correct to gnu/linux during the next big refactor - func_arith $current - $age - major=.$func_arith_result - versuffix=$major.$age.$revision - ;; - - osf) - func_arith $current - $age - major=.$func_arith_result - versuffix=.$current.$age.$revision - verstring=$current.$age.$revision - - # Add in all the interfaces that we are compatible with. - loop=$age - while test 0 -ne "$loop"; do - func_arith $current - $loop - iface=$func_arith_result - func_arith $loop - 1 - loop=$func_arith_result - verstring=$verstring:$iface.0 - done - - # Make executables depend on our current version. - func_append verstring ":$current.0" - ;; - - qnx) - major=.$current - versuffix=.$current - ;; - - sco) - major=.$current - versuffix=.$current - ;; - - sunos) - major=.$current - versuffix=.$current.$revision - ;; - - windows) - # Use '-' rather than '.', since we only want one - # extension on DOS 8.3 file systems. - func_arith $current - $age - major=$func_arith_result - versuffix=-$major - ;; - - *) - func_fatal_configuration "unknown library version type '$version_type'" - ;; - esac - - # Clear the version info if we defaulted, and they specified a release. - if test -z "$vinfo" && test -n "$release"; then - major= - case $version_type in - darwin) - # we can't check for "0.0" in archive_cmds due to quoting - # problems, so we reset it completely - verstring= - ;; - *) - verstring=0.0 - ;; - esac - if test no = "$need_version"; then - versuffix= - else - versuffix=.0.0 - fi - fi - - # Remove version info from name if versioning should be avoided - if test yes,no = "$avoid_version,$need_version"; then - major= - versuffix= - verstring= - fi - - # Check to see if the archive will have undefined symbols. - if test yes = "$allow_undefined"; then - if test unsupported = "$allow_undefined_flag"; then - if test yes = "$build_old_libs"; then - func_warning "undefined symbols not allowed in $host shared libraries; building static only" - build_libtool_libs=no - else - func_fatal_error "can't build $host shared library unless -no-undefined is specified" - fi - fi - else - # Don't allow undefined symbols. - allow_undefined_flag=$no_undefined_flag - fi - - fi - - func_generate_dlsyms "$libname" "$libname" : - func_append libobjs " $symfileobj" - test " " = "$libobjs" && libobjs= - - if test relink != "$opt_mode"; then - # Remove our outputs, but don't remove object files since they - # may have been created when compiling PIC objects. - removelist= - tempremovelist=`$ECHO "$output_objdir/*"` - for p in $tempremovelist; do - case $p in - *.$objext | *.gcno) - ;; - $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/$libname$release.*) - if test -n "$precious_files_regex"; then - if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 - then - continue - fi - fi - func_append removelist " $p" - ;; - *) ;; - esac - done - test -n "$removelist" && \ - func_show_eval "${RM}r \$removelist" - fi - - # Now set the variables for building old libraries. - if test yes = "$build_old_libs" && test convenience != "$build_libtool_libs"; then - func_append oldlibs " $output_objdir/$libname.$libext" - - # Transform .lo files to .o files. - oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; $lo2o" | $NL2SP` - fi - - # Eliminate all temporary directories. - #for path in $notinst_path; do - # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` - # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` - # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` - #done - - if test -n "$xrpath"; then - # If the user specified any rpath flags, then add them. - temp_xrpath= - for libdir in $xrpath; do - func_replace_sysroot "$libdir" - func_append temp_xrpath " -R$func_replace_sysroot_result" - case "$finalize_rpath " in - *" $libdir "*) ;; - *) func_append finalize_rpath " $libdir" ;; - esac - done - if test yes != "$hardcode_into_libs" || test yes = "$build_old_libs"; then - dependency_libs="$temp_xrpath $dependency_libs" - fi - fi - - # Make sure dlfiles contains only unique files that won't be dlpreopened - old_dlfiles=$dlfiles - dlfiles= - for lib in $old_dlfiles; do - case " $dlprefiles $dlfiles " in - *" $lib "*) ;; - *) func_append dlfiles " $lib" ;; - esac - done - - # Make sure dlprefiles contains only unique files - old_dlprefiles=$dlprefiles - dlprefiles= - for lib in $old_dlprefiles; do - case "$dlprefiles " in - *" $lib "*) ;; - *) func_append dlprefiles " $lib" ;; - esac - done - - if test yes = "$build_libtool_libs"; then - if test -n "$rpath"; then - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) - # these systems don't actually have a c library (as such)! - ;; - *-*-rhapsody* | *-*-darwin1.[012]) - # Rhapsody C library is in the System framework - func_append deplibs " System.ltframework" - ;; - *-*-netbsd*) - # Don't link with libc until the a.out ld.so is fixed. - ;; - *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) - # Do not include libc due to us having libc/libc_r. - ;; - *-*-sco3.2v5* | *-*-sco5v6*) - # Causes problems with __ctype - ;; - *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) - # Compiler inserts libc in the correct place for threads to work - ;; - *) - # Add libc to deplibs on all other systems if necessary. - if test yes = "$build_libtool_need_lc"; then - func_append deplibs " -lc" - fi - ;; - esac - fi - - # Transform deplibs into only deplibs that can be linked in shared. - name_save=$name - libname_save=$libname - release_save=$release - versuffix_save=$versuffix - major_save=$major - # I'm not sure if I'm treating the release correctly. I think - # release should show up in the -l (ie -lgmp5) so we don't want to - # add it in twice. Is that correct? - release= - versuffix= - major= - newdeplibs= - droppeddeps=no - case $deplibs_check_method in - pass_all) - # Don't check for shared/static. Everything works. - # This might be a little naive. We might want to check - # whether the library exists or not. But this is on - # osf3 & osf4 and I'm not really sure... Just - # implementing what was already the behavior. - newdeplibs=$deplibs - ;; - test_compile) - # This code stresses the "libraries are programs" paradigm to its - # limits. Maybe even breaks it. We compile a program, linking it - # against the deplibs as a proxy for the library. Then we can check - # whether they linked in statically or dynamically with ldd. - $opt_dry_run || $RM conftest.c - cat > conftest.c </dev/null` - $nocaseglob - else - potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` - fi - for potent_lib in $potential_libs; do - # Follow soft links. - if ls -lLd "$potent_lib" 2>/dev/null | - $GREP " -> " >/dev/null; then - continue - fi - # The statement above tries to avoid entering an - # endless loop below, in case of cyclic links. - # We might still enter an endless loop, since a link - # loop can be closed while we follow links, - # but so what? - potlib=$potent_lib - while test -h "$potlib" 2>/dev/null; do - potliblink=`ls -ld $potlib | $SED 's/.* -> //'` - case $potliblink in - [\\/]* | [A-Za-z]:[\\/]*) potlib=$potliblink;; - *) potlib=`$ECHO "$potlib" | $SED 's|[^/]*$||'`"$potliblink";; - esac - done - if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | - $SED -e 10q | - $EGREP "$file_magic_regex" > /dev/null; then - func_append newdeplibs " $a_deplib" - a_deplib= - break 2 - fi - done - done - fi - if test -n "$a_deplib"; then - droppeddeps=yes - echo - $ECHO "*** Warning: linker path does not have real file for library $a_deplib." - echo "*** I have the capability to make that library automatically link in when" - echo "*** you link to this library. But I can only do this if you have a" - echo "*** shared version of the library, which you do not appear to have" - echo "*** because I did check the linker path looking for a file starting" - if test -z "$potlib"; then - $ECHO "*** with $libname but no candidates were found. (...for file magic test)" - else - $ECHO "*** with $libname and none of the candidates passed a file format test" - $ECHO "*** using a file magic. Last file checked: $potlib" - fi - fi - ;; - *) - # Add a -L argument. - func_append newdeplibs " $a_deplib" - ;; - esac - done # Gone through all deplibs. - ;; - match_pattern*) - set dummy $deplibs_check_method; shift - match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` - for a_deplib in $deplibs; do - case $a_deplib in - -l*) - func_stripname -l '' "$a_deplib" - name=$func_stripname_result - if test yes = "$allow_libtool_libs_with_static_runtimes"; then - case " $predeps $postdeps " in - *" $a_deplib "*) - func_append newdeplibs " $a_deplib" - a_deplib= - ;; - esac - fi - if test -n "$a_deplib"; then - libname=`eval "\\$ECHO \"$libname_spec\""` - for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do - potential_libs=`ls $i/$libname[.-]* 2>/dev/null` - for potent_lib in $potential_libs; do - potlib=$potent_lib # see symlink-check above in file_magic test - if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ - $EGREP "$match_pattern_regex" > /dev/null; then - func_append newdeplibs " $a_deplib" - a_deplib= - break 2 - fi - done - done - fi - if test -n "$a_deplib"; then - droppeddeps=yes - echo - $ECHO "*** Warning: linker path does not have real file for library $a_deplib." - echo "*** I have the capability to make that library automatically link in when" - echo "*** you link to this library. But I can only do this if you have a" - echo "*** shared version of the library, which you do not appear to have" - echo "*** because I did check the linker path looking for a file starting" - if test -z "$potlib"; then - $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" - else - $ECHO "*** with $libname and none of the candidates passed a file format test" - $ECHO "*** using a regex pattern. Last file checked: $potlib" - fi - fi - ;; - *) - # Add a -L argument. - func_append newdeplibs " $a_deplib" - ;; - esac - done # Gone through all deplibs. - ;; - none | unknown | *) - newdeplibs= - tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` - if test yes = "$allow_libtool_libs_with_static_runtimes"; then - for i in $predeps $postdeps; do - # can't use Xsed below, because $i might contain '/' - tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s|$i||"` - done - fi - case $tmp_deplibs in - *[!\ \ ]*) - echo - if test none = "$deplibs_check_method"; then - echo "*** Warning: inter-library dependencies are not supported in this platform." - else - echo "*** Warning: inter-library dependencies are not known to be supported." - fi - echo "*** All declared inter-library dependencies are being dropped." - droppeddeps=yes - ;; - esac - ;; - esac - versuffix=$versuffix_save - major=$major_save - release=$release_save - libname=$libname_save - name=$name_save - - case $host in - *-*-rhapsody* | *-*-darwin1.[012]) - # On Rhapsody replace the C library with the System framework - newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` - ;; - esac - - if test yes = "$droppeddeps"; then - if test yes = "$module"; then - echo - echo "*** Warning: libtool could not satisfy all declared inter-library" - $ECHO "*** dependencies of module $libname. Therefore, libtool will create" - echo "*** a static module, that should work as long as the dlopening" - echo "*** application is linked with the -dlopen flag." - if test -z "$global_symbol_pipe"; then - echo - echo "*** However, this would only work if libtool was able to extract symbol" - echo "*** lists from a program, using 'nm' or equivalent, but libtool could" - echo "*** not find such a program. So, this module is probably useless." - echo "*** 'nm' from GNU binutils and a full rebuild may help." - fi - if test no = "$build_old_libs"; then - oldlibs=$output_objdir/$libname.$libext - build_libtool_libs=module - build_old_libs=yes - else - build_libtool_libs=no - fi - else - echo "*** The inter-library dependencies that have been dropped here will be" - echo "*** automatically added whenever a program is linked with this library" - echo "*** or is declared to -dlopen it." - - if test no = "$allow_undefined"; then - echo - echo "*** Since this library must not contain undefined symbols," - echo "*** because either the platform does not support them or" - echo "*** it was explicitly requested with -no-undefined," - echo "*** libtool will only create a static version of it." - if test no = "$build_old_libs"; then - oldlibs=$output_objdir/$libname.$libext - build_libtool_libs=module - build_old_libs=yes - else - build_libtool_libs=no - fi - fi - fi - fi - # Done checking deplibs! - deplibs=$newdeplibs - fi - # Time to change all our "foo.ltframework" stuff back to "-framework foo" - case $host in - *-*-darwin*) - newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` - new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` - deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` - ;; - esac - - # move library search paths that coincide with paths to not yet - # installed libraries to the beginning of the library search list - new_libs= - for path in $notinst_path; do - case " $new_libs " in - *" -L$path/$objdir "*) ;; - *) - case " $deplibs " in - *" -L$path/$objdir "*) - func_append new_libs " -L$path/$objdir" ;; - esac - ;; - esac - done - for deplib in $deplibs; do - case $deplib in - -L*) - case " $new_libs " in - *" $deplib "*) ;; - *) func_append new_libs " $deplib" ;; - esac - ;; - *) func_append new_libs " $deplib" ;; - esac - done - deplibs=$new_libs - - # All the library-specific variables (install_libdir is set above). - library_names= - old_library= - dlname= - - # Test again, we may have decided not to build it any more - if test yes = "$build_libtool_libs"; then - # Remove $wl instances when linking with ld. - # FIXME: should test the right _cmds variable. - case $archive_cmds in - *\$LD\ *) wl= ;; - esac - if test yes = "$hardcode_into_libs"; then - # Hardcode the library paths - hardcode_libdirs= - dep_rpath= - rpath=$finalize_rpath - test relink = "$opt_mode" || rpath=$compile_rpath$rpath - for libdir in $rpath; do - if test -n "$hardcode_libdir_flag_spec"; then - if test -n "$hardcode_libdir_separator"; then - func_replace_sysroot "$libdir" - libdir=$func_replace_sysroot_result - if test -z "$hardcode_libdirs"; then - hardcode_libdirs=$libdir - else - # Just accumulate the unique libdirs. - case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in - *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) - ;; - *) - func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" - ;; - esac - fi - else - eval flag=\"$hardcode_libdir_flag_spec\" - func_append dep_rpath " $flag" - fi - elif test -n "$runpath_var"; then - case "$perm_rpath " in - *" $libdir "*) ;; - *) func_append perm_rpath " $libdir" ;; - esac - fi - done - # Substitute the hardcoded libdirs into the rpath. - if test -n "$hardcode_libdir_separator" && - test -n "$hardcode_libdirs"; then - libdir=$hardcode_libdirs - eval "dep_rpath=\"$hardcode_libdir_flag_spec\"" - fi - if test -n "$runpath_var" && test -n "$perm_rpath"; then - # We should set the runpath_var. - rpath= - for dir in $perm_rpath; do - func_append rpath "$dir:" - done - eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" - fi - test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" - fi - - shlibpath=$finalize_shlibpath - test relink = "$opt_mode" || shlibpath=$compile_shlibpath$shlibpath - if test -n "$shlibpath"; then - eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" - fi - - # Get the real and link names of the library. - eval shared_ext=\"$shrext_cmds\" - eval library_names=\"$library_names_spec\" - set dummy $library_names - shift - realname=$1 - shift - - if test -n "$soname_spec"; then - eval soname=\"$soname_spec\" - else - soname=$realname - fi - if test -z "$dlname"; then - dlname=$soname - fi - - lib=$output_objdir/$realname - linknames= - for link - do - func_append linknames " $link" - done - - # Use standard objects if they are pic - test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` - test "X$libobjs" = "X " && libobjs= - - delfiles= - if test -n "$export_symbols" && test -n "$include_expsyms"; then - $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" - export_symbols=$output_objdir/$libname.uexp - func_append delfiles " $export_symbols" - fi - - orig_export_symbols= - case $host_os in - cygwin* | mingw* | cegcc*) - if test -n "$export_symbols" && test -z "$export_symbols_regex"; then - # exporting using user supplied symfile - func_dll_def_p "$export_symbols" || { - # and it's NOT already a .def file. Must figure out - # which of the given symbols are data symbols and tag - # them as such. So, trigger use of export_symbols_cmds. - # export_symbols gets reassigned inside the "prepare - # the list of exported symbols" if statement, so the - # include_expsyms logic still works. - orig_export_symbols=$export_symbols - export_symbols= - always_export_symbols=yes - } - fi - ;; - esac - - # Prepare the list of exported symbols - if test -z "$export_symbols"; then - if test yes = "$always_export_symbols" || test -n "$export_symbols_regex"; then - func_verbose "generating symbol list for '$libname.la'" - export_symbols=$output_objdir/$libname.exp - $opt_dry_run || $RM $export_symbols - cmds=$export_symbols_cmds - save_ifs=$IFS; IFS='~' - for cmd1 in $cmds; do - IFS=$save_ifs - # Take the normal branch if the nm_file_list_spec branch - # doesn't work or if tool conversion is not needed. - case $nm_file_list_spec~$to_tool_file_cmd in - *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) - try_normal_branch=yes - eval cmd=\"$cmd1\" - func_len " $cmd" - len=$func_len_result - ;; - *) - try_normal_branch=no - ;; - esac - if test yes = "$try_normal_branch" \ - && { test "$len" -lt "$max_cmd_len" \ - || test "$max_cmd_len" -le -1; } - then - func_show_eval "$cmd" 'exit $?' - skipped_export=false - elif test -n "$nm_file_list_spec"; then - func_basename "$output" - output_la=$func_basename_result - save_libobjs=$libobjs - save_output=$output - output=$output_objdir/$output_la.nm - func_to_tool_file "$output" - libobjs=$nm_file_list_spec$func_to_tool_file_result - func_append delfiles " $output" - func_verbose "creating $NM input file list: $output" - for obj in $save_libobjs; do - func_to_tool_file "$obj" - $ECHO "$func_to_tool_file_result" - done > "$output" - eval cmd=\"$cmd1\" - func_show_eval "$cmd" 'exit $?' - output=$save_output - libobjs=$save_libobjs - skipped_export=false - else - # The command line is too long to execute in one step. - func_verbose "using reloadable object file for export list..." - skipped_export=: - # Break out early, otherwise skipped_export may be - # set to false by a later but shorter cmd. - break - fi - done - IFS=$save_ifs - if test -n "$export_symbols_regex" && test : != "$skipped_export"; then - func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' - func_show_eval '$MV "${export_symbols}T" "$export_symbols"' - fi - fi - fi - - if test -n "$export_symbols" && test -n "$include_expsyms"; then - tmp_export_symbols=$export_symbols - test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols - $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' - fi - - if test : != "$skipped_export" && test -n "$orig_export_symbols"; then - # The given exports_symbols file has to be filtered, so filter it. - func_verbose "filter symbol list for '$libname.la' to tag DATA exports" - # FIXME: $output_objdir/$libname.filter potentially contains lots of - # 's' commands, which not all seds can handle. GNU sed should be fine - # though. Also, the filter scales superlinearly with the number of - # global variables. join(1) would be nice here, but unfortunately - # isn't a blessed tool. - $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter - func_append delfiles " $export_symbols $output_objdir/$libname.filter" - export_symbols=$output_objdir/$libname.def - $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols - fi - - tmp_deplibs= - for test_deplib in $deplibs; do - case " $convenience " in - *" $test_deplib "*) ;; - *) - func_append tmp_deplibs " $test_deplib" - ;; - esac - done - deplibs=$tmp_deplibs - - if test -n "$convenience"; then - if test -n "$whole_archive_flag_spec" && - test yes = "$compiler_needs_object" && - test -z "$libobjs"; then - # extract the archives, so we have objects to list. - # TODO: could optimize this to just extract one archive. - whole_archive_flag_spec= - fi - if test -n "$whole_archive_flag_spec"; then - save_libobjs=$libobjs - eval libobjs=\"\$libobjs $whole_archive_flag_spec\" - test "X$libobjs" = "X " && libobjs= - else - gentop=$output_objdir/${outputname}x - func_append generated " $gentop" - - func_extract_archives $gentop $convenience - func_append libobjs " $func_extract_archives_result" - test "X$libobjs" = "X " && libobjs= - fi - fi - - if test yes = "$thread_safe" && test -n "$thread_safe_flag_spec"; then - eval flag=\"$thread_safe_flag_spec\" - func_append linker_flags " $flag" - fi - - # Make a backup of the uninstalled library when relinking - if test relink = "$opt_mode"; then - $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? - fi - - # Do each of the archive commands. - if test yes = "$module" && test -n "$module_cmds"; then - if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then - eval test_cmds=\"$module_expsym_cmds\" - cmds=$module_expsym_cmds - else - eval test_cmds=\"$module_cmds\" - cmds=$module_cmds - fi - else - if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then - eval test_cmds=\"$archive_expsym_cmds\" - cmds=$archive_expsym_cmds - else - eval test_cmds=\"$archive_cmds\" - cmds=$archive_cmds - fi - fi - - if test : != "$skipped_export" && - func_len " $test_cmds" && - len=$func_len_result && - test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then - : - else - # The command line is too long to link in one step, link piecewise - # or, if using GNU ld and skipped_export is not :, use a linker - # script. - - # Save the value of $output and $libobjs because we want to - # use them later. If we have whole_archive_flag_spec, we - # want to use save_libobjs as it was before - # whole_archive_flag_spec was expanded, because we can't - # assume the linker understands whole_archive_flag_spec. - # This may have to be revisited, in case too many - # convenience libraries get linked in and end up exceeding - # the spec. - if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then - save_libobjs=$libobjs - fi - save_output=$output - func_basename "$output" - output_la=$func_basename_result - - # Clear the reloadable object creation command queue and - # initialize k to one. - test_cmds= - concat_cmds= - objlist= - last_robj= - k=1 - - if test -n "$save_libobjs" && test : != "$skipped_export" && test yes = "$with_gnu_ld"; then - output=$output_objdir/$output_la.lnkscript - func_verbose "creating GNU ld script: $output" - echo 'INPUT (' > $output - for obj in $save_libobjs - do - func_to_tool_file "$obj" - $ECHO "$func_to_tool_file_result" >> $output - done - echo ')' >> $output - func_append delfiles " $output" - func_to_tool_file "$output" - output=$func_to_tool_file_result - elif test -n "$save_libobjs" && test : != "$skipped_export" && test -n "$file_list_spec"; then - output=$output_objdir/$output_la.lnk - func_verbose "creating linker input file list: $output" - : > $output - set x $save_libobjs - shift - firstobj= - if test yes = "$compiler_needs_object"; then - firstobj="$1 " - shift - fi - for obj - do - func_to_tool_file "$obj" - $ECHO "$func_to_tool_file_result" >> $output - done - func_append delfiles " $output" - func_to_tool_file "$output" - output=$firstobj\"$file_list_spec$func_to_tool_file_result\" - else - if test -n "$save_libobjs"; then - func_verbose "creating reloadable object files..." - output=$output_objdir/$output_la-$k.$objext - eval test_cmds=\"$reload_cmds\" - func_len " $test_cmds" - len0=$func_len_result - len=$len0 - - # Loop over the list of objects to be linked. - for obj in $save_libobjs - do - func_len " $obj" - func_arith $len + $func_len_result - len=$func_arith_result - if test -z "$objlist" || - test "$len" -lt "$max_cmd_len"; then - func_append objlist " $obj" - else - # The command $test_cmds is almost too long, add a - # command to the queue. - if test 1 -eq "$k"; then - # The first file doesn't have a previous command to add. - reload_objs=$objlist - eval concat_cmds=\"$reload_cmds\" - else - # All subsequent reloadable object files will link in - # the last one created. - reload_objs="$objlist $last_robj" - eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" - fi - last_robj=$output_objdir/$output_la-$k.$objext - func_arith $k + 1 - k=$func_arith_result - output=$output_objdir/$output_la-$k.$objext - objlist=" $obj" - func_len " $last_robj" - func_arith $len0 + $func_len_result - len=$func_arith_result - fi - done - # Handle the remaining objects by creating one last - # reloadable object file. All subsequent reloadable object - # files will link in the last one created. - test -z "$concat_cmds" || concat_cmds=$concat_cmds~ - reload_objs="$objlist $last_robj" - eval concat_cmds=\"\$concat_cmds$reload_cmds\" - if test -n "$last_robj"; then - eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" - fi - func_append delfiles " $output" - - else - output= - fi - - ${skipped_export-false} && { - func_verbose "generating symbol list for '$libname.la'" - export_symbols=$output_objdir/$libname.exp - $opt_dry_run || $RM $export_symbols - libobjs=$output - # Append the command to create the export file. - test -z "$concat_cmds" || concat_cmds=$concat_cmds~ - eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" - if test -n "$last_robj"; then - eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" - fi - } - - test -n "$save_libobjs" && - func_verbose "creating a temporary reloadable object file: $output" - - # Loop through the commands generated above and execute them. - save_ifs=$IFS; IFS='~' - for cmd in $concat_cmds; do - IFS=$save_ifs - $opt_quiet || { - func_quote_for_expand "$cmd" - eval "func_echo $func_quote_for_expand_result" - } - $opt_dry_run || eval "$cmd" || { - lt_exit=$? - - # Restore the uninstalled library and exit - if test relink = "$opt_mode"; then - ( cd "$output_objdir" && \ - $RM "${realname}T" && \ - $MV "${realname}U" "$realname" ) - fi - - exit $lt_exit - } - done - IFS=$save_ifs - - if test -n "$export_symbols_regex" && ${skipped_export-false}; then - func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' - func_show_eval '$MV "${export_symbols}T" "$export_symbols"' - fi - fi - - ${skipped_export-false} && { - if test -n "$export_symbols" && test -n "$include_expsyms"; then - tmp_export_symbols=$export_symbols - test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols - $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' - fi - - if test -n "$orig_export_symbols"; then - # The given exports_symbols file has to be filtered, so filter it. - func_verbose "filter symbol list for '$libname.la' to tag DATA exports" - # FIXME: $output_objdir/$libname.filter potentially contains lots of - # 's' commands, which not all seds can handle. GNU sed should be fine - # though. Also, the filter scales superlinearly with the number of - # global variables. join(1) would be nice here, but unfortunately - # isn't a blessed tool. - $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter - func_append delfiles " $export_symbols $output_objdir/$libname.filter" - export_symbols=$output_objdir/$libname.def - $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols - fi - } - - libobjs=$output - # Restore the value of output. - output=$save_output - - if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then - eval libobjs=\"\$libobjs $whole_archive_flag_spec\" - test "X$libobjs" = "X " && libobjs= - fi - # Expand the library linking commands again to reset the - # value of $libobjs for piecewise linking. - - # Do each of the archive commands. - if test yes = "$module" && test -n "$module_cmds"; then - if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then - cmds=$module_expsym_cmds - else - cmds=$module_cmds - fi - else - if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then - cmds=$archive_expsym_cmds - else - cmds=$archive_cmds - fi - fi - fi - - if test -n "$delfiles"; then - # Append the command to remove temporary files to $cmds. - eval cmds=\"\$cmds~\$RM $delfiles\" - fi - - # Add any objects from preloaded convenience libraries - if test -n "$dlprefiles"; then - gentop=$output_objdir/${outputname}x - func_append generated " $gentop" - - func_extract_archives $gentop $dlprefiles - func_append libobjs " $func_extract_archives_result" - test "X$libobjs" = "X " && libobjs= - fi - - save_ifs=$IFS; IFS='~' - for cmd in $cmds; do - IFS=$sp$nl - eval cmd=\"$cmd\" - IFS=$save_ifs - $opt_quiet || { - func_quote_for_expand "$cmd" - eval "func_echo $func_quote_for_expand_result" - } - $opt_dry_run || eval "$cmd" || { - lt_exit=$? - - # Restore the uninstalled library and exit - if test relink = "$opt_mode"; then - ( cd "$output_objdir" && \ - $RM "${realname}T" && \ - $MV "${realname}U" "$realname" ) - fi - - exit $lt_exit - } - done - IFS=$save_ifs - - # Restore the uninstalled library and exit - if test relink = "$opt_mode"; then - $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? - - if test -n "$convenience"; then - if test -z "$whole_archive_flag_spec"; then - func_show_eval '${RM}r "$gentop"' - fi - fi - - exit $EXIT_SUCCESS - fi - - # Create links to the real library. - for linkname in $linknames; do - if test "$realname" != "$linkname"; then - func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' - fi - done - - # If -module or -export-dynamic was specified, set the dlname. - if test yes = "$module" || test yes = "$export_dynamic"; then - # On all known operating systems, these are identical. - dlname=$soname - fi - fi - ;; - - obj) - if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then - func_warning "'-dlopen' is ignored for objects" - fi - - case " $deplibs" in - *\ -l* | *\ -L*) - func_warning "'-l' and '-L' are ignored for objects" ;; - esac - - test -n "$rpath" && \ - func_warning "'-rpath' is ignored for objects" - - test -n "$xrpath" && \ - func_warning "'-R' is ignored for objects" - - test -n "$vinfo" && \ - func_warning "'-version-info' is ignored for objects" - - test -n "$release" && \ - func_warning "'-release' is ignored for objects" - - case $output in - *.lo) - test -n "$objs$old_deplibs" && \ - func_fatal_error "cannot build library object '$output' from non-libtool objects" - - libobj=$output - func_lo2o "$libobj" - obj=$func_lo2o_result - ;; - *) - libobj= - obj=$output - ;; - esac - - # Delete the old objects. - $opt_dry_run || $RM $obj $libobj - - # Objects from convenience libraries. This assumes - # single-version convenience libraries. Whenever we create - # different ones for PIC/non-PIC, this we'll have to duplicate - # the extraction. - reload_conv_objs= - gentop= - # if reload_cmds runs $LD directly, get rid of -Wl from - # whole_archive_flag_spec and hope we can get by with turning comma - # into space. - case $reload_cmds in - *\$LD[\ \$]*) wl= ;; - esac - if test -n "$convenience"; then - if test -n "$whole_archive_flag_spec"; then - eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" - test -n "$wl" || tmp_whole_archive_flags=`$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` - reload_conv_objs=$reload_objs\ $tmp_whole_archive_flags - else - gentop=$output_objdir/${obj}x - func_append generated " $gentop" - - func_extract_archives $gentop $convenience - reload_conv_objs="$reload_objs $func_extract_archives_result" - fi - fi - - # If we're not building shared, we need to use non_pic_objs - test yes = "$build_libtool_libs" || libobjs=$non_pic_objects - - # Create the old-style object. - reload_objs=$objs$old_deplibs' '`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; /\.lib$/d; $lo2o" | $NL2SP`' '$reload_conv_objs - - output=$obj - func_execute_cmds "$reload_cmds" 'exit $?' - - # Exit if we aren't doing a library object file. - if test -z "$libobj"; then - if test -n "$gentop"; then - func_show_eval '${RM}r "$gentop"' - fi - - exit $EXIT_SUCCESS - fi - - test yes = "$build_libtool_libs" || { - if test -n "$gentop"; then - func_show_eval '${RM}r "$gentop"' - fi - - # Create an invalid libtool object if no PIC, so that we don't - # accidentally link it into a program. - # $show "echo timestamp > $libobj" - # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? - exit $EXIT_SUCCESS - } - - if test -n "$pic_flag" || test default != "$pic_mode"; then - # Only do commands if we really have different PIC objects. - reload_objs="$libobjs $reload_conv_objs" - output=$libobj - func_execute_cmds "$reload_cmds" 'exit $?' - fi - - if test -n "$gentop"; then - func_show_eval '${RM}r "$gentop"' - fi - - exit $EXIT_SUCCESS - ;; - - prog) - case $host in - *cygwin*) func_stripname '' '.exe' "$output" - output=$func_stripname_result.exe;; - esac - test -n "$vinfo" && \ - func_warning "'-version-info' is ignored for programs" - - test -n "$release" && \ - func_warning "'-release' is ignored for programs" - - $preload \ - && test unknown,unknown,unknown = "$dlopen_support,$dlopen_self,$dlopen_self_static" \ - && func_warning "'LT_INIT([dlopen])' not used. Assuming no dlopen support." - - case $host in - *-*-rhapsody* | *-*-darwin1.[012]) - # On Rhapsody replace the C library is the System framework - compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` - finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` - ;; - esac - - case $host in - *-*-darwin*) - # Don't allow lazy linking, it breaks C++ global constructors - # But is supposedly fixed on 10.4 or later (yay!). - if test CXX = "$tagname"; then - case ${MACOSX_DEPLOYMENT_TARGET-10.0} in - 10.[0123]) - func_append compile_command " $wl-bind_at_load" - func_append finalize_command " $wl-bind_at_load" - ;; - esac - fi - # Time to change all our "foo.ltframework" stuff back to "-framework foo" - compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` - finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` - ;; - esac - - - # move library search paths that coincide with paths to not yet - # installed libraries to the beginning of the library search list - new_libs= - for path in $notinst_path; do - case " $new_libs " in - *" -L$path/$objdir "*) ;; - *) - case " $compile_deplibs " in - *" -L$path/$objdir "*) - func_append new_libs " -L$path/$objdir" ;; - esac - ;; - esac - done - for deplib in $compile_deplibs; do - case $deplib in - -L*) - case " $new_libs " in - *" $deplib "*) ;; - *) func_append new_libs " $deplib" ;; - esac - ;; - *) func_append new_libs " $deplib" ;; - esac - done - compile_deplibs=$new_libs - - - func_append compile_command " $compile_deplibs" - func_append finalize_command " $finalize_deplibs" - - if test -n "$rpath$xrpath"; then - # If the user specified any rpath flags, then add them. - for libdir in $rpath $xrpath; do - # This is the magic to use -rpath. - case "$finalize_rpath " in - *" $libdir "*) ;; - *) func_append finalize_rpath " $libdir" ;; - esac - done - fi - - # Now hardcode the library paths - rpath= - hardcode_libdirs= - for libdir in $compile_rpath $finalize_rpath; do - if test -n "$hardcode_libdir_flag_spec"; then - if test -n "$hardcode_libdir_separator"; then - if test -z "$hardcode_libdirs"; then - hardcode_libdirs=$libdir - else - # Just accumulate the unique libdirs. - case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in - *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) - ;; - *) - func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" - ;; - esac - fi - else - eval flag=\"$hardcode_libdir_flag_spec\" - func_append rpath " $flag" - fi - elif test -n "$runpath_var"; then - case "$perm_rpath " in - *" $libdir "*) ;; - *) func_append perm_rpath " $libdir" ;; - esac - fi - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) - testbindir=`$ECHO "$libdir" | $SED -e 's*/lib$*/bin*'` - case :$dllsearchpath: in - *":$libdir:"*) ;; - ::) dllsearchpath=$libdir;; - *) func_append dllsearchpath ":$libdir";; - esac - case :$dllsearchpath: in - *":$testbindir:"*) ;; - ::) dllsearchpath=$testbindir;; - *) func_append dllsearchpath ":$testbindir";; - esac - ;; - esac - done - # Substitute the hardcoded libdirs into the rpath. - if test -n "$hardcode_libdir_separator" && - test -n "$hardcode_libdirs"; then - libdir=$hardcode_libdirs - eval rpath=\" $hardcode_libdir_flag_spec\" - fi - compile_rpath=$rpath - - rpath= - hardcode_libdirs= - for libdir in $finalize_rpath; do - if test -n "$hardcode_libdir_flag_spec"; then - if test -n "$hardcode_libdir_separator"; then - if test -z "$hardcode_libdirs"; then - hardcode_libdirs=$libdir - else - # Just accumulate the unique libdirs. - case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in - *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) - ;; - *) - func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" - ;; - esac - fi - else - eval flag=\"$hardcode_libdir_flag_spec\" - func_append rpath " $flag" - fi - elif test -n "$runpath_var"; then - case "$finalize_perm_rpath " in - *" $libdir "*) ;; - *) func_append finalize_perm_rpath " $libdir" ;; - esac - fi - done - # Substitute the hardcoded libdirs into the rpath. - if test -n "$hardcode_libdir_separator" && - test -n "$hardcode_libdirs"; then - libdir=$hardcode_libdirs - eval rpath=\" $hardcode_libdir_flag_spec\" - fi - finalize_rpath=$rpath - - if test -n "$libobjs" && test yes = "$build_old_libs"; then - # Transform all the library objects into standard objects. - compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` - finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` - fi - - func_generate_dlsyms "$outputname" "@PROGRAM@" false - - # template prelinking step - if test -n "$prelink_cmds"; then - func_execute_cmds "$prelink_cmds" 'exit $?' - fi - - wrappers_required=: - case $host in - *cegcc* | *mingw32ce*) - # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. - wrappers_required=false - ;; - *cygwin* | *mingw* ) - test yes = "$build_libtool_libs" || wrappers_required=false - ;; - *) - if test no = "$need_relink" || test yes != "$build_libtool_libs"; then - wrappers_required=false - fi - ;; - esac - $wrappers_required || { - # Replace the output file specification. - compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` - link_command=$compile_command$compile_rpath - - # We have no uninstalled library dependencies, so finalize right now. - exit_status=0 - func_show_eval "$link_command" 'exit_status=$?' - - if test -n "$postlink_cmds"; then - func_to_tool_file "$output" - postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` - func_execute_cmds "$postlink_cmds" 'exit $?' - fi - - # Delete the generated files. - if test -f "$output_objdir/${outputname}S.$objext"; then - func_show_eval '$RM "$output_objdir/${outputname}S.$objext"' - fi - - exit $exit_status - } - - if test -n "$compile_shlibpath$finalize_shlibpath"; then - compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" - fi - if test -n "$finalize_shlibpath"; then - finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" - fi - - compile_var= - finalize_var= - if test -n "$runpath_var"; then - if test -n "$perm_rpath"; then - # We should set the runpath_var. - rpath= - for dir in $perm_rpath; do - func_append rpath "$dir:" - done - compile_var="$runpath_var=\"$rpath\$$runpath_var\" " - fi - if test -n "$finalize_perm_rpath"; then - # We should set the runpath_var. - rpath= - for dir in $finalize_perm_rpath; do - func_append rpath "$dir:" - done - finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " - fi - fi - - if test yes = "$no_install"; then - # We don't need to create a wrapper script. - link_command=$compile_var$compile_command$compile_rpath - # Replace the output file specification. - link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` - # Delete the old output file. - $opt_dry_run || $RM $output - # Link the executable and exit - func_show_eval "$link_command" 'exit $?' - - if test -n "$postlink_cmds"; then - func_to_tool_file "$output" - postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` - func_execute_cmds "$postlink_cmds" 'exit $?' - fi - - exit $EXIT_SUCCESS - fi - - case $hardcode_action,$fast_install in - relink,*) - # Fast installation is not supported - link_command=$compile_var$compile_command$compile_rpath - relink_command=$finalize_var$finalize_command$finalize_rpath - - func_warning "this platform does not like uninstalled shared libraries" - func_warning "'$output' will be relinked during installation" - ;; - *,yes) - link_command=$finalize_var$compile_command$finalize_rpath - relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` - ;; - *,no) - link_command=$compile_var$compile_command$compile_rpath - relink_command=$finalize_var$finalize_command$finalize_rpath - ;; - *,needless) - link_command=$finalize_var$compile_command$finalize_rpath - relink_command= - ;; - esac - - # Replace the output file specification. - link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` - - # Delete the old output files. - $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname - - func_show_eval "$link_command" 'exit $?' - - if test -n "$postlink_cmds"; then - func_to_tool_file "$output_objdir/$outputname" - postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` - func_execute_cmds "$postlink_cmds" 'exit $?' - fi - - # Now create the wrapper script. - func_verbose "creating $output" - - # Quote the relink command for shipping. - if test -n "$relink_command"; then - # Preserve any variables that may affect compiler behavior - for var in $variables_saved_for_relink; do - if eval test -z \"\${$var+set}\"; then - relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" - elif eval var_value=\$$var; test -z "$var_value"; then - relink_command="$var=; export $var; $relink_command" - else - func_quote_for_eval "$var_value" - relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" - fi - done - relink_command="(cd `pwd`; $relink_command)" - relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` - fi - - # Only actually do things if not in dry run mode. - $opt_dry_run || { - # win32 will think the script is a binary if it has - # a .exe suffix, so we strip it off here. - case $output in - *.exe) func_stripname '' '.exe' "$output" - output=$func_stripname_result ;; - esac - # test for cygwin because mv fails w/o .exe extensions - case $host in - *cygwin*) - exeext=.exe - func_stripname '' '.exe' "$outputname" - outputname=$func_stripname_result ;; - *) exeext= ;; - esac - case $host in - *cygwin* | *mingw* ) - func_dirname_and_basename "$output" "" "." - output_name=$func_basename_result - output_path=$func_dirname_result - cwrappersource=$output_path/$objdir/lt-$output_name.c - cwrapper=$output_path/$output_name.exe - $RM $cwrappersource $cwrapper - trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 - - func_emit_cwrapperexe_src > $cwrappersource - - # The wrapper executable is built using the $host compiler, - # because it contains $host paths and files. If cross- - # compiling, it, like the target executable, must be - # executed on the $host or under an emulation environment. - $opt_dry_run || { - $LTCC $LTCFLAGS -o $cwrapper $cwrappersource - $STRIP $cwrapper - } - - # Now, create the wrapper script for func_source use: - func_ltwrapper_scriptname $cwrapper - $RM $func_ltwrapper_scriptname_result - trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 - $opt_dry_run || { - # note: this script will not be executed, so do not chmod. - if test "x$build" = "x$host"; then - $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result - else - func_emit_wrapper no > $func_ltwrapper_scriptname_result - fi - } - ;; - * ) - $RM $output - trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 - - func_emit_wrapper no > $output - chmod +x $output - ;; - esac - } - exit $EXIT_SUCCESS - ;; - esac - - # See if we need to build an old-fashioned archive. - for oldlib in $oldlibs; do - - case $build_libtool_libs in - convenience) - oldobjs="$libobjs_save $symfileobj" - addlibs=$convenience - build_libtool_libs=no - ;; - module) - oldobjs=$libobjs_save - addlibs=$old_convenience - build_libtool_libs=no - ;; - *) - oldobjs="$old_deplibs $non_pic_objects" - $preload && test -f "$symfileobj" \ - && func_append oldobjs " $symfileobj" - addlibs=$old_convenience - ;; - esac - - if test -n "$addlibs"; then - gentop=$output_objdir/${outputname}x - func_append generated " $gentop" - - func_extract_archives $gentop $addlibs - func_append oldobjs " $func_extract_archives_result" - fi - - # Do each command in the archive commands. - if test -n "$old_archive_from_new_cmds" && test yes = "$build_libtool_libs"; then - cmds=$old_archive_from_new_cmds - else - - # Add any objects from preloaded convenience libraries - if test -n "$dlprefiles"; then - gentop=$output_objdir/${outputname}x - func_append generated " $gentop" - - func_extract_archives $gentop $dlprefiles - func_append oldobjs " $func_extract_archives_result" - fi - - # POSIX demands no paths to be encoded in archives. We have - # to avoid creating archives with duplicate basenames if we - # might have to extract them afterwards, e.g., when creating a - # static archive out of a convenience library, or when linking - # the entirety of a libtool archive into another (currently - # not supported by libtool). - if (for obj in $oldobjs - do - func_basename "$obj" - $ECHO "$func_basename_result" - done | sort | sort -uc >/dev/null 2>&1); then - : - else - echo "copying selected object files to avoid basename conflicts..." - gentop=$output_objdir/${outputname}x - func_append generated " $gentop" - func_mkdir_p "$gentop" - save_oldobjs=$oldobjs - oldobjs= - counter=1 - for obj in $save_oldobjs - do - func_basename "$obj" - objbase=$func_basename_result - case " $oldobjs " in - " ") oldobjs=$obj ;; - *[\ /]"$objbase "*) - while :; do - # Make sure we don't pick an alternate name that also - # overlaps. - newobj=lt$counter-$objbase - func_arith $counter + 1 - counter=$func_arith_result - case " $oldobjs " in - *[\ /]"$newobj "*) ;; - *) if test ! -f "$gentop/$newobj"; then break; fi ;; - esac - done - func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" - func_append oldobjs " $gentop/$newobj" - ;; - *) func_append oldobjs " $obj" ;; - esac - done - fi - func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 - tool_oldlib=$func_to_tool_file_result - eval cmds=\"$old_archive_cmds\" - - func_len " $cmds" - len=$func_len_result - if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then - cmds=$old_archive_cmds - elif test -n "$archiver_list_spec"; then - func_verbose "using command file archive linking..." - for obj in $oldobjs - do - func_to_tool_file "$obj" - $ECHO "$func_to_tool_file_result" - done > $output_objdir/$libname.libcmd - func_to_tool_file "$output_objdir/$libname.libcmd" - oldobjs=" $archiver_list_spec$func_to_tool_file_result" - cmds=$old_archive_cmds - else - # the command line is too long to link in one step, link in parts - func_verbose "using piecewise archive linking..." - save_RANLIB=$RANLIB - RANLIB=: - objlist= - concat_cmds= - save_oldobjs=$oldobjs - oldobjs= - # Is there a better way of finding the last object in the list? - for obj in $save_oldobjs - do - last_oldobj=$obj - done - eval test_cmds=\"$old_archive_cmds\" - func_len " $test_cmds" - len0=$func_len_result - len=$len0 - for obj in $save_oldobjs - do - func_len " $obj" - func_arith $len + $func_len_result - len=$func_arith_result - func_append objlist " $obj" - if test "$len" -lt "$max_cmd_len"; then - : - else - # the above command should be used before it gets too long - oldobjs=$objlist - if test "$obj" = "$last_oldobj"; then - RANLIB=$save_RANLIB - fi - test -z "$concat_cmds" || concat_cmds=$concat_cmds~ - eval concat_cmds=\"\$concat_cmds$old_archive_cmds\" - objlist= - len=$len0 - fi - done - RANLIB=$save_RANLIB - oldobjs=$objlist - if test -z "$oldobjs"; then - eval cmds=\"\$concat_cmds\" - else - eval cmds=\"\$concat_cmds~\$old_archive_cmds\" - fi - fi - fi - func_execute_cmds "$cmds" 'exit $?' - done - - test -n "$generated" && \ - func_show_eval "${RM}r$generated" - - # Now create the libtool archive. - case $output in - *.la) - old_library= - test yes = "$build_old_libs" && old_library=$libname.$libext - func_verbose "creating $output" - - # Preserve any variables that may affect compiler behavior - for var in $variables_saved_for_relink; do - if eval test -z \"\${$var+set}\"; then - relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" - elif eval var_value=\$$var; test -z "$var_value"; then - relink_command="$var=; export $var; $relink_command" - else - func_quote_for_eval "$var_value" - relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" - fi - done - # Quote the link command for shipping. - relink_command="(cd `pwd`; $SHELL \"$progpath\" $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" - relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` - if test yes = "$hardcode_automatic"; then - relink_command= - fi - - # Only create the output if not a dry run. - $opt_dry_run || { - for installed in no yes; do - if test yes = "$installed"; then - if test -z "$install_libdir"; then - break - fi - output=$output_objdir/${outputname}i - # Replace all uninstalled libtool libraries with the installed ones - newdependency_libs= - for deplib in $dependency_libs; do - case $deplib in - *.la) - func_basename "$deplib" - name=$func_basename_result - func_resolve_sysroot "$deplib" - eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` - test -z "$libdir" && \ - func_fatal_error "'$deplib' is not a valid libtool archive" - func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" - ;; - -L*) - func_stripname -L '' "$deplib" - func_replace_sysroot "$func_stripname_result" - func_append newdependency_libs " -L$func_replace_sysroot_result" - ;; - -R*) - func_stripname -R '' "$deplib" - func_replace_sysroot "$func_stripname_result" - func_append newdependency_libs " -R$func_replace_sysroot_result" - ;; - *) func_append newdependency_libs " $deplib" ;; - esac - done - dependency_libs=$newdependency_libs - newdlfiles= - - for lib in $dlfiles; do - case $lib in - *.la) - func_basename "$lib" - name=$func_basename_result - eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib` - test -z "$libdir" && \ - func_fatal_error "'$lib' is not a valid libtool archive" - func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" - ;; - *) func_append newdlfiles " $lib" ;; - esac - done - dlfiles=$newdlfiles - newdlprefiles= - for lib in $dlprefiles; do - case $lib in - *.la) - # Only pass preopened files to the pseudo-archive (for - # eventual linking with the app. that links it) if we - # didn't already link the preopened objects directly into - # the library: - func_basename "$lib" - name=$func_basename_result - eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib` - test -z "$libdir" && \ - func_fatal_error "'$lib' is not a valid libtool archive" - func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" - ;; - esac - done - dlprefiles=$newdlprefiles - else - newdlfiles= - for lib in $dlfiles; do - case $lib in - [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;; - *) abs=`pwd`"/$lib" ;; - esac - func_append newdlfiles " $abs" - done - dlfiles=$newdlfiles - newdlprefiles= - for lib in $dlprefiles; do - case $lib in - [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;; - *) abs=`pwd`"/$lib" ;; - esac - func_append newdlprefiles " $abs" - done - dlprefiles=$newdlprefiles - fi - $RM $output - # place dlname in correct position for cygwin - # In fact, it would be nice if we could use this code for all target - # systems that can't hard-code library paths into their executables - # and that have no shared library path variable independent of PATH, - # but it turns out we can't easily determine that from inspecting - # libtool variables, so we have to hard-code the OSs to which it - # applies here; at the moment, that means platforms that use the PE - # object format with DLL files. See the long comment at the top of - # tests/bindir.at for full details. - tdlname=$dlname - case $host,$output,$installed,$module,$dlname in - *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) - # If a -bindir argument was supplied, place the dll there. - if test -n "$bindir"; then - func_relative_path "$install_libdir" "$bindir" - tdlname=$func_relative_path_result/$dlname - else - # Otherwise fall back on heuristic. - tdlname=../bin/$dlname - fi - ;; - esac - $ECHO > $output "\ -# $outputname - a libtool library file -# Generated by $PROGRAM (GNU $PACKAGE) $VERSION -# -# Please DO NOT delete this file! -# It is necessary for linking the library. - -# The name that we can dlopen(3). -dlname='$tdlname' - -# Names of this library. -library_names='$library_names' - -# The name of the static archive. -old_library='$old_library' - -# Linker flags that cannot go in dependency_libs. -inherited_linker_flags='$new_inherited_linker_flags' - -# Libraries that this one depends upon. -dependency_libs='$dependency_libs' - -# Names of additional weak libraries provided by this library -weak_library_names='$weak_libs' - -# Version information for $libname. -current=$current -age=$age -revision=$revision - -# Is this an already installed library? -installed=$installed - -# Should we warn about portability when linking against -modules? -shouldnotlink=$module - -# Files to dlopen/dlpreopen -dlopen='$dlfiles' -dlpreopen='$dlprefiles' - -# Directory that this library needs to be installed in: -libdir='$install_libdir'" - if test no,yes = "$installed,$need_relink"; then - $ECHO >> $output "\ -relink_command=\"$relink_command\"" - fi - done - } - - # Do a symbolic link so that the libtool archive can be found in - # LD_LIBRARY_PATH before the program is installed. - func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' - ;; - esac - exit $EXIT_SUCCESS -} - -if test link = "$opt_mode" || test relink = "$opt_mode"; then - func_mode_link ${1+"$@"} -fi - - -# func_mode_uninstall arg... -func_mode_uninstall () -{ - $debug_cmd - - RM=$nonopt - files= - rmforce=false - exit_status=0 - - # This variable tells wrapper scripts just to set variables rather - # than running their programs. - libtool_install_magic=$magic - - for arg - do - case $arg in - -f) func_append RM " $arg"; rmforce=: ;; - -*) func_append RM " $arg" ;; - *) func_append files " $arg" ;; - esac - done - - test -z "$RM" && \ - func_fatal_help "you must specify an RM program" - - rmdirs= - - for file in $files; do - func_dirname "$file" "" "." - dir=$func_dirname_result - if test . = "$dir"; then - odir=$objdir - else - odir=$dir/$objdir - fi - func_basename "$file" - name=$func_basename_result - test uninstall = "$opt_mode" && odir=$dir - - # Remember odir for removal later, being careful to avoid duplicates - if test clean = "$opt_mode"; then - case " $rmdirs " in - *" $odir "*) ;; - *) func_append rmdirs " $odir" ;; - esac - fi - - # Don't error if the file doesn't exist and rm -f was used. - if { test -L "$file"; } >/dev/null 2>&1 || - { test -h "$file"; } >/dev/null 2>&1 || - test -f "$file"; then - : - elif test -d "$file"; then - exit_status=1 - continue - elif $rmforce; then - continue - fi - - rmfiles=$file - - case $name in - *.la) - # Possibly a libtool archive, so verify it. - if func_lalib_p "$file"; then - func_source $dir/$name - - # Delete the libtool libraries and symlinks. - for n in $library_names; do - func_append rmfiles " $odir/$n" - done - test -n "$old_library" && func_append rmfiles " $odir/$old_library" - - case $opt_mode in - clean) - case " $library_names " in - *" $dlname "*) ;; - *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; - esac - test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" - ;; - uninstall) - if test -n "$library_names"; then - # Do each command in the postuninstall commands. - func_execute_cmds "$postuninstall_cmds" '$rmforce || exit_status=1' - fi - - if test -n "$old_library"; then - # Do each command in the old_postuninstall commands. - func_execute_cmds "$old_postuninstall_cmds" '$rmforce || exit_status=1' - fi - # FIXME: should reinstall the best remaining shared library. - ;; - esac - fi - ;; - - *.lo) - # Possibly a libtool object, so verify it. - if func_lalib_p "$file"; then - - # Read the .lo file - func_source $dir/$name - - # Add PIC object to the list of files to remove. - if test -n "$pic_object" && test none != "$pic_object"; then - func_append rmfiles " $dir/$pic_object" - fi - - # Add non-PIC object to the list of files to remove. - if test -n "$non_pic_object" && test none != "$non_pic_object"; then - func_append rmfiles " $dir/$non_pic_object" - fi - fi - ;; - - *) - if test clean = "$opt_mode"; then - noexename=$name - case $file in - *.exe) - func_stripname '' '.exe' "$file" - file=$func_stripname_result - func_stripname '' '.exe' "$name" - noexename=$func_stripname_result - # $file with .exe has already been added to rmfiles, - # add $file without .exe - func_append rmfiles " $file" - ;; - esac - # Do a test to see if this is a libtool program. - if func_ltwrapper_p "$file"; then - if func_ltwrapper_executable_p "$file"; then - func_ltwrapper_scriptname "$file" - relink_command= - func_source $func_ltwrapper_scriptname_result - func_append rmfiles " $func_ltwrapper_scriptname_result" - else - relink_command= - func_source $dir/$noexename - fi - - # note $name still contains .exe if it was in $file originally - # as does the version of $file that was added into $rmfiles - func_append rmfiles " $odir/$name $odir/${name}S.$objext" - if test yes = "$fast_install" && test -n "$relink_command"; then - func_append rmfiles " $odir/lt-$name" - fi - if test "X$noexename" != "X$name"; then - func_append rmfiles " $odir/lt-$noexename.c" - fi - fi - fi - ;; - esac - func_show_eval "$RM $rmfiles" 'exit_status=1' - done - - # Try to remove the $objdir's in the directories where we deleted files - for dir in $rmdirs; do - if test -d "$dir"; then - func_show_eval "rmdir $dir >/dev/null 2>&1" - fi - done - - exit $exit_status -} - -if test uninstall = "$opt_mode" || test clean = "$opt_mode"; then - func_mode_uninstall ${1+"$@"} -fi - -test -z "$opt_mode" && { - help=$generic_help - func_fatal_help "you must specify a MODE" -} - -test -z "$exec_cmd" && \ - func_fatal_help "invalid operation mode '$opt_mode'" - -if test -n "$exec_cmd"; then - eval exec "$exec_cmd" - exit $EXIT_FAILURE -fi - -exit $exit_status - - -# The TAGs below are defined such that we never get into a situation -# where we disable both kinds of libraries. Given conflicting -# choices, we go for a static library, that is the most portable, -# since we can't tell whether shared libraries were disabled because -# the user asked for that or because the platform doesn't support -# them. This is particularly important on AIX, because we don't -# support having both static and shared libraries enabled at the same -# time on that platform, so we default to a shared-only configuration. -# If a disable-shared tag is given, we'll fallback to a static-only -# configuration. But we'll never go from static-only to shared-only. - -# ### BEGIN LIBTOOL TAG CONFIG: disable-shared -build_libtool_libs=no -build_old_libs=yes -# ### END LIBTOOL TAG CONFIG: disable-shared - -# ### BEGIN LIBTOOL TAG CONFIG: disable-static -build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` -# ### END LIBTOOL TAG CONFIG: disable-static - -# Local Variables: -# mode:shell-script -# sh-indentation:2 -# End: diff --git a/Extended/libwebp/ltmain.sh b/Extended/libwebp/ltmain.sh deleted file mode 100644 index c12c197..0000000 --- a/Extended/libwebp/ltmain.sh +++ /dev/null @@ -1,11249 +0,0 @@ -#! /bin/sh -## DO NOT EDIT - This file generated from ./build-aux/ltmain.in -## by inline-source v2014-01-03.01 - -# libtool (GNU libtool) 2.4.6 -# Provide generalized library-building support services. -# Written by Gordon Matzigkeit , 1996 - -# Copyright (C) 1996-2015 Free Software Foundation, Inc. -# This is free software; see the source for copying conditions. There is NO -# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -# GNU Libtool is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# As a special exception to the GNU General Public License, -# if you distribute this file as part of a program or library that -# is built using GNU Libtool, you may include this file under the -# same distribution terms that you use for the rest of that program. -# -# GNU Libtool is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . - - -PROGRAM=libtool -PACKAGE=libtool -VERSION="2.4.6 Debian-2.4.6-9" -package_revision=2.4.6 - - -## ------ ## -## Usage. ## -## ------ ## - -# Run './libtool --help' for help with using this script from the -# command line. - - -## ------------------------------- ## -## User overridable command paths. ## -## ------------------------------- ## - -# After configure completes, it has a better idea of some of the -# shell tools we need than the defaults used by the functions shared -# with bootstrap, so set those here where they can still be over- -# ridden by the user, but otherwise take precedence. - -: ${AUTOCONF="autoconf"} -: ${AUTOMAKE="automake"} - - -## -------------------------- ## -## Source external libraries. ## -## -------------------------- ## - -# Much of our low-level functionality needs to be sourced from external -# libraries, which are installed to $pkgauxdir. - -# Set a version string for this script. -scriptversion=2015-01-20.17; # UTC - -# General shell script boiler plate, and helper functions. -# Written by Gary V. Vaughan, 2004 - -# Copyright (C) 2004-2015 Free Software Foundation, Inc. -# This is free software; see the source for copying conditions. There is NO -# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3 of the License, or -# (at your option) any later version. - -# As a special exception to the GNU General Public License, if you distribute -# this file as part of a program or library that is built using GNU Libtool, -# you may include this file under the same distribution terms that you use -# for the rest of that program. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNES FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . - -# Please report bugs or propose patches to gary@gnu.org. - - -## ------ ## -## Usage. ## -## ------ ## - -# Evaluate this file near the top of your script to gain access to -# the functions and variables defined here: -# -# . `echo "$0" | ${SED-sed} 's|[^/]*$||'`/build-aux/funclib.sh -# -# If you need to override any of the default environment variable -# settings, do that before evaluating this file. - - -## -------------------- ## -## Shell normalisation. ## -## -------------------- ## - -# Some shells need a little help to be as Bourne compatible as possible. -# Before doing anything else, make sure all that help has been provided! - -DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac -fi - -# NLS nuisances: We save the old values in case they are required later. -_G_user_locale= -_G_safe_locale= -for _G_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES -do - eval "if test set = \"\${$_G_var+set}\"; then - save_$_G_var=\$$_G_var - $_G_var=C - export $_G_var - _G_user_locale=\"$_G_var=\\\$save_\$_G_var; \$_G_user_locale\" - _G_safe_locale=\"$_G_var=C; \$_G_safe_locale\" - fi" -done - -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -# Make sure IFS has a sensible default -sp=' ' -nl=' -' -IFS="$sp $nl" - -# There are apparently some retarded systems that use ';' as a PATH separator! -if test "${PATH_SEPARATOR+set}" != set; then - PATH_SEPARATOR=: - (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { - (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || - PATH_SEPARATOR=';' - } -fi - - - -## ------------------------- ## -## Locate command utilities. ## -## ------------------------- ## - - -# func_executable_p FILE -# ---------------------- -# Check that FILE is an executable regular file. -func_executable_p () -{ - test -f "$1" && test -x "$1" -} - - -# func_path_progs PROGS_LIST CHECK_FUNC [PATH] -# -------------------------------------------- -# Search for either a program that responds to --version with output -# containing "GNU", or else returned by CHECK_FUNC otherwise, by -# trying all the directories in PATH with each of the elements of -# PROGS_LIST. -# -# CHECK_FUNC should accept the path to a candidate program, and -# set $func_check_prog_result if it truncates its output less than -# $_G_path_prog_max characters. -func_path_progs () -{ - _G_progs_list=$1 - _G_check_func=$2 - _G_PATH=${3-"$PATH"} - - _G_path_prog_max=0 - _G_path_prog_found=false - _G_save_IFS=$IFS; IFS=${PATH_SEPARATOR-:} - for _G_dir in $_G_PATH; do - IFS=$_G_save_IFS - test -z "$_G_dir" && _G_dir=. - for _G_prog_name in $_G_progs_list; do - for _exeext in '' .EXE; do - _G_path_prog=$_G_dir/$_G_prog_name$_exeext - func_executable_p "$_G_path_prog" || continue - case `"$_G_path_prog" --version 2>&1` in - *GNU*) func_path_progs_result=$_G_path_prog _G_path_prog_found=: ;; - *) $_G_check_func $_G_path_prog - func_path_progs_result=$func_check_prog_result - ;; - esac - $_G_path_prog_found && break 3 - done - done - done - IFS=$_G_save_IFS - test -z "$func_path_progs_result" && { - echo "no acceptable sed could be found in \$PATH" >&2 - exit 1 - } -} - - -# We want to be able to use the functions in this file before configure -# has figured out where the best binaries are kept, which means we have -# to search for them ourselves - except when the results are already set -# where we skip the searches. - -# Unless the user overrides by setting SED, search the path for either GNU -# sed, or the sed that truncates its output the least. -test -z "$SED" && { - _G_sed_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ - for _G_i in 1 2 3 4 5 6 7; do - _G_sed_script=$_G_sed_script$nl$_G_sed_script - done - echo "$_G_sed_script" 2>/dev/null | sed 99q >conftest.sed - _G_sed_script= - - func_check_prog_sed () - { - _G_path_prog=$1 - - _G_count=0 - printf 0123456789 >conftest.in - while : - do - cat conftest.in conftest.in >conftest.tmp - mv conftest.tmp conftest.in - cp conftest.in conftest.nl - echo '' >> conftest.nl - "$_G_path_prog" -f conftest.sed conftest.out 2>/dev/null || break - diff conftest.out conftest.nl >/dev/null 2>&1 || break - _G_count=`expr $_G_count + 1` - if test "$_G_count" -gt "$_G_path_prog_max"; then - # Best one so far, save it but keep looking for a better one - func_check_prog_result=$_G_path_prog - _G_path_prog_max=$_G_count - fi - # 10*(2^10) chars as input seems more than enough - test 10 -lt "$_G_count" && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out - } - - func_path_progs "sed gsed" func_check_prog_sed $PATH:/usr/xpg4/bin - rm -f conftest.sed - SED=$func_path_progs_result -} - - -# Unless the user overrides by setting GREP, search the path for either GNU -# grep, or the grep that truncates its output the least. -test -z "$GREP" && { - func_check_prog_grep () - { - _G_path_prog=$1 - - _G_count=0 - _G_path_prog_max=0 - printf 0123456789 >conftest.in - while : - do - cat conftest.in conftest.in >conftest.tmp - mv conftest.tmp conftest.in - cp conftest.in conftest.nl - echo 'GREP' >> conftest.nl - "$_G_path_prog" -e 'GREP$' -e '-(cannot match)-' conftest.out 2>/dev/null || break - diff conftest.out conftest.nl >/dev/null 2>&1 || break - _G_count=`expr $_G_count + 1` - if test "$_G_count" -gt "$_G_path_prog_max"; then - # Best one so far, save it but keep looking for a better one - func_check_prog_result=$_G_path_prog - _G_path_prog_max=$_G_count - fi - # 10*(2^10) chars as input seems more than enough - test 10 -lt "$_G_count" && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out - } - - func_path_progs "grep ggrep" func_check_prog_grep $PATH:/usr/xpg4/bin - GREP=$func_path_progs_result -} - - -## ------------------------------- ## -## User overridable command paths. ## -## ------------------------------- ## - -# All uppercase variable names are used for environment variables. These -# variables can be overridden by the user before calling a script that -# uses them if a suitable command of that name is not already available -# in the command search PATH. - -: ${CP="cp -f"} -: ${ECHO="printf %s\n"} -: ${EGREP="$GREP -E"} -: ${FGREP="$GREP -F"} -: ${LN_S="ln -s"} -: ${MAKE="make"} -: ${MKDIR="mkdir"} -: ${MV="mv -f"} -: ${RM="rm -f"} -: ${SHELL="${CONFIG_SHELL-/bin/sh}"} - - -## -------------------- ## -## Useful sed snippets. ## -## -------------------- ## - -sed_dirname='s|/[^/]*$||' -sed_basename='s|^.*/||' - -# Sed substitution that helps us do robust quoting. It backslashifies -# metacharacters that are still active within double-quoted strings. -sed_quote_subst='s|\([`"$\\]\)|\\\1|g' - -# Same as above, but do not quote variable references. -sed_double_quote_subst='s/\(["`\\]\)/\\\1/g' - -# Sed substitution that turns a string into a regex matching for the -# string literally. -sed_make_literal_regex='s|[].[^$\\*\/]|\\&|g' - -# Sed substitution that converts a w32 file name or path -# that contains forward slashes, into one that contains -# (escaped) backslashes. A very naive implementation. -sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' - -# Re-'\' parameter expansions in output of sed_double_quote_subst that -# were '\'-ed in input to the same. If an odd number of '\' preceded a -# '$' in input to sed_double_quote_subst, that '$' was protected from -# expansion. Since each input '\' is now two '\'s, look for any number -# of runs of four '\'s followed by two '\'s and then a '$'. '\' that '$'. -_G_bs='\\' -_G_bs2='\\\\' -_G_bs4='\\\\\\\\' -_G_dollar='\$' -sed_double_backslash="\ - s/$_G_bs4/&\\ -/g - s/^$_G_bs2$_G_dollar/$_G_bs&/ - s/\\([^$_G_bs]\\)$_G_bs2$_G_dollar/\\1$_G_bs2$_G_bs$_G_dollar/g - s/\n//g" - - -## ----------------- ## -## Global variables. ## -## ----------------- ## - -# Except for the global variables explicitly listed below, the following -# functions in the '^func_' namespace, and the '^require_' namespace -# variables initialised in the 'Resource management' section, sourcing -# this file will not pollute your global namespace with anything -# else. There's no portable way to scope variables in Bourne shell -# though, so actually running these functions will sometimes place -# results into a variable named after the function, and often use -# temporary variables in the '^_G_' namespace. If you are careful to -# avoid using those namespaces casually in your sourcing script, things -# should continue to work as you expect. And, of course, you can freely -# overwrite any of the functions or variables defined here before -# calling anything to customize them. - -EXIT_SUCCESS=0 -EXIT_FAILURE=1 -EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. -EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. - -# Allow overriding, eg assuming that you follow the convention of -# putting '$debug_cmd' at the start of all your functions, you can get -# bash to show function call trace with: -# -# debug_cmd='eval echo "${FUNCNAME[0]} $*" >&2' bash your-script-name -debug_cmd=${debug_cmd-":"} -exit_cmd=: - -# By convention, finish your script with: -# -# exit $exit_status -# -# so that you can set exit_status to non-zero if you want to indicate -# something went wrong during execution without actually bailing out at -# the point of failure. -exit_status=$EXIT_SUCCESS - -# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh -# is ksh but when the shell is invoked as "sh" and the current value of -# the _XPG environment variable is not equal to 1 (one), the special -# positional parameter $0, within a function call, is the name of the -# function. -progpath=$0 - -# The name of this program. -progname=`$ECHO "$progpath" |$SED "$sed_basename"` - -# Make sure we have an absolute progpath for reexecution: -case $progpath in - [\\/]*|[A-Za-z]:\\*) ;; - *[\\/]*) - progdir=`$ECHO "$progpath" |$SED "$sed_dirname"` - progdir=`cd "$progdir" && pwd` - progpath=$progdir/$progname - ;; - *) - _G_IFS=$IFS - IFS=${PATH_SEPARATOR-:} - for progdir in $PATH; do - IFS=$_G_IFS - test -x "$progdir/$progname" && break - done - IFS=$_G_IFS - test -n "$progdir" || progdir=`pwd` - progpath=$progdir/$progname - ;; -esac - - -## ----------------- ## -## Standard options. ## -## ----------------- ## - -# The following options affect the operation of the functions defined -# below, and should be set appropriately depending on run-time para- -# meters passed on the command line. - -opt_dry_run=false -opt_quiet=false -opt_verbose=false - -# Categories 'all' and 'none' are always available. Append any others -# you will pass as the first argument to func_warning from your own -# code. -warning_categories= - -# By default, display warnings according to 'opt_warning_types'. Set -# 'warning_func' to ':' to elide all warnings, or func_fatal_error to -# treat the next displayed warning as a fatal error. -warning_func=func_warn_and_continue - -# Set to 'all' to display all warnings, 'none' to suppress all -# warnings, or a space delimited list of some subset of -# 'warning_categories' to display only the listed warnings. -opt_warning_types=all - - -## -------------------- ## -## Resource management. ## -## -------------------- ## - -# This section contains definitions for functions that each ensure a -# particular resource (a file, or a non-empty configuration variable for -# example) is available, and if appropriate to extract default values -# from pertinent package files. Call them using their associated -# 'require_*' variable to ensure that they are executed, at most, once. -# -# It's entirely deliberate that calling these functions can set -# variables that don't obey the namespace limitations obeyed by the rest -# of this file, in order that that they be as useful as possible to -# callers. - - -# require_term_colors -# ------------------- -# Allow display of bold text on terminals that support it. -require_term_colors=func_require_term_colors -func_require_term_colors () -{ - $debug_cmd - - test -t 1 && { - # COLORTERM and USE_ANSI_COLORS environment variables take - # precedence, because most terminfo databases neglect to describe - # whether color sequences are supported. - test -n "${COLORTERM+set}" && : ${USE_ANSI_COLORS="1"} - - if test 1 = "$USE_ANSI_COLORS"; then - # Standard ANSI escape sequences - tc_reset='' - tc_bold=''; tc_standout='' - tc_red=''; tc_green='' - tc_blue=''; tc_cyan='' - else - # Otherwise trust the terminfo database after all. - test -n "`tput sgr0 2>/dev/null`" && { - tc_reset=`tput sgr0` - test -n "`tput bold 2>/dev/null`" && tc_bold=`tput bold` - tc_standout=$tc_bold - test -n "`tput smso 2>/dev/null`" && tc_standout=`tput smso` - test -n "`tput setaf 1 2>/dev/null`" && tc_red=`tput setaf 1` - test -n "`tput setaf 2 2>/dev/null`" && tc_green=`tput setaf 2` - test -n "`tput setaf 4 2>/dev/null`" && tc_blue=`tput setaf 4` - test -n "`tput setaf 5 2>/dev/null`" && tc_cyan=`tput setaf 5` - } - fi - } - - require_term_colors=: -} - - -## ----------------- ## -## Function library. ## -## ----------------- ## - -# This section contains a variety of useful functions to call in your -# scripts. Take note of the portable wrappers for features provided by -# some modern shells, which will fall back to slower equivalents on -# less featureful shells. - - -# func_append VAR VALUE -# --------------------- -# Append VALUE onto the existing contents of VAR. - - # We should try to minimise forks, especially on Windows where they are - # unreasonably slow, so skip the feature probes when bash or zsh are - # being used: - if test set = "${BASH_VERSION+set}${ZSH_VERSION+set}"; then - : ${_G_HAVE_ARITH_OP="yes"} - : ${_G_HAVE_XSI_OPS="yes"} - # The += operator was introduced in bash 3.1 - case $BASH_VERSION in - [12].* | 3.0 | 3.0*) ;; - *) - : ${_G_HAVE_PLUSEQ_OP="yes"} - ;; - esac - fi - - # _G_HAVE_PLUSEQ_OP - # Can be empty, in which case the shell is probed, "yes" if += is - # useable or anything else if it does not work. - test -z "$_G_HAVE_PLUSEQ_OP" \ - && (eval 'x=a; x+=" b"; test "a b" = "$x"') 2>/dev/null \ - && _G_HAVE_PLUSEQ_OP=yes - -if test yes = "$_G_HAVE_PLUSEQ_OP" -then - # This is an XSI compatible shell, allowing a faster implementation... - eval 'func_append () - { - $debug_cmd - - eval "$1+=\$2" - }' -else - # ...otherwise fall back to using expr, which is often a shell builtin. - func_append () - { - $debug_cmd - - eval "$1=\$$1\$2" - } -fi - - -# func_append_quoted VAR VALUE -# ---------------------------- -# Quote VALUE and append to the end of shell variable VAR, separated -# by a space. -if test yes = "$_G_HAVE_PLUSEQ_OP"; then - eval 'func_append_quoted () - { - $debug_cmd - - func_quote_for_eval "$2" - eval "$1+=\\ \$func_quote_for_eval_result" - }' -else - func_append_quoted () - { - $debug_cmd - - func_quote_for_eval "$2" - eval "$1=\$$1\\ \$func_quote_for_eval_result" - } -fi - - -# func_append_uniq VAR VALUE -# -------------------------- -# Append unique VALUE onto the existing contents of VAR, assuming -# entries are delimited by the first character of VALUE. For example: -# -# func_append_uniq options " --another-option option-argument" -# -# will only append to $options if " --another-option option-argument " -# is not already present somewhere in $options already (note spaces at -# each end implied by leading space in second argument). -func_append_uniq () -{ - $debug_cmd - - eval _G_current_value='`$ECHO $'$1'`' - _G_delim=`expr "$2" : '\(.\)'` - - case $_G_delim$_G_current_value$_G_delim in - *"$2$_G_delim"*) ;; - *) func_append "$@" ;; - esac -} - - -# func_arith TERM... -# ------------------ -# Set func_arith_result to the result of evaluating TERMs. - test -z "$_G_HAVE_ARITH_OP" \ - && (eval 'test 2 = $(( 1 + 1 ))') 2>/dev/null \ - && _G_HAVE_ARITH_OP=yes - -if test yes = "$_G_HAVE_ARITH_OP"; then - eval 'func_arith () - { - $debug_cmd - - func_arith_result=$(( $* )) - }' -else - func_arith () - { - $debug_cmd - - func_arith_result=`expr "$@"` - } -fi - - -# func_basename FILE -# ------------------ -# Set func_basename_result to FILE with everything up to and including -# the last / stripped. -if test yes = "$_G_HAVE_XSI_OPS"; then - # If this shell supports suffix pattern removal, then use it to avoid - # forking. Hide the definitions single quotes in case the shell chokes - # on unsupported syntax... - _b='func_basename_result=${1##*/}' - _d='case $1 in - */*) func_dirname_result=${1%/*}$2 ;; - * ) func_dirname_result=$3 ;; - esac' - -else - # ...otherwise fall back to using sed. - _b='func_basename_result=`$ECHO "$1" |$SED "$sed_basename"`' - _d='func_dirname_result=`$ECHO "$1" |$SED "$sed_dirname"` - if test "X$func_dirname_result" = "X$1"; then - func_dirname_result=$3 - else - func_append func_dirname_result "$2" - fi' -fi - -eval 'func_basename () -{ - $debug_cmd - - '"$_b"' -}' - - -# func_dirname FILE APPEND NONDIR_REPLACEMENT -# ------------------------------------------- -# Compute the dirname of FILE. If nonempty, add APPEND to the result, -# otherwise set result to NONDIR_REPLACEMENT. -eval 'func_dirname () -{ - $debug_cmd - - '"$_d"' -}' - - -# func_dirname_and_basename FILE APPEND NONDIR_REPLACEMENT -# -------------------------------------------------------- -# Perform func_basename and func_dirname in a single function -# call: -# dirname: Compute the dirname of FILE. If nonempty, -# add APPEND to the result, otherwise set result -# to NONDIR_REPLACEMENT. -# value returned in "$func_dirname_result" -# basename: Compute filename of FILE. -# value retuned in "$func_basename_result" -# For efficiency, we do not delegate to the functions above but instead -# duplicate the functionality here. -eval 'func_dirname_and_basename () -{ - $debug_cmd - - '"$_b"' - '"$_d"' -}' - - -# func_echo ARG... -# ---------------- -# Echo program name prefixed message. -func_echo () -{ - $debug_cmd - - _G_message=$* - - func_echo_IFS=$IFS - IFS=$nl - for _G_line in $_G_message; do - IFS=$func_echo_IFS - $ECHO "$progname: $_G_line" - done - IFS=$func_echo_IFS -} - - -# func_echo_all ARG... -# -------------------- -# Invoke $ECHO with all args, space-separated. -func_echo_all () -{ - $ECHO "$*" -} - - -# func_echo_infix_1 INFIX ARG... -# ------------------------------ -# Echo program name, followed by INFIX on the first line, with any -# additional lines not showing INFIX. -func_echo_infix_1 () -{ - $debug_cmd - - $require_term_colors - - _G_infix=$1; shift - _G_indent=$_G_infix - _G_prefix="$progname: $_G_infix: " - _G_message=$* - - # Strip color escape sequences before counting printable length - for _G_tc in "$tc_reset" "$tc_bold" "$tc_standout" "$tc_red" "$tc_green" "$tc_blue" "$tc_cyan" - do - test -n "$_G_tc" && { - _G_esc_tc=`$ECHO "$_G_tc" | $SED "$sed_make_literal_regex"` - _G_indent=`$ECHO "$_G_indent" | $SED "s|$_G_esc_tc||g"` - } - done - _G_indent="$progname: "`echo "$_G_indent" | $SED 's|.| |g'`" " ## exclude from sc_prohibit_nested_quotes - - func_echo_infix_1_IFS=$IFS - IFS=$nl - for _G_line in $_G_message; do - IFS=$func_echo_infix_1_IFS - $ECHO "$_G_prefix$tc_bold$_G_line$tc_reset" >&2 - _G_prefix=$_G_indent - done - IFS=$func_echo_infix_1_IFS -} - - -# func_error ARG... -# ----------------- -# Echo program name prefixed message to standard error. -func_error () -{ - $debug_cmd - - $require_term_colors - - func_echo_infix_1 " $tc_standout${tc_red}error$tc_reset" "$*" >&2 -} - - -# func_fatal_error ARG... -# ----------------------- -# Echo program name prefixed message to standard error, and exit. -func_fatal_error () -{ - $debug_cmd - - func_error "$*" - exit $EXIT_FAILURE -} - - -# func_grep EXPRESSION FILENAME -# ----------------------------- -# Check whether EXPRESSION matches any line of FILENAME, without output. -func_grep () -{ - $debug_cmd - - $GREP "$1" "$2" >/dev/null 2>&1 -} - - -# func_len STRING -# --------------- -# Set func_len_result to the length of STRING. STRING may not -# start with a hyphen. - test -z "$_G_HAVE_XSI_OPS" \ - && (eval 'x=a/b/c; - test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ - && _G_HAVE_XSI_OPS=yes - -if test yes = "$_G_HAVE_XSI_OPS"; then - eval 'func_len () - { - $debug_cmd - - func_len_result=${#1} - }' -else - func_len () - { - $debug_cmd - - func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len` - } -fi - - -# func_mkdir_p DIRECTORY-PATH -# --------------------------- -# Make sure the entire path to DIRECTORY-PATH is available. -func_mkdir_p () -{ - $debug_cmd - - _G_directory_path=$1 - _G_dir_list= - - if test -n "$_G_directory_path" && test : != "$opt_dry_run"; then - - # Protect directory names starting with '-' - case $_G_directory_path in - -*) _G_directory_path=./$_G_directory_path ;; - esac - - # While some portion of DIR does not yet exist... - while test ! -d "$_G_directory_path"; do - # ...make a list in topmost first order. Use a colon delimited - # list incase some portion of path contains whitespace. - _G_dir_list=$_G_directory_path:$_G_dir_list - - # If the last portion added has no slash in it, the list is done - case $_G_directory_path in */*) ;; *) break ;; esac - - # ...otherwise throw away the child directory and loop - _G_directory_path=`$ECHO "$_G_directory_path" | $SED -e "$sed_dirname"` - done - _G_dir_list=`$ECHO "$_G_dir_list" | $SED 's|:*$||'` - - func_mkdir_p_IFS=$IFS; IFS=: - for _G_dir in $_G_dir_list; do - IFS=$func_mkdir_p_IFS - # mkdir can fail with a 'File exist' error if two processes - # try to create one of the directories concurrently. Don't - # stop in that case! - $MKDIR "$_G_dir" 2>/dev/null || : - done - IFS=$func_mkdir_p_IFS - - # Bail out if we (or some other process) failed to create a directory. - test -d "$_G_directory_path" || \ - func_fatal_error "Failed to create '$1'" - fi -} - - -# func_mktempdir [BASENAME] -# ------------------------- -# Make a temporary directory that won't clash with other running -# libtool processes, and avoids race conditions if possible. If -# given, BASENAME is the basename for that directory. -func_mktempdir () -{ - $debug_cmd - - _G_template=${TMPDIR-/tmp}/${1-$progname} - - if test : = "$opt_dry_run"; then - # Return a directory name, but don't create it in dry-run mode - _G_tmpdir=$_G_template-$$ - else - - # If mktemp works, use that first and foremost - _G_tmpdir=`mktemp -d "$_G_template-XXXXXXXX" 2>/dev/null` - - if test ! -d "$_G_tmpdir"; then - # Failing that, at least try and use $RANDOM to avoid a race - _G_tmpdir=$_G_template-${RANDOM-0}$$ - - func_mktempdir_umask=`umask` - umask 0077 - $MKDIR "$_G_tmpdir" - umask $func_mktempdir_umask - fi - - # If we're not in dry-run mode, bomb out on failure - test -d "$_G_tmpdir" || \ - func_fatal_error "cannot create temporary directory '$_G_tmpdir'" - fi - - $ECHO "$_G_tmpdir" -} - - -# func_normal_abspath PATH -# ------------------------ -# Remove doubled-up and trailing slashes, "." path components, -# and cancel out any ".." path components in PATH after making -# it an absolute path. -func_normal_abspath () -{ - $debug_cmd - - # These SED scripts presuppose an absolute path with a trailing slash. - _G_pathcar='s|^/\([^/]*\).*$|\1|' - _G_pathcdr='s|^/[^/]*||' - _G_removedotparts=':dotsl - s|/\./|/|g - t dotsl - s|/\.$|/|' - _G_collapseslashes='s|/\{1,\}|/|g' - _G_finalslash='s|/*$|/|' - - # Start from root dir and reassemble the path. - func_normal_abspath_result= - func_normal_abspath_tpath=$1 - func_normal_abspath_altnamespace= - case $func_normal_abspath_tpath in - "") - # Empty path, that just means $cwd. - func_stripname '' '/' "`pwd`" - func_normal_abspath_result=$func_stripname_result - return - ;; - # The next three entries are used to spot a run of precisely - # two leading slashes without using negated character classes; - # we take advantage of case's first-match behaviour. - ///*) - # Unusual form of absolute path, do nothing. - ;; - //*) - # Not necessarily an ordinary path; POSIX reserves leading '//' - # and for example Cygwin uses it to access remote file shares - # over CIFS/SMB, so we conserve a leading double slash if found. - func_normal_abspath_altnamespace=/ - ;; - /*) - # Absolute path, do nothing. - ;; - *) - # Relative path, prepend $cwd. - func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath - ;; - esac - - # Cancel out all the simple stuff to save iterations. We also want - # the path to end with a slash for ease of parsing, so make sure - # there is one (and only one) here. - func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ - -e "$_G_removedotparts" -e "$_G_collapseslashes" -e "$_G_finalslash"` - while :; do - # Processed it all yet? - if test / = "$func_normal_abspath_tpath"; then - # If we ascended to the root using ".." the result may be empty now. - if test -z "$func_normal_abspath_result"; then - func_normal_abspath_result=/ - fi - break - fi - func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ - -e "$_G_pathcar"` - func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ - -e "$_G_pathcdr"` - # Figure out what to do with it - case $func_normal_abspath_tcomponent in - "") - # Trailing empty path component, ignore it. - ;; - ..) - # Parent dir; strip last assembled component from result. - func_dirname "$func_normal_abspath_result" - func_normal_abspath_result=$func_dirname_result - ;; - *) - # Actual path component, append it. - func_append func_normal_abspath_result "/$func_normal_abspath_tcomponent" - ;; - esac - done - # Restore leading double-slash if one was found on entry. - func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result -} - - -# func_notquiet ARG... -# -------------------- -# Echo program name prefixed message only when not in quiet mode. -func_notquiet () -{ - $debug_cmd - - $opt_quiet || func_echo ${1+"$@"} - - # A bug in bash halts the script if the last line of a function - # fails when set -e is in force, so we need another command to - # work around that: - : -} - - -# func_relative_path SRCDIR DSTDIR -# -------------------------------- -# Set func_relative_path_result to the relative path from SRCDIR to DSTDIR. -func_relative_path () -{ - $debug_cmd - - func_relative_path_result= - func_normal_abspath "$1" - func_relative_path_tlibdir=$func_normal_abspath_result - func_normal_abspath "$2" - func_relative_path_tbindir=$func_normal_abspath_result - - # Ascend the tree starting from libdir - while :; do - # check if we have found a prefix of bindir - case $func_relative_path_tbindir in - $func_relative_path_tlibdir) - # found an exact match - func_relative_path_tcancelled= - break - ;; - $func_relative_path_tlibdir*) - # found a matching prefix - func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" - func_relative_path_tcancelled=$func_stripname_result - if test -z "$func_relative_path_result"; then - func_relative_path_result=. - fi - break - ;; - *) - func_dirname $func_relative_path_tlibdir - func_relative_path_tlibdir=$func_dirname_result - if test -z "$func_relative_path_tlibdir"; then - # Have to descend all the way to the root! - func_relative_path_result=../$func_relative_path_result - func_relative_path_tcancelled=$func_relative_path_tbindir - break - fi - func_relative_path_result=../$func_relative_path_result - ;; - esac - done - - # Now calculate path; take care to avoid doubling-up slashes. - func_stripname '' '/' "$func_relative_path_result" - func_relative_path_result=$func_stripname_result - func_stripname '/' '/' "$func_relative_path_tcancelled" - if test -n "$func_stripname_result"; then - func_append func_relative_path_result "/$func_stripname_result" - fi - - # Normalisation. If bindir is libdir, return '.' else relative path. - if test -n "$func_relative_path_result"; then - func_stripname './' '' "$func_relative_path_result" - func_relative_path_result=$func_stripname_result - fi - - test -n "$func_relative_path_result" || func_relative_path_result=. - - : -} - - -# func_quote_for_eval ARG... -# -------------------------- -# Aesthetically quote ARGs to be evaled later. -# This function returns two values: -# i) func_quote_for_eval_result -# double-quoted, suitable for a subsequent eval -# ii) func_quote_for_eval_unquoted_result -# has all characters that are still active within double -# quotes backslashified. -func_quote_for_eval () -{ - $debug_cmd - - func_quote_for_eval_unquoted_result= - func_quote_for_eval_result= - while test 0 -lt $#; do - case $1 in - *[\\\`\"\$]*) - _G_unquoted_arg=`printf '%s\n' "$1" |$SED "$sed_quote_subst"` ;; - *) - _G_unquoted_arg=$1 ;; - esac - if test -n "$func_quote_for_eval_unquoted_result"; then - func_append func_quote_for_eval_unquoted_result " $_G_unquoted_arg" - else - func_append func_quote_for_eval_unquoted_result "$_G_unquoted_arg" - fi - - case $_G_unquoted_arg in - # Double-quote args containing shell metacharacters to delay - # word splitting, command substitution and variable expansion - # for a subsequent eval. - # Many Bourne shells cannot handle close brackets correctly - # in scan sets, so we specify it separately. - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - _G_quoted_arg=\"$_G_unquoted_arg\" - ;; - *) - _G_quoted_arg=$_G_unquoted_arg - ;; - esac - - if test -n "$func_quote_for_eval_result"; then - func_append func_quote_for_eval_result " $_G_quoted_arg" - else - func_append func_quote_for_eval_result "$_G_quoted_arg" - fi - shift - done -} - - -# func_quote_for_expand ARG -# ------------------------- -# Aesthetically quote ARG to be evaled later; same as above, -# but do not quote variable references. -func_quote_for_expand () -{ - $debug_cmd - - case $1 in - *[\\\`\"]*) - _G_arg=`$ECHO "$1" | $SED \ - -e "$sed_double_quote_subst" -e "$sed_double_backslash"` ;; - *) - _G_arg=$1 ;; - esac - - case $_G_arg in - # Double-quote args containing shell metacharacters to delay - # word splitting and command substitution for a subsequent eval. - # Many Bourne shells cannot handle close brackets correctly - # in scan sets, so we specify it separately. - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - _G_arg=\"$_G_arg\" - ;; - esac - - func_quote_for_expand_result=$_G_arg -} - - -# func_stripname PREFIX SUFFIX NAME -# --------------------------------- -# strip PREFIX and SUFFIX from NAME, and store in func_stripname_result. -# PREFIX and SUFFIX must not contain globbing or regex special -# characters, hashes, percent signs, but SUFFIX may contain a leading -# dot (in which case that matches only a dot). -if test yes = "$_G_HAVE_XSI_OPS"; then - eval 'func_stripname () - { - $debug_cmd - - # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are - # positional parameters, so assign one to ordinary variable first. - func_stripname_result=$3 - func_stripname_result=${func_stripname_result#"$1"} - func_stripname_result=${func_stripname_result%"$2"} - }' -else - func_stripname () - { - $debug_cmd - - case $2 in - .*) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%\\\\$2\$%%"`;; - *) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%$2\$%%"`;; - esac - } -fi - - -# func_show_eval CMD [FAIL_EXP] -# ----------------------------- -# Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is -# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP -# is given, then evaluate it. -func_show_eval () -{ - $debug_cmd - - _G_cmd=$1 - _G_fail_exp=${2-':'} - - func_quote_for_expand "$_G_cmd" - eval "func_notquiet $func_quote_for_expand_result" - - $opt_dry_run || { - eval "$_G_cmd" - _G_status=$? - if test 0 -ne "$_G_status"; then - eval "(exit $_G_status); $_G_fail_exp" - fi - } -} - - -# func_show_eval_locale CMD [FAIL_EXP] -# ------------------------------------ -# Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is -# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP -# is given, then evaluate it. Use the saved locale for evaluation. -func_show_eval_locale () -{ - $debug_cmd - - _G_cmd=$1 - _G_fail_exp=${2-':'} - - $opt_quiet || { - func_quote_for_expand "$_G_cmd" - eval "func_echo $func_quote_for_expand_result" - } - - $opt_dry_run || { - eval "$_G_user_locale - $_G_cmd" - _G_status=$? - eval "$_G_safe_locale" - if test 0 -ne "$_G_status"; then - eval "(exit $_G_status); $_G_fail_exp" - fi - } -} - - -# func_tr_sh -# ---------- -# Turn $1 into a string suitable for a shell variable name. -# Result is stored in $func_tr_sh_result. All characters -# not in the set a-zA-Z0-9_ are replaced with '_'. Further, -# if $1 begins with a digit, a '_' is prepended as well. -func_tr_sh () -{ - $debug_cmd - - case $1 in - [0-9]* | *[!a-zA-Z0-9_]*) - func_tr_sh_result=`$ECHO "$1" | $SED -e 's/^\([0-9]\)/_\1/' -e 's/[^a-zA-Z0-9_]/_/g'` - ;; - * ) - func_tr_sh_result=$1 - ;; - esac -} - - -# func_verbose ARG... -# ------------------- -# Echo program name prefixed message in verbose mode only. -func_verbose () -{ - $debug_cmd - - $opt_verbose && func_echo "$*" - - : -} - - -# func_warn_and_continue ARG... -# ----------------------------- -# Echo program name prefixed warning message to standard error. -func_warn_and_continue () -{ - $debug_cmd - - $require_term_colors - - func_echo_infix_1 "${tc_red}warning$tc_reset" "$*" >&2 -} - - -# func_warning CATEGORY ARG... -# ---------------------------- -# Echo program name prefixed warning message to standard error. Warning -# messages can be filtered according to CATEGORY, where this function -# elides messages where CATEGORY is not listed in the global variable -# 'opt_warning_types'. -func_warning () -{ - $debug_cmd - - # CATEGORY must be in the warning_categories list! - case " $warning_categories " in - *" $1 "*) ;; - *) func_internal_error "invalid warning category '$1'" ;; - esac - - _G_category=$1 - shift - - case " $opt_warning_types " in - *" $_G_category "*) $warning_func ${1+"$@"} ;; - esac -} - - -# func_sort_ver VER1 VER2 -# ----------------------- -# 'sort -V' is not generally available. -# Note this deviates from the version comparison in automake -# in that it treats 1.5 < 1.5.0, and treats 1.4.4a < 1.4-p3a -# but this should suffice as we won't be specifying old -# version formats or redundant trailing .0 in bootstrap.conf. -# If we did want full compatibility then we should probably -# use m4_version_compare from autoconf. -func_sort_ver () -{ - $debug_cmd - - printf '%s\n%s\n' "$1" "$2" \ - | sort -t. -k 1,1n -k 2,2n -k 3,3n -k 4,4n -k 5,5n -k 6,6n -k 7,7n -k 8,8n -k 9,9n -} - -# func_lt_ver PREV CURR -# --------------------- -# Return true if PREV and CURR are in the correct order according to -# func_sort_ver, otherwise false. Use it like this: -# -# func_lt_ver "$prev_ver" "$proposed_ver" || func_fatal_error "..." -func_lt_ver () -{ - $debug_cmd - - test "x$1" = x`func_sort_ver "$1" "$2" | $SED 1q` -} - - -# Local variables: -# mode: shell-script -# sh-indentation: 2 -# eval: (add-hook 'before-save-hook 'time-stamp) -# time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC" -# time-stamp-time-zone: "UTC" -# End: -#! /bin/sh - -# Set a version string for this script. -scriptversion=2015-10-07.11; # UTC - -# A portable, pluggable option parser for Bourne shell. -# Written by Gary V. Vaughan, 2010 - -# Copyright (C) 2010-2015 Free Software Foundation, Inc. -# This is free software; see the source for copying conditions. There is NO -# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . - -# Please report bugs or propose patches to gary@gnu.org. - - -## ------ ## -## Usage. ## -## ------ ## - -# This file is a library for parsing options in your shell scripts along -# with assorted other useful supporting features that you can make use -# of too. -# -# For the simplest scripts you might need only: -# -# #!/bin/sh -# . relative/path/to/funclib.sh -# . relative/path/to/options-parser -# scriptversion=1.0 -# func_options ${1+"$@"} -# eval set dummy "$func_options_result"; shift -# ...rest of your script... -# -# In order for the '--version' option to work, you will need to have a -# suitably formatted comment like the one at the top of this file -# starting with '# Written by ' and ending with '# warranty; '. -# -# For '-h' and '--help' to work, you will also need a one line -# description of your script's purpose in a comment directly above the -# '# Written by ' line, like the one at the top of this file. -# -# The default options also support '--debug', which will turn on shell -# execution tracing (see the comment above debug_cmd below for another -# use), and '--verbose' and the func_verbose function to allow your script -# to display verbose messages only when your user has specified -# '--verbose'. -# -# After sourcing this file, you can plug processing for additional -# options by amending the variables from the 'Configuration' section -# below, and following the instructions in the 'Option parsing' -# section further down. - -## -------------- ## -## Configuration. ## -## -------------- ## - -# You should override these variables in your script after sourcing this -# file so that they reflect the customisations you have added to the -# option parser. - -# The usage line for option parsing errors and the start of '-h' and -# '--help' output messages. You can embed shell variables for delayed -# expansion at the time the message is displayed, but you will need to -# quote other shell meta-characters carefully to prevent them being -# expanded when the contents are evaled. -usage='$progpath [OPTION]...' - -# Short help message in response to '-h' and '--help'. Add to this or -# override it after sourcing this library to reflect the full set of -# options your script accepts. -usage_message="\ - --debug enable verbose shell tracing - -W, --warnings=CATEGORY - report the warnings falling in CATEGORY [all] - -v, --verbose verbosely report processing - --version print version information and exit - -h, --help print short or long help message and exit -" - -# Additional text appended to 'usage_message' in response to '--help'. -long_help_message=" -Warning categories include: - 'all' show all warnings - 'none' turn off all the warnings - 'error' warnings are treated as fatal errors" - -# Help message printed before fatal option parsing errors. -fatal_help="Try '\$progname --help' for more information." - - - -## ------------------------- ## -## Hook function management. ## -## ------------------------- ## - -# This section contains functions for adding, removing, and running hooks -# to the main code. A hook is just a named list of of function, that can -# be run in order later on. - -# func_hookable FUNC_NAME -# ----------------------- -# Declare that FUNC_NAME will run hooks added with -# 'func_add_hook FUNC_NAME ...'. -func_hookable () -{ - $debug_cmd - - func_append hookable_fns " $1" -} - - -# func_add_hook FUNC_NAME HOOK_FUNC -# --------------------------------- -# Request that FUNC_NAME call HOOK_FUNC before it returns. FUNC_NAME must -# first have been declared "hookable" by a call to 'func_hookable'. -func_add_hook () -{ - $debug_cmd - - case " $hookable_fns " in - *" $1 "*) ;; - *) func_fatal_error "'$1' does not accept hook functions." ;; - esac - - eval func_append ${1}_hooks '" $2"' -} - - -# func_remove_hook FUNC_NAME HOOK_FUNC -# ------------------------------------ -# Remove HOOK_FUNC from the list of functions called by FUNC_NAME. -func_remove_hook () -{ - $debug_cmd - - eval ${1}_hooks='`$ECHO "\$'$1'_hooks" |$SED "s| '$2'||"`' -} - - -# func_run_hooks FUNC_NAME [ARG]... -# --------------------------------- -# Run all hook functions registered to FUNC_NAME. -# It is assumed that the list of hook functions contains nothing more -# than a whitespace-delimited list of legal shell function names, and -# no effort is wasted trying to catch shell meta-characters or preserve -# whitespace. -func_run_hooks () -{ - $debug_cmd - - _G_rc_run_hooks=false - - case " $hookable_fns " in - *" $1 "*) ;; - *) func_fatal_error "'$1' does not support hook funcions.n" ;; - esac - - eval _G_hook_fns=\$$1_hooks; shift - - for _G_hook in $_G_hook_fns; do - if eval $_G_hook '"$@"'; then - # store returned options list back into positional - # parameters for next 'cmd' execution. - eval _G_hook_result=\$${_G_hook}_result - eval set dummy "$_G_hook_result"; shift - _G_rc_run_hooks=: - fi - done - - $_G_rc_run_hooks && func_run_hooks_result=$_G_hook_result -} - - - -## --------------- ## -## Option parsing. ## -## --------------- ## - -# In order to add your own option parsing hooks, you must accept the -# full positional parameter list in your hook function, you may remove/edit -# any options that you action, and then pass back the remaining unprocessed -# options in '_result', escaped suitably for -# 'eval'. In this case you also must return $EXIT_SUCCESS to let the -# hook's caller know that it should pay attention to -# '_result'. Returning $EXIT_FAILURE signalizes that -# arguments are left untouched by the hook and therefore caller will ignore the -# result variable. -# -# Like this: -# -# my_options_prep () -# { -# $debug_cmd -# -# # Extend the existing usage message. -# usage_message=$usage_message' -# -s, --silent don'\''t print informational messages -# ' -# # No change in '$@' (ignored completely by this hook). There is -# # no need to do the equivalent (but slower) action: -# # func_quote_for_eval ${1+"$@"} -# # my_options_prep_result=$func_quote_for_eval_result -# false -# } -# func_add_hook func_options_prep my_options_prep -# -# -# my_silent_option () -# { -# $debug_cmd -# -# args_changed=false -# -# # Note that for efficiency, we parse as many options as we can -# # recognise in a loop before passing the remainder back to the -# # caller on the first unrecognised argument we encounter. -# while test $# -gt 0; do -# opt=$1; shift -# case $opt in -# --silent|-s) opt_silent=: -# args_changed=: -# ;; -# # Separate non-argument short options: -# -s*) func_split_short_opt "$_G_opt" -# set dummy "$func_split_short_opt_name" \ -# "-$func_split_short_opt_arg" ${1+"$@"} -# shift -# args_changed=: -# ;; -# *) # Make sure the first unrecognised option "$_G_opt" -# # is added back to "$@", we could need that later -# # if $args_changed is true. -# set dummy "$_G_opt" ${1+"$@"}; shift; break ;; -# esac -# done -# -# if $args_changed; then -# func_quote_for_eval ${1+"$@"} -# my_silent_option_result=$func_quote_for_eval_result -# fi -# -# $args_changed -# } -# func_add_hook func_parse_options my_silent_option -# -# -# my_option_validation () -# { -# $debug_cmd -# -# $opt_silent && $opt_verbose && func_fatal_help "\ -# '--silent' and '--verbose' options are mutually exclusive." -# -# false -# } -# func_add_hook func_validate_options my_option_validation -# -# You'll also need to manually amend $usage_message to reflect the extra -# options you parse. It's preferable to append if you can, so that -# multiple option parsing hooks can be added safely. - - -# func_options_finish [ARG]... -# ---------------------------- -# Finishing the option parse loop (call 'func_options' hooks ATM). -func_options_finish () -{ - $debug_cmd - - _G_func_options_finish_exit=false - if func_run_hooks func_options ${1+"$@"}; then - func_options_finish_result=$func_run_hooks_result - _G_func_options_finish_exit=: - fi - - $_G_func_options_finish_exit -} - - -# func_options [ARG]... -# --------------------- -# All the functions called inside func_options are hookable. See the -# individual implementations for details. -func_hookable func_options -func_options () -{ - $debug_cmd - - _G_rc_options=false - - for my_func in options_prep parse_options validate_options options_finish - do - if eval func_$my_func '${1+"$@"}'; then - eval _G_res_var='$'"func_${my_func}_result" - eval set dummy "$_G_res_var" ; shift - _G_rc_options=: - fi - done - - # Save modified positional parameters for caller. As a top-level - # options-parser function we always need to set the 'func_options_result' - # variable (regardless the $_G_rc_options value). - if $_G_rc_options; then - func_options_result=$_G_res_var - else - func_quote_for_eval ${1+"$@"} - func_options_result=$func_quote_for_eval_result - fi - - $_G_rc_options -} - - -# func_options_prep [ARG]... -# -------------------------- -# All initialisations required before starting the option parse loop. -# Note that when calling hook functions, we pass through the list of -# positional parameters. If a hook function modifies that list, and -# needs to propagate that back to rest of this script, then the complete -# modified list must be put in 'func_run_hooks_result' before -# returning $EXIT_SUCCESS (otherwise $EXIT_FAILURE is returned). -func_hookable func_options_prep -func_options_prep () -{ - $debug_cmd - - # Option defaults: - opt_verbose=false - opt_warning_types= - - _G_rc_options_prep=false - if func_run_hooks func_options_prep ${1+"$@"}; then - _G_rc_options_prep=: - # save modified positional parameters for caller - func_options_prep_result=$func_run_hooks_result - fi - - $_G_rc_options_prep -} - - -# func_parse_options [ARG]... -# --------------------------- -# The main option parsing loop. -func_hookable func_parse_options -func_parse_options () -{ - $debug_cmd - - func_parse_options_result= - - _G_rc_parse_options=false - # this just eases exit handling - while test $# -gt 0; do - # Defer to hook functions for initial option parsing, so they - # get priority in the event of reusing an option name. - if func_run_hooks func_parse_options ${1+"$@"}; then - eval set dummy "$func_run_hooks_result"; shift - _G_rc_parse_options=: - fi - - # Break out of the loop if we already parsed every option. - test $# -gt 0 || break - - _G_match_parse_options=: - _G_opt=$1 - shift - case $_G_opt in - --debug|-x) debug_cmd='set -x' - func_echo "enabling shell trace mode" - $debug_cmd - ;; - - --no-warnings|--no-warning|--no-warn) - set dummy --warnings none ${1+"$@"} - shift - ;; - - --warnings|--warning|-W) - if test $# = 0 && func_missing_arg $_G_opt; then - _G_rc_parse_options=: - break - fi - case " $warning_categories $1" in - *" $1 "*) - # trailing space prevents matching last $1 above - func_append_uniq opt_warning_types " $1" - ;; - *all) - opt_warning_types=$warning_categories - ;; - *none) - opt_warning_types=none - warning_func=: - ;; - *error) - opt_warning_types=$warning_categories - warning_func=func_fatal_error - ;; - *) - func_fatal_error \ - "unsupported warning category: '$1'" - ;; - esac - shift - ;; - - --verbose|-v) opt_verbose=: ;; - --version) func_version ;; - -\?|-h) func_usage ;; - --help) func_help ;; - - # Separate optargs to long options (plugins may need this): - --*=*) func_split_equals "$_G_opt" - set dummy "$func_split_equals_lhs" \ - "$func_split_equals_rhs" ${1+"$@"} - shift - ;; - - # Separate optargs to short options: - -W*) - func_split_short_opt "$_G_opt" - set dummy "$func_split_short_opt_name" \ - "$func_split_short_opt_arg" ${1+"$@"} - shift - ;; - - # Separate non-argument short options: - -\?*|-h*|-v*|-x*) - func_split_short_opt "$_G_opt" - set dummy "$func_split_short_opt_name" \ - "-$func_split_short_opt_arg" ${1+"$@"} - shift - ;; - - --) _G_rc_parse_options=: ; break ;; - -*) func_fatal_help "unrecognised option: '$_G_opt'" ;; - *) set dummy "$_G_opt" ${1+"$@"}; shift - _G_match_parse_options=false - break - ;; - esac - - $_G_match_parse_options && _G_rc_parse_options=: - done - - - if $_G_rc_parse_options; then - # save modified positional parameters for caller - func_quote_for_eval ${1+"$@"} - func_parse_options_result=$func_quote_for_eval_result - fi - - $_G_rc_parse_options -} - - -# func_validate_options [ARG]... -# ------------------------------ -# Perform any sanity checks on option settings and/or unconsumed -# arguments. -func_hookable func_validate_options -func_validate_options () -{ - $debug_cmd - - _G_rc_validate_options=false - - # Display all warnings if -W was not given. - test -n "$opt_warning_types" || opt_warning_types=" $warning_categories" - - if func_run_hooks func_validate_options ${1+"$@"}; then - # save modified positional parameters for caller - func_validate_options_result=$func_run_hooks_result - _G_rc_validate_options=: - fi - - # Bail if the options were screwed! - $exit_cmd $EXIT_FAILURE - - $_G_rc_validate_options -} - - - -## ----------------- ## -## Helper functions. ## -## ----------------- ## - -# This section contains the helper functions used by the rest of the -# hookable option parser framework in ascii-betical order. - - -# func_fatal_help ARG... -# ---------------------- -# Echo program name prefixed message to standard error, followed by -# a help hint, and exit. -func_fatal_help () -{ - $debug_cmd - - eval \$ECHO \""Usage: $usage"\" - eval \$ECHO \""$fatal_help"\" - func_error ${1+"$@"} - exit $EXIT_FAILURE -} - - -# func_help -# --------- -# Echo long help message to standard output and exit. -func_help () -{ - $debug_cmd - - func_usage_message - $ECHO "$long_help_message" - exit 0 -} - - -# func_missing_arg ARGNAME -# ------------------------ -# Echo program name prefixed message to standard error and set global -# exit_cmd. -func_missing_arg () -{ - $debug_cmd - - func_error "Missing argument for '$1'." - exit_cmd=exit -} - - -# func_split_equals STRING -# ------------------------ -# Set func_split_equals_lhs and func_split_equals_rhs shell variables after -# splitting STRING at the '=' sign. -test -z "$_G_HAVE_XSI_OPS" \ - && (eval 'x=a/b/c; - test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ - && _G_HAVE_XSI_OPS=yes - -if test yes = "$_G_HAVE_XSI_OPS" -then - # This is an XSI compatible shell, allowing a faster implementation... - eval 'func_split_equals () - { - $debug_cmd - - func_split_equals_lhs=${1%%=*} - func_split_equals_rhs=${1#*=} - test "x$func_split_equals_lhs" = "x$1" \ - && func_split_equals_rhs= - }' -else - # ...otherwise fall back to using expr, which is often a shell builtin. - func_split_equals () - { - $debug_cmd - - func_split_equals_lhs=`expr "x$1" : 'x\([^=]*\)'` - func_split_equals_rhs= - test "x$func_split_equals_lhs" = "x$1" \ - || func_split_equals_rhs=`expr "x$1" : 'x[^=]*=\(.*\)$'` - } -fi #func_split_equals - - -# func_split_short_opt SHORTOPT -# ----------------------------- -# Set func_split_short_opt_name and func_split_short_opt_arg shell -# variables after splitting SHORTOPT after the 2nd character. -if test yes = "$_G_HAVE_XSI_OPS" -then - # This is an XSI compatible shell, allowing a faster implementation... - eval 'func_split_short_opt () - { - $debug_cmd - - func_split_short_opt_arg=${1#??} - func_split_short_opt_name=${1%"$func_split_short_opt_arg"} - }' -else - # ...otherwise fall back to using expr, which is often a shell builtin. - func_split_short_opt () - { - $debug_cmd - - func_split_short_opt_name=`expr "x$1" : 'x-\(.\)'` - func_split_short_opt_arg=`expr "x$1" : 'x-.\(.*\)$'` - } -fi #func_split_short_opt - - -# func_usage -# ---------- -# Echo short help message to standard output and exit. -func_usage () -{ - $debug_cmd - - func_usage_message - $ECHO "Run '$progname --help |${PAGER-more}' for full usage" - exit 0 -} - - -# func_usage_message -# ------------------ -# Echo short help message to standard output. -func_usage_message () -{ - $debug_cmd - - eval \$ECHO \""Usage: $usage"\" - echo - $SED -n 's|^# || - /^Written by/{ - x;p;x - } - h - /^Written by/q' < "$progpath" - echo - eval \$ECHO \""$usage_message"\" -} - - -# func_version -# ------------ -# Echo version message to standard output and exit. -func_version () -{ - $debug_cmd - - printf '%s\n' "$progname $scriptversion" - $SED -n ' - /(C)/!b go - :more - /\./!{ - N - s|\n# | | - b more - } - :go - /^# Written by /,/# warranty; / { - s|^# || - s|^# *$|| - s|\((C)\)[ 0-9,-]*[ ,-]\([1-9][0-9]* \)|\1 \2| - p - } - /^# Written by / { - s|^# || - p - } - /^warranty; /q' < "$progpath" - - exit $? -} - - -# Local variables: -# mode: shell-script -# sh-indentation: 2 -# eval: (add-hook 'before-save-hook 'time-stamp) -# time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC" -# time-stamp-time-zone: "UTC" -# End: - -# Set a version string. -scriptversion='(GNU libtool) 2.4.6' - - -# func_echo ARG... -# ---------------- -# Libtool also displays the current mode in messages, so override -# funclib.sh func_echo with this custom definition. -func_echo () -{ - $debug_cmd - - _G_message=$* - - func_echo_IFS=$IFS - IFS=$nl - for _G_line in $_G_message; do - IFS=$func_echo_IFS - $ECHO "$progname${opt_mode+: $opt_mode}: $_G_line" - done - IFS=$func_echo_IFS -} - - -# func_warning ARG... -# ------------------- -# Libtool warnings are not categorized, so override funclib.sh -# func_warning with this simpler definition. -func_warning () -{ - $debug_cmd - - $warning_func ${1+"$@"} -} - - -## ---------------- ## -## Options parsing. ## -## ---------------- ## - -# Hook in the functions to make sure our own options are parsed during -# the option parsing loop. - -usage='$progpath [OPTION]... [MODE-ARG]...' - -# Short help message in response to '-h'. -usage_message="Options: - --config show all configuration variables - --debug enable verbose shell tracing - -n, --dry-run display commands without modifying any files - --features display basic configuration information and exit - --mode=MODE use operation mode MODE - --no-warnings equivalent to '-Wnone' - --preserve-dup-deps don't remove duplicate dependency libraries - --quiet, --silent don't print informational messages - --tag=TAG use configuration variables from tag TAG - -v, --verbose print more informational messages than default - --version print version information - -W, --warnings=CATEGORY report the warnings falling in CATEGORY [all] - -h, --help, --help-all print short, long, or detailed help message -" - -# Additional text appended to 'usage_message' in response to '--help'. -func_help () -{ - $debug_cmd - - func_usage_message - $ECHO "$long_help_message - -MODE must be one of the following: - - clean remove files from the build directory - compile compile a source file into a libtool object - execute automatically set library path, then run a program - finish complete the installation of libtool libraries - install install libraries or executables - link create a library or an executable - uninstall remove libraries from an installed directory - -MODE-ARGS vary depending on the MODE. When passed as first option, -'--mode=MODE' may be abbreviated as 'MODE' or a unique abbreviation of that. -Try '$progname --help --mode=MODE' for a more detailed description of MODE. - -When reporting a bug, please describe a test case to reproduce it and -include the following information: - - host-triplet: $host - shell: $SHELL - compiler: $LTCC - compiler flags: $LTCFLAGS - linker: $LD (gnu? $with_gnu_ld) - version: $progname $scriptversion Debian-2.4.6-9 - automake: `($AUTOMAKE --version) 2>/dev/null |$SED 1q` - autoconf: `($AUTOCONF --version) 2>/dev/null |$SED 1q` - -Report bugs to . -GNU libtool home page: . -General help using GNU software: ." - exit 0 -} - - -# func_lo2o OBJECT-NAME -# --------------------- -# Transform OBJECT-NAME from a '.lo' suffix to the platform specific -# object suffix. - -lo2o=s/\\.lo\$/.$objext/ -o2lo=s/\\.$objext\$/.lo/ - -if test yes = "$_G_HAVE_XSI_OPS"; then - eval 'func_lo2o () - { - case $1 in - *.lo) func_lo2o_result=${1%.lo}.$objext ;; - * ) func_lo2o_result=$1 ;; - esac - }' - - # func_xform LIBOBJ-OR-SOURCE - # --------------------------- - # Transform LIBOBJ-OR-SOURCE from a '.o' or '.c' (or otherwise) - # suffix to a '.lo' libtool-object suffix. - eval 'func_xform () - { - func_xform_result=${1%.*}.lo - }' -else - # ...otherwise fall back to using sed. - func_lo2o () - { - func_lo2o_result=`$ECHO "$1" | $SED "$lo2o"` - } - - func_xform () - { - func_xform_result=`$ECHO "$1" | $SED 's|\.[^.]*$|.lo|'` - } -fi - - -# func_fatal_configuration ARG... -# ------------------------------- -# Echo program name prefixed message to standard error, followed by -# a configuration failure hint, and exit. -func_fatal_configuration () -{ - func__fatal_error ${1+"$@"} \ - "See the $PACKAGE documentation for more information." \ - "Fatal configuration error." -} - - -# func_config -# ----------- -# Display the configuration for all the tags in this script. -func_config () -{ - re_begincf='^# ### BEGIN LIBTOOL' - re_endcf='^# ### END LIBTOOL' - - # Default configuration. - $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" - - # Now print the configurations for the tags. - for tagname in $taglist; do - $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" - done - - exit $? -} - - -# func_features -# ------------- -# Display the features supported by this script. -func_features () -{ - echo "host: $host" - if test yes = "$build_libtool_libs"; then - echo "enable shared libraries" - else - echo "disable shared libraries" - fi - if test yes = "$build_old_libs"; then - echo "enable static libraries" - else - echo "disable static libraries" - fi - - exit $? -} - - -# func_enable_tag TAGNAME -# ----------------------- -# Verify that TAGNAME is valid, and either flag an error and exit, or -# enable the TAGNAME tag. We also add TAGNAME to the global $taglist -# variable here. -func_enable_tag () -{ - # Global variable: - tagname=$1 - - re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" - re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" - sed_extractcf=/$re_begincf/,/$re_endcf/p - - # Validate tagname. - case $tagname in - *[!-_A-Za-z0-9,/]*) - func_fatal_error "invalid tag name: $tagname" - ;; - esac - - # Don't test for the "default" C tag, as we know it's - # there but not specially marked. - case $tagname in - CC) ;; - *) - if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then - taglist="$taglist $tagname" - - # Evaluate the configuration. Be careful to quote the path - # and the sed script, to avoid splitting on whitespace, but - # also don't use non-portable quotes within backquotes within - # quotes we have to do it in 2 steps: - extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` - eval "$extractedcf" - else - func_error "ignoring unknown tag $tagname" - fi - ;; - esac -} - - -# func_check_version_match -# ------------------------ -# Ensure that we are using m4 macros, and libtool script from the same -# release of libtool. -func_check_version_match () -{ - if test "$package_revision" != "$macro_revision"; then - if test "$VERSION" != "$macro_version"; then - if test -z "$macro_version"; then - cat >&2 <<_LT_EOF -$progname: Version mismatch error. This is $PACKAGE $VERSION, but the -$progname: definition of this LT_INIT comes from an older release. -$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION -$progname: and run autoconf again. -_LT_EOF - else - cat >&2 <<_LT_EOF -$progname: Version mismatch error. This is $PACKAGE $VERSION, but the -$progname: definition of this LT_INIT comes from $PACKAGE $macro_version. -$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION -$progname: and run autoconf again. -_LT_EOF - fi - else - cat >&2 <<_LT_EOF -$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, -$progname: but the definition of this LT_INIT comes from revision $macro_revision. -$progname: You should recreate aclocal.m4 with macros from revision $package_revision -$progname: of $PACKAGE $VERSION and run autoconf again. -_LT_EOF - fi - - exit $EXIT_MISMATCH - fi -} - - -# libtool_options_prep [ARG]... -# ----------------------------- -# Preparation for options parsed by libtool. -libtool_options_prep () -{ - $debug_mode - - # Option defaults: - opt_config=false - opt_dlopen= - opt_dry_run=false - opt_help=false - opt_mode= - opt_preserve_dup_deps=false - opt_quiet=false - - nonopt= - preserve_args= - - _G_rc_lt_options_prep=: - - # Shorthand for --mode=foo, only valid as the first argument - case $1 in - clean|clea|cle|cl) - shift; set dummy --mode clean ${1+"$@"}; shift - ;; - compile|compil|compi|comp|com|co|c) - shift; set dummy --mode compile ${1+"$@"}; shift - ;; - execute|execut|execu|exec|exe|ex|e) - shift; set dummy --mode execute ${1+"$@"}; shift - ;; - finish|finis|fini|fin|fi|f) - shift; set dummy --mode finish ${1+"$@"}; shift - ;; - install|instal|insta|inst|ins|in|i) - shift; set dummy --mode install ${1+"$@"}; shift - ;; - link|lin|li|l) - shift; set dummy --mode link ${1+"$@"}; shift - ;; - uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) - shift; set dummy --mode uninstall ${1+"$@"}; shift - ;; - *) - _G_rc_lt_options_prep=false - ;; - esac - - if $_G_rc_lt_options_prep; then - # Pass back the list of options. - func_quote_for_eval ${1+"$@"} - libtool_options_prep_result=$func_quote_for_eval_result - fi - - $_G_rc_lt_options_prep -} -func_add_hook func_options_prep libtool_options_prep - - -# libtool_parse_options [ARG]... -# --------------------------------- -# Provide handling for libtool specific options. -libtool_parse_options () -{ - $debug_cmd - - _G_rc_lt_parse_options=false - - # Perform our own loop to consume as many options as possible in - # each iteration. - while test $# -gt 0; do - _G_match_lt_parse_options=: - _G_opt=$1 - shift - case $_G_opt in - --dry-run|--dryrun|-n) - opt_dry_run=: - ;; - - --config) func_config ;; - - --dlopen|-dlopen) - opt_dlopen="${opt_dlopen+$opt_dlopen -}$1" - shift - ;; - - --preserve-dup-deps) - opt_preserve_dup_deps=: ;; - - --features) func_features ;; - - --finish) set dummy --mode finish ${1+"$@"}; shift ;; - - --help) opt_help=: ;; - - --help-all) opt_help=': help-all' ;; - - --mode) test $# = 0 && func_missing_arg $_G_opt && break - opt_mode=$1 - case $1 in - # Valid mode arguments: - clean|compile|execute|finish|install|link|relink|uninstall) ;; - - # Catch anything else as an error - *) func_error "invalid argument for $_G_opt" - exit_cmd=exit - break - ;; - esac - shift - ;; - - --no-silent|--no-quiet) - opt_quiet=false - func_append preserve_args " $_G_opt" - ;; - - --no-warnings|--no-warning|--no-warn) - opt_warning=false - func_append preserve_args " $_G_opt" - ;; - - --no-verbose) - opt_verbose=false - func_append preserve_args " $_G_opt" - ;; - - --silent|--quiet) - opt_quiet=: - opt_verbose=false - func_append preserve_args " $_G_opt" - ;; - - --tag) test $# = 0 && func_missing_arg $_G_opt && break - opt_tag=$1 - func_append preserve_args " $_G_opt $1" - func_enable_tag "$1" - shift - ;; - - --verbose|-v) opt_quiet=false - opt_verbose=: - func_append preserve_args " $_G_opt" - ;; - - # An option not handled by this hook function: - *) set dummy "$_G_opt" ${1+"$@"} ; shift - _G_match_lt_parse_options=false - break - ;; - esac - $_G_match_lt_parse_options && _G_rc_lt_parse_options=: - done - - if $_G_rc_lt_parse_options; then - # save modified positional parameters for caller - func_quote_for_eval ${1+"$@"} - libtool_parse_options_result=$func_quote_for_eval_result - fi - - $_G_rc_lt_parse_options -} -func_add_hook func_parse_options libtool_parse_options - - - -# libtool_validate_options [ARG]... -# --------------------------------- -# Perform any sanity checks on option settings and/or unconsumed -# arguments. -libtool_validate_options () -{ - # save first non-option argument - if test 0 -lt $#; then - nonopt=$1 - shift - fi - - # preserve --debug - test : = "$debug_cmd" || func_append preserve_args " --debug" - - case $host in - # Solaris2 added to fix http://debbugs.gnu.org/cgi/bugreport.cgi?bug=16452 - # see also: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59788 - *cygwin* | *mingw* | *pw32* | *cegcc* | *solaris2* | *os2*) - # don't eliminate duplications in $postdeps and $predeps - opt_duplicate_compiler_generated_deps=: - ;; - *) - opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps - ;; - esac - - $opt_help || { - # Sanity checks first: - func_check_version_match - - test yes != "$build_libtool_libs" \ - && test yes != "$build_old_libs" \ - && func_fatal_configuration "not configured to build any kind of library" - - # Darwin sucks - eval std_shrext=\"$shrext_cmds\" - - # Only execute mode is allowed to have -dlopen flags. - if test -n "$opt_dlopen" && test execute != "$opt_mode"; then - func_error "unrecognized option '-dlopen'" - $ECHO "$help" 1>&2 - exit $EXIT_FAILURE - fi - - # Change the help message to a mode-specific one. - generic_help=$help - help="Try '$progname --help --mode=$opt_mode' for more information." - } - - # Pass back the unparsed argument list - func_quote_for_eval ${1+"$@"} - libtool_validate_options_result=$func_quote_for_eval_result -} -func_add_hook func_validate_options libtool_validate_options - - -# Process options as early as possible so that --help and --version -# can return quickly. -func_options ${1+"$@"} -eval set dummy "$func_options_result"; shift - - - -## ----------- ## -## Main. ## -## ----------- ## - -magic='%%%MAGIC variable%%%' -magic_exe='%%%MAGIC EXE variable%%%' - -# Global variables. -extracted_archives= -extracted_serial=0 - -# If this variable is set in any of the actions, the command in it -# will be execed at the end. This prevents here-documents from being -# left over by shells. -exec_cmd= - - -# A function that is used when there is no print builtin or printf. -func_fallback_echo () -{ - eval 'cat <<_LTECHO_EOF -$1 -_LTECHO_EOF' -} - -# func_generated_by_libtool -# True iff stdin has been generated by Libtool. This function is only -# a basic sanity check; it will hardly flush out determined imposters. -func_generated_by_libtool_p () -{ - $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 -} - -# func_lalib_p file -# True iff FILE is a libtool '.la' library or '.lo' object file. -# This function is only a basic sanity check; it will hardly flush out -# determined imposters. -func_lalib_p () -{ - test -f "$1" && - $SED -e 4q "$1" 2>/dev/null | func_generated_by_libtool_p -} - -# func_lalib_unsafe_p file -# True iff FILE is a libtool '.la' library or '.lo' object file. -# This function implements the same check as func_lalib_p without -# resorting to external programs. To this end, it redirects stdin and -# closes it afterwards, without saving the original file descriptor. -# As a safety measure, use it only where a negative result would be -# fatal anyway. Works if 'file' does not exist. -func_lalib_unsafe_p () -{ - lalib_p=no - if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then - for lalib_p_l in 1 2 3 4 - do - read lalib_p_line - case $lalib_p_line in - \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; - esac - done - exec 0<&5 5<&- - fi - test yes = "$lalib_p" -} - -# func_ltwrapper_script_p file -# True iff FILE is a libtool wrapper script -# This function is only a basic sanity check; it will hardly flush out -# determined imposters. -func_ltwrapper_script_p () -{ - test -f "$1" && - $lt_truncate_bin < "$1" 2>/dev/null | func_generated_by_libtool_p -} - -# func_ltwrapper_executable_p file -# True iff FILE is a libtool wrapper executable -# This function is only a basic sanity check; it will hardly flush out -# determined imposters. -func_ltwrapper_executable_p () -{ - func_ltwrapper_exec_suffix= - case $1 in - *.exe) ;; - *) func_ltwrapper_exec_suffix=.exe ;; - esac - $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 -} - -# func_ltwrapper_scriptname file -# Assumes file is an ltwrapper_executable -# uses $file to determine the appropriate filename for a -# temporary ltwrapper_script. -func_ltwrapper_scriptname () -{ - func_dirname_and_basename "$1" "" "." - func_stripname '' '.exe' "$func_basename_result" - func_ltwrapper_scriptname_result=$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper -} - -# func_ltwrapper_p file -# True iff FILE is a libtool wrapper script or wrapper executable -# This function is only a basic sanity check; it will hardly flush out -# determined imposters. -func_ltwrapper_p () -{ - func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" -} - - -# func_execute_cmds commands fail_cmd -# Execute tilde-delimited COMMANDS. -# If FAIL_CMD is given, eval that upon failure. -# FAIL_CMD may read-access the current command in variable CMD! -func_execute_cmds () -{ - $debug_cmd - - save_ifs=$IFS; IFS='~' - for cmd in $1; do - IFS=$sp$nl - eval cmd=\"$cmd\" - IFS=$save_ifs - func_show_eval "$cmd" "${2-:}" - done - IFS=$save_ifs -} - - -# func_source file -# Source FILE, adding directory component if necessary. -# Note that it is not necessary on cygwin/mingw to append a dot to -# FILE even if both FILE and FILE.exe exist: automatic-append-.exe -# behavior happens only for exec(3), not for open(2)! Also, sourcing -# 'FILE.' does not work on cygwin managed mounts. -func_source () -{ - $debug_cmd - - case $1 in - */* | *\\*) . "$1" ;; - *) . "./$1" ;; - esac -} - - -# func_resolve_sysroot PATH -# Replace a leading = in PATH with a sysroot. Store the result into -# func_resolve_sysroot_result -func_resolve_sysroot () -{ - func_resolve_sysroot_result=$1 - case $func_resolve_sysroot_result in - =*) - func_stripname '=' '' "$func_resolve_sysroot_result" - func_resolve_sysroot_result=$lt_sysroot$func_stripname_result - ;; - esac -} - -# func_replace_sysroot PATH -# If PATH begins with the sysroot, replace it with = and -# store the result into func_replace_sysroot_result. -func_replace_sysroot () -{ - case $lt_sysroot:$1 in - ?*:"$lt_sysroot"*) - func_stripname "$lt_sysroot" '' "$1" - func_replace_sysroot_result='='$func_stripname_result - ;; - *) - # Including no sysroot. - func_replace_sysroot_result=$1 - ;; - esac -} - -# func_infer_tag arg -# Infer tagged configuration to use if any are available and -# if one wasn't chosen via the "--tag" command line option. -# Only attempt this if the compiler in the base compile -# command doesn't match the default compiler. -# arg is usually of the form 'gcc ...' -func_infer_tag () -{ - $debug_cmd - - if test -n "$available_tags" && test -z "$tagname"; then - CC_quoted= - for arg in $CC; do - func_append_quoted CC_quoted "$arg" - done - CC_expanded=`func_echo_all $CC` - CC_quoted_expanded=`func_echo_all $CC_quoted` - case $@ in - # Blanks in the command may have been stripped by the calling shell, - # but not from the CC environment variable when configure was run. - " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ - " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; - # Blanks at the start of $base_compile will cause this to fail - # if we don't check for them as well. - *) - for z in $available_tags; do - if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then - # Evaluate the configuration. - eval "`$SED -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" - CC_quoted= - for arg in $CC; do - # Double-quote args containing other shell metacharacters. - func_append_quoted CC_quoted "$arg" - done - CC_expanded=`func_echo_all $CC` - CC_quoted_expanded=`func_echo_all $CC_quoted` - case "$@ " in - " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ - " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) - # The compiler in the base compile command matches - # the one in the tagged configuration. - # Assume this is the tagged configuration we want. - tagname=$z - break - ;; - esac - fi - done - # If $tagname still isn't set, then no tagged configuration - # was found and let the user know that the "--tag" command - # line option must be used. - if test -z "$tagname"; then - func_echo "unable to infer tagged configuration" - func_fatal_error "specify a tag with '--tag'" -# else -# func_verbose "using $tagname tagged configuration" - fi - ;; - esac - fi -} - - - -# func_write_libtool_object output_name pic_name nonpic_name -# Create a libtool object file (analogous to a ".la" file), -# but don't create it if we're doing a dry run. -func_write_libtool_object () -{ - write_libobj=$1 - if test yes = "$build_libtool_libs"; then - write_lobj=\'$2\' - else - write_lobj=none - fi - - if test yes = "$build_old_libs"; then - write_oldobj=\'$3\' - else - write_oldobj=none - fi - - $opt_dry_run || { - cat >${write_libobj}T </dev/null` - if test "$?" -eq 0 && test -n "$func_convert_core_file_wine_to_w32_tmp"; then - func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | - $SED -e "$sed_naive_backslashify"` - else - func_convert_core_file_wine_to_w32_result= - fi - fi -} -# end: func_convert_core_file_wine_to_w32 - - -# func_convert_core_path_wine_to_w32 ARG -# Helper function used by path conversion functions when $build is *nix, and -# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly -# configured wine environment available, with the winepath program in $build's -# $PATH. Assumes ARG has no leading or trailing path separator characters. -# -# ARG is path to be converted from $build format to win32. -# Result is available in $func_convert_core_path_wine_to_w32_result. -# Unconvertible file (directory) names in ARG are skipped; if no directory names -# are convertible, then the result may be empty. -func_convert_core_path_wine_to_w32 () -{ - $debug_cmd - - # unfortunately, winepath doesn't convert paths, only file names - func_convert_core_path_wine_to_w32_result= - if test -n "$1"; then - oldIFS=$IFS - IFS=: - for func_convert_core_path_wine_to_w32_f in $1; do - IFS=$oldIFS - func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" - if test -n "$func_convert_core_file_wine_to_w32_result"; then - if test -z "$func_convert_core_path_wine_to_w32_result"; then - func_convert_core_path_wine_to_w32_result=$func_convert_core_file_wine_to_w32_result - else - func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" - fi - fi - done - IFS=$oldIFS - fi -} -# end: func_convert_core_path_wine_to_w32 - - -# func_cygpath ARGS... -# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when -# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) -# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or -# (2), returns the Cygwin file name or path in func_cygpath_result (input -# file name or path is assumed to be in w32 format, as previously converted -# from $build's *nix or MSYS format). In case (3), returns the w32 file name -# or path in func_cygpath_result (input file name or path is assumed to be in -# Cygwin format). Returns an empty string on error. -# -# ARGS are passed to cygpath, with the last one being the file name or path to -# be converted. -# -# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH -# environment variable; do not put it in $PATH. -func_cygpath () -{ - $debug_cmd - - if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then - func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` - if test "$?" -ne 0; then - # on failure, ensure result is empty - func_cygpath_result= - fi - else - func_cygpath_result= - func_error "LT_CYGPATH is empty or specifies non-existent file: '$LT_CYGPATH'" - fi -} -#end: func_cygpath - - -# func_convert_core_msys_to_w32 ARG -# Convert file name or path ARG from MSYS format to w32 format. Return -# result in func_convert_core_msys_to_w32_result. -func_convert_core_msys_to_w32 () -{ - $debug_cmd - - # awkward: cmd appends spaces to result - func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | - $SED -e 's/[ ]*$//' -e "$sed_naive_backslashify"` -} -#end: func_convert_core_msys_to_w32 - - -# func_convert_file_check ARG1 ARG2 -# Verify that ARG1 (a file name in $build format) was converted to $host -# format in ARG2. Otherwise, emit an error message, but continue (resetting -# func_to_host_file_result to ARG1). -func_convert_file_check () -{ - $debug_cmd - - if test -z "$2" && test -n "$1"; then - func_error "Could not determine host file name corresponding to" - func_error " '$1'" - func_error "Continuing, but uninstalled executables may not work." - # Fallback: - func_to_host_file_result=$1 - fi -} -# end func_convert_file_check - - -# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH -# Verify that FROM_PATH (a path in $build format) was converted to $host -# format in TO_PATH. Otherwise, emit an error message, but continue, resetting -# func_to_host_file_result to a simplistic fallback value (see below). -func_convert_path_check () -{ - $debug_cmd - - if test -z "$4" && test -n "$3"; then - func_error "Could not determine the host path corresponding to" - func_error " '$3'" - func_error "Continuing, but uninstalled executables may not work." - # Fallback. This is a deliberately simplistic "conversion" and - # should not be "improved". See libtool.info. - if test "x$1" != "x$2"; then - lt_replace_pathsep_chars="s|$1|$2|g" - func_to_host_path_result=`echo "$3" | - $SED -e "$lt_replace_pathsep_chars"` - else - func_to_host_path_result=$3 - fi - fi -} -# end func_convert_path_check - - -# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG -# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT -# and appending REPL if ORIG matches BACKPAT. -func_convert_path_front_back_pathsep () -{ - $debug_cmd - - case $4 in - $1 ) func_to_host_path_result=$3$func_to_host_path_result - ;; - esac - case $4 in - $2 ) func_append func_to_host_path_result "$3" - ;; - esac -} -# end func_convert_path_front_back_pathsep - - -################################################## -# $build to $host FILE NAME CONVERSION FUNCTIONS # -################################################## -# invoked via '$to_host_file_cmd ARG' -# -# In each case, ARG is the path to be converted from $build to $host format. -# Result will be available in $func_to_host_file_result. - - -# func_to_host_file ARG -# Converts the file name ARG from $build format to $host format. Return result -# in func_to_host_file_result. -func_to_host_file () -{ - $debug_cmd - - $to_host_file_cmd "$1" -} -# end func_to_host_file - - -# func_to_tool_file ARG LAZY -# converts the file name ARG from $build format to toolchain format. Return -# result in func_to_tool_file_result. If the conversion in use is listed -# in (the comma separated) LAZY, no conversion takes place. -func_to_tool_file () -{ - $debug_cmd - - case ,$2, in - *,"$to_tool_file_cmd",*) - func_to_tool_file_result=$1 - ;; - *) - $to_tool_file_cmd "$1" - func_to_tool_file_result=$func_to_host_file_result - ;; - esac -} -# end func_to_tool_file - - -# func_convert_file_noop ARG -# Copy ARG to func_to_host_file_result. -func_convert_file_noop () -{ - func_to_host_file_result=$1 -} -# end func_convert_file_noop - - -# func_convert_file_msys_to_w32 ARG -# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic -# conversion to w32 is not available inside the cwrapper. Returns result in -# func_to_host_file_result. -func_convert_file_msys_to_w32 () -{ - $debug_cmd - - func_to_host_file_result=$1 - if test -n "$1"; then - func_convert_core_msys_to_w32 "$1" - func_to_host_file_result=$func_convert_core_msys_to_w32_result - fi - func_convert_file_check "$1" "$func_to_host_file_result" -} -# end func_convert_file_msys_to_w32 - - -# func_convert_file_cygwin_to_w32 ARG -# Convert file name ARG from Cygwin to w32 format. Returns result in -# func_to_host_file_result. -func_convert_file_cygwin_to_w32 () -{ - $debug_cmd - - func_to_host_file_result=$1 - if test -n "$1"; then - # because $build is cygwin, we call "the" cygpath in $PATH; no need to use - # LT_CYGPATH in this case. - func_to_host_file_result=`cygpath -m "$1"` - fi - func_convert_file_check "$1" "$func_to_host_file_result" -} -# end func_convert_file_cygwin_to_w32 - - -# func_convert_file_nix_to_w32 ARG -# Convert file name ARG from *nix to w32 format. Requires a wine environment -# and a working winepath. Returns result in func_to_host_file_result. -func_convert_file_nix_to_w32 () -{ - $debug_cmd - - func_to_host_file_result=$1 - if test -n "$1"; then - func_convert_core_file_wine_to_w32 "$1" - func_to_host_file_result=$func_convert_core_file_wine_to_w32_result - fi - func_convert_file_check "$1" "$func_to_host_file_result" -} -# end func_convert_file_nix_to_w32 - - -# func_convert_file_msys_to_cygwin ARG -# Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. -# Returns result in func_to_host_file_result. -func_convert_file_msys_to_cygwin () -{ - $debug_cmd - - func_to_host_file_result=$1 - if test -n "$1"; then - func_convert_core_msys_to_w32 "$1" - func_cygpath -u "$func_convert_core_msys_to_w32_result" - func_to_host_file_result=$func_cygpath_result - fi - func_convert_file_check "$1" "$func_to_host_file_result" -} -# end func_convert_file_msys_to_cygwin - - -# func_convert_file_nix_to_cygwin ARG -# Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed -# in a wine environment, working winepath, and LT_CYGPATH set. Returns result -# in func_to_host_file_result. -func_convert_file_nix_to_cygwin () -{ - $debug_cmd - - func_to_host_file_result=$1 - if test -n "$1"; then - # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. - func_convert_core_file_wine_to_w32 "$1" - func_cygpath -u "$func_convert_core_file_wine_to_w32_result" - func_to_host_file_result=$func_cygpath_result - fi - func_convert_file_check "$1" "$func_to_host_file_result" -} -# end func_convert_file_nix_to_cygwin - - -############################################# -# $build to $host PATH CONVERSION FUNCTIONS # -############################################# -# invoked via '$to_host_path_cmd ARG' -# -# In each case, ARG is the path to be converted from $build to $host format. -# The result will be available in $func_to_host_path_result. -# -# Path separators are also converted from $build format to $host format. If -# ARG begins or ends with a path separator character, it is preserved (but -# converted to $host format) on output. -# -# All path conversion functions are named using the following convention: -# file name conversion function : func_convert_file_X_to_Y () -# path conversion function : func_convert_path_X_to_Y () -# where, for any given $build/$host combination the 'X_to_Y' value is the -# same. If conversion functions are added for new $build/$host combinations, -# the two new functions must follow this pattern, or func_init_to_host_path_cmd -# will break. - - -# func_init_to_host_path_cmd -# Ensures that function "pointer" variable $to_host_path_cmd is set to the -# appropriate value, based on the value of $to_host_file_cmd. -to_host_path_cmd= -func_init_to_host_path_cmd () -{ - $debug_cmd - - if test -z "$to_host_path_cmd"; then - func_stripname 'func_convert_file_' '' "$to_host_file_cmd" - to_host_path_cmd=func_convert_path_$func_stripname_result - fi -} - - -# func_to_host_path ARG -# Converts the path ARG from $build format to $host format. Return result -# in func_to_host_path_result. -func_to_host_path () -{ - $debug_cmd - - func_init_to_host_path_cmd - $to_host_path_cmd "$1" -} -# end func_to_host_path - - -# func_convert_path_noop ARG -# Copy ARG to func_to_host_path_result. -func_convert_path_noop () -{ - func_to_host_path_result=$1 -} -# end func_convert_path_noop - - -# func_convert_path_msys_to_w32 ARG -# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic -# conversion to w32 is not available inside the cwrapper. Returns result in -# func_to_host_path_result. -func_convert_path_msys_to_w32 () -{ - $debug_cmd - - func_to_host_path_result=$1 - if test -n "$1"; then - # Remove leading and trailing path separator characters from ARG. MSYS - # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; - # and winepath ignores them completely. - func_stripname : : "$1" - func_to_host_path_tmp1=$func_stripname_result - func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" - func_to_host_path_result=$func_convert_core_msys_to_w32_result - func_convert_path_check : ";" \ - "$func_to_host_path_tmp1" "$func_to_host_path_result" - func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" - fi -} -# end func_convert_path_msys_to_w32 - - -# func_convert_path_cygwin_to_w32 ARG -# Convert path ARG from Cygwin to w32 format. Returns result in -# func_to_host_file_result. -func_convert_path_cygwin_to_w32 () -{ - $debug_cmd - - func_to_host_path_result=$1 - if test -n "$1"; then - # See func_convert_path_msys_to_w32: - func_stripname : : "$1" - func_to_host_path_tmp1=$func_stripname_result - func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` - func_convert_path_check : ";" \ - "$func_to_host_path_tmp1" "$func_to_host_path_result" - func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" - fi -} -# end func_convert_path_cygwin_to_w32 - - -# func_convert_path_nix_to_w32 ARG -# Convert path ARG from *nix to w32 format. Requires a wine environment and -# a working winepath. Returns result in func_to_host_file_result. -func_convert_path_nix_to_w32 () -{ - $debug_cmd - - func_to_host_path_result=$1 - if test -n "$1"; then - # See func_convert_path_msys_to_w32: - func_stripname : : "$1" - func_to_host_path_tmp1=$func_stripname_result - func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" - func_to_host_path_result=$func_convert_core_path_wine_to_w32_result - func_convert_path_check : ";" \ - "$func_to_host_path_tmp1" "$func_to_host_path_result" - func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" - fi -} -# end func_convert_path_nix_to_w32 - - -# func_convert_path_msys_to_cygwin ARG -# Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. -# Returns result in func_to_host_file_result. -func_convert_path_msys_to_cygwin () -{ - $debug_cmd - - func_to_host_path_result=$1 - if test -n "$1"; then - # See func_convert_path_msys_to_w32: - func_stripname : : "$1" - func_to_host_path_tmp1=$func_stripname_result - func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" - func_cygpath -u -p "$func_convert_core_msys_to_w32_result" - func_to_host_path_result=$func_cygpath_result - func_convert_path_check : : \ - "$func_to_host_path_tmp1" "$func_to_host_path_result" - func_convert_path_front_back_pathsep ":*" "*:" : "$1" - fi -} -# end func_convert_path_msys_to_cygwin - - -# func_convert_path_nix_to_cygwin ARG -# Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a -# a wine environment, working winepath, and LT_CYGPATH set. Returns result in -# func_to_host_file_result. -func_convert_path_nix_to_cygwin () -{ - $debug_cmd - - func_to_host_path_result=$1 - if test -n "$1"; then - # Remove leading and trailing path separator characters from - # ARG. msys behavior is inconsistent here, cygpath turns them - # into '.;' and ';.', and winepath ignores them completely. - func_stripname : : "$1" - func_to_host_path_tmp1=$func_stripname_result - func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" - func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" - func_to_host_path_result=$func_cygpath_result - func_convert_path_check : : \ - "$func_to_host_path_tmp1" "$func_to_host_path_result" - func_convert_path_front_back_pathsep ":*" "*:" : "$1" - fi -} -# end func_convert_path_nix_to_cygwin - - -# func_dll_def_p FILE -# True iff FILE is a Windows DLL '.def' file. -# Keep in sync with _LT_DLL_DEF_P in libtool.m4 -func_dll_def_p () -{ - $debug_cmd - - func_dll_def_p_tmp=`$SED -n \ - -e 's/^[ ]*//' \ - -e '/^\(;.*\)*$/d' \ - -e 's/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p' \ - -e q \ - "$1"` - test DEF = "$func_dll_def_p_tmp" -} - - -# func_mode_compile arg... -func_mode_compile () -{ - $debug_cmd - - # Get the compilation command and the source file. - base_compile= - srcfile=$nonopt # always keep a non-empty value in "srcfile" - suppress_opt=yes - suppress_output= - arg_mode=normal - libobj= - later= - pie_flag= - - for arg - do - case $arg_mode in - arg ) - # do not "continue". Instead, add this to base_compile - lastarg=$arg - arg_mode=normal - ;; - - target ) - libobj=$arg - arg_mode=normal - continue - ;; - - normal ) - # Accept any command-line options. - case $arg in - -o) - test -n "$libobj" && \ - func_fatal_error "you cannot specify '-o' more than once" - arg_mode=target - continue - ;; - - -pie | -fpie | -fPIE) - func_append pie_flag " $arg" - continue - ;; - - -shared | -static | -prefer-pic | -prefer-non-pic) - func_append later " $arg" - continue - ;; - - -no-suppress) - suppress_opt=no - continue - ;; - - -Xcompiler) - arg_mode=arg # the next one goes into the "base_compile" arg list - continue # The current "srcfile" will either be retained or - ;; # replaced later. I would guess that would be a bug. - - -Wc,*) - func_stripname '-Wc,' '' "$arg" - args=$func_stripname_result - lastarg= - save_ifs=$IFS; IFS=, - for arg in $args; do - IFS=$save_ifs - func_append_quoted lastarg "$arg" - done - IFS=$save_ifs - func_stripname ' ' '' "$lastarg" - lastarg=$func_stripname_result - - # Add the arguments to base_compile. - func_append base_compile " $lastarg" - continue - ;; - - *) - # Accept the current argument as the source file. - # The previous "srcfile" becomes the current argument. - # - lastarg=$srcfile - srcfile=$arg - ;; - esac # case $arg - ;; - esac # case $arg_mode - - # Aesthetically quote the previous argument. - func_append_quoted base_compile "$lastarg" - done # for arg - - case $arg_mode in - arg) - func_fatal_error "you must specify an argument for -Xcompile" - ;; - target) - func_fatal_error "you must specify a target with '-o'" - ;; - *) - # Get the name of the library object. - test -z "$libobj" && { - func_basename "$srcfile" - libobj=$func_basename_result - } - ;; - esac - - # Recognize several different file suffixes. - # If the user specifies -o file.o, it is replaced with file.lo - case $libobj in - *.[cCFSifmso] | \ - *.ada | *.adb | *.ads | *.asm | \ - *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ - *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup) - func_xform "$libobj" - libobj=$func_xform_result - ;; - esac - - case $libobj in - *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; - *) - func_fatal_error "cannot determine name of library object from '$libobj'" - ;; - esac - - func_infer_tag $base_compile - - for arg in $later; do - case $arg in - -shared) - test yes = "$build_libtool_libs" \ - || func_fatal_configuration "cannot build a shared library" - build_old_libs=no - continue - ;; - - -static) - build_libtool_libs=no - build_old_libs=yes - continue - ;; - - -prefer-pic) - pic_mode=yes - continue - ;; - - -prefer-non-pic) - pic_mode=no - continue - ;; - esac - done - - func_quote_for_eval "$libobj" - test "X$libobj" != "X$func_quote_for_eval_result" \ - && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ - && func_warning "libobj name '$libobj' may not contain shell special characters." - func_dirname_and_basename "$obj" "/" "" - objname=$func_basename_result - xdir=$func_dirname_result - lobj=$xdir$objdir/$objname - - test -z "$base_compile" && \ - func_fatal_help "you must specify a compilation command" - - # Delete any leftover library objects. - if test yes = "$build_old_libs"; then - removelist="$obj $lobj $libobj ${libobj}T" - else - removelist="$lobj $libobj ${libobj}T" - fi - - # On Cygwin there's no "real" PIC flag so we must build both object types - case $host_os in - cygwin* | mingw* | pw32* | os2* | cegcc*) - pic_mode=default - ;; - esac - if test no = "$pic_mode" && test pass_all != "$deplibs_check_method"; then - # non-PIC code in shared libraries is not supported - pic_mode=default - fi - - # Calculate the filename of the output object if compiler does - # not support -o with -c - if test no = "$compiler_c_o"; then - output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.$objext - lockfile=$output_obj.lock - else - output_obj= - need_locks=no - lockfile= - fi - - # Lock this critical section if it is needed - # We use this script file to make the link, it avoids creating a new file - if test yes = "$need_locks"; then - until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do - func_echo "Waiting for $lockfile to be removed" - sleep 2 - done - elif test warn = "$need_locks"; then - if test -f "$lockfile"; then - $ECHO "\ -*** ERROR, $lockfile exists and contains: -`cat $lockfile 2>/dev/null` - -This indicates that another process is trying to use the same -temporary object file, and libtool could not work around it because -your compiler does not support '-c' and '-o' together. If you -repeat this compilation, it may succeed, by chance, but you had better -avoid parallel builds (make -j) in this platform, or get a better -compiler." - - $opt_dry_run || $RM $removelist - exit $EXIT_FAILURE - fi - func_append removelist " $output_obj" - $ECHO "$srcfile" > "$lockfile" - fi - - $opt_dry_run || $RM $removelist - func_append removelist " $lockfile" - trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 - - func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 - srcfile=$func_to_tool_file_result - func_quote_for_eval "$srcfile" - qsrcfile=$func_quote_for_eval_result - - # Only build a PIC object if we are building libtool libraries. - if test yes = "$build_libtool_libs"; then - # Without this assignment, base_compile gets emptied. - fbsd_hideous_sh_bug=$base_compile - - if test no != "$pic_mode"; then - command="$base_compile $qsrcfile $pic_flag" - else - # Don't build PIC code - command="$base_compile $qsrcfile" - fi - - func_mkdir_p "$xdir$objdir" - - if test -z "$output_obj"; then - # Place PIC objects in $objdir - func_append command " -o $lobj" - fi - - func_show_eval_locale "$command" \ - 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' - - if test warn = "$need_locks" && - test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then - $ECHO "\ -*** ERROR, $lockfile contains: -`cat $lockfile 2>/dev/null` - -but it should contain: -$srcfile - -This indicates that another process is trying to use the same -temporary object file, and libtool could not work around it because -your compiler does not support '-c' and '-o' together. If you -repeat this compilation, it may succeed, by chance, but you had better -avoid parallel builds (make -j) in this platform, or get a better -compiler." - - $opt_dry_run || $RM $removelist - exit $EXIT_FAILURE - fi - - # Just move the object if needed, then go on to compile the next one - if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then - func_show_eval '$MV "$output_obj" "$lobj"' \ - 'error=$?; $opt_dry_run || $RM $removelist; exit $error' - fi - - # Allow error messages only from the first compilation. - if test yes = "$suppress_opt"; then - suppress_output=' >/dev/null 2>&1' - fi - fi - - # Only build a position-dependent object if we build old libraries. - if test yes = "$build_old_libs"; then - if test yes != "$pic_mode"; then - # Don't build PIC code - command="$base_compile $qsrcfile$pie_flag" - else - command="$base_compile $qsrcfile $pic_flag" - fi - if test yes = "$compiler_c_o"; then - func_append command " -o $obj" - fi - - # Suppress compiler output if we already did a PIC compilation. - func_append command "$suppress_output" - func_show_eval_locale "$command" \ - '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' - - if test warn = "$need_locks" && - test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then - $ECHO "\ -*** ERROR, $lockfile contains: -`cat $lockfile 2>/dev/null` - -but it should contain: -$srcfile - -This indicates that another process is trying to use the same -temporary object file, and libtool could not work around it because -your compiler does not support '-c' and '-o' together. If you -repeat this compilation, it may succeed, by chance, but you had better -avoid parallel builds (make -j) in this platform, or get a better -compiler." - - $opt_dry_run || $RM $removelist - exit $EXIT_FAILURE - fi - - # Just move the object if needed - if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then - func_show_eval '$MV "$output_obj" "$obj"' \ - 'error=$?; $opt_dry_run || $RM $removelist; exit $error' - fi - fi - - $opt_dry_run || { - func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" - - # Unlock the critical section if it was locked - if test no != "$need_locks"; then - removelist=$lockfile - $RM "$lockfile" - fi - } - - exit $EXIT_SUCCESS -} - -$opt_help || { - test compile = "$opt_mode" && func_mode_compile ${1+"$@"} -} - -func_mode_help () -{ - # We need to display help for each of the modes. - case $opt_mode in - "") - # Generic help is extracted from the usage comments - # at the start of this file. - func_help - ;; - - clean) - $ECHO \ -"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... - -Remove files from the build directory. - -RM is the name of the program to use to delete files associated with each FILE -(typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed -to RM. - -If FILE is a libtool library, object or program, all the files associated -with it are deleted. Otherwise, only FILE itself is deleted using RM." - ;; - - compile) - $ECHO \ -"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE - -Compile a source file into a libtool library object. - -This mode accepts the following additional options: - - -o OUTPUT-FILE set the output file name to OUTPUT-FILE - -no-suppress do not suppress compiler output for multiple passes - -prefer-pic try to build PIC objects only - -prefer-non-pic try to build non-PIC objects only - -shared do not build a '.o' file suitable for static linking - -static only build a '.o' file suitable for static linking - -Wc,FLAG pass FLAG directly to the compiler - -COMPILE-COMMAND is a command to be used in creating a 'standard' object file -from the given SOURCEFILE. - -The output file name is determined by removing the directory component from -SOURCEFILE, then substituting the C source code suffix '.c' with the -library object suffix, '.lo'." - ;; - - execute) - $ECHO \ -"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... - -Automatically set library path, then run a program. - -This mode accepts the following additional options: - - -dlopen FILE add the directory containing FILE to the library path - -This mode sets the library path environment variable according to '-dlopen' -flags. - -If any of the ARGS are libtool executable wrappers, then they are translated -into their corresponding uninstalled binary, and any of their required library -directories are added to the library path. - -Then, COMMAND is executed, with ARGS as arguments." - ;; - - finish) - $ECHO \ -"Usage: $progname [OPTION]... --mode=finish [LIBDIR]... - -Complete the installation of libtool libraries. - -Each LIBDIR is a directory that contains libtool libraries. - -The commands that this mode executes may require superuser privileges. Use -the '--dry-run' option if you just want to see what would be executed." - ;; - - install) - $ECHO \ -"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... - -Install executables or libraries. - -INSTALL-COMMAND is the installation command. The first component should be -either the 'install' or 'cp' program. - -The following components of INSTALL-COMMAND are treated specially: - - -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation - -The rest of the components are interpreted as arguments to that command (only -BSD-compatible install options are recognized)." - ;; - - link) - $ECHO \ -"Usage: $progname [OPTION]... --mode=link LINK-COMMAND... - -Link object files or libraries together to form another library, or to -create an executable program. - -LINK-COMMAND is a command using the C compiler that you would use to create -a program from several object files. - -The following components of LINK-COMMAND are treated specially: - - -all-static do not do any dynamic linking at all - -avoid-version do not add a version suffix if possible - -bindir BINDIR specify path to binaries directory (for systems where - libraries must be found in the PATH setting at runtime) - -dlopen FILE '-dlpreopen' FILE if it cannot be dlopened at runtime - -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols - -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) - -export-symbols SYMFILE - try to export only the symbols listed in SYMFILE - -export-symbols-regex REGEX - try to export only the symbols matching REGEX - -LLIBDIR search LIBDIR for required installed libraries - -lNAME OUTPUT-FILE requires the installed library libNAME - -module build a library that can dlopened - -no-fast-install disable the fast-install mode - -no-install link a not-installable executable - -no-undefined declare that a library does not refer to external symbols - -o OUTPUT-FILE create OUTPUT-FILE from the specified objects - -objectlist FILE use a list of object files found in FILE to specify objects - -os2dllname NAME force a short DLL name on OS/2 (no effect on other OSes) - -precious-files-regex REGEX - don't remove output files matching REGEX - -release RELEASE specify package release information - -rpath LIBDIR the created library will eventually be installed in LIBDIR - -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries - -shared only do dynamic linking of libtool libraries - -shrext SUFFIX override the standard shared library file extension - -static do not do any dynamic linking of uninstalled libtool libraries - -static-libtool-libs - do not do any dynamic linking of libtool libraries - -version-info CURRENT[:REVISION[:AGE]] - specify library version info [each variable defaults to 0] - -weak LIBNAME declare that the target provides the LIBNAME interface - -Wc,FLAG - -Xcompiler FLAG pass linker-specific FLAG directly to the compiler - -Wl,FLAG - -Xlinker FLAG pass linker-specific FLAG directly to the linker - -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) - -All other options (arguments beginning with '-') are ignored. - -Every other argument is treated as a filename. Files ending in '.la' are -treated as uninstalled libtool libraries, other files are standard or library -object files. - -If the OUTPUT-FILE ends in '.la', then a libtool library is created, -only library objects ('.lo' files) may be specified, and '-rpath' is -required, except when creating a convenience library. - -If OUTPUT-FILE ends in '.a' or '.lib', then a standard library is created -using 'ar' and 'ranlib', or on Windows using 'lib'. - -If OUTPUT-FILE ends in '.lo' or '.$objext', then a reloadable object file -is created, otherwise an executable program is created." - ;; - - uninstall) - $ECHO \ -"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... - -Remove libraries from an installation directory. - -RM is the name of the program to use to delete files associated with each FILE -(typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed -to RM. - -If FILE is a libtool library, all the files associated with it are deleted. -Otherwise, only FILE itself is deleted using RM." - ;; - - *) - func_fatal_help "invalid operation mode '$opt_mode'" - ;; - esac - - echo - $ECHO "Try '$progname --help' for more information about other modes." -} - -# Now that we've collected a possible --mode arg, show help if necessary -if $opt_help; then - if test : = "$opt_help"; then - func_mode_help - else - { - func_help noexit - for opt_mode in compile link execute install finish uninstall clean; do - func_mode_help - done - } | $SED -n '1p; 2,$s/^Usage:/ or: /p' - { - func_help noexit - for opt_mode in compile link execute install finish uninstall clean; do - echo - func_mode_help - done - } | - $SED '1d - /^When reporting/,/^Report/{ - H - d - } - $x - /information about other modes/d - /more detailed .*MODE/d - s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' - fi - exit $? -fi - - -# func_mode_execute arg... -func_mode_execute () -{ - $debug_cmd - - # The first argument is the command name. - cmd=$nonopt - test -z "$cmd" && \ - func_fatal_help "you must specify a COMMAND" - - # Handle -dlopen flags immediately. - for file in $opt_dlopen; do - test -f "$file" \ - || func_fatal_help "'$file' is not a file" - - dir= - case $file in - *.la) - func_resolve_sysroot "$file" - file=$func_resolve_sysroot_result - - # Check to see that this really is a libtool archive. - func_lalib_unsafe_p "$file" \ - || func_fatal_help "'$lib' is not a valid libtool archive" - - # Read the libtool library. - dlname= - library_names= - func_source "$file" - - # Skip this library if it cannot be dlopened. - if test -z "$dlname"; then - # Warn if it was a shared library. - test -n "$library_names" && \ - func_warning "'$file' was not linked with '-export-dynamic'" - continue - fi - - func_dirname "$file" "" "." - dir=$func_dirname_result - - if test -f "$dir/$objdir/$dlname"; then - func_append dir "/$objdir" - else - if test ! -f "$dir/$dlname"; then - func_fatal_error "cannot find '$dlname' in '$dir' or '$dir/$objdir'" - fi - fi - ;; - - *.lo) - # Just add the directory containing the .lo file. - func_dirname "$file" "" "." - dir=$func_dirname_result - ;; - - *) - func_warning "'-dlopen' is ignored for non-libtool libraries and objects" - continue - ;; - esac - - # Get the absolute pathname. - absdir=`cd "$dir" && pwd` - test -n "$absdir" && dir=$absdir - - # Now add the directory to shlibpath_var. - if eval "test -z \"\$$shlibpath_var\""; then - eval "$shlibpath_var=\"\$dir\"" - else - eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" - fi - done - - # This variable tells wrapper scripts just to set shlibpath_var - # rather than running their programs. - libtool_execute_magic=$magic - - # Check if any of the arguments is a wrapper script. - args= - for file - do - case $file in - -* | *.la | *.lo ) ;; - *) - # Do a test to see if this is really a libtool program. - if func_ltwrapper_script_p "$file"; then - func_source "$file" - # Transform arg to wrapped name. - file=$progdir/$program - elif func_ltwrapper_executable_p "$file"; then - func_ltwrapper_scriptname "$file" - func_source "$func_ltwrapper_scriptname_result" - # Transform arg to wrapped name. - file=$progdir/$program - fi - ;; - esac - # Quote arguments (to preserve shell metacharacters). - func_append_quoted args "$file" - done - - if $opt_dry_run; then - # Display what would be done. - if test -n "$shlibpath_var"; then - eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" - echo "export $shlibpath_var" - fi - $ECHO "$cmd$args" - exit $EXIT_SUCCESS - else - if test -n "$shlibpath_var"; then - # Export the shlibpath_var. - eval "export $shlibpath_var" - fi - - # Restore saved environment variables - for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES - do - eval "if test \"\${save_$lt_var+set}\" = set; then - $lt_var=\$save_$lt_var; export $lt_var - else - $lt_unset $lt_var - fi" - done - - # Now prepare to actually exec the command. - exec_cmd=\$cmd$args - fi -} - -test execute = "$opt_mode" && func_mode_execute ${1+"$@"} - - -# func_mode_finish arg... -func_mode_finish () -{ - $debug_cmd - - libs= - libdirs= - admincmds= - - for opt in "$nonopt" ${1+"$@"} - do - if test -d "$opt"; then - func_append libdirs " $opt" - - elif test -f "$opt"; then - if func_lalib_unsafe_p "$opt"; then - func_append libs " $opt" - else - func_warning "'$opt' is not a valid libtool archive" - fi - - else - func_fatal_error "invalid argument '$opt'" - fi - done - - if test -n "$libs"; then - if test -n "$lt_sysroot"; then - sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` - sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" - else - sysroot_cmd= - fi - - # Remove sysroot references - if $opt_dry_run; then - for lib in $libs; do - echo "removing references to $lt_sysroot and '=' prefixes from $lib" - done - else - tmpdir=`func_mktempdir` - for lib in $libs; do - $SED -e "$sysroot_cmd s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ - > $tmpdir/tmp-la - mv -f $tmpdir/tmp-la $lib - done - ${RM}r "$tmpdir" - fi - fi - - if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then - for libdir in $libdirs; do - if test -n "$finish_cmds"; then - # Do each command in the finish commands. - func_execute_cmds "$finish_cmds" 'admincmds="$admincmds -'"$cmd"'"' - fi - if test -n "$finish_eval"; then - # Do the single finish_eval. - eval cmds=\"$finish_eval\" - $opt_dry_run || eval "$cmds" || func_append admincmds " - $cmds" - fi - done - fi - - # Exit here if they wanted silent mode. - $opt_quiet && exit $EXIT_SUCCESS - - if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then - echo "----------------------------------------------------------------------" - echo "Libraries have been installed in:" - for libdir in $libdirs; do - $ECHO " $libdir" - done - echo - echo "If you ever happen to want to link against installed libraries" - echo "in a given directory, LIBDIR, you must either use libtool, and" - echo "specify the full pathname of the library, or use the '-LLIBDIR'" - echo "flag during linking and do at least one of the following:" - if test -n "$shlibpath_var"; then - echo " - add LIBDIR to the '$shlibpath_var' environment variable" - echo " during execution" - fi - if test -n "$runpath_var"; then - echo " - add LIBDIR to the '$runpath_var' environment variable" - echo " during linking" - fi - if test -n "$hardcode_libdir_flag_spec"; then - libdir=LIBDIR - eval flag=\"$hardcode_libdir_flag_spec\" - - $ECHO " - use the '$flag' linker flag" - fi - if test -n "$admincmds"; then - $ECHO " - have your system administrator run these commands:$admincmds" - fi - if test -f /etc/ld.so.conf; then - echo " - have your system administrator add LIBDIR to '/etc/ld.so.conf'" - fi - echo - - echo "See any operating system documentation about shared libraries for" - case $host in - solaris2.[6789]|solaris2.1[0-9]) - echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" - echo "pages." - ;; - *) - echo "more information, such as the ld(1) and ld.so(8) manual pages." - ;; - esac - echo "----------------------------------------------------------------------" - fi - exit $EXIT_SUCCESS -} - -test finish = "$opt_mode" && func_mode_finish ${1+"$@"} - - -# func_mode_install arg... -func_mode_install () -{ - $debug_cmd - - # There may be an optional sh(1) argument at the beginning of - # install_prog (especially on Windows NT). - if test "$SHELL" = "$nonopt" || test /bin/sh = "$nonopt" || - # Allow the use of GNU shtool's install command. - case $nonopt in *shtool*) :;; *) false;; esac - then - # Aesthetically quote it. - func_quote_for_eval "$nonopt" - install_prog="$func_quote_for_eval_result " - arg=$1 - shift - else - install_prog= - arg=$nonopt - fi - - # The real first argument should be the name of the installation program. - # Aesthetically quote it. - func_quote_for_eval "$arg" - func_append install_prog "$func_quote_for_eval_result" - install_shared_prog=$install_prog - case " $install_prog " in - *[\\\ /]cp\ *) install_cp=: ;; - *) install_cp=false ;; - esac - - # We need to accept at least all the BSD install flags. - dest= - files= - opts= - prev= - install_type= - isdir=false - stripme= - no_mode=: - for arg - do - arg2= - if test -n "$dest"; then - func_append files " $dest" - dest=$arg - continue - fi - - case $arg in - -d) isdir=: ;; - -f) - if $install_cp; then :; else - prev=$arg - fi - ;; - -g | -m | -o) - prev=$arg - ;; - -s) - stripme=" -s" - continue - ;; - -*) - ;; - *) - # If the previous option needed an argument, then skip it. - if test -n "$prev"; then - if test X-m = "X$prev" && test -n "$install_override_mode"; then - arg2=$install_override_mode - no_mode=false - fi - prev= - else - dest=$arg - continue - fi - ;; - esac - - # Aesthetically quote the argument. - func_quote_for_eval "$arg" - func_append install_prog " $func_quote_for_eval_result" - if test -n "$arg2"; then - func_quote_for_eval "$arg2" - fi - func_append install_shared_prog " $func_quote_for_eval_result" - done - - test -z "$install_prog" && \ - func_fatal_help "you must specify an install program" - - test -n "$prev" && \ - func_fatal_help "the '$prev' option requires an argument" - - if test -n "$install_override_mode" && $no_mode; then - if $install_cp; then :; else - func_quote_for_eval "$install_override_mode" - func_append install_shared_prog " -m $func_quote_for_eval_result" - fi - fi - - if test -z "$files"; then - if test -z "$dest"; then - func_fatal_help "no file or destination specified" - else - func_fatal_help "you must specify a destination" - fi - fi - - # Strip any trailing slash from the destination. - func_stripname '' '/' "$dest" - dest=$func_stripname_result - - # Check to see that the destination is a directory. - test -d "$dest" && isdir=: - if $isdir; then - destdir=$dest - destname= - else - func_dirname_and_basename "$dest" "" "." - destdir=$func_dirname_result - destname=$func_basename_result - - # Not a directory, so check to see that there is only one file specified. - set dummy $files; shift - test "$#" -gt 1 && \ - func_fatal_help "'$dest' is not a directory" - fi - case $destdir in - [\\/]* | [A-Za-z]:[\\/]*) ;; - *) - for file in $files; do - case $file in - *.lo) ;; - *) - func_fatal_help "'$destdir' must be an absolute directory name" - ;; - esac - done - ;; - esac - - # This variable tells wrapper scripts just to set variables rather - # than running their programs. - libtool_install_magic=$magic - - staticlibs= - future_libdirs= - current_libdirs= - for file in $files; do - - # Do each installation. - case $file in - *.$libext) - # Do the static libraries later. - func_append staticlibs " $file" - ;; - - *.la) - func_resolve_sysroot "$file" - file=$func_resolve_sysroot_result - - # Check to see that this really is a libtool archive. - func_lalib_unsafe_p "$file" \ - || func_fatal_help "'$file' is not a valid libtool archive" - - library_names= - old_library= - relink_command= - func_source "$file" - - # Add the libdir to current_libdirs if it is the destination. - if test "X$destdir" = "X$libdir"; then - case "$current_libdirs " in - *" $libdir "*) ;; - *) func_append current_libdirs " $libdir" ;; - esac - else - # Note the libdir as a future libdir. - case "$future_libdirs " in - *" $libdir "*) ;; - *) func_append future_libdirs " $libdir" ;; - esac - fi - - func_dirname "$file" "/" "" - dir=$func_dirname_result - func_append dir "$objdir" - - if test -n "$relink_command"; then - # Determine the prefix the user has applied to our future dir. - inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` - - # Don't allow the user to place us outside of our expected - # location b/c this prevents finding dependent libraries that - # are installed to the same prefix. - # At present, this check doesn't affect windows .dll's that - # are installed into $libdir/../bin (currently, that works fine) - # but it's something to keep an eye on. - test "$inst_prefix_dir" = "$destdir" && \ - func_fatal_error "error: cannot install '$file' to a directory not ending in $libdir" - - if test -n "$inst_prefix_dir"; then - # Stick the inst_prefix_dir data into the link command. - relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` - else - relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` - fi - - func_warning "relinking '$file'" - func_show_eval "$relink_command" \ - 'func_fatal_error "error: relink '\''$file'\'' with the above command before installing it"' - fi - - # See the names of the shared library. - set dummy $library_names; shift - if test -n "$1"; then - realname=$1 - shift - - srcname=$realname - test -n "$relink_command" && srcname=${realname}T - - # Install the shared library and build the symlinks. - func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ - 'exit $?' - tstripme=$stripme - case $host_os in - cygwin* | mingw* | pw32* | cegcc*) - case $realname in - *.dll.a) - tstripme= - ;; - esac - ;; - os2*) - case $realname in - *_dll.a) - tstripme= - ;; - esac - ;; - esac - if test -n "$tstripme" && test -n "$striplib"; then - func_show_eval "$striplib $destdir/$realname" 'exit $?' - fi - - if test "$#" -gt 0; then - # Delete the old symlinks, and create new ones. - # Try 'ln -sf' first, because the 'ln' binary might depend on - # the symlink we replace! Solaris /bin/ln does not understand -f, - # so we also need to try rm && ln -s. - for linkname - do - test "$linkname" != "$realname" \ - && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" - done - fi - - # Do each command in the postinstall commands. - lib=$destdir/$realname - func_execute_cmds "$postinstall_cmds" 'exit $?' - fi - - # Install the pseudo-library for information purposes. - func_basename "$file" - name=$func_basename_result - instname=$dir/${name}i - func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' - - # Maybe install the static library, too. - test -n "$old_library" && func_append staticlibs " $dir/$old_library" - ;; - - *.lo) - # Install (i.e. copy) a libtool object. - - # Figure out destination file name, if it wasn't already specified. - if test -n "$destname"; then - destfile=$destdir/$destname - else - func_basename "$file" - destfile=$func_basename_result - destfile=$destdir/$destfile - fi - - # Deduce the name of the destination old-style object file. - case $destfile in - *.lo) - func_lo2o "$destfile" - staticdest=$func_lo2o_result - ;; - *.$objext) - staticdest=$destfile - destfile= - ;; - *) - func_fatal_help "cannot copy a libtool object to '$destfile'" - ;; - esac - - # Install the libtool object if requested. - test -n "$destfile" && \ - func_show_eval "$install_prog $file $destfile" 'exit $?' - - # Install the old object if enabled. - if test yes = "$build_old_libs"; then - # Deduce the name of the old-style object file. - func_lo2o "$file" - staticobj=$func_lo2o_result - func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' - fi - exit $EXIT_SUCCESS - ;; - - *) - # Figure out destination file name, if it wasn't already specified. - if test -n "$destname"; then - destfile=$destdir/$destname - else - func_basename "$file" - destfile=$func_basename_result - destfile=$destdir/$destfile - fi - - # If the file is missing, and there is a .exe on the end, strip it - # because it is most likely a libtool script we actually want to - # install - stripped_ext= - case $file in - *.exe) - if test ! -f "$file"; then - func_stripname '' '.exe' "$file" - file=$func_stripname_result - stripped_ext=.exe - fi - ;; - esac - - # Do a test to see if this is really a libtool program. - case $host in - *cygwin* | *mingw*) - if func_ltwrapper_executable_p "$file"; then - func_ltwrapper_scriptname "$file" - wrapper=$func_ltwrapper_scriptname_result - else - func_stripname '' '.exe' "$file" - wrapper=$func_stripname_result - fi - ;; - *) - wrapper=$file - ;; - esac - if func_ltwrapper_script_p "$wrapper"; then - notinst_deplibs= - relink_command= - - func_source "$wrapper" - - # Check the variables that should have been set. - test -z "$generated_by_libtool_version" && \ - func_fatal_error "invalid libtool wrapper script '$wrapper'" - - finalize=: - for lib in $notinst_deplibs; do - # Check to see that each library is installed. - libdir= - if test -f "$lib"; then - func_source "$lib" - fi - libfile=$libdir/`$ECHO "$lib" | $SED 's%^.*/%%g'` - if test -n "$libdir" && test ! -f "$libfile"; then - func_warning "'$lib' has not been installed in '$libdir'" - finalize=false - fi - done - - relink_command= - func_source "$wrapper" - - outputname= - if test no = "$fast_install" && test -n "$relink_command"; then - $opt_dry_run || { - if $finalize; then - tmpdir=`func_mktempdir` - func_basename "$file$stripped_ext" - file=$func_basename_result - outputname=$tmpdir/$file - # Replace the output file specification. - relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` - - $opt_quiet || { - func_quote_for_expand "$relink_command" - eval "func_echo $func_quote_for_expand_result" - } - if eval "$relink_command"; then : - else - func_error "error: relink '$file' with the above command before installing it" - $opt_dry_run || ${RM}r "$tmpdir" - continue - fi - file=$outputname - else - func_warning "cannot relink '$file'" - fi - } - else - # Install the binary that we compiled earlier. - file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` - fi - fi - - # remove .exe since cygwin /usr/bin/install will append another - # one anyway - case $install_prog,$host in - */usr/bin/install*,*cygwin*) - case $file:$destfile in - *.exe:*.exe) - # this is ok - ;; - *.exe:*) - destfile=$destfile.exe - ;; - *:*.exe) - func_stripname '' '.exe' "$destfile" - destfile=$func_stripname_result - ;; - esac - ;; - esac - func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' - $opt_dry_run || if test -n "$outputname"; then - ${RM}r "$tmpdir" - fi - ;; - esac - done - - for file in $staticlibs; do - func_basename "$file" - name=$func_basename_result - - # Set up the ranlib parameters. - oldlib=$destdir/$name - func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 - tool_oldlib=$func_to_tool_file_result - - func_show_eval "$install_prog \$file \$oldlib" 'exit $?' - - if test -n "$stripme" && test -n "$old_striplib"; then - func_show_eval "$old_striplib $tool_oldlib" 'exit $?' - fi - - # Do each command in the postinstall commands. - func_execute_cmds "$old_postinstall_cmds" 'exit $?' - done - - test -n "$future_libdirs" && \ - func_warning "remember to run '$progname --finish$future_libdirs'" - - if test -n "$current_libdirs"; then - # Maybe just do a dry run. - $opt_dry_run && current_libdirs=" -n$current_libdirs" - exec_cmd='$SHELL "$progpath" $preserve_args --finish$current_libdirs' - else - exit $EXIT_SUCCESS - fi -} - -test install = "$opt_mode" && func_mode_install ${1+"$@"} - - -# func_generate_dlsyms outputname originator pic_p -# Extract symbols from dlprefiles and create ${outputname}S.o with -# a dlpreopen symbol table. -func_generate_dlsyms () -{ - $debug_cmd - - my_outputname=$1 - my_originator=$2 - my_pic_p=${3-false} - my_prefix=`$ECHO "$my_originator" | $SED 's%[^a-zA-Z0-9]%_%g'` - my_dlsyms= - - if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then - if test -n "$NM" && test -n "$global_symbol_pipe"; then - my_dlsyms=${my_outputname}S.c - else - func_error "not configured to extract global symbols from dlpreopened files" - fi - fi - - if test -n "$my_dlsyms"; then - case $my_dlsyms in - "") ;; - *.c) - # Discover the nlist of each of the dlfiles. - nlist=$output_objdir/$my_outputname.nm - - func_show_eval "$RM $nlist ${nlist}S ${nlist}T" - - # Parse the name list into a source file. - func_verbose "creating $output_objdir/$my_dlsyms" - - $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ -/* $my_dlsyms - symbol resolution table for '$my_outputname' dlsym emulation. */ -/* Generated by $PROGRAM (GNU $PACKAGE) $VERSION */ - -#ifdef __cplusplus -extern \"C\" { -#endif - -#if defined __GNUC__ && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) -#pragma GCC diagnostic ignored \"-Wstrict-prototypes\" -#endif - -/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ -#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE -/* DATA imports from DLLs on WIN32 can't be const, because runtime - relocations are performed -- see ld's documentation on pseudo-relocs. */ -# define LT_DLSYM_CONST -#elif defined __osf__ -/* This system does not cope well with relocations in const data. */ -# define LT_DLSYM_CONST -#else -# define LT_DLSYM_CONST const -#endif - -#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) - -/* External symbol declarations for the compiler. */\ -" - - if test yes = "$dlself"; then - func_verbose "generating symbol list for '$output'" - - $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" - - # Add our own program objects to the symbol list. - progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` - for progfile in $progfiles; do - func_to_tool_file "$progfile" func_convert_file_msys_to_w32 - func_verbose "extracting global C symbols from '$func_to_tool_file_result'" - $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" - done - - if test -n "$exclude_expsyms"; then - $opt_dry_run || { - eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' - eval '$MV "$nlist"T "$nlist"' - } - fi - - if test -n "$export_symbols_regex"; then - $opt_dry_run || { - eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' - eval '$MV "$nlist"T "$nlist"' - } - fi - - # Prepare the list of exported symbols - if test -z "$export_symbols"; then - export_symbols=$output_objdir/$outputname.exp - $opt_dry_run || { - $RM $export_symbols - eval "$SED -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' - case $host in - *cygwin* | *mingw* | *cegcc* ) - eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' - eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' - ;; - esac - } - else - $opt_dry_run || { - eval "$SED -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' - eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' - eval '$MV "$nlist"T "$nlist"' - case $host in - *cygwin* | *mingw* | *cegcc* ) - eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' - eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' - ;; - esac - } - fi - fi - - for dlprefile in $dlprefiles; do - func_verbose "extracting global C symbols from '$dlprefile'" - func_basename "$dlprefile" - name=$func_basename_result - case $host in - *cygwin* | *mingw* | *cegcc* ) - # if an import library, we need to obtain dlname - if func_win32_import_lib_p "$dlprefile"; then - func_tr_sh "$dlprefile" - eval "curr_lafile=\$libfile_$func_tr_sh_result" - dlprefile_dlbasename= - if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then - # Use subshell, to avoid clobbering current variable values - dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` - if test -n "$dlprefile_dlname"; then - func_basename "$dlprefile_dlname" - dlprefile_dlbasename=$func_basename_result - else - # no lafile. user explicitly requested -dlpreopen . - $sharedlib_from_linklib_cmd "$dlprefile" - dlprefile_dlbasename=$sharedlib_from_linklib_result - fi - fi - $opt_dry_run || { - if test -n "$dlprefile_dlbasename"; then - eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' - else - func_warning "Could not compute DLL name from $name" - eval '$ECHO ": $name " >> "$nlist"' - fi - func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 - eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | - $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" - } - else # not an import lib - $opt_dry_run || { - eval '$ECHO ": $name " >> "$nlist"' - func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 - eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" - } - fi - ;; - *) - $opt_dry_run || { - eval '$ECHO ": $name " >> "$nlist"' - func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 - eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" - } - ;; - esac - done - - $opt_dry_run || { - # Make sure we have at least an empty file. - test -f "$nlist" || : > "$nlist" - - if test -n "$exclude_expsyms"; then - $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T - $MV "$nlist"T "$nlist" - fi - - # Try sorting and uniquifying the output. - if $GREP -v "^: " < "$nlist" | - if sort -k 3 /dev/null 2>&1; then - sort -k 3 - else - sort +2 - fi | - uniq > "$nlist"S; then - : - else - $GREP -v "^: " < "$nlist" > "$nlist"S - fi - - if test -f "$nlist"S; then - eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' - else - echo '/* NONE */' >> "$output_objdir/$my_dlsyms" - fi - - func_show_eval '$RM "${nlist}I"' - if test -n "$global_symbol_to_import"; then - eval "$global_symbol_to_import"' < "$nlist"S > "$nlist"I' - fi - - echo >> "$output_objdir/$my_dlsyms" "\ - -/* The mapping between symbol names and symbols. */ -typedef struct { - const char *name; - void *address; -} lt_dlsymlist; -extern LT_DLSYM_CONST lt_dlsymlist -lt_${my_prefix}_LTX_preloaded_symbols[];\ -" - - if test -s "$nlist"I; then - echo >> "$output_objdir/$my_dlsyms" "\ -static void lt_syminit(void) -{ - LT_DLSYM_CONST lt_dlsymlist *symbol = lt_${my_prefix}_LTX_preloaded_symbols; - for (; symbol->name; ++symbol) - {" - $SED 's/.*/ if (STREQ (symbol->name, \"&\")) symbol->address = (void *) \&&;/' < "$nlist"I >> "$output_objdir/$my_dlsyms" - echo >> "$output_objdir/$my_dlsyms" "\ - } -}" - fi - echo >> "$output_objdir/$my_dlsyms" "\ -LT_DLSYM_CONST lt_dlsymlist -lt_${my_prefix}_LTX_preloaded_symbols[] = -{ {\"$my_originator\", (void *) 0}," - - if test -s "$nlist"I; then - echo >> "$output_objdir/$my_dlsyms" "\ - {\"@INIT@\", (void *) <_syminit}," - fi - - case $need_lib_prefix in - no) - eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" - ;; - *) - eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" - ;; - esac - echo >> "$output_objdir/$my_dlsyms" "\ - {0, (void *) 0} -}; - -/* This works around a problem in FreeBSD linker */ -#ifdef FREEBSD_WORKAROUND -static const void *lt_preloaded_setup() { - return lt_${my_prefix}_LTX_preloaded_symbols; -} -#endif - -#ifdef __cplusplus -} -#endif\ -" - } # !$opt_dry_run - - pic_flag_for_symtable= - case "$compile_command " in - *" -static "*) ;; - *) - case $host in - # compiling the symbol table file with pic_flag works around - # a FreeBSD bug that causes programs to crash when -lm is - # linked before any other PIC object. But we must not use - # pic_flag when linking with -static. The problem exists in - # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. - *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) - pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; - *-*-hpux*) - pic_flag_for_symtable=" $pic_flag" ;; - *) - $my_pic_p && pic_flag_for_symtable=" $pic_flag" - ;; - esac - ;; - esac - symtab_cflags= - for arg in $LTCFLAGS; do - case $arg in - -pie | -fpie | -fPIE) ;; - *) func_append symtab_cflags " $arg" ;; - esac - done - - # Now compile the dynamic symbol file. - func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' - - # Clean up the generated files. - func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T" "${nlist}I"' - - # Transform the symbol file into the correct name. - symfileobj=$output_objdir/${my_outputname}S.$objext - case $host in - *cygwin* | *mingw* | *cegcc* ) - if test -f "$output_objdir/$my_outputname.def"; then - compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` - finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` - else - compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` - finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` - fi - ;; - *) - compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` - finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` - ;; - esac - ;; - *) - func_fatal_error "unknown suffix for '$my_dlsyms'" - ;; - esac - else - # We keep going just in case the user didn't refer to - # lt_preloaded_symbols. The linker will fail if global_symbol_pipe - # really was required. - - # Nullify the symbol file. - compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` - finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` - fi -} - -# func_cygming_gnu_implib_p ARG -# This predicate returns with zero status (TRUE) if -# ARG is a GNU/binutils-style import library. Returns -# with nonzero status (FALSE) otherwise. -func_cygming_gnu_implib_p () -{ - $debug_cmd - - func_to_tool_file "$1" func_convert_file_msys_to_w32 - func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'` - test -n "$func_cygming_gnu_implib_tmp" -} - -# func_cygming_ms_implib_p ARG -# This predicate returns with zero status (TRUE) if -# ARG is an MS-style import library. Returns -# with nonzero status (FALSE) otherwise. -func_cygming_ms_implib_p () -{ - $debug_cmd - - func_to_tool_file "$1" func_convert_file_msys_to_w32 - func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` - test -n "$func_cygming_ms_implib_tmp" -} - -# func_win32_libid arg -# return the library type of file 'arg' -# -# Need a lot of goo to handle *both* DLLs and import libs -# Has to be a shell function in order to 'eat' the argument -# that is supplied when $file_magic_command is called. -# Despite the name, also deal with 64 bit binaries. -func_win32_libid () -{ - $debug_cmd - - win32_libid_type=unknown - win32_fileres=`file -L $1 2>/dev/null` - case $win32_fileres in - *ar\ archive\ import\ library*) # definitely import - win32_libid_type="x86 archive import" - ;; - *ar\ archive*) # could be an import, or static - # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. - if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | - $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then - case $nm_interface in - "MS dumpbin") - if func_cygming_ms_implib_p "$1" || - func_cygming_gnu_implib_p "$1" - then - win32_nmres=import - else - win32_nmres= - fi - ;; - *) - func_to_tool_file "$1" func_convert_file_msys_to_w32 - win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | - $SED -n -e ' - 1,100{ - / I /{ - s|.*|import| - p - q - } - }'` - ;; - esac - case $win32_nmres in - import*) win32_libid_type="x86 archive import";; - *) win32_libid_type="x86 archive static";; - esac - fi - ;; - *DLL*) - win32_libid_type="x86 DLL" - ;; - *executable*) # but shell scripts are "executable" too... - case $win32_fileres in - *MS\ Windows\ PE\ Intel*) - win32_libid_type="x86 DLL" - ;; - esac - ;; - esac - $ECHO "$win32_libid_type" -} - -# func_cygming_dll_for_implib ARG -# -# Platform-specific function to extract the -# name of the DLL associated with the specified -# import library ARG. -# Invoked by eval'ing the libtool variable -# $sharedlib_from_linklib_cmd -# Result is available in the variable -# $sharedlib_from_linklib_result -func_cygming_dll_for_implib () -{ - $debug_cmd - - sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` -} - -# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs -# -# The is the core of a fallback implementation of a -# platform-specific function to extract the name of the -# DLL associated with the specified import library LIBNAME. -# -# SECTION_NAME is either .idata$6 or .idata$7, depending -# on the platform and compiler that created the implib. -# -# Echos the name of the DLL associated with the -# specified import library. -func_cygming_dll_for_implib_fallback_core () -{ - $debug_cmd - - match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` - $OBJDUMP -s --section "$1" "$2" 2>/dev/null | - $SED '/^Contents of section '"$match_literal"':/{ - # Place marker at beginning of archive member dllname section - s/.*/====MARK====/ - p - d - } - # These lines can sometimes be longer than 43 characters, but - # are always uninteresting - /:[ ]*file format pe[i]\{,1\}-/d - /^In archive [^:]*:/d - # Ensure marker is printed - /^====MARK====/p - # Remove all lines with less than 43 characters - /^.\{43\}/!d - # From remaining lines, remove first 43 characters - s/^.\{43\}//' | - $SED -n ' - # Join marker and all lines until next marker into a single line - /^====MARK====/ b para - H - $ b para - b - :para - x - s/\n//g - # Remove the marker - s/^====MARK====// - # Remove trailing dots and whitespace - s/[\. \t]*$// - # Print - /./p' | - # we now have a list, one entry per line, of the stringified - # contents of the appropriate section of all members of the - # archive that possess that section. Heuristic: eliminate - # all those that have a first or second character that is - # a '.' (that is, objdump's representation of an unprintable - # character.) This should work for all archives with less than - # 0x302f exports -- but will fail for DLLs whose name actually - # begins with a literal '.' or a single character followed by - # a '.'. - # - # Of those that remain, print the first one. - $SED -e '/^\./d;/^.\./d;q' -} - -# func_cygming_dll_for_implib_fallback ARG -# Platform-specific function to extract the -# name of the DLL associated with the specified -# import library ARG. -# -# This fallback implementation is for use when $DLLTOOL -# does not support the --identify-strict option. -# Invoked by eval'ing the libtool variable -# $sharedlib_from_linklib_cmd -# Result is available in the variable -# $sharedlib_from_linklib_result -func_cygming_dll_for_implib_fallback () -{ - $debug_cmd - - if func_cygming_gnu_implib_p "$1"; then - # binutils import library - sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` - elif func_cygming_ms_implib_p "$1"; then - # ms-generated import library - sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` - else - # unknown - sharedlib_from_linklib_result= - fi -} - - -# func_extract_an_archive dir oldlib -func_extract_an_archive () -{ - $debug_cmd - - f_ex_an_ar_dir=$1; shift - f_ex_an_ar_oldlib=$1 - if test yes = "$lock_old_archive_extraction"; then - lockfile=$f_ex_an_ar_oldlib.lock - until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do - func_echo "Waiting for $lockfile to be removed" - sleep 2 - done - fi - func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ - 'stat=$?; rm -f "$lockfile"; exit $stat' - if test yes = "$lock_old_archive_extraction"; then - $opt_dry_run || rm -f "$lockfile" - fi - if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then - : - else - func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" - fi -} - - -# func_extract_archives gentop oldlib ... -func_extract_archives () -{ - $debug_cmd - - my_gentop=$1; shift - my_oldlibs=${1+"$@"} - my_oldobjs= - my_xlib= - my_xabs= - my_xdir= - - for my_xlib in $my_oldlibs; do - # Extract the objects. - case $my_xlib in - [\\/]* | [A-Za-z]:[\\/]*) my_xabs=$my_xlib ;; - *) my_xabs=`pwd`"/$my_xlib" ;; - esac - func_basename "$my_xlib" - my_xlib=$func_basename_result - my_xlib_u=$my_xlib - while :; do - case " $extracted_archives " in - *" $my_xlib_u "*) - func_arith $extracted_serial + 1 - extracted_serial=$func_arith_result - my_xlib_u=lt$extracted_serial-$my_xlib ;; - *) break ;; - esac - done - extracted_archives="$extracted_archives $my_xlib_u" - my_xdir=$my_gentop/$my_xlib_u - - func_mkdir_p "$my_xdir" - - case $host in - *-darwin*) - func_verbose "Extracting $my_xabs" - # Do not bother doing anything if just a dry run - $opt_dry_run || { - darwin_orig_dir=`pwd` - cd $my_xdir || exit $? - darwin_archive=$my_xabs - darwin_curdir=`pwd` - func_basename "$darwin_archive" - darwin_base_archive=$func_basename_result - darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` - if test -n "$darwin_arches"; then - darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` - darwin_arch= - func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" - for darwin_arch in $darwin_arches; do - func_mkdir_p "unfat-$$/$darwin_base_archive-$darwin_arch" - $LIPO -thin $darwin_arch -output "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" "$darwin_archive" - cd "unfat-$$/$darwin_base_archive-$darwin_arch" - func_extract_an_archive "`pwd`" "$darwin_base_archive" - cd "$darwin_curdir" - $RM "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" - done # $darwin_arches - ## Okay now we've a bunch of thin objects, gotta fatten them up :) - darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$sed_basename" | sort -u` - darwin_file= - darwin_files= - for darwin_file in $darwin_filelist; do - darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` - $LIPO -create -output "$darwin_file" $darwin_files - done # $darwin_filelist - $RM -rf unfat-$$ - cd "$darwin_orig_dir" - else - cd $darwin_orig_dir - func_extract_an_archive "$my_xdir" "$my_xabs" - fi # $darwin_arches - } # !$opt_dry_run - ;; - *) - func_extract_an_archive "$my_xdir" "$my_xabs" - ;; - esac - my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` - done - - func_extract_archives_result=$my_oldobjs -} - - -# func_emit_wrapper [arg=no] -# -# Emit a libtool wrapper script on stdout. -# Don't directly open a file because we may want to -# incorporate the script contents within a cygwin/mingw -# wrapper executable. Must ONLY be called from within -# func_mode_link because it depends on a number of variables -# set therein. -# -# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR -# variable will take. If 'yes', then the emitted script -# will assume that the directory where it is stored is -# the $objdir directory. This is a cygwin/mingw-specific -# behavior. -func_emit_wrapper () -{ - func_emit_wrapper_arg1=${1-no} - - $ECHO "\ -#! $SHELL - -# $output - temporary wrapper script for $objdir/$outputname -# Generated by $PROGRAM (GNU $PACKAGE) $VERSION -# -# The $output program cannot be directly executed until all the libtool -# libraries that it depends on are installed. -# -# This wrapper script should never be moved out of the build directory. -# If it is, it will not operate correctly. - -# Sed substitution that helps us do robust quoting. It backslashifies -# metacharacters that are still active within double-quoted strings. -sed_quote_subst='$sed_quote_subst' - -# Be Bourne compatible -if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then - emulate sh - NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which - # is contrary to our usage. Disable this feature. - alias -g '\${1+\"\$@\"}'='\"\$@\"' - setopt NO_GLOB_SUBST -else - case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac -fi -BIN_SH=xpg4; export BIN_SH # for Tru64 -DUALCASE=1; export DUALCASE # for MKS sh - -# The HP-UX ksh and POSIX shell print the target directory to stdout -# if CDPATH is set. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -relink_command=\"$relink_command\" - -# This environment variable determines our operation mode. -if test \"\$libtool_install_magic\" = \"$magic\"; then - # install mode needs the following variables: - generated_by_libtool_version='$macro_version' - notinst_deplibs='$notinst_deplibs' -else - # When we are sourced in execute mode, \$file and \$ECHO are already set. - if test \"\$libtool_execute_magic\" != \"$magic\"; then - file=\"\$0\"" - - qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` - $ECHO "\ - -# A function that is used when there is no print builtin or printf. -func_fallback_echo () -{ - eval 'cat <<_LTECHO_EOF -\$1 -_LTECHO_EOF' -} - ECHO=\"$qECHO\" - fi - -# Very basic option parsing. These options are (a) specific to -# the libtool wrapper, (b) are identical between the wrapper -# /script/ and the wrapper /executable/ that is used only on -# windows platforms, and (c) all begin with the string "--lt-" -# (application programs are unlikely to have options that match -# this pattern). -# -# There are only two supported options: --lt-debug and -# --lt-dump-script. There is, deliberately, no --lt-help. -# -# The first argument to this parsing function should be the -# script's $0 value, followed by "$@". -lt_option_debug= -func_parse_lt_options () -{ - lt_script_arg0=\$0 - shift - for lt_opt - do - case \"\$lt_opt\" in - --lt-debug) lt_option_debug=1 ;; - --lt-dump-script) - lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` - test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. - lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` - cat \"\$lt_dump_D/\$lt_dump_F\" - exit 0 - ;; - --lt-*) - \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 - exit 1 - ;; - esac - done - - # Print the debug banner immediately: - if test -n \"\$lt_option_debug\"; then - echo \"$outputname:$output:\$LINENO: libtool wrapper (GNU $PACKAGE) $VERSION\" 1>&2 - fi -} - -# Used when --lt-debug. Prints its arguments to stdout -# (redirection is the responsibility of the caller) -func_lt_dump_args () -{ - lt_dump_args_N=1; - for lt_arg - do - \$ECHO \"$outputname:$output:\$LINENO: newargv[\$lt_dump_args_N]: \$lt_arg\" - lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` - done -} - -# Core function for launching the target application -func_exec_program_core () -{ -" - case $host in - # Backslashes separate directories on plain windows - *-*-mingw | *-*-os2* | *-cegcc*) - $ECHO "\ - if test -n \"\$lt_option_debug\"; then - \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir\\\\\$program\" 1>&2 - func_lt_dump_args \${1+\"\$@\"} 1>&2 - fi - exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} -" - ;; - - *) - $ECHO "\ - if test -n \"\$lt_option_debug\"; then - \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir/\$program\" 1>&2 - func_lt_dump_args \${1+\"\$@\"} 1>&2 - fi - exec \"\$progdir/\$program\" \${1+\"\$@\"} -" - ;; - esac - $ECHO "\ - \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 - exit 1 -} - -# A function to encapsulate launching the target application -# Strips options in the --lt-* namespace from \$@ and -# launches target application with the remaining arguments. -func_exec_program () -{ - case \" \$* \" in - *\\ --lt-*) - for lt_wr_arg - do - case \$lt_wr_arg in - --lt-*) ;; - *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; - esac - shift - done ;; - esac - func_exec_program_core \${1+\"\$@\"} -} - - # Parse options - func_parse_lt_options \"\$0\" \${1+\"\$@\"} - - # Find the directory that this script lives in. - thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` - test \"x\$thisdir\" = \"x\$file\" && thisdir=. - - # Follow symbolic links until we get to the real thisdir. - file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` - while test -n \"\$file\"; do - destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` - - # If there was a directory component, then change thisdir. - if test \"x\$destdir\" != \"x\$file\"; then - case \"\$destdir\" in - [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; - *) thisdir=\"\$thisdir/\$destdir\" ;; - esac - fi - - file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` - file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` - done - - # Usually 'no', except on cygwin/mingw when embedded into - # the cwrapper. - WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 - if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then - # special case for '.' - if test \"\$thisdir\" = \".\"; then - thisdir=\`pwd\` - fi - # remove .libs from thisdir - case \"\$thisdir\" in - *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; - $objdir ) thisdir=. ;; - esac - fi - - # Try to get the absolute directory name. - absdir=\`cd \"\$thisdir\" && pwd\` - test -n \"\$absdir\" && thisdir=\"\$absdir\" -" - - if test yes = "$fast_install"; then - $ECHO "\ - program=lt-'$outputname'$exeext - progdir=\"\$thisdir/$objdir\" - - if test ! -f \"\$progdir/\$program\" || - { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | $SED 1q\`; \\ - test \"X\$file\" != \"X\$progdir/\$program\"; }; then - - file=\"\$\$-\$program\" - - if test ! -d \"\$progdir\"; then - $MKDIR \"\$progdir\" - else - $RM \"\$progdir/\$file\" - fi" - - $ECHO "\ - - # relink executable if necessary - if test -n \"\$relink_command\"; then - if relink_command_output=\`eval \$relink_command 2>&1\`; then : - else - \$ECHO \"\$relink_command_output\" >&2 - $RM \"\$progdir/\$file\" - exit 1 - fi - fi - - $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || - { $RM \"\$progdir/\$program\"; - $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } - $RM \"\$progdir/\$file\" - fi" - else - $ECHO "\ - program='$outputname' - progdir=\"\$thisdir/$objdir\" -" - fi - - $ECHO "\ - - if test -f \"\$progdir/\$program\"; then" - - # fixup the dll searchpath if we need to. - # - # Fix the DLL searchpath if we need to. Do this before prepending - # to shlibpath, because on Windows, both are PATH and uninstalled - # libraries must come first. - if test -n "$dllsearchpath"; then - $ECHO "\ - # Add the dll search path components to the executable PATH - PATH=$dllsearchpath:\$PATH -" - fi - - # Export our shlibpath_var if we have one. - if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then - $ECHO "\ - # Add our own library path to $shlibpath_var - $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" - - # Some systems cannot cope with colon-terminated $shlibpath_var - # The second colon is a workaround for a bug in BeOS R4 sed - $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` - - export $shlibpath_var -" - fi - - $ECHO "\ - if test \"\$libtool_execute_magic\" != \"$magic\"; then - # Run the actual program with our arguments. - func_exec_program \${1+\"\$@\"} - fi - else - # The program doesn't exist. - \$ECHO \"\$0: error: '\$progdir/\$program' does not exist\" 1>&2 - \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 - \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 - exit 1 - fi -fi\ -" -} - - -# func_emit_cwrapperexe_src -# emit the source code for a wrapper executable on stdout -# Must ONLY be called from within func_mode_link because -# it depends on a number of variable set therein. -func_emit_cwrapperexe_src () -{ - cat < -#include -#ifdef _MSC_VER -# include -# include -# include -#else -# include -# include -# ifdef __CYGWIN__ -# include -# endif -#endif -#include -#include -#include -#include -#include -#include -#include -#include - -#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) - -/* declarations of non-ANSI functions */ -#if defined __MINGW32__ -# ifdef __STRICT_ANSI__ -int _putenv (const char *); -# endif -#elif defined __CYGWIN__ -# ifdef __STRICT_ANSI__ -char *realpath (const char *, char *); -int putenv (char *); -int setenv (const char *, const char *, int); -# endif -/* #elif defined other_platform || defined ... */ -#endif - -/* portability defines, excluding path handling macros */ -#if defined _MSC_VER -# define setmode _setmode -# define stat _stat -# define chmod _chmod -# define getcwd _getcwd -# define putenv _putenv -# define S_IXUSR _S_IEXEC -#elif defined __MINGW32__ -# define setmode _setmode -# define stat _stat -# define chmod _chmod -# define getcwd _getcwd -# define putenv _putenv -#elif defined __CYGWIN__ -# define HAVE_SETENV -# define FOPEN_WB "wb" -/* #elif defined other platforms ... */ -#endif - -#if defined PATH_MAX -# define LT_PATHMAX PATH_MAX -#elif defined MAXPATHLEN -# define LT_PATHMAX MAXPATHLEN -#else -# define LT_PATHMAX 1024 -#endif - -#ifndef S_IXOTH -# define S_IXOTH 0 -#endif -#ifndef S_IXGRP -# define S_IXGRP 0 -#endif - -/* path handling portability macros */ -#ifndef DIR_SEPARATOR -# define DIR_SEPARATOR '/' -# define PATH_SEPARATOR ':' -#endif - -#if defined _WIN32 || defined __MSDOS__ || defined __DJGPP__ || \ - defined __OS2__ -# define HAVE_DOS_BASED_FILE_SYSTEM -# define FOPEN_WB "wb" -# ifndef DIR_SEPARATOR_2 -# define DIR_SEPARATOR_2 '\\' -# endif -# ifndef PATH_SEPARATOR_2 -# define PATH_SEPARATOR_2 ';' -# endif -#endif - -#ifndef DIR_SEPARATOR_2 -# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) -#else /* DIR_SEPARATOR_2 */ -# define IS_DIR_SEPARATOR(ch) \ - (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) -#endif /* DIR_SEPARATOR_2 */ - -#ifndef PATH_SEPARATOR_2 -# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) -#else /* PATH_SEPARATOR_2 */ -# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) -#endif /* PATH_SEPARATOR_2 */ - -#ifndef FOPEN_WB -# define FOPEN_WB "w" -#endif -#ifndef _O_BINARY -# define _O_BINARY 0 -#endif - -#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) -#define XFREE(stale) do { \ - if (stale) { free (stale); stale = 0; } \ -} while (0) - -#if defined LT_DEBUGWRAPPER -static int lt_debug = 1; -#else -static int lt_debug = 0; -#endif - -const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ - -void *xmalloc (size_t num); -char *xstrdup (const char *string); -const char *base_name (const char *name); -char *find_executable (const char *wrapper); -char *chase_symlinks (const char *pathspec); -int make_executable (const char *path); -int check_executable (const char *path); -char *strendzap (char *str, const char *pat); -void lt_debugprintf (const char *file, int line, const char *fmt, ...); -void lt_fatal (const char *file, int line, const char *message, ...); -static const char *nonnull (const char *s); -static const char *nonempty (const char *s); -void lt_setenv (const char *name, const char *value); -char *lt_extend_str (const char *orig_value, const char *add, int to_end); -void lt_update_exe_path (const char *name, const char *value); -void lt_update_lib_path (const char *name, const char *value); -char **prepare_spawn (char **argv); -void lt_dump_script (FILE *f); -EOF - - cat <= 0) - && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) - return 1; - else - return 0; -} - -int -make_executable (const char *path) -{ - int rval = 0; - struct stat st; - - lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", - nonempty (path)); - if ((!path) || (!*path)) - return 0; - - if (stat (path, &st) >= 0) - { - rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); - } - return rval; -} - -/* Searches for the full path of the wrapper. Returns - newly allocated full path name if found, NULL otherwise - Does not chase symlinks, even on platforms that support them. -*/ -char * -find_executable (const char *wrapper) -{ - int has_slash = 0; - const char *p; - const char *p_next; - /* static buffer for getcwd */ - char tmp[LT_PATHMAX + 1]; - size_t tmp_len; - char *concat_name; - - lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", - nonempty (wrapper)); - - if ((wrapper == NULL) || (*wrapper == '\0')) - return NULL; - - /* Absolute path? */ -#if defined HAVE_DOS_BASED_FILE_SYSTEM - if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') - { - concat_name = xstrdup (wrapper); - if (check_executable (concat_name)) - return concat_name; - XFREE (concat_name); - } - else - { -#endif - if (IS_DIR_SEPARATOR (wrapper[0])) - { - concat_name = xstrdup (wrapper); - if (check_executable (concat_name)) - return concat_name; - XFREE (concat_name); - } -#if defined HAVE_DOS_BASED_FILE_SYSTEM - } -#endif - - for (p = wrapper; *p; p++) - if (*p == '/') - { - has_slash = 1; - break; - } - if (!has_slash) - { - /* no slashes; search PATH */ - const char *path = getenv ("PATH"); - if (path != NULL) - { - for (p = path; *p; p = p_next) - { - const char *q; - size_t p_len; - for (q = p; *q; q++) - if (IS_PATH_SEPARATOR (*q)) - break; - p_len = (size_t) (q - p); - p_next = (*q == '\0' ? q : q + 1); - if (p_len == 0) - { - /* empty path: current directory */ - if (getcwd (tmp, LT_PATHMAX) == NULL) - lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", - nonnull (strerror (errno))); - tmp_len = strlen (tmp); - concat_name = - XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); - memcpy (concat_name, tmp, tmp_len); - concat_name[tmp_len] = '/'; - strcpy (concat_name + tmp_len + 1, wrapper); - } - else - { - concat_name = - XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); - memcpy (concat_name, p, p_len); - concat_name[p_len] = '/'; - strcpy (concat_name + p_len + 1, wrapper); - } - if (check_executable (concat_name)) - return concat_name; - XFREE (concat_name); - } - } - /* not found in PATH; assume curdir */ - } - /* Relative path | not found in path: prepend cwd */ - if (getcwd (tmp, LT_PATHMAX) == NULL) - lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", - nonnull (strerror (errno))); - tmp_len = strlen (tmp); - concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); - memcpy (concat_name, tmp, tmp_len); - concat_name[tmp_len] = '/'; - strcpy (concat_name + tmp_len + 1, wrapper); - - if (check_executable (concat_name)) - return concat_name; - XFREE (concat_name); - return NULL; -} - -char * -chase_symlinks (const char *pathspec) -{ -#ifndef S_ISLNK - return xstrdup (pathspec); -#else - char buf[LT_PATHMAX]; - struct stat s; - char *tmp_pathspec = xstrdup (pathspec); - char *p; - int has_symlinks = 0; - while (strlen (tmp_pathspec) && !has_symlinks) - { - lt_debugprintf (__FILE__, __LINE__, - "checking path component for symlinks: %s\n", - tmp_pathspec); - if (lstat (tmp_pathspec, &s) == 0) - { - if (S_ISLNK (s.st_mode) != 0) - { - has_symlinks = 1; - break; - } - - /* search backwards for last DIR_SEPARATOR */ - p = tmp_pathspec + strlen (tmp_pathspec) - 1; - while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) - p--; - if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) - { - /* no more DIR_SEPARATORS left */ - break; - } - *p = '\0'; - } - else - { - lt_fatal (__FILE__, __LINE__, - "error accessing file \"%s\": %s", - tmp_pathspec, nonnull (strerror (errno))); - } - } - XFREE (tmp_pathspec); - - if (!has_symlinks) - { - return xstrdup (pathspec); - } - - tmp_pathspec = realpath (pathspec, buf); - if (tmp_pathspec == 0) - { - lt_fatal (__FILE__, __LINE__, - "could not follow symlinks for %s", pathspec); - } - return xstrdup (tmp_pathspec); -#endif -} - -char * -strendzap (char *str, const char *pat) -{ - size_t len, patlen; - - assert (str != NULL); - assert (pat != NULL); - - len = strlen (str); - patlen = strlen (pat); - - if (patlen <= len) - { - str += len - patlen; - if (STREQ (str, pat)) - *str = '\0'; - } - return str; -} - -void -lt_debugprintf (const char *file, int line, const char *fmt, ...) -{ - va_list args; - if (lt_debug) - { - (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); - va_start (args, fmt); - (void) vfprintf (stderr, fmt, args); - va_end (args); - } -} - -static void -lt_error_core (int exit_status, const char *file, - int line, const char *mode, - const char *message, va_list ap) -{ - fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); - vfprintf (stderr, message, ap); - fprintf (stderr, ".\n"); - - if (exit_status >= 0) - exit (exit_status); -} - -void -lt_fatal (const char *file, int line, const char *message, ...) -{ - va_list ap; - va_start (ap, message); - lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); - va_end (ap); -} - -static const char * -nonnull (const char *s) -{ - return s ? s : "(null)"; -} - -static const char * -nonempty (const char *s) -{ - return (s && !*s) ? "(empty)" : nonnull (s); -} - -void -lt_setenv (const char *name, const char *value) -{ - lt_debugprintf (__FILE__, __LINE__, - "(lt_setenv) setting '%s' to '%s'\n", - nonnull (name), nonnull (value)); - { -#ifdef HAVE_SETENV - /* always make a copy, for consistency with !HAVE_SETENV */ - char *str = xstrdup (value); - setenv (name, str, 1); -#else - size_t len = strlen (name) + 1 + strlen (value) + 1; - char *str = XMALLOC (char, len); - sprintf (str, "%s=%s", name, value); - if (putenv (str) != EXIT_SUCCESS) - { - XFREE (str); - } -#endif - } -} - -char * -lt_extend_str (const char *orig_value, const char *add, int to_end) -{ - char *new_value; - if (orig_value && *orig_value) - { - size_t orig_value_len = strlen (orig_value); - size_t add_len = strlen (add); - new_value = XMALLOC (char, add_len + orig_value_len + 1); - if (to_end) - { - strcpy (new_value, orig_value); - strcpy (new_value + orig_value_len, add); - } - else - { - strcpy (new_value, add); - strcpy (new_value + add_len, orig_value); - } - } - else - { - new_value = xstrdup (add); - } - return new_value; -} - -void -lt_update_exe_path (const char *name, const char *value) -{ - lt_debugprintf (__FILE__, __LINE__, - "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", - nonnull (name), nonnull (value)); - - if (name && *name && value && *value) - { - char *new_value = lt_extend_str (getenv (name), value, 0); - /* some systems can't cope with a ':'-terminated path #' */ - size_t len = strlen (new_value); - while ((len > 0) && IS_PATH_SEPARATOR (new_value[len-1])) - { - new_value[--len] = '\0'; - } - lt_setenv (name, new_value); - XFREE (new_value); - } -} - -void -lt_update_lib_path (const char *name, const char *value) -{ - lt_debugprintf (__FILE__, __LINE__, - "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", - nonnull (name), nonnull (value)); - - if (name && *name && value && *value) - { - char *new_value = lt_extend_str (getenv (name), value, 0); - lt_setenv (name, new_value); - XFREE (new_value); - } -} - -EOF - case $host_os in - mingw*) - cat <<"EOF" - -/* Prepares an argument vector before calling spawn(). - Note that spawn() does not by itself call the command interpreter - (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : - ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); - GetVersionEx(&v); - v.dwPlatformId == VER_PLATFORM_WIN32_NT; - }) ? "cmd.exe" : "command.com"). - Instead it simply concatenates the arguments, separated by ' ', and calls - CreateProcess(). We must quote the arguments since Win32 CreateProcess() - interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a - special way: - - Space and tab are interpreted as delimiters. They are not treated as - delimiters if they are surrounded by double quotes: "...". - - Unescaped double quotes are removed from the input. Their only effect is - that within double quotes, space and tab are treated like normal - characters. - - Backslashes not followed by double quotes are not special. - - But 2*n+1 backslashes followed by a double quote become - n backslashes followed by a double quote (n >= 0): - \" -> " - \\\" -> \" - \\\\\" -> \\" - */ -#define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" -#define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" -char ** -prepare_spawn (char **argv) -{ - size_t argc; - char **new_argv; - size_t i; - - /* Count number of arguments. */ - for (argc = 0; argv[argc] != NULL; argc++) - ; - - /* Allocate new argument vector. */ - new_argv = XMALLOC (char *, argc + 1); - - /* Put quoted arguments into the new argument vector. */ - for (i = 0; i < argc; i++) - { - const char *string = argv[i]; - - if (string[0] == '\0') - new_argv[i] = xstrdup ("\"\""); - else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) - { - int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); - size_t length; - unsigned int backslashes; - const char *s; - char *quoted_string; - char *p; - - length = 0; - backslashes = 0; - if (quote_around) - length++; - for (s = string; *s != '\0'; s++) - { - char c = *s; - if (c == '"') - length += backslashes + 1; - length++; - if (c == '\\') - backslashes++; - else - backslashes = 0; - } - if (quote_around) - length += backslashes + 1; - - quoted_string = XMALLOC (char, length + 1); - - p = quoted_string; - backslashes = 0; - if (quote_around) - *p++ = '"'; - for (s = string; *s != '\0'; s++) - { - char c = *s; - if (c == '"') - { - unsigned int j; - for (j = backslashes + 1; j > 0; j--) - *p++ = '\\'; - } - *p++ = c; - if (c == '\\') - backslashes++; - else - backslashes = 0; - } - if (quote_around) - { - unsigned int j; - for (j = backslashes; j > 0; j--) - *p++ = '\\'; - *p++ = '"'; - } - *p = '\0'; - - new_argv[i] = quoted_string; - } - else - new_argv[i] = (char *) string; - } - new_argv[argc] = NULL; - - return new_argv; -} -EOF - ;; - esac - - cat <<"EOF" -void lt_dump_script (FILE* f) -{ -EOF - func_emit_wrapper yes | - $SED -n -e ' -s/^\(.\{79\}\)\(..*\)/\1\ -\2/ -h -s/\([\\"]\)/\\\1/g -s/$/\\n/ -s/\([^\n]*\).*/ fputs ("\1", f);/p -g -D' - cat <<"EOF" -} -EOF -} -# end: func_emit_cwrapperexe_src - -# func_win32_import_lib_p ARG -# True if ARG is an import lib, as indicated by $file_magic_cmd -func_win32_import_lib_p () -{ - $debug_cmd - - case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in - *import*) : ;; - *) false ;; - esac -} - -# func_suncc_cstd_abi -# !!ONLY CALL THIS FOR SUN CC AFTER $compile_command IS FULLY EXPANDED!! -# Several compiler flags select an ABI that is incompatible with the -# Cstd library. Avoid specifying it if any are in CXXFLAGS. -func_suncc_cstd_abi () -{ - $debug_cmd - - case " $compile_command " in - *" -compat=g "*|*\ -std=c++[0-9][0-9]\ *|*" -library=stdcxx4 "*|*" -library=stlport4 "*) - suncc_use_cstd_abi=no - ;; - *) - suncc_use_cstd_abi=yes - ;; - esac -} - -# func_mode_link arg... -func_mode_link () -{ - $debug_cmd - - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) - # It is impossible to link a dll without this setting, and - # we shouldn't force the makefile maintainer to figure out - # what system we are compiling for in order to pass an extra - # flag for every libtool invocation. - # allow_undefined=no - - # FIXME: Unfortunately, there are problems with the above when trying - # to make a dll that has undefined symbols, in which case not - # even a static library is built. For now, we need to specify - # -no-undefined on the libtool link line when we can be certain - # that all symbols are satisfied, otherwise we get a static library. - allow_undefined=yes - ;; - *) - allow_undefined=yes - ;; - esac - libtool_args=$nonopt - base_compile="$nonopt $@" - compile_command=$nonopt - finalize_command=$nonopt - - compile_rpath= - finalize_rpath= - compile_shlibpath= - finalize_shlibpath= - convenience= - old_convenience= - deplibs= - old_deplibs= - compiler_flags= - linker_flags= - dllsearchpath= - lib_search_path=`pwd` - inst_prefix_dir= - new_inherited_linker_flags= - - avoid_version=no - bindir= - dlfiles= - dlprefiles= - dlself=no - export_dynamic=no - export_symbols= - export_symbols_regex= - generated= - libobjs= - ltlibs= - module=no - no_install=no - objs= - os2dllname= - non_pic_objects= - precious_files_regex= - prefer_static_libs=no - preload=false - prev= - prevarg= - release= - rpath= - xrpath= - perm_rpath= - temp_rpath= - thread_safe=no - vinfo= - vinfo_number=no - weak_libs= - single_module=$wl-single_module - func_infer_tag $base_compile - - # We need to know -static, to get the right output filenames. - for arg - do - case $arg in - -shared) - test yes != "$build_libtool_libs" \ - && func_fatal_configuration "cannot build a shared library" - build_old_libs=no - break - ;; - -all-static | -static | -static-libtool-libs) - case $arg in - -all-static) - if test yes = "$build_libtool_libs" && test -z "$link_static_flag"; then - func_warning "complete static linking is impossible in this configuration" - fi - if test -n "$link_static_flag"; then - dlopen_self=$dlopen_self_static - fi - prefer_static_libs=yes - ;; - -static) - if test -z "$pic_flag" && test -n "$link_static_flag"; then - dlopen_self=$dlopen_self_static - fi - prefer_static_libs=built - ;; - -static-libtool-libs) - if test -z "$pic_flag" && test -n "$link_static_flag"; then - dlopen_self=$dlopen_self_static - fi - prefer_static_libs=yes - ;; - esac - build_libtool_libs=no - build_old_libs=yes - break - ;; - esac - done - - # See if our shared archives depend on static archives. - test -n "$old_archive_from_new_cmds" && build_old_libs=yes - - # Go through the arguments, transforming them on the way. - while test "$#" -gt 0; do - arg=$1 - shift - func_quote_for_eval "$arg" - qarg=$func_quote_for_eval_unquoted_result - func_append libtool_args " $func_quote_for_eval_result" - - # If the previous option needs an argument, assign it. - if test -n "$prev"; then - case $prev in - output) - func_append compile_command " @OUTPUT@" - func_append finalize_command " @OUTPUT@" - ;; - esac - - case $prev in - bindir) - bindir=$arg - prev= - continue - ;; - dlfiles|dlprefiles) - $preload || { - # Add the symbol object into the linking commands. - func_append compile_command " @SYMFILE@" - func_append finalize_command " @SYMFILE@" - preload=: - } - case $arg in - *.la | *.lo) ;; # We handle these cases below. - force) - if test no = "$dlself"; then - dlself=needless - export_dynamic=yes - fi - prev= - continue - ;; - self) - if test dlprefiles = "$prev"; then - dlself=yes - elif test dlfiles = "$prev" && test yes != "$dlopen_self"; then - dlself=yes - else - dlself=needless - export_dynamic=yes - fi - prev= - continue - ;; - *) - if test dlfiles = "$prev"; then - func_append dlfiles " $arg" - else - func_append dlprefiles " $arg" - fi - prev= - continue - ;; - esac - ;; - expsyms) - export_symbols=$arg - test -f "$arg" \ - || func_fatal_error "symbol file '$arg' does not exist" - prev= - continue - ;; - expsyms_regex) - export_symbols_regex=$arg - prev= - continue - ;; - framework) - case $host in - *-*-darwin*) - case "$deplibs " in - *" $qarg.ltframework "*) ;; - *) func_append deplibs " $qarg.ltframework" # this is fixed later - ;; - esac - ;; - esac - prev= - continue - ;; - inst_prefix) - inst_prefix_dir=$arg - prev= - continue - ;; - mllvm) - # Clang does not use LLVM to link, so we can simply discard any - # '-mllvm $arg' options when doing the link step. - prev= - continue - ;; - objectlist) - if test -f "$arg"; then - save_arg=$arg - moreargs= - for fil in `cat "$save_arg"` - do -# func_append moreargs " $fil" - arg=$fil - # A libtool-controlled object. - - # Check to see that this really is a libtool object. - if func_lalib_unsafe_p "$arg"; then - pic_object= - non_pic_object= - - # Read the .lo file - func_source "$arg" - - if test -z "$pic_object" || - test -z "$non_pic_object" || - test none = "$pic_object" && - test none = "$non_pic_object"; then - func_fatal_error "cannot find name of object for '$arg'" - fi - - # Extract subdirectory from the argument. - func_dirname "$arg" "/" "" - xdir=$func_dirname_result - - if test none != "$pic_object"; then - # Prepend the subdirectory the object is found in. - pic_object=$xdir$pic_object - - if test dlfiles = "$prev"; then - if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then - func_append dlfiles " $pic_object" - prev= - continue - else - # If libtool objects are unsupported, then we need to preload. - prev=dlprefiles - fi - fi - - # CHECK ME: I think I busted this. -Ossama - if test dlprefiles = "$prev"; then - # Preload the old-style object. - func_append dlprefiles " $pic_object" - prev= - fi - - # A PIC object. - func_append libobjs " $pic_object" - arg=$pic_object - fi - - # Non-PIC object. - if test none != "$non_pic_object"; then - # Prepend the subdirectory the object is found in. - non_pic_object=$xdir$non_pic_object - - # A standard non-PIC object - func_append non_pic_objects " $non_pic_object" - if test -z "$pic_object" || test none = "$pic_object"; then - arg=$non_pic_object - fi - else - # If the PIC object exists, use it instead. - # $xdir was prepended to $pic_object above. - non_pic_object=$pic_object - func_append non_pic_objects " $non_pic_object" - fi - else - # Only an error if not doing a dry-run. - if $opt_dry_run; then - # Extract subdirectory from the argument. - func_dirname "$arg" "/" "" - xdir=$func_dirname_result - - func_lo2o "$arg" - pic_object=$xdir$objdir/$func_lo2o_result - non_pic_object=$xdir$func_lo2o_result - func_append libobjs " $pic_object" - func_append non_pic_objects " $non_pic_object" - else - func_fatal_error "'$arg' is not a valid libtool object" - fi - fi - done - else - func_fatal_error "link input file '$arg' does not exist" - fi - arg=$save_arg - prev= - continue - ;; - os2dllname) - os2dllname=$arg - prev= - continue - ;; - precious_regex) - precious_files_regex=$arg - prev= - continue - ;; - release) - release=-$arg - prev= - continue - ;; - rpath | xrpath) - # We need an absolute path. - case $arg in - [\\/]* | [A-Za-z]:[\\/]*) ;; - *) - func_fatal_error "only absolute run-paths are allowed" - ;; - esac - if test rpath = "$prev"; then - case "$rpath " in - *" $arg "*) ;; - *) func_append rpath " $arg" ;; - esac - else - case "$xrpath " in - *" $arg "*) ;; - *) func_append xrpath " $arg" ;; - esac - fi - prev= - continue - ;; - shrext) - shrext_cmds=$arg - prev= - continue - ;; - weak) - func_append weak_libs " $arg" - prev= - continue - ;; - xcclinker) - func_append linker_flags " $qarg" - func_append compiler_flags " $qarg" - prev= - func_append compile_command " $qarg" - func_append finalize_command " $qarg" - continue - ;; - xcompiler) - func_append compiler_flags " $qarg" - prev= - func_append compile_command " $qarg" - func_append finalize_command " $qarg" - continue - ;; - xlinker) - func_append linker_flags " $qarg" - func_append compiler_flags " $wl$qarg" - prev= - func_append compile_command " $wl$qarg" - func_append finalize_command " $wl$qarg" - continue - ;; - *) - eval "$prev=\"\$arg\"" - prev= - continue - ;; - esac - fi # test -n "$prev" - - prevarg=$arg - - case $arg in - -all-static) - if test -n "$link_static_flag"; then - # See comment for -static flag below, for more details. - func_append compile_command " $link_static_flag" - func_append finalize_command " $link_static_flag" - fi - continue - ;; - - -allow-undefined) - # FIXME: remove this flag sometime in the future. - func_fatal_error "'-allow-undefined' must not be used because it is the default" - ;; - - -avoid-version) - avoid_version=yes - continue - ;; - - -bindir) - prev=bindir - continue - ;; - - -dlopen) - prev=dlfiles - continue - ;; - - -dlpreopen) - prev=dlprefiles - continue - ;; - - -export-dynamic) - export_dynamic=yes - continue - ;; - - -export-symbols | -export-symbols-regex) - if test -n "$export_symbols" || test -n "$export_symbols_regex"; then - func_fatal_error "more than one -exported-symbols argument is not allowed" - fi - if test X-export-symbols = "X$arg"; then - prev=expsyms - else - prev=expsyms_regex - fi - continue - ;; - - -framework) - prev=framework - continue - ;; - - -inst-prefix-dir) - prev=inst_prefix - continue - ;; - - # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* - # so, if we see these flags be careful not to treat them like -L - -L[A-Z][A-Z]*:*) - case $with_gcc/$host in - no/*-*-irix* | /*-*-irix*) - func_append compile_command " $arg" - func_append finalize_command " $arg" - ;; - esac - continue - ;; - - -L*) - func_stripname "-L" '' "$arg" - if test -z "$func_stripname_result"; then - if test "$#" -gt 0; then - func_fatal_error "require no space between '-L' and '$1'" - else - func_fatal_error "need path for '-L' option" - fi - fi - func_resolve_sysroot "$func_stripname_result" - dir=$func_resolve_sysroot_result - # We need an absolute path. - case $dir in - [\\/]* | [A-Za-z]:[\\/]*) ;; - *) - absdir=`cd "$dir" && pwd` - test -z "$absdir" && \ - func_fatal_error "cannot determine absolute directory name of '$dir'" - dir=$absdir - ;; - esac - case "$deplibs " in - *" -L$dir "* | *" $arg "*) - # Will only happen for absolute or sysroot arguments - ;; - *) - # Preserve sysroot, but never include relative directories - case $dir in - [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; - *) func_append deplibs " -L$dir" ;; - esac - func_append lib_search_path " $dir" - ;; - esac - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) - testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` - case :$dllsearchpath: in - *":$dir:"*) ;; - ::) dllsearchpath=$dir;; - *) func_append dllsearchpath ":$dir";; - esac - case :$dllsearchpath: in - *":$testbindir:"*) ;; - ::) dllsearchpath=$testbindir;; - *) func_append dllsearchpath ":$testbindir";; - esac - ;; - esac - continue - ;; - - -l*) - if test X-lc = "X$arg" || test X-lm = "X$arg"; then - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) - # These systems don't actually have a C or math library (as such) - continue - ;; - *-*-os2*) - # These systems don't actually have a C library (as such) - test X-lc = "X$arg" && continue - ;; - *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*) - # Do not include libc due to us having libc/libc_r. - test X-lc = "X$arg" && continue - ;; - *-*-rhapsody* | *-*-darwin1.[012]) - # Rhapsody C and math libraries are in the System framework - func_append deplibs " System.ltframework" - continue - ;; - *-*-sco3.2v5* | *-*-sco5v6*) - # Causes problems with __ctype - test X-lc = "X$arg" && continue - ;; - *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) - # Compiler inserts libc in the correct place for threads to work - test X-lc = "X$arg" && continue - ;; - esac - elif test X-lc_r = "X$arg"; then - case $host in - *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*) - # Do not include libc_r directly, use -pthread flag. - continue - ;; - esac - fi - func_append deplibs " $arg" - continue - ;; - - -mllvm) - prev=mllvm - continue - ;; - - -module) - module=yes - continue - ;; - - # Tru64 UNIX uses -model [arg] to determine the layout of C++ - # classes, name mangling, and exception handling. - # Darwin uses the -arch flag to determine output architecture. - -model|-arch|-isysroot|--sysroot) - func_append compiler_flags " $arg" - func_append compile_command " $arg" - func_append finalize_command " $arg" - prev=xcompiler - continue - ;; - - -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ - |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) - func_append compiler_flags " $arg" - func_append compile_command " $arg" - func_append finalize_command " $arg" - case "$new_inherited_linker_flags " in - *" $arg "*) ;; - * ) func_append new_inherited_linker_flags " $arg" ;; - esac - continue - ;; - - -multi_module) - single_module=$wl-multi_module - continue - ;; - - -no-fast-install) - fast_install=no - continue - ;; - - -no-install) - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) - # The PATH hackery in wrapper scripts is required on Windows - # and Darwin in order for the loader to find any dlls it needs. - func_warning "'-no-install' is ignored for $host" - func_warning "assuming '-no-fast-install' instead" - fast_install=no - ;; - *) no_install=yes ;; - esac - continue - ;; - - -no-undefined) - allow_undefined=no - continue - ;; - - -objectlist) - prev=objectlist - continue - ;; - - -os2dllname) - prev=os2dllname - continue - ;; - - -o) prev=output ;; - - -precious-files-regex) - prev=precious_regex - continue - ;; - - -release) - prev=release - continue - ;; - - -rpath) - prev=rpath - continue - ;; - - -R) - prev=xrpath - continue - ;; - - -R*) - func_stripname '-R' '' "$arg" - dir=$func_stripname_result - # We need an absolute path. - case $dir in - [\\/]* | [A-Za-z]:[\\/]*) ;; - =*) - func_stripname '=' '' "$dir" - dir=$lt_sysroot$func_stripname_result - ;; - *) - func_fatal_error "only absolute run-paths are allowed" - ;; - esac - case "$xrpath " in - *" $dir "*) ;; - *) func_append xrpath " $dir" ;; - esac - continue - ;; - - -shared) - # The effects of -shared are defined in a previous loop. - continue - ;; - - -shrext) - prev=shrext - continue - ;; - - -static | -static-libtool-libs) - # The effects of -static are defined in a previous loop. - # We used to do the same as -all-static on platforms that - # didn't have a PIC flag, but the assumption that the effects - # would be equivalent was wrong. It would break on at least - # Digital Unix and AIX. - continue - ;; - - -thread-safe) - thread_safe=yes - continue - ;; - - -version-info) - prev=vinfo - continue - ;; - - -version-number) - prev=vinfo - vinfo_number=yes - continue - ;; - - -weak) - prev=weak - continue - ;; - - -Wc,*) - func_stripname '-Wc,' '' "$arg" - args=$func_stripname_result - arg= - save_ifs=$IFS; IFS=, - for flag in $args; do - IFS=$save_ifs - func_quote_for_eval "$flag" - func_append arg " $func_quote_for_eval_result" - func_append compiler_flags " $func_quote_for_eval_result" - done - IFS=$save_ifs - func_stripname ' ' '' "$arg" - arg=$func_stripname_result - ;; - - -Wl,*) - func_stripname '-Wl,' '' "$arg" - args=$func_stripname_result - arg= - save_ifs=$IFS; IFS=, - for flag in $args; do - IFS=$save_ifs - func_quote_for_eval "$flag" - func_append arg " $wl$func_quote_for_eval_result" - func_append compiler_flags " $wl$func_quote_for_eval_result" - func_append linker_flags " $func_quote_for_eval_result" - done - IFS=$save_ifs - func_stripname ' ' '' "$arg" - arg=$func_stripname_result - ;; - - -Xcompiler) - prev=xcompiler - continue - ;; - - -Xlinker) - prev=xlinker - continue - ;; - - -XCClinker) - prev=xcclinker - continue - ;; - - # -msg_* for osf cc - -msg_*) - func_quote_for_eval "$arg" - arg=$func_quote_for_eval_result - ;; - - # Flags to be passed through unchanged, with rationale: - # -64, -mips[0-9] enable 64-bit mode for the SGI compiler - # -r[0-9][0-9]* specify processor for the SGI compiler - # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler - # +DA*, +DD* enable 64-bit mode for the HP compiler - # -q* compiler args for the IBM compiler - # -m*, -t[45]*, -txscale* architecture-specific flags for GCC - # -F/path path to uninstalled frameworks, gcc on darwin - # -p, -pg, --coverage, -fprofile-* profiling flags for GCC - # -fstack-protector* stack protector flags for GCC - # @file GCC response files - # -tp=* Portland pgcc target processor selection - # --sysroot=* for sysroot support - # -O*, -g*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization - # -specs=* GCC specs files - # -stdlib=* select c++ std lib with clang - # -fsanitize=* Clang/GCC memory and address sanitizer - # -fuse-ld=* Linker select flags for GCC - -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ - -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ - -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*| \ - -specs=*|-fsanitize=*|-fuse-ld=*) - func_quote_for_eval "$arg" - arg=$func_quote_for_eval_result - func_append compile_command " $arg" - func_append finalize_command " $arg" - func_append compiler_flags " $arg" - continue - ;; - - -Z*) - if test os2 = "`expr $host : '.*\(os2\)'`"; then - # OS/2 uses -Zxxx to specify OS/2-specific options - compiler_flags="$compiler_flags $arg" - func_append compile_command " $arg" - func_append finalize_command " $arg" - case $arg in - -Zlinker | -Zstack) - prev=xcompiler - ;; - esac - continue - else - # Otherwise treat like 'Some other compiler flag' below - func_quote_for_eval "$arg" - arg=$func_quote_for_eval_result - fi - ;; - - # Some other compiler flag. - -* | +*) - func_quote_for_eval "$arg" - arg=$func_quote_for_eval_result - ;; - - *.$objext) - # A standard object. - func_append objs " $arg" - ;; - - *.lo) - # A libtool-controlled object. - - # Check to see that this really is a libtool object. - if func_lalib_unsafe_p "$arg"; then - pic_object= - non_pic_object= - - # Read the .lo file - func_source "$arg" - - if test -z "$pic_object" || - test -z "$non_pic_object" || - test none = "$pic_object" && - test none = "$non_pic_object"; then - func_fatal_error "cannot find name of object for '$arg'" - fi - - # Extract subdirectory from the argument. - func_dirname "$arg" "/" "" - xdir=$func_dirname_result - - test none = "$pic_object" || { - # Prepend the subdirectory the object is found in. - pic_object=$xdir$pic_object - - if test dlfiles = "$prev"; then - if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then - func_append dlfiles " $pic_object" - prev= - continue - else - # If libtool objects are unsupported, then we need to preload. - prev=dlprefiles - fi - fi - - # CHECK ME: I think I busted this. -Ossama - if test dlprefiles = "$prev"; then - # Preload the old-style object. - func_append dlprefiles " $pic_object" - prev= - fi - - # A PIC object. - func_append libobjs " $pic_object" - arg=$pic_object - } - - # Non-PIC object. - if test none != "$non_pic_object"; then - # Prepend the subdirectory the object is found in. - non_pic_object=$xdir$non_pic_object - - # A standard non-PIC object - func_append non_pic_objects " $non_pic_object" - if test -z "$pic_object" || test none = "$pic_object"; then - arg=$non_pic_object - fi - else - # If the PIC object exists, use it instead. - # $xdir was prepended to $pic_object above. - non_pic_object=$pic_object - func_append non_pic_objects " $non_pic_object" - fi - else - # Only an error if not doing a dry-run. - if $opt_dry_run; then - # Extract subdirectory from the argument. - func_dirname "$arg" "/" "" - xdir=$func_dirname_result - - func_lo2o "$arg" - pic_object=$xdir$objdir/$func_lo2o_result - non_pic_object=$xdir$func_lo2o_result - func_append libobjs " $pic_object" - func_append non_pic_objects " $non_pic_object" - else - func_fatal_error "'$arg' is not a valid libtool object" - fi - fi - ;; - - *.$libext) - # An archive. - func_append deplibs " $arg" - func_append old_deplibs " $arg" - continue - ;; - - *.la) - # A libtool-controlled library. - - func_resolve_sysroot "$arg" - if test dlfiles = "$prev"; then - # This library was specified with -dlopen. - func_append dlfiles " $func_resolve_sysroot_result" - prev= - elif test dlprefiles = "$prev"; then - # The library was specified with -dlpreopen. - func_append dlprefiles " $func_resolve_sysroot_result" - prev= - else - func_append deplibs " $func_resolve_sysroot_result" - fi - continue - ;; - - # Some other compiler argument. - *) - # Unknown arguments in both finalize_command and compile_command need - # to be aesthetically quoted because they are evaled later. - func_quote_for_eval "$arg" - arg=$func_quote_for_eval_result - ;; - esac # arg - - # Now actually substitute the argument into the commands. - if test -n "$arg"; then - func_append compile_command " $arg" - func_append finalize_command " $arg" - fi - done # argument parsing loop - - test -n "$prev" && \ - func_fatal_help "the '$prevarg' option requires an argument" - - if test yes = "$export_dynamic" && test -n "$export_dynamic_flag_spec"; then - eval arg=\"$export_dynamic_flag_spec\" - func_append compile_command " $arg" - func_append finalize_command " $arg" - fi - - oldlibs= - # calculate the name of the file, without its directory - func_basename "$output" - outputname=$func_basename_result - libobjs_save=$libobjs - - if test -n "$shlibpath_var"; then - # get the directories listed in $shlibpath_var - eval shlib_search_path=\`\$ECHO \"\$$shlibpath_var\" \| \$SED \'s/:/ /g\'\` - else - shlib_search_path= - fi - eval sys_lib_search_path=\"$sys_lib_search_path_spec\" - eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" - - # Definition is injected by LT_CONFIG during libtool generation. - func_munge_path_list sys_lib_dlsearch_path "$LT_SYS_LIBRARY_PATH" - - func_dirname "$output" "/" "" - output_objdir=$func_dirname_result$objdir - func_to_tool_file "$output_objdir/" - tool_output_objdir=$func_to_tool_file_result - # Create the object directory. - func_mkdir_p "$output_objdir" - - # Determine the type of output - case $output in - "") - func_fatal_help "you must specify an output file" - ;; - *.$libext) linkmode=oldlib ;; - *.lo | *.$objext) linkmode=obj ;; - *.la) linkmode=lib ;; - *) linkmode=prog ;; # Anything else should be a program. - esac - - specialdeplibs= - - libs= - # Find all interdependent deplibs by searching for libraries - # that are linked more than once (e.g. -la -lb -la) - for deplib in $deplibs; do - if $opt_preserve_dup_deps; then - case "$libs " in - *" $deplib "*) func_append specialdeplibs " $deplib" ;; - esac - fi - func_append libs " $deplib" - done - - if test lib = "$linkmode"; then - libs="$predeps $libs $compiler_lib_search_path $postdeps" - - # Compute libraries that are listed more than once in $predeps - # $postdeps and mark them as special (i.e., whose duplicates are - # not to be eliminated). - pre_post_deps= - if $opt_duplicate_compiler_generated_deps; then - for pre_post_dep in $predeps $postdeps; do - case "$pre_post_deps " in - *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;; - esac - func_append pre_post_deps " $pre_post_dep" - done - fi - pre_post_deps= - fi - - deplibs= - newdependency_libs= - newlib_search_path= - need_relink=no # whether we're linking any uninstalled libtool libraries - notinst_deplibs= # not-installed libtool libraries - notinst_path= # paths that contain not-installed libtool libraries - - case $linkmode in - lib) - passes="conv dlpreopen link" - for file in $dlfiles $dlprefiles; do - case $file in - *.la) ;; - *) - func_fatal_help "libraries can '-dlopen' only libtool libraries: $file" - ;; - esac - done - ;; - prog) - compile_deplibs= - finalize_deplibs= - alldeplibs=false - newdlfiles= - newdlprefiles= - passes="conv scan dlopen dlpreopen link" - ;; - *) passes="conv" - ;; - esac - - for pass in $passes; do - # The preopen pass in lib mode reverses $deplibs; put it back here - # so that -L comes before libs that need it for instance... - if test lib,link = "$linkmode,$pass"; then - ## FIXME: Find the place where the list is rebuilt in the wrong - ## order, and fix it there properly - tmp_deplibs= - for deplib in $deplibs; do - tmp_deplibs="$deplib $tmp_deplibs" - done - deplibs=$tmp_deplibs - fi - - if test lib,link = "$linkmode,$pass" || - test prog,scan = "$linkmode,$pass"; then - libs=$deplibs - deplibs= - fi - if test prog = "$linkmode"; then - case $pass in - dlopen) libs=$dlfiles ;; - dlpreopen) libs=$dlprefiles ;; - link) - libs="$deplibs %DEPLIBS%" - test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs" - ;; - esac - fi - if test lib,dlpreopen = "$linkmode,$pass"; then - # Collect and forward deplibs of preopened libtool libs - for lib in $dlprefiles; do - # Ignore non-libtool-libs - dependency_libs= - func_resolve_sysroot "$lib" - case $lib in - *.la) func_source "$func_resolve_sysroot_result" ;; - esac - - # Collect preopened libtool deplibs, except any this library - # has declared as weak libs - for deplib in $dependency_libs; do - func_basename "$deplib" - deplib_base=$func_basename_result - case " $weak_libs " in - *" $deplib_base "*) ;; - *) func_append deplibs " $deplib" ;; - esac - done - done - libs=$dlprefiles - fi - if test dlopen = "$pass"; then - # Collect dlpreopened libraries - save_deplibs=$deplibs - deplibs= - fi - - for deplib in $libs; do - lib= - found=false - case $deplib in - -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ - |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) - if test prog,link = "$linkmode,$pass"; then - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - func_append compiler_flags " $deplib" - if test lib = "$linkmode"; then - case "$new_inherited_linker_flags " in - *" $deplib "*) ;; - * ) func_append new_inherited_linker_flags " $deplib" ;; - esac - fi - fi - continue - ;; - -l*) - if test lib != "$linkmode" && test prog != "$linkmode"; then - func_warning "'-l' is ignored for archives/objects" - continue - fi - func_stripname '-l' '' "$deplib" - name=$func_stripname_result - if test lib = "$linkmode"; then - searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" - else - searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" - fi - for searchdir in $searchdirs; do - for search_ext in .la $std_shrext .so .a; do - # Search the libtool library - lib=$searchdir/lib$name$search_ext - if test -f "$lib"; then - if test .la = "$search_ext"; then - found=: - else - found=false - fi - break 2 - fi - done - done - if $found; then - # deplib is a libtool library - # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, - # We need to do some special things here, and not later. - if test yes = "$allow_libtool_libs_with_static_runtimes"; then - case " $predeps $postdeps " in - *" $deplib "*) - if func_lalib_p "$lib"; then - library_names= - old_library= - func_source "$lib" - for l in $old_library $library_names; do - ll=$l - done - if test "X$ll" = "X$old_library"; then # only static version available - found=false - func_dirname "$lib" "" "." - ladir=$func_dirname_result - lib=$ladir/$old_library - if test prog,link = "$linkmode,$pass"; then - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - deplibs="$deplib $deplibs" - test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs" - fi - continue - fi - fi - ;; - *) ;; - esac - fi - else - # deplib doesn't seem to be a libtool library - if test prog,link = "$linkmode,$pass"; then - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - deplibs="$deplib $deplibs" - test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs" - fi - continue - fi - ;; # -l - *.ltframework) - if test prog,link = "$linkmode,$pass"; then - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - deplibs="$deplib $deplibs" - if test lib = "$linkmode"; then - case "$new_inherited_linker_flags " in - *" $deplib "*) ;; - * ) func_append new_inherited_linker_flags " $deplib" ;; - esac - fi - fi - continue - ;; - -L*) - case $linkmode in - lib) - deplibs="$deplib $deplibs" - test conv = "$pass" && continue - newdependency_libs="$deplib $newdependency_libs" - func_stripname '-L' '' "$deplib" - func_resolve_sysroot "$func_stripname_result" - func_append newlib_search_path " $func_resolve_sysroot_result" - ;; - prog) - if test conv = "$pass"; then - deplibs="$deplib $deplibs" - continue - fi - if test scan = "$pass"; then - deplibs="$deplib $deplibs" - else - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - fi - func_stripname '-L' '' "$deplib" - func_resolve_sysroot "$func_stripname_result" - func_append newlib_search_path " $func_resolve_sysroot_result" - ;; - *) - func_warning "'-L' is ignored for archives/objects" - ;; - esac # linkmode - continue - ;; # -L - -R*) - if test link = "$pass"; then - func_stripname '-R' '' "$deplib" - func_resolve_sysroot "$func_stripname_result" - dir=$func_resolve_sysroot_result - # Make sure the xrpath contains only unique directories. - case "$xrpath " in - *" $dir "*) ;; - *) func_append xrpath " $dir" ;; - esac - fi - deplibs="$deplib $deplibs" - continue - ;; - *.la) - func_resolve_sysroot "$deplib" - lib=$func_resolve_sysroot_result - ;; - *.$libext) - if test conv = "$pass"; then - deplibs="$deplib $deplibs" - continue - fi - case $linkmode in - lib) - # Linking convenience modules into shared libraries is allowed, - # but linking other static libraries is non-portable. - case " $dlpreconveniencelibs " in - *" $deplib "*) ;; - *) - valid_a_lib=false - case $deplibs_check_method in - match_pattern*) - set dummy $deplibs_check_method; shift - match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` - if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ - | $EGREP "$match_pattern_regex" > /dev/null; then - valid_a_lib=: - fi - ;; - pass_all) - valid_a_lib=: - ;; - esac - if $valid_a_lib; then - echo - $ECHO "*** Warning: Linking the shared library $output against the" - $ECHO "*** static library $deplib is not portable!" - deplibs="$deplib $deplibs" - else - echo - $ECHO "*** Warning: Trying to link with static lib archive $deplib." - echo "*** I have the capability to make that library automatically link in when" - echo "*** you link to this library. But I can only do this if you have a" - echo "*** shared version of the library, which you do not appear to have" - echo "*** because the file extensions .$libext of this argument makes me believe" - echo "*** that it is just a static archive that I should not use here." - fi - ;; - esac - continue - ;; - prog) - if test link != "$pass"; then - deplibs="$deplib $deplibs" - else - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - fi - continue - ;; - esac # linkmode - ;; # *.$libext - *.lo | *.$objext) - if test conv = "$pass"; then - deplibs="$deplib $deplibs" - elif test prog = "$linkmode"; then - if test dlpreopen = "$pass" || test yes != "$dlopen_support" || test no = "$build_libtool_libs"; then - # If there is no dlopen support or we're linking statically, - # we need to preload. - func_append newdlprefiles " $deplib" - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - func_append newdlfiles " $deplib" - fi - fi - continue - ;; - %DEPLIBS%) - alldeplibs=: - continue - ;; - esac # case $deplib - - $found || test -f "$lib" \ - || func_fatal_error "cannot find the library '$lib' or unhandled argument '$deplib'" - - # Check to see that this really is a libtool archive. - func_lalib_unsafe_p "$lib" \ - || func_fatal_error "'$lib' is not a valid libtool archive" - - func_dirname "$lib" "" "." - ladir=$func_dirname_result - - dlname= - dlopen= - dlpreopen= - libdir= - library_names= - old_library= - inherited_linker_flags= - # If the library was installed with an old release of libtool, - # it will not redefine variables installed, or shouldnotlink - installed=yes - shouldnotlink=no - avoidtemprpath= - - - # Read the .la file - func_source "$lib" - - # Convert "-framework foo" to "foo.ltframework" - if test -n "$inherited_linker_flags"; then - tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` - for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do - case " $new_inherited_linker_flags " in - *" $tmp_inherited_linker_flag "*) ;; - *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";; - esac - done - fi - dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` - if test lib,link = "$linkmode,$pass" || - test prog,scan = "$linkmode,$pass" || - { test prog != "$linkmode" && test lib != "$linkmode"; }; then - test -n "$dlopen" && func_append dlfiles " $dlopen" - test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" - fi - - if test conv = "$pass"; then - # Only check for convenience libraries - deplibs="$lib $deplibs" - if test -z "$libdir"; then - if test -z "$old_library"; then - func_fatal_error "cannot find name of link library for '$lib'" - fi - # It is a libtool convenience library, so add in its objects. - func_append convenience " $ladir/$objdir/$old_library" - func_append old_convenience " $ladir/$objdir/$old_library" - tmp_libs= - for deplib in $dependency_libs; do - deplibs="$deplib $deplibs" - if $opt_preserve_dup_deps; then - case "$tmp_libs " in - *" $deplib "*) func_append specialdeplibs " $deplib" ;; - esac - fi - func_append tmp_libs " $deplib" - done - elif test prog != "$linkmode" && test lib != "$linkmode"; then - func_fatal_error "'$lib' is not a convenience library" - fi - continue - fi # $pass = conv - - - # Get the name of the library we link against. - linklib= - if test -n "$old_library" && - { test yes = "$prefer_static_libs" || - test built,no = "$prefer_static_libs,$installed"; }; then - linklib=$old_library - else - for l in $old_library $library_names; do - linklib=$l - done - fi - if test -z "$linklib"; then - func_fatal_error "cannot find name of link library for '$lib'" - fi - - # This library was specified with -dlopen. - if test dlopen = "$pass"; then - test -z "$libdir" \ - && func_fatal_error "cannot -dlopen a convenience library: '$lib'" - if test -z "$dlname" || - test yes != "$dlopen_support" || - test no = "$build_libtool_libs" - then - # If there is no dlname, no dlopen support or we're linking - # statically, we need to preload. We also need to preload any - # dependent libraries so libltdl's deplib preloader doesn't - # bomb out in the load deplibs phase. - func_append dlprefiles " $lib $dependency_libs" - else - func_append newdlfiles " $lib" - fi - continue - fi # $pass = dlopen - - # We need an absolute path. - case $ladir in - [\\/]* | [A-Za-z]:[\\/]*) abs_ladir=$ladir ;; - *) - abs_ladir=`cd "$ladir" && pwd` - if test -z "$abs_ladir"; then - func_warning "cannot determine absolute directory name of '$ladir'" - func_warning "passing it literally to the linker, although it might fail" - abs_ladir=$ladir - fi - ;; - esac - func_basename "$lib" - laname=$func_basename_result - - # Find the relevant object directory and library name. - if test yes = "$installed"; then - if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then - func_warning "library '$lib' was moved." - dir=$ladir - absdir=$abs_ladir - libdir=$abs_ladir - else - dir=$lt_sysroot$libdir - absdir=$lt_sysroot$libdir - fi - test yes = "$hardcode_automatic" && avoidtemprpath=yes - else - if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then - dir=$ladir - absdir=$abs_ladir - # Remove this search path later - func_append notinst_path " $abs_ladir" - else - dir=$ladir/$objdir - absdir=$abs_ladir/$objdir - # Remove this search path later - func_append notinst_path " $abs_ladir" - fi - fi # $installed = yes - func_stripname 'lib' '.la' "$laname" - name=$func_stripname_result - - # This library was specified with -dlpreopen. - if test dlpreopen = "$pass"; then - if test -z "$libdir" && test prog = "$linkmode"; then - func_fatal_error "only libraries may -dlpreopen a convenience library: '$lib'" - fi - case $host in - # special handling for platforms with PE-DLLs. - *cygwin* | *mingw* | *cegcc* ) - # Linker will automatically link against shared library if both - # static and shared are present. Therefore, ensure we extract - # symbols from the import library if a shared library is present - # (otherwise, the dlopen module name will be incorrect). We do - # this by putting the import library name into $newdlprefiles. - # We recover the dlopen module name by 'saving' the la file - # name in a special purpose variable, and (later) extracting the - # dlname from the la file. - if test -n "$dlname"; then - func_tr_sh "$dir/$linklib" - eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" - func_append newdlprefiles " $dir/$linklib" - else - func_append newdlprefiles " $dir/$old_library" - # Keep a list of preopened convenience libraries to check - # that they are being used correctly in the link pass. - test -z "$libdir" && \ - func_append dlpreconveniencelibs " $dir/$old_library" - fi - ;; - * ) - # Prefer using a static library (so that no silly _DYNAMIC symbols - # are required to link). - if test -n "$old_library"; then - func_append newdlprefiles " $dir/$old_library" - # Keep a list of preopened convenience libraries to check - # that they are being used correctly in the link pass. - test -z "$libdir" && \ - func_append dlpreconveniencelibs " $dir/$old_library" - # Otherwise, use the dlname, so that lt_dlopen finds it. - elif test -n "$dlname"; then - func_append newdlprefiles " $dir/$dlname" - else - func_append newdlprefiles " $dir/$linklib" - fi - ;; - esac - fi # $pass = dlpreopen - - if test -z "$libdir"; then - # Link the convenience library - if test lib = "$linkmode"; then - deplibs="$dir/$old_library $deplibs" - elif test prog,link = "$linkmode,$pass"; then - compile_deplibs="$dir/$old_library $compile_deplibs" - finalize_deplibs="$dir/$old_library $finalize_deplibs" - else - deplibs="$lib $deplibs" # used for prog,scan pass - fi - continue - fi - - - if test prog = "$linkmode" && test link != "$pass"; then - func_append newlib_search_path " $ladir" - deplibs="$lib $deplibs" - - linkalldeplibs=false - if test no != "$link_all_deplibs" || test -z "$library_names" || - test no = "$build_libtool_libs"; then - linkalldeplibs=: - fi - - tmp_libs= - for deplib in $dependency_libs; do - case $deplib in - -L*) func_stripname '-L' '' "$deplib" - func_resolve_sysroot "$func_stripname_result" - func_append newlib_search_path " $func_resolve_sysroot_result" - ;; - esac - # Need to link against all dependency_libs? - if $linkalldeplibs; then - deplibs="$deplib $deplibs" - else - # Need to hardcode shared library paths - # or/and link against static libraries - newdependency_libs="$deplib $newdependency_libs" - fi - if $opt_preserve_dup_deps; then - case "$tmp_libs " in - *" $deplib "*) func_append specialdeplibs " $deplib" ;; - esac - fi - func_append tmp_libs " $deplib" - done # for deplib - continue - fi # $linkmode = prog... - - if test prog,link = "$linkmode,$pass"; then - if test -n "$library_names" && - { { test no = "$prefer_static_libs" || - test built,yes = "$prefer_static_libs,$installed"; } || - test -z "$old_library"; }; then - # We need to hardcode the library path - if test -n "$shlibpath_var" && test -z "$avoidtemprpath"; then - # Make sure the rpath contains only unique directories. - case $temp_rpath: in - *"$absdir:"*) ;; - *) func_append temp_rpath "$absdir:" ;; - esac - fi - - # Hardcode the library path. - # Skip directories that are in the system default run-time - # search path. - case " $sys_lib_dlsearch_path " in - *" $absdir "*) ;; - *) - case "$compile_rpath " in - *" $absdir "*) ;; - *) func_append compile_rpath " $absdir" ;; - esac - ;; - esac - case " $sys_lib_dlsearch_path " in - *" $libdir "*) ;; - *) - case "$finalize_rpath " in - *" $libdir "*) ;; - *) func_append finalize_rpath " $libdir" ;; - esac - ;; - esac - fi # $linkmode,$pass = prog,link... - - if $alldeplibs && - { test pass_all = "$deplibs_check_method" || - { test yes = "$build_libtool_libs" && - test -n "$library_names"; }; }; then - # We only need to search for static libraries - continue - fi - fi - - link_static=no # Whether the deplib will be linked statically - use_static_libs=$prefer_static_libs - if test built = "$use_static_libs" && test yes = "$installed"; then - use_static_libs=no - fi - if test -n "$library_names" && - { test no = "$use_static_libs" || test -z "$old_library"; }; then - case $host in - *cygwin* | *mingw* | *cegcc* | *os2*) - # No point in relinking DLLs because paths are not encoded - func_append notinst_deplibs " $lib" - need_relink=no - ;; - *) - if test no = "$installed"; then - func_append notinst_deplibs " $lib" - need_relink=yes - fi - ;; - esac - # This is a shared library - - # Warn about portability, can't link against -module's on some - # systems (darwin). Don't bleat about dlopened modules though! - dlopenmodule= - for dlpremoduletest in $dlprefiles; do - if test "X$dlpremoduletest" = "X$lib"; then - dlopenmodule=$dlpremoduletest - break - fi - done - if test -z "$dlopenmodule" && test yes = "$shouldnotlink" && test link = "$pass"; then - echo - if test prog = "$linkmode"; then - $ECHO "*** Warning: Linking the executable $output against the loadable module" - else - $ECHO "*** Warning: Linking the shared library $output against the loadable module" - fi - $ECHO "*** $linklib is not portable!" - fi - if test lib = "$linkmode" && - test yes = "$hardcode_into_libs"; then - # Hardcode the library path. - # Skip directories that are in the system default run-time - # search path. - case " $sys_lib_dlsearch_path " in - *" $absdir "*) ;; - *) - case "$compile_rpath " in - *" $absdir "*) ;; - *) func_append compile_rpath " $absdir" ;; - esac - ;; - esac - case " $sys_lib_dlsearch_path " in - *" $libdir "*) ;; - *) - case "$finalize_rpath " in - *" $libdir "*) ;; - *) func_append finalize_rpath " $libdir" ;; - esac - ;; - esac - fi - - if test -n "$old_archive_from_expsyms_cmds"; then - # figure out the soname - set dummy $library_names - shift - realname=$1 - shift - libname=`eval "\\$ECHO \"$libname_spec\""` - # use dlname if we got it. it's perfectly good, no? - if test -n "$dlname"; then - soname=$dlname - elif test -n "$soname_spec"; then - # bleh windows - case $host in - *cygwin* | mingw* | *cegcc* | *os2*) - func_arith $current - $age - major=$func_arith_result - versuffix=-$major - ;; - esac - eval soname=\"$soname_spec\" - else - soname=$realname - fi - - # Make a new name for the extract_expsyms_cmds to use - soroot=$soname - func_basename "$soroot" - soname=$func_basename_result - func_stripname 'lib' '.dll' "$soname" - newlib=libimp-$func_stripname_result.a - - # If the library has no export list, then create one now - if test -f "$output_objdir/$soname-def"; then : - else - func_verbose "extracting exported symbol list from '$soname'" - func_execute_cmds "$extract_expsyms_cmds" 'exit $?' - fi - - # Create $newlib - if test -f "$output_objdir/$newlib"; then :; else - func_verbose "generating import library for '$soname'" - func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' - fi - # make sure the library variables are pointing to the new library - dir=$output_objdir - linklib=$newlib - fi # test -n "$old_archive_from_expsyms_cmds" - - if test prog = "$linkmode" || test relink != "$opt_mode"; then - add_shlibpath= - add_dir= - add= - lib_linked=yes - case $hardcode_action in - immediate | unsupported) - if test no = "$hardcode_direct"; then - add=$dir/$linklib - case $host in - *-*-sco3.2v5.0.[024]*) add_dir=-L$dir ;; - *-*-sysv4*uw2*) add_dir=-L$dir ;; - *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ - *-*-unixware7*) add_dir=-L$dir ;; - *-*-darwin* ) - # if the lib is a (non-dlopened) module then we cannot - # link against it, someone is ignoring the earlier warnings - if /usr/bin/file -L $add 2> /dev/null | - $GREP ": [^:]* bundle" >/dev/null; then - if test "X$dlopenmodule" != "X$lib"; then - $ECHO "*** Warning: lib $linklib is a module, not a shared library" - if test -z "$old_library"; then - echo - echo "*** And there doesn't seem to be a static archive available" - echo "*** The link will probably fail, sorry" - else - add=$dir/$old_library - fi - elif test -n "$old_library"; then - add=$dir/$old_library - fi - fi - esac - elif test no = "$hardcode_minus_L"; then - case $host in - *-*-sunos*) add_shlibpath=$dir ;; - esac - add_dir=-L$dir - add=-l$name - elif test no = "$hardcode_shlibpath_var"; then - add_shlibpath=$dir - add=-l$name - else - lib_linked=no - fi - ;; - relink) - if test yes = "$hardcode_direct" && - test no = "$hardcode_direct_absolute"; then - add=$dir/$linklib - elif test yes = "$hardcode_minus_L"; then - add_dir=-L$absdir - # Try looking first in the location we're being installed to. - if test -n "$inst_prefix_dir"; then - case $libdir in - [\\/]*) - func_append add_dir " -L$inst_prefix_dir$libdir" - ;; - esac - fi - add=-l$name - elif test yes = "$hardcode_shlibpath_var"; then - add_shlibpath=$dir - add=-l$name - else - lib_linked=no - fi - ;; - *) lib_linked=no ;; - esac - - if test yes != "$lib_linked"; then - func_fatal_configuration "unsupported hardcode properties" - fi - - if test -n "$add_shlibpath"; then - case :$compile_shlibpath: in - *":$add_shlibpath:"*) ;; - *) func_append compile_shlibpath "$add_shlibpath:" ;; - esac - fi - if test prog = "$linkmode"; then - test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" - test -n "$add" && compile_deplibs="$add $compile_deplibs" - else - test -n "$add_dir" && deplibs="$add_dir $deplibs" - test -n "$add" && deplibs="$add $deplibs" - if test yes != "$hardcode_direct" && - test yes != "$hardcode_minus_L" && - test yes = "$hardcode_shlibpath_var"; then - case :$finalize_shlibpath: in - *":$libdir:"*) ;; - *) func_append finalize_shlibpath "$libdir:" ;; - esac - fi - fi - fi - - if test prog = "$linkmode" || test relink = "$opt_mode"; then - add_shlibpath= - add_dir= - add= - # Finalize command for both is simple: just hardcode it. - if test yes = "$hardcode_direct" && - test no = "$hardcode_direct_absolute"; then - add=$libdir/$linklib - elif test yes = "$hardcode_minus_L"; then - add_dir=-L$libdir - add=-l$name - elif test yes = "$hardcode_shlibpath_var"; then - case :$finalize_shlibpath: in - *":$libdir:"*) ;; - *) func_append finalize_shlibpath "$libdir:" ;; - esac - add=-l$name - elif test yes = "$hardcode_automatic"; then - if test -n "$inst_prefix_dir" && - test -f "$inst_prefix_dir$libdir/$linklib"; then - add=$inst_prefix_dir$libdir/$linklib - else - add=$libdir/$linklib - fi - else - # We cannot seem to hardcode it, guess we'll fake it. - add_dir=-L$libdir - # Try looking first in the location we're being installed to. - if test -n "$inst_prefix_dir"; then - case $libdir in - [\\/]*) - func_append add_dir " -L$inst_prefix_dir$libdir" - ;; - esac - fi - add=-l$name - fi - - if test prog = "$linkmode"; then - test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" - test -n "$add" && finalize_deplibs="$add $finalize_deplibs" - else - test -n "$add_dir" && deplibs="$add_dir $deplibs" - test -n "$add" && deplibs="$add $deplibs" - fi - fi - elif test prog = "$linkmode"; then - # Here we assume that one of hardcode_direct or hardcode_minus_L - # is not unsupported. This is valid on all known static and - # shared platforms. - if test unsupported != "$hardcode_direct"; then - test -n "$old_library" && linklib=$old_library - compile_deplibs="$dir/$linklib $compile_deplibs" - finalize_deplibs="$dir/$linklib $finalize_deplibs" - else - compile_deplibs="-l$name -L$dir $compile_deplibs" - finalize_deplibs="-l$name -L$dir $finalize_deplibs" - fi - elif test yes = "$build_libtool_libs"; then - # Not a shared library - if test pass_all != "$deplibs_check_method"; then - # We're trying link a shared library against a static one - # but the system doesn't support it. - - # Just print a warning and add the library to dependency_libs so - # that the program can be linked against the static library. - echo - $ECHO "*** Warning: This system cannot link to static lib archive $lib." - echo "*** I have the capability to make that library automatically link in when" - echo "*** you link to this library. But I can only do this if you have a" - echo "*** shared version of the library, which you do not appear to have." - if test yes = "$module"; then - echo "*** But as you try to build a module library, libtool will still create " - echo "*** a static module, that should work as long as the dlopening application" - echo "*** is linked with the -dlopen flag to resolve symbols at runtime." - if test -z "$global_symbol_pipe"; then - echo - echo "*** However, this would only work if libtool was able to extract symbol" - echo "*** lists from a program, using 'nm' or equivalent, but libtool could" - echo "*** not find such a program. So, this module is probably useless." - echo "*** 'nm' from GNU binutils and a full rebuild may help." - fi - if test no = "$build_old_libs"; then - build_libtool_libs=module - build_old_libs=yes - else - build_libtool_libs=no - fi - fi - else - deplibs="$dir/$old_library $deplibs" - link_static=yes - fi - fi # link shared/static library? - - if test lib = "$linkmode"; then - if test -n "$dependency_libs" && - { test yes != "$hardcode_into_libs" || - test yes = "$build_old_libs" || - test yes = "$link_static"; }; then - # Extract -R from dependency_libs - temp_deplibs= - for libdir in $dependency_libs; do - case $libdir in - -R*) func_stripname '-R' '' "$libdir" - temp_xrpath=$func_stripname_result - case " $xrpath " in - *" $temp_xrpath "*) ;; - *) func_append xrpath " $temp_xrpath";; - esac;; - *) func_append temp_deplibs " $libdir";; - esac - done - dependency_libs=$temp_deplibs - fi - - func_append newlib_search_path " $absdir" - # Link against this library - test no = "$link_static" && newdependency_libs="$abs_ladir/$laname $newdependency_libs" - # ... and its dependency_libs - tmp_libs= - for deplib in $dependency_libs; do - newdependency_libs="$deplib $newdependency_libs" - case $deplib in - -L*) func_stripname '-L' '' "$deplib" - func_resolve_sysroot "$func_stripname_result";; - *) func_resolve_sysroot "$deplib" ;; - esac - if $opt_preserve_dup_deps; then - case "$tmp_libs " in - *" $func_resolve_sysroot_result "*) - func_append specialdeplibs " $func_resolve_sysroot_result" ;; - esac - fi - func_append tmp_libs " $func_resolve_sysroot_result" - done - - if test no != "$link_all_deplibs"; then - # Add the search paths of all dependency libraries - for deplib in $dependency_libs; do - path= - case $deplib in - -L*) path=$deplib ;; - *.la) - func_resolve_sysroot "$deplib" - deplib=$func_resolve_sysroot_result - func_dirname "$deplib" "" "." - dir=$func_dirname_result - # We need an absolute path. - case $dir in - [\\/]* | [A-Za-z]:[\\/]*) absdir=$dir ;; - *) - absdir=`cd "$dir" && pwd` - if test -z "$absdir"; then - func_warning "cannot determine absolute directory name of '$dir'" - absdir=$dir - fi - ;; - esac - if $GREP "^installed=no" $deplib > /dev/null; then - case $host in - *-*-darwin*) - depdepl= - eval deplibrary_names=`$SED -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` - if test -n "$deplibrary_names"; then - for tmp in $deplibrary_names; do - depdepl=$tmp - done - if test -f "$absdir/$objdir/$depdepl"; then - depdepl=$absdir/$objdir/$depdepl - darwin_install_name=`$OTOOL -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` - if test -z "$darwin_install_name"; then - darwin_install_name=`$OTOOL64 -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` - fi - func_append compiler_flags " $wl-dylib_file $wl$darwin_install_name:$depdepl" - func_append linker_flags " -dylib_file $darwin_install_name:$depdepl" - path= - fi - fi - ;; - *) - path=-L$absdir/$objdir - ;; - esac - else - eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` - test -z "$libdir" && \ - func_fatal_error "'$deplib' is not a valid libtool archive" - test "$absdir" != "$libdir" && \ - func_warning "'$deplib' seems to be moved" - - path=-L$absdir - fi - ;; - esac - case " $deplibs " in - *" $path "*) ;; - *) deplibs="$path $deplibs" ;; - esac - done - fi # link_all_deplibs != no - fi # linkmode = lib - done # for deplib in $libs - if test link = "$pass"; then - if test prog = "$linkmode"; then - compile_deplibs="$new_inherited_linker_flags $compile_deplibs" - finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" - else - compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` - fi - fi - dependency_libs=$newdependency_libs - if test dlpreopen = "$pass"; then - # Link the dlpreopened libraries before other libraries - for deplib in $save_deplibs; do - deplibs="$deplib $deplibs" - done - fi - if test dlopen != "$pass"; then - test conv = "$pass" || { - # Make sure lib_search_path contains only unique directories. - lib_search_path= - for dir in $newlib_search_path; do - case "$lib_search_path " in - *" $dir "*) ;; - *) func_append lib_search_path " $dir" ;; - esac - done - newlib_search_path= - } - - if test prog,link = "$linkmode,$pass"; then - vars="compile_deplibs finalize_deplibs" - else - vars=deplibs - fi - for var in $vars dependency_libs; do - # Add libraries to $var in reverse order - eval tmp_libs=\"\$$var\" - new_libs= - for deplib in $tmp_libs; do - # FIXME: Pedantically, this is the right thing to do, so - # that some nasty dependency loop isn't accidentally - # broken: - #new_libs="$deplib $new_libs" - # Pragmatically, this seems to cause very few problems in - # practice: - case $deplib in - -L*) new_libs="$deplib $new_libs" ;; - -R*) ;; - *) - # And here is the reason: when a library appears more - # than once as an explicit dependence of a library, or - # is implicitly linked in more than once by the - # compiler, it is considered special, and multiple - # occurrences thereof are not removed. Compare this - # with having the same library being listed as a - # dependency of multiple other libraries: in this case, - # we know (pedantically, we assume) the library does not - # need to be listed more than once, so we keep only the - # last copy. This is not always right, but it is rare - # enough that we require users that really mean to play - # such unportable linking tricks to link the library - # using -Wl,-lname, so that libtool does not consider it - # for duplicate removal. - case " $specialdeplibs " in - *" $deplib "*) new_libs="$deplib $new_libs" ;; - *) - case " $new_libs " in - *" $deplib "*) ;; - *) new_libs="$deplib $new_libs" ;; - esac - ;; - esac - ;; - esac - done - tmp_libs= - for deplib in $new_libs; do - case $deplib in - -L*) - case " $tmp_libs " in - *" $deplib "*) ;; - *) func_append tmp_libs " $deplib" ;; - esac - ;; - *) func_append tmp_libs " $deplib" ;; - esac - done - eval $var=\"$tmp_libs\" - done # for var - fi - - # Add Sun CC postdeps if required: - test CXX = "$tagname" && { - case $host_os in - linux*) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) # Sun C++ 5.9 - func_suncc_cstd_abi - - if test no != "$suncc_use_cstd_abi"; then - func_append postdeps ' -library=Cstd -library=Crun' - fi - ;; - esac - ;; - - solaris*) - func_cc_basename "$CC" - case $func_cc_basename_result in - CC* | sunCC*) - func_suncc_cstd_abi - - if test no != "$suncc_use_cstd_abi"; then - func_append postdeps ' -library=Cstd -library=Crun' - fi - ;; - esac - ;; - esac - } - - # Last step: remove runtime libs from dependency_libs - # (they stay in deplibs) - tmp_libs= - for i in $dependency_libs; do - case " $predeps $postdeps $compiler_lib_search_path " in - *" $i "*) - i= - ;; - esac - if test -n "$i"; then - func_append tmp_libs " $i" - fi - done - dependency_libs=$tmp_libs - done # for pass - if test prog = "$linkmode"; then - dlfiles=$newdlfiles - fi - if test prog = "$linkmode" || test lib = "$linkmode"; then - dlprefiles=$newdlprefiles - fi - - case $linkmode in - oldlib) - if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then - func_warning "'-dlopen' is ignored for archives" - fi - - case " $deplibs" in - *\ -l* | *\ -L*) - func_warning "'-l' and '-L' are ignored for archives" ;; - esac - - test -n "$rpath" && \ - func_warning "'-rpath' is ignored for archives" - - test -n "$xrpath" && \ - func_warning "'-R' is ignored for archives" - - test -n "$vinfo" && \ - func_warning "'-version-info/-version-number' is ignored for archives" - - test -n "$release" && \ - func_warning "'-release' is ignored for archives" - - test -n "$export_symbols$export_symbols_regex" && \ - func_warning "'-export-symbols' is ignored for archives" - - # Now set the variables for building old libraries. - build_libtool_libs=no - oldlibs=$output - func_append objs "$old_deplibs" - ;; - - lib) - # Make sure we only generate libraries of the form 'libNAME.la'. - case $outputname in - lib*) - func_stripname 'lib' '.la' "$outputname" - name=$func_stripname_result - eval shared_ext=\"$shrext_cmds\" - eval libname=\"$libname_spec\" - ;; - *) - test no = "$module" \ - && func_fatal_help "libtool library '$output' must begin with 'lib'" - - if test no != "$need_lib_prefix"; then - # Add the "lib" prefix for modules if required - func_stripname '' '.la' "$outputname" - name=$func_stripname_result - eval shared_ext=\"$shrext_cmds\" - eval libname=\"$libname_spec\" - else - func_stripname '' '.la' "$outputname" - libname=$func_stripname_result - fi - ;; - esac - - if test -n "$objs"; then - if test pass_all != "$deplibs_check_method"; then - func_fatal_error "cannot build libtool library '$output' from non-libtool objects on this host:$objs" - else - echo - $ECHO "*** Warning: Linking the shared library $output against the non-libtool" - $ECHO "*** objects $objs is not portable!" - func_append libobjs " $objs" - fi - fi - - test no = "$dlself" \ - || func_warning "'-dlopen self' is ignored for libtool libraries" - - set dummy $rpath - shift - test 1 -lt "$#" \ - && func_warning "ignoring multiple '-rpath's for a libtool library" - - install_libdir=$1 - - oldlibs= - if test -z "$rpath"; then - if test yes = "$build_libtool_libs"; then - # Building a libtool convenience library. - # Some compilers have problems with a '.al' extension so - # convenience libraries should have the same extension an - # archive normally would. - oldlibs="$output_objdir/$libname.$libext $oldlibs" - build_libtool_libs=convenience - build_old_libs=yes - fi - - test -n "$vinfo" && \ - func_warning "'-version-info/-version-number' is ignored for convenience libraries" - - test -n "$release" && \ - func_warning "'-release' is ignored for convenience libraries" - else - - # Parse the version information argument. - save_ifs=$IFS; IFS=: - set dummy $vinfo 0 0 0 - shift - IFS=$save_ifs - - test -n "$7" && \ - func_fatal_help "too many parameters to '-version-info'" - - # convert absolute version numbers to libtool ages - # this retains compatibility with .la files and attempts - # to make the code below a bit more comprehensible - - case $vinfo_number in - yes) - number_major=$1 - number_minor=$2 - number_revision=$3 - # - # There are really only two kinds -- those that - # use the current revision as the major version - # and those that subtract age and use age as - # a minor version. But, then there is irix - # that has an extra 1 added just for fun - # - case $version_type in - # correct linux to gnu/linux during the next big refactor - darwin|freebsd-elf|linux|osf|windows|none) - func_arith $number_major + $number_minor - current=$func_arith_result - age=$number_minor - revision=$number_revision - ;; - freebsd-aout|qnx|sunos) - current=$number_major - revision=$number_minor - age=0 - ;; - irix|nonstopux) - func_arith $number_major + $number_minor - current=$func_arith_result - age=$number_minor - revision=$number_minor - lt_irix_increment=no - ;; - *) - func_fatal_configuration "$modename: unknown library version type '$version_type'" - ;; - esac - ;; - no) - current=$1 - revision=$2 - age=$3 - ;; - esac - - # Check that each of the things are valid numbers. - case $current in - 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; - *) - func_error "CURRENT '$current' must be a nonnegative integer" - func_fatal_error "'$vinfo' is not valid version information" - ;; - esac - - case $revision in - 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; - *) - func_error "REVISION '$revision' must be a nonnegative integer" - func_fatal_error "'$vinfo' is not valid version information" - ;; - esac - - case $age in - 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; - *) - func_error "AGE '$age' must be a nonnegative integer" - func_fatal_error "'$vinfo' is not valid version information" - ;; - esac - - if test "$age" -gt "$current"; then - func_error "AGE '$age' is greater than the current interface number '$current'" - func_fatal_error "'$vinfo' is not valid version information" - fi - - # Calculate the version variables. - major= - versuffix= - verstring= - case $version_type in - none) ;; - - darwin) - # Like Linux, but with the current version available in - # verstring for coding it into the library header - func_arith $current - $age - major=.$func_arith_result - versuffix=$major.$age.$revision - # Darwin ld doesn't like 0 for these options... - func_arith $current + 1 - minor_current=$func_arith_result - xlcverstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision" - verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" - # On Darwin other compilers - case $CC in - nagfor*) - verstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision" - ;; - *) - verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" - ;; - esac - ;; - - freebsd-aout) - major=.$current - versuffix=.$current.$revision - ;; - - freebsd-elf) - func_arith $current - $age - major=.$func_arith_result - versuffix=$major.$age.$revision - ;; - - irix | nonstopux) - if test no = "$lt_irix_increment"; then - func_arith $current - $age - else - func_arith $current - $age + 1 - fi - major=$func_arith_result - - case $version_type in - nonstopux) verstring_prefix=nonstopux ;; - *) verstring_prefix=sgi ;; - esac - verstring=$verstring_prefix$major.$revision - - # Add in all the interfaces that we are compatible with. - loop=$revision - while test 0 -ne "$loop"; do - func_arith $revision - $loop - iface=$func_arith_result - func_arith $loop - 1 - loop=$func_arith_result - verstring=$verstring_prefix$major.$iface:$verstring - done - - # Before this point, $major must not contain '.'. - major=.$major - versuffix=$major.$revision - ;; - - linux) # correct to gnu/linux during the next big refactor - func_arith $current - $age - major=.$func_arith_result - versuffix=$major.$age.$revision - ;; - - osf) - func_arith $current - $age - major=.$func_arith_result - versuffix=.$current.$age.$revision - verstring=$current.$age.$revision - - # Add in all the interfaces that we are compatible with. - loop=$age - while test 0 -ne "$loop"; do - func_arith $current - $loop - iface=$func_arith_result - func_arith $loop - 1 - loop=$func_arith_result - verstring=$verstring:$iface.0 - done - - # Make executables depend on our current version. - func_append verstring ":$current.0" - ;; - - qnx) - major=.$current - versuffix=.$current - ;; - - sco) - major=.$current - versuffix=.$current - ;; - - sunos) - major=.$current - versuffix=.$current.$revision - ;; - - windows) - # Use '-' rather than '.', since we only want one - # extension on DOS 8.3 file systems. - func_arith $current - $age - major=$func_arith_result - versuffix=-$major - ;; - - *) - func_fatal_configuration "unknown library version type '$version_type'" - ;; - esac - - # Clear the version info if we defaulted, and they specified a release. - if test -z "$vinfo" && test -n "$release"; then - major= - case $version_type in - darwin) - # we can't check for "0.0" in archive_cmds due to quoting - # problems, so we reset it completely - verstring= - ;; - *) - verstring=0.0 - ;; - esac - if test no = "$need_version"; then - versuffix= - else - versuffix=.0.0 - fi - fi - - # Remove version info from name if versioning should be avoided - if test yes,no = "$avoid_version,$need_version"; then - major= - versuffix= - verstring= - fi - - # Check to see if the archive will have undefined symbols. - if test yes = "$allow_undefined"; then - if test unsupported = "$allow_undefined_flag"; then - if test yes = "$build_old_libs"; then - func_warning "undefined symbols not allowed in $host shared libraries; building static only" - build_libtool_libs=no - else - func_fatal_error "can't build $host shared library unless -no-undefined is specified" - fi - fi - else - # Don't allow undefined symbols. - allow_undefined_flag=$no_undefined_flag - fi - - fi - - func_generate_dlsyms "$libname" "$libname" : - func_append libobjs " $symfileobj" - test " " = "$libobjs" && libobjs= - - if test relink != "$opt_mode"; then - # Remove our outputs, but don't remove object files since they - # may have been created when compiling PIC objects. - removelist= - tempremovelist=`$ECHO "$output_objdir/*"` - for p in $tempremovelist; do - case $p in - *.$objext | *.gcno) - ;; - $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/$libname$release.*) - if test -n "$precious_files_regex"; then - if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 - then - continue - fi - fi - func_append removelist " $p" - ;; - *) ;; - esac - done - test -n "$removelist" && \ - func_show_eval "${RM}r \$removelist" - fi - - # Now set the variables for building old libraries. - if test yes = "$build_old_libs" && test convenience != "$build_libtool_libs"; then - func_append oldlibs " $output_objdir/$libname.$libext" - - # Transform .lo files to .o files. - oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; $lo2o" | $NL2SP` - fi - - # Eliminate all temporary directories. - #for path in $notinst_path; do - # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` - # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` - # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` - #done - - if test -n "$xrpath"; then - # If the user specified any rpath flags, then add them. - temp_xrpath= - for libdir in $xrpath; do - func_replace_sysroot "$libdir" - func_append temp_xrpath " -R$func_replace_sysroot_result" - case "$finalize_rpath " in - *" $libdir "*) ;; - *) func_append finalize_rpath " $libdir" ;; - esac - done - if test yes != "$hardcode_into_libs" || test yes = "$build_old_libs"; then - dependency_libs="$temp_xrpath $dependency_libs" - fi - fi - - # Make sure dlfiles contains only unique files that won't be dlpreopened - old_dlfiles=$dlfiles - dlfiles= - for lib in $old_dlfiles; do - case " $dlprefiles $dlfiles " in - *" $lib "*) ;; - *) func_append dlfiles " $lib" ;; - esac - done - - # Make sure dlprefiles contains only unique files - old_dlprefiles=$dlprefiles - dlprefiles= - for lib in $old_dlprefiles; do - case "$dlprefiles " in - *" $lib "*) ;; - *) func_append dlprefiles " $lib" ;; - esac - done - - if test yes = "$build_libtool_libs"; then - if test -n "$rpath"; then - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) - # these systems don't actually have a c library (as such)! - ;; - *-*-rhapsody* | *-*-darwin1.[012]) - # Rhapsody C library is in the System framework - func_append deplibs " System.ltframework" - ;; - *-*-netbsd*) - # Don't link with libc until the a.out ld.so is fixed. - ;; - *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) - # Do not include libc due to us having libc/libc_r. - ;; - *-*-sco3.2v5* | *-*-sco5v6*) - # Causes problems with __ctype - ;; - *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) - # Compiler inserts libc in the correct place for threads to work - ;; - *) - # Add libc to deplibs on all other systems if necessary. - if test yes = "$build_libtool_need_lc"; then - func_append deplibs " -lc" - fi - ;; - esac - fi - - # Transform deplibs into only deplibs that can be linked in shared. - name_save=$name - libname_save=$libname - release_save=$release - versuffix_save=$versuffix - major_save=$major - # I'm not sure if I'm treating the release correctly. I think - # release should show up in the -l (ie -lgmp5) so we don't want to - # add it in twice. Is that correct? - release= - versuffix= - major= - newdeplibs= - droppeddeps=no - case $deplibs_check_method in - pass_all) - # Don't check for shared/static. Everything works. - # This might be a little naive. We might want to check - # whether the library exists or not. But this is on - # osf3 & osf4 and I'm not really sure... Just - # implementing what was already the behavior. - newdeplibs=$deplibs - ;; - test_compile) - # This code stresses the "libraries are programs" paradigm to its - # limits. Maybe even breaks it. We compile a program, linking it - # against the deplibs as a proxy for the library. Then we can check - # whether they linked in statically or dynamically with ldd. - $opt_dry_run || $RM conftest.c - cat > conftest.c </dev/null` - $nocaseglob - else - potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` - fi - for potent_lib in $potential_libs; do - # Follow soft links. - if ls -lLd "$potent_lib" 2>/dev/null | - $GREP " -> " >/dev/null; then - continue - fi - # The statement above tries to avoid entering an - # endless loop below, in case of cyclic links. - # We might still enter an endless loop, since a link - # loop can be closed while we follow links, - # but so what? - potlib=$potent_lib - while test -h "$potlib" 2>/dev/null; do - potliblink=`ls -ld $potlib | $SED 's/.* -> //'` - case $potliblink in - [\\/]* | [A-Za-z]:[\\/]*) potlib=$potliblink;; - *) potlib=`$ECHO "$potlib" | $SED 's|[^/]*$||'`"$potliblink";; - esac - done - if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | - $SED -e 10q | - $EGREP "$file_magic_regex" > /dev/null; then - func_append newdeplibs " $a_deplib" - a_deplib= - break 2 - fi - done - done - fi - if test -n "$a_deplib"; then - droppeddeps=yes - echo - $ECHO "*** Warning: linker path does not have real file for library $a_deplib." - echo "*** I have the capability to make that library automatically link in when" - echo "*** you link to this library. But I can only do this if you have a" - echo "*** shared version of the library, which you do not appear to have" - echo "*** because I did check the linker path looking for a file starting" - if test -z "$potlib"; then - $ECHO "*** with $libname but no candidates were found. (...for file magic test)" - else - $ECHO "*** with $libname and none of the candidates passed a file format test" - $ECHO "*** using a file magic. Last file checked: $potlib" - fi - fi - ;; - *) - # Add a -L argument. - func_append newdeplibs " $a_deplib" - ;; - esac - done # Gone through all deplibs. - ;; - match_pattern*) - set dummy $deplibs_check_method; shift - match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` - for a_deplib in $deplibs; do - case $a_deplib in - -l*) - func_stripname -l '' "$a_deplib" - name=$func_stripname_result - if test yes = "$allow_libtool_libs_with_static_runtimes"; then - case " $predeps $postdeps " in - *" $a_deplib "*) - func_append newdeplibs " $a_deplib" - a_deplib= - ;; - esac - fi - if test -n "$a_deplib"; then - libname=`eval "\\$ECHO \"$libname_spec\""` - for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do - potential_libs=`ls $i/$libname[.-]* 2>/dev/null` - for potent_lib in $potential_libs; do - potlib=$potent_lib # see symlink-check above in file_magic test - if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ - $EGREP "$match_pattern_regex" > /dev/null; then - func_append newdeplibs " $a_deplib" - a_deplib= - break 2 - fi - done - done - fi - if test -n "$a_deplib"; then - droppeddeps=yes - echo - $ECHO "*** Warning: linker path does not have real file for library $a_deplib." - echo "*** I have the capability to make that library automatically link in when" - echo "*** you link to this library. But I can only do this if you have a" - echo "*** shared version of the library, which you do not appear to have" - echo "*** because I did check the linker path looking for a file starting" - if test -z "$potlib"; then - $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" - else - $ECHO "*** with $libname and none of the candidates passed a file format test" - $ECHO "*** using a regex pattern. Last file checked: $potlib" - fi - fi - ;; - *) - # Add a -L argument. - func_append newdeplibs " $a_deplib" - ;; - esac - done # Gone through all deplibs. - ;; - none | unknown | *) - newdeplibs= - tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` - if test yes = "$allow_libtool_libs_with_static_runtimes"; then - for i in $predeps $postdeps; do - # can't use Xsed below, because $i might contain '/' - tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s|$i||"` - done - fi - case $tmp_deplibs in - *[!\ \ ]*) - echo - if test none = "$deplibs_check_method"; then - echo "*** Warning: inter-library dependencies are not supported in this platform." - else - echo "*** Warning: inter-library dependencies are not known to be supported." - fi - echo "*** All declared inter-library dependencies are being dropped." - droppeddeps=yes - ;; - esac - ;; - esac - versuffix=$versuffix_save - major=$major_save - release=$release_save - libname=$libname_save - name=$name_save - - case $host in - *-*-rhapsody* | *-*-darwin1.[012]) - # On Rhapsody replace the C library with the System framework - newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` - ;; - esac - - if test yes = "$droppeddeps"; then - if test yes = "$module"; then - echo - echo "*** Warning: libtool could not satisfy all declared inter-library" - $ECHO "*** dependencies of module $libname. Therefore, libtool will create" - echo "*** a static module, that should work as long as the dlopening" - echo "*** application is linked with the -dlopen flag." - if test -z "$global_symbol_pipe"; then - echo - echo "*** However, this would only work if libtool was able to extract symbol" - echo "*** lists from a program, using 'nm' or equivalent, but libtool could" - echo "*** not find such a program. So, this module is probably useless." - echo "*** 'nm' from GNU binutils and a full rebuild may help." - fi - if test no = "$build_old_libs"; then - oldlibs=$output_objdir/$libname.$libext - build_libtool_libs=module - build_old_libs=yes - else - build_libtool_libs=no - fi - else - echo "*** The inter-library dependencies that have been dropped here will be" - echo "*** automatically added whenever a program is linked with this library" - echo "*** or is declared to -dlopen it." - - if test no = "$allow_undefined"; then - echo - echo "*** Since this library must not contain undefined symbols," - echo "*** because either the platform does not support them or" - echo "*** it was explicitly requested with -no-undefined," - echo "*** libtool will only create a static version of it." - if test no = "$build_old_libs"; then - oldlibs=$output_objdir/$libname.$libext - build_libtool_libs=module - build_old_libs=yes - else - build_libtool_libs=no - fi - fi - fi - fi - # Done checking deplibs! - deplibs=$newdeplibs - fi - # Time to change all our "foo.ltframework" stuff back to "-framework foo" - case $host in - *-*-darwin*) - newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` - new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` - deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` - ;; - esac - - # move library search paths that coincide with paths to not yet - # installed libraries to the beginning of the library search list - new_libs= - for path in $notinst_path; do - case " $new_libs " in - *" -L$path/$objdir "*) ;; - *) - case " $deplibs " in - *" -L$path/$objdir "*) - func_append new_libs " -L$path/$objdir" ;; - esac - ;; - esac - done - for deplib in $deplibs; do - case $deplib in - -L*) - case " $new_libs " in - *" $deplib "*) ;; - *) func_append new_libs " $deplib" ;; - esac - ;; - *) func_append new_libs " $deplib" ;; - esac - done - deplibs=$new_libs - - # All the library-specific variables (install_libdir is set above). - library_names= - old_library= - dlname= - - # Test again, we may have decided not to build it any more - if test yes = "$build_libtool_libs"; then - # Remove $wl instances when linking with ld. - # FIXME: should test the right _cmds variable. - case $archive_cmds in - *\$LD\ *) wl= ;; - esac - if test yes = "$hardcode_into_libs"; then - # Hardcode the library paths - hardcode_libdirs= - dep_rpath= - rpath=$finalize_rpath - test relink = "$opt_mode" || rpath=$compile_rpath$rpath - for libdir in $rpath; do - if test -n "$hardcode_libdir_flag_spec"; then - if test -n "$hardcode_libdir_separator"; then - func_replace_sysroot "$libdir" - libdir=$func_replace_sysroot_result - if test -z "$hardcode_libdirs"; then - hardcode_libdirs=$libdir - else - # Just accumulate the unique libdirs. - case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in - *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) - ;; - *) - func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" - ;; - esac - fi - else - eval flag=\"$hardcode_libdir_flag_spec\" - func_append dep_rpath " $flag" - fi - elif test -n "$runpath_var"; then - case "$perm_rpath " in - *" $libdir "*) ;; - *) func_append perm_rpath " $libdir" ;; - esac - fi - done - # Substitute the hardcoded libdirs into the rpath. - if test -n "$hardcode_libdir_separator" && - test -n "$hardcode_libdirs"; then - libdir=$hardcode_libdirs - eval "dep_rpath=\"$hardcode_libdir_flag_spec\"" - fi - if test -n "$runpath_var" && test -n "$perm_rpath"; then - # We should set the runpath_var. - rpath= - for dir in $perm_rpath; do - func_append rpath "$dir:" - done - eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" - fi - test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" - fi - - shlibpath=$finalize_shlibpath - test relink = "$opt_mode" || shlibpath=$compile_shlibpath$shlibpath - if test -n "$shlibpath"; then - eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" - fi - - # Get the real and link names of the library. - eval shared_ext=\"$shrext_cmds\" - eval library_names=\"$library_names_spec\" - set dummy $library_names - shift - realname=$1 - shift - - if test -n "$soname_spec"; then - eval soname=\"$soname_spec\" - else - soname=$realname - fi - if test -z "$dlname"; then - dlname=$soname - fi - - lib=$output_objdir/$realname - linknames= - for link - do - func_append linknames " $link" - done - - # Use standard objects if they are pic - test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` - test "X$libobjs" = "X " && libobjs= - - delfiles= - if test -n "$export_symbols" && test -n "$include_expsyms"; then - $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" - export_symbols=$output_objdir/$libname.uexp - func_append delfiles " $export_symbols" - fi - - orig_export_symbols= - case $host_os in - cygwin* | mingw* | cegcc*) - if test -n "$export_symbols" && test -z "$export_symbols_regex"; then - # exporting using user supplied symfile - func_dll_def_p "$export_symbols" || { - # and it's NOT already a .def file. Must figure out - # which of the given symbols are data symbols and tag - # them as such. So, trigger use of export_symbols_cmds. - # export_symbols gets reassigned inside the "prepare - # the list of exported symbols" if statement, so the - # include_expsyms logic still works. - orig_export_symbols=$export_symbols - export_symbols= - always_export_symbols=yes - } - fi - ;; - esac - - # Prepare the list of exported symbols - if test -z "$export_symbols"; then - if test yes = "$always_export_symbols" || test -n "$export_symbols_regex"; then - func_verbose "generating symbol list for '$libname.la'" - export_symbols=$output_objdir/$libname.exp - $opt_dry_run || $RM $export_symbols - cmds=$export_symbols_cmds - save_ifs=$IFS; IFS='~' - for cmd1 in $cmds; do - IFS=$save_ifs - # Take the normal branch if the nm_file_list_spec branch - # doesn't work or if tool conversion is not needed. - case $nm_file_list_spec~$to_tool_file_cmd in - *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) - try_normal_branch=yes - eval cmd=\"$cmd1\" - func_len " $cmd" - len=$func_len_result - ;; - *) - try_normal_branch=no - ;; - esac - if test yes = "$try_normal_branch" \ - && { test "$len" -lt "$max_cmd_len" \ - || test "$max_cmd_len" -le -1; } - then - func_show_eval "$cmd" 'exit $?' - skipped_export=false - elif test -n "$nm_file_list_spec"; then - func_basename "$output" - output_la=$func_basename_result - save_libobjs=$libobjs - save_output=$output - output=$output_objdir/$output_la.nm - func_to_tool_file "$output" - libobjs=$nm_file_list_spec$func_to_tool_file_result - func_append delfiles " $output" - func_verbose "creating $NM input file list: $output" - for obj in $save_libobjs; do - func_to_tool_file "$obj" - $ECHO "$func_to_tool_file_result" - done > "$output" - eval cmd=\"$cmd1\" - func_show_eval "$cmd" 'exit $?' - output=$save_output - libobjs=$save_libobjs - skipped_export=false - else - # The command line is too long to execute in one step. - func_verbose "using reloadable object file for export list..." - skipped_export=: - # Break out early, otherwise skipped_export may be - # set to false by a later but shorter cmd. - break - fi - done - IFS=$save_ifs - if test -n "$export_symbols_regex" && test : != "$skipped_export"; then - func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' - func_show_eval '$MV "${export_symbols}T" "$export_symbols"' - fi - fi - fi - - if test -n "$export_symbols" && test -n "$include_expsyms"; then - tmp_export_symbols=$export_symbols - test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols - $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' - fi - - if test : != "$skipped_export" && test -n "$orig_export_symbols"; then - # The given exports_symbols file has to be filtered, so filter it. - func_verbose "filter symbol list for '$libname.la' to tag DATA exports" - # FIXME: $output_objdir/$libname.filter potentially contains lots of - # 's' commands, which not all seds can handle. GNU sed should be fine - # though. Also, the filter scales superlinearly with the number of - # global variables. join(1) would be nice here, but unfortunately - # isn't a blessed tool. - $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter - func_append delfiles " $export_symbols $output_objdir/$libname.filter" - export_symbols=$output_objdir/$libname.def - $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols - fi - - tmp_deplibs= - for test_deplib in $deplibs; do - case " $convenience " in - *" $test_deplib "*) ;; - *) - func_append tmp_deplibs " $test_deplib" - ;; - esac - done - deplibs=$tmp_deplibs - - if test -n "$convenience"; then - if test -n "$whole_archive_flag_spec" && - test yes = "$compiler_needs_object" && - test -z "$libobjs"; then - # extract the archives, so we have objects to list. - # TODO: could optimize this to just extract one archive. - whole_archive_flag_spec= - fi - if test -n "$whole_archive_flag_spec"; then - save_libobjs=$libobjs - eval libobjs=\"\$libobjs $whole_archive_flag_spec\" - test "X$libobjs" = "X " && libobjs= - else - gentop=$output_objdir/${outputname}x - func_append generated " $gentop" - - func_extract_archives $gentop $convenience - func_append libobjs " $func_extract_archives_result" - test "X$libobjs" = "X " && libobjs= - fi - fi - - if test yes = "$thread_safe" && test -n "$thread_safe_flag_spec"; then - eval flag=\"$thread_safe_flag_spec\" - func_append linker_flags " $flag" - fi - - # Make a backup of the uninstalled library when relinking - if test relink = "$opt_mode"; then - $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? - fi - - # Do each of the archive commands. - if test yes = "$module" && test -n "$module_cmds"; then - if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then - eval test_cmds=\"$module_expsym_cmds\" - cmds=$module_expsym_cmds - else - eval test_cmds=\"$module_cmds\" - cmds=$module_cmds - fi - else - if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then - eval test_cmds=\"$archive_expsym_cmds\" - cmds=$archive_expsym_cmds - else - eval test_cmds=\"$archive_cmds\" - cmds=$archive_cmds - fi - fi - - if test : != "$skipped_export" && - func_len " $test_cmds" && - len=$func_len_result && - test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then - : - else - # The command line is too long to link in one step, link piecewise - # or, if using GNU ld and skipped_export is not :, use a linker - # script. - - # Save the value of $output and $libobjs because we want to - # use them later. If we have whole_archive_flag_spec, we - # want to use save_libobjs as it was before - # whole_archive_flag_spec was expanded, because we can't - # assume the linker understands whole_archive_flag_spec. - # This may have to be revisited, in case too many - # convenience libraries get linked in and end up exceeding - # the spec. - if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then - save_libobjs=$libobjs - fi - save_output=$output - func_basename "$output" - output_la=$func_basename_result - - # Clear the reloadable object creation command queue and - # initialize k to one. - test_cmds= - concat_cmds= - objlist= - last_robj= - k=1 - - if test -n "$save_libobjs" && test : != "$skipped_export" && test yes = "$with_gnu_ld"; then - output=$output_objdir/$output_la.lnkscript - func_verbose "creating GNU ld script: $output" - echo 'INPUT (' > $output - for obj in $save_libobjs - do - func_to_tool_file "$obj" - $ECHO "$func_to_tool_file_result" >> $output - done - echo ')' >> $output - func_append delfiles " $output" - func_to_tool_file "$output" - output=$func_to_tool_file_result - elif test -n "$save_libobjs" && test : != "$skipped_export" && test -n "$file_list_spec"; then - output=$output_objdir/$output_la.lnk - func_verbose "creating linker input file list: $output" - : > $output - set x $save_libobjs - shift - firstobj= - if test yes = "$compiler_needs_object"; then - firstobj="$1 " - shift - fi - for obj - do - func_to_tool_file "$obj" - $ECHO "$func_to_tool_file_result" >> $output - done - func_append delfiles " $output" - func_to_tool_file "$output" - output=$firstobj\"$file_list_spec$func_to_tool_file_result\" - else - if test -n "$save_libobjs"; then - func_verbose "creating reloadable object files..." - output=$output_objdir/$output_la-$k.$objext - eval test_cmds=\"$reload_cmds\" - func_len " $test_cmds" - len0=$func_len_result - len=$len0 - - # Loop over the list of objects to be linked. - for obj in $save_libobjs - do - func_len " $obj" - func_arith $len + $func_len_result - len=$func_arith_result - if test -z "$objlist" || - test "$len" -lt "$max_cmd_len"; then - func_append objlist " $obj" - else - # The command $test_cmds is almost too long, add a - # command to the queue. - if test 1 -eq "$k"; then - # The first file doesn't have a previous command to add. - reload_objs=$objlist - eval concat_cmds=\"$reload_cmds\" - else - # All subsequent reloadable object files will link in - # the last one created. - reload_objs="$objlist $last_robj" - eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" - fi - last_robj=$output_objdir/$output_la-$k.$objext - func_arith $k + 1 - k=$func_arith_result - output=$output_objdir/$output_la-$k.$objext - objlist=" $obj" - func_len " $last_robj" - func_arith $len0 + $func_len_result - len=$func_arith_result - fi - done - # Handle the remaining objects by creating one last - # reloadable object file. All subsequent reloadable object - # files will link in the last one created. - test -z "$concat_cmds" || concat_cmds=$concat_cmds~ - reload_objs="$objlist $last_robj" - eval concat_cmds=\"\$concat_cmds$reload_cmds\" - if test -n "$last_robj"; then - eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" - fi - func_append delfiles " $output" - - else - output= - fi - - ${skipped_export-false} && { - func_verbose "generating symbol list for '$libname.la'" - export_symbols=$output_objdir/$libname.exp - $opt_dry_run || $RM $export_symbols - libobjs=$output - # Append the command to create the export file. - test -z "$concat_cmds" || concat_cmds=$concat_cmds~ - eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" - if test -n "$last_robj"; then - eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" - fi - } - - test -n "$save_libobjs" && - func_verbose "creating a temporary reloadable object file: $output" - - # Loop through the commands generated above and execute them. - save_ifs=$IFS; IFS='~' - for cmd in $concat_cmds; do - IFS=$save_ifs - $opt_quiet || { - func_quote_for_expand "$cmd" - eval "func_echo $func_quote_for_expand_result" - } - $opt_dry_run || eval "$cmd" || { - lt_exit=$? - - # Restore the uninstalled library and exit - if test relink = "$opt_mode"; then - ( cd "$output_objdir" && \ - $RM "${realname}T" && \ - $MV "${realname}U" "$realname" ) - fi - - exit $lt_exit - } - done - IFS=$save_ifs - - if test -n "$export_symbols_regex" && ${skipped_export-false}; then - func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' - func_show_eval '$MV "${export_symbols}T" "$export_symbols"' - fi - fi - - ${skipped_export-false} && { - if test -n "$export_symbols" && test -n "$include_expsyms"; then - tmp_export_symbols=$export_symbols - test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols - $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' - fi - - if test -n "$orig_export_symbols"; then - # The given exports_symbols file has to be filtered, so filter it. - func_verbose "filter symbol list for '$libname.la' to tag DATA exports" - # FIXME: $output_objdir/$libname.filter potentially contains lots of - # 's' commands, which not all seds can handle. GNU sed should be fine - # though. Also, the filter scales superlinearly with the number of - # global variables. join(1) would be nice here, but unfortunately - # isn't a blessed tool. - $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter - func_append delfiles " $export_symbols $output_objdir/$libname.filter" - export_symbols=$output_objdir/$libname.def - $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols - fi - } - - libobjs=$output - # Restore the value of output. - output=$save_output - - if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then - eval libobjs=\"\$libobjs $whole_archive_flag_spec\" - test "X$libobjs" = "X " && libobjs= - fi - # Expand the library linking commands again to reset the - # value of $libobjs for piecewise linking. - - # Do each of the archive commands. - if test yes = "$module" && test -n "$module_cmds"; then - if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then - cmds=$module_expsym_cmds - else - cmds=$module_cmds - fi - else - if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then - cmds=$archive_expsym_cmds - else - cmds=$archive_cmds - fi - fi - fi - - if test -n "$delfiles"; then - # Append the command to remove temporary files to $cmds. - eval cmds=\"\$cmds~\$RM $delfiles\" - fi - - # Add any objects from preloaded convenience libraries - if test -n "$dlprefiles"; then - gentop=$output_objdir/${outputname}x - func_append generated " $gentop" - - func_extract_archives $gentop $dlprefiles - func_append libobjs " $func_extract_archives_result" - test "X$libobjs" = "X " && libobjs= - fi - - save_ifs=$IFS; IFS='~' - for cmd in $cmds; do - IFS=$sp$nl - eval cmd=\"$cmd\" - IFS=$save_ifs - $opt_quiet || { - func_quote_for_expand "$cmd" - eval "func_echo $func_quote_for_expand_result" - } - $opt_dry_run || eval "$cmd" || { - lt_exit=$? - - # Restore the uninstalled library and exit - if test relink = "$opt_mode"; then - ( cd "$output_objdir" && \ - $RM "${realname}T" && \ - $MV "${realname}U" "$realname" ) - fi - - exit $lt_exit - } - done - IFS=$save_ifs - - # Restore the uninstalled library and exit - if test relink = "$opt_mode"; then - $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? - - if test -n "$convenience"; then - if test -z "$whole_archive_flag_spec"; then - func_show_eval '${RM}r "$gentop"' - fi - fi - - exit $EXIT_SUCCESS - fi - - # Create links to the real library. - for linkname in $linknames; do - if test "$realname" != "$linkname"; then - func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' - fi - done - - # If -module or -export-dynamic was specified, set the dlname. - if test yes = "$module" || test yes = "$export_dynamic"; then - # On all known operating systems, these are identical. - dlname=$soname - fi - fi - ;; - - obj) - if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then - func_warning "'-dlopen' is ignored for objects" - fi - - case " $deplibs" in - *\ -l* | *\ -L*) - func_warning "'-l' and '-L' are ignored for objects" ;; - esac - - test -n "$rpath" && \ - func_warning "'-rpath' is ignored for objects" - - test -n "$xrpath" && \ - func_warning "'-R' is ignored for objects" - - test -n "$vinfo" && \ - func_warning "'-version-info' is ignored for objects" - - test -n "$release" && \ - func_warning "'-release' is ignored for objects" - - case $output in - *.lo) - test -n "$objs$old_deplibs" && \ - func_fatal_error "cannot build library object '$output' from non-libtool objects" - - libobj=$output - func_lo2o "$libobj" - obj=$func_lo2o_result - ;; - *) - libobj= - obj=$output - ;; - esac - - # Delete the old objects. - $opt_dry_run || $RM $obj $libobj - - # Objects from convenience libraries. This assumes - # single-version convenience libraries. Whenever we create - # different ones for PIC/non-PIC, this we'll have to duplicate - # the extraction. - reload_conv_objs= - gentop= - # if reload_cmds runs $LD directly, get rid of -Wl from - # whole_archive_flag_spec and hope we can get by with turning comma - # into space. - case $reload_cmds in - *\$LD[\ \$]*) wl= ;; - esac - if test -n "$convenience"; then - if test -n "$whole_archive_flag_spec"; then - eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" - test -n "$wl" || tmp_whole_archive_flags=`$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` - reload_conv_objs=$reload_objs\ $tmp_whole_archive_flags - else - gentop=$output_objdir/${obj}x - func_append generated " $gentop" - - func_extract_archives $gentop $convenience - reload_conv_objs="$reload_objs $func_extract_archives_result" - fi - fi - - # If we're not building shared, we need to use non_pic_objs - test yes = "$build_libtool_libs" || libobjs=$non_pic_objects - - # Create the old-style object. - reload_objs=$objs$old_deplibs' '`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; /\.lib$/d; $lo2o" | $NL2SP`' '$reload_conv_objs - - output=$obj - func_execute_cmds "$reload_cmds" 'exit $?' - - # Exit if we aren't doing a library object file. - if test -z "$libobj"; then - if test -n "$gentop"; then - func_show_eval '${RM}r "$gentop"' - fi - - exit $EXIT_SUCCESS - fi - - test yes = "$build_libtool_libs" || { - if test -n "$gentop"; then - func_show_eval '${RM}r "$gentop"' - fi - - # Create an invalid libtool object if no PIC, so that we don't - # accidentally link it into a program. - # $show "echo timestamp > $libobj" - # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? - exit $EXIT_SUCCESS - } - - if test -n "$pic_flag" || test default != "$pic_mode"; then - # Only do commands if we really have different PIC objects. - reload_objs="$libobjs $reload_conv_objs" - output=$libobj - func_execute_cmds "$reload_cmds" 'exit $?' - fi - - if test -n "$gentop"; then - func_show_eval '${RM}r "$gentop"' - fi - - exit $EXIT_SUCCESS - ;; - - prog) - case $host in - *cygwin*) func_stripname '' '.exe' "$output" - output=$func_stripname_result.exe;; - esac - test -n "$vinfo" && \ - func_warning "'-version-info' is ignored for programs" - - test -n "$release" && \ - func_warning "'-release' is ignored for programs" - - $preload \ - && test unknown,unknown,unknown = "$dlopen_support,$dlopen_self,$dlopen_self_static" \ - && func_warning "'LT_INIT([dlopen])' not used. Assuming no dlopen support." - - case $host in - *-*-rhapsody* | *-*-darwin1.[012]) - # On Rhapsody replace the C library is the System framework - compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` - finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` - ;; - esac - - case $host in - *-*-darwin*) - # Don't allow lazy linking, it breaks C++ global constructors - # But is supposedly fixed on 10.4 or later (yay!). - if test CXX = "$tagname"; then - case ${MACOSX_DEPLOYMENT_TARGET-10.0} in - 10.[0123]) - func_append compile_command " $wl-bind_at_load" - func_append finalize_command " $wl-bind_at_load" - ;; - esac - fi - # Time to change all our "foo.ltframework" stuff back to "-framework foo" - compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` - finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` - ;; - esac - - - # move library search paths that coincide with paths to not yet - # installed libraries to the beginning of the library search list - new_libs= - for path in $notinst_path; do - case " $new_libs " in - *" -L$path/$objdir "*) ;; - *) - case " $compile_deplibs " in - *" -L$path/$objdir "*) - func_append new_libs " -L$path/$objdir" ;; - esac - ;; - esac - done - for deplib in $compile_deplibs; do - case $deplib in - -L*) - case " $new_libs " in - *" $deplib "*) ;; - *) func_append new_libs " $deplib" ;; - esac - ;; - *) func_append new_libs " $deplib" ;; - esac - done - compile_deplibs=$new_libs - - - func_append compile_command " $compile_deplibs" - func_append finalize_command " $finalize_deplibs" - - if test -n "$rpath$xrpath"; then - # If the user specified any rpath flags, then add them. - for libdir in $rpath $xrpath; do - # This is the magic to use -rpath. - case "$finalize_rpath " in - *" $libdir "*) ;; - *) func_append finalize_rpath " $libdir" ;; - esac - done - fi - - # Now hardcode the library paths - rpath= - hardcode_libdirs= - for libdir in $compile_rpath $finalize_rpath; do - if test -n "$hardcode_libdir_flag_spec"; then - if test -n "$hardcode_libdir_separator"; then - if test -z "$hardcode_libdirs"; then - hardcode_libdirs=$libdir - else - # Just accumulate the unique libdirs. - case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in - *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) - ;; - *) - func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" - ;; - esac - fi - else - eval flag=\"$hardcode_libdir_flag_spec\" - func_append rpath " $flag" - fi - elif test -n "$runpath_var"; then - case "$perm_rpath " in - *" $libdir "*) ;; - *) func_append perm_rpath " $libdir" ;; - esac - fi - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) - testbindir=`$ECHO "$libdir" | $SED -e 's*/lib$*/bin*'` - case :$dllsearchpath: in - *":$libdir:"*) ;; - ::) dllsearchpath=$libdir;; - *) func_append dllsearchpath ":$libdir";; - esac - case :$dllsearchpath: in - *":$testbindir:"*) ;; - ::) dllsearchpath=$testbindir;; - *) func_append dllsearchpath ":$testbindir";; - esac - ;; - esac - done - # Substitute the hardcoded libdirs into the rpath. - if test -n "$hardcode_libdir_separator" && - test -n "$hardcode_libdirs"; then - libdir=$hardcode_libdirs - eval rpath=\" $hardcode_libdir_flag_spec\" - fi - compile_rpath=$rpath - - rpath= - hardcode_libdirs= - for libdir in $finalize_rpath; do - if test -n "$hardcode_libdir_flag_spec"; then - if test -n "$hardcode_libdir_separator"; then - if test -z "$hardcode_libdirs"; then - hardcode_libdirs=$libdir - else - # Just accumulate the unique libdirs. - case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in - *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) - ;; - *) - func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" - ;; - esac - fi - else - eval flag=\"$hardcode_libdir_flag_spec\" - func_append rpath " $flag" - fi - elif test -n "$runpath_var"; then - case "$finalize_perm_rpath " in - *" $libdir "*) ;; - *) func_append finalize_perm_rpath " $libdir" ;; - esac - fi - done - # Substitute the hardcoded libdirs into the rpath. - if test -n "$hardcode_libdir_separator" && - test -n "$hardcode_libdirs"; then - libdir=$hardcode_libdirs - eval rpath=\" $hardcode_libdir_flag_spec\" - fi - finalize_rpath=$rpath - - if test -n "$libobjs" && test yes = "$build_old_libs"; then - # Transform all the library objects into standard objects. - compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` - finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` - fi - - func_generate_dlsyms "$outputname" "@PROGRAM@" false - - # template prelinking step - if test -n "$prelink_cmds"; then - func_execute_cmds "$prelink_cmds" 'exit $?' - fi - - wrappers_required=: - case $host in - *cegcc* | *mingw32ce*) - # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. - wrappers_required=false - ;; - *cygwin* | *mingw* ) - test yes = "$build_libtool_libs" || wrappers_required=false - ;; - *) - if test no = "$need_relink" || test yes != "$build_libtool_libs"; then - wrappers_required=false - fi - ;; - esac - $wrappers_required || { - # Replace the output file specification. - compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` - link_command=$compile_command$compile_rpath - - # We have no uninstalled library dependencies, so finalize right now. - exit_status=0 - func_show_eval "$link_command" 'exit_status=$?' - - if test -n "$postlink_cmds"; then - func_to_tool_file "$output" - postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` - func_execute_cmds "$postlink_cmds" 'exit $?' - fi - - # Delete the generated files. - if test -f "$output_objdir/${outputname}S.$objext"; then - func_show_eval '$RM "$output_objdir/${outputname}S.$objext"' - fi - - exit $exit_status - } - - if test -n "$compile_shlibpath$finalize_shlibpath"; then - compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" - fi - if test -n "$finalize_shlibpath"; then - finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" - fi - - compile_var= - finalize_var= - if test -n "$runpath_var"; then - if test -n "$perm_rpath"; then - # We should set the runpath_var. - rpath= - for dir in $perm_rpath; do - func_append rpath "$dir:" - done - compile_var="$runpath_var=\"$rpath\$$runpath_var\" " - fi - if test -n "$finalize_perm_rpath"; then - # We should set the runpath_var. - rpath= - for dir in $finalize_perm_rpath; do - func_append rpath "$dir:" - done - finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " - fi - fi - - if test yes = "$no_install"; then - # We don't need to create a wrapper script. - link_command=$compile_var$compile_command$compile_rpath - # Replace the output file specification. - link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` - # Delete the old output file. - $opt_dry_run || $RM $output - # Link the executable and exit - func_show_eval "$link_command" 'exit $?' - - if test -n "$postlink_cmds"; then - func_to_tool_file "$output" - postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` - func_execute_cmds "$postlink_cmds" 'exit $?' - fi - - exit $EXIT_SUCCESS - fi - - case $hardcode_action,$fast_install in - relink,*) - # Fast installation is not supported - link_command=$compile_var$compile_command$compile_rpath - relink_command=$finalize_var$finalize_command$finalize_rpath - - func_warning "this platform does not like uninstalled shared libraries" - func_warning "'$output' will be relinked during installation" - ;; - *,yes) - link_command=$finalize_var$compile_command$finalize_rpath - relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` - ;; - *,no) - link_command=$compile_var$compile_command$compile_rpath - relink_command=$finalize_var$finalize_command$finalize_rpath - ;; - *,needless) - link_command=$finalize_var$compile_command$finalize_rpath - relink_command= - ;; - esac - - # Replace the output file specification. - link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` - - # Delete the old output files. - $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname - - func_show_eval "$link_command" 'exit $?' - - if test -n "$postlink_cmds"; then - func_to_tool_file "$output_objdir/$outputname" - postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` - func_execute_cmds "$postlink_cmds" 'exit $?' - fi - - # Now create the wrapper script. - func_verbose "creating $output" - - # Quote the relink command for shipping. - if test -n "$relink_command"; then - # Preserve any variables that may affect compiler behavior - for var in $variables_saved_for_relink; do - if eval test -z \"\${$var+set}\"; then - relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" - elif eval var_value=\$$var; test -z "$var_value"; then - relink_command="$var=; export $var; $relink_command" - else - func_quote_for_eval "$var_value" - relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" - fi - done - relink_command="(cd `pwd`; $relink_command)" - relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` - fi - - # Only actually do things if not in dry run mode. - $opt_dry_run || { - # win32 will think the script is a binary if it has - # a .exe suffix, so we strip it off here. - case $output in - *.exe) func_stripname '' '.exe' "$output" - output=$func_stripname_result ;; - esac - # test for cygwin because mv fails w/o .exe extensions - case $host in - *cygwin*) - exeext=.exe - func_stripname '' '.exe' "$outputname" - outputname=$func_stripname_result ;; - *) exeext= ;; - esac - case $host in - *cygwin* | *mingw* ) - func_dirname_and_basename "$output" "" "." - output_name=$func_basename_result - output_path=$func_dirname_result - cwrappersource=$output_path/$objdir/lt-$output_name.c - cwrapper=$output_path/$output_name.exe - $RM $cwrappersource $cwrapper - trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 - - func_emit_cwrapperexe_src > $cwrappersource - - # The wrapper executable is built using the $host compiler, - # because it contains $host paths and files. If cross- - # compiling, it, like the target executable, must be - # executed on the $host or under an emulation environment. - $opt_dry_run || { - $LTCC $LTCFLAGS -o $cwrapper $cwrappersource - $STRIP $cwrapper - } - - # Now, create the wrapper script for func_source use: - func_ltwrapper_scriptname $cwrapper - $RM $func_ltwrapper_scriptname_result - trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 - $opt_dry_run || { - # note: this script will not be executed, so do not chmod. - if test "x$build" = "x$host"; then - $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result - else - func_emit_wrapper no > $func_ltwrapper_scriptname_result - fi - } - ;; - * ) - $RM $output - trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 - - func_emit_wrapper no > $output - chmod +x $output - ;; - esac - } - exit $EXIT_SUCCESS - ;; - esac - - # See if we need to build an old-fashioned archive. - for oldlib in $oldlibs; do - - case $build_libtool_libs in - convenience) - oldobjs="$libobjs_save $symfileobj" - addlibs=$convenience - build_libtool_libs=no - ;; - module) - oldobjs=$libobjs_save - addlibs=$old_convenience - build_libtool_libs=no - ;; - *) - oldobjs="$old_deplibs $non_pic_objects" - $preload && test -f "$symfileobj" \ - && func_append oldobjs " $symfileobj" - addlibs=$old_convenience - ;; - esac - - if test -n "$addlibs"; then - gentop=$output_objdir/${outputname}x - func_append generated " $gentop" - - func_extract_archives $gentop $addlibs - func_append oldobjs " $func_extract_archives_result" - fi - - # Do each command in the archive commands. - if test -n "$old_archive_from_new_cmds" && test yes = "$build_libtool_libs"; then - cmds=$old_archive_from_new_cmds - else - - # Add any objects from preloaded convenience libraries - if test -n "$dlprefiles"; then - gentop=$output_objdir/${outputname}x - func_append generated " $gentop" - - func_extract_archives $gentop $dlprefiles - func_append oldobjs " $func_extract_archives_result" - fi - - # POSIX demands no paths to be encoded in archives. We have - # to avoid creating archives with duplicate basenames if we - # might have to extract them afterwards, e.g., when creating a - # static archive out of a convenience library, or when linking - # the entirety of a libtool archive into another (currently - # not supported by libtool). - if (for obj in $oldobjs - do - func_basename "$obj" - $ECHO "$func_basename_result" - done | sort | sort -uc >/dev/null 2>&1); then - : - else - echo "copying selected object files to avoid basename conflicts..." - gentop=$output_objdir/${outputname}x - func_append generated " $gentop" - func_mkdir_p "$gentop" - save_oldobjs=$oldobjs - oldobjs= - counter=1 - for obj in $save_oldobjs - do - func_basename "$obj" - objbase=$func_basename_result - case " $oldobjs " in - " ") oldobjs=$obj ;; - *[\ /]"$objbase "*) - while :; do - # Make sure we don't pick an alternate name that also - # overlaps. - newobj=lt$counter-$objbase - func_arith $counter + 1 - counter=$func_arith_result - case " $oldobjs " in - *[\ /]"$newobj "*) ;; - *) if test ! -f "$gentop/$newobj"; then break; fi ;; - esac - done - func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" - func_append oldobjs " $gentop/$newobj" - ;; - *) func_append oldobjs " $obj" ;; - esac - done - fi - func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 - tool_oldlib=$func_to_tool_file_result - eval cmds=\"$old_archive_cmds\" - - func_len " $cmds" - len=$func_len_result - if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then - cmds=$old_archive_cmds - elif test -n "$archiver_list_spec"; then - func_verbose "using command file archive linking..." - for obj in $oldobjs - do - func_to_tool_file "$obj" - $ECHO "$func_to_tool_file_result" - done > $output_objdir/$libname.libcmd - func_to_tool_file "$output_objdir/$libname.libcmd" - oldobjs=" $archiver_list_spec$func_to_tool_file_result" - cmds=$old_archive_cmds - else - # the command line is too long to link in one step, link in parts - func_verbose "using piecewise archive linking..." - save_RANLIB=$RANLIB - RANLIB=: - objlist= - concat_cmds= - save_oldobjs=$oldobjs - oldobjs= - # Is there a better way of finding the last object in the list? - for obj in $save_oldobjs - do - last_oldobj=$obj - done - eval test_cmds=\"$old_archive_cmds\" - func_len " $test_cmds" - len0=$func_len_result - len=$len0 - for obj in $save_oldobjs - do - func_len " $obj" - func_arith $len + $func_len_result - len=$func_arith_result - func_append objlist " $obj" - if test "$len" -lt "$max_cmd_len"; then - : - else - # the above command should be used before it gets too long - oldobjs=$objlist - if test "$obj" = "$last_oldobj"; then - RANLIB=$save_RANLIB - fi - test -z "$concat_cmds" || concat_cmds=$concat_cmds~ - eval concat_cmds=\"\$concat_cmds$old_archive_cmds\" - objlist= - len=$len0 - fi - done - RANLIB=$save_RANLIB - oldobjs=$objlist - if test -z "$oldobjs"; then - eval cmds=\"\$concat_cmds\" - else - eval cmds=\"\$concat_cmds~\$old_archive_cmds\" - fi - fi - fi - func_execute_cmds "$cmds" 'exit $?' - done - - test -n "$generated" && \ - func_show_eval "${RM}r$generated" - - # Now create the libtool archive. - case $output in - *.la) - old_library= - test yes = "$build_old_libs" && old_library=$libname.$libext - func_verbose "creating $output" - - # Preserve any variables that may affect compiler behavior - for var in $variables_saved_for_relink; do - if eval test -z \"\${$var+set}\"; then - relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" - elif eval var_value=\$$var; test -z "$var_value"; then - relink_command="$var=; export $var; $relink_command" - else - func_quote_for_eval "$var_value" - relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" - fi - done - # Quote the link command for shipping. - relink_command="(cd `pwd`; $SHELL \"$progpath\" $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" - relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` - if test yes = "$hardcode_automatic"; then - relink_command= - fi - - # Only create the output if not a dry run. - $opt_dry_run || { - for installed in no yes; do - if test yes = "$installed"; then - if test -z "$install_libdir"; then - break - fi - output=$output_objdir/${outputname}i - # Replace all uninstalled libtool libraries with the installed ones - newdependency_libs= - for deplib in $dependency_libs; do - case $deplib in - *.la) - func_basename "$deplib" - name=$func_basename_result - func_resolve_sysroot "$deplib" - eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` - test -z "$libdir" && \ - func_fatal_error "'$deplib' is not a valid libtool archive" - func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" - ;; - -L*) - func_stripname -L '' "$deplib" - func_replace_sysroot "$func_stripname_result" - func_append newdependency_libs " -L$func_replace_sysroot_result" - ;; - -R*) - func_stripname -R '' "$deplib" - func_replace_sysroot "$func_stripname_result" - func_append newdependency_libs " -R$func_replace_sysroot_result" - ;; - *) func_append newdependency_libs " $deplib" ;; - esac - done - dependency_libs=$newdependency_libs - newdlfiles= - - for lib in $dlfiles; do - case $lib in - *.la) - func_basename "$lib" - name=$func_basename_result - eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib` - test -z "$libdir" && \ - func_fatal_error "'$lib' is not a valid libtool archive" - func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" - ;; - *) func_append newdlfiles " $lib" ;; - esac - done - dlfiles=$newdlfiles - newdlprefiles= - for lib in $dlprefiles; do - case $lib in - *.la) - # Only pass preopened files to the pseudo-archive (for - # eventual linking with the app. that links it) if we - # didn't already link the preopened objects directly into - # the library: - func_basename "$lib" - name=$func_basename_result - eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib` - test -z "$libdir" && \ - func_fatal_error "'$lib' is not a valid libtool archive" - func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" - ;; - esac - done - dlprefiles=$newdlprefiles - else - newdlfiles= - for lib in $dlfiles; do - case $lib in - [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;; - *) abs=`pwd`"/$lib" ;; - esac - func_append newdlfiles " $abs" - done - dlfiles=$newdlfiles - newdlprefiles= - for lib in $dlprefiles; do - case $lib in - [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;; - *) abs=`pwd`"/$lib" ;; - esac - func_append newdlprefiles " $abs" - done - dlprefiles=$newdlprefiles - fi - $RM $output - # place dlname in correct position for cygwin - # In fact, it would be nice if we could use this code for all target - # systems that can't hard-code library paths into their executables - # and that have no shared library path variable independent of PATH, - # but it turns out we can't easily determine that from inspecting - # libtool variables, so we have to hard-code the OSs to which it - # applies here; at the moment, that means platforms that use the PE - # object format with DLL files. See the long comment at the top of - # tests/bindir.at for full details. - tdlname=$dlname - case $host,$output,$installed,$module,$dlname in - *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) - # If a -bindir argument was supplied, place the dll there. - if test -n "$bindir"; then - func_relative_path "$install_libdir" "$bindir" - tdlname=$func_relative_path_result/$dlname - else - # Otherwise fall back on heuristic. - tdlname=../bin/$dlname - fi - ;; - esac - $ECHO > $output "\ -# $outputname - a libtool library file -# Generated by $PROGRAM (GNU $PACKAGE) $VERSION -# -# Please DO NOT delete this file! -# It is necessary for linking the library. - -# The name that we can dlopen(3). -dlname='$tdlname' - -# Names of this library. -library_names='$library_names' - -# The name of the static archive. -old_library='$old_library' - -# Linker flags that cannot go in dependency_libs. -inherited_linker_flags='$new_inherited_linker_flags' - -# Libraries that this one depends upon. -dependency_libs='$dependency_libs' - -# Names of additional weak libraries provided by this library -weak_library_names='$weak_libs' - -# Version information for $libname. -current=$current -age=$age -revision=$revision - -# Is this an already installed library? -installed=$installed - -# Should we warn about portability when linking against -modules? -shouldnotlink=$module - -# Files to dlopen/dlpreopen -dlopen='$dlfiles' -dlpreopen='$dlprefiles' - -# Directory that this library needs to be installed in: -libdir='$install_libdir'" - if test no,yes = "$installed,$need_relink"; then - $ECHO >> $output "\ -relink_command=\"$relink_command\"" - fi - done - } - - # Do a symbolic link so that the libtool archive can be found in - # LD_LIBRARY_PATH before the program is installed. - func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' - ;; - esac - exit $EXIT_SUCCESS -} - -if test link = "$opt_mode" || test relink = "$opt_mode"; then - func_mode_link ${1+"$@"} -fi - - -# func_mode_uninstall arg... -func_mode_uninstall () -{ - $debug_cmd - - RM=$nonopt - files= - rmforce=false - exit_status=0 - - # This variable tells wrapper scripts just to set variables rather - # than running their programs. - libtool_install_magic=$magic - - for arg - do - case $arg in - -f) func_append RM " $arg"; rmforce=: ;; - -*) func_append RM " $arg" ;; - *) func_append files " $arg" ;; - esac - done - - test -z "$RM" && \ - func_fatal_help "you must specify an RM program" - - rmdirs= - - for file in $files; do - func_dirname "$file" "" "." - dir=$func_dirname_result - if test . = "$dir"; then - odir=$objdir - else - odir=$dir/$objdir - fi - func_basename "$file" - name=$func_basename_result - test uninstall = "$opt_mode" && odir=$dir - - # Remember odir for removal later, being careful to avoid duplicates - if test clean = "$opt_mode"; then - case " $rmdirs " in - *" $odir "*) ;; - *) func_append rmdirs " $odir" ;; - esac - fi - - # Don't error if the file doesn't exist and rm -f was used. - if { test -L "$file"; } >/dev/null 2>&1 || - { test -h "$file"; } >/dev/null 2>&1 || - test -f "$file"; then - : - elif test -d "$file"; then - exit_status=1 - continue - elif $rmforce; then - continue - fi - - rmfiles=$file - - case $name in - *.la) - # Possibly a libtool archive, so verify it. - if func_lalib_p "$file"; then - func_source $dir/$name - - # Delete the libtool libraries and symlinks. - for n in $library_names; do - func_append rmfiles " $odir/$n" - done - test -n "$old_library" && func_append rmfiles " $odir/$old_library" - - case $opt_mode in - clean) - case " $library_names " in - *" $dlname "*) ;; - *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; - esac - test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" - ;; - uninstall) - if test -n "$library_names"; then - # Do each command in the postuninstall commands. - func_execute_cmds "$postuninstall_cmds" '$rmforce || exit_status=1' - fi - - if test -n "$old_library"; then - # Do each command in the old_postuninstall commands. - func_execute_cmds "$old_postuninstall_cmds" '$rmforce || exit_status=1' - fi - # FIXME: should reinstall the best remaining shared library. - ;; - esac - fi - ;; - - *.lo) - # Possibly a libtool object, so verify it. - if func_lalib_p "$file"; then - - # Read the .lo file - func_source $dir/$name - - # Add PIC object to the list of files to remove. - if test -n "$pic_object" && test none != "$pic_object"; then - func_append rmfiles " $dir/$pic_object" - fi - - # Add non-PIC object to the list of files to remove. - if test -n "$non_pic_object" && test none != "$non_pic_object"; then - func_append rmfiles " $dir/$non_pic_object" - fi - fi - ;; - - *) - if test clean = "$opt_mode"; then - noexename=$name - case $file in - *.exe) - func_stripname '' '.exe' "$file" - file=$func_stripname_result - func_stripname '' '.exe' "$name" - noexename=$func_stripname_result - # $file with .exe has already been added to rmfiles, - # add $file without .exe - func_append rmfiles " $file" - ;; - esac - # Do a test to see if this is a libtool program. - if func_ltwrapper_p "$file"; then - if func_ltwrapper_executable_p "$file"; then - func_ltwrapper_scriptname "$file" - relink_command= - func_source $func_ltwrapper_scriptname_result - func_append rmfiles " $func_ltwrapper_scriptname_result" - else - relink_command= - func_source $dir/$noexename - fi - - # note $name still contains .exe if it was in $file originally - # as does the version of $file that was added into $rmfiles - func_append rmfiles " $odir/$name $odir/${name}S.$objext" - if test yes = "$fast_install" && test -n "$relink_command"; then - func_append rmfiles " $odir/lt-$name" - fi - if test "X$noexename" != "X$name"; then - func_append rmfiles " $odir/lt-$noexename.c" - fi - fi - fi - ;; - esac - func_show_eval "$RM $rmfiles" 'exit_status=1' - done - - # Try to remove the $objdir's in the directories where we deleted files - for dir in $rmdirs; do - if test -d "$dir"; then - func_show_eval "rmdir $dir >/dev/null 2>&1" - fi - done - - exit $exit_status -} - -if test uninstall = "$opt_mode" || test clean = "$opt_mode"; then - func_mode_uninstall ${1+"$@"} -fi - -test -z "$opt_mode" && { - help=$generic_help - func_fatal_help "you must specify a MODE" -} - -test -z "$exec_cmd" && \ - func_fatal_help "invalid operation mode '$opt_mode'" - -if test -n "$exec_cmd"; then - eval exec "$exec_cmd" - exit $EXIT_FAILURE -fi - -exit $exit_status - - -# The TAGs below are defined such that we never get into a situation -# where we disable both kinds of libraries. Given conflicting -# choices, we go for a static library, that is the most portable, -# since we can't tell whether shared libraries were disabled because -# the user asked for that or because the platform doesn't support -# them. This is particularly important on AIX, because we don't -# support having both static and shared libraries enabled at the same -# time on that platform, so we default to a shared-only configuration. -# If a disable-shared tag is given, we'll fallback to a static-only -# configuration. But we'll never go from static-only to shared-only. - -# ### BEGIN LIBTOOL TAG CONFIG: disable-shared -build_libtool_libs=no -build_old_libs=yes -# ### END LIBTOOL TAG CONFIG: disable-shared - -# ### BEGIN LIBTOOL TAG CONFIG: disable-static -build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` -# ### END LIBTOOL TAG CONFIG: disable-static - -# Local Variables: -# mode:shell-script -# sh-indentation:2 -# End: diff --git a/Extended/libwebp/m4/ax_pthread.m4 b/Extended/libwebp/m4/ax_pthread.m4 deleted file mode 100644 index d383ad5..0000000 --- a/Extended/libwebp/m4/ax_pthread.m4 +++ /dev/null @@ -1,332 +0,0 @@ -# =========================================================================== -# http://www.gnu.org/software/autoconf-archive/ax_pthread.html -# =========================================================================== -# -# SYNOPSIS -# -# AX_PTHREAD([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]]) -# -# DESCRIPTION -# -# This macro figures out how to build C programs using POSIX threads. It -# sets the PTHREAD_LIBS output variable to the threads library and linker -# flags, and the PTHREAD_CFLAGS output variable to any special C compiler -# flags that are needed. (The user can also force certain compiler -# flags/libs to be tested by setting these environment variables.) -# -# Also sets PTHREAD_CC to any special C compiler that is needed for -# multi-threaded programs (defaults to the value of CC otherwise). (This -# is necessary on AIX to use the special cc_r compiler alias.) -# -# NOTE: You are assumed to not only compile your program with these flags, -# but also link it with them as well. e.g. you should link with -# $PTHREAD_CC $CFLAGS $PTHREAD_CFLAGS $LDFLAGS ... $PTHREAD_LIBS $LIBS -# -# If you are only building threads programs, you may wish to use these -# variables in your default LIBS, CFLAGS, and CC: -# -# LIBS="$PTHREAD_LIBS $LIBS" -# CFLAGS="$CFLAGS $PTHREAD_CFLAGS" -# CC="$PTHREAD_CC" -# -# In addition, if the PTHREAD_CREATE_JOINABLE thread-attribute constant -# has a nonstandard name, defines PTHREAD_CREATE_JOINABLE to that name -# (e.g. PTHREAD_CREATE_UNDETACHED on AIX). -# -# Also HAVE_PTHREAD_PRIO_INHERIT is defined if pthread is found and the -# PTHREAD_PRIO_INHERIT symbol is defined when compiling with -# PTHREAD_CFLAGS. -# -# ACTION-IF-FOUND is a list of shell commands to run if a threads library -# is found, and ACTION-IF-NOT-FOUND is a list of commands to run it if it -# is not found. If ACTION-IF-FOUND is not specified, the default action -# will define HAVE_PTHREAD. -# -# Please let the authors know if this macro fails on any platform, or if -# you have any other suggestions or comments. This macro was based on work -# by SGJ on autoconf scripts for FFTW (http://www.fftw.org/) (with help -# from M. Frigo), as well as ac_pthread and hb_pthread macros posted by -# Alejandro Forero Cuervo to the autoconf macro repository. We are also -# grateful for the helpful feedback of numerous users. -# -# Updated for Autoconf 2.68 by Daniel Richard G. -# -# LICENSE -# -# Copyright (c) 2008 Steven G. Johnson -# Copyright (c) 2011 Daniel Richard G. -# -# This program is free software: you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the -# Free Software Foundation, either version 3 of the License, or (at your -# option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General -# Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program. If not, see . -# -# As a special exception, the respective Autoconf Macro's copyright owner -# gives unlimited permission to copy, distribute and modify the configure -# scripts that are the output of Autoconf when processing the Macro. You -# need not follow the terms of the GNU General Public License when using -# or distributing such scripts, even though portions of the text of the -# Macro appear in them. The GNU General Public License (GPL) does govern -# all other use of the material that constitutes the Autoconf Macro. -# -# This special exception to the GPL applies to versions of the Autoconf -# Macro released by the Autoconf Archive. When you make and distribute a -# modified version of the Autoconf Macro, you may extend this special -# exception to the GPL to apply to your modified version as well. - -#serial 21 - -AU_ALIAS([ACX_PTHREAD], [AX_PTHREAD]) -AC_DEFUN([AX_PTHREAD], [ -AC_REQUIRE([AC_CANONICAL_HOST]) -AC_LANG_PUSH([C]) -ax_pthread_ok=no - -# We used to check for pthread.h first, but this fails if pthread.h -# requires special compiler flags (e.g. on True64 or Sequent). -# It gets checked for in the link test anyway. - -# First of all, check if the user has set any of the PTHREAD_LIBS, -# etcetera environment variables, and if threads linking works using -# them: -if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then - save_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS $PTHREAD_CFLAGS" - save_LIBS="$LIBS" - LIBS="$PTHREAD_LIBS $LIBS" - AC_MSG_CHECKING([for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS]) - AC_TRY_LINK_FUNC([pthread_join], [ax_pthread_ok=yes]) - AC_MSG_RESULT([$ax_pthread_ok]) - if test x"$ax_pthread_ok" = xno; then - PTHREAD_LIBS="" - PTHREAD_CFLAGS="" - fi - LIBS="$save_LIBS" - CFLAGS="$save_CFLAGS" -fi - -# We must check for the threads library under a number of different -# names; the ordering is very important because some systems -# (e.g. DEC) have both -lpthread and -lpthreads, where one of the -# libraries is broken (non-POSIX). - -# Create a list of thread flags to try. Items starting with a "-" are -# C compiler flags, and other items are library names, except for "none" -# which indicates that we try without any flags at all, and "pthread-config" -# which is a program returning the flags for the Pth emulation library. - -ax_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config" - -# The ordering *is* (sometimes) important. Some notes on the -# individual items follow: - -# pthreads: AIX (must check this before -lpthread) -# none: in case threads are in libc; should be tried before -Kthread and -# other compiler flags to prevent continual compiler warnings -# -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h) -# -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able) -# lthread: LinuxThreads port on FreeBSD (also preferred to -pthread) -# -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads) -# -pthreads: Solaris/gcc -# -mthreads: Mingw32/gcc, Lynx/gcc -# -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it -# doesn't hurt to check since this sometimes defines pthreads too; -# also defines -D_REENTRANT) -# ... -mt is also the pthreads flag for HP/aCC -# pthread: Linux, etcetera -# --thread-safe: KAI C++ -# pthread-config: use pthread-config program (for GNU Pth library) - -case ${host_os} in - solaris*) - - # On Solaris (at least, for some versions), libc contains stubbed - # (non-functional) versions of the pthreads routines, so link-based - # tests will erroneously succeed. (We need to link with -pthreads/-mt/ - # -lpthread.) (The stubs are missing pthread_cleanup_push, or rather - # a function called by this macro, so we could check for that, but - # who knows whether they'll stub that too in a future libc.) So, - # we'll just look for -pthreads and -lpthread first: - - ax_pthread_flags="-pthreads pthread -mt -pthread $ax_pthread_flags" - ;; - - darwin*) - ax_pthread_flags="-pthread $ax_pthread_flags" - ;; -esac - -# Clang doesn't consider unrecognized options an error unless we specify -# -Werror. We throw in some extra Clang-specific options to ensure that -# this doesn't happen for GCC, which also accepts -Werror. - -AC_MSG_CHECKING([if compiler needs -Werror to reject unknown flags]) -save_CFLAGS="$CFLAGS" -ax_pthread_extra_flags="-Werror" -CFLAGS="$CFLAGS $ax_pthread_extra_flags -Wunknown-warning-option -Wsizeof-array-argument" -AC_COMPILE_IFELSE([AC_LANG_PROGRAM([int foo(void);],[foo()])], - [AC_MSG_RESULT([yes])], - [ax_pthread_extra_flags= - AC_MSG_RESULT([no])]) -CFLAGS="$save_CFLAGS" - -if test x"$ax_pthread_ok" = xno; then -for flag in $ax_pthread_flags; do - - case $flag in - none) - AC_MSG_CHECKING([whether pthreads work without any flags]) - ;; - - -*) - AC_MSG_CHECKING([whether pthreads work with $flag]) - PTHREAD_CFLAGS="$flag" - ;; - - pthread-config) - AC_CHECK_PROG([ax_pthread_config], [pthread-config], [yes], [no]) - if test x"$ax_pthread_config" = xno; then continue; fi - PTHREAD_CFLAGS="`pthread-config --cflags`" - PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`" - ;; - - *) - AC_MSG_CHECKING([for the pthreads library -l$flag]) - PTHREAD_LIBS="-l$flag" - ;; - esac - - save_LIBS="$LIBS" - save_CFLAGS="$CFLAGS" - LIBS="$PTHREAD_LIBS $LIBS" - CFLAGS="$CFLAGS $PTHREAD_CFLAGS $ax_pthread_extra_flags" - - # Check for various functions. We must include pthread.h, - # since some functions may be macros. (On the Sequent, we - # need a special flag -Kthread to make this header compile.) - # We check for pthread_join because it is in -lpthread on IRIX - # while pthread_create is in libc. We check for pthread_attr_init - # due to DEC craziness with -lpthreads. We check for - # pthread_cleanup_push because it is one of the few pthread - # functions on Solaris that doesn't have a non-functional libc stub. - # We try pthread_create on general principles. - AC_LINK_IFELSE([AC_LANG_PROGRAM([#include - static void routine(void *a) { a = 0; } - static void *start_routine(void *a) { return a; }], - [pthread_t th; pthread_attr_t attr; - pthread_create(&th, 0, start_routine, 0); - pthread_join(th, 0); - pthread_attr_init(&attr); - pthread_cleanup_push(routine, 0); - pthread_cleanup_pop(0) /* ; */])], - [ax_pthread_ok=yes], - []) - - LIBS="$save_LIBS" - CFLAGS="$save_CFLAGS" - - AC_MSG_RESULT([$ax_pthread_ok]) - if test "x$ax_pthread_ok" = xyes; then - break; - fi - - PTHREAD_LIBS="" - PTHREAD_CFLAGS="" -done -fi - -# Various other checks: -if test "x$ax_pthread_ok" = xyes; then - save_LIBS="$LIBS" - LIBS="$PTHREAD_LIBS $LIBS" - save_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS $PTHREAD_CFLAGS" - - # Detect AIX lossage: JOINABLE attribute is called UNDETACHED. - AC_MSG_CHECKING([for joinable pthread attribute]) - attr_name=unknown - for attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do - AC_LINK_IFELSE([AC_LANG_PROGRAM([#include ], - [int attr = $attr; return attr /* ; */])], - [attr_name=$attr; break], - []) - done - AC_MSG_RESULT([$attr_name]) - if test "$attr_name" != PTHREAD_CREATE_JOINABLE; then - AC_DEFINE_UNQUOTED([PTHREAD_CREATE_JOINABLE], [$attr_name], - [Define to necessary symbol if this constant - uses a non-standard name on your system.]) - fi - - AC_MSG_CHECKING([if more special flags are required for pthreads]) - flag=no - case ${host_os} in - aix* | freebsd* | darwin*) flag="-D_THREAD_SAFE";; - osf* | hpux*) flag="-D_REENTRANT";; - solaris*) - if test "$GCC" = "yes"; then - flag="-D_REENTRANT" - else - # TODO: What about Clang on Solaris? - flag="-mt -D_REENTRANT" - fi - ;; - esac - AC_MSG_RESULT([$flag]) - if test "x$flag" != xno; then - PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS" - fi - - AC_CACHE_CHECK([for PTHREAD_PRIO_INHERIT], - [ax_cv_PTHREAD_PRIO_INHERIT], [ - AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include ]], - [[int i = PTHREAD_PRIO_INHERIT;]])], - [ax_cv_PTHREAD_PRIO_INHERIT=yes], - [ax_cv_PTHREAD_PRIO_INHERIT=no]) - ]) - AS_IF([test "x$ax_cv_PTHREAD_PRIO_INHERIT" = "xyes"], - [AC_DEFINE([HAVE_PTHREAD_PRIO_INHERIT], [1], [Have PTHREAD_PRIO_INHERIT.])]) - - LIBS="$save_LIBS" - CFLAGS="$save_CFLAGS" - - # More AIX lossage: compile with *_r variant - if test "x$GCC" != xyes; then - case $host_os in - aix*) - AS_CASE(["x/$CC"], - [x*/c89|x*/c89_128|x*/c99|x*/c99_128|x*/cc|x*/cc128|x*/xlc|x*/xlc_v6|x*/xlc128|x*/xlc128_v6], - [#handle absolute path differently from PATH based program lookup - AS_CASE(["x$CC"], - [x/*], - [AS_IF([AS_EXECUTABLE_P([${CC}_r])],[PTHREAD_CC="${CC}_r"])], - [AC_CHECK_PROGS([PTHREAD_CC],[${CC}_r],[$CC])])]) - ;; - esac - fi -fi - -test -n "$PTHREAD_CC" || PTHREAD_CC="$CC" - -AC_SUBST([PTHREAD_LIBS]) -AC_SUBST([PTHREAD_CFLAGS]) -AC_SUBST([PTHREAD_CC]) - -# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: -if test x"$ax_pthread_ok" = xyes; then - ifelse([$1],,[AC_DEFINE([HAVE_PTHREAD],[1],[Define if you have POSIX threads libraries and header files.])],[$1]) - : -else - ax_pthread_ok=no - $2 -fi -AC_LANG_POP -])dnl AX_PTHREAD diff --git a/Extended/libwebp/m4/libtool.m4 b/Extended/libwebp/m4/libtool.m4 deleted file mode 100644 index c81e669..0000000 --- a/Extended/libwebp/m4/libtool.m4 +++ /dev/null @@ -1,8388 +0,0 @@ -# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- -# -# Copyright (C) 1996-2001, 2003-2015 Free Software Foundation, Inc. -# Written by Gordon Matzigkeit, 1996 -# -# This file is free software; the Free Software Foundation gives -# unlimited permission to copy and/or distribute it, with or without -# modifications, as long as this notice is preserved. - -m4_define([_LT_COPYING], [dnl -# Copyright (C) 2014 Free Software Foundation, Inc. -# This is free software; see the source for copying conditions. There is NO -# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -# GNU Libtool is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of of the License, or -# (at your option) any later version. -# -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program or library that is built -# using GNU Libtool, you may include this file under the same -# distribution terms that you use for the rest of that program. -# -# GNU Libtool is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -]) - -# serial 58 LT_INIT - - -# LT_PREREQ(VERSION) -# ------------------ -# Complain and exit if this libtool version is less that VERSION. -m4_defun([LT_PREREQ], -[m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1, - [m4_default([$3], - [m4_fatal([Libtool version $1 or higher is required], - 63)])], - [$2])]) - - -# _LT_CHECK_BUILDDIR -# ------------------ -# Complain if the absolute build directory name contains unusual characters -m4_defun([_LT_CHECK_BUILDDIR], -[case `pwd` in - *\ * | *\ *) - AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;; -esac -]) - - -# LT_INIT([OPTIONS]) -# ------------------ -AC_DEFUN([LT_INIT], -[AC_PREREQ([2.62])dnl We use AC_PATH_PROGS_FEATURE_CHECK -AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl -AC_BEFORE([$0], [LT_LANG])dnl -AC_BEFORE([$0], [LT_OUTPUT])dnl -AC_BEFORE([$0], [LTDL_INIT])dnl -m4_require([_LT_CHECK_BUILDDIR])dnl - -dnl Autoconf doesn't catch unexpanded LT_ macros by default: -m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl -m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl -dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4 -dnl unless we require an AC_DEFUNed macro: -AC_REQUIRE([LTOPTIONS_VERSION])dnl -AC_REQUIRE([LTSUGAR_VERSION])dnl -AC_REQUIRE([LTVERSION_VERSION])dnl -AC_REQUIRE([LTOBSOLETE_VERSION])dnl -m4_require([_LT_PROG_LTMAIN])dnl - -_LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}]) - -dnl Parse OPTIONS -_LT_SET_OPTIONS([$0], [$1]) - -# This can be used to rebuild libtool when needed -LIBTOOL_DEPS=$ltmain - -# Always use our own libtool. -LIBTOOL='$(SHELL) $(top_builddir)/libtool' -AC_SUBST(LIBTOOL)dnl - -_LT_SETUP - -# Only expand once: -m4_define([LT_INIT]) -])# LT_INIT - -# Old names: -AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT]) -AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_PROG_LIBTOOL], []) -dnl AC_DEFUN([AM_PROG_LIBTOOL], []) - - -# _LT_PREPARE_CC_BASENAME -# ----------------------- -m4_defun([_LT_PREPARE_CC_BASENAME], [ -# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. -func_cc_basename () -{ - for cc_temp in @S|@*""; do - case $cc_temp in - compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; - distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; - \-*) ;; - *) break;; - esac - done - func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` -} -])# _LT_PREPARE_CC_BASENAME - - -# _LT_CC_BASENAME(CC) -# ------------------- -# It would be clearer to call AC_REQUIREs from _LT_PREPARE_CC_BASENAME, -# but that macro is also expanded into generated libtool script, which -# arranges for $SED and $ECHO to be set by different means. -m4_defun([_LT_CC_BASENAME], -[m4_require([_LT_PREPARE_CC_BASENAME])dnl -AC_REQUIRE([_LT_DECL_SED])dnl -AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl -func_cc_basename $1 -cc_basename=$func_cc_basename_result -]) - - -# _LT_FILEUTILS_DEFAULTS -# ---------------------- -# It is okay to use these file commands and assume they have been set -# sensibly after 'm4_require([_LT_FILEUTILS_DEFAULTS])'. -m4_defun([_LT_FILEUTILS_DEFAULTS], -[: ${CP="cp -f"} -: ${MV="mv -f"} -: ${RM="rm -f"} -])# _LT_FILEUTILS_DEFAULTS - - -# _LT_SETUP -# --------- -m4_defun([_LT_SETUP], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -AC_REQUIRE([AC_CANONICAL_BUILD])dnl -AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl -AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl - -_LT_DECL([], [PATH_SEPARATOR], [1], [The PATH separator for the build system])dnl -dnl -_LT_DECL([], [host_alias], [0], [The host system])dnl -_LT_DECL([], [host], [0])dnl -_LT_DECL([], [host_os], [0])dnl -dnl -_LT_DECL([], [build_alias], [0], [The build system])dnl -_LT_DECL([], [build], [0])dnl -_LT_DECL([], [build_os], [0])dnl -dnl -AC_REQUIRE([AC_PROG_CC])dnl -AC_REQUIRE([LT_PATH_LD])dnl -AC_REQUIRE([LT_PATH_NM])dnl -dnl -AC_REQUIRE([AC_PROG_LN_S])dnl -test -z "$LN_S" && LN_S="ln -s" -_LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl -dnl -AC_REQUIRE([LT_CMD_MAX_LEN])dnl -_LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl -_LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl -dnl -m4_require([_LT_FILEUTILS_DEFAULTS])dnl -m4_require([_LT_CHECK_SHELL_FEATURES])dnl -m4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl -m4_require([_LT_CMD_RELOAD])dnl -m4_require([_LT_CHECK_MAGIC_METHOD])dnl -m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl -m4_require([_LT_CMD_OLD_ARCHIVE])dnl -m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl -m4_require([_LT_WITH_SYSROOT])dnl -m4_require([_LT_CMD_TRUNCATE])dnl - -_LT_CONFIG_LIBTOOL_INIT([ -# See if we are running on zsh, and set the options that allow our -# commands through without removal of \ escapes INIT. -if test -n "\${ZSH_VERSION+set}"; then - setopt NO_GLOB_SUBST -fi -]) -if test -n "${ZSH_VERSION+set}"; then - setopt NO_GLOB_SUBST -fi - -_LT_CHECK_OBJDIR - -m4_require([_LT_TAG_COMPILER])dnl - -case $host_os in -aix3*) - # AIX sometimes has problems with the GCC collect2 program. For some - # reason, if we set the COLLECT_NAMES environment variable, the problems - # vanish in a puff of smoke. - if test set != "${COLLECT_NAMES+set}"; then - COLLECT_NAMES= - export COLLECT_NAMES - fi - ;; -esac - -# Global variables: -ofile=libtool -can_build_shared=yes - -# All known linkers require a '.a' archive for static linking (except MSVC, -# which needs '.lib'). -libext=a - -with_gnu_ld=$lt_cv_prog_gnu_ld - -old_CC=$CC -old_CFLAGS=$CFLAGS - -# Set sane defaults for various variables -test -z "$CC" && CC=cc -test -z "$LTCC" && LTCC=$CC -test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS -test -z "$LD" && LD=ld -test -z "$ac_objext" && ac_objext=o - -_LT_CC_BASENAME([$compiler]) - -# Only perform the check for file, if the check method requires it -test -z "$MAGIC_CMD" && MAGIC_CMD=file -case $deplibs_check_method in -file_magic*) - if test "$file_magic_cmd" = '$MAGIC_CMD'; then - _LT_PATH_MAGIC - fi - ;; -esac - -# Use C for the default configuration in the libtool script -LT_SUPPORTED_TAG([CC]) -_LT_LANG_C_CONFIG -_LT_LANG_DEFAULT_CONFIG -_LT_CONFIG_COMMANDS -])# _LT_SETUP - - -# _LT_PREPARE_SED_QUOTE_VARS -# -------------------------- -# Define a few sed substitution that help us do robust quoting. -m4_defun([_LT_PREPARE_SED_QUOTE_VARS], -[# Backslashify metacharacters that are still active within -# double-quoted strings. -sed_quote_subst='s/\([["`$\\]]\)/\\\1/g' - -# Same as above, but do not quote variable references. -double_quote_subst='s/\([["`\\]]\)/\\\1/g' - -# Sed substitution to delay expansion of an escaped shell variable in a -# double_quote_subst'ed string. -delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' - -# Sed substitution to delay expansion of an escaped single quote. -delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' - -# Sed substitution to avoid accidental globbing in evaled expressions -no_glob_subst='s/\*/\\\*/g' -]) - -# _LT_PROG_LTMAIN -# --------------- -# Note that this code is called both from 'configure', and 'config.status' -# now that we use AC_CONFIG_COMMANDS to generate libtool. Notably, -# 'config.status' has no value for ac_aux_dir unless we are using Automake, -# so we pass a copy along to make sure it has a sensible value anyway. -m4_defun([_LT_PROG_LTMAIN], -[m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl -_LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir']) -ltmain=$ac_aux_dir/ltmain.sh -])# _LT_PROG_LTMAIN - - -## ------------------------------------- ## -## Accumulate code for creating libtool. ## -## ------------------------------------- ## - -# So that we can recreate a full libtool script including additional -# tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS -# in macros and then make a single call at the end using the 'libtool' -# label. - - -# _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS]) -# ---------------------------------------- -# Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later. -m4_define([_LT_CONFIG_LIBTOOL_INIT], -[m4_ifval([$1], - [m4_append([_LT_OUTPUT_LIBTOOL_INIT], - [$1 -])])]) - -# Initialize. -m4_define([_LT_OUTPUT_LIBTOOL_INIT]) - - -# _LT_CONFIG_LIBTOOL([COMMANDS]) -# ------------------------------ -# Register COMMANDS to be passed to AC_CONFIG_COMMANDS later. -m4_define([_LT_CONFIG_LIBTOOL], -[m4_ifval([$1], - [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS], - [$1 -])])]) - -# Initialize. -m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS]) - - -# _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS]) -# ----------------------------------------------------- -m4_defun([_LT_CONFIG_SAVE_COMMANDS], -[_LT_CONFIG_LIBTOOL([$1]) -_LT_CONFIG_LIBTOOL_INIT([$2]) -]) - - -# _LT_FORMAT_COMMENT([COMMENT]) -# ----------------------------- -# Add leading comment marks to the start of each line, and a trailing -# full-stop to the whole comment if one is not present already. -m4_define([_LT_FORMAT_COMMENT], -[m4_ifval([$1], [ -m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])], - [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.]) -)]) - - - -## ------------------------ ## -## FIXME: Eliminate VARNAME ## -## ------------------------ ## - - -# _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?]) -# ------------------------------------------------------------------- -# CONFIGNAME is the name given to the value in the libtool script. -# VARNAME is the (base) name used in the configure script. -# VALUE may be 0, 1 or 2 for a computed quote escaped value based on -# VARNAME. Any other value will be used directly. -m4_define([_LT_DECL], -[lt_if_append_uniq([lt_decl_varnames], [$2], [, ], - [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name], - [m4_ifval([$1], [$1], [$2])]) - lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3]) - m4_ifval([$4], - [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])]) - lt_dict_add_subkey([lt_decl_dict], [$2], - [tagged?], [m4_ifval([$5], [yes], [no])])]) -]) - - -# _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION]) -# -------------------------------------------------------- -m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])]) - - -# lt_decl_tag_varnames([SEPARATOR], [VARNAME1...]) -# ------------------------------------------------ -m4_define([lt_decl_tag_varnames], -[_lt_decl_filter([tagged?], [yes], $@)]) - - -# _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..]) -# --------------------------------------------------------- -m4_define([_lt_decl_filter], -[m4_case([$#], - [0], [m4_fatal([$0: too few arguments: $#])], - [1], [m4_fatal([$0: too few arguments: $#: $1])], - [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)], - [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)], - [lt_dict_filter([lt_decl_dict], $@)])[]dnl -]) - - -# lt_decl_quote_varnames([SEPARATOR], [VARNAME1...]) -# -------------------------------------------------- -m4_define([lt_decl_quote_varnames], -[_lt_decl_filter([value], [1], $@)]) - - -# lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...]) -# --------------------------------------------------- -m4_define([lt_decl_dquote_varnames], -[_lt_decl_filter([value], [2], $@)]) - - -# lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...]) -# --------------------------------------------------- -m4_define([lt_decl_varnames_tagged], -[m4_assert([$# <= 2])dnl -_$0(m4_quote(m4_default([$1], [[, ]])), - m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]), - m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))]) -m4_define([_lt_decl_varnames_tagged], -[m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])]) - - -# lt_decl_all_varnames([SEPARATOR], [VARNAME1...]) -# ------------------------------------------------ -m4_define([lt_decl_all_varnames], -[_$0(m4_quote(m4_default([$1], [[, ]])), - m4_if([$2], [], - m4_quote(lt_decl_varnames), - m4_quote(m4_shift($@))))[]dnl -]) -m4_define([_lt_decl_all_varnames], -[lt_join($@, lt_decl_varnames_tagged([$1], - lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl -]) - - -# _LT_CONFIG_STATUS_DECLARE([VARNAME]) -# ------------------------------------ -# Quote a variable value, and forward it to 'config.status' so that its -# declaration there will have the same value as in 'configure'. VARNAME -# must have a single quote delimited value for this to work. -m4_define([_LT_CONFIG_STATUS_DECLARE], -[$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`']) - - -# _LT_CONFIG_STATUS_DECLARATIONS -# ------------------------------ -# We delimit libtool config variables with single quotes, so when -# we write them to config.status, we have to be sure to quote all -# embedded single quotes properly. In configure, this macro expands -# each variable declared with _LT_DECL (and _LT_TAGDECL) into: -# -# ='`$ECHO "$" | $SED "$delay_single_quote_subst"`' -m4_defun([_LT_CONFIG_STATUS_DECLARATIONS], -[m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames), - [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])]) - - -# _LT_LIBTOOL_TAGS -# ---------------- -# Output comment and list of tags supported by the script -m4_defun([_LT_LIBTOOL_TAGS], -[_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl -available_tags='_LT_TAGS'dnl -]) - - -# _LT_LIBTOOL_DECLARE(VARNAME, [TAG]) -# ----------------------------------- -# Extract the dictionary values for VARNAME (optionally with TAG) and -# expand to a commented shell variable setting: -# -# # Some comment about what VAR is for. -# visible_name=$lt_internal_name -m4_define([_LT_LIBTOOL_DECLARE], -[_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], - [description])))[]dnl -m4_pushdef([_libtool_name], - m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl -m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])), - [0], [_libtool_name=[$]$1], - [1], [_libtool_name=$lt_[]$1], - [2], [_libtool_name=$lt_[]$1], - [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl -m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl -]) - - -# _LT_LIBTOOL_CONFIG_VARS -# ----------------------- -# Produce commented declarations of non-tagged libtool config variables -# suitable for insertion in the LIBTOOL CONFIG section of the 'libtool' -# script. Tagged libtool config variables (even for the LIBTOOL CONFIG -# section) are produced by _LT_LIBTOOL_TAG_VARS. -m4_defun([_LT_LIBTOOL_CONFIG_VARS], -[m4_foreach([_lt_var], - m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)), - [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])]) - - -# _LT_LIBTOOL_TAG_VARS(TAG) -# ------------------------- -m4_define([_LT_LIBTOOL_TAG_VARS], -[m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames), - [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])]) - - -# _LT_TAGVAR(VARNAME, [TAGNAME]) -# ------------------------------ -m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])]) - - -# _LT_CONFIG_COMMANDS -# ------------------- -# Send accumulated output to $CONFIG_STATUS. Thanks to the lists of -# variables for single and double quote escaping we saved from calls -# to _LT_DECL, we can put quote escaped variables declarations -# into 'config.status', and then the shell code to quote escape them in -# for loops in 'config.status'. Finally, any additional code accumulated -# from calls to _LT_CONFIG_LIBTOOL_INIT is expanded. -m4_defun([_LT_CONFIG_COMMANDS], -[AC_PROVIDE_IFELSE([LT_OUTPUT], - dnl If the libtool generation code has been placed in $CONFIG_LT, - dnl instead of duplicating it all over again into config.status, - dnl then we will have config.status run $CONFIG_LT later, so it - dnl needs to know what name is stored there: - [AC_CONFIG_COMMANDS([libtool], - [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])], - dnl If the libtool generation code is destined for config.status, - dnl expand the accumulated commands and init code now: - [AC_CONFIG_COMMANDS([libtool], - [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])]) -])#_LT_CONFIG_COMMANDS - - -# Initialize. -m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT], -[ - -# The HP-UX ksh and POSIX shell print the target directory to stdout -# if CDPATH is set. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -sed_quote_subst='$sed_quote_subst' -double_quote_subst='$double_quote_subst' -delay_variable_subst='$delay_variable_subst' -_LT_CONFIG_STATUS_DECLARATIONS -LTCC='$LTCC' -LTCFLAGS='$LTCFLAGS' -compiler='$compiler_DEFAULT' - -# A function that is used when there is no print builtin or printf. -func_fallback_echo () -{ - eval 'cat <<_LTECHO_EOF -\$[]1 -_LTECHO_EOF' -} - -# Quote evaled strings. -for var in lt_decl_all_varnames([[ \ -]], lt_decl_quote_varnames); do - case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in - *[[\\\\\\\`\\"\\\$]]*) - eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes - ;; - *) - eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" - ;; - esac -done - -# Double-quote double-evaled strings. -for var in lt_decl_all_varnames([[ \ -]], lt_decl_dquote_varnames); do - case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in - *[[\\\\\\\`\\"\\\$]]*) - eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes - ;; - *) - eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" - ;; - esac -done - -_LT_OUTPUT_LIBTOOL_INIT -]) - -# _LT_GENERATED_FILE_INIT(FILE, [COMMENT]) -# ------------------------------------ -# Generate a child script FILE with all initialization necessary to -# reuse the environment learned by the parent script, and make the -# file executable. If COMMENT is supplied, it is inserted after the -# '#!' sequence but before initialization text begins. After this -# macro, additional text can be appended to FILE to form the body of -# the child script. The macro ends with non-zero status if the -# file could not be fully written (such as if the disk is full). -m4_ifdef([AS_INIT_GENERATED], -[m4_defun([_LT_GENERATED_FILE_INIT],[AS_INIT_GENERATED($@)])], -[m4_defun([_LT_GENERATED_FILE_INIT], -[m4_require([AS_PREPARE])]dnl -[m4_pushdef([AS_MESSAGE_LOG_FD])]dnl -[lt_write_fail=0 -cat >$1 <<_ASEOF || lt_write_fail=1 -#! $SHELL -# Generated by $as_me. -$2 -SHELL=\${CONFIG_SHELL-$SHELL} -export SHELL -_ASEOF -cat >>$1 <<\_ASEOF || lt_write_fail=1 -AS_SHELL_SANITIZE -_AS_PREPARE -exec AS_MESSAGE_FD>&1 -_ASEOF -test 0 = "$lt_write_fail" && chmod +x $1[]dnl -m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT - -# LT_OUTPUT -# --------- -# This macro allows early generation of the libtool script (before -# AC_OUTPUT is called), incase it is used in configure for compilation -# tests. -AC_DEFUN([LT_OUTPUT], -[: ${CONFIG_LT=./config.lt} -AC_MSG_NOTICE([creating $CONFIG_LT]) -_LT_GENERATED_FILE_INIT(["$CONFIG_LT"], -[# Run this file to recreate a libtool stub with the current configuration.]) - -cat >>"$CONFIG_LT" <<\_LTEOF -lt_cl_silent=false -exec AS_MESSAGE_LOG_FD>>config.log -{ - echo - AS_BOX([Running $as_me.]) -} >&AS_MESSAGE_LOG_FD - -lt_cl_help="\ -'$as_me' creates a local libtool stub from the current configuration, -for use in further configure time tests before the real libtool is -generated. - -Usage: $[0] [[OPTIONS]] - - -h, --help print this help, then exit - -V, --version print version number, then exit - -q, --quiet do not print progress messages - -d, --debug don't remove temporary files - -Report bugs to ." - -lt_cl_version="\ -m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl -m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) -configured by $[0], generated by m4_PACKAGE_STRING. - -Copyright (C) 2011 Free Software Foundation, Inc. -This config.lt script is free software; the Free Software Foundation -gives unlimited permision to copy, distribute and modify it." - -while test 0 != $[#] -do - case $[1] in - --version | --v* | -V ) - echo "$lt_cl_version"; exit 0 ;; - --help | --h* | -h ) - echo "$lt_cl_help"; exit 0 ;; - --debug | --d* | -d ) - debug=: ;; - --quiet | --q* | --silent | --s* | -q ) - lt_cl_silent=: ;; - - -*) AC_MSG_ERROR([unrecognized option: $[1] -Try '$[0] --help' for more information.]) ;; - - *) AC_MSG_ERROR([unrecognized argument: $[1] -Try '$[0] --help' for more information.]) ;; - esac - shift -done - -if $lt_cl_silent; then - exec AS_MESSAGE_FD>/dev/null -fi -_LTEOF - -cat >>"$CONFIG_LT" <<_LTEOF -_LT_OUTPUT_LIBTOOL_COMMANDS_INIT -_LTEOF - -cat >>"$CONFIG_LT" <<\_LTEOF -AC_MSG_NOTICE([creating $ofile]) -_LT_OUTPUT_LIBTOOL_COMMANDS -AS_EXIT(0) -_LTEOF -chmod +x "$CONFIG_LT" - -# configure is writing to config.log, but config.lt does its own redirection, -# appending to config.log, which fails on DOS, as config.log is still kept -# open by configure. Here we exec the FD to /dev/null, effectively closing -# config.log, so it can be properly (re)opened and appended to by config.lt. -lt_cl_success=: -test yes = "$silent" && - lt_config_lt_args="$lt_config_lt_args --quiet" -exec AS_MESSAGE_LOG_FD>/dev/null -$SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false -exec AS_MESSAGE_LOG_FD>>config.log -$lt_cl_success || AS_EXIT(1) -])# LT_OUTPUT - - -# _LT_CONFIG(TAG) -# --------------- -# If TAG is the built-in tag, create an initial libtool script with a -# default configuration from the untagged config vars. Otherwise add code -# to config.status for appending the configuration named by TAG from the -# matching tagged config vars. -m4_defun([_LT_CONFIG], -[m4_require([_LT_FILEUTILS_DEFAULTS])dnl -_LT_CONFIG_SAVE_COMMANDS([ - m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl - m4_if(_LT_TAG, [C], [ - # See if we are running on zsh, and set the options that allow our - # commands through without removal of \ escapes. - if test -n "${ZSH_VERSION+set}"; then - setopt NO_GLOB_SUBST - fi - - cfgfile=${ofile}T - trap "$RM \"$cfgfile\"; exit 1" 1 2 15 - $RM "$cfgfile" - - cat <<_LT_EOF >> "$cfgfile" -#! $SHELL -# Generated automatically by $as_me ($PACKAGE) $VERSION -# NOTE: Changes made to this file will be lost: look at ltmain.sh. - -# Provide generalized library-building support services. -# Written by Gordon Matzigkeit, 1996 - -_LT_COPYING -_LT_LIBTOOL_TAGS - -# Configured defaults for sys_lib_dlsearch_path munging. -: \${LT_SYS_LIBRARY_PATH="$configure_time_lt_sys_library_path"} - -# ### BEGIN LIBTOOL CONFIG -_LT_LIBTOOL_CONFIG_VARS -_LT_LIBTOOL_TAG_VARS -# ### END LIBTOOL CONFIG - -_LT_EOF - - cat <<'_LT_EOF' >> "$cfgfile" - -# ### BEGIN FUNCTIONS SHARED WITH CONFIGURE - -_LT_PREPARE_MUNGE_PATH_LIST -_LT_PREPARE_CC_BASENAME - -# ### END FUNCTIONS SHARED WITH CONFIGURE - -_LT_EOF - - case $host_os in - aix3*) - cat <<\_LT_EOF >> "$cfgfile" -# AIX sometimes has problems with the GCC collect2 program. For some -# reason, if we set the COLLECT_NAMES environment variable, the problems -# vanish in a puff of smoke. -if test set != "${COLLECT_NAMES+set}"; then - COLLECT_NAMES= - export COLLECT_NAMES -fi -_LT_EOF - ;; - esac - - _LT_PROG_LTMAIN - - # We use sed instead of cat because bash on DJGPP gets confused if - # if finds mixed CR/LF and LF-only lines. Since sed operates in - # text mode, it properly converts lines to CR/LF. This bash problem - # is reportedly fixed, but why not run on old versions too? - sed '$q' "$ltmain" >> "$cfgfile" \ - || (rm -f "$cfgfile"; exit 1) - - mv -f "$cfgfile" "$ofile" || - (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") - chmod +x "$ofile" -], -[cat <<_LT_EOF >> "$ofile" - -dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded -dnl in a comment (ie after a #). -# ### BEGIN LIBTOOL TAG CONFIG: $1 -_LT_LIBTOOL_TAG_VARS(_LT_TAG) -# ### END LIBTOOL TAG CONFIG: $1 -_LT_EOF -])dnl /m4_if -], -[m4_if([$1], [], [ - PACKAGE='$PACKAGE' - VERSION='$VERSION' - RM='$RM' - ofile='$ofile'], []) -])dnl /_LT_CONFIG_SAVE_COMMANDS -])# _LT_CONFIG - - -# LT_SUPPORTED_TAG(TAG) -# --------------------- -# Trace this macro to discover what tags are supported by the libtool -# --tag option, using: -# autoconf --trace 'LT_SUPPORTED_TAG:$1' -AC_DEFUN([LT_SUPPORTED_TAG], []) - - -# C support is built-in for now -m4_define([_LT_LANG_C_enabled], []) -m4_define([_LT_TAGS], []) - - -# LT_LANG(LANG) -# ------------- -# Enable libtool support for the given language if not already enabled. -AC_DEFUN([LT_LANG], -[AC_BEFORE([$0], [LT_OUTPUT])dnl -m4_case([$1], - [C], [_LT_LANG(C)], - [C++], [_LT_LANG(CXX)], - [Go], [_LT_LANG(GO)], - [Java], [_LT_LANG(GCJ)], - [Fortran 77], [_LT_LANG(F77)], - [Fortran], [_LT_LANG(FC)], - [Windows Resource], [_LT_LANG(RC)], - [m4_ifdef([_LT_LANG_]$1[_CONFIG], - [_LT_LANG($1)], - [m4_fatal([$0: unsupported language: "$1"])])])dnl -])# LT_LANG - - -# _LT_LANG(LANGNAME) -# ------------------ -m4_defun([_LT_LANG], -[m4_ifdef([_LT_LANG_]$1[_enabled], [], - [LT_SUPPORTED_TAG([$1])dnl - m4_append([_LT_TAGS], [$1 ])dnl - m4_define([_LT_LANG_]$1[_enabled], [])dnl - _LT_LANG_$1_CONFIG($1)])dnl -])# _LT_LANG - - -m4_ifndef([AC_PROG_GO], [ -############################################################ -# NOTE: This macro has been submitted for inclusion into # -# GNU Autoconf as AC_PROG_GO. When it is available in # -# a released version of Autoconf we should remove this # -# macro and use it instead. # -############################################################ -m4_defun([AC_PROG_GO], -[AC_LANG_PUSH(Go)dnl -AC_ARG_VAR([GOC], [Go compiler command])dnl -AC_ARG_VAR([GOFLAGS], [Go compiler flags])dnl -_AC_ARG_VAR_LDFLAGS()dnl -AC_CHECK_TOOL(GOC, gccgo) -if test -z "$GOC"; then - if test -n "$ac_tool_prefix"; then - AC_CHECK_PROG(GOC, [${ac_tool_prefix}gccgo], [${ac_tool_prefix}gccgo]) - fi -fi -if test -z "$GOC"; then - AC_CHECK_PROG(GOC, gccgo, gccgo, false) -fi -])#m4_defun -])#m4_ifndef - - -# _LT_LANG_DEFAULT_CONFIG -# ----------------------- -m4_defun([_LT_LANG_DEFAULT_CONFIG], -[AC_PROVIDE_IFELSE([AC_PROG_CXX], - [LT_LANG(CXX)], - [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])]) - -AC_PROVIDE_IFELSE([AC_PROG_F77], - [LT_LANG(F77)], - [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])]) - -AC_PROVIDE_IFELSE([AC_PROG_FC], - [LT_LANG(FC)], - [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])]) - -dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal -dnl pulling things in needlessly. -AC_PROVIDE_IFELSE([AC_PROG_GCJ], - [LT_LANG(GCJ)], - [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], - [LT_LANG(GCJ)], - [AC_PROVIDE_IFELSE([LT_PROG_GCJ], - [LT_LANG(GCJ)], - [m4_ifdef([AC_PROG_GCJ], - [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])]) - m4_ifdef([A][M_PROG_GCJ], - [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])]) - m4_ifdef([LT_PROG_GCJ], - [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])]) - -AC_PROVIDE_IFELSE([AC_PROG_GO], - [LT_LANG(GO)], - [m4_define([AC_PROG_GO], defn([AC_PROG_GO])[LT_LANG(GO)])]) - -AC_PROVIDE_IFELSE([LT_PROG_RC], - [LT_LANG(RC)], - [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])]) -])# _LT_LANG_DEFAULT_CONFIG - -# Obsolete macros: -AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) -AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) -AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)]) -AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)]) -AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_CXX], []) -dnl AC_DEFUN([AC_LIBTOOL_F77], []) -dnl AC_DEFUN([AC_LIBTOOL_FC], []) -dnl AC_DEFUN([AC_LIBTOOL_GCJ], []) -dnl AC_DEFUN([AC_LIBTOOL_RC], []) - - -# _LT_TAG_COMPILER -# ---------------- -m4_defun([_LT_TAG_COMPILER], -[AC_REQUIRE([AC_PROG_CC])dnl - -_LT_DECL([LTCC], [CC], [1], [A C compiler])dnl -_LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl -_LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl -_LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl - -# If no C compiler was specified, use CC. -LTCC=${LTCC-"$CC"} - -# If no C compiler flags were specified, use CFLAGS. -LTCFLAGS=${LTCFLAGS-"$CFLAGS"} - -# Allow CC to be a program name with arguments. -compiler=$CC -])# _LT_TAG_COMPILER - - -# _LT_COMPILER_BOILERPLATE -# ------------------------ -# Check for compiler boilerplate output or warnings with -# the simple compiler test code. -m4_defun([_LT_COMPILER_BOILERPLATE], -[m4_require([_LT_DECL_SED])dnl -ac_outfile=conftest.$ac_objext -echo "$lt_simple_compile_test_code" >conftest.$ac_ext -eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_compiler_boilerplate=`cat conftest.err` -$RM conftest* -])# _LT_COMPILER_BOILERPLATE - - -# _LT_LINKER_BOILERPLATE -# ---------------------- -# Check for linker boilerplate output or warnings with -# the simple link test code. -m4_defun([_LT_LINKER_BOILERPLATE], -[m4_require([_LT_DECL_SED])dnl -ac_outfile=conftest.$ac_objext -echo "$lt_simple_link_test_code" >conftest.$ac_ext -eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_linker_boilerplate=`cat conftest.err` -$RM -r conftest* -])# _LT_LINKER_BOILERPLATE - -# _LT_REQUIRED_DARWIN_CHECKS -# ------------------------- -m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ - case $host_os in - rhapsody* | darwin*) - AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:]) - AC_CHECK_TOOL([NMEDIT], [nmedit], [:]) - AC_CHECK_TOOL([LIPO], [lipo], [:]) - AC_CHECK_TOOL([OTOOL], [otool], [:]) - AC_CHECK_TOOL([OTOOL64], [otool64], [:]) - _LT_DECL([], [DSYMUTIL], [1], - [Tool to manipulate archived DWARF debug symbol files on Mac OS X]) - _LT_DECL([], [NMEDIT], [1], - [Tool to change global to local symbols on Mac OS X]) - _LT_DECL([], [LIPO], [1], - [Tool to manipulate fat objects and archives on Mac OS X]) - _LT_DECL([], [OTOOL], [1], - [ldd/readelf like tool for Mach-O binaries on Mac OS X]) - _LT_DECL([], [OTOOL64], [1], - [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4]) - - AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod], - [lt_cv_apple_cc_single_mod=no - if test -z "$LT_MULTI_MODULE"; then - # By default we will add the -single_module flag. You can override - # by either setting the environment variable LT_MULTI_MODULE - # non-empty at configure time, or by adding -multi_module to the - # link flags. - rm -rf libconftest.dylib* - echo "int foo(void){return 1;}" > conftest.c - echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ --dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD - $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ - -dynamiclib -Wl,-single_module conftest.c 2>conftest.err - _lt_result=$? - # If there is a non-empty error log, and "single_module" - # appears in it, assume the flag caused a linker warning - if test -s conftest.err && $GREP single_module conftest.err; then - cat conftest.err >&AS_MESSAGE_LOG_FD - # Otherwise, if the output was created with a 0 exit code from - # the compiler, it worked. - elif test -f libconftest.dylib && test 0 = "$_lt_result"; then - lt_cv_apple_cc_single_mod=yes - else - cat conftest.err >&AS_MESSAGE_LOG_FD - fi - rm -rf libconftest.dylib* - rm -f conftest.* - fi]) - - AC_CACHE_CHECK([for -exported_symbols_list linker flag], - [lt_cv_ld_exported_symbols_list], - [lt_cv_ld_exported_symbols_list=no - save_LDFLAGS=$LDFLAGS - echo "_main" > conftest.sym - LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" - AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], - [lt_cv_ld_exported_symbols_list=yes], - [lt_cv_ld_exported_symbols_list=no]) - LDFLAGS=$save_LDFLAGS - ]) - - AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load], - [lt_cv_ld_force_load=no - cat > conftest.c << _LT_EOF -int forced_loaded() { return 2;} -_LT_EOF - echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD - $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD - echo "$AR cru libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD - $AR cru libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD - echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD - $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD - cat > conftest.c << _LT_EOF -int main() { return 0;} -_LT_EOF - echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD - $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err - _lt_result=$? - if test -s conftest.err && $GREP force_load conftest.err; then - cat conftest.err >&AS_MESSAGE_LOG_FD - elif test -f conftest && test 0 = "$_lt_result" && $GREP forced_load conftest >/dev/null 2>&1; then - lt_cv_ld_force_load=yes - else - cat conftest.err >&AS_MESSAGE_LOG_FD - fi - rm -f conftest.err libconftest.a conftest conftest.c - rm -rf conftest.dSYM - ]) - case $host_os in - rhapsody* | darwin1.[[012]]) - _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;; - darwin1.*) - _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; - darwin*) # darwin 5.x on - # if running on 10.5 or later, the deployment target defaults - # to the OS version, if on x86, and 10.4, the deployment - # target defaults to 10.4. Don't you love it? - case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in - 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*) - _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; - 10.[[012]][[,.]]*) - _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; - 10.*) - _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; - esac - ;; - esac - if test yes = "$lt_cv_apple_cc_single_mod"; then - _lt_dar_single_mod='$single_module' - fi - if test yes = "$lt_cv_ld_exported_symbols_list"; then - _lt_dar_export_syms=' $wl-exported_symbols_list,$output_objdir/$libname-symbols.expsym' - else - _lt_dar_export_syms='~$NMEDIT -s $output_objdir/$libname-symbols.expsym $lib' - fi - if test : != "$DSYMUTIL" && test no = "$lt_cv_ld_force_load"; then - _lt_dsymutil='~$DSYMUTIL $lib || :' - else - _lt_dsymutil= - fi - ;; - esac -]) - - -# _LT_DARWIN_LINKER_FEATURES([TAG]) -# --------------------------------- -# Checks for linker and compiler features on darwin -m4_defun([_LT_DARWIN_LINKER_FEATURES], -[ - m4_require([_LT_REQUIRED_DARWIN_CHECKS]) - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_TAGVAR(hardcode_direct, $1)=no - _LT_TAGVAR(hardcode_automatic, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported - if test yes = "$lt_cv_ld_force_load"; then - _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' - m4_case([$1], [F77], [_LT_TAGVAR(compiler_needs_object, $1)=yes], - [FC], [_LT_TAGVAR(compiler_needs_object, $1)=yes]) - else - _LT_TAGVAR(whole_archive_flag_spec, $1)='' - fi - _LT_TAGVAR(link_all_deplibs, $1)=yes - _LT_TAGVAR(allow_undefined_flag, $1)=$_lt_dar_allow_undefined - case $cc_basename in - ifort*|nagfor*) _lt_dar_can_shared=yes ;; - *) _lt_dar_can_shared=$GCC ;; - esac - if test yes = "$_lt_dar_can_shared"; then - output_verbose_link_cmd=func_echo_all - _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil" - _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil" - _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil" - _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil" - m4_if([$1], [CXX], -[ if test yes != "$lt_cv_apple_cc_single_mod"; then - _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dsymutil" - _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dar_export_syms$_lt_dsymutil" - fi -],[]) - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi -]) - -# _LT_SYS_MODULE_PATH_AIX([TAGNAME]) -# ---------------------------------- -# Links a minimal program and checks the executable -# for the system default hardcoded library path. In most cases, -# this is /usr/lib:/lib, but when the MPI compilers are used -# the location of the communication and MPI libs are included too. -# If we don't find anything, use the default library path according -# to the aix ld manual. -# Store the results from the different compilers for each TAGNAME. -# Allow to override them for all tags through lt_cv_aix_libpath. -m4_defun([_LT_SYS_MODULE_PATH_AIX], -[m4_require([_LT_DECL_SED])dnl -if test set = "${lt_cv_aix_libpath+set}"; then - aix_libpath=$lt_cv_aix_libpath -else - AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])], - [AC_LINK_IFELSE([AC_LANG_PROGRAM],[ - lt_aix_libpath_sed='[ - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\([^ ]*\) *$/\1/ - p - } - }]' - _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` - # Check for a 64-bit object if we didn't find anything. - if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then - _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` - fi],[]) - if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then - _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=/usr/lib:/lib - fi - ]) - aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1]) -fi -])# _LT_SYS_MODULE_PATH_AIX - - -# _LT_SHELL_INIT(ARG) -# ------------------- -m4_define([_LT_SHELL_INIT], -[m4_divert_text([M4SH-INIT], [$1 -])])# _LT_SHELL_INIT - - - -# _LT_PROG_ECHO_BACKSLASH -# ----------------------- -# Find how we can fake an echo command that does not interpret backslash. -# In particular, with Autoconf 2.60 or later we add some code to the start -# of the generated configure script that will find a shell with a builtin -# printf (that we can use as an echo command). -m4_defun([_LT_PROG_ECHO_BACKSLASH], -[ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO -ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO - -AC_MSG_CHECKING([how to print strings]) -# Test print first, because it will be a builtin if present. -if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ - test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then - ECHO='print -r --' -elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then - ECHO='printf %s\n' -else - # Use this function as a fallback that always works. - func_fallback_echo () - { - eval 'cat <<_LTECHO_EOF -$[]1 -_LTECHO_EOF' - } - ECHO='func_fallback_echo' -fi - -# func_echo_all arg... -# Invoke $ECHO with all args, space-separated. -func_echo_all () -{ - $ECHO "$*" -} - -case $ECHO in - printf*) AC_MSG_RESULT([printf]) ;; - print*) AC_MSG_RESULT([print -r]) ;; - *) AC_MSG_RESULT([cat]) ;; -esac - -m4_ifdef([_AS_DETECT_SUGGESTED], -[_AS_DETECT_SUGGESTED([ - test -n "${ZSH_VERSION+set}${BASH_VERSION+set}" || ( - ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' - ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO - ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO - PATH=/empty FPATH=/empty; export PATH FPATH - test "X`printf %s $ECHO`" = "X$ECHO" \ - || test "X`print -r -- $ECHO`" = "X$ECHO" )])]) - -_LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts]) -_LT_DECL([], [ECHO], [1], [An echo program that protects backslashes]) -])# _LT_PROG_ECHO_BACKSLASH - - -# _LT_WITH_SYSROOT -# ---------------- -AC_DEFUN([_LT_WITH_SYSROOT], -[AC_MSG_CHECKING([for sysroot]) -AC_ARG_WITH([sysroot], -[AS_HELP_STRING([--with-sysroot@<:@=DIR@:>@], - [Search for dependent libraries within DIR (or the compiler's sysroot - if not specified).])], -[], [with_sysroot=no]) - -dnl lt_sysroot will always be passed unquoted. We quote it here -dnl in case the user passed a directory name. -lt_sysroot= -case $with_sysroot in #( - yes) - if test yes = "$GCC"; then - lt_sysroot=`$CC --print-sysroot 2>/dev/null` - fi - ;; #( - /*) - lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` - ;; #( - no|'') - ;; #( - *) - AC_MSG_RESULT([$with_sysroot]) - AC_MSG_ERROR([The sysroot must be an absolute path.]) - ;; -esac - - AC_MSG_RESULT([${lt_sysroot:-no}]) -_LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl -[dependent libraries, and where our libraries should be installed.])]) - -# _LT_ENABLE_LOCK -# --------------- -m4_defun([_LT_ENABLE_LOCK], -[AC_ARG_ENABLE([libtool-lock], - [AS_HELP_STRING([--disable-libtool-lock], - [avoid locking (might break parallel builds)])]) -test no = "$enable_libtool_lock" || enable_libtool_lock=yes - -# Some flags need to be propagated to the compiler or linker for good -# libtool support. -case $host in -ia64-*-hpux*) - # Find out what ABI is being produced by ac_compile, and set mode - # options accordingly. - echo 'int i;' > conftest.$ac_ext - if AC_TRY_EVAL(ac_compile); then - case `/usr/bin/file conftest.$ac_objext` in - *ELF-32*) - HPUX_IA64_MODE=32 - ;; - *ELF-64*) - HPUX_IA64_MODE=64 - ;; - esac - fi - rm -rf conftest* - ;; -*-*-irix6*) - # Find out what ABI is being produced by ac_compile, and set linker - # options accordingly. - echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext - if AC_TRY_EVAL(ac_compile); then - if test yes = "$lt_cv_prog_gnu_ld"; then - case `/usr/bin/file conftest.$ac_objext` in - *32-bit*) - LD="${LD-ld} -melf32bsmip" - ;; - *N32*) - LD="${LD-ld} -melf32bmipn32" - ;; - *64-bit*) - LD="${LD-ld} -melf64bmip" - ;; - esac - else - case `/usr/bin/file conftest.$ac_objext` in - *32-bit*) - LD="${LD-ld} -32" - ;; - *N32*) - LD="${LD-ld} -n32" - ;; - *64-bit*) - LD="${LD-ld} -64" - ;; - esac - fi - fi - rm -rf conftest* - ;; - -mips64*-*linux*) - # Find out what ABI is being produced by ac_compile, and set linker - # options accordingly. - echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext - if AC_TRY_EVAL(ac_compile); then - emul=elf - case `/usr/bin/file conftest.$ac_objext` in - *32-bit*) - emul="${emul}32" - ;; - *64-bit*) - emul="${emul}64" - ;; - esac - case `/usr/bin/file conftest.$ac_objext` in - *MSB*) - emul="${emul}btsmip" - ;; - *LSB*) - emul="${emul}ltsmip" - ;; - esac - case `/usr/bin/file conftest.$ac_objext` in - *N32*) - emul="${emul}n32" - ;; - esac - LD="${LD-ld} -m $emul" - fi - rm -rf conftest* - ;; - -x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \ -s390*-*linux*|s390*-*tpf*|sparc*-*linux*) - # Find out what ABI is being produced by ac_compile, and set linker - # options accordingly. Note that the listed cases only cover the - # situations where additional linker options are needed (such as when - # doing 32-bit compilation for a host where ld defaults to 64-bit, or - # vice versa); the common cases where no linker options are needed do - # not appear in the list. - echo 'int i;' > conftest.$ac_ext - if AC_TRY_EVAL(ac_compile); then - case `/usr/bin/file conftest.o` in - *32-bit*) - case $host in - x86_64-*kfreebsd*-gnu) - LD="${LD-ld} -m elf_i386_fbsd" - ;; - x86_64-*linux*) - case `/usr/bin/file conftest.o` in - *x86-64*) - LD="${LD-ld} -m elf32_x86_64" - ;; - *) - LD="${LD-ld} -m elf_i386" - ;; - esac - ;; - powerpc64le-*linux*) - LD="${LD-ld} -m elf32lppclinux" - ;; - powerpc64-*linux*) - LD="${LD-ld} -m elf32ppclinux" - ;; - s390x-*linux*) - LD="${LD-ld} -m elf_s390" - ;; - sparc64-*linux*) - LD="${LD-ld} -m elf32_sparc" - ;; - esac - ;; - *64-bit*) - case $host in - x86_64-*kfreebsd*-gnu) - LD="${LD-ld} -m elf_x86_64_fbsd" - ;; - x86_64-*linux*) - LD="${LD-ld} -m elf_x86_64" - ;; - powerpcle-*linux*) - LD="${LD-ld} -m elf64lppc" - ;; - powerpc-*linux*) - LD="${LD-ld} -m elf64ppc" - ;; - s390*-*linux*|s390*-*tpf*) - LD="${LD-ld} -m elf64_s390" - ;; - sparc*-*linux*) - LD="${LD-ld} -m elf64_sparc" - ;; - esac - ;; - esac - fi - rm -rf conftest* - ;; - -*-*-sco3.2v5*) - # On SCO OpenServer 5, we need -belf to get full-featured binaries. - SAVE_CFLAGS=$CFLAGS - CFLAGS="$CFLAGS -belf" - AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, - [AC_LANG_PUSH(C) - AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) - AC_LANG_POP]) - if test yes != "$lt_cv_cc_needs_belf"; then - # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf - CFLAGS=$SAVE_CFLAGS - fi - ;; -*-*solaris*) - # Find out what ABI is being produced by ac_compile, and set linker - # options accordingly. - echo 'int i;' > conftest.$ac_ext - if AC_TRY_EVAL(ac_compile); then - case `/usr/bin/file conftest.o` in - *64-bit*) - case $lt_cv_prog_gnu_ld in - yes*) - case $host in - i?86-*-solaris*|x86_64-*-solaris*) - LD="${LD-ld} -m elf_x86_64" - ;; - sparc*-*-solaris*) - LD="${LD-ld} -m elf64_sparc" - ;; - esac - # GNU ld 2.21 introduced _sol2 emulations. Use them if available. - if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then - LD=${LD-ld}_sol2 - fi - ;; - *) - if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then - LD="${LD-ld} -64" - fi - ;; - esac - ;; - esac - fi - rm -rf conftest* - ;; -esac - -need_locks=$enable_libtool_lock -])# _LT_ENABLE_LOCK - - -# _LT_PROG_AR -# ----------- -m4_defun([_LT_PROG_AR], -[AC_CHECK_TOOLS(AR, [ar], false) -: ${AR=ar} -: ${AR_FLAGS=cru} -_LT_DECL([], [AR], [1], [The archiver]) -_LT_DECL([], [AR_FLAGS], [1], [Flags to create an archive]) - -AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file], - [lt_cv_ar_at_file=no - AC_COMPILE_IFELSE([AC_LANG_PROGRAM], - [echo conftest.$ac_objext > conftest.lst - lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD' - AC_TRY_EVAL([lt_ar_try]) - if test 0 -eq "$ac_status"; then - # Ensure the archiver fails upon bogus file names. - rm -f conftest.$ac_objext libconftest.a - AC_TRY_EVAL([lt_ar_try]) - if test 0 -ne "$ac_status"; then - lt_cv_ar_at_file=@ - fi - fi - rm -f conftest.* libconftest.a - ]) - ]) - -if test no = "$lt_cv_ar_at_file"; then - archiver_list_spec= -else - archiver_list_spec=$lt_cv_ar_at_file -fi -_LT_DECL([], [archiver_list_spec], [1], - [How to feed a file listing to the archiver]) -])# _LT_PROG_AR - - -# _LT_CMD_OLD_ARCHIVE -# ------------------- -m4_defun([_LT_CMD_OLD_ARCHIVE], -[_LT_PROG_AR - -AC_CHECK_TOOL(STRIP, strip, :) -test -z "$STRIP" && STRIP=: -_LT_DECL([], [STRIP], [1], [A symbol stripping program]) - -AC_CHECK_TOOL(RANLIB, ranlib, :) -test -z "$RANLIB" && RANLIB=: -_LT_DECL([], [RANLIB], [1], - [Commands used to install an old-style archive]) - -# Determine commands to create old-style static archives. -old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' -old_postinstall_cmds='chmod 644 $oldlib' -old_postuninstall_cmds= - -if test -n "$RANLIB"; then - case $host_os in - bitrig* | openbsd*) - old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" - ;; - *) - old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" - ;; - esac - old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" -fi - -case $host_os in - darwin*) - lock_old_archive_extraction=yes ;; - *) - lock_old_archive_extraction=no ;; -esac -_LT_DECL([], [old_postinstall_cmds], [2]) -_LT_DECL([], [old_postuninstall_cmds], [2]) -_LT_TAGDECL([], [old_archive_cmds], [2], - [Commands used to build an old-style archive]) -_LT_DECL([], [lock_old_archive_extraction], [0], - [Whether to use a lock for old archive extraction]) -])# _LT_CMD_OLD_ARCHIVE - - -# _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, -# [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) -# ---------------------------------------------------------------- -# Check whether the given compiler option works -AC_DEFUN([_LT_COMPILER_OPTION], -[m4_require([_LT_FILEUTILS_DEFAULTS])dnl -m4_require([_LT_DECL_SED])dnl -AC_CACHE_CHECK([$1], [$2], - [$2=no - m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="$3" ## exclude from sc_useless_quotes_in_assignment - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - # The option is referenced via a variable to avoid confusing sed. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&AS_MESSAGE_LOG_FD - echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. - $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then - $2=yes - fi - fi - $RM conftest* -]) - -if test yes = "[$]$2"; then - m4_if([$5], , :, [$5]) -else - m4_if([$6], , :, [$6]) -fi -])# _LT_COMPILER_OPTION - -# Old name: -AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], []) - - -# _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, -# [ACTION-SUCCESS], [ACTION-FAILURE]) -# ---------------------------------------------------- -# Check whether the given linker option works -AC_DEFUN([_LT_LINKER_OPTION], -[m4_require([_LT_FILEUTILS_DEFAULTS])dnl -m4_require([_LT_DECL_SED])dnl -AC_CACHE_CHECK([$1], [$2], - [$2=no - save_LDFLAGS=$LDFLAGS - LDFLAGS="$LDFLAGS $3" - echo "$lt_simple_link_test_code" > conftest.$ac_ext - if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then - # The linker can only warn and ignore the option if not recognized - # So say no if there are warnings - if test -s conftest.err; then - # Append any errors to the config.log. - cat conftest.err 1>&AS_MESSAGE_LOG_FD - $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if diff conftest.exp conftest.er2 >/dev/null; then - $2=yes - fi - else - $2=yes - fi - fi - $RM -r conftest* - LDFLAGS=$save_LDFLAGS -]) - -if test yes = "[$]$2"; then - m4_if([$4], , :, [$4]) -else - m4_if([$5], , :, [$5]) -fi -])# _LT_LINKER_OPTION - -# Old name: -AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], []) - - -# LT_CMD_MAX_LEN -#--------------- -AC_DEFUN([LT_CMD_MAX_LEN], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -# find the maximum length of command line arguments -AC_MSG_CHECKING([the maximum length of command line arguments]) -AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl - i=0 - teststring=ABCD - - case $build_os in - msdosdjgpp*) - # On DJGPP, this test can blow up pretty badly due to problems in libc - # (any single argument exceeding 2000 bytes causes a buffer overrun - # during glob expansion). Even if it were fixed, the result of this - # check would be larger than it should be. - lt_cv_sys_max_cmd_len=12288; # 12K is about right - ;; - - gnu*) - # Under GNU Hurd, this test is not required because there is - # no limit to the length of command line arguments. - # Libtool will interpret -1 as no limit whatsoever - lt_cv_sys_max_cmd_len=-1; - ;; - - cygwin* | mingw* | cegcc*) - # On Win9x/ME, this test blows up -- it succeeds, but takes - # about 5 minutes as the teststring grows exponentially. - # Worse, since 9x/ME are not pre-emptively multitasking, - # you end up with a "frozen" computer, even though with patience - # the test eventually succeeds (with a max line length of 256k). - # Instead, let's just punt: use the minimum linelength reported by - # all of the supported platforms: 8192 (on NT/2K/XP). - lt_cv_sys_max_cmd_len=8192; - ;; - - mint*) - # On MiNT this can take a long time and run out of memory. - lt_cv_sys_max_cmd_len=8192; - ;; - - amigaos*) - # On AmigaOS with pdksh, this test takes hours, literally. - # So we just punt and use a minimum line length of 8192. - lt_cv_sys_max_cmd_len=8192; - ;; - - bitrig* | darwin* | dragonfly* | freebsd* | netbsd* | openbsd*) - # This has been around since 386BSD, at least. Likely further. - if test -x /sbin/sysctl; then - lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` - elif test -x /usr/sbin/sysctl; then - lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` - else - lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs - fi - # And add a safety zone - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` - ;; - - interix*) - # We know the value 262144 and hardcode it with a safety zone (like BSD) - lt_cv_sys_max_cmd_len=196608 - ;; - - os2*) - # The test takes a long time on OS/2. - lt_cv_sys_max_cmd_len=8192 - ;; - - osf*) - # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure - # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not - # nice to cause kernel panics so lets avoid the loop below. - # First set a reasonable default. - lt_cv_sys_max_cmd_len=16384 - # - if test -x /sbin/sysconfig; then - case `/sbin/sysconfig -q proc exec_disable_arg_limit` in - *1*) lt_cv_sys_max_cmd_len=-1 ;; - esac - fi - ;; - sco3.2v5*) - lt_cv_sys_max_cmd_len=102400 - ;; - sysv5* | sco5v6* | sysv4.2uw2*) - kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` - if test -n "$kargmax"; then - lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` - else - lt_cv_sys_max_cmd_len=32768 - fi - ;; - *) - lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` - if test -n "$lt_cv_sys_max_cmd_len" && \ - test undefined != "$lt_cv_sys_max_cmd_len"; then - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` - else - # Make teststring a little bigger before we do anything with it. - # a 1K string should be a reasonable start. - for i in 1 2 3 4 5 6 7 8; do - teststring=$teststring$teststring - done - SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} - # If test is not a shell built-in, we'll probably end up computing a - # maximum length that is only half of the actual maximum length, but - # we can't tell. - while { test X`env echo "$teststring$teststring" 2>/dev/null` \ - = "X$teststring$teststring"; } >/dev/null 2>&1 && - test 17 != "$i" # 1/2 MB should be enough - do - i=`expr $i + 1` - teststring=$teststring$teststring - done - # Only check the string length outside the loop. - lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` - teststring= - # Add a significant safety factor because C++ compilers can tack on - # massive amounts of additional arguments before passing them to the - # linker. It appears as though 1/2 is a usable value. - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` - fi - ;; - esac -]) -if test -n "$lt_cv_sys_max_cmd_len"; then - AC_MSG_RESULT($lt_cv_sys_max_cmd_len) -else - AC_MSG_RESULT(none) -fi -max_cmd_len=$lt_cv_sys_max_cmd_len -_LT_DECL([], [max_cmd_len], [0], - [What is the maximum length of a command?]) -])# LT_CMD_MAX_LEN - -# Old name: -AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], []) - - -# _LT_HEADER_DLFCN -# ---------------- -m4_defun([_LT_HEADER_DLFCN], -[AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl -])# _LT_HEADER_DLFCN - - -# _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, -# ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) -# ---------------------------------------------------------------- -m4_defun([_LT_TRY_DLOPEN_SELF], -[m4_require([_LT_HEADER_DLFCN])dnl -if test yes = "$cross_compiling"; then : - [$4] -else - lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 - lt_status=$lt_dlunknown - cat > conftest.$ac_ext <<_LT_EOF -[#line $LINENO "configure" -#include "confdefs.h" - -#if HAVE_DLFCN_H -#include -#endif - -#include - -#ifdef RTLD_GLOBAL -# define LT_DLGLOBAL RTLD_GLOBAL -#else -# ifdef DL_GLOBAL -# define LT_DLGLOBAL DL_GLOBAL -# else -# define LT_DLGLOBAL 0 -# endif -#endif - -/* We may have to define LT_DLLAZY_OR_NOW in the command line if we - find out it does not work in some platform. */ -#ifndef LT_DLLAZY_OR_NOW -# ifdef RTLD_LAZY -# define LT_DLLAZY_OR_NOW RTLD_LAZY -# else -# ifdef DL_LAZY -# define LT_DLLAZY_OR_NOW DL_LAZY -# else -# ifdef RTLD_NOW -# define LT_DLLAZY_OR_NOW RTLD_NOW -# else -# ifdef DL_NOW -# define LT_DLLAZY_OR_NOW DL_NOW -# else -# define LT_DLLAZY_OR_NOW 0 -# endif -# endif -# endif -# endif -#endif - -/* When -fvisibility=hidden is used, assume the code has been annotated - correspondingly for the symbols needed. */ -#if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) -int fnord () __attribute__((visibility("default"))); -#endif - -int fnord () { return 42; } -int main () -{ - void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); - int status = $lt_dlunknown; - - if (self) - { - if (dlsym (self,"fnord")) status = $lt_dlno_uscore; - else - { - if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; - else puts (dlerror ()); - } - /* dlclose (self); */ - } - else - puts (dlerror ()); - - return status; -}] -_LT_EOF - if AC_TRY_EVAL(ac_link) && test -s "conftest$ac_exeext" 2>/dev/null; then - (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null - lt_status=$? - case x$lt_status in - x$lt_dlno_uscore) $1 ;; - x$lt_dlneed_uscore) $2 ;; - x$lt_dlunknown|x*) $3 ;; - esac - else : - # compilation failed - $3 - fi -fi -rm -fr conftest* -])# _LT_TRY_DLOPEN_SELF - - -# LT_SYS_DLOPEN_SELF -# ------------------ -AC_DEFUN([LT_SYS_DLOPEN_SELF], -[m4_require([_LT_HEADER_DLFCN])dnl -if test yes != "$enable_dlopen"; then - enable_dlopen=unknown - enable_dlopen_self=unknown - enable_dlopen_self_static=unknown -else - lt_cv_dlopen=no - lt_cv_dlopen_libs= - - case $host_os in - beos*) - lt_cv_dlopen=load_add_on - lt_cv_dlopen_libs= - lt_cv_dlopen_self=yes - ;; - - mingw* | pw32* | cegcc*) - lt_cv_dlopen=LoadLibrary - lt_cv_dlopen_libs= - ;; - - cygwin*) - lt_cv_dlopen=dlopen - lt_cv_dlopen_libs= - ;; - - darwin*) - # if libdl is installed we need to link against it - AC_CHECK_LIB([dl], [dlopen], - [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl],[ - lt_cv_dlopen=dyld - lt_cv_dlopen_libs= - lt_cv_dlopen_self=yes - ]) - ;; - - tpf*) - # Don't try to run any link tests for TPF. We know it's impossible - # because TPF is a cross-compiler, and we know how we open DSOs. - lt_cv_dlopen=dlopen - lt_cv_dlopen_libs= - lt_cv_dlopen_self=no - ;; - - *) - AC_CHECK_FUNC([shl_load], - [lt_cv_dlopen=shl_load], - [AC_CHECK_LIB([dld], [shl_load], - [lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld], - [AC_CHECK_FUNC([dlopen], - [lt_cv_dlopen=dlopen], - [AC_CHECK_LIB([dl], [dlopen], - [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl], - [AC_CHECK_LIB([svld], [dlopen], - [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-lsvld], - [AC_CHECK_LIB([dld], [dld_link], - [lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld]) - ]) - ]) - ]) - ]) - ]) - ;; - esac - - if test no = "$lt_cv_dlopen"; then - enable_dlopen=no - else - enable_dlopen=yes - fi - - case $lt_cv_dlopen in - dlopen) - save_CPPFLAGS=$CPPFLAGS - test yes = "$ac_cv_header_dlfcn_h" && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" - - save_LDFLAGS=$LDFLAGS - wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" - - save_LIBS=$LIBS - LIBS="$lt_cv_dlopen_libs $LIBS" - - AC_CACHE_CHECK([whether a program can dlopen itself], - lt_cv_dlopen_self, [dnl - _LT_TRY_DLOPEN_SELF( - lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, - lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) - ]) - - if test yes = "$lt_cv_dlopen_self"; then - wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" - AC_CACHE_CHECK([whether a statically linked program can dlopen itself], - lt_cv_dlopen_self_static, [dnl - _LT_TRY_DLOPEN_SELF( - lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, - lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) - ]) - fi - - CPPFLAGS=$save_CPPFLAGS - LDFLAGS=$save_LDFLAGS - LIBS=$save_LIBS - ;; - esac - - case $lt_cv_dlopen_self in - yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; - *) enable_dlopen_self=unknown ;; - esac - - case $lt_cv_dlopen_self_static in - yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; - *) enable_dlopen_self_static=unknown ;; - esac -fi -_LT_DECL([dlopen_support], [enable_dlopen], [0], - [Whether dlopen is supported]) -_LT_DECL([dlopen_self], [enable_dlopen_self], [0], - [Whether dlopen of programs is supported]) -_LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0], - [Whether dlopen of statically linked programs is supported]) -])# LT_SYS_DLOPEN_SELF - -# Old name: -AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], []) - - -# _LT_COMPILER_C_O([TAGNAME]) -# --------------------------- -# Check to see if options -c and -o are simultaneously supported by compiler. -# This macro does not hard code the compiler like AC_PROG_CC_C_O. -m4_defun([_LT_COMPILER_C_O], -[m4_require([_LT_DECL_SED])dnl -m4_require([_LT_FILEUTILS_DEFAULTS])dnl -m4_require([_LT_TAG_COMPILER])dnl -AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], - [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)], - [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no - $RM -r conftest 2>/dev/null - mkdir conftest - cd conftest - mkdir out - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - lt_compiler_flag="-o out/conftest2.$ac_objext" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&AS_MESSAGE_LOG_FD - echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp - $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 - if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then - _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes - fi - fi - chmod u+w . 2>&AS_MESSAGE_LOG_FD - $RM conftest* - # SGI C++ compiler will create directory out/ii_files/ for - # template instantiation - test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files - $RM out/* && rmdir out - cd .. - $RM -r conftest - $RM conftest* -]) -_LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1], - [Does compiler simultaneously support -c and -o options?]) -])# _LT_COMPILER_C_O - - -# _LT_COMPILER_FILE_LOCKS([TAGNAME]) -# ---------------------------------- -# Check to see if we can do hard links to lock some files if needed -m4_defun([_LT_COMPILER_FILE_LOCKS], -[m4_require([_LT_ENABLE_LOCK])dnl -m4_require([_LT_FILEUTILS_DEFAULTS])dnl -_LT_COMPILER_C_O([$1]) - -hard_links=nottested -if test no = "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" && test no != "$need_locks"; then - # do not overwrite the value of need_locks provided by the user - AC_MSG_CHECKING([if we can lock with hard links]) - hard_links=yes - $RM conftest* - ln conftest.a conftest.b 2>/dev/null && hard_links=no - touch conftest.a - ln conftest.a conftest.b 2>&5 || hard_links=no - ln conftest.a conftest.b 2>/dev/null && hard_links=no - AC_MSG_RESULT([$hard_links]) - if test no = "$hard_links"; then - AC_MSG_WARN(['$CC' does not support '-c -o', so 'make -j' may be unsafe]) - need_locks=warn - fi -else - need_locks=no -fi -_LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?]) -])# _LT_COMPILER_FILE_LOCKS - - -# _LT_CHECK_OBJDIR -# ---------------- -m4_defun([_LT_CHECK_OBJDIR], -[AC_CACHE_CHECK([for objdir], [lt_cv_objdir], -[rm -f .libs 2>/dev/null -mkdir .libs 2>/dev/null -if test -d .libs; then - lt_cv_objdir=.libs -else - # MS-DOS does not allow filenames that begin with a dot. - lt_cv_objdir=_libs -fi -rmdir .libs 2>/dev/null]) -objdir=$lt_cv_objdir -_LT_DECL([], [objdir], [0], - [The name of the directory that contains temporary libtool files])dnl -m4_pattern_allow([LT_OBJDIR])dnl -AC_DEFINE_UNQUOTED([LT_OBJDIR], "$lt_cv_objdir/", - [Define to the sub-directory where libtool stores uninstalled libraries.]) -])# _LT_CHECK_OBJDIR - - -# _LT_LINKER_HARDCODE_LIBPATH([TAGNAME]) -# -------------------------------------- -# Check hardcoding attributes. -m4_defun([_LT_LINKER_HARDCODE_LIBPATH], -[AC_MSG_CHECKING([how to hardcode library paths into programs]) -_LT_TAGVAR(hardcode_action, $1)= -if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" || - test -n "$_LT_TAGVAR(runpath_var, $1)" || - test yes = "$_LT_TAGVAR(hardcode_automatic, $1)"; then - - # We can hardcode non-existent directories. - if test no != "$_LT_TAGVAR(hardcode_direct, $1)" && - # If the only mechanism to avoid hardcoding is shlibpath_var, we - # have to relink, otherwise we might link with an installed library - # when we should be linking with a yet-to-be-installed one - ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" && - test no != "$_LT_TAGVAR(hardcode_minus_L, $1)"; then - # Linking always hardcodes the temporary library directory. - _LT_TAGVAR(hardcode_action, $1)=relink - else - # We can link without hardcoding, and we can hardcode nonexisting dirs. - _LT_TAGVAR(hardcode_action, $1)=immediate - fi -else - # We cannot hardcode anything, or else we can only hardcode existing - # directories. - _LT_TAGVAR(hardcode_action, $1)=unsupported -fi -AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)]) - -if test relink = "$_LT_TAGVAR(hardcode_action, $1)" || - test yes = "$_LT_TAGVAR(inherit_rpath, $1)"; then - # Fast installation is not supported - enable_fast_install=no -elif test yes = "$shlibpath_overrides_runpath" || - test no = "$enable_shared"; then - # Fast installation is not necessary - enable_fast_install=needless -fi -_LT_TAGDECL([], [hardcode_action], [0], - [How to hardcode a shared library path into an executable]) -])# _LT_LINKER_HARDCODE_LIBPATH - - -# _LT_CMD_STRIPLIB -# ---------------- -m4_defun([_LT_CMD_STRIPLIB], -[m4_require([_LT_DECL_EGREP]) -striplib= -old_striplib= -AC_MSG_CHECKING([whether stripping libraries is possible]) -if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then - test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" - test -z "$striplib" && striplib="$STRIP --strip-unneeded" - AC_MSG_RESULT([yes]) -else -# FIXME - insert some real tests, host_os isn't really good enough - case $host_os in - darwin*) - if test -n "$STRIP"; then - striplib="$STRIP -x" - old_striplib="$STRIP -S" - AC_MSG_RESULT([yes]) - else - AC_MSG_RESULT([no]) - fi - ;; - *) - AC_MSG_RESULT([no]) - ;; - esac -fi -_LT_DECL([], [old_striplib], [1], [Commands to strip libraries]) -_LT_DECL([], [striplib], [1]) -])# _LT_CMD_STRIPLIB - - -# _LT_PREPARE_MUNGE_PATH_LIST -# --------------------------- -# Make sure func_munge_path_list() is defined correctly. -m4_defun([_LT_PREPARE_MUNGE_PATH_LIST], -[[# func_munge_path_list VARIABLE PATH -# ----------------------------------- -# VARIABLE is name of variable containing _space_ separated list of -# directories to be munged by the contents of PATH, which is string -# having a format: -# "DIR[:DIR]:" -# string "DIR[ DIR]" will be prepended to VARIABLE -# ":DIR[:DIR]" -# string "DIR[ DIR]" will be appended to VARIABLE -# "DIRP[:DIRP]::[DIRA:]DIRA" -# string "DIRP[ DIRP]" will be prepended to VARIABLE and string -# "DIRA[ DIRA]" will be appended to VARIABLE -# "DIR[:DIR]" -# VARIABLE will be replaced by "DIR[ DIR]" -func_munge_path_list () -{ - case x@S|@2 in - x) - ;; - *:) - eval @S|@1=\"`$ECHO @S|@2 | $SED 's/:/ /g'` \@S|@@S|@1\" - ;; - x:*) - eval @S|@1=\"\@S|@@S|@1 `$ECHO @S|@2 | $SED 's/:/ /g'`\" - ;; - *::*) - eval @S|@1=\"\@S|@@S|@1\ `$ECHO @S|@2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" - eval @S|@1=\"`$ECHO @S|@2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \@S|@@S|@1\" - ;; - *) - eval @S|@1=\"`$ECHO @S|@2 | $SED 's/:/ /g'`\" - ;; - esac -} -]])# _LT_PREPARE_PATH_LIST - - -# _LT_SYS_DYNAMIC_LINKER([TAG]) -# ----------------------------- -# PORTME Fill in your ld.so characteristics -m4_defun([_LT_SYS_DYNAMIC_LINKER], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -m4_require([_LT_DECL_EGREP])dnl -m4_require([_LT_FILEUTILS_DEFAULTS])dnl -m4_require([_LT_DECL_OBJDUMP])dnl -m4_require([_LT_DECL_SED])dnl -m4_require([_LT_CHECK_SHELL_FEATURES])dnl -m4_require([_LT_PREPARE_MUNGE_PATH_LIST])dnl -AC_MSG_CHECKING([dynamic linker characteristics]) -m4_if([$1], - [], [ -if test yes = "$GCC"; then - case $host_os in - darwin*) lt_awk_arg='/^libraries:/,/LR/' ;; - *) lt_awk_arg='/^libraries:/' ;; - esac - case $host_os in - mingw* | cegcc*) lt_sed_strip_eq='s|=\([[A-Za-z]]:\)|\1|g' ;; - *) lt_sed_strip_eq='s|=/|/|g' ;; - esac - lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` - case $lt_search_path_spec in - *\;*) - # if the path contains ";" then we assume it to be the separator - # otherwise default to the standard path separator (i.e. ":") - it is - # assumed that no part of a normal pathname contains ";" but that should - # okay in the real world where ";" in dirpaths is itself problematic. - lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` - ;; - *) - lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` - ;; - esac - # Ok, now we have the path, separated by spaces, we can step through it - # and add multilib dir if necessary... - lt_tmp_lt_search_path_spec= - lt_multi_os_dir=/`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` - # ...but if some path component already ends with the multilib dir we assume - # that all is fine and trust -print-search-dirs as is (GCC 4.2? or newer). - case "$lt_multi_os_dir; $lt_search_path_spec " in - "/; "* | "/.; "* | "/./; "* | *"$lt_multi_os_dir "* | *"$lt_multi_os_dir/ "*) - lt_multi_os_dir= - ;; - esac - for lt_sys_path in $lt_search_path_spec; do - if test -d "$lt_sys_path$lt_multi_os_dir"; then - lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path$lt_multi_os_dir" - elif test -n "$lt_multi_os_dir"; then - test -d "$lt_sys_path" && \ - lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" - fi - done - lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' -BEGIN {RS = " "; FS = "/|\n";} { - lt_foo = ""; - lt_count = 0; - for (lt_i = NF; lt_i > 0; lt_i--) { - if ($lt_i != "" && $lt_i != ".") { - if ($lt_i == "..") { - lt_count++; - } else { - if (lt_count == 0) { - lt_foo = "/" $lt_i lt_foo; - } else { - lt_count--; - } - } - } - } - if (lt_foo != "") { lt_freq[[lt_foo]]++; } - if (lt_freq[[lt_foo]] == 1) { print lt_foo; } -}'` - # AWK program above erroneously prepends '/' to C:/dos/paths - # for these hosts. - case $host_os in - mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ - $SED 's|/\([[A-Za-z]]:\)|\1|g'` ;; - esac - sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` -else - sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" -fi]) -library_names_spec= -libname_spec='lib$name' -soname_spec= -shrext_cmds=.so -postinstall_cmds= -postuninstall_cmds= -finish_cmds= -finish_eval= -shlibpath_var= -shlibpath_overrides_runpath=unknown -version_type=none -dynamic_linker="$host_os ld.so" -sys_lib_dlsearch_path_spec="/lib /usr/lib" -need_lib_prefix=unknown -hardcode_into_libs=no - -# when you set need_version to no, make sure it does not cause -set_version -# flags to be left without arguments -need_version=unknown - -AC_ARG_VAR([LT_SYS_LIBRARY_PATH], -[User-defined run-time library search path.]) - -case $host_os in -aix3*) - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='$libname$release$shared_ext$versuffix $libname.a' - shlibpath_var=LIBPATH - - # AIX 3 has no versioning support, so we append a major version to the name. - soname_spec='$libname$release$shared_ext$major' - ;; - -aix[[4-9]]*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - hardcode_into_libs=yes - if test ia64 = "$host_cpu"; then - # AIX 5 supports IA64 - library_names_spec='$libname$release$shared_ext$major $libname$release$shared_ext$versuffix $libname$shared_ext' - shlibpath_var=LD_LIBRARY_PATH - else - # With GCC up to 2.95.x, collect2 would create an import file - # for dependence libraries. The import file would start with - # the line '#! .'. This would cause the generated library to - # depend on '.', always an invalid library. This was fixed in - # development snapshots of GCC prior to 3.0. - case $host_os in - aix4 | aix4.[[01]] | aix4.[[01]].*) - if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' - echo ' yes ' - echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then - : - else - can_build_shared=no - fi - ;; - esac - # Using Import Files as archive members, it is possible to support - # filename-based versioning of shared library archives on AIX. While - # this would work for both with and without runtime linking, it will - # prevent static linking of such archives. So we do filename-based - # shared library versioning with .so extension only, which is used - # when both runtime linking and shared linking is enabled. - # Unfortunately, runtime linking may impact performance, so we do - # not want this to be the default eventually. Also, we use the - # versioned .so libs for executables only if there is the -brtl - # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only. - # To allow for filename-based versioning support, we need to create - # libNAME.so.V as an archive file, containing: - # *) an Import File, referring to the versioned filename of the - # archive as well as the shared archive member, telling the - # bitwidth (32 or 64) of that shared object, and providing the - # list of exported symbols of that shared object, eventually - # decorated with the 'weak' keyword - # *) the shared object with the F_LOADONLY flag set, to really avoid - # it being seen by the linker. - # At run time we better use the real file rather than another symlink, - # but for link time we create the symlink libNAME.so -> libNAME.so.V - - case $with_aix_soname,$aix_use_runtimelinking in - # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct - # soname into executable. Probably we can add versioning support to - # collect2, so additional links can be useful in future. - aix,yes) # traditional libtool - dynamic_linker='AIX unversionable lib.so' - # If using run time linking (on AIX 4.2 or later) use lib.so - # instead of lib.a to let people know that these are not - # typical AIX shared libraries. - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - ;; - aix,no) # traditional AIX only - dynamic_linker='AIX lib.a[(]lib.so.V[)]' - # We preserve .a as extension for shared libraries through AIX4.2 - # and later when we are not doing run time linking. - library_names_spec='$libname$release.a $libname.a' - soname_spec='$libname$release$shared_ext$major' - ;; - svr4,*) # full svr4 only - dynamic_linker="AIX lib.so.V[(]$shared_archive_member_spec.o[)]" - library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' - # We do not specify a path in Import Files, so LIBPATH fires. - shlibpath_overrides_runpath=yes - ;; - *,yes) # both, prefer svr4 - dynamic_linker="AIX lib.so.V[(]$shared_archive_member_spec.o[)], lib.a[(]lib.so.V[)]" - library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' - # unpreferred sharedlib libNAME.a needs extra handling - postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"' - postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"' - # We do not specify a path in Import Files, so LIBPATH fires. - shlibpath_overrides_runpath=yes - ;; - *,no) # both, prefer aix - dynamic_linker="AIX lib.a[(]lib.so.V[)], lib.so.V[(]$shared_archive_member_spec.o[)]" - library_names_spec='$libname$release.a $libname.a' - soname_spec='$libname$release$shared_ext$major' - # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling - postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)' - postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"' - ;; - esac - shlibpath_var=LIBPATH - fi - ;; - -amigaos*) - case $host_cpu in - powerpc) - # Since July 2007 AmigaOS4 officially supports .so libraries. - # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - ;; - m68k) - library_names_spec='$libname.ixlibrary $libname.a' - # Create ${libname}_ixlibrary.a entries in /sys/libs. - finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' - ;; - esac - ;; - -beos*) - library_names_spec='$libname$shared_ext' - dynamic_linker="$host_os ld.so" - shlibpath_var=LIBRARY_PATH - ;; - -bsdi[[45]]*) - version_type=linux # correct to gnu/linux during the next big refactor - need_version=no - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" - sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" - # the default ld.so.conf also contains /usr/contrib/lib and - # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow - # libtool to hard-code these into programs - ;; - -cygwin* | mingw* | pw32* | cegcc*) - version_type=windows - shrext_cmds=.dll - need_version=no - need_lib_prefix=no - - case $GCC,$cc_basename in - yes,*) - # gcc - library_names_spec='$libname.dll.a' - # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \$file`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname~ - chmod a+x \$dldir/$dlname~ - if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then - eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; - fi' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $RM \$dlpath' - shlibpath_overrides_runpath=yes - - case $host_os in - cygwin*) - # Cygwin DLLs use 'cyg' prefix rather than 'lib' - soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' -m4_if([$1], [],[ - sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"]) - ;; - mingw* | cegcc*) - # MinGW DLLs use traditional 'lib' prefix - soname_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' - ;; - pw32*) - # pw32 DLLs use 'pw' prefix rather than 'lib' - library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' - ;; - esac - dynamic_linker='Win32 ld.exe' - ;; - - *,cl*) - # Native MSVC - libname_spec='$name' - soname_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' - library_names_spec='$libname.dll.lib' - - case $build_os in - mingw*) - sys_lib_search_path_spec= - lt_save_ifs=$IFS - IFS=';' - for lt_path in $LIB - do - IFS=$lt_save_ifs - # Let DOS variable expansion print the short 8.3 style file name. - lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` - sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" - done - IFS=$lt_save_ifs - # Convert to MSYS style. - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'` - ;; - cygwin*) - # Convert to unix form, then to dos form, then back to unix form - # but this time dos style (no spaces!) so that the unix form looks - # like /cygdrive/c/PROGRA~1:/cygdr... - sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` - sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` - sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - ;; - *) - sys_lib_search_path_spec=$LIB - if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then - # It is most probably a Windows format PATH. - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` - else - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi - # FIXME: find the short name or the path components, as spaces are - # common. (e.g. "Program Files" -> "PROGRA~1") - ;; - esac - - # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \$file`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $RM \$dlpath' - shlibpath_overrides_runpath=yes - dynamic_linker='Win32 link.exe' - ;; - - *) - # Assume MSVC wrapper - library_names_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext $libname.lib' - dynamic_linker='Win32 ld.exe' - ;; - esac - # FIXME: first we should search . and the directory the executable is in - shlibpath_var=PATH - ;; - -darwin* | rhapsody*) - dynamic_linker="$host_os dyld" - version_type=darwin - need_lib_prefix=no - need_version=no - library_names_spec='$libname$release$major$shared_ext $libname$shared_ext' - soname_spec='$libname$release$major$shared_ext' - shlibpath_overrides_runpath=yes - shlibpath_var=DYLD_LIBRARY_PATH - shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' -m4_if([$1], [],[ - sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) - sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' - ;; - -dgux*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -freebsd* | dragonfly*) - # DragonFly does not have aout. When/if they implement a new - # versioning mechanism, adjust this. - if test -x /usr/bin/objformat; then - objformat=`/usr/bin/objformat` - else - case $host_os in - freebsd[[23]].*) objformat=aout ;; - *) objformat=elf ;; - esac - fi - version_type=freebsd-$objformat - case $version_type in - freebsd-elf*) - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - need_version=no - need_lib_prefix=no - ;; - freebsd-*) - library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' - need_version=yes - ;; - esac - shlibpath_var=LD_LIBRARY_PATH - case $host_os in - freebsd2.*) - shlibpath_overrides_runpath=yes - ;; - freebsd3.[[01]]* | freebsdelf3.[[01]]*) - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ - freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - *) # from 4.6 on, and DragonFly - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - esac - ;; - -haiku*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - dynamic_linker="$host_os runtime_loader" - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - shlibpath_var=LIBRARY_PATH - shlibpath_overrides_runpath=no - sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' - hardcode_into_libs=yes - ;; - -hpux9* | hpux10* | hpux11*) - # Give a soname corresponding to the major version so that dld.sl refuses to - # link against other versions. - version_type=sunos - need_lib_prefix=no - need_version=no - case $host_cpu in - ia64*) - shrext_cmds='.so' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.so" - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - if test 32 = "$HPUX_IA64_MODE"; then - sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" - sys_lib_dlsearch_path_spec=/usr/lib/hpux32 - else - sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" - sys_lib_dlsearch_path_spec=/usr/lib/hpux64 - fi - ;; - hppa*64*) - shrext_cmds='.sl' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.sl" - shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - *) - shrext_cmds='.sl' - dynamic_linker="$host_os dld.sl" - shlibpath_var=SHLIB_PATH - shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - ;; - esac - # HP-UX runs *really* slowly unless shared libraries are mode 555, ... - postinstall_cmds='chmod 555 $lib' - # or fails outright, so override atomically: - install_override_mode=555 - ;; - -interix[[3-9]]*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -irix5* | irix6* | nonstopux*) - case $host_os in - nonstopux*) version_type=nonstopux ;; - *) - if test yes = "$lt_cv_prog_gnu_ld"; then - version_type=linux # correct to gnu/linux during the next big refactor - else - version_type=irix - fi ;; - esac - need_lib_prefix=no - need_version=no - soname_spec='$libname$release$shared_ext$major' - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext' - case $host_os in - irix5* | nonstopux*) - libsuff= shlibsuff= - ;; - *) - case $LD in # libtool.m4 will add one of these switches to LD - *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") - libsuff= shlibsuff= libmagic=32-bit;; - *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") - libsuff=32 shlibsuff=N32 libmagic=N32;; - *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") - libsuff=64 shlibsuff=64 libmagic=64-bit;; - *) libsuff= shlibsuff= libmagic=never-match;; - esac - ;; - esac - shlibpath_var=LD_LIBRARY${shlibsuff}_PATH - shlibpath_overrides_runpath=no - sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff" - sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff" - hardcode_into_libs=yes - ;; - -# No shared lib support for Linux oldld, aout, or coff. -linux*oldld* | linux*aout* | linux*coff*) - dynamic_linker=no - ;; - -linux*android*) - version_type=none # Android doesn't support versioned libraries. - need_lib_prefix=no - need_version=no - library_names_spec='$libname$release$shared_ext' - soname_spec='$libname$release$shared_ext' - finish_cmds= - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - - # This implies no fast_install, which is unacceptable. - # Some rework will be needed to allow for fast_install - # before this can be enabled. - hardcode_into_libs=yes - - dynamic_linker='Android linker' - # Don't embed -rpath directories since the linker doesn't support them. - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - ;; - -# This must be glibc/ELF. -linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - - # Some binutils ld are patched to set DT_RUNPATH - AC_CACHE_VAL([lt_cv_shlibpath_overrides_runpath], - [lt_cv_shlibpath_overrides_runpath=no - save_LDFLAGS=$LDFLAGS - save_libdir=$libdir - eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \ - LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\"" - AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], - [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null], - [lt_cv_shlibpath_overrides_runpath=yes])]) - LDFLAGS=$save_LDFLAGS - libdir=$save_libdir - ]) - shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath - - # This implies no fast_install, which is unacceptable. - # Some rework will be needed to allow for fast_install - # before this can be enabled. - hardcode_into_libs=yes - - # Ideally, we could use ldconfig to report *all* directores which are - # searched for libraries, however this is still not possible. Aside from not - # being certain /sbin/ldconfig is available, command - # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64, - # even though it is searched at run-time. Try to do the best guess by - # appending ld.so.conf contents (and includes) to the search path. - if test -f /etc/ld.so.conf; then - lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` - sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" - fi - - # We used to test for /lib/ld.so.1 and disable shared libraries on - # powerpc, because MkLinux only supported shared libraries with the - # GNU dynamic linker. Since this was broken with cross compilers, - # most powerpc-linux boxes support dynamic linking these days and - # people can always --disable-shared, the test was removed, and we - # assume the GNU/Linux dynamic linker is in use. - dynamic_linker='GNU/Linux ld.so' - ;; - -netbsdelf*-gnu) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - dynamic_linker='NetBSD ld.elf_so' - ;; - -netbsd*) - version_type=sunos - need_lib_prefix=no - need_version=no - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - dynamic_linker='NetBSD (a.out) ld.so' - else - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - dynamic_linker='NetBSD ld.elf_so' - fi - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - -newsos6) - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; - -*nto* | *qnx*) - version_type=qnx - need_lib_prefix=no - need_version=no - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - dynamic_linker='ldqnx.so' - ;; - -openbsd* | bitrig*) - version_type=sunos - sys_lib_dlsearch_path_spec=/usr/lib - need_lib_prefix=no - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then - need_version=no - else - need_version=yes - fi - library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; - -os2*) - libname_spec='$name' - version_type=windows - shrext_cmds=.dll - need_version=no - need_lib_prefix=no - # OS/2 can only load a DLL with a base name of 8 characters or less. - soname_spec='`test -n "$os2dllname" && libname="$os2dllname"; - v=$($ECHO $release$versuffix | tr -d .-); - n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _); - $ECHO $n$v`$shared_ext' - library_names_spec='${libname}_dll.$libext' - dynamic_linker='OS/2 ld.exe' - shlibpath_var=BEGINLIBPATH - sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - postinstall_cmds='base_file=`basename \$file`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname~ - chmod a+x \$dldir/$dlname~ - if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then - eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; - fi' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $RM \$dlpath' - ;; - -osf3* | osf4* | osf5*) - version_type=osf - need_lib_prefix=no - need_version=no - soname_spec='$libname$release$shared_ext$major' - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - -rdos*) - dynamic_linker=no - ;; - -solaris*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - # ldd complains unless libraries are executable - postinstall_cmds='chmod +x $lib' - ;; - -sunos4*) - version_type=sunos - library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' - finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - if test yes = "$with_gnu_ld"; then - need_lib_prefix=no - fi - need_version=yes - ;; - -sysv4 | sysv4.3*) - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - shlibpath_var=LD_LIBRARY_PATH - case $host_vendor in - sni) - shlibpath_overrides_runpath=no - need_lib_prefix=no - runpath_var=LD_RUN_PATH - ;; - siemens) - need_lib_prefix=no - ;; - motorola) - need_lib_prefix=no - need_version=no - shlibpath_overrides_runpath=no - sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' - ;; - esac - ;; - -sysv4*MP*) - if test -d /usr/nec; then - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext' - soname_spec='$libname$shared_ext.$major' - shlibpath_var=LD_LIBRARY_PATH - fi - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - version_type=sco - need_lib_prefix=no - need_version=no - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - if test yes = "$with_gnu_ld"; then - sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' - else - sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' - case $host_os in - sco3.2v5*) - sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" - ;; - esac - fi - sys_lib_dlsearch_path_spec='/usr/lib' - ;; - -tpf*) - # TPF is a cross-target only. Preferred cross-host = GNU/Linux. - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -uts4*) - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -*) - dynamic_linker=no - ;; -esac -AC_MSG_RESULT([$dynamic_linker]) -test no = "$dynamic_linker" && can_build_shared=no - -variables_saved_for_relink="PATH $shlibpath_var $runpath_var" -if test yes = "$GCC"; then - variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" -fi - -if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then - sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec -fi - -if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then - sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec -fi - -# remember unaugmented sys_lib_dlsearch_path content for libtool script decls... -configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec - -# ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code -func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH" - -# to be used as default LT_SYS_LIBRARY_PATH value in generated libtool -configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH - -_LT_DECL([], [variables_saved_for_relink], [1], - [Variables whose values should be saved in libtool wrapper scripts and - restored at link time]) -_LT_DECL([], [need_lib_prefix], [0], - [Do we need the "lib" prefix for modules?]) -_LT_DECL([], [need_version], [0], [Do we need a version for libraries?]) -_LT_DECL([], [version_type], [0], [Library versioning type]) -_LT_DECL([], [runpath_var], [0], [Shared library runtime path variable]) -_LT_DECL([], [shlibpath_var], [0],[Shared library path variable]) -_LT_DECL([], [shlibpath_overrides_runpath], [0], - [Is shlibpath searched before the hard-coded library search path?]) -_LT_DECL([], [libname_spec], [1], [Format of library name prefix]) -_LT_DECL([], [library_names_spec], [1], - [[List of archive names. First name is the real one, the rest are links. - The last name is the one that the linker finds with -lNAME]]) -_LT_DECL([], [soname_spec], [1], - [[The coded name of the library, if different from the real name]]) -_LT_DECL([], [install_override_mode], [1], - [Permission mode override for installation of shared libraries]) -_LT_DECL([], [postinstall_cmds], [2], - [Command to use after installation of a shared archive]) -_LT_DECL([], [postuninstall_cmds], [2], - [Command to use after uninstallation of a shared archive]) -_LT_DECL([], [finish_cmds], [2], - [Commands used to finish a libtool library installation in a directory]) -_LT_DECL([], [finish_eval], [1], - [[As "finish_cmds", except a single script fragment to be evaled but - not shown]]) -_LT_DECL([], [hardcode_into_libs], [0], - [Whether we should hardcode library paths into libraries]) -_LT_DECL([], [sys_lib_search_path_spec], [2], - [Compile-time system search path for libraries]) -_LT_DECL([sys_lib_dlsearch_path_spec], [configure_time_dlsearch_path], [2], - [Detected run-time system search path for libraries]) -_LT_DECL([], [configure_time_lt_sys_library_path], [2], - [Explicit LT_SYS_LIBRARY_PATH set during ./configure time]) -])# _LT_SYS_DYNAMIC_LINKER - - -# _LT_PATH_TOOL_PREFIX(TOOL) -# -------------------------- -# find a file program that can recognize shared library -AC_DEFUN([_LT_PATH_TOOL_PREFIX], -[m4_require([_LT_DECL_EGREP])dnl -AC_MSG_CHECKING([for $1]) -AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, -[case $MAGIC_CMD in -[[\\/*] | ?:[\\/]*]) - lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. - ;; -*) - lt_save_MAGIC_CMD=$MAGIC_CMD - lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR -dnl $ac_dummy forces splitting on constant user-supplied paths. -dnl POSIX.2 word splitting is done only on the output of word expansions, -dnl not every word. This closes a longstanding sh security hole. - ac_dummy="m4_if([$2], , $PATH, [$2])" - for ac_dir in $ac_dummy; do - IFS=$lt_save_ifs - test -z "$ac_dir" && ac_dir=. - if test -f "$ac_dir/$1"; then - lt_cv_path_MAGIC_CMD=$ac_dir/"$1" - if test -n "$file_magic_test_file"; then - case $deplibs_check_method in - "file_magic "*) - file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` - MAGIC_CMD=$lt_cv_path_MAGIC_CMD - if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | - $EGREP "$file_magic_regex" > /dev/null; then - : - else - cat <<_LT_EOF 1>&2 - -*** Warning: the command libtool uses to detect shared libraries, -*** $file_magic_cmd, produces output that libtool cannot recognize. -*** The result is that libtool may fail to recognize shared libraries -*** as such. This will affect the creation of libtool libraries that -*** depend on shared libraries, but programs linked with such libtool -*** libraries will work regardless of this problem. Nevertheless, you -*** may want to report the problem to your system manager and/or to -*** bug-libtool@gnu.org - -_LT_EOF - fi ;; - esac - fi - break - fi - done - IFS=$lt_save_ifs - MAGIC_CMD=$lt_save_MAGIC_CMD - ;; -esac]) -MAGIC_CMD=$lt_cv_path_MAGIC_CMD -if test -n "$MAGIC_CMD"; then - AC_MSG_RESULT($MAGIC_CMD) -else - AC_MSG_RESULT(no) -fi -_LT_DECL([], [MAGIC_CMD], [0], - [Used to examine libraries when file_magic_cmd begins with "file"])dnl -])# _LT_PATH_TOOL_PREFIX - -# Old name: -AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], []) - - -# _LT_PATH_MAGIC -# -------------- -# find a file program that can recognize a shared library -m4_defun([_LT_PATH_MAGIC], -[_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) -if test -z "$lt_cv_path_MAGIC_CMD"; then - if test -n "$ac_tool_prefix"; then - _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) - else - MAGIC_CMD=: - fi -fi -])# _LT_PATH_MAGIC - - -# LT_PATH_LD -# ---------- -# find the pathname to the GNU or non-GNU linker -AC_DEFUN([LT_PATH_LD], -[AC_REQUIRE([AC_PROG_CC])dnl -AC_REQUIRE([AC_CANONICAL_HOST])dnl -AC_REQUIRE([AC_CANONICAL_BUILD])dnl -m4_require([_LT_DECL_SED])dnl -m4_require([_LT_DECL_EGREP])dnl -m4_require([_LT_PROG_ECHO_BACKSLASH])dnl - -AC_ARG_WITH([gnu-ld], - [AS_HELP_STRING([--with-gnu-ld], - [assume the C compiler uses GNU ld @<:@default=no@:>@])], - [test no = "$withval" || with_gnu_ld=yes], - [with_gnu_ld=no])dnl - -ac_prog=ld -if test yes = "$GCC"; then - # Check if gcc -print-prog-name=ld gives a path. - AC_MSG_CHECKING([for ld used by $CC]) - case $host in - *-*-mingw*) - # gcc leaves a trailing carriage return, which upsets mingw - ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; - *) - ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; - esac - case $ac_prog in - # Accept absolute paths. - [[\\/]]* | ?:[[\\/]]*) - re_direlt='/[[^/]][[^/]]*/\.\./' - # Canonicalize the pathname of ld - ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` - while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do - ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` - done - test -z "$LD" && LD=$ac_prog - ;; - "") - # If it fails, then pretend we aren't using GCC. - ac_prog=ld - ;; - *) - # If it is relative, then search for the first ld in PATH. - with_gnu_ld=unknown - ;; - esac -elif test yes = "$with_gnu_ld"; then - AC_MSG_CHECKING([for GNU ld]) -else - AC_MSG_CHECKING([for non-GNU ld]) -fi -AC_CACHE_VAL(lt_cv_path_LD, -[if test -z "$LD"; then - lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR - for ac_dir in $PATH; do - IFS=$lt_save_ifs - test -z "$ac_dir" && ac_dir=. - if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then - lt_cv_path_LD=$ac_dir/$ac_prog - # Check to see if the program is GNU ld. I'd rather use --version, - # but apparently some variants of GNU ld only accept -v. - # Break only if it was the GNU/non-GNU ld that we prefer. - case `"$lt_cv_path_LD" -v 2>&1 &1 conftest.i -cat conftest.i conftest.i >conftest2.i -: ${lt_DD:=$DD} -AC_PATH_PROGS_FEATURE_CHECK([lt_DD], [dd], -[if "$ac_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then - cmp -s conftest.i conftest.out \ - && ac_cv_path_lt_DD="$ac_path_lt_DD" ac_path_lt_DD_found=: -fi]) -rm -f conftest.i conftest2.i conftest.out]) -])# _LT_PATH_DD - - -# _LT_CMD_TRUNCATE -# ---------------- -# find command to truncate a binary pipe -m4_defun([_LT_CMD_TRUNCATE], -[m4_require([_LT_PATH_DD]) -AC_CACHE_CHECK([how to truncate binary pipes], [lt_cv_truncate_bin], -[printf 0123456789abcdef0123456789abcdef >conftest.i -cat conftest.i conftest.i >conftest2.i -lt_cv_truncate_bin= -if "$ac_cv_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then - cmp -s conftest.i conftest.out \ - && lt_cv_truncate_bin="$ac_cv_path_lt_DD bs=4096 count=1" -fi -rm -f conftest.i conftest2.i conftest.out -test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q"]) -_LT_DECL([lt_truncate_bin], [lt_cv_truncate_bin], [1], - [Command to truncate a binary pipe]) -])# _LT_CMD_TRUNCATE - - -# _LT_CHECK_MAGIC_METHOD -# ---------------------- -# how to check for library dependencies -# -- PORTME fill in with the dynamic library characteristics -m4_defun([_LT_CHECK_MAGIC_METHOD], -[m4_require([_LT_DECL_EGREP]) -m4_require([_LT_DECL_OBJDUMP]) -AC_CACHE_CHECK([how to recognize dependent libraries], -lt_cv_deplibs_check_method, -[lt_cv_file_magic_cmd='$MAGIC_CMD' -lt_cv_file_magic_test_file= -lt_cv_deplibs_check_method='unknown' -# Need to set the preceding variable on all platforms that support -# interlibrary dependencies. -# 'none' -- dependencies not supported. -# 'unknown' -- same as none, but documents that we really don't know. -# 'pass_all' -- all dependencies passed with no checks. -# 'test_compile' -- check by making test program. -# 'file_magic [[regex]]' -- check by looking for files in library path -# that responds to the $file_magic_cmd with a given extended regex. -# If you have 'file' or equivalent on your system and you're not sure -# whether 'pass_all' will *always* work, you probably want this one. - -case $host_os in -aix[[4-9]]*) - lt_cv_deplibs_check_method=pass_all - ;; - -beos*) - lt_cv_deplibs_check_method=pass_all - ;; - -bsdi[[45]]*) - lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)' - lt_cv_file_magic_cmd='/usr/bin/file -L' - lt_cv_file_magic_test_file=/shlib/libc.so - ;; - -cygwin*) - # func_win32_libid is a shell function defined in ltmain.sh - lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' - lt_cv_file_magic_cmd='func_win32_libid' - ;; - -mingw* | pw32*) - # Base MSYS/MinGW do not provide the 'file' command needed by - # func_win32_libid shell function, so use a weaker test based on 'objdump', - # unless we find 'file', for example because we are cross-compiling. - if ( file / ) >/dev/null 2>&1; then - lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' - lt_cv_file_magic_cmd='func_win32_libid' - else - # Keep this pattern in sync with the one in func_win32_libid. - lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' - lt_cv_file_magic_cmd='$OBJDUMP -f' - fi - ;; - -cegcc*) - # use the weaker test based on 'objdump'. See mingw*. - lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' - lt_cv_file_magic_cmd='$OBJDUMP -f' - ;; - -darwin* | rhapsody*) - lt_cv_deplibs_check_method=pass_all - ;; - -freebsd* | dragonfly*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then - case $host_cpu in - i*86 ) - # Not sure whether the presence of OpenBSD here was a mistake. - # Let's accept both of them until this is cleared up. - lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' - lt_cv_file_magic_cmd=/usr/bin/file - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` - ;; - esac - else - lt_cv_deplibs_check_method=pass_all - fi - ;; - -haiku*) - lt_cv_deplibs_check_method=pass_all - ;; - -hpux10.20* | hpux11*) - lt_cv_file_magic_cmd=/usr/bin/file - case $host_cpu in - ia64*) - lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' - lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so - ;; - hppa*64*) - [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]'] - lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl - ;; - *) - lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]]\.[[0-9]]) shared library' - lt_cv_file_magic_test_file=/usr/lib/libc.sl - ;; - esac - ;; - -interix[[3-9]]*) - # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here - lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' - ;; - -irix5* | irix6* | nonstopux*) - case $LD in - *-32|*"-32 ") libmagic=32-bit;; - *-n32|*"-n32 ") libmagic=N32;; - *-64|*"-64 ") libmagic=64-bit;; - *) libmagic=never-match;; - esac - lt_cv_deplibs_check_method=pass_all - ;; - -# This must be glibc/ELF. -linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) - lt_cv_deplibs_check_method=pass_all - ;; - -netbsd* | netbsdelf*-gnu) - if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then - lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' - else - lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' - fi - ;; - -newos6*) - lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' - lt_cv_file_magic_cmd=/usr/bin/file - lt_cv_file_magic_test_file=/usr/lib/libnls.so - ;; - -*nto* | *qnx*) - lt_cv_deplibs_check_method=pass_all - ;; - -openbsd* | bitrig*) - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then - lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' - else - lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' - fi - ;; - -osf3* | osf4* | osf5*) - lt_cv_deplibs_check_method=pass_all - ;; - -rdos*) - lt_cv_deplibs_check_method=pass_all - ;; - -solaris*) - lt_cv_deplibs_check_method=pass_all - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - lt_cv_deplibs_check_method=pass_all - ;; - -sysv4 | sysv4.3*) - case $host_vendor in - motorola) - lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` - ;; - ncr) - lt_cv_deplibs_check_method=pass_all - ;; - sequent) - lt_cv_file_magic_cmd='/bin/file' - lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' - ;; - sni) - lt_cv_file_magic_cmd='/bin/file' - lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" - lt_cv_file_magic_test_file=/lib/libc.so - ;; - siemens) - lt_cv_deplibs_check_method=pass_all - ;; - pc) - lt_cv_deplibs_check_method=pass_all - ;; - esac - ;; - -tpf*) - lt_cv_deplibs_check_method=pass_all - ;; -os2*) - lt_cv_deplibs_check_method=pass_all - ;; -esac -]) - -file_magic_glob= -want_nocaseglob=no -if test "$build" = "$host"; then - case $host_os in - mingw* | pw32*) - if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then - want_nocaseglob=yes - else - file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[[\1]]\/[[\1]]\/g;/g"` - fi - ;; - esac -fi - -file_magic_cmd=$lt_cv_file_magic_cmd -deplibs_check_method=$lt_cv_deplibs_check_method -test -z "$deplibs_check_method" && deplibs_check_method=unknown - -_LT_DECL([], [deplibs_check_method], [1], - [Method to check whether dependent libraries are shared objects]) -_LT_DECL([], [file_magic_cmd], [1], - [Command to use when deplibs_check_method = "file_magic"]) -_LT_DECL([], [file_magic_glob], [1], - [How to find potential files when deplibs_check_method = "file_magic"]) -_LT_DECL([], [want_nocaseglob], [1], - [Find potential files using nocaseglob when deplibs_check_method = "file_magic"]) -])# _LT_CHECK_MAGIC_METHOD - - -# LT_PATH_NM -# ---------- -# find the pathname to a BSD- or MS-compatible name lister -AC_DEFUN([LT_PATH_NM], -[AC_REQUIRE([AC_PROG_CC])dnl -AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM, -[if test -n "$NM"; then - # Let the user override the test. - lt_cv_path_NM=$NM -else - lt_nm_to_check=${ac_tool_prefix}nm - if test -n "$ac_tool_prefix" && test "$build" = "$host"; then - lt_nm_to_check="$lt_nm_to_check nm" - fi - for lt_tmp_nm in $lt_nm_to_check; do - lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR - for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do - IFS=$lt_save_ifs - test -z "$ac_dir" && ac_dir=. - tmp_nm=$ac_dir/$lt_tmp_nm - if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext"; then - # Check to see if the nm accepts a BSD-compat flag. - # Adding the 'sed 1q' prevents false positives on HP-UX, which says: - # nm: unknown option "B" ignored - # Tru64's nm complains that /dev/null is an invalid object file - # MSYS converts /dev/null to NUL, MinGW nm treats NUL as empty - case $build_os in - mingw*) lt_bad_file=conftest.nm/nofile ;; - *) lt_bad_file=/dev/null ;; - esac - case `"$tmp_nm" -B $lt_bad_file 2>&1 | sed '1q'` in - *$lt_bad_file* | *'Invalid file or object type'*) - lt_cv_path_NM="$tmp_nm -B" - break 2 - ;; - *) - case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in - */dev/null*) - lt_cv_path_NM="$tmp_nm -p" - break 2 - ;; - *) - lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but - continue # so that we can try to find one that supports BSD flags - ;; - esac - ;; - esac - fi - done - IFS=$lt_save_ifs - done - : ${lt_cv_path_NM=no} -fi]) -if test no != "$lt_cv_path_NM"; then - NM=$lt_cv_path_NM -else - # Didn't find any BSD compatible name lister, look for dumpbin. - if test -n "$DUMPBIN"; then : - # Let the user override the test. - else - AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :) - case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in - *COFF*) - DUMPBIN="$DUMPBIN -symbols -headers" - ;; - *) - DUMPBIN=: - ;; - esac - fi - AC_SUBST([DUMPBIN]) - if test : != "$DUMPBIN"; then - NM=$DUMPBIN - fi -fi -test -z "$NM" && NM=nm -AC_SUBST([NM]) -_LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl - -AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface], - [lt_cv_nm_interface="BSD nm" - echo "int some_variable = 0;" > conftest.$ac_ext - (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&AS_MESSAGE_LOG_FD) - (eval "$ac_compile" 2>conftest.err) - cat conftest.err >&AS_MESSAGE_LOG_FD - (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD) - (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) - cat conftest.err >&AS_MESSAGE_LOG_FD - (eval echo "\"\$as_me:$LINENO: output\"" >&AS_MESSAGE_LOG_FD) - cat conftest.out >&AS_MESSAGE_LOG_FD - if $GREP 'External.*some_variable' conftest.out > /dev/null; then - lt_cv_nm_interface="MS dumpbin" - fi - rm -f conftest*]) -])# LT_PATH_NM - -# Old names: -AU_ALIAS([AM_PROG_NM], [LT_PATH_NM]) -AU_ALIAS([AC_PROG_NM], [LT_PATH_NM]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AM_PROG_NM], []) -dnl AC_DEFUN([AC_PROG_NM], []) - -# _LT_CHECK_SHAREDLIB_FROM_LINKLIB -# -------------------------------- -# how to determine the name of the shared library -# associated with a specific link library. -# -- PORTME fill in with the dynamic library characteristics -m4_defun([_LT_CHECK_SHAREDLIB_FROM_LINKLIB], -[m4_require([_LT_DECL_EGREP]) -m4_require([_LT_DECL_OBJDUMP]) -m4_require([_LT_DECL_DLLTOOL]) -AC_CACHE_CHECK([how to associate runtime and link libraries], -lt_cv_sharedlib_from_linklib_cmd, -[lt_cv_sharedlib_from_linklib_cmd='unknown' - -case $host_os in -cygwin* | mingw* | pw32* | cegcc*) - # two different shell functions defined in ltmain.sh; - # decide which one to use based on capabilities of $DLLTOOL - case `$DLLTOOL --help 2>&1` in - *--identify-strict*) - lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib - ;; - *) - lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback - ;; - esac - ;; -*) - # fallback: assume linklib IS sharedlib - lt_cv_sharedlib_from_linklib_cmd=$ECHO - ;; -esac -]) -sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd -test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO - -_LT_DECL([], [sharedlib_from_linklib_cmd], [1], - [Command to associate shared and link libraries]) -])# _LT_CHECK_SHAREDLIB_FROM_LINKLIB - - -# _LT_PATH_MANIFEST_TOOL -# ---------------------- -# locate the manifest tool -m4_defun([_LT_PATH_MANIFEST_TOOL], -[AC_CHECK_TOOL(MANIFEST_TOOL, mt, :) -test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt -AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool], - [lt_cv_path_mainfest_tool=no - echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&AS_MESSAGE_LOG_FD - $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out - cat conftest.err >&AS_MESSAGE_LOG_FD - if $GREP 'Manifest Tool' conftest.out > /dev/null; then - lt_cv_path_mainfest_tool=yes - fi - rm -f conftest*]) -if test yes != "$lt_cv_path_mainfest_tool"; then - MANIFEST_TOOL=: -fi -_LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl -])# _LT_PATH_MANIFEST_TOOL - - -# _LT_DLL_DEF_P([FILE]) -# --------------------- -# True iff FILE is a Windows DLL '.def' file. -# Keep in sync with func_dll_def_p in the libtool script -AC_DEFUN([_LT_DLL_DEF_P], -[dnl - test DEF = "`$SED -n dnl - -e '\''s/^[[ ]]*//'\'' dnl Strip leading whitespace - -e '\''/^\(;.*\)*$/d'\'' dnl Delete empty lines and comments - -e '\''s/^\(EXPORTS\|LIBRARY\)\([[ ]].*\)*$/DEF/p'\'' dnl - -e q dnl Only consider the first "real" line - $1`" dnl -])# _LT_DLL_DEF_P - - -# LT_LIB_M -# -------- -# check for math library -AC_DEFUN([LT_LIB_M], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -LIBM= -case $host in -*-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*) - # These system don't have libm, or don't need it - ;; -*-ncr-sysv4.3*) - AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM=-lmw) - AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") - ;; -*) - AC_CHECK_LIB(m, cos, LIBM=-lm) - ;; -esac -AC_SUBST([LIBM]) -])# LT_LIB_M - -# Old name: -AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_CHECK_LIBM], []) - - -# _LT_COMPILER_NO_RTTI([TAGNAME]) -# ------------------------------- -m4_defun([_LT_COMPILER_NO_RTTI], -[m4_require([_LT_TAG_COMPILER])dnl - -_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= - -if test yes = "$GCC"; then - case $cc_basename in - nvcc*) - _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;; - *) - _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ;; - esac - - _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], - lt_cv_prog_compiler_rtti_exceptions, - [-fno-rtti -fno-exceptions], [], - [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) -fi -_LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1], - [Compiler flag to turn off builtin functions]) -])# _LT_COMPILER_NO_RTTI - - -# _LT_CMD_GLOBAL_SYMBOLS -# ---------------------- -m4_defun([_LT_CMD_GLOBAL_SYMBOLS], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -AC_REQUIRE([AC_PROG_CC])dnl -AC_REQUIRE([AC_PROG_AWK])dnl -AC_REQUIRE([LT_PATH_NM])dnl -AC_REQUIRE([LT_PATH_LD])dnl -m4_require([_LT_DECL_SED])dnl -m4_require([_LT_DECL_EGREP])dnl -m4_require([_LT_TAG_COMPILER])dnl - -# Check for command to grab the raw symbol name followed by C symbol from nm. -AC_MSG_CHECKING([command to parse $NM output from $compiler object]) -AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], -[ -# These are sane defaults that work on at least a few old systems. -# [They come from Ultrix. What could be older than Ultrix?!! ;)] - -# Character class describing NM global symbol codes. -symcode='[[BCDEGRST]]' - -# Regexp to match symbols that can be accessed directly from C. -sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' - -# Define system-specific variables. -case $host_os in -aix*) - symcode='[[BCDT]]' - ;; -cygwin* | mingw* | pw32* | cegcc*) - symcode='[[ABCDGISTW]]' - ;; -hpux*) - if test ia64 = "$host_cpu"; then - symcode='[[ABCDEGRST]]' - fi - ;; -irix* | nonstopux*) - symcode='[[BCDEGRST]]' - ;; -osf*) - symcode='[[BCDEGQRST]]' - ;; -solaris*) - symcode='[[BDRT]]' - ;; -sco3.2v5*) - symcode='[[DT]]' - ;; -sysv4.2uw2*) - symcode='[[DT]]' - ;; -sysv5* | sco5v6* | unixware* | OpenUNIX*) - symcode='[[ABDT]]' - ;; -sysv4) - symcode='[[DFNSTU]]' - ;; -esac - -# If we're using GNU nm, then use its standard symbol codes. -case `$NM -V 2>&1` in -*GNU* | *'with BFD'*) - symcode='[[ABCDGIRSTW]]' ;; -esac - -if test "$lt_cv_nm_interface" = "MS dumpbin"; then - # Gets list of data symbols to import. - lt_cv_sys_global_symbol_to_import="sed -n -e 's/^I .* \(.*\)$/\1/p'" - # Adjust the below global symbol transforms to fixup imported variables. - lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'" - lt_c_name_hook=" -e 's/^I .* \(.*\)$/ {\"\1\", (void *) 0},/p'" - lt_c_name_lib_hook="\ - -e 's/^I .* \(lib.*\)$/ {\"\1\", (void *) 0},/p'\ - -e 's/^I .* \(.*\)$/ {\"lib\1\", (void *) 0},/p'" -else - # Disable hooks by default. - lt_cv_sys_global_symbol_to_import= - lt_cdecl_hook= - lt_c_name_hook= - lt_c_name_lib_hook= -fi - -# Transform an extracted symbol line into a proper C declaration. -# Some systems (esp. on ia64) link data and code symbols differently, -# so use this general approach. -lt_cv_sys_global_symbol_to_cdecl="sed -n"\ -$lt_cdecl_hook\ -" -e 's/^T .* \(.*\)$/extern int \1();/p'"\ -" -e 's/^$symcode$symcode* .* \(.*\)$/extern char \1;/p'" - -# Transform an extracted symbol line into symbol name and symbol address -lt_cv_sys_global_symbol_to_c_name_address="sed -n"\ -$lt_c_name_hook\ -" -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ -" -e 's/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/p'" - -# Transform an extracted symbol line into symbol name with lib prefix and -# symbol address. -lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n"\ -$lt_c_name_lib_hook\ -" -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ -" -e 's/^$symcode$symcode* .* \(lib.*\)$/ {\"\1\", (void *) \&\1},/p'"\ -" -e 's/^$symcode$symcode* .* \(.*\)$/ {\"lib\1\", (void *) \&\1},/p'" - -# Handle CRLF in mingw tool chain -opt_cr= -case $build_os in -mingw*) - opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp - ;; -esac - -# Try without a prefix underscore, then with it. -for ac_symprfx in "" "_"; do - - # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. - symxfrm="\\1 $ac_symprfx\\2 \\2" - - # Write the raw and C identifiers. - if test "$lt_cv_nm_interface" = "MS dumpbin"; then - # Fake it for dumpbin and say T for any non-static function, - # D for any global variable and I for any imported variable. - # Also find C++ and __fastcall symbols from MSVC++, - # which start with @ or ?. - lt_cv_sys_global_symbol_pipe="$AWK ['"\ -" {last_section=section; section=\$ 3};"\ -" /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ -" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ -" /^ *Symbol name *: /{split(\$ 0,sn,\":\"); si=substr(sn[2],2)};"\ -" /^ *Type *: code/{print \"T\",si,substr(si,length(prfx))};"\ -" /^ *Type *: data/{print \"I\",si,substr(si,length(prfx))};"\ -" \$ 0!~/External *\|/{next};"\ -" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ -" {if(hide[section]) next};"\ -" {f=\"D\"}; \$ 0~/\(\).*\|/{f=\"T\"};"\ -" {split(\$ 0,a,/\||\r/); split(a[2],s)};"\ -" s[1]~/^[@?]/{print f,s[1],s[1]; next};"\ -" s[1]~prfx {split(s[1],t,\"@\"); print f,t[1],substr(t[1],length(prfx))}"\ -" ' prfx=^$ac_symprfx]" - else - lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" - fi - lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" - - # Check to see that the pipe works correctly. - pipe_works=no - - rm -f conftest* - cat > conftest.$ac_ext <<_LT_EOF -#ifdef __cplusplus -extern "C" { -#endif -char nm_test_var; -void nm_test_func(void); -void nm_test_func(void){} -#ifdef __cplusplus -} -#endif -int main(){nm_test_var='a';nm_test_func();return(0);} -_LT_EOF - - if AC_TRY_EVAL(ac_compile); then - # Now try to grab the symbols. - nlist=conftest.nm - $ECHO "$as_me:$LINENO: $NM conftest.$ac_objext | $lt_cv_sys_global_symbol_pipe > $nlist" >&AS_MESSAGE_LOG_FD - if eval "$NM" conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist 2>&AS_MESSAGE_LOG_FD && test -s "$nlist"; then - # Try sorting and uniquifying the output. - if sort "$nlist" | uniq > "$nlist"T; then - mv -f "$nlist"T "$nlist" - else - rm -f "$nlist"T - fi - - # Make sure that we snagged all the symbols we need. - if $GREP ' nm_test_var$' "$nlist" >/dev/null; then - if $GREP ' nm_test_func$' "$nlist" >/dev/null; then - cat <<_LT_EOF > conftest.$ac_ext -/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ -#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE -/* DATA imports from DLLs on WIN32 can't be const, because runtime - relocations are performed -- see ld's documentation on pseudo-relocs. */ -# define LT@&t@_DLSYM_CONST -#elif defined __osf__ -/* This system does not cope well with relocations in const data. */ -# define LT@&t@_DLSYM_CONST -#else -# define LT@&t@_DLSYM_CONST const -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -_LT_EOF - # Now generate the symbol file. - eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' - - cat <<_LT_EOF >> conftest.$ac_ext - -/* The mapping between symbol names and symbols. */ -LT@&t@_DLSYM_CONST struct { - const char *name; - void *address; -} -lt__PROGRAM__LTX_preloaded_symbols[[]] = -{ - { "@PROGRAM@", (void *) 0 }, -_LT_EOF - $SED "s/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext - cat <<\_LT_EOF >> conftest.$ac_ext - {0, (void *) 0} -}; - -/* This works around a problem in FreeBSD linker */ -#ifdef FREEBSD_WORKAROUND -static const void *lt_preloaded_setup() { - return lt__PROGRAM__LTX_preloaded_symbols; -} -#endif - -#ifdef __cplusplus -} -#endif -_LT_EOF - # Now try linking the two files. - mv conftest.$ac_objext conftstm.$ac_objext - lt_globsym_save_LIBS=$LIBS - lt_globsym_save_CFLAGS=$CFLAGS - LIBS=conftstm.$ac_objext - CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" - if AC_TRY_EVAL(ac_link) && test -s conftest$ac_exeext; then - pipe_works=yes - fi - LIBS=$lt_globsym_save_LIBS - CFLAGS=$lt_globsym_save_CFLAGS - else - echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD - fi - else - echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD - fi - else - echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD - fi - else - echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD - cat conftest.$ac_ext >&5 - fi - rm -rf conftest* conftst* - - # Do not use the global_symbol_pipe unless it works. - if test yes = "$pipe_works"; then - break - else - lt_cv_sys_global_symbol_pipe= - fi -done -]) -if test -z "$lt_cv_sys_global_symbol_pipe"; then - lt_cv_sys_global_symbol_to_cdecl= -fi -if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then - AC_MSG_RESULT(failed) -else - AC_MSG_RESULT(ok) -fi - -# Response file support. -if test "$lt_cv_nm_interface" = "MS dumpbin"; then - nm_file_list_spec='@' -elif $NM --help 2>/dev/null | grep '[[@]]FILE' >/dev/null; then - nm_file_list_spec='@' -fi - -_LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1], - [Take the output of nm and produce a listing of raw symbols and C names]) -_LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1], - [Transform the output of nm in a proper C declaration]) -_LT_DECL([global_symbol_to_import], [lt_cv_sys_global_symbol_to_import], [1], - [Transform the output of nm into a list of symbols to manually relocate]) -_LT_DECL([global_symbol_to_c_name_address], - [lt_cv_sys_global_symbol_to_c_name_address], [1], - [Transform the output of nm in a C name address pair]) -_LT_DECL([global_symbol_to_c_name_address_lib_prefix], - [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1], - [Transform the output of nm in a C name address pair when lib prefix is needed]) -_LT_DECL([nm_interface], [lt_cv_nm_interface], [1], - [The name lister interface]) -_LT_DECL([], [nm_file_list_spec], [1], - [Specify filename containing input files for $NM]) -]) # _LT_CMD_GLOBAL_SYMBOLS - - -# _LT_COMPILER_PIC([TAGNAME]) -# --------------------------- -m4_defun([_LT_COMPILER_PIC], -[m4_require([_LT_TAG_COMPILER])dnl -_LT_TAGVAR(lt_prog_compiler_wl, $1)= -_LT_TAGVAR(lt_prog_compiler_pic, $1)= -_LT_TAGVAR(lt_prog_compiler_static, $1)= - -m4_if([$1], [CXX], [ - # C++ specific cases for pic, static, wl, etc. - if test yes = "$GXX"; then - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' - - case $host_os in - aix*) - # All AIX code is PIC. - if test ia64 = "$host_cpu"; then - # AIX 5 now supports IA64 processor - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - fi - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - m68k) - # FIXME: we need at least 68020 code to build shared libraries, but - # adding the '-m68020' flag to GCC prevents building anything better, - # like '-m68040'. - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' - ;; - esac - ;; - - beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) - # PIC is the default for these OSes. - ;; - mingw* | cygwin* | os2* | pw32* | cegcc*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - # Although the cygwin gcc ignores -fPIC, still need this for old-style - # (--disable-auto-import) libraries - m4_if([$1], [GCJ], [], - [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) - case $host_os in - os2*) - _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static' - ;; - esac - ;; - darwin* | rhapsody*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' - ;; - *djgpp*) - # DJGPP does not support shared libraries at all - _LT_TAGVAR(lt_prog_compiler_pic, $1)= - ;; - haiku*) - # PIC is the default for Haiku. - # The "-static" flag exists, but is broken. - _LT_TAGVAR(lt_prog_compiler_static, $1)= - ;; - interix[[3-9]]*) - # Interix 3.x gcc -fpic/-fPIC options generate broken code. - # Instead, we relocate shared libraries at runtime. - ;; - sysv4*MP*) - if test -d /usr/nec; then - _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic - fi - ;; - hpux*) - # PIC is the default for 64-bit PA HP-UX, but not for 32-bit - # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag - # sets the default TLS model and affects inlining. - case $host_cpu in - hppa*64*) - ;; - *) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - esac - ;; - *qnx* | *nto*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' - ;; - *) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - esac - else - case $host_os in - aix[[4-9]]*) - # All AIX code is PIC. - if test ia64 = "$host_cpu"; then - # AIX 5 now supports IA64 processor - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - else - _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' - fi - ;; - chorus*) - case $cc_basename in - cxch68*) - # Green Hills C++ Compiler - # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" - ;; - esac - ;; - mingw* | cygwin* | os2* | pw32* | cegcc*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - m4_if([$1], [GCJ], [], - [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) - ;; - dgux*) - case $cc_basename in - ec++*) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - ;; - ghcx*) - # Green Hills C++ Compiler - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' - ;; - *) - ;; - esac - ;; - freebsd* | dragonfly*) - # FreeBSD uses GNU C++ - ;; - hpux9* | hpux10* | hpux11*) - case $cc_basename in - CC*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive' - if test ia64 != "$host_cpu"; then - _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' - fi - ;; - aCC*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive' - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' - ;; - esac - ;; - *) - ;; - esac - ;; - interix*) - # This is c89, which is MS Visual C++ (no shared libs) - # Anyone wants to do a port? - ;; - irix5* | irix6* | nonstopux*) - case $cc_basename in - CC*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - # CC pic flag -KPIC is the default. - ;; - *) - ;; - esac - ;; - linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) - case $cc_basename in - KCC*) - # KAI C++ Compiler - _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - ecpc* ) - # old Intel C++ for x86_64, which still supported -KPIC. - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' - ;; - icpc* ) - # Intel C++, used to be incompatible with GCC. - # ICC 10 doesn't accept -KPIC any more. - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' - ;; - pgCC* | pgcpp*) - # Portland Group C++ compiler - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - cxx*) - # Compaq C++ - # Make sure the PIC flag is empty. It appears that all Alpha - # Linux and Compaq Tru64 Unix objects are PIC. - _LT_TAGVAR(lt_prog_compiler_pic, $1)= - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - xlc* | xlC* | bgxl[[cC]]* | mpixl[[cC]]*) - # IBM XL 8.0, 9.0 on PPC and BlueGene - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C++ 5.9 - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' - ;; - esac - ;; - esac - ;; - lynxos*) - ;; - m88k*) - ;; - mvs*) - case $cc_basename in - cxx*) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' - ;; - *) - ;; - esac - ;; - netbsd* | netbsdelf*-gnu) - ;; - *qnx* | *nto*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' - ;; - osf3* | osf4* | osf5*) - case $cc_basename in - KCC*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' - ;; - RCC*) - # Rational C++ 2.4.1 - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' - ;; - cxx*) - # Digital/Compaq C++ - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - # Make sure the PIC flag is empty. It appears that all Alpha - # Linux and Compaq Tru64 Unix objects are PIC. - _LT_TAGVAR(lt_prog_compiler_pic, $1)= - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - *) - ;; - esac - ;; - psos*) - ;; - solaris*) - case $cc_basename in - CC* | sunCC*) - # Sun C++ 4.2, 5.x and Centerline C++ - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' - ;; - gcx*) - # Green Hills C++ Compiler - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' - ;; - *) - ;; - esac - ;; - sunos4*) - case $cc_basename in - CC*) - # Sun C++ 4.x - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - lcc*) - # Lucid - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' - ;; - *) - ;; - esac - ;; - sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) - case $cc_basename in - CC*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - esac - ;; - tandem*) - case $cc_basename in - NCC*) - # NonStop-UX NCC 3.20 - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - ;; - *) - ;; - esac - ;; - vxworks*) - ;; - *) - _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no - ;; - esac - fi -], -[ - if test yes = "$GCC"; then - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' - - case $host_os in - aix*) - # All AIX code is PIC. - if test ia64 = "$host_cpu"; then - # AIX 5 now supports IA64 processor - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - fi - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - m68k) - # FIXME: we need at least 68020 code to build shared libraries, but - # adding the '-m68020' flag to GCC prevents building anything better, - # like '-m68040'. - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' - ;; - esac - ;; - - beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) - # PIC is the default for these OSes. - ;; - - mingw* | cygwin* | pw32* | os2* | cegcc*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - # Although the cygwin gcc ignores -fPIC, still need this for old-style - # (--disable-auto-import) libraries - m4_if([$1], [GCJ], [], - [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) - case $host_os in - os2*) - _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static' - ;; - esac - ;; - - darwin* | rhapsody*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' - ;; - - haiku*) - # PIC is the default for Haiku. - # The "-static" flag exists, but is broken. - _LT_TAGVAR(lt_prog_compiler_static, $1)= - ;; - - hpux*) - # PIC is the default for 64-bit PA HP-UX, but not for 32-bit - # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag - # sets the default TLS model and affects inlining. - case $host_cpu in - hppa*64*) - # +Z the default - ;; - *) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - esac - ;; - - interix[[3-9]]*) - # Interix 3.x gcc -fpic/-fPIC options generate broken code. - # Instead, we relocate shared libraries at runtime. - ;; - - msdosdjgpp*) - # Just because we use GCC doesn't mean we suddenly get shared libraries - # on systems that don't support them. - _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no - enable_shared=no - ;; - - *nto* | *qnx*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' - ;; - - sysv4*MP*) - if test -d /usr/nec; then - _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic - fi - ;; - - *) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - esac - - case $cc_basename in - nvcc*) # Cuda Compiler Driver 2.2 - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker ' - if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then - _LT_TAGVAR(lt_prog_compiler_pic, $1)="-Xcompiler $_LT_TAGVAR(lt_prog_compiler_pic, $1)" - fi - ;; - esac - else - # PORTME Check for flag to pass linker flags through the system compiler. - case $host_os in - aix*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - if test ia64 = "$host_cpu"; then - # AIX 5 now supports IA64 processor - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - else - _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' - fi - ;; - - darwin* | rhapsody*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' - case $cc_basename in - nagfor*) - # NAG Fortran compiler - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - esac - ;; - - mingw* | cygwin* | pw32* | os2* | cegcc*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - m4_if([$1], [GCJ], [], - [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) - case $host_os in - os2*) - _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static' - ;; - esac - ;; - - hpux9* | hpux10* | hpux11*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but - # not for PA HP-UX. - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' - ;; - esac - # Is there a better lt_prog_compiler_static that works with the bundled CC? - _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive' - ;; - - irix5* | irix6* | nonstopux*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - # PIC (with -KPIC) is the default. - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - - linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) - case $cc_basename in - # old Intel for x86_64, which still supported -KPIC. - ecc*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' - ;; - # icc used to be incompatible with GCC. - # ICC 10 doesn't accept -KPIC any more. - icc* | ifort*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' - ;; - # Lahey Fortran 8.1. - lf95*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared' - _LT_TAGVAR(lt_prog_compiler_static, $1)='--static' - ;; - nagfor*) - # NAG Fortran compiler - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - tcc*) - # Fabrice Bellard et al's Tiny C Compiler - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' - ;; - pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) - # Portland Group compilers (*not* the Pentium gcc compiler, - # which looks to be a dead project) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - ccc*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - # All Alpha code is PIC. - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - xl* | bgxl* | bgf* | mpixl*) - # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [[1-7]].* | *Sun*Fortran*\ 8.[[0-3]]*) - # Sun Fortran 8.3 passes all unrecognized flags to the linker - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - _LT_TAGVAR(lt_prog_compiler_wl, $1)='' - ;; - *Sun\ F* | *Sun*Fortran*) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' - ;; - *Sun\ C*) - # Sun C 5.9 - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - ;; - *Intel*\ [[CF]]*Compiler*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' - ;; - *Portland\ Group*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - esac - ;; - esac - ;; - - newsos6) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - - *nto* | *qnx*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' - ;; - - osf3* | osf4* | osf5*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - # All OSF/1 code is PIC. - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - - rdos*) - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - - solaris*) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - case $cc_basename in - f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; - *) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; - esac - ;; - - sunos4*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - - sysv4 | sysv4.2uw2* | sysv4.3*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - - sysv4*MP*) - if test -d /usr/nec; then - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - fi - ;; - - sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - - unicos*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no - ;; - - uts4*) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - - *) - _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no - ;; - esac - fi -]) -case $host_os in - # For platforms that do not support PIC, -DPIC is meaningless: - *djgpp*) - _LT_TAGVAR(lt_prog_compiler_pic, $1)= - ;; - *) - _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])" - ;; -esac - -AC_CACHE_CHECK([for $compiler option to produce PIC], - [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)], - [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) -_LT_TAGVAR(lt_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_cv_prog_compiler_pic, $1) - -# -# Check to make sure the PIC flag actually works. -# -if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then - _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works], - [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)], - [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [], - [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in - "" | " "*) ;; - *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;; - esac], - [_LT_TAGVAR(lt_prog_compiler_pic, $1)= - _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) -fi -_LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1], - [Additional compiler flags for building library objects]) - -_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], - [How to pass a linker flag through the compiler]) -# -# Check to make sure the static flag actually works. -# -wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\" -_LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], - _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1), - $lt_tmp_static_flag, - [], - [_LT_TAGVAR(lt_prog_compiler_static, $1)=]) -_LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1], - [Compiler flag to prevent dynamic linking]) -])# _LT_COMPILER_PIC - - -# _LT_LINKER_SHLIBS([TAGNAME]) -# ---------------------------- -# See if the linker supports building shared libraries. -m4_defun([_LT_LINKER_SHLIBS], -[AC_REQUIRE([LT_PATH_LD])dnl -AC_REQUIRE([LT_PATH_NM])dnl -m4_require([_LT_PATH_MANIFEST_TOOL])dnl -m4_require([_LT_FILEUTILS_DEFAULTS])dnl -m4_require([_LT_DECL_EGREP])dnl -m4_require([_LT_DECL_SED])dnl -m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl -m4_require([_LT_TAG_COMPILER])dnl -AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) -m4_if([$1], [CXX], [ - _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] - case $host_os in - aix[[4-9]]*) - # If we're using GNU nm, then we don't want the "-C" option. - # -C means demangle to GNU nm, but means don't demangle to AIX nm. - # Without the "-l" option, or with the "-B" option, AIX nm treats - # weak defined symbols like other global defined symbols, whereas - # GNU nm marks them as "W". - # While the 'weak' keyword is ignored in the Export File, we need - # it in the Import File for the 'aix-soname' feature, so we have - # to replace the "-B" option with "-P" for AIX nm. - if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then - _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' - else - _LT_TAGVAR(export_symbols_cmds, $1)='`func_echo_all $NM | $SED -e '\''s/B\([[^B]]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && ([substr](\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' - fi - ;; - pw32*) - _LT_TAGVAR(export_symbols_cmds, $1)=$ltdll_cmds - ;; - cygwin* | mingw* | cegcc*) - case $cc_basename in - cl*) - _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' - ;; - *) - _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' - _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] - ;; - esac - ;; - linux* | k*bsd*-gnu | gnu*) - _LT_TAGVAR(link_all_deplibs, $1)=no - ;; - *) - _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - ;; - esac -], [ - runpath_var= - _LT_TAGVAR(allow_undefined_flag, $1)= - _LT_TAGVAR(always_export_symbols, $1)=no - _LT_TAGVAR(archive_cmds, $1)= - _LT_TAGVAR(archive_expsym_cmds, $1)= - _LT_TAGVAR(compiler_needs_object, $1)=no - _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no - _LT_TAGVAR(export_dynamic_flag_spec, $1)= - _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - _LT_TAGVAR(hardcode_automatic, $1)=no - _LT_TAGVAR(hardcode_direct, $1)=no - _LT_TAGVAR(hardcode_direct_absolute, $1)=no - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= - _LT_TAGVAR(hardcode_libdir_separator, $1)= - _LT_TAGVAR(hardcode_minus_L, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported - _LT_TAGVAR(inherit_rpath, $1)=no - _LT_TAGVAR(link_all_deplibs, $1)=unknown - _LT_TAGVAR(module_cmds, $1)= - _LT_TAGVAR(module_expsym_cmds, $1)= - _LT_TAGVAR(old_archive_from_new_cmds, $1)= - _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)= - _LT_TAGVAR(thread_safe_flag_spec, $1)= - _LT_TAGVAR(whole_archive_flag_spec, $1)= - # include_expsyms should be a list of space-separated symbols to be *always* - # included in the symbol list - _LT_TAGVAR(include_expsyms, $1)= - # exclude_expsyms can be an extended regexp of symbols to exclude - # it will be wrapped by ' (' and ')$', so one must not match beginning or - # end of line. Example: 'a|bc|.*d.*' will exclude the symbols 'a' and 'bc', - # as well as any symbol that contains 'd'. - _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] - # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out - # platforms (ab)use it in PIC code, but their linkers get confused if - # the symbol is explicitly referenced. Since portable code cannot - # rely on this symbol name, it's probably fine to never include it in - # preloaded symbol tables. - # Exclude shared library initialization/finalization symbols. -dnl Note also adjust exclude_expsyms for C++ above. - extract_expsyms_cmds= - - case $host_os in - cygwin* | mingw* | pw32* | cegcc*) - # FIXME: the MSVC++ port hasn't been tested in a loooong time - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - if test yes != "$GCC"; then - with_gnu_ld=no - fi - ;; - interix*) - # we just hope/assume this is gcc and not c89 (= MSVC++) - with_gnu_ld=yes - ;; - openbsd* | bitrig*) - with_gnu_ld=no - ;; - linux* | k*bsd*-gnu | gnu*) - _LT_TAGVAR(link_all_deplibs, $1)=no - ;; - esac - - _LT_TAGVAR(ld_shlibs, $1)=yes - - # On some targets, GNU ld is compatible enough with the native linker - # that we're better off using the native interface for both. - lt_use_gnu_ld_interface=no - if test yes = "$with_gnu_ld"; then - case $host_os in - aix*) - # The AIX port of GNU ld has always aspired to compatibility - # with the native linker. However, as the warning in the GNU ld - # block says, versions before 2.19.5* couldn't really create working - # shared libraries, regardless of the interface used. - case `$LD -v 2>&1` in - *\ \(GNU\ Binutils\)\ 2.19.5*) ;; - *\ \(GNU\ Binutils\)\ 2.[[2-9]]*) ;; - *\ \(GNU\ Binutils\)\ [[3-9]]*) ;; - *) - lt_use_gnu_ld_interface=yes - ;; - esac - ;; - *) - lt_use_gnu_ld_interface=yes - ;; - esac - fi - - if test yes = "$lt_use_gnu_ld_interface"; then - # If archive_cmds runs LD, not CC, wlarc should be empty - wlarc='$wl' - - # Set some defaults for GNU ld with shared library support. These - # are reset later if shared libraries are not supported. Putting them - # here allows them to be overridden if necessary. - runpath_var=LD_RUN_PATH - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' - # ancient GNU ld didn't support --whole-archive et. al. - if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then - _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' - else - _LT_TAGVAR(whole_archive_flag_spec, $1)= - fi - supports_anon_versioning=no - case `$LD -v | $SED -e 's/([^)]\+)\s\+//' 2>&1` in - *GNU\ gold*) supports_anon_versioning=yes ;; - *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 - *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... - *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... - *\ 2.11.*) ;; # other 2.11 versions - *) supports_anon_versioning=yes ;; - esac - - # See if GNU ld supports shared libraries. - case $host_os in - aix[[3-9]]*) - # On AIX/PPC, the GNU linker is very broken - if test ia64 != "$host_cpu"; then - _LT_TAGVAR(ld_shlibs, $1)=no - cat <<_LT_EOF 1>&2 - -*** Warning: the GNU linker, at least up to release 2.19, is reported -*** to be unable to reliably create shared libraries on AIX. -*** Therefore, libtool is disabling shared libraries support. If you -*** really care for shared libraries, you may want to install binutils -*** 2.20 or above, or modify your PATH so that a non-GNU linker is found. -*** You will then need to restart the configuration process. - -_LT_EOF - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='' - ;; - m68k) - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_minus_L, $1)=yes - ;; - esac - ;; - - beos*) - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - # Joseph Beckenbach says some releases of gcc - # support --undefined. This deserves some investigation. FIXME - _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - cygwin* | mingw* | pw32* | cegcc*) - # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, - # as there is no search path for DLLs. - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-all-symbols' - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - _LT_TAGVAR(always_export_symbols, $1)=no - _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes - _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' - _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] - - if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - # If the export-symbols file already is a .def file, use it as - # is; otherwise, prepend EXPORTS... - _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then - cp $export_symbols $output_objdir/$soname.def; - else - echo EXPORTS > $output_objdir/$soname.def; - cat $export_symbols >> $output_objdir/$soname.def; - fi~ - $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - haiku*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' - _LT_TAGVAR(link_all_deplibs, $1)=yes - ;; - - os2*) - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_minus_L, $1)=yes - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - shrext_cmds=.dll - _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ - $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ - $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ - $ECHO EXPORTS >> $output_objdir/$libname.def~ - emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ - $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ - emximp -o $lib $output_objdir/$libname.def' - _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ - $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ - $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ - $ECHO EXPORTS >> $output_objdir/$libname.def~ - prefix_cmds="$SED"~ - if test EXPORTS = "`$SED 1q $export_symbols`"; then - prefix_cmds="$prefix_cmds -e 1d"; - fi~ - prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ - cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ - $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ - emximp -o $lib $output_objdir/$libname.def' - _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' - _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes - ;; - - interix[[3-9]]*) - _LT_TAGVAR(hardcode_direct, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' - # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. - # Instead, shared libraries are loaded at an image base (0x10000000 by - # default) and relocated if they conflict, which is a slow very memory - # consuming and fragmenting process. To avoid this, we pick a random, - # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link - # time. Moving up from 0x10000000 also allows more sbrk(2) space. - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - ;; - - gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) - tmp_diet=no - if test linux-dietlibc = "$host_os"; then - case $cc_basename in - diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) - esac - fi - if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ - && test no = "$tmp_diet" - then - tmp_addflag=' $pic_flag' - tmp_sharedflag='-shared' - case $cc_basename,$host_cpu in - pgcc*) # Portland Group C compiler - _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' - tmp_addflag=' $pic_flag' - ;; - pgf77* | pgf90* | pgf95* | pgfortran*) - # Portland Group f77 and f90 compilers - _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' - tmp_addflag=' $pic_flag -Mnomain' ;; - ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 - tmp_addflag=' -i_dynamic' ;; - efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 - tmp_addflag=' -i_dynamic -nofor_main' ;; - ifc* | ifort*) # Intel Fortran compiler - tmp_addflag=' -nofor_main' ;; - lf95*) # Lahey Fortran 8.1 - _LT_TAGVAR(whole_archive_flag_spec, $1)= - tmp_sharedflag='--shared' ;; - nagfor*) # NAGFOR 5.3 - tmp_sharedflag='-Wl,-shared' ;; - xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below) - tmp_sharedflag='-qmkshrobj' - tmp_addflag= ;; - nvcc*) # Cuda Compiler Driver 2.2 - _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' - _LT_TAGVAR(compiler_needs_object, $1)=yes - ;; - esac - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) # Sun C 5.9 - _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' - _LT_TAGVAR(compiler_needs_object, $1)=yes - tmp_sharedflag='-G' ;; - *Sun\ F*) # Sun Fortran 8.3 - tmp_sharedflag='-G' ;; - esac - _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' - - if test yes = "$supports_anon_versioning"; then - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - echo "local: *; };" >> $output_objdir/$libname.ver~ - $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' - fi - - case $cc_basename in - tcc*) - _LT_TAGVAR(export_dynamic_flag_spec, $1)='-rdynamic' - ;; - xlf* | bgf* | bgxlf* | mpixlf*) - # IBM XL Fortran 10.1 on PPC cannot create shared libs itself - _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' - _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' - if test yes = "$supports_anon_versioning"; then - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - echo "local: *; };" >> $output_objdir/$libname.ver~ - $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' - fi - ;; - esac - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - netbsd* | netbsdelf*-gnu) - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' - wlarc= - else - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' - fi - ;; - - solaris*) - if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then - _LT_TAGVAR(ld_shlibs, $1)=no - cat <<_LT_EOF 1>&2 - -*** Warning: The releases 2.8.* of the GNU linker cannot reliably -*** create shared libraries on Solaris systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.9.1 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -_LT_EOF - elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) - case `$LD -v 2>&1` in - *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) - _LT_TAGVAR(ld_shlibs, $1)=no - cat <<_LT_EOF 1>&2 - -*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 cannot -*** reliably create shared libraries on SCO systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.16.91.0.3 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -_LT_EOF - ;; - *) - # For security reasons, it is highly recommended that you always - # use absolute paths for naming shared libraries, and exclude the - # DT_RUNPATH tag from executables and libraries. But doing so - # requires that you compile everything twice, which is a pain. - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - ;; - - sunos4*) - _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' - wlarc= - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - *) - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - - if test no = "$_LT_TAGVAR(ld_shlibs, $1)"; then - runpath_var= - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= - _LT_TAGVAR(export_dynamic_flag_spec, $1)= - _LT_TAGVAR(whole_archive_flag_spec, $1)= - fi - else - # PORTME fill in a description of your system's linker (not GNU ld) - case $host_os in - aix3*) - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - _LT_TAGVAR(always_export_symbols, $1)=yes - _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' - # Note: this linker hardcodes the directories in LIBPATH if there - # are no directories specified by -L. - _LT_TAGVAR(hardcode_minus_L, $1)=yes - if test yes = "$GCC" && test -z "$lt_prog_compiler_static"; then - # Neither direct hardcoding nor static linking is supported with a - # broken collect2. - _LT_TAGVAR(hardcode_direct, $1)=unsupported - fi - ;; - - aix[[4-9]]*) - if test ia64 = "$host_cpu"; then - # On IA64, the linker does run time linking by default, so we don't - # have to do anything special. - aix_use_runtimelinking=no - exp_sym_flag='-Bexport' - no_entry_flag= - else - # If we're using GNU nm, then we don't want the "-C" option. - # -C means demangle to GNU nm, but means don't demangle to AIX nm. - # Without the "-l" option, or with the "-B" option, AIX nm treats - # weak defined symbols like other global defined symbols, whereas - # GNU nm marks them as "W". - # While the 'weak' keyword is ignored in the Export File, we need - # it in the Import File for the 'aix-soname' feature, so we have - # to replace the "-B" option with "-P" for AIX nm. - if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then - _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' - else - _LT_TAGVAR(export_symbols_cmds, $1)='`func_echo_all $NM | $SED -e '\''s/B\([[^B]]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && ([substr](\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' - fi - aix_use_runtimelinking=no - - # Test if we are trying to use run time linking or normal - # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # have runtime linking enabled, and use it for executables. - # For shared libraries, we enable/disable runtime linking - # depending on the kind of the shared library created - - # when "with_aix_soname,aix_use_runtimelinking" is: - # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables - # "aix,yes" lib.so shared, rtl:yes, for executables - # lib.a static archive - # "both,no" lib.so.V(shr.o) shared, rtl:yes - # lib.a(lib.so.V) shared, rtl:no, for executables - # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables - # lib.a(lib.so.V) shared, rtl:no - # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables - # lib.a static archive - case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) - for ld_flag in $LDFLAGS; do - if (test x-brtl = "x$ld_flag" || test x-Wl,-brtl = "x$ld_flag"); then - aix_use_runtimelinking=yes - break - fi - done - if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then - # With aix-soname=svr4, we create the lib.so.V shared archives only, - # so we don't have lib.a shared libs to link our executables. - # We have to force runtime linking in this case. - aix_use_runtimelinking=yes - LDFLAGS="$LDFLAGS -Wl,-brtl" - fi - ;; - esac - - exp_sym_flag='-bexport' - no_entry_flag='-bnoentry' - fi - - # When large executables or shared objects are built, AIX ld can - # have problems creating the table of contents. If linking a library - # or program results in "error TOC overflow" add -mminimal-toc to - # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not - # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. - - _LT_TAGVAR(archive_cmds, $1)='' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - _LT_TAGVAR(hardcode_libdir_separator, $1)=':' - _LT_TAGVAR(link_all_deplibs, $1)=yes - _LT_TAGVAR(file_list_spec, $1)='$wl-f,' - case $with_aix_soname,$aix_use_runtimelinking in - aix,*) ;; # traditional, no import file - svr4,* | *,yes) # use import file - # The Import File defines what to hardcode. - _LT_TAGVAR(hardcode_direct, $1)=no - _LT_TAGVAR(hardcode_direct_absolute, $1)=no - ;; - esac - - if test yes = "$GCC"; then - case $host_os in aix4.[[012]]|aix4.[[012]].*) - # We only want to do this on AIX 4.2 and lower, the check - # below for broken collect2 doesn't work under 4.3+ - collect2name=`$CC -print-prog-name=collect2` - if test -f "$collect2name" && - strings "$collect2name" | $GREP resolve_lib_name >/dev/null - then - # We have reworked collect2 - : - else - # We have old collect2 - _LT_TAGVAR(hardcode_direct, $1)=unsupported - # It fails to find uninstalled libraries when the uninstalled - # path is not listed in the libpath. Setting hardcode_minus_L - # to unsupported forces relinking - _LT_TAGVAR(hardcode_minus_L, $1)=yes - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)= - fi - ;; - esac - shared_flag='-shared' - if test yes = "$aix_use_runtimelinking"; then - shared_flag="$shared_flag "'$wl-G' - fi - # Need to ensure runtime linking is disabled for the traditional - # shared library, or the linker may eventually find shared libraries - # /with/ Import File - we do not want to mix them. - shared_flag_aix='-shared' - shared_flag_svr4='-shared $wl-G' - else - # not using gcc - if test ia64 = "$host_cpu"; then - # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release - # chokes on -Wl,-G. The following line is correct: - shared_flag='-G' - else - if test yes = "$aix_use_runtimelinking"; then - shared_flag='$wl-G' - else - shared_flag='$wl-bM:SRE' - fi - shared_flag_aix='$wl-bM:SRE' - shared_flag_svr4='$wl-G' - fi - fi - - _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-bexpall' - # It seems that -bexpall does not export symbols beginning with - # underscore (_), so it is better to generate a list of symbols to export. - _LT_TAGVAR(always_export_symbols, $1)=yes - if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then - # Warning - without using the other runtime loading flags (-brtl), - # -berok will link without error, but may produce a broken library. - _LT_TAGVAR(allow_undefined_flag, $1)='-berok' - # Determine the default libpath from the value encoded in an - # empty executable. - _LT_SYS_MODULE_PATH_AIX([$1]) - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag - else - if test ia64 = "$host_cpu"; then - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $libdir:/usr/lib:/lib' - _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" - _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" - else - # Determine the default libpath from the value encoded in an - # empty executable. - _LT_SYS_MODULE_PATH_AIX([$1]) - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" - # Warning - without using the other run time loading flags, - # -berok will link without error, but may produce a broken library. - _LT_TAGVAR(no_undefined_flag, $1)=' $wl-bernotok' - _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-berok' - if test yes = "$with_gnu_ld"; then - # We only use this code for GNU lds that support --whole-archive. - _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive' - else - # Exported symbols can be pulled into shared objects from archives - _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' - fi - _LT_TAGVAR(archive_cmds_need_lc, $1)=yes - _LT_TAGVAR(archive_expsym_cmds, $1)='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' - # -brtl affects multiple linker settings, -berok does not and is overridden later - compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([[, ]]\\)%-berok\\1%g"`' - if test svr4 != "$with_aix_soname"; then - # This is similar to how AIX traditionally builds its shared libraries. - _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' - fi - if test aix != "$with_aix_soname"; then - _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' - else - # used by -dlpreopen to get the symbols - _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$MV $output_objdir/$realname.d/$soname $output_objdir' - fi - _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$RM -r $output_objdir/$realname.d' - fi - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='' - ;; - m68k) - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_minus_L, $1)=yes - ;; - esac - ;; - - bsdi[[45]]*) - _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic - ;; - - cygwin* | mingw* | pw32* | cegcc*) - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - # hardcode_libdir_flag_spec is actually meaningless, as there is - # no search path for DLLs. - case $cc_basename in - cl*) - # Native MSVC - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - _LT_TAGVAR(always_export_symbols, $1)=yes - _LT_TAGVAR(file_list_spec, $1)='@' - # Tell ltmain to make .lib files, not .a files. - libext=lib - # Tell ltmain to make .dll files, not .so files. - shrext_cmds=.dll - # FIXME: Setting linknames here is a bad hack. - _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' - _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then - cp "$export_symbols" "$output_objdir/$soname.def"; - echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; - else - $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; - fi~ - $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ - linknames=' - # The linker will not automatically build a static lib if we build a DLL. - # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' - _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes - _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' - _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1,DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' - # Don't use ranlib - _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' - _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ - lt_tool_outputfile="@TOOL_OUTPUT@"~ - case $lt_outputfile in - *.exe|*.EXE) ;; - *) - lt_outputfile=$lt_outputfile.exe - lt_tool_outputfile=$lt_tool_outputfile.exe - ;; - esac~ - if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then - $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; - $RM "$lt_outputfile.manifest"; - fi' - ;; - *) - # Assume MSVC wrapper - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - # Tell ltmain to make .lib files, not .a files. - libext=lib - # Tell ltmain to make .dll files, not .so files. - shrext_cmds=.dll - # FIXME: Setting linknames here is a bad hack. - _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' - # The linker will automatically build a .lib file if we build a DLL. - _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' - # FIXME: Should let the user specify the lib program. - _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' - _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes - ;; - esac - ;; - - darwin* | rhapsody*) - _LT_DARWIN_LINKER_FEATURES($1) - ;; - - dgux*) - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor - # support. Future versions do this automatically, but an explicit c++rt0.o - # does not break anything, and helps significantly (at the cost of a little - # extra space). - freebsd2.2*) - _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - # Unfortunately, older versions of FreeBSD 2 do not have this feature. - freebsd2.*) - _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_minus_L, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - # FreeBSD 3 and greater uses gcc -shared to do shared libraries. - freebsd* | dragonfly*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - hpux9*) - if test yes = "$GCC"; then - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' - else - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' - fi - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_TAGVAR(hardcode_direct, $1)=yes - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - _LT_TAGVAR(hardcode_minus_L, $1)=yes - _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' - ;; - - hpux10*) - if test yes,no = "$GCC,$with_gnu_ld"; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - else - _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' - fi - if test no = "$with_gnu_ld"; then - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - _LT_TAGVAR(hardcode_minus_L, $1)=yes - fi - ;; - - hpux11*) - if test yes,no = "$GCC,$with_gnu_ld"; then - case $host_cpu in - hppa*64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - else - case $host_cpu in - hppa*64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - m4_if($1, [], [ - # Older versions of the 11.00 compiler do not understand -b yet - # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) - _LT_LINKER_OPTION([if $CC understands -b], - _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b], - [_LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'], - [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])], - [_LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags']) - ;; - esac - fi - if test no = "$with_gnu_ld"; then - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - - case $host_cpu in - hppa*64*|ia64*) - _LT_TAGVAR(hardcode_direct, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - *) - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - _LT_TAGVAR(hardcode_minus_L, $1)=yes - ;; - esac - fi - ;; - - irix5* | irix6* | nonstopux*) - if test yes = "$GCC"; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' - # Try to use the -exported_symbol ld option, if it does not - # work, assume that -exports_file does not work either and - # implicitly export all symbols. - # This should be the same for all languages, so no per-tag cache variable. - AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol], - [lt_cv_irix_exported_symbol], - [save_LDFLAGS=$LDFLAGS - LDFLAGS="$LDFLAGS -shared $wl-exported_symbol ${wl}foo $wl-update_registry $wl/dev/null" - AC_LINK_IFELSE( - [AC_LANG_SOURCE( - [AC_LANG_CASE([C], [[int foo (void) { return 0; }]], - [C++], [[int foo (void) { return 0; }]], - [Fortran 77], [[ - subroutine foo - end]], - [Fortran], [[ - subroutine foo - end]])])], - [lt_cv_irix_exported_symbol=yes], - [lt_cv_irix_exported_symbol=no]) - LDFLAGS=$save_LDFLAGS]) - if test yes = "$lt_cv_irix_exported_symbol"; then - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib' - fi - _LT_TAGVAR(link_all_deplibs, $1)=no - else - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib' - fi - _LT_TAGVAR(archive_cmds_need_lc, $1)='no' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_TAGVAR(inherit_rpath, $1)=yes - _LT_TAGVAR(link_all_deplibs, $1)=yes - ;; - - linux*) - case $cc_basename in - tcc*) - # Fabrice Bellard et al's Tiny C Compiler - _LT_TAGVAR(ld_shlibs, $1)=yes - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - ;; - - netbsd* | netbsdelf*-gnu) - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out - else - _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF - fi - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - newsos6) - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - *nto* | *qnx*) - ;; - - openbsd* | bitrig*) - if test -f /usr/libexec/ld.so; then - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags $wl-retain-symbols-file,$export_symbols' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' - else - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' - fi - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - os2*) - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_minus_L, $1)=yes - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - shrext_cmds=.dll - _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ - $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ - $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ - $ECHO EXPORTS >> $output_objdir/$libname.def~ - emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ - $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ - emximp -o $lib $output_objdir/$libname.def' - _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ - $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ - $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ - $ECHO EXPORTS >> $output_objdir/$libname.def~ - prefix_cmds="$SED"~ - if test EXPORTS = "`$SED 1q $export_symbols`"; then - prefix_cmds="$prefix_cmds -e 1d"; - fi~ - prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ - cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ - $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ - emximp -o $lib $output_objdir/$libname.def' - _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' - _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes - ;; - - osf3*) - if test yes = "$GCC"; then - _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' - else - _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' - fi - _LT_TAGVAR(archive_cmds_need_lc, $1)='no' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - ;; - - osf4* | osf5*) # as osf3* with the addition of -msym flag - if test yes = "$GCC"; then - _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $pic_flag $libobjs $deplibs $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' - else - _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ - $CC -shared$allow_undefined_flag $wl-input $wl$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~$RM $lib.exp' - - # Both c and cxx compiler support -rpath directly - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' - fi - _LT_TAGVAR(archive_cmds_need_lc, $1)='no' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - ;; - - solaris*) - _LT_TAGVAR(no_undefined_flag, $1)=' -z defs' - if test yes = "$GCC"; then - wlarc='$wl' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl-z ${wl}text $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -shared $pic_flag $wl-z ${wl}text $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' - else - case `$CC -V 2>&1` in - *"Compilers 5.0"*) - wlarc='' - _LT_TAGVAR(archive_cmds, $1)='$LD -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $LD -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' - ;; - *) - wlarc='$wl' - _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' - ;; - esac - fi - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - case $host_os in - solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; - *) - # The compiler driver will combine and reorder linker options, - # but understands '-z linker_flag'. GCC discards it without '$wl', - # but is careful enough not to reorder. - # Supported since Solaris 2.6 (maybe 2.5.1?) - if test yes = "$GCC"; then - _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' - else - _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' - fi - ;; - esac - _LT_TAGVAR(link_all_deplibs, $1)=yes - ;; - - sunos4*) - if test sequent = "$host_vendor"; then - # Use $CC to link under sequent, because it throws in some extra .o - # files that make .init and .fini sections work. - _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h $soname -o $lib $libobjs $deplibs $compiler_flags' - else - _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' - fi - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_minus_L, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - sysv4) - case $host_vendor in - sni) - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true??? - ;; - siemens) - ## LD is ld it makes a PLAMLIB - ## CC just makes a GrossModule. - _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' - _LT_TAGVAR(hardcode_direct, $1)=no - ;; - motorola) - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie - ;; - esac - runpath_var='LD_RUN_PATH' - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - sysv4.3*) - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' - ;; - - sysv4*MP*) - if test -d /usr/nec; then - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - runpath_var=LD_RUN_PATH - hardcode_runpath_var=yes - _LT_TAGVAR(ld_shlibs, $1)=yes - fi - ;; - - sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) - _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - runpath_var='LD_RUN_PATH' - - if test yes = "$GCC"; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - else - _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - ;; - - sysv5* | sco3.2v5* | sco5v6*) - # Note: We CANNOT use -z defs as we might desire, because we do not - # link with -lc, and that would cause any symbols used from libc to - # always be unresolved, which means just about no library would - # ever link correctly. If we're not using GNU ld we use -z text - # though, which does catch some bad symbols but isn't as heavy-handed - # as -z defs. - _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' - _LT_TAGVAR(allow_undefined_flag, $1)='$wl-z,nodefs' - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R,$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=':' - _LT_TAGVAR(link_all_deplibs, $1)=yes - _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Bexport' - runpath_var='LD_RUN_PATH' - - if test yes = "$GCC"; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - else - _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - ;; - - uts4*) - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - *) - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - esac - - if test sni = "$host_vendor"; then - case $host in - sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) - _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Blargedynsym' - ;; - esac - fi - fi -]) -AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) -test no = "$_LT_TAGVAR(ld_shlibs, $1)" && can_build_shared=no - -_LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld - -_LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl -_LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl -_LT_DECL([], [extract_expsyms_cmds], [2], - [The commands to extract the exported symbol list from a shared archive]) - -# -# Do we need to explicitly link libc? -# -case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in -x|xyes) - # Assume -lc should be added - _LT_TAGVAR(archive_cmds_need_lc, $1)=yes - - if test yes,yes = "$GCC,$enable_shared"; then - case $_LT_TAGVAR(archive_cmds, $1) in - *'~'*) - # FIXME: we may have to deal with multi-command sequences. - ;; - '$CC '*) - # Test whether the compiler implicitly links with -lc since on some - # systems, -lgcc has to come before -lc. If gcc already passes -lc - # to ld, don't add -lc before -lgcc. - AC_CACHE_CHECK([whether -lc should be explicitly linked in], - [lt_cv_]_LT_TAGVAR(archive_cmds_need_lc, $1), - [$RM conftest* - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - if AC_TRY_EVAL(ac_compile) 2>conftest.err; then - soname=conftest - lib=conftest - libobjs=conftest.$ac_objext - deplibs= - wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) - pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1) - compiler_flags=-v - linker_flags=-v - verstring= - output_objdir=. - libname=conftest - lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1) - _LT_TAGVAR(allow_undefined_flag, $1)= - if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) - then - lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=no - else - lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=yes - fi - _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag - else - cat conftest.err 1>&5 - fi - $RM conftest* - ]) - _LT_TAGVAR(archive_cmds_need_lc, $1)=$lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1) - ;; - esac - fi - ;; -esac - -_LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0], - [Whether or not to add -lc for building shared libraries]) -_LT_TAGDECL([allow_libtool_libs_with_static_runtimes], - [enable_shared_with_static_runtimes], [0], - [Whether or not to disallow shared libs when runtime libs are static]) -_LT_TAGDECL([], [export_dynamic_flag_spec], [1], - [Compiler flag to allow reflexive dlopens]) -_LT_TAGDECL([], [whole_archive_flag_spec], [1], - [Compiler flag to generate shared objects directly from archives]) -_LT_TAGDECL([], [compiler_needs_object], [1], - [Whether the compiler copes with passing no objects directly]) -_LT_TAGDECL([], [old_archive_from_new_cmds], [2], - [Create an old-style archive from a shared archive]) -_LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2], - [Create a temporary old-style archive to link instead of a shared archive]) -_LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive]) -_LT_TAGDECL([], [archive_expsym_cmds], [2]) -_LT_TAGDECL([], [module_cmds], [2], - [Commands used to build a loadable module if different from building - a shared archive.]) -_LT_TAGDECL([], [module_expsym_cmds], [2]) -_LT_TAGDECL([], [with_gnu_ld], [1], - [Whether we are building with GNU ld or not]) -_LT_TAGDECL([], [allow_undefined_flag], [1], - [Flag that allows shared libraries with undefined symbols to be built]) -_LT_TAGDECL([], [no_undefined_flag], [1], - [Flag that enforces no undefined symbols]) -_LT_TAGDECL([], [hardcode_libdir_flag_spec], [1], - [Flag to hardcode $libdir into a binary during linking. - This must work even if $libdir does not exist]) -_LT_TAGDECL([], [hardcode_libdir_separator], [1], - [Whether we need a single "-rpath" flag with a separated argument]) -_LT_TAGDECL([], [hardcode_direct], [0], - [Set to "yes" if using DIR/libNAME$shared_ext during linking hardcodes - DIR into the resulting binary]) -_LT_TAGDECL([], [hardcode_direct_absolute], [0], - [Set to "yes" if using DIR/libNAME$shared_ext during linking hardcodes - DIR into the resulting binary and the resulting library dependency is - "absolute", i.e impossible to change by setting $shlibpath_var if the - library is relocated]) -_LT_TAGDECL([], [hardcode_minus_L], [0], - [Set to "yes" if using the -LDIR flag during linking hardcodes DIR - into the resulting binary]) -_LT_TAGDECL([], [hardcode_shlibpath_var], [0], - [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR - into the resulting binary]) -_LT_TAGDECL([], [hardcode_automatic], [0], - [Set to "yes" if building a shared library automatically hardcodes DIR - into the library and all subsequent libraries and executables linked - against it]) -_LT_TAGDECL([], [inherit_rpath], [0], - [Set to yes if linker adds runtime paths of dependent libraries - to runtime path list]) -_LT_TAGDECL([], [link_all_deplibs], [0], - [Whether libtool must link a program against all its dependency libraries]) -_LT_TAGDECL([], [always_export_symbols], [0], - [Set to "yes" if exported symbols are required]) -_LT_TAGDECL([], [export_symbols_cmds], [2], - [The commands to list exported symbols]) -_LT_TAGDECL([], [exclude_expsyms], [1], - [Symbols that should not be listed in the preloaded symbols]) -_LT_TAGDECL([], [include_expsyms], [1], - [Symbols that must always be exported]) -_LT_TAGDECL([], [prelink_cmds], [2], - [Commands necessary for linking programs (against libraries) with templates]) -_LT_TAGDECL([], [postlink_cmds], [2], - [Commands necessary for finishing linking programs]) -_LT_TAGDECL([], [file_list_spec], [1], - [Specify filename containing input files]) -dnl FIXME: Not yet implemented -dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1], -dnl [Compiler flag to generate thread safe objects]) -])# _LT_LINKER_SHLIBS - - -# _LT_LANG_C_CONFIG([TAG]) -# ------------------------ -# Ensure that the configuration variables for a C compiler are suitably -# defined. These variables are subsequently used by _LT_CONFIG to write -# the compiler configuration to 'libtool'. -m4_defun([_LT_LANG_C_CONFIG], -[m4_require([_LT_DECL_EGREP])dnl -lt_save_CC=$CC -AC_LANG_PUSH(C) - -# Source file extension for C test sources. -ac_ext=c - -# Object file extension for compiled C test sources. -objext=o -_LT_TAGVAR(objext, $1)=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code="int some_variable = 0;" - -# Code to be used in simple link tests -lt_simple_link_test_code='int main(){return(0);}' - -_LT_TAG_COMPILER -# Save the default compiler, since it gets overwritten when the other -# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. -compiler_DEFAULT=$CC - -# save warnings/boilerplate of simple test code -_LT_COMPILER_BOILERPLATE -_LT_LINKER_BOILERPLATE - -## CAVEAT EMPTOR: -## There is no encapsulation within the following macros, do not change -## the running order or otherwise move them around unless you know exactly -## what you are doing... -if test -n "$compiler"; then - _LT_COMPILER_NO_RTTI($1) - _LT_COMPILER_PIC($1) - _LT_COMPILER_C_O($1) - _LT_COMPILER_FILE_LOCKS($1) - _LT_LINKER_SHLIBS($1) - _LT_SYS_DYNAMIC_LINKER($1) - _LT_LINKER_HARDCODE_LIBPATH($1) - LT_SYS_DLOPEN_SELF - _LT_CMD_STRIPLIB - - # Report what library types will actually be built - AC_MSG_CHECKING([if libtool supports shared libraries]) - AC_MSG_RESULT([$can_build_shared]) - - AC_MSG_CHECKING([whether to build shared libraries]) - test no = "$can_build_shared" && enable_shared=no - - # On AIX, shared libraries and static libraries use the same namespace, and - # are all built from PIC. - case $host_os in - aix3*) - test yes = "$enable_shared" && enable_static=no - if test -n "$RANLIB"; then - archive_cmds="$archive_cmds~\$RANLIB \$lib" - postinstall_cmds='$RANLIB $lib' - fi - ;; - - aix[[4-9]]*) - if test ia64 != "$host_cpu"; then - case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in - yes,aix,yes) ;; # shared object as lib.so file only - yes,svr4,*) ;; # shared object as lib.so archive member only - yes,*) enable_static=no ;; # shared object in lib.a archive as well - esac - fi - ;; - esac - AC_MSG_RESULT([$enable_shared]) - - AC_MSG_CHECKING([whether to build static libraries]) - # Make sure either enable_shared or enable_static is yes. - test yes = "$enable_shared" || enable_static=yes - AC_MSG_RESULT([$enable_static]) - - _LT_CONFIG($1) -fi -AC_LANG_POP -CC=$lt_save_CC -])# _LT_LANG_C_CONFIG - - -# _LT_LANG_CXX_CONFIG([TAG]) -# -------------------------- -# Ensure that the configuration variables for a C++ compiler are suitably -# defined. These variables are subsequently used by _LT_CONFIG to write -# the compiler configuration to 'libtool'. -m4_defun([_LT_LANG_CXX_CONFIG], -[m4_require([_LT_FILEUTILS_DEFAULTS])dnl -m4_require([_LT_DECL_EGREP])dnl -m4_require([_LT_PATH_MANIFEST_TOOL])dnl -if test -n "$CXX" && ( test no != "$CXX" && - ( (test g++ = "$CXX" && `g++ -v >/dev/null 2>&1` ) || - (test g++ != "$CXX"))); then - AC_PROG_CXXCPP -else - _lt_caught_CXX_error=yes -fi - -AC_LANG_PUSH(C++) -_LT_TAGVAR(archive_cmds_need_lc, $1)=no -_LT_TAGVAR(allow_undefined_flag, $1)= -_LT_TAGVAR(always_export_symbols, $1)=no -_LT_TAGVAR(archive_expsym_cmds, $1)= -_LT_TAGVAR(compiler_needs_object, $1)=no -_LT_TAGVAR(export_dynamic_flag_spec, $1)= -_LT_TAGVAR(hardcode_direct, $1)=no -_LT_TAGVAR(hardcode_direct_absolute, $1)=no -_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= -_LT_TAGVAR(hardcode_libdir_separator, $1)= -_LT_TAGVAR(hardcode_minus_L, $1)=no -_LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported -_LT_TAGVAR(hardcode_automatic, $1)=no -_LT_TAGVAR(inherit_rpath, $1)=no -_LT_TAGVAR(module_cmds, $1)= -_LT_TAGVAR(module_expsym_cmds, $1)= -_LT_TAGVAR(link_all_deplibs, $1)=unknown -_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds -_LT_TAGVAR(reload_flag, $1)=$reload_flag -_LT_TAGVAR(reload_cmds, $1)=$reload_cmds -_LT_TAGVAR(no_undefined_flag, $1)= -_LT_TAGVAR(whole_archive_flag_spec, $1)= -_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no - -# Source file extension for C++ test sources. -ac_ext=cpp - -# Object file extension for compiled C++ test sources. -objext=o -_LT_TAGVAR(objext, $1)=$objext - -# No sense in running all these tests if we already determined that -# the CXX compiler isn't working. Some variables (like enable_shared) -# are currently assumed to apply to all compilers on this platform, -# and will be corrupted by setting them based on a non-working compiler. -if test yes != "$_lt_caught_CXX_error"; then - # Code to be used in simple compile tests - lt_simple_compile_test_code="int some_variable = 0;" - - # Code to be used in simple link tests - lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' - - # ltmain only uses $CC for tagged configurations so make sure $CC is set. - _LT_TAG_COMPILER - - # save warnings/boilerplate of simple test code - _LT_COMPILER_BOILERPLATE - _LT_LINKER_BOILERPLATE - - # Allow CC to be a program name with arguments. - lt_save_CC=$CC - lt_save_CFLAGS=$CFLAGS - lt_save_LD=$LD - lt_save_GCC=$GCC - GCC=$GXX - lt_save_with_gnu_ld=$with_gnu_ld - lt_save_path_LD=$lt_cv_path_LD - if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then - lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx - else - $as_unset lt_cv_prog_gnu_ld - fi - if test -n "${lt_cv_path_LDCXX+set}"; then - lt_cv_path_LD=$lt_cv_path_LDCXX - else - $as_unset lt_cv_path_LD - fi - test -z "${LDCXX+set}" || LD=$LDCXX - CC=${CXX-"c++"} - CFLAGS=$CXXFLAGS - compiler=$CC - _LT_TAGVAR(compiler, $1)=$CC - _LT_CC_BASENAME([$compiler]) - - if test -n "$compiler"; then - # We don't want -fno-exception when compiling C++ code, so set the - # no_builtin_flag separately - if test yes = "$GXX"; then - _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' - else - _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= - fi - - if test yes = "$GXX"; then - # Set up default GNU C++ configuration - - LT_PATH_LD - - # Check if GNU C++ uses GNU ld as the underlying linker, since the - # archiving commands below assume that GNU ld is being used. - if test yes = "$with_gnu_ld"; then - _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' - - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' - - # If archive_cmds runs LD, not CC, wlarc should be empty - # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to - # investigate it a little bit more. (MM) - wlarc='$wl' - - # ancient GNU ld didn't support --whole-archive et. al. - if eval "`$CC -print-prog-name=ld` --help 2>&1" | - $GREP 'no-whole-archive' > /dev/null; then - _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' - else - _LT_TAGVAR(whole_archive_flag_spec, $1)= - fi - else - with_gnu_ld=no - wlarc= - - # A generic and very simple default shared library creation - # command for GNU C++ for the case where it uses the native - # linker, instead of GNU ld. If possible, this setting should - # overridden to take advantage of the native linker features on - # the platform it is being used on. - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' - fi - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP " \-L"' - - else - GXX=no - with_gnu_ld=no - wlarc= - fi - - # PORTME: fill in a description of your system's C++ link characteristics - AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) - _LT_TAGVAR(ld_shlibs, $1)=yes - case $host_os in - aix3*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - aix[[4-9]]*) - if test ia64 = "$host_cpu"; then - # On IA64, the linker does run time linking by default, so we don't - # have to do anything special. - aix_use_runtimelinking=no - exp_sym_flag='-Bexport' - no_entry_flag= - else - aix_use_runtimelinking=no - - # Test if we are trying to use run time linking or normal - # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # have runtime linking enabled, and use it for executables. - # For shared libraries, we enable/disable runtime linking - # depending on the kind of the shared library created - - # when "with_aix_soname,aix_use_runtimelinking" is: - # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables - # "aix,yes" lib.so shared, rtl:yes, for executables - # lib.a static archive - # "both,no" lib.so.V(shr.o) shared, rtl:yes - # lib.a(lib.so.V) shared, rtl:no, for executables - # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables - # lib.a(lib.so.V) shared, rtl:no - # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables - # lib.a static archive - case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) - for ld_flag in $LDFLAGS; do - case $ld_flag in - *-brtl*) - aix_use_runtimelinking=yes - break - ;; - esac - done - if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then - # With aix-soname=svr4, we create the lib.so.V shared archives only, - # so we don't have lib.a shared libs to link our executables. - # We have to force runtime linking in this case. - aix_use_runtimelinking=yes - LDFLAGS="$LDFLAGS -Wl,-brtl" - fi - ;; - esac - - exp_sym_flag='-bexport' - no_entry_flag='-bnoentry' - fi - - # When large executables or shared objects are built, AIX ld can - # have problems creating the table of contents. If linking a library - # or program results in "error TOC overflow" add -mminimal-toc to - # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not - # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. - - _LT_TAGVAR(archive_cmds, $1)='' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - _LT_TAGVAR(hardcode_libdir_separator, $1)=':' - _LT_TAGVAR(link_all_deplibs, $1)=yes - _LT_TAGVAR(file_list_spec, $1)='$wl-f,' - case $with_aix_soname,$aix_use_runtimelinking in - aix,*) ;; # no import file - svr4,* | *,yes) # use import file - # The Import File defines what to hardcode. - _LT_TAGVAR(hardcode_direct, $1)=no - _LT_TAGVAR(hardcode_direct_absolute, $1)=no - ;; - esac - - if test yes = "$GXX"; then - case $host_os in aix4.[[012]]|aix4.[[012]].*) - # We only want to do this on AIX 4.2 and lower, the check - # below for broken collect2 doesn't work under 4.3+ - collect2name=`$CC -print-prog-name=collect2` - if test -f "$collect2name" && - strings "$collect2name" | $GREP resolve_lib_name >/dev/null - then - # We have reworked collect2 - : - else - # We have old collect2 - _LT_TAGVAR(hardcode_direct, $1)=unsupported - # It fails to find uninstalled libraries when the uninstalled - # path is not listed in the libpath. Setting hardcode_minus_L - # to unsupported forces relinking - _LT_TAGVAR(hardcode_minus_L, $1)=yes - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)= - fi - esac - shared_flag='-shared' - if test yes = "$aix_use_runtimelinking"; then - shared_flag=$shared_flag' $wl-G' - fi - # Need to ensure runtime linking is disabled for the traditional - # shared library, or the linker may eventually find shared libraries - # /with/ Import File - we do not want to mix them. - shared_flag_aix='-shared' - shared_flag_svr4='-shared $wl-G' - else - # not using gcc - if test ia64 = "$host_cpu"; then - # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release - # chokes on -Wl,-G. The following line is correct: - shared_flag='-G' - else - if test yes = "$aix_use_runtimelinking"; then - shared_flag='$wl-G' - else - shared_flag='$wl-bM:SRE' - fi - shared_flag_aix='$wl-bM:SRE' - shared_flag_svr4='$wl-G' - fi - fi - - _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-bexpall' - # It seems that -bexpall does not export symbols beginning with - # underscore (_), so it is better to generate a list of symbols to - # export. - _LT_TAGVAR(always_export_symbols, $1)=yes - if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then - # Warning - without using the other runtime loading flags (-brtl), - # -berok will link without error, but may produce a broken library. - # The "-G" linker flag allows undefined symbols. - _LT_TAGVAR(no_undefined_flag, $1)='-bernotok' - # Determine the default libpath from the value encoded in an empty - # executable. - _LT_SYS_MODULE_PATH_AIX([$1]) - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" - - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag - else - if test ia64 = "$host_cpu"; then - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $libdir:/usr/lib:/lib' - _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" - _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" - else - # Determine the default libpath from the value encoded in an - # empty executable. - _LT_SYS_MODULE_PATH_AIX([$1]) - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" - # Warning - without using the other run time loading flags, - # -berok will link without error, but may produce a broken library. - _LT_TAGVAR(no_undefined_flag, $1)=' $wl-bernotok' - _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-berok' - if test yes = "$with_gnu_ld"; then - # We only use this code for GNU lds that support --whole-archive. - _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive' - else - # Exported symbols can be pulled into shared objects from archives - _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' - fi - _LT_TAGVAR(archive_cmds_need_lc, $1)=yes - _LT_TAGVAR(archive_expsym_cmds, $1)='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' - # -brtl affects multiple linker settings, -berok does not and is overridden later - compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([[, ]]\\)%-berok\\1%g"`' - if test svr4 != "$with_aix_soname"; then - # This is similar to how AIX traditionally builds its shared - # libraries. Need -bnortl late, we may have -brtl in LDFLAGS. - _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' - fi - if test aix != "$with_aix_soname"; then - _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' - else - # used by -dlpreopen to get the symbols - _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$MV $output_objdir/$realname.d/$soname $output_objdir' - fi - _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$RM -r $output_objdir/$realname.d' - fi - fi - ;; - - beos*) - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - # Joseph Beckenbach says some releases of gcc - # support --undefined. This deserves some investigation. FIXME - _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - chorus*) - case $cc_basename in - *) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - esac - ;; - - cygwin* | mingw* | pw32* | cegcc*) - case $GXX,$cc_basename in - ,cl* | no,cl*) - # Native MSVC - # hardcode_libdir_flag_spec is actually meaningless, as there is - # no search path for DLLs. - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - _LT_TAGVAR(always_export_symbols, $1)=yes - _LT_TAGVAR(file_list_spec, $1)='@' - # Tell ltmain to make .lib files, not .a files. - libext=lib - # Tell ltmain to make .dll files, not .so files. - shrext_cmds=.dll - # FIXME: Setting linknames here is a bad hack. - _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' - _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then - cp "$export_symbols" "$output_objdir/$soname.def"; - echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; - else - $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; - fi~ - $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ - linknames=' - # The linker will not automatically build a static lib if we build a DLL. - # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' - _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes - # Don't use ranlib - _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' - _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ - lt_tool_outputfile="@TOOL_OUTPUT@"~ - case $lt_outputfile in - *.exe|*.EXE) ;; - *) - lt_outputfile=$lt_outputfile.exe - lt_tool_outputfile=$lt_tool_outputfile.exe - ;; - esac~ - func_to_tool_file "$lt_outputfile"~ - if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then - $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; - $RM "$lt_outputfile.manifest"; - fi' - ;; - *) - # g++ - # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, - # as there is no search path for DLLs. - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-all-symbols' - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - _LT_TAGVAR(always_export_symbols, $1)=no - _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes - - if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - # If the export-symbols file already is a .def file, use it as - # is; otherwise, prepend EXPORTS... - _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then - cp $export_symbols $output_objdir/$soname.def; - else - echo EXPORTS > $output_objdir/$soname.def; - cat $export_symbols >> $output_objdir/$soname.def; - fi~ - $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - ;; - darwin* | rhapsody*) - _LT_DARWIN_LINKER_FEATURES($1) - ;; - - os2*) - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_minus_L, $1)=yes - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - shrext_cmds=.dll - _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ - $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ - $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ - $ECHO EXPORTS >> $output_objdir/$libname.def~ - emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ - $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ - emximp -o $lib $output_objdir/$libname.def' - _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ - $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ - $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ - $ECHO EXPORTS >> $output_objdir/$libname.def~ - prefix_cmds="$SED"~ - if test EXPORTS = "`$SED 1q $export_symbols`"; then - prefix_cmds="$prefix_cmds -e 1d"; - fi~ - prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ - cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ - $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ - emximp -o $lib $output_objdir/$libname.def' - _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' - _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes - ;; - - dgux*) - case $cc_basename in - ec++*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - ghcx*) - # Green Hills C++ Compiler - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - *) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - esac - ;; - - freebsd2.*) - # C++ shared libraries reported to be fairly broken before - # switch to ELF - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - - freebsd-elf*) - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - ;; - - freebsd* | dragonfly*) - # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF - # conventions - _LT_TAGVAR(ld_shlibs, $1)=yes - ;; - - haiku*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' - _LT_TAGVAR(link_all_deplibs, $1)=yes - ;; - - hpux9*) - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, - # but as the default - # location of the library. - - case $cc_basename in - CC*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - aCC*) - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP " \-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' - ;; - *) - if test yes = "$GXX"; then - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' - else - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - ;; - - hpux10*|hpux11*) - if test no = "$with_gnu_ld"; then - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - - case $host_cpu in - hppa*64*|ia64*) - ;; - *) - _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' - ;; - esac - fi - case $host_cpu in - hppa*64*|ia64*) - _LT_TAGVAR(hardcode_direct, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - *) - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, - # but as the default - # location of the library. - ;; - esac - - case $cc_basename in - CC*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - aCC*) - case $host_cpu in - hppa*64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - ia64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - esac - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP " \-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' - ;; - *) - if test yes = "$GXX"; then - if test no = "$with_gnu_ld"; then - case $host_cpu in - hppa*64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - ia64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - esac - fi - else - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - ;; - - interix[[3-9]]*) - _LT_TAGVAR(hardcode_direct, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' - # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. - # Instead, shared libraries are loaded at an image base (0x10000000 by - # default) and relocated if they conflict, which is a slow very memory - # consuming and fragmenting process. To avoid this, we pick a random, - # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link - # time. Moving up from 0x10000000 also allows more sbrk(2) space. - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - ;; - irix5* | irix6*) - case $cc_basename in - CC*) - # SGI C++ - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' - - # Archives containing C++ object files must be created using - # "CC -ar", where "CC" is the IRIX C++ compiler. This is - # necessary to make sure instantiated templates are included - # in the archive. - _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' - ;; - *) - if test yes = "$GXX"; then - if test no = "$with_gnu_ld"; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' - else - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` -o $lib' - fi - fi - _LT_TAGVAR(link_all_deplibs, $1)=yes - ;; - esac - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_TAGVAR(inherit_rpath, $1)=yes - ;; - - linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) - case $cc_basename in - KCC*) - # Kuck and Associates, Inc. (KAI) C++ Compiler - - # KCC will only create a shared library if the output file - # ends with ".so" (or ".sl" for HP-UX), so rename the library - # to its proper name (with version) after linking. - _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib $wl-retain-symbols-file,$export_symbols; mv \$templib $lib' - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' - - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' - - # Archives containing C++ object files must be created using - # "CC -Bstatic", where "CC" is the KAI C++ compiler. - _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' - ;; - icpc* | ecpc* ) - # Intel C++ - with_gnu_ld=yes - # version 8.0 and above of icpc choke on multiply defined symbols - # if we add $predep_objects and $postdep_objects, however 7.1 and - # earlier do not add the objects themselves. - case `$CC -V 2>&1` in - *"Version 7."*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' - ;; - *) # Version 8.0 or newer - tmp_idyn= - case $host_cpu in - ia64*) tmp_idyn=' -i_dynamic';; - esac - _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' - ;; - esac - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' - _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive' - ;; - pgCC* | pgcpp*) - # Portland Group C++ compiler - case `$CC -V` in - *pgCC\ [[1-5]].* | *pgcpp\ [[1-5]].*) - _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~ - rm -rf $tpldir~ - $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ - compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' - _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~ - rm -rf $tpldir~ - $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ - $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ - $RANLIB $oldlib' - _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~ - rm -rf $tpldir~ - $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ - $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~ - rm -rf $tpldir~ - $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ - $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' - ;; - *) # Version 6 and above use weak symbols - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' - ;; - esac - - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl--rpath $wl$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' - _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' - ;; - cxx*) - # Compaq C++ - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib $wl-retain-symbols-file $wl$export_symbols' - - runpath_var=LD_RUN_PATH - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' - ;; - xl* | mpixl* | bgxl*) - # IBM XL 8.0 on PPC, with GNU ld - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' - _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' - if test yes = "$supports_anon_versioning"; then - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - echo "local: *; };" >> $output_objdir/$libname.ver~ - $CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' - fi - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C++ 5.9 - _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' - _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file $wl$export_symbols' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' - _LT_TAGVAR(compiler_needs_object, $1)=yes - - # Not sure whether something based on - # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 - # would be better. - output_verbose_link_cmd='func_echo_all' - - # Archives containing C++ object files must be created using - # "CC -xar", where "CC" is the Sun C++ compiler. This is - # necessary to make sure instantiated templates are included - # in the archive. - _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' - ;; - esac - ;; - esac - ;; - - lynxos*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - - m88k*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - - mvs*) - case $cc_basename in - cxx*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - *) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - esac - ;; - - netbsd*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' - wlarc= - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - fi - # Workaround some broken pre-1.5 toolchains - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' - ;; - - *nto* | *qnx*) - _LT_TAGVAR(ld_shlibs, $1)=yes - ;; - - openbsd* | bitrig*) - if test -f /usr/libexec/ld.so; then - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`"; then - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file,$export_symbols -o $lib' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' - _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' - fi - output_verbose_link_cmd=func_echo_all - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - osf3* | osf4* | osf5*) - case $cc_basename in - KCC*) - # Kuck and Associates, Inc. (KAI) C++ Compiler - - # KCC will only create a shared library if the output file - # ends with ".so" (or ".sl" for HP-UX), so rename the library - # to its proper name (with version) after linking. - _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' - - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - - # Archives containing C++ object files must be created using - # the KAI C++ compiler. - case $host in - osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; - *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;; - esac - ;; - RCC*) - # Rational C++ 2.4.1 - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - cxx*) - case $host in - osf3*) - _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $soname `test -n "$verstring" && func_echo_all "$wl-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' - ;; - *) - _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ - echo "-hidden">> $lib.exp~ - $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname $wl-input $wl$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~ - $RM $lib.exp' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' - ;; - esac - - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' - ;; - *) - if test yes,no = "$GXX,$with_gnu_ld"; then - _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' - case $host in - osf3*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' - ;; - esac - - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP " \-L"' - - else - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - ;; - - psos*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - - sunos4*) - case $cc_basename in - CC*) - # Sun C++ 4.x - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - lcc*) - # Lucid - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - *) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - esac - ;; - - solaris*) - case $cc_basename in - CC* | sunCC*) - # Sun C++ 4.2, 5.x and Centerline C++ - _LT_TAGVAR(archive_cmds_need_lc,$1)=yes - _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' - _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -G$allow_undefined_flag $wl-M $wl$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' - - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - case $host_os in - solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; - *) - # The compiler driver will combine and reorder linker options, - # but understands '-z linker_flag'. - # Supported since Solaris 2.6 (maybe 2.5.1?) - _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' - ;; - esac - _LT_TAGVAR(link_all_deplibs, $1)=yes - - output_verbose_link_cmd='func_echo_all' - - # Archives containing C++ object files must be created using - # "CC -xar", where "CC" is the Sun C++ compiler. This is - # necessary to make sure instantiated templates are included - # in the archive. - _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' - ;; - gcx*) - # Green Hills C++ Compiler - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' - - # The C++ compiler must be used to create the archive. - _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' - ;; - *) - # GNU C++ compiler with Solaris linker - if test yes,no = "$GXX,$with_gnu_ld"; then - _LT_TAGVAR(no_undefined_flag, $1)=' $wl-z ${wl}defs' - if $CC --version | $GREP -v '^2\.7' > /dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -shared $pic_flag -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP " \-L"' - else - # g++ 2.7 appears to require '-G' NOT '-shared' on this - # platform. - _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -G -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP " \-L"' - fi - - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $wl$libdir' - case $host_os in - solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; - *) - _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' - ;; - esac - fi - ;; - esac - ;; - - sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) - _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - runpath_var='LD_RUN_PATH' - - case $cc_basename in - CC*) - _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - ;; - - sysv5* | sco3.2v5* | sco5v6*) - # Note: We CANNOT use -z defs as we might desire, because we do not - # link with -lc, and that would cause any symbols used from libc to - # always be unresolved, which means just about no library would - # ever link correctly. If we're not using GNU ld we use -z text - # though, which does catch some bad symbols but isn't as heavy-handed - # as -z defs. - _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' - _LT_TAGVAR(allow_undefined_flag, $1)='$wl-z,nodefs' - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R,$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=':' - _LT_TAGVAR(link_all_deplibs, $1)=yes - _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Bexport' - runpath_var='LD_RUN_PATH' - - case $cc_basename in - CC*) - _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~ - '"$_LT_TAGVAR(old_archive_cmds, $1)" - _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~ - '"$_LT_TAGVAR(reload_cmds, $1)" - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - ;; - - tandem*) - case $cc_basename in - NCC*) - # NonStop-UX NCC 3.20 - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - *) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - esac - ;; - - vxworks*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - - *) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - esac - - AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) - test no = "$_LT_TAGVAR(ld_shlibs, $1)" && can_build_shared=no - - _LT_TAGVAR(GCC, $1)=$GXX - _LT_TAGVAR(LD, $1)=$LD - - ## CAVEAT EMPTOR: - ## There is no encapsulation within the following macros, do not change - ## the running order or otherwise move them around unless you know exactly - ## what you are doing... - _LT_SYS_HIDDEN_LIBDEPS($1) - _LT_COMPILER_PIC($1) - _LT_COMPILER_C_O($1) - _LT_COMPILER_FILE_LOCKS($1) - _LT_LINKER_SHLIBS($1) - _LT_SYS_DYNAMIC_LINKER($1) - _LT_LINKER_HARDCODE_LIBPATH($1) - - _LT_CONFIG($1) - fi # test -n "$compiler" - - CC=$lt_save_CC - CFLAGS=$lt_save_CFLAGS - LDCXX=$LD - LD=$lt_save_LD - GCC=$lt_save_GCC - with_gnu_ld=$lt_save_with_gnu_ld - lt_cv_path_LDCXX=$lt_cv_path_LD - lt_cv_path_LD=$lt_save_path_LD - lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld - lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld -fi # test yes != "$_lt_caught_CXX_error" - -AC_LANG_POP -])# _LT_LANG_CXX_CONFIG - - -# _LT_FUNC_STRIPNAME_CNF -# ---------------------- -# func_stripname_cnf prefix suffix name -# strip PREFIX and SUFFIX off of NAME. -# PREFIX and SUFFIX must not contain globbing or regex special -# characters, hashes, percent signs, but SUFFIX may contain a leading -# dot (in which case that matches only a dot). -# -# This function is identical to the (non-XSI) version of func_stripname, -# except this one can be used by m4 code that may be executed by configure, -# rather than the libtool script. -m4_defun([_LT_FUNC_STRIPNAME_CNF],[dnl -AC_REQUIRE([_LT_DECL_SED]) -AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH]) -func_stripname_cnf () -{ - case @S|@2 in - .*) func_stripname_result=`$ECHO "@S|@3" | $SED "s%^@S|@1%%; s%\\\\@S|@2\$%%"`;; - *) func_stripname_result=`$ECHO "@S|@3" | $SED "s%^@S|@1%%; s%@S|@2\$%%"`;; - esac -} # func_stripname_cnf -])# _LT_FUNC_STRIPNAME_CNF - - -# _LT_SYS_HIDDEN_LIBDEPS([TAGNAME]) -# --------------------------------- -# Figure out "hidden" library dependencies from verbose -# compiler output when linking a shared library. -# Parse the compiler output and extract the necessary -# objects, libraries and library flags. -m4_defun([_LT_SYS_HIDDEN_LIBDEPS], -[m4_require([_LT_FILEUTILS_DEFAULTS])dnl -AC_REQUIRE([_LT_FUNC_STRIPNAME_CNF])dnl -# Dependencies to place before and after the object being linked: -_LT_TAGVAR(predep_objects, $1)= -_LT_TAGVAR(postdep_objects, $1)= -_LT_TAGVAR(predeps, $1)= -_LT_TAGVAR(postdeps, $1)= -_LT_TAGVAR(compiler_lib_search_path, $1)= - -dnl we can't use the lt_simple_compile_test_code here, -dnl because it contains code intended for an executable, -dnl not a library. It's possible we should let each -dnl tag define a new lt_????_link_test_code variable, -dnl but it's only used here... -m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF -int a; -void foo (void) { a = 0; } -_LT_EOF -], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF -class Foo -{ -public: - Foo (void) { a = 0; } -private: - int a; -}; -_LT_EOF -], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF - subroutine foo - implicit none - integer*4 a - a=0 - return - end -_LT_EOF -], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF - subroutine foo - implicit none - integer a - a=0 - return - end -_LT_EOF -], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF -public class foo { - private int a; - public void bar (void) { - a = 0; - } -}; -_LT_EOF -], [$1], [GO], [cat > conftest.$ac_ext <<_LT_EOF -package foo -func foo() { -} -_LT_EOF -]) - -_lt_libdeps_save_CFLAGS=$CFLAGS -case "$CC $CFLAGS " in #( -*\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; -*\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; -*\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; -esac - -dnl Parse the compiler output and extract the necessary -dnl objects, libraries and library flags. -if AC_TRY_EVAL(ac_compile); then - # Parse the compiler output and extract the necessary - # objects, libraries and library flags. - - # Sentinel used to keep track of whether or not we are before - # the conftest object file. - pre_test_object_deps_done=no - - for p in `eval "$output_verbose_link_cmd"`; do - case $prev$p in - - -L* | -R* | -l*) - # Some compilers place space between "-{L,R}" and the path. - # Remove the space. - if test x-L = "$p" || - test x-R = "$p"; then - prev=$p - continue - fi - - # Expand the sysroot to ease extracting the directories later. - if test -z "$prev"; then - case $p in - -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; - -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; - -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; - esac - fi - case $p in - =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; - esac - if test no = "$pre_test_object_deps_done"; then - case $prev in - -L | -R) - # Internal compiler library paths should come after those - # provided the user. The postdeps already come after the - # user supplied libs so there is no need to process them. - if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then - _LT_TAGVAR(compiler_lib_search_path, $1)=$prev$p - else - _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} $prev$p" - fi - ;; - # The "-l" case would never come before the object being - # linked, so don't bother handling this case. - esac - else - if test -z "$_LT_TAGVAR(postdeps, $1)"; then - _LT_TAGVAR(postdeps, $1)=$prev$p - else - _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} $prev$p" - fi - fi - prev= - ;; - - *.lto.$objext) ;; # Ignore GCC LTO objects - *.$objext) - # This assumes that the test object file only shows up - # once in the compiler output. - if test "$p" = "conftest.$objext"; then - pre_test_object_deps_done=yes - continue - fi - - if test no = "$pre_test_object_deps_done"; then - if test -z "$_LT_TAGVAR(predep_objects, $1)"; then - _LT_TAGVAR(predep_objects, $1)=$p - else - _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p" - fi - else - if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then - _LT_TAGVAR(postdep_objects, $1)=$p - else - _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p" - fi - fi - ;; - - *) ;; # Ignore the rest. - - esac - done - - # Clean up. - rm -f a.out a.exe -else - echo "libtool.m4: error: problem compiling $1 test program" -fi - -$RM -f confest.$objext -CFLAGS=$_lt_libdeps_save_CFLAGS - -# PORTME: override above test on systems where it is broken -m4_if([$1], [CXX], -[case $host_os in -interix[[3-9]]*) - # Interix 3.5 installs completely hosed .la files for C++, so rather than - # hack all around it, let's just trust "g++" to DTRT. - _LT_TAGVAR(predep_objects,$1)= - _LT_TAGVAR(postdep_objects,$1)= - _LT_TAGVAR(postdeps,$1)= - ;; -esac -]) - -case " $_LT_TAGVAR(postdeps, $1) " in -*" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; -esac - _LT_TAGVAR(compiler_lib_search_dirs, $1)= -if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then - _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | $SED -e 's! -L! !g' -e 's!^ !!'` -fi -_LT_TAGDECL([], [compiler_lib_search_dirs], [1], - [The directories searched by this compiler when creating a shared library]) -_LT_TAGDECL([], [predep_objects], [1], - [Dependencies to place before and after the objects being linked to - create a shared library]) -_LT_TAGDECL([], [postdep_objects], [1]) -_LT_TAGDECL([], [predeps], [1]) -_LT_TAGDECL([], [postdeps], [1]) -_LT_TAGDECL([], [compiler_lib_search_path], [1], - [The library search path used internally by the compiler when linking - a shared library]) -])# _LT_SYS_HIDDEN_LIBDEPS - - -# _LT_LANG_F77_CONFIG([TAG]) -# -------------------------- -# Ensure that the configuration variables for a Fortran 77 compiler are -# suitably defined. These variables are subsequently used by _LT_CONFIG -# to write the compiler configuration to 'libtool'. -m4_defun([_LT_LANG_F77_CONFIG], -[AC_LANG_PUSH(Fortran 77) -if test -z "$F77" || test no = "$F77"; then - _lt_disable_F77=yes -fi - -_LT_TAGVAR(archive_cmds_need_lc, $1)=no -_LT_TAGVAR(allow_undefined_flag, $1)= -_LT_TAGVAR(always_export_symbols, $1)=no -_LT_TAGVAR(archive_expsym_cmds, $1)= -_LT_TAGVAR(export_dynamic_flag_spec, $1)= -_LT_TAGVAR(hardcode_direct, $1)=no -_LT_TAGVAR(hardcode_direct_absolute, $1)=no -_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= -_LT_TAGVAR(hardcode_libdir_separator, $1)= -_LT_TAGVAR(hardcode_minus_L, $1)=no -_LT_TAGVAR(hardcode_automatic, $1)=no -_LT_TAGVAR(inherit_rpath, $1)=no -_LT_TAGVAR(module_cmds, $1)= -_LT_TAGVAR(module_expsym_cmds, $1)= -_LT_TAGVAR(link_all_deplibs, $1)=unknown -_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds -_LT_TAGVAR(reload_flag, $1)=$reload_flag -_LT_TAGVAR(reload_cmds, $1)=$reload_cmds -_LT_TAGVAR(no_undefined_flag, $1)= -_LT_TAGVAR(whole_archive_flag_spec, $1)= -_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no - -# Source file extension for f77 test sources. -ac_ext=f - -# Object file extension for compiled f77 test sources. -objext=o -_LT_TAGVAR(objext, $1)=$objext - -# No sense in running all these tests if we already determined that -# the F77 compiler isn't working. Some variables (like enable_shared) -# are currently assumed to apply to all compilers on this platform, -# and will be corrupted by setting them based on a non-working compiler. -if test yes != "$_lt_disable_F77"; then - # Code to be used in simple compile tests - lt_simple_compile_test_code="\ - subroutine t - return - end -" - - # Code to be used in simple link tests - lt_simple_link_test_code="\ - program t - end -" - - # ltmain only uses $CC for tagged configurations so make sure $CC is set. - _LT_TAG_COMPILER - - # save warnings/boilerplate of simple test code - _LT_COMPILER_BOILERPLATE - _LT_LINKER_BOILERPLATE - - # Allow CC to be a program name with arguments. - lt_save_CC=$CC - lt_save_GCC=$GCC - lt_save_CFLAGS=$CFLAGS - CC=${F77-"f77"} - CFLAGS=$FFLAGS - compiler=$CC - _LT_TAGVAR(compiler, $1)=$CC - _LT_CC_BASENAME([$compiler]) - GCC=$G77 - if test -n "$compiler"; then - AC_MSG_CHECKING([if libtool supports shared libraries]) - AC_MSG_RESULT([$can_build_shared]) - - AC_MSG_CHECKING([whether to build shared libraries]) - test no = "$can_build_shared" && enable_shared=no - - # On AIX, shared libraries and static libraries use the same namespace, and - # are all built from PIC. - case $host_os in - aix3*) - test yes = "$enable_shared" && enable_static=no - if test -n "$RANLIB"; then - archive_cmds="$archive_cmds~\$RANLIB \$lib" - postinstall_cmds='$RANLIB $lib' - fi - ;; - aix[[4-9]]*) - if test ia64 != "$host_cpu"; then - case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in - yes,aix,yes) ;; # shared object as lib.so file only - yes,svr4,*) ;; # shared object as lib.so archive member only - yes,*) enable_static=no ;; # shared object in lib.a archive as well - esac - fi - ;; - esac - AC_MSG_RESULT([$enable_shared]) - - AC_MSG_CHECKING([whether to build static libraries]) - # Make sure either enable_shared or enable_static is yes. - test yes = "$enable_shared" || enable_static=yes - AC_MSG_RESULT([$enable_static]) - - _LT_TAGVAR(GCC, $1)=$G77 - _LT_TAGVAR(LD, $1)=$LD - - ## CAVEAT EMPTOR: - ## There is no encapsulation within the following macros, do not change - ## the running order or otherwise move them around unless you know exactly - ## what you are doing... - _LT_COMPILER_PIC($1) - _LT_COMPILER_C_O($1) - _LT_COMPILER_FILE_LOCKS($1) - _LT_LINKER_SHLIBS($1) - _LT_SYS_DYNAMIC_LINKER($1) - _LT_LINKER_HARDCODE_LIBPATH($1) - - _LT_CONFIG($1) - fi # test -n "$compiler" - - GCC=$lt_save_GCC - CC=$lt_save_CC - CFLAGS=$lt_save_CFLAGS -fi # test yes != "$_lt_disable_F77" - -AC_LANG_POP -])# _LT_LANG_F77_CONFIG - - -# _LT_LANG_FC_CONFIG([TAG]) -# ------------------------- -# Ensure that the configuration variables for a Fortran compiler are -# suitably defined. These variables are subsequently used by _LT_CONFIG -# to write the compiler configuration to 'libtool'. -m4_defun([_LT_LANG_FC_CONFIG], -[AC_LANG_PUSH(Fortran) - -if test -z "$FC" || test no = "$FC"; then - _lt_disable_FC=yes -fi - -_LT_TAGVAR(archive_cmds_need_lc, $1)=no -_LT_TAGVAR(allow_undefined_flag, $1)= -_LT_TAGVAR(always_export_symbols, $1)=no -_LT_TAGVAR(archive_expsym_cmds, $1)= -_LT_TAGVAR(export_dynamic_flag_spec, $1)= -_LT_TAGVAR(hardcode_direct, $1)=no -_LT_TAGVAR(hardcode_direct_absolute, $1)=no -_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= -_LT_TAGVAR(hardcode_libdir_separator, $1)= -_LT_TAGVAR(hardcode_minus_L, $1)=no -_LT_TAGVAR(hardcode_automatic, $1)=no -_LT_TAGVAR(inherit_rpath, $1)=no -_LT_TAGVAR(module_cmds, $1)= -_LT_TAGVAR(module_expsym_cmds, $1)= -_LT_TAGVAR(link_all_deplibs, $1)=unknown -_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds -_LT_TAGVAR(reload_flag, $1)=$reload_flag -_LT_TAGVAR(reload_cmds, $1)=$reload_cmds -_LT_TAGVAR(no_undefined_flag, $1)= -_LT_TAGVAR(whole_archive_flag_spec, $1)= -_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no - -# Source file extension for fc test sources. -ac_ext=${ac_fc_srcext-f} - -# Object file extension for compiled fc test sources. -objext=o -_LT_TAGVAR(objext, $1)=$objext - -# No sense in running all these tests if we already determined that -# the FC compiler isn't working. Some variables (like enable_shared) -# are currently assumed to apply to all compilers on this platform, -# and will be corrupted by setting them based on a non-working compiler. -if test yes != "$_lt_disable_FC"; then - # Code to be used in simple compile tests - lt_simple_compile_test_code="\ - subroutine t - return - end -" - - # Code to be used in simple link tests - lt_simple_link_test_code="\ - program t - end -" - - # ltmain only uses $CC for tagged configurations so make sure $CC is set. - _LT_TAG_COMPILER - - # save warnings/boilerplate of simple test code - _LT_COMPILER_BOILERPLATE - _LT_LINKER_BOILERPLATE - - # Allow CC to be a program name with arguments. - lt_save_CC=$CC - lt_save_GCC=$GCC - lt_save_CFLAGS=$CFLAGS - CC=${FC-"f95"} - CFLAGS=$FCFLAGS - compiler=$CC - GCC=$ac_cv_fc_compiler_gnu - - _LT_TAGVAR(compiler, $1)=$CC - _LT_CC_BASENAME([$compiler]) - - if test -n "$compiler"; then - AC_MSG_CHECKING([if libtool supports shared libraries]) - AC_MSG_RESULT([$can_build_shared]) - - AC_MSG_CHECKING([whether to build shared libraries]) - test no = "$can_build_shared" && enable_shared=no - - # On AIX, shared libraries and static libraries use the same namespace, and - # are all built from PIC. - case $host_os in - aix3*) - test yes = "$enable_shared" && enable_static=no - if test -n "$RANLIB"; then - archive_cmds="$archive_cmds~\$RANLIB \$lib" - postinstall_cmds='$RANLIB $lib' - fi - ;; - aix[[4-9]]*) - if test ia64 != "$host_cpu"; then - case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in - yes,aix,yes) ;; # shared object as lib.so file only - yes,svr4,*) ;; # shared object as lib.so archive member only - yes,*) enable_static=no ;; # shared object in lib.a archive as well - esac - fi - ;; - esac - AC_MSG_RESULT([$enable_shared]) - - AC_MSG_CHECKING([whether to build static libraries]) - # Make sure either enable_shared or enable_static is yes. - test yes = "$enable_shared" || enable_static=yes - AC_MSG_RESULT([$enable_static]) - - _LT_TAGVAR(GCC, $1)=$ac_cv_fc_compiler_gnu - _LT_TAGVAR(LD, $1)=$LD - - ## CAVEAT EMPTOR: - ## There is no encapsulation within the following macros, do not change - ## the running order or otherwise move them around unless you know exactly - ## what you are doing... - _LT_SYS_HIDDEN_LIBDEPS($1) - _LT_COMPILER_PIC($1) - _LT_COMPILER_C_O($1) - _LT_COMPILER_FILE_LOCKS($1) - _LT_LINKER_SHLIBS($1) - _LT_SYS_DYNAMIC_LINKER($1) - _LT_LINKER_HARDCODE_LIBPATH($1) - - _LT_CONFIG($1) - fi # test -n "$compiler" - - GCC=$lt_save_GCC - CC=$lt_save_CC - CFLAGS=$lt_save_CFLAGS -fi # test yes != "$_lt_disable_FC" - -AC_LANG_POP -])# _LT_LANG_FC_CONFIG - - -# _LT_LANG_GCJ_CONFIG([TAG]) -# -------------------------- -# Ensure that the configuration variables for the GNU Java Compiler compiler -# are suitably defined. These variables are subsequently used by _LT_CONFIG -# to write the compiler configuration to 'libtool'. -m4_defun([_LT_LANG_GCJ_CONFIG], -[AC_REQUIRE([LT_PROG_GCJ])dnl -AC_LANG_SAVE - -# Source file extension for Java test sources. -ac_ext=java - -# Object file extension for compiled Java test sources. -objext=o -_LT_TAGVAR(objext, $1)=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code="class foo {}" - -# Code to be used in simple link tests -lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' - -# ltmain only uses $CC for tagged configurations so make sure $CC is set. -_LT_TAG_COMPILER - -# save warnings/boilerplate of simple test code -_LT_COMPILER_BOILERPLATE -_LT_LINKER_BOILERPLATE - -# Allow CC to be a program name with arguments. -lt_save_CC=$CC -lt_save_CFLAGS=$CFLAGS -lt_save_GCC=$GCC -GCC=yes -CC=${GCJ-"gcj"} -CFLAGS=$GCJFLAGS -compiler=$CC -_LT_TAGVAR(compiler, $1)=$CC -_LT_TAGVAR(LD, $1)=$LD -_LT_CC_BASENAME([$compiler]) - -# GCJ did not exist at the time GCC didn't implicitly link libc in. -_LT_TAGVAR(archive_cmds_need_lc, $1)=no - -_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds -_LT_TAGVAR(reload_flag, $1)=$reload_flag -_LT_TAGVAR(reload_cmds, $1)=$reload_cmds - -## CAVEAT EMPTOR: -## There is no encapsulation within the following macros, do not change -## the running order or otherwise move them around unless you know exactly -## what you are doing... -if test -n "$compiler"; then - _LT_COMPILER_NO_RTTI($1) - _LT_COMPILER_PIC($1) - _LT_COMPILER_C_O($1) - _LT_COMPILER_FILE_LOCKS($1) - _LT_LINKER_SHLIBS($1) - _LT_LINKER_HARDCODE_LIBPATH($1) - - _LT_CONFIG($1) -fi - -AC_LANG_RESTORE - -GCC=$lt_save_GCC -CC=$lt_save_CC -CFLAGS=$lt_save_CFLAGS -])# _LT_LANG_GCJ_CONFIG - - -# _LT_LANG_GO_CONFIG([TAG]) -# -------------------------- -# Ensure that the configuration variables for the GNU Go compiler -# are suitably defined. These variables are subsequently used by _LT_CONFIG -# to write the compiler configuration to 'libtool'. -m4_defun([_LT_LANG_GO_CONFIG], -[AC_REQUIRE([LT_PROG_GO])dnl -AC_LANG_SAVE - -# Source file extension for Go test sources. -ac_ext=go - -# Object file extension for compiled Go test sources. -objext=o -_LT_TAGVAR(objext, $1)=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code="package main; func main() { }" - -# Code to be used in simple link tests -lt_simple_link_test_code='package main; func main() { }' - -# ltmain only uses $CC for tagged configurations so make sure $CC is set. -_LT_TAG_COMPILER - -# save warnings/boilerplate of simple test code -_LT_COMPILER_BOILERPLATE -_LT_LINKER_BOILERPLATE - -# Allow CC to be a program name with arguments. -lt_save_CC=$CC -lt_save_CFLAGS=$CFLAGS -lt_save_GCC=$GCC -GCC=yes -CC=${GOC-"gccgo"} -CFLAGS=$GOFLAGS -compiler=$CC -_LT_TAGVAR(compiler, $1)=$CC -_LT_TAGVAR(LD, $1)=$LD -_LT_CC_BASENAME([$compiler]) - -# Go did not exist at the time GCC didn't implicitly link libc in. -_LT_TAGVAR(archive_cmds_need_lc, $1)=no - -_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds -_LT_TAGVAR(reload_flag, $1)=$reload_flag -_LT_TAGVAR(reload_cmds, $1)=$reload_cmds - -## CAVEAT EMPTOR: -## There is no encapsulation within the following macros, do not change -## the running order or otherwise move them around unless you know exactly -## what you are doing... -if test -n "$compiler"; then - _LT_COMPILER_NO_RTTI($1) - _LT_COMPILER_PIC($1) - _LT_COMPILER_C_O($1) - _LT_COMPILER_FILE_LOCKS($1) - _LT_LINKER_SHLIBS($1) - _LT_LINKER_HARDCODE_LIBPATH($1) - - _LT_CONFIG($1) -fi - -AC_LANG_RESTORE - -GCC=$lt_save_GCC -CC=$lt_save_CC -CFLAGS=$lt_save_CFLAGS -])# _LT_LANG_GO_CONFIG - - -# _LT_LANG_RC_CONFIG([TAG]) -# ------------------------- -# Ensure that the configuration variables for the Windows resource compiler -# are suitably defined. These variables are subsequently used by _LT_CONFIG -# to write the compiler configuration to 'libtool'. -m4_defun([_LT_LANG_RC_CONFIG], -[AC_REQUIRE([LT_PROG_RC])dnl -AC_LANG_SAVE - -# Source file extension for RC test sources. -ac_ext=rc - -# Object file extension for compiled RC test sources. -objext=o -_LT_TAGVAR(objext, $1)=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' - -# Code to be used in simple link tests -lt_simple_link_test_code=$lt_simple_compile_test_code - -# ltmain only uses $CC for tagged configurations so make sure $CC is set. -_LT_TAG_COMPILER - -# save warnings/boilerplate of simple test code -_LT_COMPILER_BOILERPLATE -_LT_LINKER_BOILERPLATE - -# Allow CC to be a program name with arguments. -lt_save_CC=$CC -lt_save_CFLAGS=$CFLAGS -lt_save_GCC=$GCC -GCC= -CC=${RC-"windres"} -CFLAGS= -compiler=$CC -_LT_TAGVAR(compiler, $1)=$CC -_LT_CC_BASENAME([$compiler]) -_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes - -if test -n "$compiler"; then - : - _LT_CONFIG($1) -fi - -GCC=$lt_save_GCC -AC_LANG_RESTORE -CC=$lt_save_CC -CFLAGS=$lt_save_CFLAGS -])# _LT_LANG_RC_CONFIG - - -# LT_PROG_GCJ -# ----------- -AC_DEFUN([LT_PROG_GCJ], -[m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], - [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], - [AC_CHECK_TOOL(GCJ, gcj,) - test set = "${GCJFLAGS+set}" || GCJFLAGS="-g -O2" - AC_SUBST(GCJFLAGS)])])[]dnl -]) - -# Old name: -AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([LT_AC_PROG_GCJ], []) - - -# LT_PROG_GO -# ---------- -AC_DEFUN([LT_PROG_GO], -[AC_CHECK_TOOL(GOC, gccgo,) -]) - - -# LT_PROG_RC -# ---------- -AC_DEFUN([LT_PROG_RC], -[AC_CHECK_TOOL(RC, windres,) -]) - -# Old name: -AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([LT_AC_PROG_RC], []) - - -# _LT_DECL_EGREP -# -------------- -# If we don't have a new enough Autoconf to choose the best grep -# available, choose the one first in the user's PATH. -m4_defun([_LT_DECL_EGREP], -[AC_REQUIRE([AC_PROG_EGREP])dnl -AC_REQUIRE([AC_PROG_FGREP])dnl -test -z "$GREP" && GREP=grep -_LT_DECL([], [GREP], [1], [A grep program that handles long lines]) -_LT_DECL([], [EGREP], [1], [An ERE matcher]) -_LT_DECL([], [FGREP], [1], [A literal string matcher]) -dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too -AC_SUBST([GREP]) -]) - - -# _LT_DECL_OBJDUMP -# -------------- -# If we don't have a new enough Autoconf to choose the best objdump -# available, choose the one first in the user's PATH. -m4_defun([_LT_DECL_OBJDUMP], -[AC_CHECK_TOOL(OBJDUMP, objdump, false) -test -z "$OBJDUMP" && OBJDUMP=objdump -_LT_DECL([], [OBJDUMP], [1], [An object symbol dumper]) -AC_SUBST([OBJDUMP]) -]) - -# _LT_DECL_DLLTOOL -# ---------------- -# Ensure DLLTOOL variable is set. -m4_defun([_LT_DECL_DLLTOOL], -[AC_CHECK_TOOL(DLLTOOL, dlltool, false) -test -z "$DLLTOOL" && DLLTOOL=dlltool -_LT_DECL([], [DLLTOOL], [1], [DLL creation program]) -AC_SUBST([DLLTOOL]) -]) - -# _LT_DECL_SED -# ------------ -# Check for a fully-functional sed program, that truncates -# as few characters as possible. Prefer GNU sed if found. -m4_defun([_LT_DECL_SED], -[AC_PROG_SED -test -z "$SED" && SED=sed -Xsed="$SED -e 1s/^X//" -_LT_DECL([], [SED], [1], [A sed program that does not truncate output]) -_LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"], - [Sed that helps us avoid accidentally triggering echo(1) options like -n]) -])# _LT_DECL_SED - -m4_ifndef([AC_PROG_SED], [ -############################################################ -# NOTE: This macro has been submitted for inclusion into # -# GNU Autoconf as AC_PROG_SED. When it is available in # -# a released version of Autoconf we should remove this # -# macro and use it instead. # -############################################################ - -m4_defun([AC_PROG_SED], -[AC_MSG_CHECKING([for a sed that does not truncate output]) -AC_CACHE_VAL(lt_cv_path_SED, -[# Loop through the user's path and test for sed and gsed. -# Then use that list of sed's as ones to test for truncation. -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for lt_ac_prog in sed gsed; do - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then - lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" - fi - done - done -done -IFS=$as_save_IFS -lt_ac_max=0 -lt_ac_count=0 -# Add /usr/xpg4/bin/sed as it is typically found on Solaris -# along with /bin/sed that truncates output. -for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do - test ! -f "$lt_ac_sed" && continue - cat /dev/null > conftest.in - lt_ac_count=0 - echo $ECHO_N "0123456789$ECHO_C" >conftest.in - # Check for GNU sed and select it if it is found. - if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then - lt_cv_path_SED=$lt_ac_sed - break - fi - while true; do - cat conftest.in conftest.in >conftest.tmp - mv conftest.tmp conftest.in - cp conftest.in conftest.nl - echo >>conftest.nl - $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break - cmp -s conftest.out conftest.nl || break - # 10000 chars as input seems more than enough - test 10 -lt "$lt_ac_count" && break - lt_ac_count=`expr $lt_ac_count + 1` - if test "$lt_ac_count" -gt "$lt_ac_max"; then - lt_ac_max=$lt_ac_count - lt_cv_path_SED=$lt_ac_sed - fi - done -done -]) -SED=$lt_cv_path_SED -AC_SUBST([SED]) -AC_MSG_RESULT([$SED]) -])#AC_PROG_SED -])#m4_ifndef - -# Old name: -AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([LT_AC_PROG_SED], []) - - -# _LT_CHECK_SHELL_FEATURES -# ------------------------ -# Find out whether the shell is Bourne or XSI compatible, -# or has some other useful features. -m4_defun([_LT_CHECK_SHELL_FEATURES], -[if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then - lt_unset=unset -else - lt_unset=false -fi -_LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl - -# test EBCDIC or ASCII -case `echo X|tr X '\101'` in - A) # ASCII based system - # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr - lt_SP2NL='tr \040 \012' - lt_NL2SP='tr \015\012 \040\040' - ;; - *) # EBCDIC based system - lt_SP2NL='tr \100 \n' - lt_NL2SP='tr \r\n \100\100' - ;; -esac -_LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl -_LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl -])# _LT_CHECK_SHELL_FEATURES - - -# _LT_PATH_CONVERSION_FUNCTIONS -# ----------------------------- -# Determine what file name conversion functions should be used by -# func_to_host_file (and, implicitly, by func_to_host_path). These are needed -# for certain cross-compile configurations and native mingw. -m4_defun([_LT_PATH_CONVERSION_FUNCTIONS], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -AC_REQUIRE([AC_CANONICAL_BUILD])dnl -AC_MSG_CHECKING([how to convert $build file names to $host format]) -AC_CACHE_VAL(lt_cv_to_host_file_cmd, -[case $host in - *-*-mingw* ) - case $build in - *-*-mingw* ) # actually msys - lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 - ;; - *-*-cygwin* ) - lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 - ;; - * ) # otherwise, assume *nix - lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 - ;; - esac - ;; - *-*-cygwin* ) - case $build in - *-*-mingw* ) # actually msys - lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin - ;; - *-*-cygwin* ) - lt_cv_to_host_file_cmd=func_convert_file_noop - ;; - * ) # otherwise, assume *nix - lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin - ;; - esac - ;; - * ) # unhandled hosts (and "normal" native builds) - lt_cv_to_host_file_cmd=func_convert_file_noop - ;; -esac -]) -to_host_file_cmd=$lt_cv_to_host_file_cmd -AC_MSG_RESULT([$lt_cv_to_host_file_cmd]) -_LT_DECL([to_host_file_cmd], [lt_cv_to_host_file_cmd], - [0], [convert $build file names to $host format])dnl - -AC_MSG_CHECKING([how to convert $build file names to toolchain format]) -AC_CACHE_VAL(lt_cv_to_tool_file_cmd, -[#assume ordinary cross tools, or native build. -lt_cv_to_tool_file_cmd=func_convert_file_noop -case $host in - *-*-mingw* ) - case $build in - *-*-mingw* ) # actually msys - lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 - ;; - esac - ;; -esac -]) -to_tool_file_cmd=$lt_cv_to_tool_file_cmd -AC_MSG_RESULT([$lt_cv_to_tool_file_cmd]) -_LT_DECL([to_tool_file_cmd], [lt_cv_to_tool_file_cmd], - [0], [convert $build files to toolchain format])dnl -])# _LT_PATH_CONVERSION_FUNCTIONS diff --git a/Extended/libwebp/m4/ltoptions.m4 b/Extended/libwebp/m4/ltoptions.m4 deleted file mode 100644 index 94b0829..0000000 --- a/Extended/libwebp/m4/ltoptions.m4 +++ /dev/null @@ -1,437 +0,0 @@ -# Helper functions for option handling. -*- Autoconf -*- -# -# Copyright (C) 2004-2005, 2007-2009, 2011-2015 Free Software -# Foundation, Inc. -# Written by Gary V. Vaughan, 2004 -# -# This file is free software; the Free Software Foundation gives -# unlimited permission to copy and/or distribute it, with or without -# modifications, as long as this notice is preserved. - -# serial 8 ltoptions.m4 - -# This is to help aclocal find these macros, as it can't see m4_define. -AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) - - -# _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME) -# ------------------------------------------ -m4_define([_LT_MANGLE_OPTION], -[[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])]) - - -# _LT_SET_OPTION(MACRO-NAME, OPTION-NAME) -# --------------------------------------- -# Set option OPTION-NAME for macro MACRO-NAME, and if there is a -# matching handler defined, dispatch to it. Other OPTION-NAMEs are -# saved as a flag. -m4_define([_LT_SET_OPTION], -[m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl -m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]), - _LT_MANGLE_DEFUN([$1], [$2]), - [m4_warning([Unknown $1 option '$2'])])[]dnl -]) - - -# _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET]) -# ------------------------------------------------------------ -# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. -m4_define([_LT_IF_OPTION], -[m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])]) - - -# _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET) -# ------------------------------------------------------- -# Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME -# are set. -m4_define([_LT_UNLESS_OPTIONS], -[m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), - [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option), - [m4_define([$0_found])])])[]dnl -m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3 -])[]dnl -]) - - -# _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST) -# ---------------------------------------- -# OPTION-LIST is a space-separated list of Libtool options associated -# with MACRO-NAME. If any OPTION has a matching handler declared with -# LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about -# the unknown option and exit. -m4_defun([_LT_SET_OPTIONS], -[# Set options -m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), - [_LT_SET_OPTION([$1], _LT_Option)]) - -m4_if([$1],[LT_INIT],[ - dnl - dnl Simply set some default values (i.e off) if boolean options were not - dnl specified: - _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no - ]) - _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no - ]) - dnl - dnl If no reference was made to various pairs of opposing options, then - dnl we run the default mode handler for the pair. For example, if neither - dnl 'shared' nor 'disable-shared' was passed, we enable building of shared - dnl archives by default: - _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED]) - _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC]) - _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC]) - _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install], - [_LT_ENABLE_FAST_INSTALL]) - _LT_UNLESS_OPTIONS([LT_INIT], [aix-soname=aix aix-soname=both aix-soname=svr4], - [_LT_WITH_AIX_SONAME([aix])]) - ]) -])# _LT_SET_OPTIONS - - -## --------------------------------- ## -## Macros to handle LT_INIT options. ## -## --------------------------------- ## - -# _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME) -# ----------------------------------------- -m4_define([_LT_MANGLE_DEFUN], -[[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])]) - - -# LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE) -# ----------------------------------------------- -m4_define([LT_OPTION_DEFINE], -[m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl -])# LT_OPTION_DEFINE - - -# dlopen -# ------ -LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes -]) - -AU_DEFUN([AC_LIBTOOL_DLOPEN], -[_LT_SET_OPTION([LT_INIT], [dlopen]) -AC_DIAGNOSE([obsolete], -[$0: Remove this warning and the call to _LT_SET_OPTION when you -put the 'dlopen' option into LT_INIT's first parameter.]) -]) - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], []) - - -# win32-dll -# --------- -# Declare package support for building win32 dll's. -LT_OPTION_DEFINE([LT_INIT], [win32-dll], -[enable_win32_dll=yes - -case $host in -*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) - AC_CHECK_TOOL(AS, as, false) - AC_CHECK_TOOL(DLLTOOL, dlltool, false) - AC_CHECK_TOOL(OBJDUMP, objdump, false) - ;; -esac - -test -z "$AS" && AS=as -_LT_DECL([], [AS], [1], [Assembler program])dnl - -test -z "$DLLTOOL" && DLLTOOL=dlltool -_LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl - -test -z "$OBJDUMP" && OBJDUMP=objdump -_LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl -])# win32-dll - -AU_DEFUN([AC_LIBTOOL_WIN32_DLL], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -_LT_SET_OPTION([LT_INIT], [win32-dll]) -AC_DIAGNOSE([obsolete], -[$0: Remove this warning and the call to _LT_SET_OPTION when you -put the 'win32-dll' option into LT_INIT's first parameter.]) -]) - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], []) - - -# _LT_ENABLE_SHARED([DEFAULT]) -# ---------------------------- -# implement the --enable-shared flag, and supports the 'shared' and -# 'disable-shared' LT_INIT options. -# DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'. -m4_define([_LT_ENABLE_SHARED], -[m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl -AC_ARG_ENABLE([shared], - [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@], - [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])], - [p=${PACKAGE-default} - case $enableval in - yes) enable_shared=yes ;; - no) enable_shared=no ;; - *) - enable_shared=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, - for pkg in $enableval; do - IFS=$lt_save_ifs - if test "X$pkg" = "X$p"; then - enable_shared=yes - fi - done - IFS=$lt_save_ifs - ;; - esac], - [enable_shared=]_LT_ENABLE_SHARED_DEFAULT) - - _LT_DECL([build_libtool_libs], [enable_shared], [0], - [Whether or not to build shared libraries]) -])# _LT_ENABLE_SHARED - -LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])]) -LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])]) - -# Old names: -AC_DEFUN([AC_ENABLE_SHARED], -[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared]) -]) - -AC_DEFUN([AC_DISABLE_SHARED], -[_LT_SET_OPTION([LT_INIT], [disable-shared]) -]) - -AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) -AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AM_ENABLE_SHARED], []) -dnl AC_DEFUN([AM_DISABLE_SHARED], []) - - - -# _LT_ENABLE_STATIC([DEFAULT]) -# ---------------------------- -# implement the --enable-static flag, and support the 'static' and -# 'disable-static' LT_INIT options. -# DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'. -m4_define([_LT_ENABLE_STATIC], -[m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl -AC_ARG_ENABLE([static], - [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@], - [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])], - [p=${PACKAGE-default} - case $enableval in - yes) enable_static=yes ;; - no) enable_static=no ;; - *) - enable_static=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, - for pkg in $enableval; do - IFS=$lt_save_ifs - if test "X$pkg" = "X$p"; then - enable_static=yes - fi - done - IFS=$lt_save_ifs - ;; - esac], - [enable_static=]_LT_ENABLE_STATIC_DEFAULT) - - _LT_DECL([build_old_libs], [enable_static], [0], - [Whether or not to build static libraries]) -])# _LT_ENABLE_STATIC - -LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])]) -LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])]) - -# Old names: -AC_DEFUN([AC_ENABLE_STATIC], -[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static]) -]) - -AC_DEFUN([AC_DISABLE_STATIC], -[_LT_SET_OPTION([LT_INIT], [disable-static]) -]) - -AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) -AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AM_ENABLE_STATIC], []) -dnl AC_DEFUN([AM_DISABLE_STATIC], []) - - - -# _LT_ENABLE_FAST_INSTALL([DEFAULT]) -# ---------------------------------- -# implement the --enable-fast-install flag, and support the 'fast-install' -# and 'disable-fast-install' LT_INIT options. -# DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'. -m4_define([_LT_ENABLE_FAST_INSTALL], -[m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl -AC_ARG_ENABLE([fast-install], - [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], - [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], - [p=${PACKAGE-default} - case $enableval in - yes) enable_fast_install=yes ;; - no) enable_fast_install=no ;; - *) - enable_fast_install=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, - for pkg in $enableval; do - IFS=$lt_save_ifs - if test "X$pkg" = "X$p"; then - enable_fast_install=yes - fi - done - IFS=$lt_save_ifs - ;; - esac], - [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT) - -_LT_DECL([fast_install], [enable_fast_install], [0], - [Whether or not to optimize for fast installation])dnl -])# _LT_ENABLE_FAST_INSTALL - -LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])]) -LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])]) - -# Old names: -AU_DEFUN([AC_ENABLE_FAST_INSTALL], -[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) -AC_DIAGNOSE([obsolete], -[$0: Remove this warning and the call to _LT_SET_OPTION when you put -the 'fast-install' option into LT_INIT's first parameter.]) -]) - -AU_DEFUN([AC_DISABLE_FAST_INSTALL], -[_LT_SET_OPTION([LT_INIT], [disable-fast-install]) -AC_DIAGNOSE([obsolete], -[$0: Remove this warning and the call to _LT_SET_OPTION when you put -the 'disable-fast-install' option into LT_INIT's first parameter.]) -]) - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], []) -dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], []) - - -# _LT_WITH_AIX_SONAME([DEFAULT]) -# ---------------------------------- -# implement the --with-aix-soname flag, and support the `aix-soname=aix' -# and `aix-soname=both' and `aix-soname=svr4' LT_INIT options. DEFAULT -# is either `aix', `both' or `svr4'. If omitted, it defaults to `aix'. -m4_define([_LT_WITH_AIX_SONAME], -[m4_define([_LT_WITH_AIX_SONAME_DEFAULT], [m4_if($1, svr4, svr4, m4_if($1, both, both, aix))])dnl -shared_archive_member_spec= -case $host,$enable_shared in -power*-*-aix[[5-9]]*,yes) - AC_MSG_CHECKING([which variant of shared library versioning to provide]) - AC_ARG_WITH([aix-soname], - [AS_HELP_STRING([--with-aix-soname=aix|svr4|both], - [shared library versioning (aka "SONAME") variant to provide on AIX, @<:@default=]_LT_WITH_AIX_SONAME_DEFAULT[@:>@.])], - [case $withval in - aix|svr4|both) - ;; - *) - AC_MSG_ERROR([Unknown argument to --with-aix-soname]) - ;; - esac - lt_cv_with_aix_soname=$with_aix_soname], - [AC_CACHE_VAL([lt_cv_with_aix_soname], - [lt_cv_with_aix_soname=]_LT_WITH_AIX_SONAME_DEFAULT) - with_aix_soname=$lt_cv_with_aix_soname]) - AC_MSG_RESULT([$with_aix_soname]) - if test aix != "$with_aix_soname"; then - # For the AIX way of multilib, we name the shared archive member - # based on the bitwidth used, traditionally 'shr.o' or 'shr_64.o', - # and 'shr.imp' or 'shr_64.imp', respectively, for the Import File. - # Even when GNU compilers ignore OBJECT_MODE but need '-maix64' flag, - # the AIX toolchain works better with OBJECT_MODE set (default 32). - if test 64 = "${OBJECT_MODE-32}"; then - shared_archive_member_spec=shr_64 - else - shared_archive_member_spec=shr - fi - fi - ;; -*) - with_aix_soname=aix - ;; -esac - -_LT_DECL([], [shared_archive_member_spec], [0], - [Shared archive member basename, for filename based shared library versioning on AIX])dnl -])# _LT_WITH_AIX_SONAME - -LT_OPTION_DEFINE([LT_INIT], [aix-soname=aix], [_LT_WITH_AIX_SONAME([aix])]) -LT_OPTION_DEFINE([LT_INIT], [aix-soname=both], [_LT_WITH_AIX_SONAME([both])]) -LT_OPTION_DEFINE([LT_INIT], [aix-soname=svr4], [_LT_WITH_AIX_SONAME([svr4])]) - - -# _LT_WITH_PIC([MODE]) -# -------------------- -# implement the --with-pic flag, and support the 'pic-only' and 'no-pic' -# LT_INIT options. -# MODE is either 'yes' or 'no'. If omitted, it defaults to 'both'. -m4_define([_LT_WITH_PIC], -[AC_ARG_WITH([pic], - [AS_HELP_STRING([--with-pic@<:@=PKGS@:>@], - [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], - [lt_p=${PACKAGE-default} - case $withval in - yes|no) pic_mode=$withval ;; - *) - pic_mode=default - # Look at the argument we got. We use all the common list separators. - lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, - for lt_pkg in $withval; do - IFS=$lt_save_ifs - if test "X$lt_pkg" = "X$lt_p"; then - pic_mode=yes - fi - done - IFS=$lt_save_ifs - ;; - esac], - [pic_mode=m4_default([$1], [default])]) - -_LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl -])# _LT_WITH_PIC - -LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])]) -LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])]) - -# Old name: -AU_DEFUN([AC_LIBTOOL_PICMODE], -[_LT_SET_OPTION([LT_INIT], [pic-only]) -AC_DIAGNOSE([obsolete], -[$0: Remove this warning and the call to _LT_SET_OPTION when you -put the 'pic-only' option into LT_INIT's first parameter.]) -]) - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_PICMODE], []) - -## ----------------- ## -## LTDL_INIT Options ## -## ----------------- ## - -m4_define([_LTDL_MODE], []) -LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive], - [m4_define([_LTDL_MODE], [nonrecursive])]) -LT_OPTION_DEFINE([LTDL_INIT], [recursive], - [m4_define([_LTDL_MODE], [recursive])]) -LT_OPTION_DEFINE([LTDL_INIT], [subproject], - [m4_define([_LTDL_MODE], [subproject])]) - -m4_define([_LTDL_TYPE], []) -LT_OPTION_DEFINE([LTDL_INIT], [installable], - [m4_define([_LTDL_TYPE], [installable])]) -LT_OPTION_DEFINE([LTDL_INIT], [convenience], - [m4_define([_LTDL_TYPE], [convenience])]) diff --git a/Extended/libwebp/m4/ltsugar.m4 b/Extended/libwebp/m4/ltsugar.m4 deleted file mode 100644 index 48bc934..0000000 --- a/Extended/libwebp/m4/ltsugar.m4 +++ /dev/null @@ -1,124 +0,0 @@ -# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- -# -# Copyright (C) 2004-2005, 2007-2008, 2011-2015 Free Software -# Foundation, Inc. -# Written by Gary V. Vaughan, 2004 -# -# This file is free software; the Free Software Foundation gives -# unlimited permission to copy and/or distribute it, with or without -# modifications, as long as this notice is preserved. - -# serial 6 ltsugar.m4 - -# This is to help aclocal find these macros, as it can't see m4_define. -AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])]) - - -# lt_join(SEP, ARG1, [ARG2...]) -# ----------------------------- -# Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their -# associated separator. -# Needed until we can rely on m4_join from Autoconf 2.62, since all earlier -# versions in m4sugar had bugs. -m4_define([lt_join], -[m4_if([$#], [1], [], - [$#], [2], [[$2]], - [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])]) -m4_define([_lt_join], -[m4_if([$#$2], [2], [], - [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])]) - - -# lt_car(LIST) -# lt_cdr(LIST) -# ------------ -# Manipulate m4 lists. -# These macros are necessary as long as will still need to support -# Autoconf-2.59, which quotes differently. -m4_define([lt_car], [[$1]]) -m4_define([lt_cdr], -[m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])], - [$#], 1, [], - [m4_dquote(m4_shift($@))])]) -m4_define([lt_unquote], $1) - - -# lt_append(MACRO-NAME, STRING, [SEPARATOR]) -# ------------------------------------------ -# Redefine MACRO-NAME to hold its former content plus 'SEPARATOR''STRING'. -# Note that neither SEPARATOR nor STRING are expanded; they are appended -# to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked). -# No SEPARATOR is output if MACRO-NAME was previously undefined (different -# than defined and empty). -# -# This macro is needed until we can rely on Autoconf 2.62, since earlier -# versions of m4sugar mistakenly expanded SEPARATOR but not STRING. -m4_define([lt_append], -[m4_define([$1], - m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])]) - - - -# lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...]) -# ---------------------------------------------------------- -# Produce a SEP delimited list of all paired combinations of elements of -# PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list -# has the form PREFIXmINFIXSUFFIXn. -# Needed until we can rely on m4_combine added in Autoconf 2.62. -m4_define([lt_combine], -[m4_if(m4_eval([$# > 3]), [1], - [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl -[[m4_foreach([_Lt_prefix], [$2], - [m4_foreach([_Lt_suffix], - ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[, - [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])]) - - -# lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ]) -# ----------------------------------------------------------------------- -# Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited -# by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ. -m4_define([lt_if_append_uniq], -[m4_ifdef([$1], - [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1], - [lt_append([$1], [$2], [$3])$4], - [$5])], - [lt_append([$1], [$2], [$3])$4])]) - - -# lt_dict_add(DICT, KEY, VALUE) -# ----------------------------- -m4_define([lt_dict_add], -[m4_define([$1($2)], [$3])]) - - -# lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE) -# -------------------------------------------- -m4_define([lt_dict_add_subkey], -[m4_define([$1($2:$3)], [$4])]) - - -# lt_dict_fetch(DICT, KEY, [SUBKEY]) -# ---------------------------------- -m4_define([lt_dict_fetch], -[m4_ifval([$3], - m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]), - m4_ifdef([$1($2)], [m4_defn([$1($2)])]))]) - - -# lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE]) -# ----------------------------------------------------------------- -m4_define([lt_if_dict_fetch], -[m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4], - [$5], - [$6])]) - - -# lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...]) -# -------------------------------------------------------------- -m4_define([lt_dict_filter], -[m4_if([$5], [], [], - [lt_join(m4_quote(m4_default([$4], [[, ]])), - lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]), - [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl -]) diff --git a/Extended/libwebp/m4/ltversion.m4 b/Extended/libwebp/m4/ltversion.m4 deleted file mode 100644 index fa04b52..0000000 --- a/Extended/libwebp/m4/ltversion.m4 +++ /dev/null @@ -1,23 +0,0 @@ -# ltversion.m4 -- version numbers -*- Autoconf -*- -# -# Copyright (C) 2004, 2011-2015 Free Software Foundation, Inc. -# Written by Scott James Remnant, 2004 -# -# This file is free software; the Free Software Foundation gives -# unlimited permission to copy and/or distribute it, with or without -# modifications, as long as this notice is preserved. - -# @configure_input@ - -# serial 4179 ltversion.m4 -# This file is part of GNU Libtool - -m4_define([LT_PACKAGE_VERSION], [2.4.6]) -m4_define([LT_PACKAGE_REVISION], [2.4.6]) - -AC_DEFUN([LTVERSION_VERSION], -[macro_version='2.4.6' -macro_revision='2.4.6' -_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) -_LT_DECL(, macro_revision, 0) -]) diff --git a/Extended/libwebp/m4/lt~obsolete.m4 b/Extended/libwebp/m4/lt~obsolete.m4 deleted file mode 100644 index c6b26f8..0000000 --- a/Extended/libwebp/m4/lt~obsolete.m4 +++ /dev/null @@ -1,99 +0,0 @@ -# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- -# -# Copyright (C) 2004-2005, 2007, 2009, 2011-2015 Free Software -# Foundation, Inc. -# Written by Scott James Remnant, 2004. -# -# This file is free software; the Free Software Foundation gives -# unlimited permission to copy and/or distribute it, with or without -# modifications, as long as this notice is preserved. - -# serial 5 lt~obsolete.m4 - -# These exist entirely to fool aclocal when bootstrapping libtool. -# -# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN), -# which have later been changed to m4_define as they aren't part of the -# exported API, or moved to Autoconf or Automake where they belong. -# -# The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN -# in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us -# using a macro with the same name in our local m4/libtool.m4 it'll -# pull the old libtool.m4 in (it doesn't see our shiny new m4_define -# and doesn't know about Autoconf macros at all.) -# -# So we provide this file, which has a silly filename so it's always -# included after everything else. This provides aclocal with the -# AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything -# because those macros already exist, or will be overwritten later. -# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. -# -# Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here. -# Yes, that means every name once taken will need to remain here until -# we give up compatibility with versions before 1.7, at which point -# we need to keep only those names which we still refer to. - -# This is to help aclocal find these macros, as it can't see m4_define. -AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])]) - -m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])]) -m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])]) -m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])]) -m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])]) -m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])]) -m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])]) -m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])]) -m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])]) -m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])]) -m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])]) -m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])]) -m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])]) -m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])]) -m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])]) -m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])]) -m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])]) -m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])]) -m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])]) -m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])]) -m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])]) -m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])]) -m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])]) -m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])]) -m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])]) -m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])]) -m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])]) -m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])]) -m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])]) -m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])]) -m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])]) -m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])]) -m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])]) -m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])]) -m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])]) -m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])]) -m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])]) -m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])]) -m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])]) -m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])]) -m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])]) -m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])]) -m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])]) -m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])]) -m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])]) -m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])]) -m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])]) -m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])]) -m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])]) -m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])]) -m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])]) -m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])]) -m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])]) -m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])]) -m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])]) -m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS], [AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])]) -m4_ifndef([_LT_AC_PROG_CXXCPP], [AC_DEFUN([_LT_AC_PROG_CXXCPP])]) -m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS], [AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])]) -m4_ifndef([_LT_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])]) -m4_ifndef([_LT_PROG_F77], [AC_DEFUN([_LT_PROG_F77])]) -m4_ifndef([_LT_PROG_FC], [AC_DEFUN([_LT_PROG_FC])]) -m4_ifndef([_LT_PROG_CXX], [AC_DEFUN([_LT_PROG_CXX])]) diff --git a/Extended/libwebp/makefile.unix b/Extended/libwebp/makefile.unix deleted file mode 100644 index 769c549..0000000 --- a/Extended/libwebp/makefile.unix +++ /dev/null @@ -1,500 +0,0 @@ -# This makefile is a simpler alternative to the autoconf-based build -# system, for simple local building of the libraries and tools. -# It will not install the libraries system-wide, but just create the 'cwebp' -# and 'dwebp' tools in the examples/ directory, along with the static -# libraries 'src/libwebp.a', 'src/libwebpdecoder.a', 'src/mux/libwebpmux.a', -# 'src/demux/libwebpdemux.a' and 'extras/libwebpextras.a'. -# -# To build the library and examples, use: -# make -f makefile.unix -# from this top directory. - -#### Customizable part #### - -# These flags assume you have libpng, libjpeg, libtiff and libgif installed. If -# not, either follow the install instructions below or just comment out the next -# four lines. -EXTRA_FLAGS= -DWEBP_HAVE_PNG -DWEBP_HAVE_JPEG -DWEBP_HAVE_TIFF -DWEBP_LIBS= -lpng -lz -CWEBP_LIBS= $(DWEBP_LIBS) -ljpeg -ltiff -GIF_LIBS = -lgif - -ifeq ($(strip $(shell uname)), Darwin) - # Work around a problem linking tables marked as common symbols, - # cf., src/enc/yuv.[hc] - # Failure observed with: gcc 4.2.1 and 4.0.1. - EXTRA_FLAGS += -fno-common - EXTRA_FLAGS += -DHAVE_GLUT_GLUT_H - EXTRA_FLAGS += -Wno-deprecated-declarations - EXTRA_FLAGS += -I/opt/local/include - EXTRA_LIBS += -L/opt/local/lib - GL_LIBS = -framework GLUT -framework OpenGL -else - EXTRA_FLAGS += -I/usr/local/include - EXTRA_LIBS += -L/usr/local/lib - GL_LIBS = -lglut -lGL -endif - -# SDL flags: use sdl-config if it exists -SDL_CONFIG = $(shell sdl-config --version 2> /dev/null) -ifneq ($(SDL_CONFIG),) - SDL_LIBS = $(shell sdl-config --libs) - SDL_FLAGS = $(shell sdl-config --cflags) -else - # use best-guess - SDL_LIBS = -lSDL - SDL_FLAGS = -endif - -# To install libraries on Mac OS X: -# 1. Install MacPorts (http://www.macports.org/install.php) -# 2. Run "sudo port install jpeg" -# 3. Run "sudo port install libpng" -# 4. Run "sudo port install tiff" -# 5. Run "sudo port install giflib" - -# To install libraries on Linux: -# 1. Run "sudo apt-get install libjpeg62-dev" -# 2. Run "sudo apt-get install libpng12-dev" -# 3. Run "sudo apt-get install libtiff4-dev" -# 4. Run "sudo apt-get install libgif-dev" - -# Uncomment for build for 32bit platform -# Alternatively, you can just use the command -# 'make -f makefile.unix EXTRA_FLAGS=-m32' to that effect. -# EXTRA_FLAGS += -m32 - -# Extra flags to enable byte swap for 16 bit colorspaces. -# EXTRA_FLAGS += -DWEBP_SWAP_16BIT_CSP=1 - -# Extra flags to enable multi-threading -EXTRA_FLAGS += -DWEBP_USE_THREAD -EXTRA_LIBS += -lpthread - -# Control symbol visibility. Comment out if your compiler doesn't support it. -EXTRA_FLAGS += -fvisibility=hidden - -# Extra flags to emulate C89 strictness with the full ANSI -EXTRA_FLAGS += -Wextra -Wold-style-definition -EXTRA_FLAGS += -Wmissing-prototypes -EXTRA_FLAGS += -Wmissing-declarations -EXTRA_FLAGS += -Wdeclaration-after-statement -EXTRA_FLAGS += -Wshadow -EXTRA_FLAGS += -Wformat-security -Wformat-nonliteral -# EXTRA_FLAGS += -Wvla - -# SSE4.1-specific flags: -ifeq ($(HAVE_SSE41), 1) -EXTRA_FLAGS += -DWEBP_HAVE_SSE41 -src/dsp/%_sse41.o: EXTRA_FLAGS += -msse4.1 -endif - -# NEON-specific flags: -# EXTRA_FLAGS += -march=armv7-a -mfloat-abi=hard -mfpu=neon -mtune=cortex-a8 -# -> seems to make the overall lib slower: -fno-split-wide-types - -# MIPS (MSA) 32-bit build specific flags for mips32r5 (p5600): -# EXTRA_FLAGS += -mips32r5 -mabi=32 -mtune=p5600 -mmsa -mfp64 -# EXTRA_FLAGS += -msched-weight -mload-store-pairs - -# MIPS (MSA) 64-bit build specific flags for mips64r6 (i6400): -# EXTRA_FLAGS += -mips64r6 -mabi=64 -mtune=i6400 -mmsa -mfp64 -# EXTRA_FLAGS += -msched-weight -mload-store-pairs - -#### Nothing should normally be changed below this line #### - -AR = ar -ARFLAGS = r -CPPFLAGS = -I. -Isrc/ -Wall -ifeq ($(DEBUG), 1) - CFLAGS = -g -else - CFLAGS = -O3 -DNDEBUG -endif -CFLAGS += $(EXTRA_FLAGS) -CC = gcc -INSTALL = install -GROFF = /usr/bin/groff -COL = /usr/bin/col -LDFLAGS = $(EXTRA_LIBS) $(EXTRA_FLAGS) -lm - -ifdef BITTRACE -CFLAGS += -DBITTRACE=$(BITTRACE) -endif - -ANIM_UTIL_OBJS = \ - examples/anim_util.o \ - -DEC_OBJS = \ - src/dec/alpha_dec.o \ - src/dec/buffer_dec.o \ - src/dec/frame_dec.o \ - src/dec/idec_dec.o \ - src/dec/io_dec.o \ - src/dec/quant_dec.o \ - src/dec/tree_dec.o \ - src/dec/vp8_dec.o \ - src/dec/vp8l_dec.o \ - src/dec/webp_dec.o \ - -DEMUX_OBJS = \ - src/demux/anim_decode.o \ - src/demux/demux.o \ - -DSP_DEC_OBJS = \ - src/dsp/alpha_processing.o \ - src/dsp/alpha_processing_mips_dsp_r2.o \ - src/dsp/alpha_processing_neon.o \ - src/dsp/alpha_processing_sse2.o \ - src/dsp/alpha_processing_sse41.o \ - src/dsp/cpu.o \ - src/dsp/dec.o \ - src/dsp/dec_clip_tables.o \ - src/dsp/dec_mips32.o \ - src/dsp/dec_mips_dsp_r2.o \ - src/dsp/dec_msa.o \ - src/dsp/dec_neon.o \ - src/dsp/dec_sse2.o \ - src/dsp/dec_sse41.o \ - src/dsp/filters.o \ - src/dsp/filters_mips_dsp_r2.o \ - src/dsp/filters_msa.o \ - src/dsp/filters_neon.o \ - src/dsp/filters_sse2.o \ - src/dsp/lossless.o \ - src/dsp/lossless_mips_dsp_r2.o \ - src/dsp/lossless_msa.o \ - src/dsp/lossless_neon.o \ - src/dsp/lossless_sse2.o \ - src/dsp/rescaler.o \ - src/dsp/rescaler_mips32.o \ - src/dsp/rescaler_mips_dsp_r2.o \ - src/dsp/rescaler_msa.o \ - src/dsp/rescaler_neon.o \ - src/dsp/rescaler_sse2.o \ - src/dsp/upsampling.o \ - src/dsp/upsampling_mips_dsp_r2.o \ - src/dsp/upsampling_msa.o \ - src/dsp/upsampling_neon.o \ - src/dsp/upsampling_sse2.o \ - src/dsp/upsampling_sse41.o \ - src/dsp/yuv.o \ - src/dsp/yuv_mips32.o \ - src/dsp/yuv_mips_dsp_r2.o \ - src/dsp/yuv_neon.o \ - src/dsp/yuv_sse2.o \ - src/dsp/yuv_sse41.o \ - -DSP_ENC_OBJS = \ - src/dsp/cost.o \ - src/dsp/cost_mips32.o \ - src/dsp/cost_mips_dsp_r2.o \ - src/dsp/cost_neon.o \ - src/dsp/cost_sse2.o \ - src/dsp/enc.o \ - src/dsp/enc_mips32.o \ - src/dsp/enc_mips_dsp_r2.o \ - src/dsp/enc_msa.o \ - src/dsp/enc_neon.o \ - src/dsp/enc_sse2.o \ - src/dsp/enc_sse41.o \ - src/dsp/lossless_enc.o \ - src/dsp/lossless_enc_mips32.o \ - src/dsp/lossless_enc_mips_dsp_r2.o \ - src/dsp/lossless_enc_msa.o \ - src/dsp/lossless_enc_neon.o \ - src/dsp/lossless_enc_sse2.o \ - src/dsp/lossless_enc_sse41.o \ - src/dsp/ssim.o \ - src/dsp/ssim_sse2.o \ - -ENC_OBJS = \ - src/enc/alpha_enc.o \ - src/enc/analysis_enc.o \ - src/enc/backward_references_cost_enc.o \ - src/enc/backward_references_enc.o \ - src/enc/config_enc.o \ - src/enc/cost_enc.o \ - src/enc/filter_enc.o \ - src/enc/frame_enc.o \ - src/enc/histogram_enc.o \ - src/enc/iterator_enc.o \ - src/enc/near_lossless_enc.o \ - src/enc/picture_enc.o \ - src/enc/picture_csp_enc.o \ - src/enc/picture_psnr_enc.o \ - src/enc/picture_rescale_enc.o \ - src/enc/picture_tools_enc.o \ - src/enc/predictor_enc.o \ - src/enc/quant_enc.o \ - src/enc/syntax_enc.o \ - src/enc/token_enc.o \ - src/enc/tree_enc.o \ - src/enc/vp8l_enc.o \ - src/enc/webp_enc.o \ - -EX_FORMAT_DEC_OBJS = \ - imageio/image_dec.o \ - imageio/jpegdec.o \ - imageio/metadata.o \ - imageio/pngdec.o \ - imageio/pnmdec.o \ - imageio/tiffdec.o \ - imageio/webpdec.o \ - -EX_FORMAT_ENC_OBJS = \ - imageio/image_enc.o \ - -EX_UTIL_OBJS = \ - examples/example_util.o \ - -GIFDEC_OBJS = \ - examples/gifdec.o \ - -IMAGE_UTIL_OBJS = \ - imageio/imageio_util.o \ - -MUX_OBJS = \ - src/mux/anim_encode.o \ - src/mux/muxedit.o \ - src/mux/muxinternal.o \ - src/mux/muxread.o \ - -UTILS_DEC_OBJS = \ - src/utils/bit_reader_utils.o \ - src/utils/color_cache_utils.o \ - src/utils/filters_utils.o \ - src/utils/huffman_utils.o \ - src/utils/quant_levels_dec_utils.o \ - src/utils/random_utils.o \ - src/utils/rescaler_utils.o \ - src/utils/thread_utils.o \ - src/utils/utils.o \ - -UTILS_ENC_OBJS = \ - src/utils/bit_writer_utils.o \ - src/utils/huffman_encode_utils.o \ - src/utils/quant_levels_utils.o \ - -EXTRA_OBJS = \ - extras/extras.o \ - extras/quality_estimate.o \ - -LIBWEBPDECODER_OBJS = $(DEC_OBJS) $(DSP_DEC_OBJS) $(UTILS_DEC_OBJS) -LIBWEBP_OBJS = $(LIBWEBPDECODER_OBJS) $(ENC_OBJS) $(DSP_ENC_OBJS) \ - $(UTILS_ENC_OBJS) -LIBWEBPMUX_OBJS = $(MUX_OBJS) -LIBWEBPDEMUX_OBJS = $(DEMUX_OBJS) -LIBWEBPEXTRA_OBJS = $(EXTRA_OBJS) - -HDRS_INSTALLED = \ - src/webp/decode.h \ - src/webp/demux.h \ - src/webp/encode.h \ - src/webp/mux.h \ - src/webp/mux_types.h \ - src/webp/types.h \ - -HDRS = \ - src/dec/alphai_dec.h \ - src/dec/common_dec.h \ - src/dec/vp8_dec.h \ - src/dec/vp8i_dec.h \ - src/dec/vp8li_dec.h \ - src/dec/webpi_dec.h \ - src/dsp/common_sse2.h \ - src/dsp/dsp.h \ - src/dsp/lossless.h \ - src/dsp/lossless_common.h \ - src/dsp/mips_macro.h \ - src/dsp/msa_macro.h \ - src/dsp/neon.h \ - src/dsp/yuv.h \ - src/enc/backward_references_enc.h \ - src/enc/cost_enc.h \ - src/enc/histogram_enc.h \ - src/enc/vp8i_enc.h \ - src/enc/vp8li_enc.h \ - src/mux/animi.h \ - src/mux/muxi.h \ - src/utils/bit_reader_utils.h \ - src/utils/bit_reader_inl_utils.h \ - src/utils/bit_writer_utils.h \ - src/utils/color_cache_utils.h \ - src/utils/endian_inl_utils.h \ - src/utils/filters_utils.h \ - src/utils/huffman_utils.h \ - src/utils/huffman_encode_utils.h \ - src/utils/quant_levels_utils.h \ - src/utils/quant_levels_dec_utils.h \ - src/utils/random_utils.h \ - src/utils/rescaler_utils.h \ - src/utils/thread_utils.h \ - src/utils/utils.h \ - src/webp/format_constants.h \ - $(HDRS_INSTALLED) \ - -OUT_LIBS = examples/libexample_util.a -OUT_LIBS += imageio/libimageio_util.a -OUT_LIBS += imageio/libimagedec.a -OUT_LIBS += imageio/libimageenc.a -OUT_LIBS += src/libwebpdecoder.a -OUT_LIBS += src/libwebp.a -EXTRA_LIB = extras/libwebpextras.a -OUT_EXAMPLES = examples/cwebp examples/dwebp -EXTRA_EXAMPLES = examples/gif2webp examples/vwebp examples/webpmux \ - examples/anim_diff examples/anim_dump \ - examples/img2webp examples/webpinfo -OTHER_EXAMPLES = extras/get_disto extras/webp_quality extras/vwebp_sdl - -OUTPUT = $(OUT_LIBS) $(OUT_EXAMPLES) -ifeq ($(MAKECMDGOALS),clean) - OUTPUT += $(EXTRA_EXAMPLES) $(OTHER_EXAMPLES) - OUTPUT += src/demux/libwebpdemux.a src/mux/libwebpmux.a $(EXTRA_LIB) - OUTPUT += examples/libgifdec.a examples/libanim_util.a -endif - -ex: $(OUT_EXAMPLES) -all: ex $(EXTRA_EXAMPLES) $(OTHER_EXAMPLES) -extras: $(EXTRA_LIB) - -$(EX_FORMAT_DEC_OBJS): %.o: %.h - -# special dependencies: -# tree_dec.c/vp8_dec.c/bit_reader_utils.c <-> -# bit_reader_inl_utils.h, endian_inl_utils.h -# bit_writer_utils.c <-> endian_inl_utils.h -src/dec/tree_dec.o: src/utils/bit_reader_inl_utils.h -src/dec/tree_dec.o: src/utils/endian_inl_utils.h -src/dec/vp8_dec.o: src/utils/bit_reader_inl_utils.h src/utils/endian_inl_utils.h -src/utils/bit_reader_utils.o: src/utils/bit_reader_inl_utils.h -src/utils/bit_reader_utils.o: src/utils/endian_inl_utils.h -src/utils/bit_writer_utils.o: src/utils/endian_inl_utils.h - -%.o: %.c $(HDRS) - $(CC) $(CPPFLAGS) $(CFLAGS) -c $< -o $@ - -examples/libanim_util.a: $(ANIM_UTIL_OBJS) -examples/libexample_util.a: $(EX_UTIL_OBJS) -examples/libgifdec.a: $(GIFDEC_OBJS) -extras/libwebpextras.a: $(LIBWEBPEXTRA_OBJS) -imageio/libimagedec.a: $(EX_FORMAT_DEC_OBJS) -imageio/libimageenc.a: $(EX_FORMAT_ENC_OBJS) -imageio/libimageio_util.a: $(IMAGE_UTIL_OBJS) -src/libwebpdecoder.a: $(LIBWEBPDECODER_OBJS) -src/libwebp.a: $(LIBWEBP_OBJS) -src/mux/libwebpmux.a: $(LIBWEBPMUX_OBJS) -src/demux/libwebpdemux.a: $(LIBWEBPDEMUX_OBJS) - -%.a: - $(AR) $(ARFLAGS) $@ $^ - -examples/anim_diff: examples/anim_diff.o $(ANIM_UTIL_OBJS) $(GIFDEC_OBJS) -examples/anim_dump: examples/anim_dump.o $(ANIM_UTIL_OBJS) $(GIFDEC_OBJS) -examples/cwebp: examples/cwebp.o -examples/dwebp: examples/dwebp.o -examples/gif2webp: examples/gif2webp.o $(GIFDEC_OBJS) -examples/vwebp: examples/vwebp.o -examples/webpmux: examples/webpmux.o -examples/img2webp: examples/img2webp.o -examples/webpinfo: examples/webpinfo.o - -examples/anim_diff: examples/libanim_util.a examples/libgifdec.a -examples/anim_diff: src/demux/libwebpdemux.a examples/libexample_util.a -examples/anim_diff: imageio/libimageio_util.a src/libwebp.a -examples/anim_diff: override EXTRA_LIBS += $(GIF_LIBS) -examples/anim_diff: EXTRA_FLAGS += -DWEBP_HAVE_GIF -examples/anim_dump: examples/libanim_util.a examples/libgifdec.a -examples/anim_dump: src/demux/libwebpdemux.a -examples/anim_dump: examples/libexample_util.a -examples/anim_dump: imageio/libimageio_util.a -examples/anim_dump: imageio/libimageenc.a -examples/anim_dump: src/libwebp.a -examples/anim_dump: override EXTRA_LIBS += $(GIF_LIBS) $(DWEBP_LIBS) -examples/cwebp: examples/libexample_util.a -examples/cwebp: imageio/libimagedec.a -examples/cwebp: src/demux/libwebpdemux.a -examples/cwebp: imageio/libimageio_util.a -examples/cwebp: src/libwebp.a -examples/cwebp: override EXTRA_LIBS += $(CWEBP_LIBS) -examples/dwebp: examples/libexample_util.a -examples/dwebp: imageio/libimagedec.a -examples/dwebp: src/demux/libwebpdemux.a -examples/dwebp: imageio/libimageenc.a -examples/dwebp: imageio/libimageio_util.a -examples/dwebp: src/libwebp.a -examples/dwebp: override EXTRA_LIBS += $(DWEBP_LIBS) -examples/gif2webp: examples/libexample_util.a imageio/libimageio_util.a -examples/gif2webp: examples/libgifdec.a src/mux/libwebpmux.a src/libwebp.a -examples/gif2webp: override EXTRA_LIBS += $(GIF_LIBS) -examples/gif2webp: EXTRA_FLAGS += -DWEBP_HAVE_GIF -examples/vwebp: examples/libexample_util.a src/demux/libwebpdemux.a -examples/vwebp: imageio/libimageio_util.a src/libwebp.a -examples/vwebp: override EXTRA_LIBS += $(GL_LIBS) -examples/vwebp: EXTRA_FLAGS += -DWEBP_HAVE_GL -examples/webpmux: examples/libexample_util.a imageio/libimageio_util.a -examples/webpmux: src/mux/libwebpmux.a src/libwebpdecoder.a -examples/img2webp: examples/libexample_util.a imageio/libimageio_util.a -examples/img2webp: imageio/libimagedec.a -examples/img2webp: src/demux/libwebpdemux.a -examples/img2webp: src/mux/libwebpmux.a src/libwebp.a -examples/img2webp: override EXTRA_LIBS += $(CWEBP_LIBS) -examples/webpinfo: examples/libexample_util.a imageio/libimageio_util.a -examples/webpinfo: src/libwebpdecoder.a - -extras/get_disto: extras/get_disto.o -extras/get_disto: imageio/libimagedec.a -extras/get_disto: src/demux/libwebpdemux.a -extras/get_disto: imageio/libimageio_util.a -extras/get_disto: src/libwebp.a -extras/get_disto: override EXTRA_LIBS += $(CWEBP_LIBS) - -extras/webp_quality: extras/webp_quality.o -extras/webp_quality: imageio/libimageio_util.a -extras/webp_quality: $(EXTRA_LIB) src/libwebp.a - -extras/vwebp_sdl: extras/vwebp_sdl.o -extras/vwebp_sdl: extras/webp_to_sdl.o -extras/vwebp_sdl: imageio/libimageio_util.a -extras/vwebp_sdl: src/libwebp.a -extras/vwebp_sdl: EXTRA_FLAGS += -DWEBP_HAVE_SDL $(SDL_FLAGS) -extras/vwebp_sdl: override EXTRA_LIBS += $(SDL_LIBS) - -$(OUT_EXAMPLES) $(EXTRA_EXAMPLES) $(OTHER_EXAMPLES): - $(CC) -o $@ $^ $(LDFLAGS) - -dist: DESTDIR := dist -dist: OUT_EXAMPLES += $(EXTRA_EXAMPLES) -dist: all - $(INSTALL) -m755 -d $(DESTDIR)/include/webp \ - $(DESTDIR)/bin $(DESTDIR)/doc $(DESTDIR)/lib - $(INSTALL) -m755 -s $(OUT_EXAMPLES) $(DESTDIR)/bin - $(INSTALL) -m644 $(HDRS_INSTALLED) $(DESTDIR)/include/webp - $(INSTALL) -m644 src/libwebp.a $(DESTDIR)/lib - $(INSTALL) -m644 src/demux/libwebpdemux.a $(DESTDIR)/lib - $(INSTALL) -m644 src/mux/libwebpmux.a $(DESTDIR)/lib - umask 022; \ - for m in man/[cdv]webp.1 man/gif2webp.1 man/webpmux.1 \ - man/img2webp.1 man/webpinfo.1; do \ - basenam=$$(basename $$m .1); \ - $(GROFF) -t -e -man -T ascii $$m \ - | $(COL) -bx >$(DESTDIR)/doc/$${basenam}.txt; \ - $(GROFF) -t -e -man -T html $$m \ - | $(COL) -bx >$(DESTDIR)/doc/$${basenam}.html; \ - done - -clean: - $(RM) $(OUTPUT) *~ \ - examples/*.o examples/*~ \ - extras/*.o extras/*~ \ - imageio/*.o imageio/*~ \ - src/dec/*.o src/dec/*~ \ - src/demux/*.o src/demux/*~ \ - src/dsp/*.o src/dsp/*~ \ - src/enc/*.o src/enc/*~ \ - src/mux/*.o src/mux/*~ \ - src/utils/*.o src/utils/*~ \ - src/webp/*~ man/*~ doc/*~ swig/*~ \ - -.PHONY: all clean dist ex -.SUFFIXES: diff --git a/Extended/libwebp/man/Makefile b/Extended/libwebp/man/Makefile deleted file mode 100644 index a21f26c..0000000 --- a/Extended/libwebp/man/Makefile +++ /dev/null @@ -1,551 +0,0 @@ -# Makefile.in generated by automake 1.16.1 from Makefile.am. -# man/Makefile. Generated from Makefile.in by configure. - -# Copyright (C) 1994-2018 Free Software Foundation, Inc. - -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - - - -am__is_gnu_make = { \ - if test -z '$(MAKELEVEL)'; then \ - false; \ - elif test -n '$(MAKE_HOST)'; then \ - true; \ - elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ - true; \ - else \ - false; \ - fi; \ -} -am__make_running_with_option = \ - case $${target_option-} in \ - ?) ;; \ - *) echo "am__make_running_with_option: internal error: invalid" \ - "target option '$${target_option-}' specified" >&2; \ - exit 1;; \ - esac; \ - has_opt=no; \ - sane_makeflags=$$MAKEFLAGS; \ - if $(am__is_gnu_make); then \ - sane_makeflags=$$MFLAGS; \ - else \ - case $$MAKEFLAGS in \ - *\\[\ \ ]*) \ - bs=\\; \ - sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ - | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ - esac; \ - fi; \ - skip_next=no; \ - strip_trailopt () \ - { \ - flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ - }; \ - for flg in $$sane_makeflags; do \ - test $$skip_next = yes && { skip_next=no; continue; }; \ - case $$flg in \ - *=*|--*) continue;; \ - -*I) strip_trailopt 'I'; skip_next=yes;; \ - -*I?*) strip_trailopt 'I';; \ - -*O) strip_trailopt 'O'; skip_next=yes;; \ - -*O?*) strip_trailopt 'O';; \ - -*l) strip_trailopt 'l'; skip_next=yes;; \ - -*l?*) strip_trailopt 'l';; \ - -[dEDm]) skip_next=yes;; \ - -[JT]) skip_next=yes;; \ - esac; \ - case $$flg in \ - *$$target_option*) has_opt=yes; break;; \ - esac; \ - done; \ - test $$has_opt = yes -am__make_dryrun = (target_option=n; $(am__make_running_with_option)) -am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) -pkgdatadir = $(datadir)/libwebp -pkgincludedir = $(includedir)/libwebp -pkglibdir = $(libdir)/libwebp -pkglibexecdir = $(libexecdir)/libwebp -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = x86_64-apple-darwin19.6.0 -host_triplet = x86_64-apple-darwin19.6.0 -#am__append_1 = webpmux.1 -#am__append_2 = gif2webp.1 -#am__append_3 = img2webp.1 -#am__append_4 = vwebp.1 -#am__append_5 = webpinfo.1 -subdir = man -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pthread.m4 \ - $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ - $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ - $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = $(top_builddir)/src/webp/config.h -CONFIG_CLEAN_FILES = -CONFIG_CLEAN_VPATH_FILES = -AM_V_P = $(am__v_P_$(V)) -am__v_P_ = $(am__v_P_$(AM_DEFAULT_VERBOSITY)) -am__v_P_0 = false -am__v_P_1 = : -AM_V_GEN = $(am__v_GEN_$(V)) -am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) -am__v_GEN_0 = @echo " GEN " $@; -am__v_GEN_1 = -AM_V_at = $(am__v_at_$(V)) -am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) -am__v_at_0 = @ -am__v_at_1 = -SOURCES = -DIST_SOURCES = -am__can_run_installinfo = \ - case $$AM_UPDATE_INFO_DIR in \ - n|no|NO) false;; \ - *) (install-info --version) >/dev/null 2>&1;; \ - esac -am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; -am__vpath_adj = case $$p in \ - $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ - *) f=$$p;; \ - esac; -am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; -am__install_max = 40 -am__nobase_strip_setup = \ - srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` -am__nobase_strip = \ - for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" -am__nobase_list = $(am__nobase_strip_setup); \ - for p in $$list; do echo "$$p $$p"; done | \ - sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ - $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ - if (++n[$$2] == $(am__install_max)) \ - { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ - END { for (dir in files) print dir, files[dir] }' -am__base_list = \ - sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ - sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' -am__uninstall_files_from_dir = { \ - test -z "$$files" \ - || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ - || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ - $(am__cd) "$$dir" && rm -f $$files; }; \ - } -man1dir = $(mandir)/man1 -am__installdirs = "$(DESTDIR)$(man1dir)" -NROFF = nroff -MANS = $(man_MANS) -am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) -am__DIST_COMMON = $(srcdir)/Makefile.in -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = ${SHELL} /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp/missing aclocal-1.16 -AMTAR = $${TAR-tar} -AM_CFLAGS = -fvisibility=hidden -Wall -Wconstant-conversion -Wdeclaration-after-statement -Wextra -Wfloat-conversion -Wformat -Wformat-nonliteral -Wformat -Wformat-security -Wmissing-declarations -Wmissing-prototypes -Wold-style-definition -Wparentheses-equality -Wshadow -Wshorten-64-to-32 -Wundef -Wunreachable-code -Wunused -Wvla -Wno-deprecated-declarations -AM_CPPFLAGS = -DNDEBUG -AM_DEFAULT_VERBOSITY = 0 -AR = ar -AUTOCONF = ${SHELL} /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp/missing autoconf -AUTOHEADER = ${SHELL} /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp/missing autoheader -AUTOMAKE = ${SHELL} /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp/missing automake-1.16 -AWK = awk -CC = gcc -CCDEPMODE = depmode=gcc3 -CFLAGS = -g -O2 -D_THREAD_SAFE -pthread -CPP = gcc -E -CPPFLAGS = -CYGPATH_W = echo -DEFS = -DHAVE_CONFIG_H -DEPDIR = .deps -DLLTOOL = false -DSYMUTIL = dsymutil -DUMPBIN = -ECHO_C = \c -ECHO_N = -ECHO_T = -EGREP = /usr/bin/grep -E -EXEEXT = -FGREP = /usr/bin/grep -F -GIF_INCLUDES = -GIF_LIBS = -lgif -GL_INCLUDES = -GL_LIBS = -framework GLUT -framework OpenGL -GREP = /usr/bin/grep -INSTALL = /opt/twitter_mde/homebrew_minimal/mde_bin/ginstall -c -INSTALL_DATA = ${INSTALL} -m 644 -INSTALL_PROGRAM = ${INSTALL} -INSTALL_SCRIPT = ${INSTALL} -INSTALL_STRIP_PROGRAM = $(install_sh) -c -s -JPEG_INCLUDES = -DWEBP_HAVE_JPEG -JPEG_LIBS = -ljpeg -LD = /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld -LDFLAGS = -LIBOBJS = -LIBPNG_CONFIG = /opt/twitter_mde/bin/libpng-config -LIBS = -LIBSDL_CONFIG = -LIBTOOL = $(SHELL) $(top_builddir)/libtool -LIPO = lipo -LN_S = ln -s -LTLIBOBJS = -LT_SYS_LIBRARY_PATH = -MAKEINFO = ${SHELL} /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp/missing makeinfo -MANIFEST_TOOL = : -MKDIR_P = /opt/twitter_mde/homebrew_minimal/mde_bin/gmkdir -p -NEON_FLAGS = -NM = /usr/bin/nm -B -NMEDIT = nmedit -OBJDUMP = objdump -OBJEXT = o -OTOOL = otool -OTOOL64 = : -PACKAGE = libwebp -PACKAGE_BUGREPORT = https://bugs.chromium.org/p/webp -PACKAGE_NAME = libwebp -PACKAGE_STRING = libwebp 1.1.0 -PACKAGE_TARNAME = libwebp -PACKAGE_URL = http://developers.google.com/speed/webp -PACKAGE_VERSION = 1.1.0 -PATH_SEPARATOR = : -PNG_INCLUDES = -I/opt/twitter_mde/package/twitter_dev_homebrew/current/Cellar/libpng/1.6.34/include/libpng16 -DWEBP_HAVE_PNG -PNG_LIBS = -L/opt/twitter_mde/package/twitter_dev_homebrew/current/Cellar/libpng/1.6.34/lib -lpng16 -PTHREAD_CC = gcc -PTHREAD_CFLAGS = -D_THREAD_SAFE -pthread -PTHREAD_LIBS = -RANLIB = ranlib -SDL_INCLUDES = -SDL_LIBS = -SED = /usr/bin/sed -SET_MAKE = -SHELL = /bin/sh -SSE2_FLAGS = -msse2 -SSE41_FLAGS = -msse4.1 -STRIP = strip -TIFF_INCLUDES = -DWEBP_HAVE_TIFF -TIFF_LIBS = -ltiff -USE_SWAP_16BIT_CSP = -VERSION = 1.1.0 -abs_builddir = /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp/man -abs_srcdir = /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp/man -abs_top_builddir = /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp -abs_top_srcdir = /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp -ac_ct_AR = ar -ac_ct_CC = gcc -ac_ct_DUMPBIN = -am__include = include -am__leading_dot = . -am__quote = -am__tar = $${TAR-tar} chof - "$$tardir" -am__untar = $${TAR-tar} xf - -ax_pthread_config = -bindir = ${exec_prefix}/bin -build = x86_64-apple-darwin19.6.0 -build_alias = -build_cpu = x86_64 -build_os = darwin19.6.0 -build_vendor = apple -builddir = . -datadir = ${datarootdir} -datarootdir = ${prefix}/share -docdir = ${datarootdir}/doc/${PACKAGE_TARNAME} -dvidir = ${docdir} -exec_prefix = ${prefix} -host = x86_64-apple-darwin19.6.0 -host_alias = -host_cpu = x86_64 -host_os = darwin19.6.0 -host_vendor = apple -htmldir = ${docdir} -includedir = ${prefix}/include -infodir = ${datarootdir}/info -install_sh = ${SHELL} /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp/install-sh -libdir = ${exec_prefix}/lib -libexecdir = ${exec_prefix}/libexec -localedir = ${datarootdir}/locale -localstatedir = ${prefix}/var -mandir = ${datarootdir}/man -mkdir_p = $(MKDIR_P) -oldincludedir = /usr/include -pdfdir = ${docdir} -pkgconfigdir = ${libdir}/pkgconfig -prefix = /usr/local -program_transform_name = s,x,x, -psdir = ${docdir} -runstatedir = ${localstatedir}/run -sbindir = ${exec_prefix}/sbin -sharedstatedir = ${prefix}/com -srcdir = . -sysconfdir = ${prefix}/etc -target_alias = -top_build_prefix = ../ -top_builddir = .. -top_srcdir = .. -man_MANS = cwebp.1 dwebp.1 $(am__append_1) $(am__append_2) \ - $(am__append_3) $(am__append_4) $(am__append_5) -EXTRA_DIST = $(man_MANS) -all: all-am - -.SUFFIXES: -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ - && { if test -f $@; then exit 0; else break; fi; }; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign man/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --foreign man/Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(am__aclocal_m4_deps): - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs -install-man1: $(man_MANS) - @$(NORMAL_INSTALL) - @list1=''; \ - list2='$(man_MANS)'; \ - test -n "$(man1dir)" \ - && test -n "`echo $$list1$$list2`" \ - || exit 0; \ - echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \ - $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \ - { for i in $$list1; do echo "$$i"; done; \ - if test -n "$$list2"; then \ - for i in $$list2; do echo "$$i"; done \ - | sed -n '/\.1[a-z]*$$/p'; \ - fi; \ - } | while read p; do \ - if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ - echo "$$d$$p"; echo "$$p"; \ - done | \ - sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ - -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ - sed 'N;N;s,\n, ,g' | { \ - list=; while read file base inst; do \ - if test "$$base" = "$$inst"; then list="$$list $$file"; else \ - echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ - $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ - fi; \ - done; \ - for i in $$list; do echo "$$i"; done | $(am__base_list) | \ - while read files; do \ - test -z "$$files" || { \ - echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ - $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ - done; } - -uninstall-man1: - @$(NORMAL_UNINSTALL) - @list=''; test -n "$(man1dir)" || exit 0; \ - files=`{ for i in $$list; do echo "$$i"; done; \ - l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ - sed -n '/\.1[a-z]*$$/p'; \ - } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ - -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ - dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir) -tags TAGS: - -ctags CTAGS: - -cscope cscopelist: - - -distdir: $(BUILT_SOURCES) - $(MAKE) $(AM_MAKEFLAGS) distdir-am - -distdir-am: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - list='$(DISTFILES)'; \ - dist_files=`for file in $$list; do echo $$file; done | \ - sed -e "s|^$$srcdirstrip/||;t" \ - -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ - case $$dist_files in \ - */*) $(MKDIR_P) `echo "$$dist_files" | \ - sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ - sort -u` ;; \ - esac; \ - for file in $$dist_files; do \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - if test -d $$d/$$file; then \ - dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test -d "$(distdir)/$$file"; then \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ - else \ - test -f "$(distdir)/$$file" \ - || cp -p $$d/$$file "$(distdir)/$$file" \ - || exit 1; \ - fi; \ - done -check-am: all-am -check: check-am -all-am: Makefile $(MANS) -installdirs: - for dir in "$(DESTDIR)$(man1dir)"; do \ - test -z "$$dir" || $(MKDIR_P) "$$dir"; \ - done -install: install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-am -install-strip: - if test -z '$(STRIP)'; then \ - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - install; \ - else \ - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ - fi -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-am - -clean-am: clean-generic clean-libtool mostlyclean-am - -distclean: distclean-am - -rm -f Makefile -distclean-am: clean-am distclean-generic - -dvi: dvi-am - -dvi-am: - -html: html-am - -html-am: - -info: info-am - -info-am: - -install-data-am: install-man - -install-dvi: install-dvi-am - -install-dvi-am: - -install-exec-am: - -install-html: install-html-am - -install-html-am: - -install-info: install-info-am - -install-info-am: - -install-man: install-man1 - -install-pdf: install-pdf-am - -install-pdf-am: - -install-ps: install-ps-am - -install-ps-am: - -installcheck-am: - -maintainer-clean: maintainer-clean-am - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-generic mostlyclean-libtool - -pdf: pdf-am - -pdf-am: - -ps: ps-am - -ps-am: - -uninstall-am: uninstall-man - -uninstall-man: uninstall-man1 - -.MAKE: install-am install-strip - -.PHONY: all all-am check check-am clean clean-generic clean-libtool \ - cscopelist-am ctags-am distclean distclean-generic \ - distclean-libtool distdir dvi dvi-am html html-am info info-am \ - install install-am install-data install-data-am install-dvi \ - install-dvi-am install-exec install-exec-am install-html \ - install-html-am install-info install-info-am install-man \ - install-man1 install-pdf install-pdf-am install-ps \ - install-ps-am install-strip installcheck installcheck-am \ - installdirs maintainer-clean maintainer-clean-generic \ - mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ - ps ps-am tags-am uninstall uninstall-am uninstall-man \ - uninstall-man1 - -.PRECIOUS: Makefile - - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/Extended/libwebp/man/Makefile.am b/Extended/libwebp/man/Makefile.am deleted file mode 100644 index 57e2483..0000000 --- a/Extended/libwebp/man/Makefile.am +++ /dev/null @@ -1,17 +0,0 @@ -man_MANS = cwebp.1 dwebp.1 -if BUILD_MUX - man_MANS += webpmux.1 -endif -if BUILD_GIF2WEBP - man_MANS += gif2webp.1 -endif -if BUILD_IMG2WEBP - man_MANS += img2webp.1 -endif -if BUILD_VWEBP - man_MANS += vwebp.1 -endif -if BUILD_WEBPINFO - man_MANS += webpinfo.1 -endif -EXTRA_DIST = $(man_MANS) diff --git a/Extended/libwebp/man/Makefile.in b/Extended/libwebp/man/Makefile.in deleted file mode 100644 index 2ba17e0..0000000 --- a/Extended/libwebp/man/Makefile.in +++ /dev/null @@ -1,551 +0,0 @@ -# Makefile.in generated by automake 1.16.1 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994-2018 Free Software Foundation, Inc. - -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -@SET_MAKE@ -VPATH = @srcdir@ -am__is_gnu_make = { \ - if test -z '$(MAKELEVEL)'; then \ - false; \ - elif test -n '$(MAKE_HOST)'; then \ - true; \ - elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ - true; \ - else \ - false; \ - fi; \ -} -am__make_running_with_option = \ - case $${target_option-} in \ - ?) ;; \ - *) echo "am__make_running_with_option: internal error: invalid" \ - "target option '$${target_option-}' specified" >&2; \ - exit 1;; \ - esac; \ - has_opt=no; \ - sane_makeflags=$$MAKEFLAGS; \ - if $(am__is_gnu_make); then \ - sane_makeflags=$$MFLAGS; \ - else \ - case $$MAKEFLAGS in \ - *\\[\ \ ]*) \ - bs=\\; \ - sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ - | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ - esac; \ - fi; \ - skip_next=no; \ - strip_trailopt () \ - { \ - flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ - }; \ - for flg in $$sane_makeflags; do \ - test $$skip_next = yes && { skip_next=no; continue; }; \ - case $$flg in \ - *=*|--*) continue;; \ - -*I) strip_trailopt 'I'; skip_next=yes;; \ - -*I?*) strip_trailopt 'I';; \ - -*O) strip_trailopt 'O'; skip_next=yes;; \ - -*O?*) strip_trailopt 'O';; \ - -*l) strip_trailopt 'l'; skip_next=yes;; \ - -*l?*) strip_trailopt 'l';; \ - -[dEDm]) skip_next=yes;; \ - -[JT]) skip_next=yes;; \ - esac; \ - case $$flg in \ - *$$target_option*) has_opt=yes; break;; \ - esac; \ - done; \ - test $$has_opt = yes -am__make_dryrun = (target_option=n; $(am__make_running_with_option)) -am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) -pkgdatadir = $(datadir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkglibexecdir = $(libexecdir)/@PACKAGE@ -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = @build@ -host_triplet = @host@ -@BUILD_MUX_TRUE@am__append_1 = webpmux.1 -@BUILD_GIF2WEBP_TRUE@am__append_2 = gif2webp.1 -@BUILD_IMG2WEBP_TRUE@am__append_3 = img2webp.1 -@BUILD_VWEBP_TRUE@am__append_4 = vwebp.1 -@BUILD_WEBPINFO_TRUE@am__append_5 = webpinfo.1 -subdir = man -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pthread.m4 \ - $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ - $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ - $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = $(top_builddir)/src/webp/config.h -CONFIG_CLEAN_FILES = -CONFIG_CLEAN_VPATH_FILES = -AM_V_P = $(am__v_P_@AM_V@) -am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) -am__v_P_0 = false -am__v_P_1 = : -AM_V_GEN = $(am__v_GEN_@AM_V@) -am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) -am__v_GEN_0 = @echo " GEN " $@; -am__v_GEN_1 = -AM_V_at = $(am__v_at_@AM_V@) -am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) -am__v_at_0 = @ -am__v_at_1 = -SOURCES = -DIST_SOURCES = -am__can_run_installinfo = \ - case $$AM_UPDATE_INFO_DIR in \ - n|no|NO) false;; \ - *) (install-info --version) >/dev/null 2>&1;; \ - esac -am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; -am__vpath_adj = case $$p in \ - $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ - *) f=$$p;; \ - esac; -am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; -am__install_max = 40 -am__nobase_strip_setup = \ - srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` -am__nobase_strip = \ - for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" -am__nobase_list = $(am__nobase_strip_setup); \ - for p in $$list; do echo "$$p $$p"; done | \ - sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ - $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ - if (++n[$$2] == $(am__install_max)) \ - { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ - END { for (dir in files) print dir, files[dir] }' -am__base_list = \ - sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ - sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' -am__uninstall_files_from_dir = { \ - test -z "$$files" \ - || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ - || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ - $(am__cd) "$$dir" && rm -f $$files; }; \ - } -man1dir = $(mandir)/man1 -am__installdirs = "$(DESTDIR)$(man1dir)" -NROFF = nroff -MANS = $(man_MANS) -am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) -am__DIST_COMMON = $(srcdir)/Makefile.in -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = @ACLOCAL@ -AMTAR = @AMTAR@ -AM_CFLAGS = @AM_CFLAGS@ -AM_CPPFLAGS = @AM_CPPFLAGS@ -AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ -AR = @AR@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -CC = @CC@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -DLLTOOL = @DLLTOOL@ -DSYMUTIL = @DSYMUTIL@ -DUMPBIN = @DUMPBIN@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -FGREP = @FGREP@ -GIF_INCLUDES = @GIF_INCLUDES@ -GIF_LIBS = @GIF_LIBS@ -GL_INCLUDES = @GL_INCLUDES@ -GL_LIBS = @GL_LIBS@ -GREP = @GREP@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -JPEG_INCLUDES = @JPEG_INCLUDES@ -JPEG_LIBS = @JPEG_LIBS@ -LD = @LD@ -LDFLAGS = @LDFLAGS@ -LIBOBJS = @LIBOBJS@ -LIBPNG_CONFIG = @LIBPNG_CONFIG@ -LIBS = @LIBS@ -LIBSDL_CONFIG = @LIBSDL_CONFIG@ -LIBTOOL = @LIBTOOL@ -LIPO = @LIPO@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ -MAKEINFO = @MAKEINFO@ -MANIFEST_TOOL = @MANIFEST_TOOL@ -MKDIR_P = @MKDIR_P@ -NEON_FLAGS = @NEON_FLAGS@ -NM = @NM@ -NMEDIT = @NMEDIT@ -OBJDUMP = @OBJDUMP@ -OBJEXT = @OBJEXT@ -OTOOL = @OTOOL@ -OTOOL64 = @OTOOL64@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_URL = @PACKAGE_URL@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -PNG_INCLUDES = @PNG_INCLUDES@ -PNG_LIBS = @PNG_LIBS@ -PTHREAD_CC = @PTHREAD_CC@ -PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ -PTHREAD_LIBS = @PTHREAD_LIBS@ -RANLIB = @RANLIB@ -SDL_INCLUDES = @SDL_INCLUDES@ -SDL_LIBS = @SDL_LIBS@ -SED = @SED@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -SSE2_FLAGS = @SSE2_FLAGS@ -SSE41_FLAGS = @SSE41_FLAGS@ -STRIP = @STRIP@ -TIFF_INCLUDES = @TIFF_INCLUDES@ -TIFF_LIBS = @TIFF_LIBS@ -USE_SWAP_16BIT_CSP = @USE_SWAP_16BIT_CSP@ -VERSION = @VERSION@ -abs_builddir = @abs_builddir@ -abs_srcdir = @abs_srcdir@ -abs_top_builddir = @abs_top_builddir@ -abs_top_srcdir = @abs_top_srcdir@ -ac_ct_AR = @ac_ct_AR@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ -am__include = @am__include@ -am__leading_dot = @am__leading_dot@ -am__quote = @am__quote@ -am__tar = @am__tar@ -am__untar = @am__untar@ -ax_pthread_config = @ax_pthread_config@ -bindir = @bindir@ -build = @build@ -build_alias = @build_alias@ -build_cpu = @build_cpu@ -build_os = @build_os@ -build_vendor = @build_vendor@ -builddir = @builddir@ -datadir = @datadir@ -datarootdir = @datarootdir@ -docdir = @docdir@ -dvidir = @dvidir@ -exec_prefix = @exec_prefix@ -host = @host@ -host_alias = @host_alias@ -host_cpu = @host_cpu@ -host_os = @host_os@ -host_vendor = @host_vendor@ -htmldir = @htmldir@ -includedir = @includedir@ -infodir = @infodir@ -install_sh = @install_sh@ -libdir = @libdir@ -libexecdir = @libexecdir@ -localedir = @localedir@ -localstatedir = @localstatedir@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -oldincludedir = @oldincludedir@ -pdfdir = @pdfdir@ -pkgconfigdir = @pkgconfigdir@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -psdir = @psdir@ -runstatedir = @runstatedir@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -srcdir = @srcdir@ -sysconfdir = @sysconfdir@ -target_alias = @target_alias@ -top_build_prefix = @top_build_prefix@ -top_builddir = @top_builddir@ -top_srcdir = @top_srcdir@ -man_MANS = cwebp.1 dwebp.1 $(am__append_1) $(am__append_2) \ - $(am__append_3) $(am__append_4) $(am__append_5) -EXTRA_DIST = $(man_MANS) -all: all-am - -.SUFFIXES: -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ - && { if test -f $@; then exit 0; else break; fi; }; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign man/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --foreign man/Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(am__aclocal_m4_deps): - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs -install-man1: $(man_MANS) - @$(NORMAL_INSTALL) - @list1=''; \ - list2='$(man_MANS)'; \ - test -n "$(man1dir)" \ - && test -n "`echo $$list1$$list2`" \ - || exit 0; \ - echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \ - $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \ - { for i in $$list1; do echo "$$i"; done; \ - if test -n "$$list2"; then \ - for i in $$list2; do echo "$$i"; done \ - | sed -n '/\.1[a-z]*$$/p'; \ - fi; \ - } | while read p; do \ - if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ - echo "$$d$$p"; echo "$$p"; \ - done | \ - sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ - -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ - sed 'N;N;s,\n, ,g' | { \ - list=; while read file base inst; do \ - if test "$$base" = "$$inst"; then list="$$list $$file"; else \ - echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ - $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ - fi; \ - done; \ - for i in $$list; do echo "$$i"; done | $(am__base_list) | \ - while read files; do \ - test -z "$$files" || { \ - echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ - $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ - done; } - -uninstall-man1: - @$(NORMAL_UNINSTALL) - @list=''; test -n "$(man1dir)" || exit 0; \ - files=`{ for i in $$list; do echo "$$i"; done; \ - l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ - sed -n '/\.1[a-z]*$$/p'; \ - } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ - -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ - dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir) -tags TAGS: - -ctags CTAGS: - -cscope cscopelist: - - -distdir: $(BUILT_SOURCES) - $(MAKE) $(AM_MAKEFLAGS) distdir-am - -distdir-am: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - list='$(DISTFILES)'; \ - dist_files=`for file in $$list; do echo $$file; done | \ - sed -e "s|^$$srcdirstrip/||;t" \ - -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ - case $$dist_files in \ - */*) $(MKDIR_P) `echo "$$dist_files" | \ - sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ - sort -u` ;; \ - esac; \ - for file in $$dist_files; do \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - if test -d $$d/$$file; then \ - dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test -d "$(distdir)/$$file"; then \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ - else \ - test -f "$(distdir)/$$file" \ - || cp -p $$d/$$file "$(distdir)/$$file" \ - || exit 1; \ - fi; \ - done -check-am: all-am -check: check-am -all-am: Makefile $(MANS) -installdirs: - for dir in "$(DESTDIR)$(man1dir)"; do \ - test -z "$$dir" || $(MKDIR_P) "$$dir"; \ - done -install: install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-am -install-strip: - if test -z '$(STRIP)'; then \ - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - install; \ - else \ - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ - fi -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-am - -clean-am: clean-generic clean-libtool mostlyclean-am - -distclean: distclean-am - -rm -f Makefile -distclean-am: clean-am distclean-generic - -dvi: dvi-am - -dvi-am: - -html: html-am - -html-am: - -info: info-am - -info-am: - -install-data-am: install-man - -install-dvi: install-dvi-am - -install-dvi-am: - -install-exec-am: - -install-html: install-html-am - -install-html-am: - -install-info: install-info-am - -install-info-am: - -install-man: install-man1 - -install-pdf: install-pdf-am - -install-pdf-am: - -install-ps: install-ps-am - -install-ps-am: - -installcheck-am: - -maintainer-clean: maintainer-clean-am - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-generic mostlyclean-libtool - -pdf: pdf-am - -pdf-am: - -ps: ps-am - -ps-am: - -uninstall-am: uninstall-man - -uninstall-man: uninstall-man1 - -.MAKE: install-am install-strip - -.PHONY: all all-am check check-am clean clean-generic clean-libtool \ - cscopelist-am ctags-am distclean distclean-generic \ - distclean-libtool distdir dvi dvi-am html html-am info info-am \ - install install-am install-data install-data-am install-dvi \ - install-dvi-am install-exec install-exec-am install-html \ - install-html-am install-info install-info-am install-man \ - install-man1 install-pdf install-pdf-am install-ps \ - install-ps-am install-strip installcheck installcheck-am \ - installdirs maintainer-clean maintainer-clean-generic \ - mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ - ps ps-am tags-am uninstall uninstall-am uninstall-man \ - uninstall-man1 - -.PRECIOUS: Makefile - - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/Extended/libwebp/man/cwebp.1 b/Extended/libwebp/man/cwebp.1 deleted file mode 100644 index 58a0323..0000000 --- a/Extended/libwebp/man/cwebp.1 +++ /dev/null @@ -1,318 +0,0 @@ -.\" Hey, EMACS: -*- nroff -*- -.TH CWEBP 1 "January 11, 2019" -.SH NAME -cwebp \- compress an image file to a WebP file -.SH SYNOPSIS -.B cwebp -.RI [ options ] " input_file \-o output_file.webp -.br -.SH DESCRIPTION -This manual page documents the -.B cwebp -command. -.PP -\fBcwebp\fP compresses an image using the WebP format. -Input format can be either PNG, JPEG, TIFF, WebP or raw Y'CbCr samples. -.SH OPTIONS -The basic options are: -.TP -.BI \-o " string -Specify the name of the output WebP file. If omitted, \fBcwebp\fP will -perform compression but only report statistics. -Using "\-" as output name will direct output to 'stdout'. -.TP -.BI \-\- " string -Explicitly specify the input file. This option is useful if the input -file starts with a '\-' for instance. This option must appear \fBlast\fP. -Any other options afterward will be ignored. -.TP -.B \-h, \-help -A short usage summary. -.TP -.B \-H, \-longhelp -A summary of all the possible options. -.TP -.B \-version -Print the version number (as major.minor.revision) and exit. -.TP -.B \-lossless -Encode the image without any loss. For images with fully transparent area, -the invisible pixel values (R/G/B or Y/U/V) will be preserved only if the -\-exact option is used. -.TP -.BI \-near_lossless " int -Specify the level of near\-lossless image preprocessing. This option adjusts -pixel values to help compressibility, but has minimal impact on the visual -quality. It triggers lossless compression mode automatically. The range is 0 -(maximum preprocessing) to 100 (no preprocessing, the default). The typical -value is around 60. Note that lossy with \fB\-q 100\fP can at times yield -better results. -.TP -.BI \-q " float -Specify the compression factor for RGB channels between 0 and 100. The default -is 75. -.br -In case of lossy compression (default), a small factor produces a smaller file -with lower quality. Best quality is achieved by using a value of 100. -.br -In case of lossless compression (specified by the \fB\-lossless\fP option), a -small factor enables faster compression speed, but produces a larger file. -Maximum compression is achieved by using a value of 100. -.TP -.BI \-z " int -Switch on \fBlossless\fP compression mode with the specified level between 0 -and 9, with level 0 being the fastest, 9 being the slowest. Fast mode -produces larger file size than slower ones. A good default is \fB\-z 6\fP. -This option is actually a shortcut for some predefined settings for quality -and method. If options \fB\-q\fP or \fB\-m\fP are subsequently used, they will -invalidate the effect of this option. -.TP -.BI \-alpha_q " int -Specify the compression factor for alpha compression between 0 and 100. -Lossless compression of alpha is achieved using a value of 100, while the lower -values result in a lossy compression. The default is 100. -.TP -.BI \-preset " string -Specify a set of pre\-defined parameters to suit a particular type of -source material. Possible values are: \fBdefault\fP, \fBphoto\fP, -\fBpicture\fP, \fBdrawing\fP, \fBicon\fP, \fBtext\fP. Since -\fB\-preset\fP overwrites the other parameters' values (except the -\fB\-q\fP one), this option should preferably appear first in the -order of the arguments. -.TP -.BI \-m " int -Specify the compression method to use. This parameter controls the -trade off between encoding speed and the compressed file size and quality. -Possible values range from 0 to 6. Default value is 4. -When higher values are used, the encoder will spend more time inspecting -additional encoding possibilities and decide on the quality gain. -Lower value can result in faster processing time at the expense of -larger file size and lower compression quality. -.TP -.BI \-resize " width height -Resize the source to a rectangle with size \fBwidth\fP x \fBheight\fP. -If either (but not both) of the \fBwidth\fP or \fBheight\fP parameters is 0, -the value will be calculated preserving the aspect\-ratio. -.TP -.BI \-crop " x_position y_position width height -Crop the source to a rectangle with top\-left corner at coordinates -(\fBx_position\fP, \fBy_position\fP) and size \fBwidth\fP x \fBheight\fP. -This cropping area must be fully contained within the source rectangle. -.TP -.B \-mt -Use multi\-threading for encoding, if possible. -.TP -.B \-low_memory -Reduce memory usage of lossy encoding by saving four times the compressed -size (typically). This will make the encoding slower and the output slightly -different in size and distortion. This flag is only effective for methods -3 and up, and is off by default. Note that leaving this flag off will have -some side effects on the bitstream: it forces certain bitstream features -like number of partitions (forced to 1). Note that a more detailed report -of bitstream size is printed by \fBcwebp\fP when using this option. - -.SS LOSSY OPTIONS -These options are only effective when doing lossy encoding (the default, with -or without alpha). - -.TP -.BI \-size " int -Specify a target size (in bytes) to try and reach for the compressed output. -The compressor will make several passes of partial encoding in order to get as -close as possible to this target. If both \fB\-size\fP and \fB\-psnr\fP -are used, \fB\-size\fP value will prevail. -.TP -.BI \-psnr " float -Specify a target PSNR (in dB) to try and reach for the compressed output. -The compressor will make several passes of partial encoding in order to get as -close as possible to this target. If both \fB\-size\fP and \fB\-psnr\fP -are used, \fB\-size\fP value will prevail. -.TP -.BI \-pass " int -Set a maximum number of passes to use during the dichotomy used by -options \fB\-size\fP or \fB\-psnr\fP. Maximum value is 10, default is 1. -If options \fB\-size\fP or \fB\-psnr\fP were used, but \fB\-pass\fP wasn't -specified, a default value of '6' passes will be used. -.TP -.B \-af -Turns auto\-filter on. This algorithm will spend additional time optimizing -the filtering strength to reach a well\-balanced quality. -.TP -.B \-jpeg_like -Change the internal parameter mapping to better match the expected size -of JPEG compression. This flag will generally produce an output file of -similar size to its JPEG equivalent (for the same \fB\-q\fP setting), but -with less visual distortion. - -.TP -Advanced options: - -.TP -.BI \-f " int -Specify the strength of the deblocking filter, between 0 (no filtering) -and 100 (maximum filtering). A value of 0 will turn off any filtering. -Higher value will increase the strength of the filtering process applied -after decoding the picture. The higher the value the smoother the picture will -appear. Typical values are usually in the range of 20 to 50. -.TP -.BI \-sharpness " int -Specify the sharpness of the filtering (if used). -Range is 0 (sharpest) to 7 (least sharp). Default is 0. -.TP -.B \-strong -Use strong filtering (if filtering is being used thanks to the -\fB\-f\fP option). Strong filtering is on by default. -.TP -.B \-nostrong -Disable strong filtering (if filtering is being used thanks to the -\fB\-f\fP option) and use simple filtering instead. -.TP -.B \-sharp_yuv -Use more accurate and sharper RGB->YUV conversion if needed. Note that this -process is slower than the default 'fast' RGB->YUV conversion. -.TP -.BI \-sns " int -Specify the amplitude of the spatial noise shaping. Spatial noise shaping -(or \fBsns\fP for short) refers to a general collection of built\-in algorithms -used to decide which area of the picture should use relatively less bits, -and where else to better transfer these bits. The possible range goes from -0 (algorithm is off) to 100 (the maximal effect). The default value is 50. -.TP -.BI \-segments " int -Change the number of partitions to use during the segmentation of the -sns algorithm. Segments should be in range 1 to 4. Default value is 4. -This option has no effect for methods 3 and up, unless \fB\-low_memory\fP -is used. -.TP -.BI \-partition_limit " int -Degrade quality by limiting the number of bits used by some macroblocks. -Range is 0 (no degradation, the default) to 100 (full degradation). -Useful values are usually around 30\-70 for moderately large images. -In the VP8 format, the so\-called control partition has a limit of 512k and -is used to store the following information: whether the macroblock is skipped, -which segment it belongs to, whether it is coded as intra 4x4 or intra 16x16 -mode, and finally the prediction modes to use for each of the sub\-blocks. -For a very large image, 512k only leaves room to few bits per 16x16 macroblock. -The absolute minimum is 4 bits per macroblock. Skip, segment, and mode -information can use up almost all these 4 bits (although the case is unlikely), -which is problematic for very large images. The partition_limit factor controls -how frequently the most bit\-costly mode (intra 4x4) will be used. This is -useful in case the 512k limit is reached and the following message is displayed: -\fIError code: 6 (PARTITION0_OVERFLOW: Partition #0 is too big to fit 512k)\fP. -If using \fB\-partition_limit\fP is not enough to meet the 512k constraint, one -should use less segments in order to save more header bits per macroblock. -See the \fB\-segments\fP option. - -.SS LOGGING OPTIONS -These options control the level of output: -.TP -.B \-v -Print extra information (encoding time in particular). -.TP -.B \-print_psnr -Compute and report average PSNR (Peak\-Signal\-To\-Noise ratio). -.TP -.B \-print_ssim -Compute and report average SSIM (structural similarity -metric, see http://en.wikipedia.org/wiki/SSIM for additional details). -.TP -.B \-print_lsim -Compute and report local similarity metric (sum of lowest error amongst the -collocated pixel neighbors). -.TP -.B \-progress -Report encoding progress in percent. -.TP -.B \-quiet -Do not print anything. -.TP -.B \-short -Only print brief information (output file size and PSNR) for testing purposes. -.TP -.BI \-map " int -Output additional ASCII\-map of encoding information. Possible map values -range from 1 to 6. This is only meant to help debugging. - -.SS ADDITIONAL OPTIONS -More advanced options are: -.TP -.BI \-s " width height -Specify that the input file actually consists of raw Y'CbCr samples following -the ITU\-R BT.601 recommendation, in 4:2:0 linear format. -The luma plane has size \fBwidth\fP x \fBheight\fP. -.TP -.BI \-pre " int -Specify some preprocessing steps. Using a value of '2' will trigger -quality\-dependent pseudo\-random dithering during RGBA\->YUVA conversion -(lossy compression only). -.TP -.BI \-alpha_filter " string -Specify the predictive filtering method for the alpha plane. One of 'none', -\&'fast' or 'best', in increasing complexity and slowness order. Default is -\&'fast'. Internally, alpha filtering is performed using four possible -predictions (none, horizontal, vertical, gradient). The 'best' mode will try -each mode in turn and pick the one which gives the smaller size. The 'fast' -mode will just try to form an a priori guess without testing all modes. -.TP -.BI \-alpha_method " int -Specify the algorithm used for alpha compression: 0 or 1. Algorithm 0 denotes -no compression, 1 uses WebP lossless format for compression. The default is 1. -.TP -.B \-exact -Preserve RGB values in transparent area. The default is off, to help -compressibility. -.TP -.BI \-blend_alpha " int -This option blends the alpha channel (if present) with the source using the -background color specified in hexadecimal as 0xrrggbb. The alpha channel is -afterward reset to the opaque value 255. -.TP -.B \-noalpha -Using this option will discard the alpha channel. -.TP -.BI \-hint " string -Specify the hint about input image type. Possible values are: -\fBphoto\fP, \fBpicture\fP or \fBgraph\fP. -.TP -.BI \-metadata " string -A comma separated list of metadata to copy from the input to the output if -present. -Valid values: \fBall\fP, \fBnone\fP, \fBexif\fP, \fBicc\fP, \fBxmp\fP. -The default is \fBnone\fP. - -Note: each input format may not support all combinations. -.TP -.B \-noasm -Disable all assembly optimizations. - -.SH BUGS -Please report all bugs to the issue tracker: -https://bugs.chromium.org/p/webp -.br -Patches welcome! See this page to get started: -http://www.webmproject.org/code/contribute/submitting\-patches/ - -.SH EXAMPLES -cwebp \-q 50 -lossless picture.png \-o picture_lossless.webp -.br -cwebp \-q 70 picture_with_alpha.png \-o picture_with_alpha.webp -.br -cwebp \-sns 70 \-f 50 \-size 60000 picture.png \-o picture.webp -.br -cwebp \-o picture.webp \-\- \-\-\-picture.png - -.SH AUTHORS -\fBcwebp\fP is a part of libwebp and was written by the WebP team. -.br -The latest source tree is available at -https://chromium.googlesource.com/webm/libwebp -.PP -This manual page was written by Pascal Massimino , -for the Debian project (and may be used by others). - -.SH SEE ALSO -.BR dwebp (1), -.BR gif2webp (1) -.br -Please refer to http://developers.google.com/speed/webp/ for additional -information. diff --git a/Extended/libwebp/man/dwebp.1 b/Extended/libwebp/man/dwebp.1 deleted file mode 100644 index d4b60ed..0000000 --- a/Extended/libwebp/man/dwebp.1 +++ /dev/null @@ -1,149 +0,0 @@ -.\" Hey, EMACS: -*- nroff -*- -.TH DWEBP 1 "June 23, 2016" -.SH NAME -dwebp \- decompress a WebP file to an image file -.SH SYNOPSIS -.B dwebp -.RI [ options ] " input_file.webp -.br -.SH DESCRIPTION -This manual page documents the -.B dwebp -command. -.PP -\fBdwebp\fP decompresses WebP files into PNG, PAM, PPM or PGM images. -.SH OPTIONS -The basic options are: -.TP -.B \-h -Print usage summary. -.TP -.B \-version -Print the version number (as major.minor.revision) and exit. -.TP -.BI \-o " string -Specify the name of the output file (as PNG format by default). -Using "-" as output name will direct output to 'stdout'. -.TP -.BI \-\- " string -Explicitly specify the input file. This option is useful if the input -file starts with an '\-' for instance. This option must appear \fBlast\fP. -Any other options afterward will be ignored. If the input file is "\-", -the data will be read from \fIstdin\fP instead of a file. -.TP -.B \-bmp -Change the output format to uncompressed BMP. -.TP -.B \-tiff -Change the output format to uncompressed TIFF. -.TP -.B \-pam -Change the output format to PAM (retains alpha). -.TP -.B \-ppm -Change the output format to PPM (discards alpha). -.TP -.B \-pgm -Change the output format to PGM. The output consists of luma/chroma -samples instead of RGB, using the IMC4 layout. This option is mainly -for verification and debugging purposes. -.TP -.B \-yuv -Change the output format to raw YUV. The output consists of -luma/chroma-U/chroma-V samples instead of RGB, saved sequentially as -individual planes. This option is mainly for verification and debugging -purposes. -.TP -.B \-nofancy -Don't use the fancy upscaler for YUV420. This may lead to jaggy -edges (especially the red ones), but should be faster. -.TP -.B \-nofilter -Don't use the in-loop filtering process even if it is required by -the bitstream. This may produce visible blocks on the non-compliant output, -but it will make the decoding faster. -.TP -.BI \-dither " strength -Specify a dithering \fBstrength\fP between 0 and 100. Dithering is a -post-processing effect applied to chroma components in lossy compression. -It helps by smoothing gradients and avoiding banding artifacts. -.TP -.BI \-alpha_dither -If the compressed file contains a transparency plane that was quantized -during compression, this flag will allow dithering the reconstructed plane -in order to generate smoother transparency gradients. -.TP -.B \-nodither -Disable all dithering (default). -.TP -.B \-mt -Use multi-threading for decoding, if possible. -.TP -.BI \-crop " x_position y_position width height -Crop the decoded picture to a rectangle with top-left corner at coordinates -(\fBx_position\fP, \fBy_position\fP) and size \fBwidth\fP x \fBheight\fP. -This cropping area must be fully contained within the source rectangle. -The top-left corner will be snapped to even coordinates if needed. -This option is meant to reduce the memory needed for cropping large images. -Note: the cropping is applied \fIbefore\fP any scaling. -.TP -.B \-flip -Flip decoded image vertically (can be useful for OpenGL textures for instance). -.TP -\fB\-resize\fR, \fB\-scale\fI width height\fR -Rescale the decoded picture to dimension \fBwidth\fP x \fBheight\fP. This -option is mostly intended to reducing the memory needed to decode large images, -when only a small version is needed (thumbnail, preview, etc.). Note: scaling -is applied \fIafter\fP cropping. -If either (but not both) of the \fBwidth\fP or \fBheight\fP parameters is 0, -the value will be calculated preserving the aspect-ratio. -.TP -.B \-quiet -Do not print anything. -.TP -.B \-v -Print extra information (decoding time in particular). -.TP -.B \-noasm -Disable all assembly optimizations. - -.SH BUGS -Please report all bugs to the issue tracker: -https://bugs.chromium.org/p/webp -.br -Patches welcome! See this page to get started: -http://www.webmproject.org/code/contribute/submitting-patches/ - -.SH EXAMPLES -dwebp picture.webp \-o output.png -.br -dwebp picture.webp \-ppm \-o output.ppm -.br -dwebp \-o output.ppm \-\- \-\-\-picture.webp -.br -cat picture.webp | dwebp \-o \- \-\- \- > output.ppm - -.SH AUTHORS -\fBdwebp\fP is a part of libwebp and was written by the WebP team. -.br -The latest source tree is available at -https://chromium.googlesource.com/webm/libwebp -.PP -This manual page was written by Pascal Massimino , -for the Debian project (and may be used by others). - -.SH SEE ALSO -.BR cwebp (1), -.BR gif2webp (1), -.BR webpmux (1) -.br -Please refer to http://developers.google.com/speed/webp/ for additional -information. -.SS Output file format details -PAM: http://netpbm.sourceforge.net/doc/pam.html -.br -PGM: http://netpbm.sourceforge.net/doc/pgm.html -.br -PPM: http://netpbm.sourceforge.net/doc/ppm.html -.br -PNG: http://www.libpng.org/pub/png/png-sitemap.html#info diff --git a/Extended/libwebp/man/gif2webp.1 b/Extended/libwebp/man/gif2webp.1 deleted file mode 100644 index a94f2ee..0000000 --- a/Extended/libwebp/man/gif2webp.1 +++ /dev/null @@ -1,164 +0,0 @@ -.\" Hey, EMACS: -*- nroff -*- -.TH GIF2WEBP 1 "January 25, 2018" -.SH NAME -gif2webp \- Convert a GIF image to WebP -.SH SYNOPSIS -.B gif2webp -.RI [ options ] " input_file.gif \-o output_file.webp -.br -.SH DESCRIPTION -This manual page documents the -.B gif2webp -command. -.PP -\fBgif2webp\fP converts a GIF image to a WebP image. -.SH OPTIONS -The basic options are: -.TP -.BI \-o " string -Specify the name of the output WebP file. If omitted, \fBgif2webp\fP will -perform conversion but only report statistics. -Using "\-" as output name will direct output to 'stdout'. -.TP -.BI \-\- " string -Explicitly specify the input file. This option is useful if the input -file starts with an '\-' for instance. This option must appear \fBlast\fP. -Any other options afterward will be ignored. If the input file is "\-", -the data will be read from \fIstdin\fP instead of a file. -.TP -.B \-h, \-help -Usage information. -.TP -.B \-version -Print the version number (as major.minor.revision) and exit. -.TP -.B \-lossy -Encode the image using lossy compression. -.TP -.B \-mixed -Mixed compression mode: optimize compression of the image by picking either -lossy or lossless compression for each frame heuristically. -.TP -.BI \-q " float -Specify the compression factor for RGB channels between 0 and 100. The default -is 75. -.br -In case of lossless compression (default), a small factor enables faster -compression speed, but produces a larger file. Maximum compression is achieved -by using a value of 100. -.br -In case of lossy compression (specified by the \-lossy option), a small factor -produces a smaller file with lower quality. Best quality is achieved by using a -value of 100. -.TP -.BI \-m " int -Specify the compression method to use. This parameter controls the -trade off between encoding speed and the compressed file size and quality. -Possible values range from 0 to 6. Default value is 4. -When higher values are used, the encoder will spend more time inspecting -additional encoding possibilities and decide on the quality gain. -Lower value can result is faster processing time at the expense of -larger file size and lower compression quality. -.TP -.BI \-min_size -Encode image to achieve smallest size. This disables key frame insertion and -picks the dispose method resulting in smallest output for each frame. It uses -lossless compression by default, but can be combined with \-q, \-m, \-lossy or -\-mixed options. -.TP -.BI \-kmin " int -.TP -.BI \-kmax " int -Specify the minimum and maximum distance between consecutive key frames -(independently decodable frames) in the output animation. The tool will insert -some key frames into the output animation as needed so that this criteria is -satisfied. -.br -A 'kmax' value of 0 will turn off insertion of key frames. A 'kmax' value of 1 -will result in all frames being key frames. 'kmin' value is not taken into -account in both these special cases. -Typical values are in the range 3 to 30. Default values are kmin = 9, -kmax = 17 for lossless compression and kmin = 3, kmax = 5 for lossy compression. -.br -These two options are relevant only for animated images with large number of -frames (>50). -.br -When lower values are used, more frames will be converted to key frames. This -may lead to smaller number of frames required to decode a frame on average, -thereby improving the decoding performance. But this may lead to slightly bigger -file sizes. -Higher values may lead to worse decoding performance, but smaller file sizes. -.br -Some restrictions: -.br -(i) kmin < kmax, -.br -(ii) kmin >= kmax / 2 + 1 and -.br -(iii) kmax - kmin <= 30. -.br -If any of these restrictions are not met, they will be enforced automatically. -.TP -.BI \-metadata " string -A comma separated list of metadata to copy from the input to the output if -present. -Valid values: \fBall\fP, \fBnone\fP, \fBicc\fP, \fBxmp\fP. -The default is \fBxmp\fP. -.TP -.BI \-f " int -For lossy encoding only (specified by the \-lossy option). Specify the strength -of the deblocking filter, between 0 (no filtering) and 100 (maximum filtering). -A value of 0 will turn off any filtering. Higher value will increase the -strength of the filtering process applied after decoding the picture. The higher -the value the smoother the picture will appear. Typical values are usually in -the range of 20 to 50. -.TP -.B \-mt -Use multi-threading for encoding, if possible. -.TP -.B \-loop_compatibility -If enabled, handle the loop information in a compatible fashion for Chrome -version prior to M62 (inclusive) and Firefox. -.TP -.B \-v -Print extra information. -.TP -.B \-quiet -Do not print anything. - -.SH BUGS -Please report all bugs to the issue tracker: -https://bugs.chromium.org/p/webp -.br -Patches welcome! See this page to get started: -http://www.webmproject.org/code/contribute/submitting-patches/ - -.SH EXAMPLES -gif2webp picture.gif \-o picture.webp -.br -gif2webp \-q 70 picture.gif \-o picture.webp -.br -gif2webp \-lossy \-m 3 picture.gif \-o picture_lossy.webp -.br -gif2webp \-lossy \-f 50 picture.gif \-o picture.webp -.br -gif2webp \-q 70 \-o picture.webp \-\- \-\-\-picture.gif -.br -cat picture.gif | gif2webp \-o \- \-\- \- > output.webp - -.SH AUTHORS -\fBgif2webp\fP is a part of libwebp and was written by the WebP team. -.br -The latest source tree is available at -https://chromium.googlesource.com/webm/libwebp -.PP -This manual page was written by Urvang Joshi , for the -Debian project (and may be used by others). - -.SH SEE ALSO -.BR cwebp (1), -.BR dwebp (1), -.BR webpmux (1) -.br -Please refer to http://developers.google.com/speed/webp/ for additional -information. diff --git a/Extended/libwebp/man/img2webp.1 b/Extended/libwebp/man/img2webp.1 deleted file mode 100644 index da1d91d..0000000 --- a/Extended/libwebp/man/img2webp.1 +++ /dev/null @@ -1,105 +0,0 @@ -.\" Hey, EMACS: -*- nroff -*- -.TH IMG2WEBP 1 "April 3, 2018" -.SH NAME -img2webp \- create animated WebP file from a sequence of input images. -.SH SYNOPSIS -.B img2webp -[file_level_options] [files] [per_frame_options...] -.br -.B img2webp argument_file_name -.br -.SH DESCRIPTION -This manual page documents the -.B img2webp -command. -.PP -\fBimg2webp\fP compresses a sequence of images using the animated WebP format. -Input images can either be PNG, JPEG, TIFF or WebP. -If a single file name (not starting with the character '\-') is supplied as -the argument, the command line argument are actually tokenized from this file. -This allows for easy scripting or using large number of arguments. -.SH FILE-LEVEL OPTIONS -The file-level options are applied at the beginning of the compression process, -before the input frames are read. -.TP -.BI \-o " string -Specify the name of the output WebP file. -.TP -.BI \-min_size -Encode images to achieve smallest size. This disables key frame insertion and -picks the parameters resulting in smallest output for each frame. It uses -lossless compression by default, but can be combined with \-q, \-m, \-lossy or -\-mixed options. -.TP -.BI \-kmin " int -.TP -.BI \-kmax " int -Specify the minimum and maximum distance between consecutive key frames -(independently decodable frames) in the output animation. The tool will insert -some key frames into the output animation as needed so that this criteria is -satisfied. -.br -.B \-mixed -Mixed compression mode: optimize compression of the image by picking either -lossy or lossless compression for each frame heuristically. This global -option disables the local option \fB-lossy\fP and \fB-lossless\fP . -.TP -.BI \-loop " int -Specifies the number of times the animation should loop. Using '0' -means 'loop indefinitely'. -.TP -.BI \-v -Be more verbose. -.TP -.B \-h, \-help -A short usage summary. -.TP -.B \-version -Print the version numbers of the relevant libraries used. - -.SH PER-FRAME OPTIONS -The per-frame options are applied for the images following as arguments in the -command line. They can be modified any number of times preceding each particular -input image. -.TP -.BI \-d " int -Specify the image duration in milliseconds. -.TP -.B \-lossless, \-lossy -Compress the next image(s) using lossless or lossy compression mode. The -default mode is lossless. -.TP -.BI \-q " float -Specify the compression factor between 0 and 100. The default is 75. -.TP -.BI \-m " int -Specify the compression method to use. This parameter controls the -trade off between encoding speed and the compressed file size and quality. -Possible values range from 0 to 6. Default value is 4. - -.SH EXAMPLE -img2webp -loop 2 in0.png -lossy in1.jpg -d 80 in2.tiff -o out.webp -.br - -.SH BUGS -Please report all bugs to the issue tracker: -https://bugs.chromium.org/p/webp -.br -Patches welcome! See this page to get started: -http://www.webmproject.org/code/contribute/submitting\-patches/ - -.SH AUTHORS -\fBimg2webp\fP is a part of libwebp and was written by the WebP team. -.br -The latest source tree is available at -https://chromium.googlesource.com/webm/libwebp -.PP -This manual page was written by Pascal Massimino , -for the Debian project (and may be used by others). - -.SH SEE ALSO -.BR webpmux (1), -.BR gif2webp (1) -.br -Please refer to http://developers.google.com/speed/webp/ for additional -information. diff --git a/Extended/libwebp/man/vwebp.1 b/Extended/libwebp/man/vwebp.1 deleted file mode 100644 index 1da2d93..0000000 --- a/Extended/libwebp/man/vwebp.1 +++ /dev/null @@ -1,101 +0,0 @@ -.\" Hey, EMACS: -*- nroff -*- -.TH VWEBP 1 "June 5, 2019" -.SH NAME -vwebp \- decompress a WebP file and display it in a window -.SH SYNOPSIS -.B vwebp -.RI [ options ] " input_file.webp -.br -.SH DESCRIPTION -This manual page documents the -.B vwebp -command. -.PP -\fBvwebp\fP decompresses a WebP file and displays it in a window using OpenGL. -.SH OPTIONS -.TP -.B \-h -Print usage summary. -.TP -.B \-version -Print version number and exit. -.TP -.B \-noicc -Don't use the ICC profile if present. -.TP -.B \-nofancy -Don't use the fancy YUV420 upscaler. -.TP -.B \-nofilter -Disable in-loop filtering. -.TP -.BI \-dither " strength -Specify a dithering \fBstrength\fP between 0 and 100. Dithering is a -post-processing effect applied to chroma components in lossy compression. -It helps by smoothing gradients and avoiding banding artifacts. Default: 50. -.TP -.BI \-noalphadither -By default, quantized transparency planes are dithered during decompression, -to smooth the gradients. This flag will prevent this dithering. -.TP -.B \-usebgcolor -Fill transparent areas with the bitstream's own background color instead of -checkerboard only. Default is white for non-animated images. -.TP -.B \-mt -Use multi-threading for decoding, if possible. -.TP -.B \-info -Display image information on top of the decoded image. -.TP -.BI \-\- " string -Explicitly specify the input file. This option is useful if the input -file starts with an '\-' for instance. This option must appear \fBlast\fP. -Any other options afterward will be ignored. If the input file is "\-", -the data will be read from \fIstdin\fP instead of a file. -.TP - -.SH KEYBOARD SHORTCUTS -.TP -.B 'c' -Toggle use of color profile. -.TP -.B 'b' -Toggle display of background color. -.TP -.B 'i' -Overlay file information. -.TP -.B 'd' -Disable blending and disposal process, for debugging purposes. -.TP -.B 'q' / 'Q' / ESC -Quit. - -.SH BUGS -Please report all bugs to the issue tracker: -https://bugs.chromium.org/p/webp -.br -Patches welcome! See this page to get started: -http://www.webmproject.org/code/contribute/submitting-patches/ - -.SH EXAMPLES -vwebp picture.webp -.br -vwebp picture.webp -mt -dither 0 -.br -vwebp \-\- \-\-\-picture.webp - -.SH AUTHORS -\fBvwebp\fP is a part of libwebp and was written by the WebP team. -.br -The latest source tree is available at -https://chromium.googlesource.com/webm/libwebp -.PP -This manual page was written for the Debian project (and may be used by others). - -.SH SEE ALSO -.BR dwebp (1) -.br -Please refer to http://developers.google.com/speed/webp/ for additional -information. diff --git a/Extended/libwebp/man/webpinfo.1 b/Extended/libwebp/man/webpinfo.1 deleted file mode 100644 index 902ba9e..0000000 --- a/Extended/libwebp/man/webpinfo.1 +++ /dev/null @@ -1,80 +0,0 @@ -.\" Hey, EMACS: -*- nroff -*- -.TH WEBPINFO 1 "November 24, 2017" -.SH NAME -webpinfo \- print out the chunk level structure of WebP files -along with basic integrity checks. -.SH SYNOPSIS -.B webpinfo -.I OPTIONS -.I INPUT -.br -.B webpinfo [\-h|\-help|\-H|\-longhelp] -.br - -.SH DESCRIPTION -This manual page documents the -.B webpinfo -command. -.PP -\fBwebpinfo\fP can be used to print out the chunk level structure and bitstream -header information of WebP files. It can also check if the files are of valid -WebP format. - -.SH OPTIONS -.TP -.B \-version -Print the version number (as major.minor.revision) and exit. -.TP -.B \-quiet -Do not show chunk parsing information. -.TP -.B \-diag -Show parsing error diagnosis. -.TP -.B \-summary -Show chunk stats summary. -.TP -.BI \-bitstream_info -Parse bitstream header. -.TP -.B \-h, \-help -A short usage summary. -.TP -.B \-H, \-longhelp -Detailed usage instructions. - -.SH INPUT -Input files in WebP format. Input files must come last, following -options (if any). There can be multiple input files. - -.SH BUGS -Please report all bugs to the issue tracker: -https://bugs.chromium.org/p/webp -.br -Patches welcome! See this page to get started: -http://www.webmproject.org/code/contribute/submitting\-patches/ - -.SH EXAMPLES -.br -webpinfo \-h -.br -webpinfo \-diag \-summary input_file.webp -.br -webpinfo \-bitstream_info input_file_1.webp input_file_2.webp -.br -webpinfo *.webp - -.SH AUTHORS -\fBwebpinfo\fP is a part of libwebp and was written by the WebP team. -.br -The latest source tree is available at -https://chromium.googlesource.com/webm/libwebp -.PP -This manual page was written by Hui Su , -for the Debian project (and may be used by others). - -.SH SEE ALSO -.BR webpmux (1) -.br -Please refer to http://developers.google.com/speed/webp/ for additional -information. diff --git a/Extended/libwebp/man/webpmux.1 b/Extended/libwebp/man/webpmux.1 deleted file mode 100644 index 3afa602..0000000 --- a/Extended/libwebp/man/webpmux.1 +++ /dev/null @@ -1,260 +0,0 @@ -.\" Hey, EMACS: -*- nroff -*- -.TH WEBPMUX 1 "April 23, 2018" -.SH NAME -webpmux \- create animated WebP files from non\-animated WebP images, extract -frames from animated WebP images, and manage XMP/EXIF metadata and ICC profile. -.SH SYNOPSIS -.B webpmux \-get -.I GET_OPTIONS -.I INPUT -.B \-o -.I OUTPUT -.br -.B webpmux \-set -.I SET_OPTIONS -.I INPUT -.B \-o -.I OUTPUT -.br -.B webpmux \-strip -.I STRIP_OPTIONS -.I INPUT -.B \-o -.I OUTPUT -.br -.B webpmux \-frame -.I FRAME_OPTIONS -.B [ \-frame ... ] [ \-loop -.I LOOP_COUNT -.B ] -.br -.RS 8 -.B [ \-bgcolor -.I BACKGROUND_COLOR -.B ] \-o -.I OUTPUT -.RE -.br -.B webpmux \-duration -.I DURATION OPTIONS -.B [ \-duration ... ] -.I INPUT -.B \-o -.I OUTPUT -.br -.B webpmux \-info -.I INPUT -.br -.B webpmux [\-h|\-help] -.br -.B webpmux \-version -.br -.B webpmux argument_file_name -.SH DESCRIPTION -This manual page documents the -.B webpmux -command. -.PP -\fBwebpmux\fP can be used to create/extract from animated WebP files, as well as -to add/extract/strip XMP/EXIF metadata and ICC profile. -If a single file name (not starting with the character '\-') is supplied as -the argument, the command line arguments are actually tokenized from this file. -This allows for easy scripting or using large number of arguments. -.SH OPTIONS -.SS GET_OPTIONS (\-get): -.TP -.B icc -Get ICC profile. -.TP -.B exif -Get EXIF metadata. -.TP -.B xmp -Get XMP metadata. -.TP -.BI frame " n -Get nth frame from an animated image. (n = 0 has a special meaning: last frame). - -.SS SET_OPTIONS (\-set) -.TP -.BI icc " file.icc -Set ICC profile. -.P -Where: 'file.icc' contains the ICC profile to be set. -.TP -.BI exif " file.exif -Set EXIF metadata. -.P -Where: 'file.exif' contains the EXIF metadata to be set. -.TP -.BI xmp " file.xmp -Set XMP metadata. -.P -Where: 'file.xmp' contains the XMP metadata to be set. - -.SS STRIP_OPTIONS (\-strip) -.TP -.B icc -Strip ICC profile. -.TP -.B exif -Strip EXIF metadata. -.TP -.B xmp -Strip XMP metadata. - -.SS DURATION_OPTIONS (\-duration) -Amend the duration of a specific interval of frames. This option is only -effective on animated WebP and has no effect on a single-frame file. -.TP -.I duration[,start[,end]] -Where: -.br -.B duration -is the duration for the interval in milliseconds (mandatory). -Must be non-negative. -.br -.B start -is the starting frame index of the interval (optional). -.br -.B end -is the ending frame index (inclusive) of the interval (optional). -.TP -The three typical usages of this option are: -.br -.B -duration d - set the duration to 'd' for the whole animation. -.br -.B -duration d,f - set the duration of frame 'f' to 'd'. -.br -.B -duration d,start,end - set the duration to 'd' for the whole [start,end] interval. -.TP -.P -Note that the frames outside of the [start, end] interval will remain untouched. -The 'end' value '0' has the special meaning 'last frame of the animation'. -.TP -.I Reminder: -frame indexing starts at '1'. -.br - -.SS FRAME_OPTIONS (\-frame) -Create an animated WebP file from multiple (non\-animated) WebP images. -.TP -.I file_i +di[+xi+yi[+mi[bi]]] -Where: 'file_i' is the i'th frame (WebP format), 'xi','yi' specify the image -offset for this frame, 'di' is the pause duration before next frame, 'mi' is -the dispose method for this frame (0 for NONE or 1 for BACKGROUND) and 'bi' is -the blending method for this frame (+b for BLEND or \-b for NO_BLEND). -Argument 'bi' can be omitted and will default to +b (BLEND). -Also, 'mi' can be omitted if 'bi' is omitted and will default to 0 (NONE). -Finally, if 'mi' and 'bi' are omitted then 'xi' and 'yi' can be omitted and will -default to +0+0. -.TP -.BI \-loop " n -Loop the frames n number of times. 0 indicates the frames should loop forever. -Valid range is 0 to 65535 [Default: 0 (infinite)]. -.TP -.BI \-bgcolor " A,R,G,B -Background color of the canvas. -.br -where: 'A', 'R', 'G' and 'B' are integers in the range 0 to 255 specifying the -Alpha, Red, Green and Blue component values respectively -[Default: 255,255,255,255]. - -.SS INPUT -.TP -Input file in WebP format. - -.SS OUTPUT (\-o) -.TP -Output file in WebP format. - -.SS Note: -.TP -The nature of EXIF, XMP and ICC data is not checked and is assumed to be valid. - -.SH BUGS -Please report all bugs to the issue tracker: -https://bugs.chromium.org/p/webp -.br -Patches welcome! See this page to get started: -http://www.webmproject.org/code/contribute/submitting\-patches/ - -.SH EXAMPLES -.P -Add ICC profile: -.br -webpmux \-set icc image_profile.icc in.webp \-o icc_container.webp -.P -Extract ICC profile: -.br -webpmux \-get icc icc_container.webp \-o image_profile.icc -.P -Strip ICC profile: -.br -webpmux \-strip icc icc_container.webp \-o without_icc.webp -.P -Add XMP metadata: -.br -webpmux \-set xmp image_metadata.xmp in.webp \-o xmp_container.webp -.P -Extract XMP metadata: -.br -webpmux \-get xmp xmp_container.webp \-o image_metadata.xmp -.P -Strip XMP metadata: -.br -webpmux \-strip xmp xmp_container.webp \-o without_xmp.webp -.P -Add EXIF metadata: -.br -webpmux \-set exif image_metadata.exif in.webp \-o exif_container.webp -.P -Extract EXIF metadata: -.br -webpmux \-get exif exif_container.webp \-o image_metadata.exif -.P -Strip EXIF metadata: -.br -webpmux \-strip exif exif_container.webp \-o without_exif.webp -.P -Create an animated WebP file from 3 (non\-animated) WebP images: -.br -webpmux \-frame 1.webp +100 \-frame 2.webp +100+50+50 -.br -.RS 8 -\-frame 3.webp +100+50+50+1+b \-loop 10 \-bgcolor 255,255,255,255 -.br -\-o anim_container.webp -.RE -.P -Get the 2nd frame from an animated WebP file: -.br -webpmux \-get frame 2 anim_container.webp \-o frame_2.webp -.P -Using \-get/\-set/\-strip with input file name starting with '\-': -.br -webpmux \-set icc image_profile.icc \-o icc_container.webp \-\- \-\-\-in.webp -.br -webpmux \-get icc \-o image_profile.icc \-\- \-\-\-icc_container.webp -.br -webpmux \-strip icc \-o without_icc.webp \-\- \-\-\-icc_container.webp - -.SH AUTHORS -\fBwebpmux\fP is a part of libwebp and was written by the WebP team. -.br -The latest source tree is available at -https://chromium.googlesource.com/webm/libwebp -.PP -This manual page was written by Vikas Arora , -for the Debian project (and may be used by others). - -.SH SEE ALSO -.BR cwebp (1), -.BR dwebp (1), -.BR gif2webp (1) -.br -Please refer to http://developers.google.com/speed/webp/ for additional -information. diff --git a/Extended/libwebp/missing b/Extended/libwebp/missing deleted file mode 100755 index 625aeb1..0000000 --- a/Extended/libwebp/missing +++ /dev/null @@ -1,215 +0,0 @@ -#! /bin/sh -# Common wrapper for a few potentially missing GNU programs. - -scriptversion=2018-03-07.03; # UTC - -# Copyright (C) 1996-2018 Free Software Foundation, Inc. -# Originally written by Fran,cois Pinard , 1996. - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . - -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - -if test $# -eq 0; then - echo 1>&2 "Try '$0 --help' for more information" - exit 1 -fi - -case $1 in - - --is-lightweight) - # Used by our autoconf macros to check whether the available missing - # script is modern enough. - exit 0 - ;; - - --run) - # Back-compat with the calling convention used by older automake. - shift - ;; - - -h|--h|--he|--hel|--help) - echo "\ -$0 [OPTION]... PROGRAM [ARGUMENT]... - -Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due -to PROGRAM being missing or too old. - -Options: - -h, --help display this help and exit - -v, --version output version information and exit - -Supported PROGRAM values: - aclocal autoconf autoheader autom4te automake makeinfo - bison yacc flex lex help2man - -Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and -'g' are ignored when checking the name. - -Send bug reports to ." - exit $? - ;; - - -v|--v|--ve|--ver|--vers|--versi|--versio|--version) - echo "missing $scriptversion (GNU Automake)" - exit $? - ;; - - -*) - echo 1>&2 "$0: unknown '$1' option" - echo 1>&2 "Try '$0 --help' for more information" - exit 1 - ;; - -esac - -# Run the given program, remember its exit status. -"$@"; st=$? - -# If it succeeded, we are done. -test $st -eq 0 && exit 0 - -# Also exit now if we it failed (or wasn't found), and '--version' was -# passed; such an option is passed most likely to detect whether the -# program is present and works. -case $2 in --version|--help) exit $st;; esac - -# Exit code 63 means version mismatch. This often happens when the user -# tries to use an ancient version of a tool on a file that requires a -# minimum version. -if test $st -eq 63; then - msg="probably too old" -elif test $st -eq 127; then - # Program was missing. - msg="missing on your system" -else - # Program was found and executed, but failed. Give up. - exit $st -fi - -perl_URL=https://www.perl.org/ -flex_URL=https://github.com/westes/flex -gnu_software_URL=https://www.gnu.org/software - -program_details () -{ - case $1 in - aclocal|automake) - echo "The '$1' program is part of the GNU Automake package:" - echo "<$gnu_software_URL/automake>" - echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:" - echo "<$gnu_software_URL/autoconf>" - echo "<$gnu_software_URL/m4/>" - echo "<$perl_URL>" - ;; - autoconf|autom4te|autoheader) - echo "The '$1' program is part of the GNU Autoconf package:" - echo "<$gnu_software_URL/autoconf/>" - echo "It also requires GNU m4 and Perl in order to run:" - echo "<$gnu_software_URL/m4/>" - echo "<$perl_URL>" - ;; - esac -} - -give_advice () -{ - # Normalize program name to check for. - normalized_program=`echo "$1" | sed ' - s/^gnu-//; t - s/^gnu//; t - s/^g//; t'` - - printf '%s\n' "'$1' is $msg." - - configure_deps="'configure.ac' or m4 files included by 'configure.ac'" - case $normalized_program in - autoconf*) - echo "You should only need it if you modified 'configure.ac'," - echo "or m4 files included by it." - program_details 'autoconf' - ;; - autoheader*) - echo "You should only need it if you modified 'acconfig.h' or" - echo "$configure_deps." - program_details 'autoheader' - ;; - automake*) - echo "You should only need it if you modified 'Makefile.am' or" - echo "$configure_deps." - program_details 'automake' - ;; - aclocal*) - echo "You should only need it if you modified 'acinclude.m4' or" - echo "$configure_deps." - program_details 'aclocal' - ;; - autom4te*) - echo "You might have modified some maintainer files that require" - echo "the 'autom4te' program to be rebuilt." - program_details 'autom4te' - ;; - bison*|yacc*) - echo "You should only need it if you modified a '.y' file." - echo "You may want to install the GNU Bison package:" - echo "<$gnu_software_URL/bison/>" - ;; - lex*|flex*) - echo "You should only need it if you modified a '.l' file." - echo "You may want to install the Fast Lexical Analyzer package:" - echo "<$flex_URL>" - ;; - help2man*) - echo "You should only need it if you modified a dependency" \ - "of a man page." - echo "You may want to install the GNU Help2man package:" - echo "<$gnu_software_URL/help2man/>" - ;; - makeinfo*) - echo "You should only need it if you modified a '.texi' file, or" - echo "any other file indirectly affecting the aspect of the manual." - echo "You might want to install the Texinfo package:" - echo "<$gnu_software_URL/texinfo/>" - echo "The spurious makeinfo call might also be the consequence of" - echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might" - echo "want to install GNU make:" - echo "<$gnu_software_URL/make/>" - ;; - *) - echo "You might have modified some files without having the proper" - echo "tools for further handling them. Check the 'README' file, it" - echo "often tells you about the needed prerequisites for installing" - echo "this package. You may also peek at any GNU archive site, in" - echo "case some other package contains this missing '$1' program." - ;; - esac -} - -give_advice "$1" | sed -e '1s/^/WARNING: /' \ - -e '2,$s/^/ /' >&2 - -# Propagate the correct exit status (expected to be 127 for a program -# not found, 63 for a program that failed due to version mismatch). -exit $st - -# Local variables: -# eval: (add-hook 'before-save-hook 'time-stamp) -# time-stamp-start: "scriptversion=" -# time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-time-zone: "UTC0" -# time-stamp-end: "; # UTC" -# End: diff --git a/Extended/libwebp/src/Makefile b/Extended/libwebp/src/Makefile deleted file mode 100644 index 0f69504..0000000 --- a/Extended/libwebp/src/Makefile +++ /dev/null @@ -1,882 +0,0 @@ -# Makefile.in generated by automake 1.16.1 from Makefile.am. -# src/Makefile. Generated from Makefile.in by configure. - -# Copyright (C) 1994-2018 Free Software Foundation, Inc. - -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - - - - - - -am__is_gnu_make = { \ - if test -z '$(MAKELEVEL)'; then \ - false; \ - elif test -n '$(MAKE_HOST)'; then \ - true; \ - elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ - true; \ - else \ - false; \ - fi; \ -} -am__make_running_with_option = \ - case $${target_option-} in \ - ?) ;; \ - *) echo "am__make_running_with_option: internal error: invalid" \ - "target option '$${target_option-}' specified" >&2; \ - exit 1;; \ - esac; \ - has_opt=no; \ - sane_makeflags=$$MAKEFLAGS; \ - if $(am__is_gnu_make); then \ - sane_makeflags=$$MFLAGS; \ - else \ - case $$MAKEFLAGS in \ - *\\[\ \ ]*) \ - bs=\\; \ - sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ - | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ - esac; \ - fi; \ - skip_next=no; \ - strip_trailopt () \ - { \ - flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ - }; \ - for flg in $$sane_makeflags; do \ - test $$skip_next = yes && { skip_next=no; continue; }; \ - case $$flg in \ - *=*|--*) continue;; \ - -*I) strip_trailopt 'I'; skip_next=yes;; \ - -*I?*) strip_trailopt 'I';; \ - -*O) strip_trailopt 'O'; skip_next=yes;; \ - -*O?*) strip_trailopt 'O';; \ - -*l) strip_trailopt 'l'; skip_next=yes;; \ - -*l?*) strip_trailopt 'l';; \ - -[dEDm]) skip_next=yes;; \ - -[JT]) skip_next=yes;; \ - esac; \ - case $$flg in \ - *$$target_option*) has_opt=yes; break;; \ - esac; \ - done; \ - test $$has_opt = yes -am__make_dryrun = (target_option=n; $(am__make_running_with_option)) -am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) -pkgdatadir = $(datadir)/libwebp -pkgincludedir = $(includedir)/libwebp -pkglibdir = $(libdir)/libwebp -pkglibexecdir = $(libexecdir)/libwebp -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = x86_64-apple-darwin19.6.0 -host_triplet = x86_64-apple-darwin19.6.0 -#am__append_1 = mux -am__append_2 = demux -#am__append_3 = libwebpdecoder.la -#am__append_4 = libwebpdecoder.pc -subdir = src -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pthread.m4 \ - $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ - $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ - $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -DIST_COMMON = $(srcdir)/Makefile.am $(common_HEADERS) \ - $(libwebpinclude_HEADERS) $(noinst_HEADERS) $(am__DIST_COMMON) -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = $(top_builddir)/src/webp/config.h -CONFIG_CLEAN_FILES = libwebp.pc libwebpdecoder.pc -CONFIG_CLEAN_VPATH_FILES = -am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; -am__vpath_adj = case $$p in \ - $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ - *) f=$$p;; \ - esac; -am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; -am__install_max = 40 -am__nobase_strip_setup = \ - srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` -am__nobase_strip = \ - for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" -am__nobase_list = $(am__nobase_strip_setup); \ - for p in $$list; do echo "$$p $$p"; done | \ - sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ - $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ - if (++n[$$2] == $(am__install_max)) \ - { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ - END { for (dir in files) print dir, files[dir] }' -am__base_list = \ - sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ - sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' -am__uninstall_files_from_dir = { \ - test -z "$$files" \ - || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ - || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ - $(am__cd) "$$dir" && rm -f $$files; }; \ - } -am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(pkgconfigdir)" \ - "$(DESTDIR)$(commondir)" "$(DESTDIR)$(libwebpincludedir)" -LTLIBRARIES = $(lib_LTLIBRARIES) -libwebp_la_DEPENDENCIES = dec/libwebpdecode.la dsp/libwebpdsp.la \ - enc/libwebpencode.la utils/libwebputils.la -am_libwebp_la_OBJECTS = -libwebp_la_OBJECTS = $(am_libwebp_la_OBJECTS) -AM_V_lt = $(am__v_lt_$(V)) -am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) -am__v_lt_0 = --silent -am__v_lt_1 = -libwebp_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ - $(libwebp_la_LDFLAGS) $(LDFLAGS) -o $@ -#libwebpdecoder_la_DEPENDENCIES = \ -# dec/libwebpdecode.la \ -# dsp/libwebpdspdecode.la \ -# utils/libwebputilsdecode.la -am_libwebpdecoder_la_OBJECTS = -libwebpdecoder_la_OBJECTS = $(am_libwebpdecoder_la_OBJECTS) -libwebpdecoder_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ - $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ - $(AM_CFLAGS) $(CFLAGS) $(libwebpdecoder_la_LDFLAGS) $(LDFLAGS) \ - -o $@ -#am_libwebpdecoder_la_rpath = -rpath \ -# $(libdir) -AM_V_P = $(am__v_P_$(V)) -am__v_P_ = $(am__v_P_$(AM_DEFAULT_VERBOSITY)) -am__v_P_0 = false -am__v_P_1 = : -AM_V_GEN = $(am__v_GEN_$(V)) -am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) -am__v_GEN_0 = @echo " GEN " $@; -am__v_GEN_1 = -AM_V_at = $(am__v_at_$(V)) -am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) -am__v_at_0 = @ -am__v_at_1 = -DEFAULT_INCLUDES = -I. -I$(top_builddir)/src/webp -COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ - $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CFLAGS) $(CFLAGS) -AM_V_CC = $(am__v_CC_$(V)) -am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) -am__v_CC_0 = @echo " CC " $@; -am__v_CC_1 = -CCLD = $(CC) -LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ - $(AM_LDFLAGS) $(LDFLAGS) -o $@ -AM_V_CCLD = $(am__v_CCLD_$(V)) -am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) -am__v_CCLD_0 = @echo " CCLD " $@; -am__v_CCLD_1 = -SOURCES = $(libwebp_la_SOURCES) $(libwebpdecoder_la_SOURCES) -DIST_SOURCES = $(libwebp_la_SOURCES) $(libwebpdecoder_la_SOURCES) -RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ - ctags-recursive dvi-recursive html-recursive info-recursive \ - install-data-recursive install-dvi-recursive \ - install-exec-recursive install-html-recursive \ - install-info-recursive install-pdf-recursive \ - install-ps-recursive install-recursive installcheck-recursive \ - installdirs-recursive pdf-recursive ps-recursive \ - tags-recursive uninstall-recursive -am__can_run_installinfo = \ - case $$AM_UPDATE_INFO_DIR in \ - n|no|NO) false;; \ - *) (install-info --version) >/dev/null 2>&1;; \ - esac -DATA = $(pkgconfig_DATA) -HEADERS = $(common_HEADERS) $(libwebpinclude_HEADERS) \ - $(noinst_HEADERS) -RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ - distclean-recursive maintainer-clean-recursive -am__recursive_targets = \ - $(RECURSIVE_TARGETS) \ - $(RECURSIVE_CLEAN_TARGETS) \ - $(am__extra_recursive_targets) -AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ - distdir distdir-am -am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) -# Read a list of newline-separated strings from the standard input, -# and print each of them once, without duplicates. Input order is -# *not* preserved. -am__uniquify_input = $(AWK) '\ - BEGIN { nonempty = 0; } \ - { items[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in items) print i; }; } \ -' -# Make sure the list of sources is unique. This is necessary because, -# e.g., the same source file might be shared among _SOURCES variables -# for different programs/libraries. -am__define_uniq_tagged_files = \ - list='$(am__tagged_files)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | $(am__uniquify_input)` -ETAGS = etags -CTAGS = ctags -DIST_SUBDIRS = dec enc dsp utils . mux demux -am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/libwebp.pc.in \ - $(srcdir)/libwebpdecoder.pc.in -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -am__relativize = \ - dir0=`pwd`; \ - sed_first='s,^\([^/]*\)/.*$$,\1,'; \ - sed_rest='s,^[^/]*/*,,'; \ - sed_last='s,^.*/\([^/]*\)$$,\1,'; \ - sed_butlast='s,/*[^/]*$$,,'; \ - while test -n "$$dir1"; do \ - first=`echo "$$dir1" | sed -e "$$sed_first"`; \ - if test "$$first" != "."; then \ - if test "$$first" = ".."; then \ - dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ - dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ - else \ - first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ - if test "$$first2" = "$$first"; then \ - dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ - else \ - dir2="../$$dir2"; \ - fi; \ - dir0="$$dir0"/"$$first"; \ - fi; \ - fi; \ - dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ - done; \ - reldir="$$dir2" -ACLOCAL = ${SHELL} /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp/missing aclocal-1.16 -AMTAR = $${TAR-tar} -AM_CFLAGS = -fvisibility=hidden -Wall -Wconstant-conversion -Wdeclaration-after-statement -Wextra -Wfloat-conversion -Wformat -Wformat-nonliteral -Wformat -Wformat-security -Wmissing-declarations -Wmissing-prototypes -Wold-style-definition -Wparentheses-equality -Wshadow -Wshorten-64-to-32 -Wundef -Wunreachable-code -Wunused -Wvla -Wno-deprecated-declarations -AM_CPPFLAGS = -DNDEBUG -AM_DEFAULT_VERBOSITY = 0 -AR = ar -AUTOCONF = ${SHELL} /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp/missing autoconf -AUTOHEADER = ${SHELL} /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp/missing autoheader -AUTOMAKE = ${SHELL} /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp/missing automake-1.16 -AWK = awk -CC = gcc -CCDEPMODE = depmode=gcc3 -CFLAGS = -g -O2 -D_THREAD_SAFE -pthread -CPP = gcc -E -CPPFLAGS = -CYGPATH_W = echo -DEFS = -DHAVE_CONFIG_H -DEPDIR = .deps -DLLTOOL = false -DSYMUTIL = dsymutil -DUMPBIN = -ECHO_C = \c -ECHO_N = -ECHO_T = -EGREP = /usr/bin/grep -E -EXEEXT = -FGREP = /usr/bin/grep -F -GIF_INCLUDES = -GIF_LIBS = -lgif -GL_INCLUDES = -GL_LIBS = -framework GLUT -framework OpenGL -GREP = /usr/bin/grep -INSTALL = /opt/twitter_mde/homebrew_minimal/mde_bin/ginstall -c -INSTALL_DATA = ${INSTALL} -m 644 -INSTALL_PROGRAM = ${INSTALL} -INSTALL_SCRIPT = ${INSTALL} -INSTALL_STRIP_PROGRAM = $(install_sh) -c -s -JPEG_INCLUDES = -DWEBP_HAVE_JPEG -JPEG_LIBS = -ljpeg -LD = /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld -LDFLAGS = -LIBOBJS = -LIBPNG_CONFIG = /opt/twitter_mde/bin/libpng-config -LIBS = -LIBSDL_CONFIG = -LIBTOOL = $(SHELL) $(top_builddir)/libtool -LIPO = lipo -LN_S = ln -s -LTLIBOBJS = -LT_SYS_LIBRARY_PATH = -MAKEINFO = ${SHELL} /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp/missing makeinfo -MANIFEST_TOOL = : -MKDIR_P = /opt/twitter_mde/homebrew_minimal/mde_bin/gmkdir -p -NEON_FLAGS = -NM = /usr/bin/nm -B -NMEDIT = nmedit -OBJDUMP = objdump -OBJEXT = o -OTOOL = otool -OTOOL64 = : -PACKAGE = libwebp -PACKAGE_BUGREPORT = https://bugs.chromium.org/p/webp -PACKAGE_NAME = libwebp -PACKAGE_STRING = libwebp 1.1.0 -PACKAGE_TARNAME = libwebp -PACKAGE_URL = http://developers.google.com/speed/webp -PACKAGE_VERSION = 1.1.0 -PATH_SEPARATOR = : -PNG_INCLUDES = -I/opt/twitter_mde/package/twitter_dev_homebrew/current/Cellar/libpng/1.6.34/include/libpng16 -DWEBP_HAVE_PNG -PNG_LIBS = -L/opt/twitter_mde/package/twitter_dev_homebrew/current/Cellar/libpng/1.6.34/lib -lpng16 -PTHREAD_CC = gcc -PTHREAD_CFLAGS = -D_THREAD_SAFE -pthread -PTHREAD_LIBS = -RANLIB = ranlib -SDL_INCLUDES = -SDL_LIBS = -SED = /usr/bin/sed -SET_MAKE = -SHELL = /bin/sh -SSE2_FLAGS = -msse2 -SSE41_FLAGS = -msse4.1 -STRIP = strip -TIFF_INCLUDES = -DWEBP_HAVE_TIFF -TIFF_LIBS = -ltiff -USE_SWAP_16BIT_CSP = -VERSION = 1.1.0 -abs_builddir = /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp/src -abs_srcdir = /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp/src -abs_top_builddir = /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp -abs_top_srcdir = /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp -ac_ct_AR = ar -ac_ct_CC = gcc -ac_ct_DUMPBIN = -am__include = include -am__leading_dot = . -am__quote = -am__tar = $${TAR-tar} chof - "$$tardir" -am__untar = $${TAR-tar} xf - -ax_pthread_config = -bindir = ${exec_prefix}/bin -build = x86_64-apple-darwin19.6.0 -build_alias = -build_cpu = x86_64 -build_os = darwin19.6.0 -build_vendor = apple -builddir = . -datadir = ${datarootdir} -datarootdir = ${prefix}/share -docdir = ${datarootdir}/doc/${PACKAGE_TARNAME} -dvidir = ${docdir} -exec_prefix = ${prefix} -host = x86_64-apple-darwin19.6.0 -host_alias = -host_cpu = x86_64 -host_os = darwin19.6.0 -host_vendor = apple -htmldir = ${docdir} -includedir = ${prefix}/include -infodir = ${datarootdir}/info -install_sh = ${SHELL} /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp/install-sh -libdir = ${exec_prefix}/lib -libexecdir = ${exec_prefix}/libexec -localedir = ${datarootdir}/locale -localstatedir = ${prefix}/var -mandir = ${datarootdir}/man -mkdir_p = $(MKDIR_P) -oldincludedir = /usr/include -pdfdir = ${docdir} -pkgconfigdir = ${libdir}/pkgconfig -prefix = /usr/local -program_transform_name = s,x,x, -psdir = ${docdir} -runstatedir = ${localstatedir}/run -sbindir = ${exec_prefix}/sbin -sharedstatedir = ${prefix}/com -srcdir = . -sysconfdir = ${prefix}/etc -target_alias = -top_build_prefix = ../ -top_builddir = .. -top_srcdir = .. - -# The mux and demux libraries depend on libwebp, thus the '.' to force -# the build order so it's available to them. -SUBDIRS = dec enc dsp utils . $(am__append_1) $(am__append_2) -lib_LTLIBRARIES = libwebp.la $(am__append_3) -common_HEADERS = webp/decode.h webp/types.h -commondir = $(includedir)/webp -libwebp_la_SOURCES = -libwebpinclude_HEADERS = webp/encode.h -noinst_HEADERS = webp/format_constants.h -libwebp_la_LIBADD = dec/libwebpdecode.la dsp/libwebpdsp.la \ - enc/libwebpencode.la utils/libwebputils.la - -# Use '-no-undefined' to declare that libwebp does not depend on any libraries -# other than the ones listed on the command line, i.e., after linking, it will -# not have unresolved symbols. Some platforms (Windows among them) require all -# symbols in shared libraries to be resolved at library creation. -libwebp_la_LDFLAGS = -no-undefined -version-info 8:0:1 -libwebpincludedir = $(includedir)/webp -pkgconfig_DATA = libwebp.pc $(am__append_4) -#libwebpdecoder_la_SOURCES = -#libwebpdecoder_la_LIBADD = \ -# dec/libwebpdecode.la \ -# dsp/libwebpdspdecode.la \ -# utils/libwebputilsdecode.la -#libwebpdecoder_la_LDFLAGS = -no-undefined -version-info 4:0:1 -all: all-recursive - -.SUFFIXES: -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ - && { if test -f $@; then exit 0; else break; fi; }; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --foreign src/Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(am__aclocal_m4_deps): -libwebp.pc: $(top_builddir)/config.status $(srcdir)/libwebp.pc.in - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ -libwebpdecoder.pc: $(top_builddir)/config.status $(srcdir)/libwebpdecoder.pc.in - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ - -install-libLTLIBRARIES: $(lib_LTLIBRARIES) - @$(NORMAL_INSTALL) - @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ - list2=; for p in $$list; do \ - if test -f $$p; then \ - list2="$$list2 $$p"; \ - else :; fi; \ - done; \ - test -z "$$list2" || { \ - echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ - $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ - echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ - $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ - } - -uninstall-libLTLIBRARIES: - @$(NORMAL_UNINSTALL) - @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ - for p in $$list; do \ - $(am__strip_dir) \ - echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ - $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ - done - -clean-libLTLIBRARIES: - -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) - @list='$(lib_LTLIBRARIES)'; \ - locs=`for p in $$list; do echo $$p; done | \ - sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ - sort -u`; \ - test -z "$$locs" || { \ - echo rm -f $${locs}; \ - rm -f $${locs}; \ - } - -libwebp.la: $(libwebp_la_OBJECTS) $(libwebp_la_DEPENDENCIES) $(EXTRA_libwebp_la_DEPENDENCIES) - $(AM_V_CCLD)$(libwebp_la_LINK) -rpath $(libdir) $(libwebp_la_OBJECTS) $(libwebp_la_LIBADD) $(LIBS) - -libwebpdecoder.la: $(libwebpdecoder_la_OBJECTS) $(libwebpdecoder_la_DEPENDENCIES) $(EXTRA_libwebpdecoder_la_DEPENDENCIES) - $(AM_V_CCLD)$(libwebpdecoder_la_LINK) $(am_libwebpdecoder_la_rpath) $(libwebpdecoder_la_OBJECTS) $(libwebpdecoder_la_LIBADD) $(LIBS) - -mostlyclean-compile: - -rm -f *.$(OBJEXT) - -distclean-compile: - -rm -f *.tab.c - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs -install-pkgconfigDATA: $(pkgconfig_DATA) - @$(NORMAL_INSTALL) - @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ - if test -n "$$list"; then \ - echo " $(MKDIR_P) '$(DESTDIR)$(pkgconfigdir)'"; \ - $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)" || exit 1; \ - fi; \ - for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - echo "$$d$$p"; \ - done | $(am__base_list) | \ - while read files; do \ - echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgconfigdir)'"; \ - $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \ - done - -uninstall-pkgconfigDATA: - @$(NORMAL_UNINSTALL) - @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ - files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ - dir='$(DESTDIR)$(pkgconfigdir)'; $(am__uninstall_files_from_dir) -install-commonHEADERS: $(common_HEADERS) - @$(NORMAL_INSTALL) - @list='$(common_HEADERS)'; test -n "$(commondir)" || list=; \ - if test -n "$$list"; then \ - echo " $(MKDIR_P) '$(DESTDIR)$(commondir)'"; \ - $(MKDIR_P) "$(DESTDIR)$(commondir)" || exit 1; \ - fi; \ - for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - echo "$$d$$p"; \ - done | $(am__base_list) | \ - while read files; do \ - echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(commondir)'"; \ - $(INSTALL_HEADER) $$files "$(DESTDIR)$(commondir)" || exit $$?; \ - done - -uninstall-commonHEADERS: - @$(NORMAL_UNINSTALL) - @list='$(common_HEADERS)'; test -n "$(commondir)" || list=; \ - files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ - dir='$(DESTDIR)$(commondir)'; $(am__uninstall_files_from_dir) -install-libwebpincludeHEADERS: $(libwebpinclude_HEADERS) - @$(NORMAL_INSTALL) - @list='$(libwebpinclude_HEADERS)'; test -n "$(libwebpincludedir)" || list=; \ - if test -n "$$list"; then \ - echo " $(MKDIR_P) '$(DESTDIR)$(libwebpincludedir)'"; \ - $(MKDIR_P) "$(DESTDIR)$(libwebpincludedir)" || exit 1; \ - fi; \ - for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - echo "$$d$$p"; \ - done | $(am__base_list) | \ - while read files; do \ - echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(libwebpincludedir)'"; \ - $(INSTALL_HEADER) $$files "$(DESTDIR)$(libwebpincludedir)" || exit $$?; \ - done - -uninstall-libwebpincludeHEADERS: - @$(NORMAL_UNINSTALL) - @list='$(libwebpinclude_HEADERS)'; test -n "$(libwebpincludedir)" || list=; \ - files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ - dir='$(DESTDIR)$(libwebpincludedir)'; $(am__uninstall_files_from_dir) - -# This directory's subdirectories are mostly independent; you can cd -# into them and run 'make' without going through this Makefile. -# To change the values of 'make' variables: instead of editing Makefiles, -# (1) if the variable is set in 'config.status', edit 'config.status' -# (which will cause the Makefiles to be regenerated when you run 'make'); -# (2) otherwise, pass the desired values on the 'make' command line. -$(am__recursive_targets): - @fail=; \ - if $(am__make_keepgoing); then \ - failcom='fail=yes'; \ - else \ - failcom='exit 1'; \ - fi; \ - dot_seen=no; \ - target=`echo $@ | sed s/-recursive//`; \ - case "$@" in \ - distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ - *) list='$(SUBDIRS)' ;; \ - esac; \ - for subdir in $$list; do \ - echo "Making $$target in $$subdir"; \ - if test "$$subdir" = "."; then \ - dot_seen=yes; \ - local_target="$$target-am"; \ - else \ - local_target="$$target"; \ - fi; \ - ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ - || eval $$failcom; \ - done; \ - if test "$$dot_seen" = "no"; then \ - $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ - fi; test -z "$$fail" - -ID: $(am__tagged_files) - $(am__define_uniq_tagged_files); mkid -fID $$unique -tags: tags-recursive -TAGS: tags - -tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) - set x; \ - here=`pwd`; \ - if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ - include_option=--etags-include; \ - empty_fix=.; \ - else \ - include_option=--include; \ - empty_fix=; \ - fi; \ - list='$(SUBDIRS)'; for subdir in $$list; do \ - if test "$$subdir" = .; then :; else \ - test ! -f $$subdir/TAGS || \ - set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ - fi; \ - done; \ - $(am__define_uniq_tagged_files); \ - shift; \ - if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ - test -n "$$unique" || unique=$$empty_fix; \ - if test $$# -gt 0; then \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - "$$@" $$unique; \ - else \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$unique; \ - fi; \ - fi -ctags: ctags-recursive - -CTAGS: ctags -ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) - $(am__define_uniq_tagged_files); \ - test -z "$(CTAGS_ARGS)$$unique" \ - || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$unique - -GTAGS: - here=`$(am__cd) $(top_builddir) && pwd` \ - && $(am__cd) $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) "$$here" -cscopelist: cscopelist-recursive - -cscopelist-am: $(am__tagged_files) - list='$(am__tagged_files)'; \ - case "$(srcdir)" in \ - [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ - *) sdir=$(subdir)/$(srcdir) ;; \ - esac; \ - for i in $$list; do \ - if test -f "$$i"; then \ - echo "$(subdir)/$$i"; \ - else \ - echo "$$sdir/$$i"; \ - fi; \ - done >> $(top_builddir)/cscope.files - -distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - -distdir: $(BUILT_SOURCES) - $(MAKE) $(AM_MAKEFLAGS) distdir-am - -distdir-am: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - list='$(DISTFILES)'; \ - dist_files=`for file in $$list; do echo $$file; done | \ - sed -e "s|^$$srcdirstrip/||;t" \ - -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ - case $$dist_files in \ - */*) $(MKDIR_P) `echo "$$dist_files" | \ - sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ - sort -u` ;; \ - esac; \ - for file in $$dist_files; do \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - if test -d $$d/$$file; then \ - dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test -d "$(distdir)/$$file"; then \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ - else \ - test -f "$(distdir)/$$file" \ - || cp -p $$d/$$file "$(distdir)/$$file" \ - || exit 1; \ - fi; \ - done - @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ - if test "$$subdir" = .; then :; else \ - $(am__make_dryrun) \ - || test -d "$(distdir)/$$subdir" \ - || $(MKDIR_P) "$(distdir)/$$subdir" \ - || exit 1; \ - dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ - $(am__relativize); \ - new_distdir=$$reldir; \ - dir1=$$subdir; dir2="$(top_distdir)"; \ - $(am__relativize); \ - new_top_distdir=$$reldir; \ - echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ - echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ - ($(am__cd) $$subdir && \ - $(MAKE) $(AM_MAKEFLAGS) \ - top_distdir="$$new_top_distdir" \ - distdir="$$new_distdir" \ - am__remove_distdir=: \ - am__skip_length_check=: \ - am__skip_mode_fix=: \ - distdir) \ - || exit 1; \ - fi; \ - done -check-am: all-am -check: check-recursive -all-am: Makefile $(LTLIBRARIES) $(DATA) $(HEADERS) -installdirs: installdirs-recursive -installdirs-am: - for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(pkgconfigdir)" "$(DESTDIR)$(commondir)" "$(DESTDIR)$(libwebpincludedir)"; do \ - test -z "$$dir" || $(MKDIR_P) "$$dir"; \ - done -install: install-recursive -install-exec: install-exec-recursive -install-data: install-data-recursive -uninstall: uninstall-recursive - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-recursive -install-strip: - if test -z '$(STRIP)'; then \ - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - install; \ - else \ - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ - fi -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-recursive - -clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ - mostlyclean-am - -distclean: distclean-recursive - -rm -f Makefile -distclean-am: clean-am distclean-compile distclean-generic \ - distclean-tags - -dvi: dvi-recursive - -dvi-am: - -html: html-recursive - -html-am: - -info: info-recursive - -info-am: - -install-data-am: install-commonHEADERS install-libwebpincludeHEADERS \ - install-pkgconfigDATA - -install-dvi: install-dvi-recursive - -install-dvi-am: - -install-exec-am: install-libLTLIBRARIES - -install-html: install-html-recursive - -install-html-am: - -install-info: install-info-recursive - -install-info-am: - -install-man: - -install-pdf: install-pdf-recursive - -install-pdf-am: - -install-ps: install-ps-recursive - -install-ps-am: - -installcheck-am: - -maintainer-clean: maintainer-clean-recursive - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-recursive - -mostlyclean-am: mostlyclean-compile mostlyclean-generic \ - mostlyclean-libtool - -pdf: pdf-recursive - -pdf-am: - -ps: ps-recursive - -ps-am: - -uninstall-am: uninstall-commonHEADERS uninstall-libLTLIBRARIES \ - uninstall-libwebpincludeHEADERS uninstall-pkgconfigDATA - -.MAKE: $(am__recursive_targets) install-am install-strip - -.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ - check-am clean clean-generic clean-libLTLIBRARIES \ - clean-libtool cscopelist-am ctags ctags-am distclean \ - distclean-compile distclean-generic distclean-libtool \ - distclean-tags distdir dvi dvi-am html html-am info info-am \ - install install-am install-commonHEADERS install-data \ - install-data-am install-dvi install-dvi-am install-exec \ - install-exec-am install-html install-html-am install-info \ - install-info-am install-libLTLIBRARIES \ - install-libwebpincludeHEADERS install-man install-pdf \ - install-pdf-am install-pkgconfigDATA install-ps install-ps-am \ - install-strip installcheck installcheck-am installdirs \ - installdirs-am maintainer-clean maintainer-clean-generic \ - mostlyclean mostlyclean-compile mostlyclean-generic \ - mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ - uninstall-am uninstall-commonHEADERS uninstall-libLTLIBRARIES \ - uninstall-libwebpincludeHEADERS uninstall-pkgconfigDATA - -.PRECIOUS: Makefile - - -${pkgconfig_DATA}: ${top_builddir}/config.status - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/Extended/libwebp/src/Makefile.am b/Extended/libwebp/src/Makefile.am deleted file mode 100644 index bcebf73..0000000 --- a/Extended/libwebp/src/Makefile.am +++ /dev/null @@ -1,55 +0,0 @@ -# The mux and demux libraries depend on libwebp, thus the '.' to force -# the build order so it's available to them. -SUBDIRS = dec enc dsp utils . -if BUILD_MUX - SUBDIRS += mux -endif -if BUILD_DEMUX - SUBDIRS += demux -endif - -lib_LTLIBRARIES = libwebp.la - -if BUILD_LIBWEBPDECODER - lib_LTLIBRARIES += libwebpdecoder.la -endif - -common_HEADERS = -common_HEADERS += webp/decode.h -common_HEADERS += webp/types.h -commondir = $(includedir)/webp - -libwebp_la_SOURCES = -libwebpinclude_HEADERS = -libwebpinclude_HEADERS += webp/encode.h - -noinst_HEADERS = -noinst_HEADERS += webp/format_constants.h - -libwebp_la_LIBADD = -libwebp_la_LIBADD += dec/libwebpdecode.la -libwebp_la_LIBADD += dsp/libwebpdsp.la -libwebp_la_LIBADD += enc/libwebpencode.la -libwebp_la_LIBADD += utils/libwebputils.la - -# Use '-no-undefined' to declare that libwebp does not depend on any libraries -# other than the ones listed on the command line, i.e., after linking, it will -# not have unresolved symbols. Some platforms (Windows among them) require all -# symbols in shared libraries to be resolved at library creation. -libwebp_la_LDFLAGS = -no-undefined -version-info 8:0:1 -libwebpincludedir = $(includedir)/webp -pkgconfig_DATA = libwebp.pc - -if BUILD_LIBWEBPDECODER - libwebpdecoder_la_SOURCES = - - libwebpdecoder_la_LIBADD = - libwebpdecoder_la_LIBADD += dec/libwebpdecode.la - libwebpdecoder_la_LIBADD += dsp/libwebpdspdecode.la - libwebpdecoder_la_LIBADD += utils/libwebputilsdecode.la - - libwebpdecoder_la_LDFLAGS = -no-undefined -version-info 4:0:1 - pkgconfig_DATA += libwebpdecoder.pc -endif - -${pkgconfig_DATA}: ${top_builddir}/config.status diff --git a/Extended/libwebp/src/Makefile.in b/Extended/libwebp/src/Makefile.in deleted file mode 100644 index 475e381..0000000 --- a/Extended/libwebp/src/Makefile.in +++ /dev/null @@ -1,882 +0,0 @@ -# Makefile.in generated by automake 1.16.1 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994-2018 Free Software Foundation, Inc. - -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -@SET_MAKE@ - - - -VPATH = @srcdir@ -am__is_gnu_make = { \ - if test -z '$(MAKELEVEL)'; then \ - false; \ - elif test -n '$(MAKE_HOST)'; then \ - true; \ - elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ - true; \ - else \ - false; \ - fi; \ -} -am__make_running_with_option = \ - case $${target_option-} in \ - ?) ;; \ - *) echo "am__make_running_with_option: internal error: invalid" \ - "target option '$${target_option-}' specified" >&2; \ - exit 1;; \ - esac; \ - has_opt=no; \ - sane_makeflags=$$MAKEFLAGS; \ - if $(am__is_gnu_make); then \ - sane_makeflags=$$MFLAGS; \ - else \ - case $$MAKEFLAGS in \ - *\\[\ \ ]*) \ - bs=\\; \ - sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ - | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ - esac; \ - fi; \ - skip_next=no; \ - strip_trailopt () \ - { \ - flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ - }; \ - for flg in $$sane_makeflags; do \ - test $$skip_next = yes && { skip_next=no; continue; }; \ - case $$flg in \ - *=*|--*) continue;; \ - -*I) strip_trailopt 'I'; skip_next=yes;; \ - -*I?*) strip_trailopt 'I';; \ - -*O) strip_trailopt 'O'; skip_next=yes;; \ - -*O?*) strip_trailopt 'O';; \ - -*l) strip_trailopt 'l'; skip_next=yes;; \ - -*l?*) strip_trailopt 'l';; \ - -[dEDm]) skip_next=yes;; \ - -[JT]) skip_next=yes;; \ - esac; \ - case $$flg in \ - *$$target_option*) has_opt=yes; break;; \ - esac; \ - done; \ - test $$has_opt = yes -am__make_dryrun = (target_option=n; $(am__make_running_with_option)) -am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) -pkgdatadir = $(datadir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkglibexecdir = $(libexecdir)/@PACKAGE@ -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = @build@ -host_triplet = @host@ -@BUILD_MUX_TRUE@am__append_1 = mux -@BUILD_DEMUX_TRUE@am__append_2 = demux -@BUILD_LIBWEBPDECODER_TRUE@am__append_3 = libwebpdecoder.la -@BUILD_LIBWEBPDECODER_TRUE@am__append_4 = libwebpdecoder.pc -subdir = src -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pthread.m4 \ - $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ - $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ - $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -DIST_COMMON = $(srcdir)/Makefile.am $(common_HEADERS) \ - $(libwebpinclude_HEADERS) $(noinst_HEADERS) $(am__DIST_COMMON) -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = $(top_builddir)/src/webp/config.h -CONFIG_CLEAN_FILES = libwebp.pc libwebpdecoder.pc -CONFIG_CLEAN_VPATH_FILES = -am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; -am__vpath_adj = case $$p in \ - $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ - *) f=$$p;; \ - esac; -am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; -am__install_max = 40 -am__nobase_strip_setup = \ - srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` -am__nobase_strip = \ - for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" -am__nobase_list = $(am__nobase_strip_setup); \ - for p in $$list; do echo "$$p $$p"; done | \ - sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ - $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ - if (++n[$$2] == $(am__install_max)) \ - { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ - END { for (dir in files) print dir, files[dir] }' -am__base_list = \ - sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ - sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' -am__uninstall_files_from_dir = { \ - test -z "$$files" \ - || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ - || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ - $(am__cd) "$$dir" && rm -f $$files; }; \ - } -am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(pkgconfigdir)" \ - "$(DESTDIR)$(commondir)" "$(DESTDIR)$(libwebpincludedir)" -LTLIBRARIES = $(lib_LTLIBRARIES) -libwebp_la_DEPENDENCIES = dec/libwebpdecode.la dsp/libwebpdsp.la \ - enc/libwebpencode.la utils/libwebputils.la -am_libwebp_la_OBJECTS = -libwebp_la_OBJECTS = $(am_libwebp_la_OBJECTS) -AM_V_lt = $(am__v_lt_@AM_V@) -am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) -am__v_lt_0 = --silent -am__v_lt_1 = -libwebp_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ - $(libwebp_la_LDFLAGS) $(LDFLAGS) -o $@ -@BUILD_LIBWEBPDECODER_TRUE@libwebpdecoder_la_DEPENDENCIES = \ -@BUILD_LIBWEBPDECODER_TRUE@ dec/libwebpdecode.la \ -@BUILD_LIBWEBPDECODER_TRUE@ dsp/libwebpdspdecode.la \ -@BUILD_LIBWEBPDECODER_TRUE@ utils/libwebputilsdecode.la -am_libwebpdecoder_la_OBJECTS = -libwebpdecoder_la_OBJECTS = $(am_libwebpdecoder_la_OBJECTS) -libwebpdecoder_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ - $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ - $(AM_CFLAGS) $(CFLAGS) $(libwebpdecoder_la_LDFLAGS) $(LDFLAGS) \ - -o $@ -@BUILD_LIBWEBPDECODER_TRUE@am_libwebpdecoder_la_rpath = -rpath \ -@BUILD_LIBWEBPDECODER_TRUE@ $(libdir) -AM_V_P = $(am__v_P_@AM_V@) -am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) -am__v_P_0 = false -am__v_P_1 = : -AM_V_GEN = $(am__v_GEN_@AM_V@) -am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) -am__v_GEN_0 = @echo " GEN " $@; -am__v_GEN_1 = -AM_V_at = $(am__v_at_@AM_V@) -am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) -am__v_at_0 = @ -am__v_at_1 = -DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/src/webp -COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ - $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CFLAGS) $(CFLAGS) -AM_V_CC = $(am__v_CC_@AM_V@) -am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) -am__v_CC_0 = @echo " CC " $@; -am__v_CC_1 = -CCLD = $(CC) -LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ - $(AM_LDFLAGS) $(LDFLAGS) -o $@ -AM_V_CCLD = $(am__v_CCLD_@AM_V@) -am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) -am__v_CCLD_0 = @echo " CCLD " $@; -am__v_CCLD_1 = -SOURCES = $(libwebp_la_SOURCES) $(libwebpdecoder_la_SOURCES) -DIST_SOURCES = $(libwebp_la_SOURCES) $(libwebpdecoder_la_SOURCES) -RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ - ctags-recursive dvi-recursive html-recursive info-recursive \ - install-data-recursive install-dvi-recursive \ - install-exec-recursive install-html-recursive \ - install-info-recursive install-pdf-recursive \ - install-ps-recursive install-recursive installcheck-recursive \ - installdirs-recursive pdf-recursive ps-recursive \ - tags-recursive uninstall-recursive -am__can_run_installinfo = \ - case $$AM_UPDATE_INFO_DIR in \ - n|no|NO) false;; \ - *) (install-info --version) >/dev/null 2>&1;; \ - esac -DATA = $(pkgconfig_DATA) -HEADERS = $(common_HEADERS) $(libwebpinclude_HEADERS) \ - $(noinst_HEADERS) -RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ - distclean-recursive maintainer-clean-recursive -am__recursive_targets = \ - $(RECURSIVE_TARGETS) \ - $(RECURSIVE_CLEAN_TARGETS) \ - $(am__extra_recursive_targets) -AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ - distdir distdir-am -am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) -# Read a list of newline-separated strings from the standard input, -# and print each of them once, without duplicates. Input order is -# *not* preserved. -am__uniquify_input = $(AWK) '\ - BEGIN { nonempty = 0; } \ - { items[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in items) print i; }; } \ -' -# Make sure the list of sources is unique. This is necessary because, -# e.g., the same source file might be shared among _SOURCES variables -# for different programs/libraries. -am__define_uniq_tagged_files = \ - list='$(am__tagged_files)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | $(am__uniquify_input)` -ETAGS = etags -CTAGS = ctags -DIST_SUBDIRS = dec enc dsp utils . mux demux -am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/libwebp.pc.in \ - $(srcdir)/libwebpdecoder.pc.in -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -am__relativize = \ - dir0=`pwd`; \ - sed_first='s,^\([^/]*\)/.*$$,\1,'; \ - sed_rest='s,^[^/]*/*,,'; \ - sed_last='s,^.*/\([^/]*\)$$,\1,'; \ - sed_butlast='s,/*[^/]*$$,,'; \ - while test -n "$$dir1"; do \ - first=`echo "$$dir1" | sed -e "$$sed_first"`; \ - if test "$$first" != "."; then \ - if test "$$first" = ".."; then \ - dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ - dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ - else \ - first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ - if test "$$first2" = "$$first"; then \ - dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ - else \ - dir2="../$$dir2"; \ - fi; \ - dir0="$$dir0"/"$$first"; \ - fi; \ - fi; \ - dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ - done; \ - reldir="$$dir2" -ACLOCAL = @ACLOCAL@ -AMTAR = @AMTAR@ -AM_CFLAGS = @AM_CFLAGS@ -AM_CPPFLAGS = @AM_CPPFLAGS@ -AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ -AR = @AR@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -CC = @CC@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -DLLTOOL = @DLLTOOL@ -DSYMUTIL = @DSYMUTIL@ -DUMPBIN = @DUMPBIN@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -FGREP = @FGREP@ -GIF_INCLUDES = @GIF_INCLUDES@ -GIF_LIBS = @GIF_LIBS@ -GL_INCLUDES = @GL_INCLUDES@ -GL_LIBS = @GL_LIBS@ -GREP = @GREP@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -JPEG_INCLUDES = @JPEG_INCLUDES@ -JPEG_LIBS = @JPEG_LIBS@ -LD = @LD@ -LDFLAGS = @LDFLAGS@ -LIBOBJS = @LIBOBJS@ -LIBPNG_CONFIG = @LIBPNG_CONFIG@ -LIBS = @LIBS@ -LIBSDL_CONFIG = @LIBSDL_CONFIG@ -LIBTOOL = @LIBTOOL@ -LIPO = @LIPO@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ -MAKEINFO = @MAKEINFO@ -MANIFEST_TOOL = @MANIFEST_TOOL@ -MKDIR_P = @MKDIR_P@ -NEON_FLAGS = @NEON_FLAGS@ -NM = @NM@ -NMEDIT = @NMEDIT@ -OBJDUMP = @OBJDUMP@ -OBJEXT = @OBJEXT@ -OTOOL = @OTOOL@ -OTOOL64 = @OTOOL64@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_URL = @PACKAGE_URL@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -PNG_INCLUDES = @PNG_INCLUDES@ -PNG_LIBS = @PNG_LIBS@ -PTHREAD_CC = @PTHREAD_CC@ -PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ -PTHREAD_LIBS = @PTHREAD_LIBS@ -RANLIB = @RANLIB@ -SDL_INCLUDES = @SDL_INCLUDES@ -SDL_LIBS = @SDL_LIBS@ -SED = @SED@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -SSE2_FLAGS = @SSE2_FLAGS@ -SSE41_FLAGS = @SSE41_FLAGS@ -STRIP = @STRIP@ -TIFF_INCLUDES = @TIFF_INCLUDES@ -TIFF_LIBS = @TIFF_LIBS@ -USE_SWAP_16BIT_CSP = @USE_SWAP_16BIT_CSP@ -VERSION = @VERSION@ -abs_builddir = @abs_builddir@ -abs_srcdir = @abs_srcdir@ -abs_top_builddir = @abs_top_builddir@ -abs_top_srcdir = @abs_top_srcdir@ -ac_ct_AR = @ac_ct_AR@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ -am__include = @am__include@ -am__leading_dot = @am__leading_dot@ -am__quote = @am__quote@ -am__tar = @am__tar@ -am__untar = @am__untar@ -ax_pthread_config = @ax_pthread_config@ -bindir = @bindir@ -build = @build@ -build_alias = @build_alias@ -build_cpu = @build_cpu@ -build_os = @build_os@ -build_vendor = @build_vendor@ -builddir = @builddir@ -datadir = @datadir@ -datarootdir = @datarootdir@ -docdir = @docdir@ -dvidir = @dvidir@ -exec_prefix = @exec_prefix@ -host = @host@ -host_alias = @host_alias@ -host_cpu = @host_cpu@ -host_os = @host_os@ -host_vendor = @host_vendor@ -htmldir = @htmldir@ -includedir = @includedir@ -infodir = @infodir@ -install_sh = @install_sh@ -libdir = @libdir@ -libexecdir = @libexecdir@ -localedir = @localedir@ -localstatedir = @localstatedir@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -oldincludedir = @oldincludedir@ -pdfdir = @pdfdir@ -pkgconfigdir = @pkgconfigdir@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -psdir = @psdir@ -runstatedir = @runstatedir@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -srcdir = @srcdir@ -sysconfdir = @sysconfdir@ -target_alias = @target_alias@ -top_build_prefix = @top_build_prefix@ -top_builddir = @top_builddir@ -top_srcdir = @top_srcdir@ - -# The mux and demux libraries depend on libwebp, thus the '.' to force -# the build order so it's available to them. -SUBDIRS = dec enc dsp utils . $(am__append_1) $(am__append_2) -lib_LTLIBRARIES = libwebp.la $(am__append_3) -common_HEADERS = webp/decode.h webp/types.h -commondir = $(includedir)/webp -libwebp_la_SOURCES = -libwebpinclude_HEADERS = webp/encode.h -noinst_HEADERS = webp/format_constants.h -libwebp_la_LIBADD = dec/libwebpdecode.la dsp/libwebpdsp.la \ - enc/libwebpencode.la utils/libwebputils.la - -# Use '-no-undefined' to declare that libwebp does not depend on any libraries -# other than the ones listed on the command line, i.e., after linking, it will -# not have unresolved symbols. Some platforms (Windows among them) require all -# symbols in shared libraries to be resolved at library creation. -libwebp_la_LDFLAGS = -no-undefined -version-info 8:0:1 -libwebpincludedir = $(includedir)/webp -pkgconfig_DATA = libwebp.pc $(am__append_4) -@BUILD_LIBWEBPDECODER_TRUE@libwebpdecoder_la_SOURCES = -@BUILD_LIBWEBPDECODER_TRUE@libwebpdecoder_la_LIBADD = \ -@BUILD_LIBWEBPDECODER_TRUE@ dec/libwebpdecode.la \ -@BUILD_LIBWEBPDECODER_TRUE@ dsp/libwebpdspdecode.la \ -@BUILD_LIBWEBPDECODER_TRUE@ utils/libwebputilsdecode.la -@BUILD_LIBWEBPDECODER_TRUE@libwebpdecoder_la_LDFLAGS = -no-undefined -version-info 4:0:1 -all: all-recursive - -.SUFFIXES: -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ - && { if test -f $@; then exit 0; else break; fi; }; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --foreign src/Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(am__aclocal_m4_deps): -libwebp.pc: $(top_builddir)/config.status $(srcdir)/libwebp.pc.in - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ -libwebpdecoder.pc: $(top_builddir)/config.status $(srcdir)/libwebpdecoder.pc.in - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ - -install-libLTLIBRARIES: $(lib_LTLIBRARIES) - @$(NORMAL_INSTALL) - @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ - list2=; for p in $$list; do \ - if test -f $$p; then \ - list2="$$list2 $$p"; \ - else :; fi; \ - done; \ - test -z "$$list2" || { \ - echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ - $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ - echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ - $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ - } - -uninstall-libLTLIBRARIES: - @$(NORMAL_UNINSTALL) - @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ - for p in $$list; do \ - $(am__strip_dir) \ - echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ - $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ - done - -clean-libLTLIBRARIES: - -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) - @list='$(lib_LTLIBRARIES)'; \ - locs=`for p in $$list; do echo $$p; done | \ - sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ - sort -u`; \ - test -z "$$locs" || { \ - echo rm -f $${locs}; \ - rm -f $${locs}; \ - } - -libwebp.la: $(libwebp_la_OBJECTS) $(libwebp_la_DEPENDENCIES) $(EXTRA_libwebp_la_DEPENDENCIES) - $(AM_V_CCLD)$(libwebp_la_LINK) -rpath $(libdir) $(libwebp_la_OBJECTS) $(libwebp_la_LIBADD) $(LIBS) - -libwebpdecoder.la: $(libwebpdecoder_la_OBJECTS) $(libwebpdecoder_la_DEPENDENCIES) $(EXTRA_libwebpdecoder_la_DEPENDENCIES) - $(AM_V_CCLD)$(libwebpdecoder_la_LINK) $(am_libwebpdecoder_la_rpath) $(libwebpdecoder_la_OBJECTS) $(libwebpdecoder_la_LIBADD) $(LIBS) - -mostlyclean-compile: - -rm -f *.$(OBJEXT) - -distclean-compile: - -rm -f *.tab.c - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs -install-pkgconfigDATA: $(pkgconfig_DATA) - @$(NORMAL_INSTALL) - @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ - if test -n "$$list"; then \ - echo " $(MKDIR_P) '$(DESTDIR)$(pkgconfigdir)'"; \ - $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)" || exit 1; \ - fi; \ - for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - echo "$$d$$p"; \ - done | $(am__base_list) | \ - while read files; do \ - echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgconfigdir)'"; \ - $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \ - done - -uninstall-pkgconfigDATA: - @$(NORMAL_UNINSTALL) - @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ - files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ - dir='$(DESTDIR)$(pkgconfigdir)'; $(am__uninstall_files_from_dir) -install-commonHEADERS: $(common_HEADERS) - @$(NORMAL_INSTALL) - @list='$(common_HEADERS)'; test -n "$(commondir)" || list=; \ - if test -n "$$list"; then \ - echo " $(MKDIR_P) '$(DESTDIR)$(commondir)'"; \ - $(MKDIR_P) "$(DESTDIR)$(commondir)" || exit 1; \ - fi; \ - for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - echo "$$d$$p"; \ - done | $(am__base_list) | \ - while read files; do \ - echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(commondir)'"; \ - $(INSTALL_HEADER) $$files "$(DESTDIR)$(commondir)" || exit $$?; \ - done - -uninstall-commonHEADERS: - @$(NORMAL_UNINSTALL) - @list='$(common_HEADERS)'; test -n "$(commondir)" || list=; \ - files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ - dir='$(DESTDIR)$(commondir)'; $(am__uninstall_files_from_dir) -install-libwebpincludeHEADERS: $(libwebpinclude_HEADERS) - @$(NORMAL_INSTALL) - @list='$(libwebpinclude_HEADERS)'; test -n "$(libwebpincludedir)" || list=; \ - if test -n "$$list"; then \ - echo " $(MKDIR_P) '$(DESTDIR)$(libwebpincludedir)'"; \ - $(MKDIR_P) "$(DESTDIR)$(libwebpincludedir)" || exit 1; \ - fi; \ - for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - echo "$$d$$p"; \ - done | $(am__base_list) | \ - while read files; do \ - echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(libwebpincludedir)'"; \ - $(INSTALL_HEADER) $$files "$(DESTDIR)$(libwebpincludedir)" || exit $$?; \ - done - -uninstall-libwebpincludeHEADERS: - @$(NORMAL_UNINSTALL) - @list='$(libwebpinclude_HEADERS)'; test -n "$(libwebpincludedir)" || list=; \ - files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ - dir='$(DESTDIR)$(libwebpincludedir)'; $(am__uninstall_files_from_dir) - -# This directory's subdirectories are mostly independent; you can cd -# into them and run 'make' without going through this Makefile. -# To change the values of 'make' variables: instead of editing Makefiles, -# (1) if the variable is set in 'config.status', edit 'config.status' -# (which will cause the Makefiles to be regenerated when you run 'make'); -# (2) otherwise, pass the desired values on the 'make' command line. -$(am__recursive_targets): - @fail=; \ - if $(am__make_keepgoing); then \ - failcom='fail=yes'; \ - else \ - failcom='exit 1'; \ - fi; \ - dot_seen=no; \ - target=`echo $@ | sed s/-recursive//`; \ - case "$@" in \ - distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ - *) list='$(SUBDIRS)' ;; \ - esac; \ - for subdir in $$list; do \ - echo "Making $$target in $$subdir"; \ - if test "$$subdir" = "."; then \ - dot_seen=yes; \ - local_target="$$target-am"; \ - else \ - local_target="$$target"; \ - fi; \ - ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ - || eval $$failcom; \ - done; \ - if test "$$dot_seen" = "no"; then \ - $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ - fi; test -z "$$fail" - -ID: $(am__tagged_files) - $(am__define_uniq_tagged_files); mkid -fID $$unique -tags: tags-recursive -TAGS: tags - -tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) - set x; \ - here=`pwd`; \ - if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ - include_option=--etags-include; \ - empty_fix=.; \ - else \ - include_option=--include; \ - empty_fix=; \ - fi; \ - list='$(SUBDIRS)'; for subdir in $$list; do \ - if test "$$subdir" = .; then :; else \ - test ! -f $$subdir/TAGS || \ - set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ - fi; \ - done; \ - $(am__define_uniq_tagged_files); \ - shift; \ - if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ - test -n "$$unique" || unique=$$empty_fix; \ - if test $$# -gt 0; then \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - "$$@" $$unique; \ - else \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$unique; \ - fi; \ - fi -ctags: ctags-recursive - -CTAGS: ctags -ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) - $(am__define_uniq_tagged_files); \ - test -z "$(CTAGS_ARGS)$$unique" \ - || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$unique - -GTAGS: - here=`$(am__cd) $(top_builddir) && pwd` \ - && $(am__cd) $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) "$$here" -cscopelist: cscopelist-recursive - -cscopelist-am: $(am__tagged_files) - list='$(am__tagged_files)'; \ - case "$(srcdir)" in \ - [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ - *) sdir=$(subdir)/$(srcdir) ;; \ - esac; \ - for i in $$list; do \ - if test -f "$$i"; then \ - echo "$(subdir)/$$i"; \ - else \ - echo "$$sdir/$$i"; \ - fi; \ - done >> $(top_builddir)/cscope.files - -distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - -distdir: $(BUILT_SOURCES) - $(MAKE) $(AM_MAKEFLAGS) distdir-am - -distdir-am: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - list='$(DISTFILES)'; \ - dist_files=`for file in $$list; do echo $$file; done | \ - sed -e "s|^$$srcdirstrip/||;t" \ - -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ - case $$dist_files in \ - */*) $(MKDIR_P) `echo "$$dist_files" | \ - sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ - sort -u` ;; \ - esac; \ - for file in $$dist_files; do \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - if test -d $$d/$$file; then \ - dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test -d "$(distdir)/$$file"; then \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ - else \ - test -f "$(distdir)/$$file" \ - || cp -p $$d/$$file "$(distdir)/$$file" \ - || exit 1; \ - fi; \ - done - @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ - if test "$$subdir" = .; then :; else \ - $(am__make_dryrun) \ - || test -d "$(distdir)/$$subdir" \ - || $(MKDIR_P) "$(distdir)/$$subdir" \ - || exit 1; \ - dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ - $(am__relativize); \ - new_distdir=$$reldir; \ - dir1=$$subdir; dir2="$(top_distdir)"; \ - $(am__relativize); \ - new_top_distdir=$$reldir; \ - echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ - echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ - ($(am__cd) $$subdir && \ - $(MAKE) $(AM_MAKEFLAGS) \ - top_distdir="$$new_top_distdir" \ - distdir="$$new_distdir" \ - am__remove_distdir=: \ - am__skip_length_check=: \ - am__skip_mode_fix=: \ - distdir) \ - || exit 1; \ - fi; \ - done -check-am: all-am -check: check-recursive -all-am: Makefile $(LTLIBRARIES) $(DATA) $(HEADERS) -installdirs: installdirs-recursive -installdirs-am: - for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(pkgconfigdir)" "$(DESTDIR)$(commondir)" "$(DESTDIR)$(libwebpincludedir)"; do \ - test -z "$$dir" || $(MKDIR_P) "$$dir"; \ - done -install: install-recursive -install-exec: install-exec-recursive -install-data: install-data-recursive -uninstall: uninstall-recursive - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-recursive -install-strip: - if test -z '$(STRIP)'; then \ - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - install; \ - else \ - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ - fi -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-recursive - -clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ - mostlyclean-am - -distclean: distclean-recursive - -rm -f Makefile -distclean-am: clean-am distclean-compile distclean-generic \ - distclean-tags - -dvi: dvi-recursive - -dvi-am: - -html: html-recursive - -html-am: - -info: info-recursive - -info-am: - -install-data-am: install-commonHEADERS install-libwebpincludeHEADERS \ - install-pkgconfigDATA - -install-dvi: install-dvi-recursive - -install-dvi-am: - -install-exec-am: install-libLTLIBRARIES - -install-html: install-html-recursive - -install-html-am: - -install-info: install-info-recursive - -install-info-am: - -install-man: - -install-pdf: install-pdf-recursive - -install-pdf-am: - -install-ps: install-ps-recursive - -install-ps-am: - -installcheck-am: - -maintainer-clean: maintainer-clean-recursive - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-recursive - -mostlyclean-am: mostlyclean-compile mostlyclean-generic \ - mostlyclean-libtool - -pdf: pdf-recursive - -pdf-am: - -ps: ps-recursive - -ps-am: - -uninstall-am: uninstall-commonHEADERS uninstall-libLTLIBRARIES \ - uninstall-libwebpincludeHEADERS uninstall-pkgconfigDATA - -.MAKE: $(am__recursive_targets) install-am install-strip - -.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ - check-am clean clean-generic clean-libLTLIBRARIES \ - clean-libtool cscopelist-am ctags ctags-am distclean \ - distclean-compile distclean-generic distclean-libtool \ - distclean-tags distdir dvi dvi-am html html-am info info-am \ - install install-am install-commonHEADERS install-data \ - install-data-am install-dvi install-dvi-am install-exec \ - install-exec-am install-html install-html-am install-info \ - install-info-am install-libLTLIBRARIES \ - install-libwebpincludeHEADERS install-man install-pdf \ - install-pdf-am install-pkgconfigDATA install-ps install-ps-am \ - install-strip installcheck installcheck-am installdirs \ - installdirs-am maintainer-clean maintainer-clean-generic \ - mostlyclean mostlyclean-compile mostlyclean-generic \ - mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ - uninstall-am uninstall-commonHEADERS uninstall-libLTLIBRARIES \ - uninstall-libwebpincludeHEADERS uninstall-pkgconfigDATA - -.PRECIOUS: Makefile - - -${pkgconfig_DATA}: ${top_builddir}/config.status - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/Extended/libwebp/src/dec/.deps/libwebpdecode_la-alpha_dec.Plo b/Extended/libwebp/src/dec/.deps/libwebpdecode_la-alpha_dec.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/dec/.deps/libwebpdecode_la-alpha_dec.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/dec/.deps/libwebpdecode_la-buffer_dec.Plo b/Extended/libwebp/src/dec/.deps/libwebpdecode_la-buffer_dec.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/dec/.deps/libwebpdecode_la-buffer_dec.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/dec/.deps/libwebpdecode_la-frame_dec.Plo b/Extended/libwebp/src/dec/.deps/libwebpdecode_la-frame_dec.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/dec/.deps/libwebpdecode_la-frame_dec.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/dec/.deps/libwebpdecode_la-idec_dec.Plo b/Extended/libwebp/src/dec/.deps/libwebpdecode_la-idec_dec.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/dec/.deps/libwebpdecode_la-idec_dec.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/dec/.deps/libwebpdecode_la-io_dec.Plo b/Extended/libwebp/src/dec/.deps/libwebpdecode_la-io_dec.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/dec/.deps/libwebpdecode_la-io_dec.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/dec/.deps/libwebpdecode_la-quant_dec.Plo b/Extended/libwebp/src/dec/.deps/libwebpdecode_la-quant_dec.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/dec/.deps/libwebpdecode_la-quant_dec.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/dec/.deps/libwebpdecode_la-tree_dec.Plo b/Extended/libwebp/src/dec/.deps/libwebpdecode_la-tree_dec.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/dec/.deps/libwebpdecode_la-tree_dec.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/dec/.deps/libwebpdecode_la-vp8_dec.Plo b/Extended/libwebp/src/dec/.deps/libwebpdecode_la-vp8_dec.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/dec/.deps/libwebpdecode_la-vp8_dec.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/dec/.deps/libwebpdecode_la-vp8l_dec.Plo b/Extended/libwebp/src/dec/.deps/libwebpdecode_la-vp8l_dec.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/dec/.deps/libwebpdecode_la-vp8l_dec.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/dec/.deps/libwebpdecode_la-webp_dec.Plo b/Extended/libwebp/src/dec/.deps/libwebpdecode_la-webp_dec.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/dec/.deps/libwebpdecode_la-webp_dec.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/dec/Makefile b/Extended/libwebp/src/dec/Makefile deleted file mode 100644 index c65ae26..0000000 --- a/Extended/libwebp/src/dec/Makefile +++ /dev/null @@ -1,796 +0,0 @@ -# Makefile.in generated by automake 1.16.1 from Makefile.am. -# src/dec/Makefile. Generated from Makefile.in by configure. - -# Copyright (C) 1994-2018 Free Software Foundation, Inc. - -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - - - - - -am__is_gnu_make = { \ - if test -z '$(MAKELEVEL)'; then \ - false; \ - elif test -n '$(MAKE_HOST)'; then \ - true; \ - elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ - true; \ - else \ - false; \ - fi; \ -} -am__make_running_with_option = \ - case $${target_option-} in \ - ?) ;; \ - *) echo "am__make_running_with_option: internal error: invalid" \ - "target option '$${target_option-}' specified" >&2; \ - exit 1;; \ - esac; \ - has_opt=no; \ - sane_makeflags=$$MAKEFLAGS; \ - if $(am__is_gnu_make); then \ - sane_makeflags=$$MFLAGS; \ - else \ - case $$MAKEFLAGS in \ - *\\[\ \ ]*) \ - bs=\\; \ - sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ - | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ - esac; \ - fi; \ - skip_next=no; \ - strip_trailopt () \ - { \ - flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ - }; \ - for flg in $$sane_makeflags; do \ - test $$skip_next = yes && { skip_next=no; continue; }; \ - case $$flg in \ - *=*|--*) continue;; \ - -*I) strip_trailopt 'I'; skip_next=yes;; \ - -*I?*) strip_trailopt 'I';; \ - -*O) strip_trailopt 'O'; skip_next=yes;; \ - -*O?*) strip_trailopt 'O';; \ - -*l) strip_trailopt 'l'; skip_next=yes;; \ - -*l?*) strip_trailopt 'l';; \ - -[dEDm]) skip_next=yes;; \ - -[JT]) skip_next=yes;; \ - esac; \ - case $$flg in \ - *$$target_option*) has_opt=yes; break;; \ - esac; \ - done; \ - test $$has_opt = yes -am__make_dryrun = (target_option=n; $(am__make_running_with_option)) -am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) -pkgdatadir = $(datadir)/libwebp -pkgincludedir = $(includedir)/libwebp -pkglibdir = $(libdir)/libwebp -pkglibexecdir = $(libexecdir)/libwebp -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = x86_64-apple-darwin19.6.0 -host_triplet = x86_64-apple-darwin19.6.0 -subdir = src/dec -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pthread.m4 \ - $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ - $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ - $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -DIST_COMMON = $(srcdir)/Makefile.am $(libwebpdecodeinclude_HEADERS) \ - $(noinst_HEADERS) $(am__DIST_COMMON) -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = $(top_builddir)/src/webp/config.h -CONFIG_CLEAN_FILES = -CONFIG_CLEAN_VPATH_FILES = -LTLIBRARIES = $(noinst_LTLIBRARIES) -libwebpdecode_la_LIBADD = -am_libwebpdecode_la_OBJECTS = libwebpdecode_la-alpha_dec.lo \ - libwebpdecode_la-buffer_dec.lo libwebpdecode_la-frame_dec.lo \ - libwebpdecode_la-idec_dec.lo libwebpdecode_la-io_dec.lo \ - libwebpdecode_la-quant_dec.lo libwebpdecode_la-tree_dec.lo \ - libwebpdecode_la-vp8_dec.lo libwebpdecode_la-vp8l_dec.lo \ - libwebpdecode_la-webp_dec.lo -libwebpdecode_la_OBJECTS = $(am_libwebpdecode_la_OBJECTS) -AM_V_lt = $(am__v_lt_$(V)) -am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) -am__v_lt_0 = --silent -am__v_lt_1 = -AM_V_P = $(am__v_P_$(V)) -am__v_P_ = $(am__v_P_$(AM_DEFAULT_VERBOSITY)) -am__v_P_0 = false -am__v_P_1 = : -AM_V_GEN = $(am__v_GEN_$(V)) -am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) -am__v_GEN_0 = @echo " GEN " $@; -am__v_GEN_1 = -AM_V_at = $(am__v_at_$(V)) -am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) -am__v_at_0 = @ -am__v_at_1 = -DEFAULT_INCLUDES = -I. -I$(top_builddir)/src/webp -depcomp = $(SHELL) $(top_srcdir)/depcomp -am__maybe_remake_depfiles = depfiles -am__depfiles_remade = ./$(DEPDIR)/libwebpdecode_la-alpha_dec.Plo \ - ./$(DEPDIR)/libwebpdecode_la-buffer_dec.Plo \ - ./$(DEPDIR)/libwebpdecode_la-frame_dec.Plo \ - ./$(DEPDIR)/libwebpdecode_la-idec_dec.Plo \ - ./$(DEPDIR)/libwebpdecode_la-io_dec.Plo \ - ./$(DEPDIR)/libwebpdecode_la-quant_dec.Plo \ - ./$(DEPDIR)/libwebpdecode_la-tree_dec.Plo \ - ./$(DEPDIR)/libwebpdecode_la-vp8_dec.Plo \ - ./$(DEPDIR)/libwebpdecode_la-vp8l_dec.Plo \ - ./$(DEPDIR)/libwebpdecode_la-webp_dec.Plo -am__mv = mv -f -COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ - $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CFLAGS) $(CFLAGS) -AM_V_CC = $(am__v_CC_$(V)) -am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) -am__v_CC_0 = @echo " CC " $@; -am__v_CC_1 = -CCLD = $(CC) -LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ - $(AM_LDFLAGS) $(LDFLAGS) -o $@ -AM_V_CCLD = $(am__v_CCLD_$(V)) -am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) -am__v_CCLD_0 = @echo " CCLD " $@; -am__v_CCLD_1 = -SOURCES = $(libwebpdecode_la_SOURCES) -DIST_SOURCES = $(libwebpdecode_la_SOURCES) -am__can_run_installinfo = \ - case $$AM_UPDATE_INFO_DIR in \ - n|no|NO) false;; \ - *) (install-info --version) >/dev/null 2>&1;; \ - esac -am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; -am__vpath_adj = case $$p in \ - $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ - *) f=$$p;; \ - esac; -am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; -am__install_max = 40 -am__nobase_strip_setup = \ - srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` -am__nobase_strip = \ - for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" -am__nobase_list = $(am__nobase_strip_setup); \ - for p in $$list; do echo "$$p $$p"; done | \ - sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ - $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ - if (++n[$$2] == $(am__install_max)) \ - { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ - END { for (dir in files) print dir, files[dir] }' -am__base_list = \ - sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ - sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' -am__uninstall_files_from_dir = { \ - test -z "$$files" \ - || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ - || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ - $(am__cd) "$$dir" && rm -f $$files; }; \ - } -am__installdirs = "$(DESTDIR)$(libwebpdecodeincludedir)" -HEADERS = $(libwebpdecodeinclude_HEADERS) $(noinst_HEADERS) -am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) -# Read a list of newline-separated strings from the standard input, -# and print each of them once, without duplicates. Input order is -# *not* preserved. -am__uniquify_input = $(AWK) '\ - BEGIN { nonempty = 0; } \ - { items[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in items) print i; }; } \ -' -# Make sure the list of sources is unique. This is necessary because, -# e.g., the same source file might be shared among _SOURCES variables -# for different programs/libraries. -am__define_uniq_tagged_files = \ - list='$(am__tagged_files)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | $(am__uniquify_input)` -ETAGS = etags -CTAGS = ctags -am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = ${SHELL} /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp/missing aclocal-1.16 -AMTAR = $${TAR-tar} -AM_CFLAGS = -fvisibility=hidden -Wall -Wconstant-conversion -Wdeclaration-after-statement -Wextra -Wfloat-conversion -Wformat -Wformat-nonliteral -Wformat -Wformat-security -Wmissing-declarations -Wmissing-prototypes -Wold-style-definition -Wparentheses-equality -Wshadow -Wshorten-64-to-32 -Wundef -Wunreachable-code -Wunused -Wvla -Wno-deprecated-declarations -AM_CPPFLAGS = -DNDEBUG -I$(top_builddir) -I$(top_srcdir) -AM_DEFAULT_VERBOSITY = 0 -AR = ar -AUTOCONF = ${SHELL} /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp/missing autoconf -AUTOHEADER = ${SHELL} /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp/missing autoheader -AUTOMAKE = ${SHELL} /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp/missing automake-1.16 -AWK = awk -CC = gcc -CCDEPMODE = depmode=gcc3 -CFLAGS = -g -O2 -D_THREAD_SAFE -pthread -CPP = gcc -E -CPPFLAGS = -CYGPATH_W = echo -DEFS = -DHAVE_CONFIG_H -DEPDIR = .deps -DLLTOOL = false -DSYMUTIL = dsymutil -DUMPBIN = -ECHO_C = \c -ECHO_N = -ECHO_T = -EGREP = /usr/bin/grep -E -EXEEXT = -FGREP = /usr/bin/grep -F -GIF_INCLUDES = -GIF_LIBS = -lgif -GL_INCLUDES = -GL_LIBS = -framework GLUT -framework OpenGL -GREP = /usr/bin/grep -INSTALL = /opt/twitter_mde/homebrew_minimal/mde_bin/ginstall -c -INSTALL_DATA = ${INSTALL} -m 644 -INSTALL_PROGRAM = ${INSTALL} -INSTALL_SCRIPT = ${INSTALL} -INSTALL_STRIP_PROGRAM = $(install_sh) -c -s -JPEG_INCLUDES = -DWEBP_HAVE_JPEG -JPEG_LIBS = -ljpeg -LD = /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld -LDFLAGS = -LIBOBJS = -LIBPNG_CONFIG = /opt/twitter_mde/bin/libpng-config -LIBS = -LIBSDL_CONFIG = -LIBTOOL = $(SHELL) $(top_builddir)/libtool -LIPO = lipo -LN_S = ln -s -LTLIBOBJS = -LT_SYS_LIBRARY_PATH = -MAKEINFO = ${SHELL} /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp/missing makeinfo -MANIFEST_TOOL = : -MKDIR_P = /opt/twitter_mde/homebrew_minimal/mde_bin/gmkdir -p -NEON_FLAGS = -NM = /usr/bin/nm -B -NMEDIT = nmedit -OBJDUMP = objdump -OBJEXT = o -OTOOL = otool -OTOOL64 = : -PACKAGE = libwebp -PACKAGE_BUGREPORT = https://bugs.chromium.org/p/webp -PACKAGE_NAME = libwebp -PACKAGE_STRING = libwebp 1.1.0 -PACKAGE_TARNAME = libwebp -PACKAGE_URL = http://developers.google.com/speed/webp -PACKAGE_VERSION = 1.1.0 -PATH_SEPARATOR = : -PNG_INCLUDES = -I/opt/twitter_mde/package/twitter_dev_homebrew/current/Cellar/libpng/1.6.34/include/libpng16 -DWEBP_HAVE_PNG -PNG_LIBS = -L/opt/twitter_mde/package/twitter_dev_homebrew/current/Cellar/libpng/1.6.34/lib -lpng16 -PTHREAD_CC = gcc -PTHREAD_CFLAGS = -D_THREAD_SAFE -pthread -PTHREAD_LIBS = -RANLIB = ranlib -SDL_INCLUDES = -SDL_LIBS = -SED = /usr/bin/sed -SET_MAKE = -SHELL = /bin/sh -SSE2_FLAGS = -msse2 -SSE41_FLAGS = -msse4.1 -STRIP = strip -TIFF_INCLUDES = -DWEBP_HAVE_TIFF -TIFF_LIBS = -ltiff -USE_SWAP_16BIT_CSP = -VERSION = 1.1.0 -abs_builddir = /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp/src/dec -abs_srcdir = /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp/src/dec -abs_top_builddir = /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp -abs_top_srcdir = /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp -ac_ct_AR = ar -ac_ct_CC = gcc -ac_ct_DUMPBIN = -am__include = include -am__leading_dot = . -am__quote = -am__tar = $${TAR-tar} chof - "$$tardir" -am__untar = $${TAR-tar} xf - -ax_pthread_config = -bindir = ${exec_prefix}/bin -build = x86_64-apple-darwin19.6.0 -build_alias = -build_cpu = x86_64 -build_os = darwin19.6.0 -build_vendor = apple -builddir = . -datadir = ${datarootdir} -datarootdir = ${prefix}/share -docdir = ${datarootdir}/doc/${PACKAGE_TARNAME} -dvidir = ${docdir} -exec_prefix = ${prefix} -host = x86_64-apple-darwin19.6.0 -host_alias = -host_cpu = x86_64 -host_os = darwin19.6.0 -host_vendor = apple -htmldir = ${docdir} -includedir = ${prefix}/include -infodir = ${datarootdir}/info -install_sh = ${SHELL} /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp/install-sh -libdir = ${exec_prefix}/lib -libexecdir = ${exec_prefix}/libexec -localedir = ${datarootdir}/locale -localstatedir = ${prefix}/var -mandir = ${datarootdir}/man -mkdir_p = $(MKDIR_P) -oldincludedir = /usr/include -pdfdir = ${docdir} -pkgconfigdir = ${libdir}/pkgconfig -prefix = /usr/local -program_transform_name = s,x,x, -psdir = ${docdir} -runstatedir = ${localstatedir}/run -sbindir = ${exec_prefix}/sbin -sharedstatedir = ${prefix}/com -srcdir = . -sysconfdir = ${prefix}/etc -target_alias = -top_build_prefix = ../../ -top_builddir = ../.. -top_srcdir = ../.. -noinst_LTLIBRARIES = libwebpdecode.la -libwebpdecode_la_SOURCES = alpha_dec.c alphai_dec.h buffer_dec.c \ - common_dec.h vp8_dec.h frame_dec.c idec_dec.c io_dec.c \ - quant_dec.c tree_dec.c vp8_dec.c vp8i_dec.h vp8l_dec.c \ - vp8li_dec.h webp_dec.c webpi_dec.h -libwebpdecodeinclude_HEADERS = ../webp/decode.h ../webp/types.h -noinst_HEADERS = ../webp/format_constants.h -libwebpdecode_la_CPPFLAGS = $(AM_CPPFLAGS) -libwebpdecodeincludedir = $(includedir)/webp -all: all-am - -.SUFFIXES: -.SUFFIXES: .c .lo .o .obj -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ - && { if test -f $@; then exit 0; else break; fi; }; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/dec/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --foreign src/dec/Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(am__aclocal_m4_deps): - -clean-noinstLTLIBRARIES: - -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) - @list='$(noinst_LTLIBRARIES)'; \ - locs=`for p in $$list; do echo $$p; done | \ - sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ - sort -u`; \ - test -z "$$locs" || { \ - echo rm -f $${locs}; \ - rm -f $${locs}; \ - } - -libwebpdecode.la: $(libwebpdecode_la_OBJECTS) $(libwebpdecode_la_DEPENDENCIES) $(EXTRA_libwebpdecode_la_DEPENDENCIES) - $(AM_V_CCLD)$(LINK) $(libwebpdecode_la_OBJECTS) $(libwebpdecode_la_LIBADD) $(LIBS) - -mostlyclean-compile: - -rm -f *.$(OBJEXT) - -distclean-compile: - -rm -f *.tab.c - -include ./$(DEPDIR)/libwebpdecode_la-alpha_dec.Plo # am--include-marker -include ./$(DEPDIR)/libwebpdecode_la-buffer_dec.Plo # am--include-marker -include ./$(DEPDIR)/libwebpdecode_la-frame_dec.Plo # am--include-marker -include ./$(DEPDIR)/libwebpdecode_la-idec_dec.Plo # am--include-marker -include ./$(DEPDIR)/libwebpdecode_la-io_dec.Plo # am--include-marker -include ./$(DEPDIR)/libwebpdecode_la-quant_dec.Plo # am--include-marker -include ./$(DEPDIR)/libwebpdecode_la-tree_dec.Plo # am--include-marker -include ./$(DEPDIR)/libwebpdecode_la-vp8_dec.Plo # am--include-marker -include ./$(DEPDIR)/libwebpdecode_la-vp8l_dec.Plo # am--include-marker -include ./$(DEPDIR)/libwebpdecode_la-webp_dec.Plo # am--include-marker - -$(am__depfiles_remade): - @$(MKDIR_P) $(@D) - @echo '# dummy' >$@-t && $(am__mv) $@-t $@ - -am--depfiles: $(am__depfiles_remade) - -.c.o: - $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ - $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ - $(am__mv) $$depbase.Tpo $$depbase.Po -# $(AM_V_CC)source='$<' object='$@' libtool=no \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(COMPILE) -c -o $@ $< - -.c.obj: - $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ - $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ - $(am__mv) $$depbase.Tpo $$depbase.Po -# $(AM_V_CC)source='$<' object='$@' libtool=no \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` - -.c.lo: - $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ - $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ - $(am__mv) $$depbase.Tpo $$depbase.Plo -# $(AM_V_CC)source='$<' object='$@' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LTCOMPILE) -c -o $@ $< - -libwebpdecode_la-alpha_dec.lo: alpha_dec.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdecode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwebpdecode_la-alpha_dec.lo -MD -MP -MF $(DEPDIR)/libwebpdecode_la-alpha_dec.Tpo -c -o libwebpdecode_la-alpha_dec.lo `test -f 'alpha_dec.c' || echo '$(srcdir)/'`alpha_dec.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdecode_la-alpha_dec.Tpo $(DEPDIR)/libwebpdecode_la-alpha_dec.Plo -# $(AM_V_CC)source='alpha_dec.c' object='libwebpdecode_la-alpha_dec.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdecode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwebpdecode_la-alpha_dec.lo `test -f 'alpha_dec.c' || echo '$(srcdir)/'`alpha_dec.c - -libwebpdecode_la-buffer_dec.lo: buffer_dec.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdecode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwebpdecode_la-buffer_dec.lo -MD -MP -MF $(DEPDIR)/libwebpdecode_la-buffer_dec.Tpo -c -o libwebpdecode_la-buffer_dec.lo `test -f 'buffer_dec.c' || echo '$(srcdir)/'`buffer_dec.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdecode_la-buffer_dec.Tpo $(DEPDIR)/libwebpdecode_la-buffer_dec.Plo -# $(AM_V_CC)source='buffer_dec.c' object='libwebpdecode_la-buffer_dec.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdecode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwebpdecode_la-buffer_dec.lo `test -f 'buffer_dec.c' || echo '$(srcdir)/'`buffer_dec.c - -libwebpdecode_la-frame_dec.lo: frame_dec.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdecode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwebpdecode_la-frame_dec.lo -MD -MP -MF $(DEPDIR)/libwebpdecode_la-frame_dec.Tpo -c -o libwebpdecode_la-frame_dec.lo `test -f 'frame_dec.c' || echo '$(srcdir)/'`frame_dec.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdecode_la-frame_dec.Tpo $(DEPDIR)/libwebpdecode_la-frame_dec.Plo -# $(AM_V_CC)source='frame_dec.c' object='libwebpdecode_la-frame_dec.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdecode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwebpdecode_la-frame_dec.lo `test -f 'frame_dec.c' || echo '$(srcdir)/'`frame_dec.c - -libwebpdecode_la-idec_dec.lo: idec_dec.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdecode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwebpdecode_la-idec_dec.lo -MD -MP -MF $(DEPDIR)/libwebpdecode_la-idec_dec.Tpo -c -o libwebpdecode_la-idec_dec.lo `test -f 'idec_dec.c' || echo '$(srcdir)/'`idec_dec.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdecode_la-idec_dec.Tpo $(DEPDIR)/libwebpdecode_la-idec_dec.Plo -# $(AM_V_CC)source='idec_dec.c' object='libwebpdecode_la-idec_dec.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdecode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwebpdecode_la-idec_dec.lo `test -f 'idec_dec.c' || echo '$(srcdir)/'`idec_dec.c - -libwebpdecode_la-io_dec.lo: io_dec.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdecode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwebpdecode_la-io_dec.lo -MD -MP -MF $(DEPDIR)/libwebpdecode_la-io_dec.Tpo -c -o libwebpdecode_la-io_dec.lo `test -f 'io_dec.c' || echo '$(srcdir)/'`io_dec.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdecode_la-io_dec.Tpo $(DEPDIR)/libwebpdecode_la-io_dec.Plo -# $(AM_V_CC)source='io_dec.c' object='libwebpdecode_la-io_dec.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdecode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwebpdecode_la-io_dec.lo `test -f 'io_dec.c' || echo '$(srcdir)/'`io_dec.c - -libwebpdecode_la-quant_dec.lo: quant_dec.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdecode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwebpdecode_la-quant_dec.lo -MD -MP -MF $(DEPDIR)/libwebpdecode_la-quant_dec.Tpo -c -o libwebpdecode_la-quant_dec.lo `test -f 'quant_dec.c' || echo '$(srcdir)/'`quant_dec.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdecode_la-quant_dec.Tpo $(DEPDIR)/libwebpdecode_la-quant_dec.Plo -# $(AM_V_CC)source='quant_dec.c' object='libwebpdecode_la-quant_dec.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdecode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwebpdecode_la-quant_dec.lo `test -f 'quant_dec.c' || echo '$(srcdir)/'`quant_dec.c - -libwebpdecode_la-tree_dec.lo: tree_dec.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdecode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwebpdecode_la-tree_dec.lo -MD -MP -MF $(DEPDIR)/libwebpdecode_la-tree_dec.Tpo -c -o libwebpdecode_la-tree_dec.lo `test -f 'tree_dec.c' || echo '$(srcdir)/'`tree_dec.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdecode_la-tree_dec.Tpo $(DEPDIR)/libwebpdecode_la-tree_dec.Plo -# $(AM_V_CC)source='tree_dec.c' object='libwebpdecode_la-tree_dec.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdecode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwebpdecode_la-tree_dec.lo `test -f 'tree_dec.c' || echo '$(srcdir)/'`tree_dec.c - -libwebpdecode_la-vp8_dec.lo: vp8_dec.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdecode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwebpdecode_la-vp8_dec.lo -MD -MP -MF $(DEPDIR)/libwebpdecode_la-vp8_dec.Tpo -c -o libwebpdecode_la-vp8_dec.lo `test -f 'vp8_dec.c' || echo '$(srcdir)/'`vp8_dec.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdecode_la-vp8_dec.Tpo $(DEPDIR)/libwebpdecode_la-vp8_dec.Plo -# $(AM_V_CC)source='vp8_dec.c' object='libwebpdecode_la-vp8_dec.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdecode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwebpdecode_la-vp8_dec.lo `test -f 'vp8_dec.c' || echo '$(srcdir)/'`vp8_dec.c - -libwebpdecode_la-vp8l_dec.lo: vp8l_dec.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdecode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwebpdecode_la-vp8l_dec.lo -MD -MP -MF $(DEPDIR)/libwebpdecode_la-vp8l_dec.Tpo -c -o libwebpdecode_la-vp8l_dec.lo `test -f 'vp8l_dec.c' || echo '$(srcdir)/'`vp8l_dec.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdecode_la-vp8l_dec.Tpo $(DEPDIR)/libwebpdecode_la-vp8l_dec.Plo -# $(AM_V_CC)source='vp8l_dec.c' object='libwebpdecode_la-vp8l_dec.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdecode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwebpdecode_la-vp8l_dec.lo `test -f 'vp8l_dec.c' || echo '$(srcdir)/'`vp8l_dec.c - -libwebpdecode_la-webp_dec.lo: webp_dec.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdecode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwebpdecode_la-webp_dec.lo -MD -MP -MF $(DEPDIR)/libwebpdecode_la-webp_dec.Tpo -c -o libwebpdecode_la-webp_dec.lo `test -f 'webp_dec.c' || echo '$(srcdir)/'`webp_dec.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdecode_la-webp_dec.Tpo $(DEPDIR)/libwebpdecode_la-webp_dec.Plo -# $(AM_V_CC)source='webp_dec.c' object='libwebpdecode_la-webp_dec.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdecode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwebpdecode_la-webp_dec.lo `test -f 'webp_dec.c' || echo '$(srcdir)/'`webp_dec.c - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs -install-libwebpdecodeincludeHEADERS: $(libwebpdecodeinclude_HEADERS) - @$(NORMAL_INSTALL) - @list='$(libwebpdecodeinclude_HEADERS)'; test -n "$(libwebpdecodeincludedir)" || list=; \ - if test -n "$$list"; then \ - echo " $(MKDIR_P) '$(DESTDIR)$(libwebpdecodeincludedir)'"; \ - $(MKDIR_P) "$(DESTDIR)$(libwebpdecodeincludedir)" || exit 1; \ - fi; \ - for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - echo "$$d$$p"; \ - done | $(am__base_list) | \ - while read files; do \ - echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(libwebpdecodeincludedir)'"; \ - $(INSTALL_HEADER) $$files "$(DESTDIR)$(libwebpdecodeincludedir)" || exit $$?; \ - done - -uninstall-libwebpdecodeincludeHEADERS: - @$(NORMAL_UNINSTALL) - @list='$(libwebpdecodeinclude_HEADERS)'; test -n "$(libwebpdecodeincludedir)" || list=; \ - files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ - dir='$(DESTDIR)$(libwebpdecodeincludedir)'; $(am__uninstall_files_from_dir) - -ID: $(am__tagged_files) - $(am__define_uniq_tagged_files); mkid -fID $$unique -tags: tags-am -TAGS: tags - -tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) - set x; \ - here=`pwd`; \ - $(am__define_uniq_tagged_files); \ - shift; \ - if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ - test -n "$$unique" || unique=$$empty_fix; \ - if test $$# -gt 0; then \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - "$$@" $$unique; \ - else \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$unique; \ - fi; \ - fi -ctags: ctags-am - -CTAGS: ctags -ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) - $(am__define_uniq_tagged_files); \ - test -z "$(CTAGS_ARGS)$$unique" \ - || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$unique - -GTAGS: - here=`$(am__cd) $(top_builddir) && pwd` \ - && $(am__cd) $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) "$$here" -cscopelist: cscopelist-am - -cscopelist-am: $(am__tagged_files) - list='$(am__tagged_files)'; \ - case "$(srcdir)" in \ - [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ - *) sdir=$(subdir)/$(srcdir) ;; \ - esac; \ - for i in $$list; do \ - if test -f "$$i"; then \ - echo "$(subdir)/$$i"; \ - else \ - echo "$$sdir/$$i"; \ - fi; \ - done >> $(top_builddir)/cscope.files - -distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - -distdir: $(BUILT_SOURCES) - $(MAKE) $(AM_MAKEFLAGS) distdir-am - -distdir-am: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - list='$(DISTFILES)'; \ - dist_files=`for file in $$list; do echo $$file; done | \ - sed -e "s|^$$srcdirstrip/||;t" \ - -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ - case $$dist_files in \ - */*) $(MKDIR_P) `echo "$$dist_files" | \ - sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ - sort -u` ;; \ - esac; \ - for file in $$dist_files; do \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - if test -d $$d/$$file; then \ - dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test -d "$(distdir)/$$file"; then \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ - else \ - test -f "$(distdir)/$$file" \ - || cp -p $$d/$$file "$(distdir)/$$file" \ - || exit 1; \ - fi; \ - done -check-am: all-am -check: check-am -all-am: Makefile $(LTLIBRARIES) $(HEADERS) -installdirs: - for dir in "$(DESTDIR)$(libwebpdecodeincludedir)"; do \ - test -z "$$dir" || $(MKDIR_P) "$$dir"; \ - done -install: install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-am -install-strip: - if test -z '$(STRIP)'; then \ - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - install; \ - else \ - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ - fi -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-am - -clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ - mostlyclean-am - -distclean: distclean-am - -rm -f ./$(DEPDIR)/libwebpdecode_la-alpha_dec.Plo - -rm -f ./$(DEPDIR)/libwebpdecode_la-buffer_dec.Plo - -rm -f ./$(DEPDIR)/libwebpdecode_la-frame_dec.Plo - -rm -f ./$(DEPDIR)/libwebpdecode_la-idec_dec.Plo - -rm -f ./$(DEPDIR)/libwebpdecode_la-io_dec.Plo - -rm -f ./$(DEPDIR)/libwebpdecode_la-quant_dec.Plo - -rm -f ./$(DEPDIR)/libwebpdecode_la-tree_dec.Plo - -rm -f ./$(DEPDIR)/libwebpdecode_la-vp8_dec.Plo - -rm -f ./$(DEPDIR)/libwebpdecode_la-vp8l_dec.Plo - -rm -f ./$(DEPDIR)/libwebpdecode_la-webp_dec.Plo - -rm -f Makefile -distclean-am: clean-am distclean-compile distclean-generic \ - distclean-tags - -dvi: dvi-am - -dvi-am: - -html: html-am - -html-am: - -info: info-am - -info-am: - -install-data-am: install-libwebpdecodeincludeHEADERS - -install-dvi: install-dvi-am - -install-dvi-am: - -install-exec-am: - -install-html: install-html-am - -install-html-am: - -install-info: install-info-am - -install-info-am: - -install-man: - -install-pdf: install-pdf-am - -install-pdf-am: - -install-ps: install-ps-am - -install-ps-am: - -installcheck-am: - -maintainer-clean: maintainer-clean-am - -rm -f ./$(DEPDIR)/libwebpdecode_la-alpha_dec.Plo - -rm -f ./$(DEPDIR)/libwebpdecode_la-buffer_dec.Plo - -rm -f ./$(DEPDIR)/libwebpdecode_la-frame_dec.Plo - -rm -f ./$(DEPDIR)/libwebpdecode_la-idec_dec.Plo - -rm -f ./$(DEPDIR)/libwebpdecode_la-io_dec.Plo - -rm -f ./$(DEPDIR)/libwebpdecode_la-quant_dec.Plo - -rm -f ./$(DEPDIR)/libwebpdecode_la-tree_dec.Plo - -rm -f ./$(DEPDIR)/libwebpdecode_la-vp8_dec.Plo - -rm -f ./$(DEPDIR)/libwebpdecode_la-vp8l_dec.Plo - -rm -f ./$(DEPDIR)/libwebpdecode_la-webp_dec.Plo - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-compile mostlyclean-generic \ - mostlyclean-libtool - -pdf: pdf-am - -pdf-am: - -ps: ps-am - -ps-am: - -uninstall-am: uninstall-libwebpdecodeincludeHEADERS - -.MAKE: install-am install-strip - -.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ - clean-generic clean-libtool clean-noinstLTLIBRARIES \ - cscopelist-am ctags ctags-am distclean distclean-compile \ - distclean-generic distclean-libtool distclean-tags distdir dvi \ - dvi-am html html-am info info-am install install-am \ - install-data install-data-am install-dvi install-dvi-am \ - install-exec install-exec-am install-html install-html-am \ - install-info install-info-am \ - install-libwebpdecodeincludeHEADERS install-man install-pdf \ - install-pdf-am install-ps install-ps-am install-strip \ - installcheck installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-compile \ - mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ - tags tags-am uninstall uninstall-am \ - uninstall-libwebpdecodeincludeHEADERS - -.PRECIOUS: Makefile - - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/Extended/libwebp/src/dec/Makefile.am b/Extended/libwebp/src/dec/Makefile.am deleted file mode 100644 index f8c6398..0000000 --- a/Extended/libwebp/src/dec/Makefile.am +++ /dev/null @@ -1,29 +0,0 @@ -AM_CPPFLAGS += -I$(top_builddir) -I$(top_srcdir) -noinst_LTLIBRARIES = libwebpdecode.la - -libwebpdecode_la_SOURCES = -libwebpdecode_la_SOURCES += alpha_dec.c -libwebpdecode_la_SOURCES += alphai_dec.h -libwebpdecode_la_SOURCES += buffer_dec.c -libwebpdecode_la_SOURCES += common_dec.h -libwebpdecode_la_SOURCES += vp8_dec.h -libwebpdecode_la_SOURCES += frame_dec.c -libwebpdecode_la_SOURCES += idec_dec.c -libwebpdecode_la_SOURCES += io_dec.c -libwebpdecode_la_SOURCES += quant_dec.c -libwebpdecode_la_SOURCES += tree_dec.c -libwebpdecode_la_SOURCES += vp8_dec.c -libwebpdecode_la_SOURCES += vp8i_dec.h -libwebpdecode_la_SOURCES += vp8l_dec.c -libwebpdecode_la_SOURCES += vp8li_dec.h -libwebpdecode_la_SOURCES += webp_dec.c -libwebpdecode_la_SOURCES += webpi_dec.h - -libwebpdecodeinclude_HEADERS = -libwebpdecodeinclude_HEADERS += ../webp/decode.h -libwebpdecodeinclude_HEADERS += ../webp/types.h -noinst_HEADERS = -noinst_HEADERS += ../webp/format_constants.h - -libwebpdecode_la_CPPFLAGS = $(AM_CPPFLAGS) -libwebpdecodeincludedir = $(includedir)/webp diff --git a/Extended/libwebp/src/dec/Makefile.in b/Extended/libwebp/src/dec/Makefile.in deleted file mode 100644 index 684d28a..0000000 --- a/Extended/libwebp/src/dec/Makefile.in +++ /dev/null @@ -1,796 +0,0 @@ -# Makefile.in generated by automake 1.16.1 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994-2018 Free Software Foundation, Inc. - -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -@SET_MAKE@ - - -VPATH = @srcdir@ -am__is_gnu_make = { \ - if test -z '$(MAKELEVEL)'; then \ - false; \ - elif test -n '$(MAKE_HOST)'; then \ - true; \ - elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ - true; \ - else \ - false; \ - fi; \ -} -am__make_running_with_option = \ - case $${target_option-} in \ - ?) ;; \ - *) echo "am__make_running_with_option: internal error: invalid" \ - "target option '$${target_option-}' specified" >&2; \ - exit 1;; \ - esac; \ - has_opt=no; \ - sane_makeflags=$$MAKEFLAGS; \ - if $(am__is_gnu_make); then \ - sane_makeflags=$$MFLAGS; \ - else \ - case $$MAKEFLAGS in \ - *\\[\ \ ]*) \ - bs=\\; \ - sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ - | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ - esac; \ - fi; \ - skip_next=no; \ - strip_trailopt () \ - { \ - flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ - }; \ - for flg in $$sane_makeflags; do \ - test $$skip_next = yes && { skip_next=no; continue; }; \ - case $$flg in \ - *=*|--*) continue;; \ - -*I) strip_trailopt 'I'; skip_next=yes;; \ - -*I?*) strip_trailopt 'I';; \ - -*O) strip_trailopt 'O'; skip_next=yes;; \ - -*O?*) strip_trailopt 'O';; \ - -*l) strip_trailopt 'l'; skip_next=yes;; \ - -*l?*) strip_trailopt 'l';; \ - -[dEDm]) skip_next=yes;; \ - -[JT]) skip_next=yes;; \ - esac; \ - case $$flg in \ - *$$target_option*) has_opt=yes; break;; \ - esac; \ - done; \ - test $$has_opt = yes -am__make_dryrun = (target_option=n; $(am__make_running_with_option)) -am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) -pkgdatadir = $(datadir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkglibexecdir = $(libexecdir)/@PACKAGE@ -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = @build@ -host_triplet = @host@ -subdir = src/dec -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pthread.m4 \ - $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ - $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ - $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -DIST_COMMON = $(srcdir)/Makefile.am $(libwebpdecodeinclude_HEADERS) \ - $(noinst_HEADERS) $(am__DIST_COMMON) -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = $(top_builddir)/src/webp/config.h -CONFIG_CLEAN_FILES = -CONFIG_CLEAN_VPATH_FILES = -LTLIBRARIES = $(noinst_LTLIBRARIES) -libwebpdecode_la_LIBADD = -am_libwebpdecode_la_OBJECTS = libwebpdecode_la-alpha_dec.lo \ - libwebpdecode_la-buffer_dec.lo libwebpdecode_la-frame_dec.lo \ - libwebpdecode_la-idec_dec.lo libwebpdecode_la-io_dec.lo \ - libwebpdecode_la-quant_dec.lo libwebpdecode_la-tree_dec.lo \ - libwebpdecode_la-vp8_dec.lo libwebpdecode_la-vp8l_dec.lo \ - libwebpdecode_la-webp_dec.lo -libwebpdecode_la_OBJECTS = $(am_libwebpdecode_la_OBJECTS) -AM_V_lt = $(am__v_lt_@AM_V@) -am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) -am__v_lt_0 = --silent -am__v_lt_1 = -AM_V_P = $(am__v_P_@AM_V@) -am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) -am__v_P_0 = false -am__v_P_1 = : -AM_V_GEN = $(am__v_GEN_@AM_V@) -am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) -am__v_GEN_0 = @echo " GEN " $@; -am__v_GEN_1 = -AM_V_at = $(am__v_at_@AM_V@) -am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) -am__v_at_0 = @ -am__v_at_1 = -DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/src/webp -depcomp = $(SHELL) $(top_srcdir)/depcomp -am__maybe_remake_depfiles = depfiles -am__depfiles_remade = ./$(DEPDIR)/libwebpdecode_la-alpha_dec.Plo \ - ./$(DEPDIR)/libwebpdecode_la-buffer_dec.Plo \ - ./$(DEPDIR)/libwebpdecode_la-frame_dec.Plo \ - ./$(DEPDIR)/libwebpdecode_la-idec_dec.Plo \ - ./$(DEPDIR)/libwebpdecode_la-io_dec.Plo \ - ./$(DEPDIR)/libwebpdecode_la-quant_dec.Plo \ - ./$(DEPDIR)/libwebpdecode_la-tree_dec.Plo \ - ./$(DEPDIR)/libwebpdecode_la-vp8_dec.Plo \ - ./$(DEPDIR)/libwebpdecode_la-vp8l_dec.Plo \ - ./$(DEPDIR)/libwebpdecode_la-webp_dec.Plo -am__mv = mv -f -COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ - $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CFLAGS) $(CFLAGS) -AM_V_CC = $(am__v_CC_@AM_V@) -am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) -am__v_CC_0 = @echo " CC " $@; -am__v_CC_1 = -CCLD = $(CC) -LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ - $(AM_LDFLAGS) $(LDFLAGS) -o $@ -AM_V_CCLD = $(am__v_CCLD_@AM_V@) -am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) -am__v_CCLD_0 = @echo " CCLD " $@; -am__v_CCLD_1 = -SOURCES = $(libwebpdecode_la_SOURCES) -DIST_SOURCES = $(libwebpdecode_la_SOURCES) -am__can_run_installinfo = \ - case $$AM_UPDATE_INFO_DIR in \ - n|no|NO) false;; \ - *) (install-info --version) >/dev/null 2>&1;; \ - esac -am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; -am__vpath_adj = case $$p in \ - $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ - *) f=$$p;; \ - esac; -am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; -am__install_max = 40 -am__nobase_strip_setup = \ - srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` -am__nobase_strip = \ - for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" -am__nobase_list = $(am__nobase_strip_setup); \ - for p in $$list; do echo "$$p $$p"; done | \ - sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ - $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ - if (++n[$$2] == $(am__install_max)) \ - { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ - END { for (dir in files) print dir, files[dir] }' -am__base_list = \ - sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ - sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' -am__uninstall_files_from_dir = { \ - test -z "$$files" \ - || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ - || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ - $(am__cd) "$$dir" && rm -f $$files; }; \ - } -am__installdirs = "$(DESTDIR)$(libwebpdecodeincludedir)" -HEADERS = $(libwebpdecodeinclude_HEADERS) $(noinst_HEADERS) -am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) -# Read a list of newline-separated strings from the standard input, -# and print each of them once, without duplicates. Input order is -# *not* preserved. -am__uniquify_input = $(AWK) '\ - BEGIN { nonempty = 0; } \ - { items[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in items) print i; }; } \ -' -# Make sure the list of sources is unique. This is necessary because, -# e.g., the same source file might be shared among _SOURCES variables -# for different programs/libraries. -am__define_uniq_tagged_files = \ - list='$(am__tagged_files)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | $(am__uniquify_input)` -ETAGS = etags -CTAGS = ctags -am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = @ACLOCAL@ -AMTAR = @AMTAR@ -AM_CFLAGS = @AM_CFLAGS@ -AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_builddir) -I$(top_srcdir) -AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ -AR = @AR@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -CC = @CC@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -DLLTOOL = @DLLTOOL@ -DSYMUTIL = @DSYMUTIL@ -DUMPBIN = @DUMPBIN@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -FGREP = @FGREP@ -GIF_INCLUDES = @GIF_INCLUDES@ -GIF_LIBS = @GIF_LIBS@ -GL_INCLUDES = @GL_INCLUDES@ -GL_LIBS = @GL_LIBS@ -GREP = @GREP@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -JPEG_INCLUDES = @JPEG_INCLUDES@ -JPEG_LIBS = @JPEG_LIBS@ -LD = @LD@ -LDFLAGS = @LDFLAGS@ -LIBOBJS = @LIBOBJS@ -LIBPNG_CONFIG = @LIBPNG_CONFIG@ -LIBS = @LIBS@ -LIBSDL_CONFIG = @LIBSDL_CONFIG@ -LIBTOOL = @LIBTOOL@ -LIPO = @LIPO@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ -MAKEINFO = @MAKEINFO@ -MANIFEST_TOOL = @MANIFEST_TOOL@ -MKDIR_P = @MKDIR_P@ -NEON_FLAGS = @NEON_FLAGS@ -NM = @NM@ -NMEDIT = @NMEDIT@ -OBJDUMP = @OBJDUMP@ -OBJEXT = @OBJEXT@ -OTOOL = @OTOOL@ -OTOOL64 = @OTOOL64@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_URL = @PACKAGE_URL@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -PNG_INCLUDES = @PNG_INCLUDES@ -PNG_LIBS = @PNG_LIBS@ -PTHREAD_CC = @PTHREAD_CC@ -PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ -PTHREAD_LIBS = @PTHREAD_LIBS@ -RANLIB = @RANLIB@ -SDL_INCLUDES = @SDL_INCLUDES@ -SDL_LIBS = @SDL_LIBS@ -SED = @SED@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -SSE2_FLAGS = @SSE2_FLAGS@ -SSE41_FLAGS = @SSE41_FLAGS@ -STRIP = @STRIP@ -TIFF_INCLUDES = @TIFF_INCLUDES@ -TIFF_LIBS = @TIFF_LIBS@ -USE_SWAP_16BIT_CSP = @USE_SWAP_16BIT_CSP@ -VERSION = @VERSION@ -abs_builddir = @abs_builddir@ -abs_srcdir = @abs_srcdir@ -abs_top_builddir = @abs_top_builddir@ -abs_top_srcdir = @abs_top_srcdir@ -ac_ct_AR = @ac_ct_AR@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ -am__include = @am__include@ -am__leading_dot = @am__leading_dot@ -am__quote = @am__quote@ -am__tar = @am__tar@ -am__untar = @am__untar@ -ax_pthread_config = @ax_pthread_config@ -bindir = @bindir@ -build = @build@ -build_alias = @build_alias@ -build_cpu = @build_cpu@ -build_os = @build_os@ -build_vendor = @build_vendor@ -builddir = @builddir@ -datadir = @datadir@ -datarootdir = @datarootdir@ -docdir = @docdir@ -dvidir = @dvidir@ -exec_prefix = @exec_prefix@ -host = @host@ -host_alias = @host_alias@ -host_cpu = @host_cpu@ -host_os = @host_os@ -host_vendor = @host_vendor@ -htmldir = @htmldir@ -includedir = @includedir@ -infodir = @infodir@ -install_sh = @install_sh@ -libdir = @libdir@ -libexecdir = @libexecdir@ -localedir = @localedir@ -localstatedir = @localstatedir@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -oldincludedir = @oldincludedir@ -pdfdir = @pdfdir@ -pkgconfigdir = @pkgconfigdir@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -psdir = @psdir@ -runstatedir = @runstatedir@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -srcdir = @srcdir@ -sysconfdir = @sysconfdir@ -target_alias = @target_alias@ -top_build_prefix = @top_build_prefix@ -top_builddir = @top_builddir@ -top_srcdir = @top_srcdir@ -noinst_LTLIBRARIES = libwebpdecode.la -libwebpdecode_la_SOURCES = alpha_dec.c alphai_dec.h buffer_dec.c \ - common_dec.h vp8_dec.h frame_dec.c idec_dec.c io_dec.c \ - quant_dec.c tree_dec.c vp8_dec.c vp8i_dec.h vp8l_dec.c \ - vp8li_dec.h webp_dec.c webpi_dec.h -libwebpdecodeinclude_HEADERS = ../webp/decode.h ../webp/types.h -noinst_HEADERS = ../webp/format_constants.h -libwebpdecode_la_CPPFLAGS = $(AM_CPPFLAGS) -libwebpdecodeincludedir = $(includedir)/webp -all: all-am - -.SUFFIXES: -.SUFFIXES: .c .lo .o .obj -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ - && { if test -f $@; then exit 0; else break; fi; }; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/dec/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --foreign src/dec/Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(am__aclocal_m4_deps): - -clean-noinstLTLIBRARIES: - -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) - @list='$(noinst_LTLIBRARIES)'; \ - locs=`for p in $$list; do echo $$p; done | \ - sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ - sort -u`; \ - test -z "$$locs" || { \ - echo rm -f $${locs}; \ - rm -f $${locs}; \ - } - -libwebpdecode.la: $(libwebpdecode_la_OBJECTS) $(libwebpdecode_la_DEPENDENCIES) $(EXTRA_libwebpdecode_la_DEPENDENCIES) - $(AM_V_CCLD)$(LINK) $(libwebpdecode_la_OBJECTS) $(libwebpdecode_la_LIBADD) $(LIBS) - -mostlyclean-compile: - -rm -f *.$(OBJEXT) - -distclean-compile: - -rm -f *.tab.c - -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwebpdecode_la-alpha_dec.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwebpdecode_la-buffer_dec.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwebpdecode_la-frame_dec.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwebpdecode_la-idec_dec.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwebpdecode_la-io_dec.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwebpdecode_la-quant_dec.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwebpdecode_la-tree_dec.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwebpdecode_la-vp8_dec.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwebpdecode_la-vp8l_dec.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwebpdecode_la-webp_dec.Plo@am__quote@ # am--include-marker - -$(am__depfiles_remade): - @$(MKDIR_P) $(@D) - @echo '# dummy' >$@-t && $(am__mv) $@-t $@ - -am--depfiles: $(am__depfiles_remade) - -.c.o: -@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ -@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ -@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< - -.c.obj: -@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ -@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ -@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` - -.c.lo: -@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ -@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ -@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< - -libwebpdecode_la-alpha_dec.lo: alpha_dec.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdecode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwebpdecode_la-alpha_dec.lo -MD -MP -MF $(DEPDIR)/libwebpdecode_la-alpha_dec.Tpo -c -o libwebpdecode_la-alpha_dec.lo `test -f 'alpha_dec.c' || echo '$(srcdir)/'`alpha_dec.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdecode_la-alpha_dec.Tpo $(DEPDIR)/libwebpdecode_la-alpha_dec.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='alpha_dec.c' object='libwebpdecode_la-alpha_dec.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdecode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwebpdecode_la-alpha_dec.lo `test -f 'alpha_dec.c' || echo '$(srcdir)/'`alpha_dec.c - -libwebpdecode_la-buffer_dec.lo: buffer_dec.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdecode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwebpdecode_la-buffer_dec.lo -MD -MP -MF $(DEPDIR)/libwebpdecode_la-buffer_dec.Tpo -c -o libwebpdecode_la-buffer_dec.lo `test -f 'buffer_dec.c' || echo '$(srcdir)/'`buffer_dec.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdecode_la-buffer_dec.Tpo $(DEPDIR)/libwebpdecode_la-buffer_dec.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='buffer_dec.c' object='libwebpdecode_la-buffer_dec.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdecode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwebpdecode_la-buffer_dec.lo `test -f 'buffer_dec.c' || echo '$(srcdir)/'`buffer_dec.c - -libwebpdecode_la-frame_dec.lo: frame_dec.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdecode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwebpdecode_la-frame_dec.lo -MD -MP -MF $(DEPDIR)/libwebpdecode_la-frame_dec.Tpo -c -o libwebpdecode_la-frame_dec.lo `test -f 'frame_dec.c' || echo '$(srcdir)/'`frame_dec.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdecode_la-frame_dec.Tpo $(DEPDIR)/libwebpdecode_la-frame_dec.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='frame_dec.c' object='libwebpdecode_la-frame_dec.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdecode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwebpdecode_la-frame_dec.lo `test -f 'frame_dec.c' || echo '$(srcdir)/'`frame_dec.c - -libwebpdecode_la-idec_dec.lo: idec_dec.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdecode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwebpdecode_la-idec_dec.lo -MD -MP -MF $(DEPDIR)/libwebpdecode_la-idec_dec.Tpo -c -o libwebpdecode_la-idec_dec.lo `test -f 'idec_dec.c' || echo '$(srcdir)/'`idec_dec.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdecode_la-idec_dec.Tpo $(DEPDIR)/libwebpdecode_la-idec_dec.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='idec_dec.c' object='libwebpdecode_la-idec_dec.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdecode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwebpdecode_la-idec_dec.lo `test -f 'idec_dec.c' || echo '$(srcdir)/'`idec_dec.c - -libwebpdecode_la-io_dec.lo: io_dec.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdecode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwebpdecode_la-io_dec.lo -MD -MP -MF $(DEPDIR)/libwebpdecode_la-io_dec.Tpo -c -o libwebpdecode_la-io_dec.lo `test -f 'io_dec.c' || echo '$(srcdir)/'`io_dec.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdecode_la-io_dec.Tpo $(DEPDIR)/libwebpdecode_la-io_dec.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='io_dec.c' object='libwebpdecode_la-io_dec.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdecode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwebpdecode_la-io_dec.lo `test -f 'io_dec.c' || echo '$(srcdir)/'`io_dec.c - -libwebpdecode_la-quant_dec.lo: quant_dec.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdecode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwebpdecode_la-quant_dec.lo -MD -MP -MF $(DEPDIR)/libwebpdecode_la-quant_dec.Tpo -c -o libwebpdecode_la-quant_dec.lo `test -f 'quant_dec.c' || echo '$(srcdir)/'`quant_dec.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdecode_la-quant_dec.Tpo $(DEPDIR)/libwebpdecode_la-quant_dec.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='quant_dec.c' object='libwebpdecode_la-quant_dec.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdecode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwebpdecode_la-quant_dec.lo `test -f 'quant_dec.c' || echo '$(srcdir)/'`quant_dec.c - -libwebpdecode_la-tree_dec.lo: tree_dec.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdecode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwebpdecode_la-tree_dec.lo -MD -MP -MF $(DEPDIR)/libwebpdecode_la-tree_dec.Tpo -c -o libwebpdecode_la-tree_dec.lo `test -f 'tree_dec.c' || echo '$(srcdir)/'`tree_dec.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdecode_la-tree_dec.Tpo $(DEPDIR)/libwebpdecode_la-tree_dec.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tree_dec.c' object='libwebpdecode_la-tree_dec.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdecode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwebpdecode_la-tree_dec.lo `test -f 'tree_dec.c' || echo '$(srcdir)/'`tree_dec.c - -libwebpdecode_la-vp8_dec.lo: vp8_dec.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdecode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwebpdecode_la-vp8_dec.lo -MD -MP -MF $(DEPDIR)/libwebpdecode_la-vp8_dec.Tpo -c -o libwebpdecode_la-vp8_dec.lo `test -f 'vp8_dec.c' || echo '$(srcdir)/'`vp8_dec.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdecode_la-vp8_dec.Tpo $(DEPDIR)/libwebpdecode_la-vp8_dec.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='vp8_dec.c' object='libwebpdecode_la-vp8_dec.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdecode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwebpdecode_la-vp8_dec.lo `test -f 'vp8_dec.c' || echo '$(srcdir)/'`vp8_dec.c - -libwebpdecode_la-vp8l_dec.lo: vp8l_dec.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdecode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwebpdecode_la-vp8l_dec.lo -MD -MP -MF $(DEPDIR)/libwebpdecode_la-vp8l_dec.Tpo -c -o libwebpdecode_la-vp8l_dec.lo `test -f 'vp8l_dec.c' || echo '$(srcdir)/'`vp8l_dec.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdecode_la-vp8l_dec.Tpo $(DEPDIR)/libwebpdecode_la-vp8l_dec.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='vp8l_dec.c' object='libwebpdecode_la-vp8l_dec.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdecode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwebpdecode_la-vp8l_dec.lo `test -f 'vp8l_dec.c' || echo '$(srcdir)/'`vp8l_dec.c - -libwebpdecode_la-webp_dec.lo: webp_dec.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdecode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwebpdecode_la-webp_dec.lo -MD -MP -MF $(DEPDIR)/libwebpdecode_la-webp_dec.Tpo -c -o libwebpdecode_la-webp_dec.lo `test -f 'webp_dec.c' || echo '$(srcdir)/'`webp_dec.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdecode_la-webp_dec.Tpo $(DEPDIR)/libwebpdecode_la-webp_dec.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='webp_dec.c' object='libwebpdecode_la-webp_dec.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdecode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwebpdecode_la-webp_dec.lo `test -f 'webp_dec.c' || echo '$(srcdir)/'`webp_dec.c - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs -install-libwebpdecodeincludeHEADERS: $(libwebpdecodeinclude_HEADERS) - @$(NORMAL_INSTALL) - @list='$(libwebpdecodeinclude_HEADERS)'; test -n "$(libwebpdecodeincludedir)" || list=; \ - if test -n "$$list"; then \ - echo " $(MKDIR_P) '$(DESTDIR)$(libwebpdecodeincludedir)'"; \ - $(MKDIR_P) "$(DESTDIR)$(libwebpdecodeincludedir)" || exit 1; \ - fi; \ - for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - echo "$$d$$p"; \ - done | $(am__base_list) | \ - while read files; do \ - echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(libwebpdecodeincludedir)'"; \ - $(INSTALL_HEADER) $$files "$(DESTDIR)$(libwebpdecodeincludedir)" || exit $$?; \ - done - -uninstall-libwebpdecodeincludeHEADERS: - @$(NORMAL_UNINSTALL) - @list='$(libwebpdecodeinclude_HEADERS)'; test -n "$(libwebpdecodeincludedir)" || list=; \ - files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ - dir='$(DESTDIR)$(libwebpdecodeincludedir)'; $(am__uninstall_files_from_dir) - -ID: $(am__tagged_files) - $(am__define_uniq_tagged_files); mkid -fID $$unique -tags: tags-am -TAGS: tags - -tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) - set x; \ - here=`pwd`; \ - $(am__define_uniq_tagged_files); \ - shift; \ - if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ - test -n "$$unique" || unique=$$empty_fix; \ - if test $$# -gt 0; then \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - "$$@" $$unique; \ - else \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$unique; \ - fi; \ - fi -ctags: ctags-am - -CTAGS: ctags -ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) - $(am__define_uniq_tagged_files); \ - test -z "$(CTAGS_ARGS)$$unique" \ - || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$unique - -GTAGS: - here=`$(am__cd) $(top_builddir) && pwd` \ - && $(am__cd) $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) "$$here" -cscopelist: cscopelist-am - -cscopelist-am: $(am__tagged_files) - list='$(am__tagged_files)'; \ - case "$(srcdir)" in \ - [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ - *) sdir=$(subdir)/$(srcdir) ;; \ - esac; \ - for i in $$list; do \ - if test -f "$$i"; then \ - echo "$(subdir)/$$i"; \ - else \ - echo "$$sdir/$$i"; \ - fi; \ - done >> $(top_builddir)/cscope.files - -distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - -distdir: $(BUILT_SOURCES) - $(MAKE) $(AM_MAKEFLAGS) distdir-am - -distdir-am: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - list='$(DISTFILES)'; \ - dist_files=`for file in $$list; do echo $$file; done | \ - sed -e "s|^$$srcdirstrip/||;t" \ - -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ - case $$dist_files in \ - */*) $(MKDIR_P) `echo "$$dist_files" | \ - sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ - sort -u` ;; \ - esac; \ - for file in $$dist_files; do \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - if test -d $$d/$$file; then \ - dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test -d "$(distdir)/$$file"; then \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ - else \ - test -f "$(distdir)/$$file" \ - || cp -p $$d/$$file "$(distdir)/$$file" \ - || exit 1; \ - fi; \ - done -check-am: all-am -check: check-am -all-am: Makefile $(LTLIBRARIES) $(HEADERS) -installdirs: - for dir in "$(DESTDIR)$(libwebpdecodeincludedir)"; do \ - test -z "$$dir" || $(MKDIR_P) "$$dir"; \ - done -install: install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-am -install-strip: - if test -z '$(STRIP)'; then \ - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - install; \ - else \ - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ - fi -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-am - -clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ - mostlyclean-am - -distclean: distclean-am - -rm -f ./$(DEPDIR)/libwebpdecode_la-alpha_dec.Plo - -rm -f ./$(DEPDIR)/libwebpdecode_la-buffer_dec.Plo - -rm -f ./$(DEPDIR)/libwebpdecode_la-frame_dec.Plo - -rm -f ./$(DEPDIR)/libwebpdecode_la-idec_dec.Plo - -rm -f ./$(DEPDIR)/libwebpdecode_la-io_dec.Plo - -rm -f ./$(DEPDIR)/libwebpdecode_la-quant_dec.Plo - -rm -f ./$(DEPDIR)/libwebpdecode_la-tree_dec.Plo - -rm -f ./$(DEPDIR)/libwebpdecode_la-vp8_dec.Plo - -rm -f ./$(DEPDIR)/libwebpdecode_la-vp8l_dec.Plo - -rm -f ./$(DEPDIR)/libwebpdecode_la-webp_dec.Plo - -rm -f Makefile -distclean-am: clean-am distclean-compile distclean-generic \ - distclean-tags - -dvi: dvi-am - -dvi-am: - -html: html-am - -html-am: - -info: info-am - -info-am: - -install-data-am: install-libwebpdecodeincludeHEADERS - -install-dvi: install-dvi-am - -install-dvi-am: - -install-exec-am: - -install-html: install-html-am - -install-html-am: - -install-info: install-info-am - -install-info-am: - -install-man: - -install-pdf: install-pdf-am - -install-pdf-am: - -install-ps: install-ps-am - -install-ps-am: - -installcheck-am: - -maintainer-clean: maintainer-clean-am - -rm -f ./$(DEPDIR)/libwebpdecode_la-alpha_dec.Plo - -rm -f ./$(DEPDIR)/libwebpdecode_la-buffer_dec.Plo - -rm -f ./$(DEPDIR)/libwebpdecode_la-frame_dec.Plo - -rm -f ./$(DEPDIR)/libwebpdecode_la-idec_dec.Plo - -rm -f ./$(DEPDIR)/libwebpdecode_la-io_dec.Plo - -rm -f ./$(DEPDIR)/libwebpdecode_la-quant_dec.Plo - -rm -f ./$(DEPDIR)/libwebpdecode_la-tree_dec.Plo - -rm -f ./$(DEPDIR)/libwebpdecode_la-vp8_dec.Plo - -rm -f ./$(DEPDIR)/libwebpdecode_la-vp8l_dec.Plo - -rm -f ./$(DEPDIR)/libwebpdecode_la-webp_dec.Plo - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-compile mostlyclean-generic \ - mostlyclean-libtool - -pdf: pdf-am - -pdf-am: - -ps: ps-am - -ps-am: - -uninstall-am: uninstall-libwebpdecodeincludeHEADERS - -.MAKE: install-am install-strip - -.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ - clean-generic clean-libtool clean-noinstLTLIBRARIES \ - cscopelist-am ctags ctags-am distclean distclean-compile \ - distclean-generic distclean-libtool distclean-tags distdir dvi \ - dvi-am html html-am info info-am install install-am \ - install-data install-data-am install-dvi install-dvi-am \ - install-exec install-exec-am install-html install-html-am \ - install-info install-info-am \ - install-libwebpdecodeincludeHEADERS install-man install-pdf \ - install-pdf-am install-ps install-ps-am install-strip \ - installcheck installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-compile \ - mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ - tags tags-am uninstall uninstall-am \ - uninstall-libwebpdecodeincludeHEADERS - -.PRECIOUS: Makefile - - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/Extended/libwebp/src/dec/alpha_dec.c b/Extended/libwebp/src/dec/alpha_dec.c deleted file mode 100644 index bce735b..0000000 --- a/Extended/libwebp/src/dec/alpha_dec.c +++ /dev/null @@ -1,232 +0,0 @@ -// Copyright 2011 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Alpha-plane decompression. -// -// Author: Skal (pascal.massimino@gmail.com) - -#include -#include "src/dec/alphai_dec.h" -#include "src/dec/vp8i_dec.h" -#include "src/dec/vp8li_dec.h" -#include "src/dsp/dsp.h" -#include "src/utils/quant_levels_dec_utils.h" -#include "src/utils/utils.h" -#include "src/webp/format_constants.h" - -//------------------------------------------------------------------------------ -// ALPHDecoder object. - -// Allocates a new alpha decoder instance. -static ALPHDecoder* ALPHNew(void) { - ALPHDecoder* const dec = (ALPHDecoder*)WebPSafeCalloc(1ULL, sizeof(*dec)); - return dec; -} - -// Clears and deallocates an alpha decoder instance. -static void ALPHDelete(ALPHDecoder* const dec) { - if (dec != NULL) { - VP8LDelete(dec->vp8l_dec_); - dec->vp8l_dec_ = NULL; - WebPSafeFree(dec); - } -} - -//------------------------------------------------------------------------------ -// Decoding. - -// Initialize alpha decoding by parsing the alpha header and decoding the image -// header for alpha data stored using lossless compression. -// Returns false in case of error in alpha header (data too short, invalid -// compression method or filter, error in lossless header data etc). -static int ALPHInit(ALPHDecoder* const dec, const uint8_t* data, - size_t data_size, const VP8Io* const src_io, - uint8_t* output) { - int ok = 0; - const uint8_t* const alpha_data = data + ALPHA_HEADER_LEN; - const size_t alpha_data_size = data_size - ALPHA_HEADER_LEN; - int rsrv; - VP8Io* const io = &dec->io_; - - assert(data != NULL && output != NULL && src_io != NULL); - - VP8FiltersInit(); - dec->output_ = output; - dec->width_ = src_io->width; - dec->height_ = src_io->height; - assert(dec->width_ > 0 && dec->height_ > 0); - - if (data_size <= ALPHA_HEADER_LEN) { - return 0; - } - - dec->method_ = (data[0] >> 0) & 0x03; - dec->filter_ = (WEBP_FILTER_TYPE)((data[0] >> 2) & 0x03); - dec->pre_processing_ = (data[0] >> 4) & 0x03; - rsrv = (data[0] >> 6) & 0x03; - if (dec->method_ < ALPHA_NO_COMPRESSION || - dec->method_ > ALPHA_LOSSLESS_COMPRESSION || - dec->filter_ >= WEBP_FILTER_LAST || - dec->pre_processing_ > ALPHA_PREPROCESSED_LEVELS || - rsrv != 0) { - return 0; - } - - // Copy the necessary parameters from src_io to io - VP8InitIo(io); - WebPInitCustomIo(NULL, io); - io->opaque = dec; - io->width = src_io->width; - io->height = src_io->height; - - io->use_cropping = src_io->use_cropping; - io->crop_left = src_io->crop_left; - io->crop_right = src_io->crop_right; - io->crop_top = src_io->crop_top; - io->crop_bottom = src_io->crop_bottom; - // No need to copy the scaling parameters. - - if (dec->method_ == ALPHA_NO_COMPRESSION) { - const size_t alpha_decoded_size = dec->width_ * dec->height_; - ok = (alpha_data_size >= alpha_decoded_size); - } else { - assert(dec->method_ == ALPHA_LOSSLESS_COMPRESSION); - ok = VP8LDecodeAlphaHeader(dec, alpha_data, alpha_data_size); - } - - return ok; -} - -// Decodes, unfilters and dequantizes *at least* 'num_rows' rows of alpha -// starting from row number 'row'. It assumes that rows up to (row - 1) have -// already been decoded. -// Returns false in case of bitstream error. -static int ALPHDecode(VP8Decoder* const dec, int row, int num_rows) { - ALPHDecoder* const alph_dec = dec->alph_dec_; - const int width = alph_dec->width_; - const int height = alph_dec->io_.crop_bottom; - if (alph_dec->method_ == ALPHA_NO_COMPRESSION) { - int y; - const uint8_t* prev_line = dec->alpha_prev_line_; - const uint8_t* deltas = dec->alpha_data_ + ALPHA_HEADER_LEN + row * width; - uint8_t* dst = dec->alpha_plane_ + row * width; - assert(deltas <= &dec->alpha_data_[dec->alpha_data_size_]); - if (alph_dec->filter_ != WEBP_FILTER_NONE) { - assert(WebPUnfilters[alph_dec->filter_] != NULL); - for (y = 0; y < num_rows; ++y) { - WebPUnfilters[alph_dec->filter_](prev_line, deltas, dst, width); - prev_line = dst; - dst += width; - deltas += width; - } - } else { - for (y = 0; y < num_rows; ++y) { - memcpy(dst, deltas, width * sizeof(*dst)); - prev_line = dst; - dst += width; - deltas += width; - } - } - dec->alpha_prev_line_ = prev_line; - } else { // alph_dec->method_ == ALPHA_LOSSLESS_COMPRESSION - assert(alph_dec->vp8l_dec_ != NULL); - if (!VP8LDecodeAlphaImageStream(alph_dec, row + num_rows)) { - return 0; - } - } - - if (row + num_rows >= height) { - dec->is_alpha_decoded_ = 1; - } - return 1; -} - -static int AllocateAlphaPlane(VP8Decoder* const dec, const VP8Io* const io) { - const int stride = io->width; - const int height = io->crop_bottom; - const uint64_t alpha_size = (uint64_t)stride * height; - assert(dec->alpha_plane_mem_ == NULL); - dec->alpha_plane_mem_ = - (uint8_t*)WebPSafeMalloc(alpha_size, sizeof(*dec->alpha_plane_)); - if (dec->alpha_plane_mem_ == NULL) { - return 0; - } - dec->alpha_plane_ = dec->alpha_plane_mem_; - dec->alpha_prev_line_ = NULL; - return 1; -} - -void WebPDeallocateAlphaMemory(VP8Decoder* const dec) { - assert(dec != NULL); - WebPSafeFree(dec->alpha_plane_mem_); - dec->alpha_plane_mem_ = NULL; - dec->alpha_plane_ = NULL; - ALPHDelete(dec->alph_dec_); - dec->alph_dec_ = NULL; -} - -//------------------------------------------------------------------------------ -// Main entry point. - -const uint8_t* VP8DecompressAlphaRows(VP8Decoder* const dec, - const VP8Io* const io, - int row, int num_rows) { - const int width = io->width; - const int height = io->crop_bottom; - - assert(dec != NULL && io != NULL); - - if (row < 0 || num_rows <= 0 || row + num_rows > height) { - return NULL; // sanity check. - } - - if (!dec->is_alpha_decoded_) { - if (dec->alph_dec_ == NULL) { // Initialize decoder. - dec->alph_dec_ = ALPHNew(); - if (dec->alph_dec_ == NULL) return NULL; - if (!AllocateAlphaPlane(dec, io)) goto Error; - if (!ALPHInit(dec->alph_dec_, dec->alpha_data_, dec->alpha_data_size_, - io, dec->alpha_plane_)) { - goto Error; - } - // if we allowed use of alpha dithering, check whether it's needed at all - if (dec->alph_dec_->pre_processing_ != ALPHA_PREPROCESSED_LEVELS) { - dec->alpha_dithering_ = 0; // disable dithering - } else { - num_rows = height - row; // decode everything in one pass - } - } - - assert(dec->alph_dec_ != NULL); - assert(row + num_rows <= height); - if (!ALPHDecode(dec, row, num_rows)) goto Error; - - if (dec->is_alpha_decoded_) { // finished? - ALPHDelete(dec->alph_dec_); - dec->alph_dec_ = NULL; - if (dec->alpha_dithering_ > 0) { - uint8_t* const alpha = dec->alpha_plane_ + io->crop_top * width - + io->crop_left; - if (!WebPDequantizeLevels(alpha, - io->crop_right - io->crop_left, - io->crop_bottom - io->crop_top, - width, dec->alpha_dithering_)) { - goto Error; - } - } - } - } - - // Return a pointer to the current decoded row. - return dec->alpha_plane_ + row * width; - - Error: - WebPDeallocateAlphaMemory(dec); - return NULL; -} diff --git a/Extended/libwebp/src/dec/alphai_dec.h b/Extended/libwebp/src/dec/alphai_dec.h deleted file mode 100644 index a64104a..0000000 --- a/Extended/libwebp/src/dec/alphai_dec.h +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright 2013 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Alpha decoder: internal header. -// -// Author: Urvang (urvang@google.com) - -#ifndef WEBP_DEC_ALPHAI_DEC_H_ -#define WEBP_DEC_ALPHAI_DEC_H_ - -#include "src/dec/webpi_dec.h" -#include "src/utils/filters_utils.h" - -#ifdef __cplusplus -extern "C" { -#endif - -struct VP8LDecoder; // Defined in dec/vp8li.h. - -typedef struct ALPHDecoder ALPHDecoder; -struct ALPHDecoder { - int width_; - int height_; - int method_; - WEBP_FILTER_TYPE filter_; - int pre_processing_; - struct VP8LDecoder* vp8l_dec_; - VP8Io io_; - int use_8b_decode_; // Although alpha channel requires only 1 byte per - // pixel, sometimes VP8LDecoder may need to allocate - // 4 bytes per pixel internally during decode. - uint8_t* output_; - const uint8_t* prev_line_; // last output row (or NULL) -}; - -//------------------------------------------------------------------------------ -// internal functions. Not public. - -// Deallocate memory associated to dec->alpha_plane_ decoding -void WebPDeallocateAlphaMemory(VP8Decoder* const dec); - -//------------------------------------------------------------------------------ - -#ifdef __cplusplus -} // extern "C" -#endif - -#endif // WEBP_DEC_ALPHAI_DEC_H_ diff --git a/Extended/libwebp/src/dec/buffer_dec.c b/Extended/libwebp/src/dec/buffer_dec.c deleted file mode 100644 index 3cd94eb..0000000 --- a/Extended/libwebp/src/dec/buffer_dec.c +++ /dev/null @@ -1,312 +0,0 @@ -// Copyright 2011 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Everything about WebPDecBuffer -// -// Author: Skal (pascal.massimino@gmail.com) - -#include - -#include "src/dec/vp8i_dec.h" -#include "src/dec/webpi_dec.h" -#include "src/utils/utils.h" - -//------------------------------------------------------------------------------ -// WebPDecBuffer - -// Number of bytes per pixel for the different color-spaces. -static const uint8_t kModeBpp[MODE_LAST] = { - 3, 4, 3, 4, 4, 2, 2, - 4, 4, 4, 2, // pre-multiplied modes - 1, 1 }; - -// Check that webp_csp_mode is within the bounds of WEBP_CSP_MODE. -// Convert to an integer to handle both the unsigned/signed enum cases -// without the need for casting to remove type limit warnings. -static int IsValidColorspace(int webp_csp_mode) { - return (webp_csp_mode >= MODE_RGB && webp_csp_mode < MODE_LAST); -} - -// strictly speaking, the very last (or first, if flipped) row -// doesn't require padding. -#define MIN_BUFFER_SIZE(WIDTH, HEIGHT, STRIDE) \ - ((uint64_t)(STRIDE) * ((HEIGHT) - 1) + (WIDTH)) - -static VP8StatusCode CheckDecBuffer(const WebPDecBuffer* const buffer) { - int ok = 1; - const WEBP_CSP_MODE mode = buffer->colorspace; - const int width = buffer->width; - const int height = buffer->height; - if (!IsValidColorspace(mode)) { - ok = 0; - } else if (!WebPIsRGBMode(mode)) { // YUV checks - const WebPYUVABuffer* const buf = &buffer->u.YUVA; - const int uv_width = (width + 1) / 2; - const int uv_height = (height + 1) / 2; - const int y_stride = abs(buf->y_stride); - const int u_stride = abs(buf->u_stride); - const int v_stride = abs(buf->v_stride); - const int a_stride = abs(buf->a_stride); - const uint64_t y_size = MIN_BUFFER_SIZE(width, height, y_stride); - const uint64_t u_size = MIN_BUFFER_SIZE(uv_width, uv_height, u_stride); - const uint64_t v_size = MIN_BUFFER_SIZE(uv_width, uv_height, v_stride); - const uint64_t a_size = MIN_BUFFER_SIZE(width, height, a_stride); - ok &= (y_size <= buf->y_size); - ok &= (u_size <= buf->u_size); - ok &= (v_size <= buf->v_size); - ok &= (y_stride >= width); - ok &= (u_stride >= uv_width); - ok &= (v_stride >= uv_width); - ok &= (buf->y != NULL); - ok &= (buf->u != NULL); - ok &= (buf->v != NULL); - if (mode == MODE_YUVA) { - ok &= (a_stride >= width); - ok &= (a_size <= buf->a_size); - ok &= (buf->a != NULL); - } - } else { // RGB checks - const WebPRGBABuffer* const buf = &buffer->u.RGBA; - const int stride = abs(buf->stride); - const uint64_t size = - MIN_BUFFER_SIZE(width * kModeBpp[mode], height, stride); - ok &= (size <= buf->size); - ok &= (stride >= width * kModeBpp[mode]); - ok &= (buf->rgba != NULL); - } - return ok ? VP8_STATUS_OK : VP8_STATUS_INVALID_PARAM; -} -#undef MIN_BUFFER_SIZE - -static VP8StatusCode AllocateBuffer(WebPDecBuffer* const buffer) { - const int w = buffer->width; - const int h = buffer->height; - const WEBP_CSP_MODE mode = buffer->colorspace; - - if (w <= 0 || h <= 0 || !IsValidColorspace(mode)) { - return VP8_STATUS_INVALID_PARAM; - } - - if (buffer->is_external_memory <= 0 && buffer->private_memory == NULL) { - uint8_t* output; - int uv_stride = 0, a_stride = 0; - uint64_t uv_size = 0, a_size = 0, total_size; - // We need memory and it hasn't been allocated yet. - // => initialize output buffer, now that dimensions are known. - int stride; - uint64_t size; - - if ((uint64_t)w * kModeBpp[mode] >= (1ull << 32)) { - return VP8_STATUS_INVALID_PARAM; - } - stride = w * kModeBpp[mode]; - size = (uint64_t)stride * h; - if (!WebPIsRGBMode(mode)) { - uv_stride = (w + 1) / 2; - uv_size = (uint64_t)uv_stride * ((h + 1) / 2); - if (mode == MODE_YUVA) { - a_stride = w; - a_size = (uint64_t)a_stride * h; - } - } - total_size = size + 2 * uv_size + a_size; - - // Security/sanity checks - output = (uint8_t*)WebPSafeMalloc(total_size, sizeof(*output)); - if (output == NULL) { - return VP8_STATUS_OUT_OF_MEMORY; - } - buffer->private_memory = output; - - if (!WebPIsRGBMode(mode)) { // YUVA initialization - WebPYUVABuffer* const buf = &buffer->u.YUVA; - buf->y = output; - buf->y_stride = stride; - buf->y_size = (size_t)size; - buf->u = output + size; - buf->u_stride = uv_stride; - buf->u_size = (size_t)uv_size; - buf->v = output + size + uv_size; - buf->v_stride = uv_stride; - buf->v_size = (size_t)uv_size; - if (mode == MODE_YUVA) { - buf->a = output + size + 2 * uv_size; - } - buf->a_size = (size_t)a_size; - buf->a_stride = a_stride; - } else { // RGBA initialization - WebPRGBABuffer* const buf = &buffer->u.RGBA; - buf->rgba = output; - buf->stride = stride; - buf->size = (size_t)size; - } - } - return CheckDecBuffer(buffer); -} - -VP8StatusCode WebPFlipBuffer(WebPDecBuffer* const buffer) { - if (buffer == NULL) { - return VP8_STATUS_INVALID_PARAM; - } - if (WebPIsRGBMode(buffer->colorspace)) { - WebPRGBABuffer* const buf = &buffer->u.RGBA; - buf->rgba += (buffer->height - 1) * buf->stride; - buf->stride = -buf->stride; - } else { - WebPYUVABuffer* const buf = &buffer->u.YUVA; - const int H = buffer->height; - buf->y += (H - 1) * buf->y_stride; - buf->y_stride = -buf->y_stride; - buf->u += ((H - 1) >> 1) * buf->u_stride; - buf->u_stride = -buf->u_stride; - buf->v += ((H - 1) >> 1) * buf->v_stride; - buf->v_stride = -buf->v_stride; - if (buf->a != NULL) { - buf->a += (H - 1) * buf->a_stride; - buf->a_stride = -buf->a_stride; - } - } - return VP8_STATUS_OK; -} - -VP8StatusCode WebPAllocateDecBuffer(int width, int height, - const WebPDecoderOptions* const options, - WebPDecBuffer* const buffer) { - VP8StatusCode status; - if (buffer == NULL || width <= 0 || height <= 0) { - return VP8_STATUS_INVALID_PARAM; - } - if (options != NULL) { // First, apply options if there is any. - if (options->use_cropping) { - const int cw = options->crop_width; - const int ch = options->crop_height; - const int x = options->crop_left & ~1; - const int y = options->crop_top & ~1; - if (x < 0 || y < 0 || cw <= 0 || ch <= 0 || - x + cw > width || y + ch > height) { - return VP8_STATUS_INVALID_PARAM; // out of frame boundary. - } - width = cw; - height = ch; - } - - if (options->use_scaling) { -#if !defined(WEBP_REDUCE_SIZE) - int scaled_width = options->scaled_width; - int scaled_height = options->scaled_height; - if (!WebPRescalerGetScaledDimensions( - width, height, &scaled_width, &scaled_height)) { - return VP8_STATUS_INVALID_PARAM; - } - width = scaled_width; - height = scaled_height; -#else - return VP8_STATUS_INVALID_PARAM; // rescaling not supported -#endif - } - } - buffer->width = width; - buffer->height = height; - - // Then, allocate buffer for real. - status = AllocateBuffer(buffer); - if (status != VP8_STATUS_OK) return status; - - // Use the stride trick if vertical flip is needed. - if (options != NULL && options->flip) { - status = WebPFlipBuffer(buffer); - } - return status; -} - -//------------------------------------------------------------------------------ -// constructors / destructors - -int WebPInitDecBufferInternal(WebPDecBuffer* buffer, int version) { - if (WEBP_ABI_IS_INCOMPATIBLE(version, WEBP_DECODER_ABI_VERSION)) { - return 0; // version mismatch - } - if (buffer == NULL) return 0; - memset(buffer, 0, sizeof(*buffer)); - return 1; -} - -void WebPFreeDecBuffer(WebPDecBuffer* buffer) { - if (buffer != NULL) { - if (buffer->is_external_memory <= 0) { - WebPSafeFree(buffer->private_memory); - } - buffer->private_memory = NULL; - } -} - -void WebPCopyDecBuffer(const WebPDecBuffer* const src, - WebPDecBuffer* const dst) { - if (src != NULL && dst != NULL) { - *dst = *src; - if (src->private_memory != NULL) { - dst->is_external_memory = 1; // dst buffer doesn't own the memory. - dst->private_memory = NULL; - } - } -} - -// Copy and transfer ownership from src to dst (beware of parameter order!) -void WebPGrabDecBuffer(WebPDecBuffer* const src, WebPDecBuffer* const dst) { - if (src != NULL && dst != NULL) { - *dst = *src; - if (src->private_memory != NULL) { - src->is_external_memory = 1; // src relinquishes ownership - src->private_memory = NULL; - } - } -} - -VP8StatusCode WebPCopyDecBufferPixels(const WebPDecBuffer* const src_buf, - WebPDecBuffer* const dst_buf) { - assert(src_buf != NULL && dst_buf != NULL); - assert(src_buf->colorspace == dst_buf->colorspace); - - dst_buf->width = src_buf->width; - dst_buf->height = src_buf->height; - if (CheckDecBuffer(dst_buf) != VP8_STATUS_OK) { - return VP8_STATUS_INVALID_PARAM; - } - if (WebPIsRGBMode(src_buf->colorspace)) { - const WebPRGBABuffer* const src = &src_buf->u.RGBA; - const WebPRGBABuffer* const dst = &dst_buf->u.RGBA; - WebPCopyPlane(src->rgba, src->stride, dst->rgba, dst->stride, - src_buf->width * kModeBpp[src_buf->colorspace], - src_buf->height); - } else { - const WebPYUVABuffer* const src = &src_buf->u.YUVA; - const WebPYUVABuffer* const dst = &dst_buf->u.YUVA; - WebPCopyPlane(src->y, src->y_stride, dst->y, dst->y_stride, - src_buf->width, src_buf->height); - WebPCopyPlane(src->u, src->u_stride, dst->u, dst->u_stride, - (src_buf->width + 1) / 2, (src_buf->height + 1) / 2); - WebPCopyPlane(src->v, src->v_stride, dst->v, dst->v_stride, - (src_buf->width + 1) / 2, (src_buf->height + 1) / 2); - if (WebPIsAlphaMode(src_buf->colorspace)) { - WebPCopyPlane(src->a, src->a_stride, dst->a, dst->a_stride, - src_buf->width, src_buf->height); - } - } - return VP8_STATUS_OK; -} - -int WebPAvoidSlowMemory(const WebPDecBuffer* const output, - const WebPBitstreamFeatures* const features) { - assert(output != NULL); - return (output->is_external_memory >= 2) && - WebPIsPremultipliedMode(output->colorspace) && - (features != NULL && features->has_alpha); -} - -//------------------------------------------------------------------------------ diff --git a/Extended/libwebp/src/dec/common_dec.h b/Extended/libwebp/src/dec/common_dec.h deleted file mode 100644 index b158550..0000000 --- a/Extended/libwebp/src/dec/common_dec.h +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright 2015 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Definitions and macros common to encoding and decoding -// -// Author: Skal (pascal.massimino@gmail.com) - -#ifndef WEBP_DEC_COMMON_DEC_H_ -#define WEBP_DEC_COMMON_DEC_H_ - -// intra prediction modes -enum { B_DC_PRED = 0, // 4x4 modes - B_TM_PRED = 1, - B_VE_PRED = 2, - B_HE_PRED = 3, - B_RD_PRED = 4, - B_VR_PRED = 5, - B_LD_PRED = 6, - B_VL_PRED = 7, - B_HD_PRED = 8, - B_HU_PRED = 9, - NUM_BMODES = B_HU_PRED + 1 - B_DC_PRED, // = 10 - - // Luma16 or UV modes - DC_PRED = B_DC_PRED, V_PRED = B_VE_PRED, - H_PRED = B_HE_PRED, TM_PRED = B_TM_PRED, - B_PRED = NUM_BMODES, // refined I4x4 mode - NUM_PRED_MODES = 4, - - // special modes - B_DC_PRED_NOTOP = 4, - B_DC_PRED_NOLEFT = 5, - B_DC_PRED_NOTOPLEFT = 6, - NUM_B_DC_MODES = 7 }; - -enum { MB_FEATURE_TREE_PROBS = 3, - NUM_MB_SEGMENTS = 4, - NUM_REF_LF_DELTAS = 4, - NUM_MODE_LF_DELTAS = 4, // I4x4, ZERO, *, SPLIT - MAX_NUM_PARTITIONS = 8, - // Probabilities - NUM_TYPES = 4, // 0: i16-AC, 1: i16-DC, 2:chroma-AC, 3:i4-AC - NUM_BANDS = 8, - NUM_CTX = 3, - NUM_PROBAS = 11 - }; - -#endif // WEBP_DEC_COMMON_DEC_H_ diff --git a/Extended/libwebp/src/dec/frame_dec.c b/Extended/libwebp/src/dec/frame_dec.c deleted file mode 100644 index 04609a8..0000000 --- a/Extended/libwebp/src/dec/frame_dec.c +++ /dev/null @@ -1,803 +0,0 @@ -// Copyright 2010 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Frame-reconstruction function. Memory allocation. -// -// Author: Skal (pascal.massimino@gmail.com) - -#include -#include "src/dec/vp8i_dec.h" -#include "src/utils/utils.h" - -//------------------------------------------------------------------------------ -// Main reconstruction function. - -static const uint16_t kScan[16] = { - 0 + 0 * BPS, 4 + 0 * BPS, 8 + 0 * BPS, 12 + 0 * BPS, - 0 + 4 * BPS, 4 + 4 * BPS, 8 + 4 * BPS, 12 + 4 * BPS, - 0 + 8 * BPS, 4 + 8 * BPS, 8 + 8 * BPS, 12 + 8 * BPS, - 0 + 12 * BPS, 4 + 12 * BPS, 8 + 12 * BPS, 12 + 12 * BPS -}; - -static int CheckMode(int mb_x, int mb_y, int mode) { - if (mode == B_DC_PRED) { - if (mb_x == 0) { - return (mb_y == 0) ? B_DC_PRED_NOTOPLEFT : B_DC_PRED_NOLEFT; - } else { - return (mb_y == 0) ? B_DC_PRED_NOTOP : B_DC_PRED; - } - } - return mode; -} - -static void Copy32b(uint8_t* const dst, const uint8_t* const src) { - memcpy(dst, src, 4); -} - -static WEBP_INLINE void DoTransform(uint32_t bits, const int16_t* const src, - uint8_t* const dst) { - switch (bits >> 30) { - case 3: - VP8Transform(src, dst, 0); - break; - case 2: - VP8TransformAC3(src, dst); - break; - case 1: - VP8TransformDC(src, dst); - break; - default: - break; - } -} - -static void DoUVTransform(uint32_t bits, const int16_t* const src, - uint8_t* const dst) { - if (bits & 0xff) { // any non-zero coeff at all? - if (bits & 0xaa) { // any non-zero AC coefficient? - VP8TransformUV(src, dst); // note we don't use the AC3 variant for U/V - } else { - VP8TransformDCUV(src, dst); - } - } -} - -static void ReconstructRow(const VP8Decoder* const dec, - const VP8ThreadContext* ctx) { - int j; - int mb_x; - const int mb_y = ctx->mb_y_; - const int cache_id = ctx->id_; - uint8_t* const y_dst = dec->yuv_b_ + Y_OFF; - uint8_t* const u_dst = dec->yuv_b_ + U_OFF; - uint8_t* const v_dst = dec->yuv_b_ + V_OFF; - - // Initialize left-most block. - for (j = 0; j < 16; ++j) { - y_dst[j * BPS - 1] = 129; - } - for (j = 0; j < 8; ++j) { - u_dst[j * BPS - 1] = 129; - v_dst[j * BPS - 1] = 129; - } - - // Init top-left sample on left column too. - if (mb_y > 0) { - y_dst[-1 - BPS] = u_dst[-1 - BPS] = v_dst[-1 - BPS] = 129; - } else { - // we only need to do this init once at block (0,0). - // Afterward, it remains valid for the whole topmost row. - memset(y_dst - BPS - 1, 127, 16 + 4 + 1); - memset(u_dst - BPS - 1, 127, 8 + 1); - memset(v_dst - BPS - 1, 127, 8 + 1); - } - - // Reconstruct one row. - for (mb_x = 0; mb_x < dec->mb_w_; ++mb_x) { - const VP8MBData* const block = ctx->mb_data_ + mb_x; - - // Rotate in the left samples from previously decoded block. We move four - // pixels at a time for alignment reason, and because of in-loop filter. - if (mb_x > 0) { - for (j = -1; j < 16; ++j) { - Copy32b(&y_dst[j * BPS - 4], &y_dst[j * BPS + 12]); - } - for (j = -1; j < 8; ++j) { - Copy32b(&u_dst[j * BPS - 4], &u_dst[j * BPS + 4]); - Copy32b(&v_dst[j * BPS - 4], &v_dst[j * BPS + 4]); - } - } - { - // bring top samples into the cache - VP8TopSamples* const top_yuv = dec->yuv_t_ + mb_x; - const int16_t* const coeffs = block->coeffs_; - uint32_t bits = block->non_zero_y_; - int n; - - if (mb_y > 0) { - memcpy(y_dst - BPS, top_yuv[0].y, 16); - memcpy(u_dst - BPS, top_yuv[0].u, 8); - memcpy(v_dst - BPS, top_yuv[0].v, 8); - } - - // predict and add residuals - if (block->is_i4x4_) { // 4x4 - uint32_t* const top_right = (uint32_t*)(y_dst - BPS + 16); - - if (mb_y > 0) { - if (mb_x >= dec->mb_w_ - 1) { // on rightmost border - memset(top_right, top_yuv[0].y[15], sizeof(*top_right)); - } else { - memcpy(top_right, top_yuv[1].y, sizeof(*top_right)); - } - } - // replicate the top-right pixels below - top_right[BPS] = top_right[2 * BPS] = top_right[3 * BPS] = top_right[0]; - - // predict and add residuals for all 4x4 blocks in turn. - for (n = 0; n < 16; ++n, bits <<= 2) { - uint8_t* const dst = y_dst + kScan[n]; - VP8PredLuma4[block->imodes_[n]](dst); - DoTransform(bits, coeffs + n * 16, dst); - } - } else { // 16x16 - const int pred_func = CheckMode(mb_x, mb_y, block->imodes_[0]); - VP8PredLuma16[pred_func](y_dst); - if (bits != 0) { - for (n = 0; n < 16; ++n, bits <<= 2) { - DoTransform(bits, coeffs + n * 16, y_dst + kScan[n]); - } - } - } - { - // Chroma - const uint32_t bits_uv = block->non_zero_uv_; - const int pred_func = CheckMode(mb_x, mb_y, block->uvmode_); - VP8PredChroma8[pred_func](u_dst); - VP8PredChroma8[pred_func](v_dst); - DoUVTransform(bits_uv >> 0, coeffs + 16 * 16, u_dst); - DoUVTransform(bits_uv >> 8, coeffs + 20 * 16, v_dst); - } - - // stash away top samples for next block - if (mb_y < dec->mb_h_ - 1) { - memcpy(top_yuv[0].y, y_dst + 15 * BPS, 16); - memcpy(top_yuv[0].u, u_dst + 7 * BPS, 8); - memcpy(top_yuv[0].v, v_dst + 7 * BPS, 8); - } - } - // Transfer reconstructed samples from yuv_b_ cache to final destination. - { - const int y_offset = cache_id * 16 * dec->cache_y_stride_; - const int uv_offset = cache_id * 8 * dec->cache_uv_stride_; - uint8_t* const y_out = dec->cache_y_ + mb_x * 16 + y_offset; - uint8_t* const u_out = dec->cache_u_ + mb_x * 8 + uv_offset; - uint8_t* const v_out = dec->cache_v_ + mb_x * 8 + uv_offset; - for (j = 0; j < 16; ++j) { - memcpy(y_out + j * dec->cache_y_stride_, y_dst + j * BPS, 16); - } - for (j = 0; j < 8; ++j) { - memcpy(u_out + j * dec->cache_uv_stride_, u_dst + j * BPS, 8); - memcpy(v_out + j * dec->cache_uv_stride_, v_dst + j * BPS, 8); - } - } - } -} - -//------------------------------------------------------------------------------ -// Filtering - -// kFilterExtraRows[] = How many extra lines are needed on the MB boundary -// for caching, given a filtering level. -// Simple filter: up to 2 luma samples are read and 1 is written. -// Complex filter: up to 4 luma samples are read and 3 are written. Same for -// U/V, so it's 8 samples total (because of the 2x upsampling). -static const uint8_t kFilterExtraRows[3] = { 0, 2, 8 }; - -static void DoFilter(const VP8Decoder* const dec, int mb_x, int mb_y) { - const VP8ThreadContext* const ctx = &dec->thread_ctx_; - const int cache_id = ctx->id_; - const int y_bps = dec->cache_y_stride_; - const VP8FInfo* const f_info = ctx->f_info_ + mb_x; - uint8_t* const y_dst = dec->cache_y_ + cache_id * 16 * y_bps + mb_x * 16; - const int ilevel = f_info->f_ilevel_; - const int limit = f_info->f_limit_; - if (limit == 0) { - return; - } - assert(limit >= 3); - if (dec->filter_type_ == 1) { // simple - if (mb_x > 0) { - VP8SimpleHFilter16(y_dst, y_bps, limit + 4); - } - if (f_info->f_inner_) { - VP8SimpleHFilter16i(y_dst, y_bps, limit); - } - if (mb_y > 0) { - VP8SimpleVFilter16(y_dst, y_bps, limit + 4); - } - if (f_info->f_inner_) { - VP8SimpleVFilter16i(y_dst, y_bps, limit); - } - } else { // complex - const int uv_bps = dec->cache_uv_stride_; - uint8_t* const u_dst = dec->cache_u_ + cache_id * 8 * uv_bps + mb_x * 8; - uint8_t* const v_dst = dec->cache_v_ + cache_id * 8 * uv_bps + mb_x * 8; - const int hev_thresh = f_info->hev_thresh_; - if (mb_x > 0) { - VP8HFilter16(y_dst, y_bps, limit + 4, ilevel, hev_thresh); - VP8HFilter8(u_dst, v_dst, uv_bps, limit + 4, ilevel, hev_thresh); - } - if (f_info->f_inner_) { - VP8HFilter16i(y_dst, y_bps, limit, ilevel, hev_thresh); - VP8HFilter8i(u_dst, v_dst, uv_bps, limit, ilevel, hev_thresh); - } - if (mb_y > 0) { - VP8VFilter16(y_dst, y_bps, limit + 4, ilevel, hev_thresh); - VP8VFilter8(u_dst, v_dst, uv_bps, limit + 4, ilevel, hev_thresh); - } - if (f_info->f_inner_) { - VP8VFilter16i(y_dst, y_bps, limit, ilevel, hev_thresh); - VP8VFilter8i(u_dst, v_dst, uv_bps, limit, ilevel, hev_thresh); - } - } -} - -// Filter the decoded macroblock row (if needed) -static void FilterRow(const VP8Decoder* const dec) { - int mb_x; - const int mb_y = dec->thread_ctx_.mb_y_; - assert(dec->thread_ctx_.filter_row_); - for (mb_x = dec->tl_mb_x_; mb_x < dec->br_mb_x_; ++mb_x) { - DoFilter(dec, mb_x, mb_y); - } -} - -//------------------------------------------------------------------------------ -// Precompute the filtering strength for each segment and each i4x4/i16x16 mode. - -static void PrecomputeFilterStrengths(VP8Decoder* const dec) { - if (dec->filter_type_ > 0) { - int s; - const VP8FilterHeader* const hdr = &dec->filter_hdr_; - for (s = 0; s < NUM_MB_SEGMENTS; ++s) { - int i4x4; - // First, compute the initial level - int base_level; - if (dec->segment_hdr_.use_segment_) { - base_level = dec->segment_hdr_.filter_strength_[s]; - if (!dec->segment_hdr_.absolute_delta_) { - base_level += hdr->level_; - } - } else { - base_level = hdr->level_; - } - for (i4x4 = 0; i4x4 <= 1; ++i4x4) { - VP8FInfo* const info = &dec->fstrengths_[s][i4x4]; - int level = base_level; - if (hdr->use_lf_delta_) { - level += hdr->ref_lf_delta_[0]; - if (i4x4) { - level += hdr->mode_lf_delta_[0]; - } - } - level = (level < 0) ? 0 : (level > 63) ? 63 : level; - if (level > 0) { - int ilevel = level; - if (hdr->sharpness_ > 0) { - if (hdr->sharpness_ > 4) { - ilevel >>= 2; - } else { - ilevel >>= 1; - } - if (ilevel > 9 - hdr->sharpness_) { - ilevel = 9 - hdr->sharpness_; - } - } - if (ilevel < 1) ilevel = 1; - info->f_ilevel_ = ilevel; - info->f_limit_ = 2 * level + ilevel; - info->hev_thresh_ = (level >= 40) ? 2 : (level >= 15) ? 1 : 0; - } else { - info->f_limit_ = 0; // no filtering - } - info->f_inner_ = i4x4; - } - } - } -} - -//------------------------------------------------------------------------------ -// Dithering - -// minimal amp that will provide a non-zero dithering effect -#define MIN_DITHER_AMP 4 - -#define DITHER_AMP_TAB_SIZE 12 -static const uint8_t kQuantToDitherAmp[DITHER_AMP_TAB_SIZE] = { - // roughly, it's dqm->uv_mat_[1] - 8, 7, 6, 4, 4, 2, 2, 2, 1, 1, 1, 1 -}; - -void VP8InitDithering(const WebPDecoderOptions* const options, - VP8Decoder* const dec) { - assert(dec != NULL); - if (options != NULL) { - const int d = options->dithering_strength; - const int max_amp = (1 << VP8_RANDOM_DITHER_FIX) - 1; - const int f = (d < 0) ? 0 : (d > 100) ? max_amp : (d * max_amp / 100); - if (f > 0) { - int s; - int all_amp = 0; - for (s = 0; s < NUM_MB_SEGMENTS; ++s) { - VP8QuantMatrix* const dqm = &dec->dqm_[s]; - if (dqm->uv_quant_ < DITHER_AMP_TAB_SIZE) { - const int idx = (dqm->uv_quant_ < 0) ? 0 : dqm->uv_quant_; - dqm->dither_ = (f * kQuantToDitherAmp[idx]) >> 3; - } - all_amp |= dqm->dither_; - } - if (all_amp != 0) { - VP8InitRandom(&dec->dithering_rg_, 1.0f); - dec->dither_ = 1; - } - } - // potentially allow alpha dithering - dec->alpha_dithering_ = options->alpha_dithering_strength; - if (dec->alpha_dithering_ > 100) { - dec->alpha_dithering_ = 100; - } else if (dec->alpha_dithering_ < 0) { - dec->alpha_dithering_ = 0; - } - } -} - -// Convert to range: [-2,2] for dither=50, [-4,4] for dither=100 -static void Dither8x8(VP8Random* const rg, uint8_t* dst, int bps, int amp) { - uint8_t dither[64]; - int i; - for (i = 0; i < 8 * 8; ++i) { - dither[i] = VP8RandomBits2(rg, VP8_DITHER_AMP_BITS + 1, amp); - } - VP8DitherCombine8x8(dither, dst, bps); -} - -static void DitherRow(VP8Decoder* const dec) { - int mb_x; - assert(dec->dither_); - for (mb_x = dec->tl_mb_x_; mb_x < dec->br_mb_x_; ++mb_x) { - const VP8ThreadContext* const ctx = &dec->thread_ctx_; - const VP8MBData* const data = ctx->mb_data_ + mb_x; - const int cache_id = ctx->id_; - const int uv_bps = dec->cache_uv_stride_; - if (data->dither_ >= MIN_DITHER_AMP) { - uint8_t* const u_dst = dec->cache_u_ + cache_id * 8 * uv_bps + mb_x * 8; - uint8_t* const v_dst = dec->cache_v_ + cache_id * 8 * uv_bps + mb_x * 8; - Dither8x8(&dec->dithering_rg_, u_dst, uv_bps, data->dither_); - Dither8x8(&dec->dithering_rg_, v_dst, uv_bps, data->dither_); - } - } -} - -//------------------------------------------------------------------------------ -// This function is called after a row of macroblocks is finished decoding. -// It also takes into account the following restrictions: -// * In case of in-loop filtering, we must hold off sending some of the bottom -// pixels as they are yet unfiltered. They will be when the next macroblock -// row is decoded. Meanwhile, we must preserve them by rotating them in the -// cache area. This doesn't hold for the very bottom row of the uncropped -// picture of course. -// * we must clip the remaining pixels against the cropping area. The VP8Io -// struct must have the following fields set correctly before calling put(): - -#define MACROBLOCK_VPOS(mb_y) ((mb_y) * 16) // vertical position of a MB - -// Finalize and transmit a complete row. Return false in case of user-abort. -static int FinishRow(void* arg1, void* arg2) { - VP8Decoder* const dec = (VP8Decoder*)arg1; - VP8Io* const io = (VP8Io*)arg2; - int ok = 1; - const VP8ThreadContext* const ctx = &dec->thread_ctx_; - const int cache_id = ctx->id_; - const int extra_y_rows = kFilterExtraRows[dec->filter_type_]; - const int ysize = extra_y_rows * dec->cache_y_stride_; - const int uvsize = (extra_y_rows / 2) * dec->cache_uv_stride_; - const int y_offset = cache_id * 16 * dec->cache_y_stride_; - const int uv_offset = cache_id * 8 * dec->cache_uv_stride_; - uint8_t* const ydst = dec->cache_y_ - ysize + y_offset; - uint8_t* const udst = dec->cache_u_ - uvsize + uv_offset; - uint8_t* const vdst = dec->cache_v_ - uvsize + uv_offset; - const int mb_y = ctx->mb_y_; - const int is_first_row = (mb_y == 0); - const int is_last_row = (mb_y >= dec->br_mb_y_ - 1); - - if (dec->mt_method_ == 2) { - ReconstructRow(dec, ctx); - } - - if (ctx->filter_row_) { - FilterRow(dec); - } - - if (dec->dither_) { - DitherRow(dec); - } - - if (io->put != NULL) { - int y_start = MACROBLOCK_VPOS(mb_y); - int y_end = MACROBLOCK_VPOS(mb_y + 1); - if (!is_first_row) { - y_start -= extra_y_rows; - io->y = ydst; - io->u = udst; - io->v = vdst; - } else { - io->y = dec->cache_y_ + y_offset; - io->u = dec->cache_u_ + uv_offset; - io->v = dec->cache_v_ + uv_offset; - } - - if (!is_last_row) { - y_end -= extra_y_rows; - } - if (y_end > io->crop_bottom) { - y_end = io->crop_bottom; // make sure we don't overflow on last row. - } - // If dec->alpha_data_ is not NULL, we have some alpha plane present. - io->a = NULL; - if (dec->alpha_data_ != NULL && y_start < y_end) { - io->a = VP8DecompressAlphaRows(dec, io, y_start, y_end - y_start); - if (io->a == NULL) { - return VP8SetError(dec, VP8_STATUS_BITSTREAM_ERROR, - "Could not decode alpha data."); - } - } - if (y_start < io->crop_top) { - const int delta_y = io->crop_top - y_start; - y_start = io->crop_top; - assert(!(delta_y & 1)); - io->y += dec->cache_y_stride_ * delta_y; - io->u += dec->cache_uv_stride_ * (delta_y >> 1); - io->v += dec->cache_uv_stride_ * (delta_y >> 1); - if (io->a != NULL) { - io->a += io->width * delta_y; - } - } - if (y_start < y_end) { - io->y += io->crop_left; - io->u += io->crop_left >> 1; - io->v += io->crop_left >> 1; - if (io->a != NULL) { - io->a += io->crop_left; - } - io->mb_y = y_start - io->crop_top; - io->mb_w = io->crop_right - io->crop_left; - io->mb_h = y_end - y_start; - ok = io->put(io); - } - } - // rotate top samples if needed - if (cache_id + 1 == dec->num_caches_) { - if (!is_last_row) { - memcpy(dec->cache_y_ - ysize, ydst + 16 * dec->cache_y_stride_, ysize); - memcpy(dec->cache_u_ - uvsize, udst + 8 * dec->cache_uv_stride_, uvsize); - memcpy(dec->cache_v_ - uvsize, vdst + 8 * dec->cache_uv_stride_, uvsize); - } - } - - return ok; -} - -#undef MACROBLOCK_VPOS - -//------------------------------------------------------------------------------ - -int VP8ProcessRow(VP8Decoder* const dec, VP8Io* const io) { - int ok = 1; - VP8ThreadContext* const ctx = &dec->thread_ctx_; - const int filter_row = - (dec->filter_type_ > 0) && - (dec->mb_y_ >= dec->tl_mb_y_) && (dec->mb_y_ <= dec->br_mb_y_); - if (dec->mt_method_ == 0) { - // ctx->id_ and ctx->f_info_ are already set - ctx->mb_y_ = dec->mb_y_; - ctx->filter_row_ = filter_row; - ReconstructRow(dec, ctx); - ok = FinishRow(dec, io); - } else { - WebPWorker* const worker = &dec->worker_; - // Finish previous job *before* updating context - ok &= WebPGetWorkerInterface()->Sync(worker); - assert(worker->status_ == OK); - if (ok) { // spawn a new deblocking/output job - ctx->io_ = *io; - ctx->id_ = dec->cache_id_; - ctx->mb_y_ = dec->mb_y_; - ctx->filter_row_ = filter_row; - if (dec->mt_method_ == 2) { // swap macroblock data - VP8MBData* const tmp = ctx->mb_data_; - ctx->mb_data_ = dec->mb_data_; - dec->mb_data_ = tmp; - } else { - // perform reconstruction directly in main thread - ReconstructRow(dec, ctx); - } - if (filter_row) { // swap filter info - VP8FInfo* const tmp = ctx->f_info_; - ctx->f_info_ = dec->f_info_; - dec->f_info_ = tmp; - } - // (reconstruct)+filter in parallel - WebPGetWorkerInterface()->Launch(worker); - if (++dec->cache_id_ == dec->num_caches_) { - dec->cache_id_ = 0; - } - } - } - return ok; -} - -//------------------------------------------------------------------------------ -// Finish setting up the decoding parameter once user's setup() is called. - -VP8StatusCode VP8EnterCritical(VP8Decoder* const dec, VP8Io* const io) { - // Call setup() first. This may trigger additional decoding features on 'io'. - // Note: Afterward, we must call teardown() no matter what. - if (io->setup != NULL && !io->setup(io)) { - VP8SetError(dec, VP8_STATUS_USER_ABORT, "Frame setup failed"); - return dec->status_; - } - - // Disable filtering per user request - if (io->bypass_filtering) { - dec->filter_type_ = 0; - } - - // Define the area where we can skip in-loop filtering, in case of cropping. - // - // 'Simple' filter reads two luma samples outside of the macroblock - // and filters one. It doesn't filter the chroma samples. Hence, we can - // avoid doing the in-loop filtering before crop_top/crop_left position. - // For the 'Complex' filter, 3 samples are read and up to 3 are filtered. - // Means: there's a dependency chain that goes all the way up to the - // top-left corner of the picture (MB #0). We must filter all the previous - // macroblocks. - { - const int extra_pixels = kFilterExtraRows[dec->filter_type_]; - if (dec->filter_type_ == 2) { - // For complex filter, we need to preserve the dependency chain. - dec->tl_mb_x_ = 0; - dec->tl_mb_y_ = 0; - } else { - // For simple filter, we can filter only the cropped region. - // We include 'extra_pixels' on the other side of the boundary, since - // vertical or horizontal filtering of the previous macroblock can - // modify some abutting pixels. - dec->tl_mb_x_ = (io->crop_left - extra_pixels) >> 4; - dec->tl_mb_y_ = (io->crop_top - extra_pixels) >> 4; - if (dec->tl_mb_x_ < 0) dec->tl_mb_x_ = 0; - if (dec->tl_mb_y_ < 0) dec->tl_mb_y_ = 0; - } - // We need some 'extra' pixels on the right/bottom. - dec->br_mb_y_ = (io->crop_bottom + 15 + extra_pixels) >> 4; - dec->br_mb_x_ = (io->crop_right + 15 + extra_pixels) >> 4; - if (dec->br_mb_x_ > dec->mb_w_) { - dec->br_mb_x_ = dec->mb_w_; - } - if (dec->br_mb_y_ > dec->mb_h_) { - dec->br_mb_y_ = dec->mb_h_; - } - } - PrecomputeFilterStrengths(dec); - return VP8_STATUS_OK; -} - -int VP8ExitCritical(VP8Decoder* const dec, VP8Io* const io) { - int ok = 1; - if (dec->mt_method_ > 0) { - ok = WebPGetWorkerInterface()->Sync(&dec->worker_); - } - - if (io->teardown != NULL) { - io->teardown(io); - } - return ok; -} - -//------------------------------------------------------------------------------ -// For multi-threaded decoding we need to use 3 rows of 16 pixels as delay line. -// -// Reason is: the deblocking filter cannot deblock the bottom horizontal edges -// immediately, and needs to wait for first few rows of the next macroblock to -// be decoded. Hence, deblocking is lagging behind by 4 or 8 pixels (depending -// on strength). -// With two threads, the vertical positions of the rows being decoded are: -// Decode: [ 0..15][16..31][32..47][48..63][64..79][... -// Deblock: [ 0..11][12..27][28..43][44..59][... -// If we use two threads and two caches of 16 pixels, the sequence would be: -// Decode: [ 0..15][16..31][ 0..15!!][16..31][ 0..15][... -// Deblock: [ 0..11][12..27!!][-4..11][12..27][... -// The problem occurs during row [12..15!!] that both the decoding and -// deblocking threads are writing simultaneously. -// With 3 cache lines, one get a safe write pattern: -// Decode: [ 0..15][16..31][32..47][ 0..15][16..31][32..47][0.. -// Deblock: [ 0..11][12..27][28..43][-4..11][12..27][28... -// Note that multi-threaded output _without_ deblocking can make use of two -// cache lines of 16 pixels only, since there's no lagging behind. The decoding -// and output process have non-concurrent writing: -// Decode: [ 0..15][16..31][ 0..15][16..31][... -// io->put: [ 0..15][16..31][ 0..15][... - -#define MT_CACHE_LINES 3 -#define ST_CACHE_LINES 1 // 1 cache row only for single-threaded case - -// Initialize multi/single-thread worker -static int InitThreadContext(VP8Decoder* const dec) { - dec->cache_id_ = 0; - if (dec->mt_method_ > 0) { - WebPWorker* const worker = &dec->worker_; - if (!WebPGetWorkerInterface()->Reset(worker)) { - return VP8SetError(dec, VP8_STATUS_OUT_OF_MEMORY, - "thread initialization failed."); - } - worker->data1 = dec; - worker->data2 = (void*)&dec->thread_ctx_.io_; - worker->hook = FinishRow; - dec->num_caches_ = - (dec->filter_type_ > 0) ? MT_CACHE_LINES : MT_CACHE_LINES - 1; - } else { - dec->num_caches_ = ST_CACHE_LINES; - } - return 1; -} - -int VP8GetThreadMethod(const WebPDecoderOptions* const options, - const WebPHeaderStructure* const headers, - int width, int height) { - if (options == NULL || options->use_threads == 0) { - return 0; - } - (void)headers; - (void)width; - (void)height; - assert(headers == NULL || !headers->is_lossless); -#if defined(WEBP_USE_THREAD) - if (width >= MIN_WIDTH_FOR_THREADS) return 2; -#endif - return 0; -} - -#undef MT_CACHE_LINES -#undef ST_CACHE_LINES - -//------------------------------------------------------------------------------ -// Memory setup - -static int AllocateMemory(VP8Decoder* const dec) { - const int num_caches = dec->num_caches_; - const int mb_w = dec->mb_w_; - // Note: we use 'size_t' when there's no overflow risk, uint64_t otherwise. - const size_t intra_pred_mode_size = 4 * mb_w * sizeof(uint8_t); - const size_t top_size = sizeof(VP8TopSamples) * mb_w; - const size_t mb_info_size = (mb_w + 1) * sizeof(VP8MB); - const size_t f_info_size = - (dec->filter_type_ > 0) ? - mb_w * (dec->mt_method_ > 0 ? 2 : 1) * sizeof(VP8FInfo) - : 0; - const size_t yuv_size = YUV_SIZE * sizeof(*dec->yuv_b_); - const size_t mb_data_size = - (dec->mt_method_ == 2 ? 2 : 1) * mb_w * sizeof(*dec->mb_data_); - const size_t cache_height = (16 * num_caches - + kFilterExtraRows[dec->filter_type_]) * 3 / 2; - const size_t cache_size = top_size * cache_height; - // alpha_size is the only one that scales as width x height. - const uint64_t alpha_size = (dec->alpha_data_ != NULL) ? - (uint64_t)dec->pic_hdr_.width_ * dec->pic_hdr_.height_ : 0ULL; - const uint64_t needed = (uint64_t)intra_pred_mode_size - + top_size + mb_info_size + f_info_size - + yuv_size + mb_data_size - + cache_size + alpha_size + WEBP_ALIGN_CST; - uint8_t* mem; - - if (needed != (size_t)needed) return 0; // check for overflow - if (needed > dec->mem_size_) { - WebPSafeFree(dec->mem_); - dec->mem_size_ = 0; - dec->mem_ = WebPSafeMalloc(needed, sizeof(uint8_t)); - if (dec->mem_ == NULL) { - return VP8SetError(dec, VP8_STATUS_OUT_OF_MEMORY, - "no memory during frame initialization."); - } - // down-cast is ok, thanks to WebPSafeMalloc() above. - dec->mem_size_ = (size_t)needed; - } - - mem = (uint8_t*)dec->mem_; - dec->intra_t_ = mem; - mem += intra_pred_mode_size; - - dec->yuv_t_ = (VP8TopSamples*)mem; - mem += top_size; - - dec->mb_info_ = ((VP8MB*)mem) + 1; - mem += mb_info_size; - - dec->f_info_ = f_info_size ? (VP8FInfo*)mem : NULL; - mem += f_info_size; - dec->thread_ctx_.id_ = 0; - dec->thread_ctx_.f_info_ = dec->f_info_; - if (dec->filter_type_ > 0 && dec->mt_method_ > 0) { - // secondary cache line. The deblocking process need to make use of the - // filtering strength from previous macroblock row, while the new ones - // are being decoded in parallel. We'll just swap the pointers. - dec->thread_ctx_.f_info_ += mb_w; - } - - mem = (uint8_t*)WEBP_ALIGN(mem); - assert((yuv_size & WEBP_ALIGN_CST) == 0); - dec->yuv_b_ = mem; - mem += yuv_size; - - dec->mb_data_ = (VP8MBData*)mem; - dec->thread_ctx_.mb_data_ = (VP8MBData*)mem; - if (dec->mt_method_ == 2) { - dec->thread_ctx_.mb_data_ += mb_w; - } - mem += mb_data_size; - - dec->cache_y_stride_ = 16 * mb_w; - dec->cache_uv_stride_ = 8 * mb_w; - { - const int extra_rows = kFilterExtraRows[dec->filter_type_]; - const int extra_y = extra_rows * dec->cache_y_stride_; - const int extra_uv = (extra_rows / 2) * dec->cache_uv_stride_; - dec->cache_y_ = mem + extra_y; - dec->cache_u_ = dec->cache_y_ - + 16 * num_caches * dec->cache_y_stride_ + extra_uv; - dec->cache_v_ = dec->cache_u_ - + 8 * num_caches * dec->cache_uv_stride_ + extra_uv; - dec->cache_id_ = 0; - } - mem += cache_size; - - // alpha plane - dec->alpha_plane_ = alpha_size ? mem : NULL; - mem += alpha_size; - assert(mem <= (uint8_t*)dec->mem_ + dec->mem_size_); - - // note: left/top-info is initialized once for all. - memset(dec->mb_info_ - 1, 0, mb_info_size); - VP8InitScanline(dec); // initialize left too. - - // initialize top - memset(dec->intra_t_, B_DC_PRED, intra_pred_mode_size); - - return 1; -} - -static void InitIo(VP8Decoder* const dec, VP8Io* io) { - // prepare 'io' - io->mb_y = 0; - io->y = dec->cache_y_; - io->u = dec->cache_u_; - io->v = dec->cache_v_; - io->y_stride = dec->cache_y_stride_; - io->uv_stride = dec->cache_uv_stride_; - io->a = NULL; -} - -int VP8InitFrame(VP8Decoder* const dec, VP8Io* const io) { - if (!InitThreadContext(dec)) return 0; // call first. Sets dec->num_caches_. - if (!AllocateMemory(dec)) return 0; - InitIo(dec, io); - VP8DspInit(); // Init critical function pointers and look-up tables. - return 1; -} - -//------------------------------------------------------------------------------ diff --git a/Extended/libwebp/src/dec/idec_dec.c b/Extended/libwebp/src/dec/idec_dec.c deleted file mode 100644 index 9035df5..0000000 --- a/Extended/libwebp/src/dec/idec_dec.c +++ /dev/null @@ -1,908 +0,0 @@ -// Copyright 2011 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Incremental decoding -// -// Author: somnath@google.com (Somnath Banerjee) - -#include -#include -#include - -#include "src/dec/alphai_dec.h" -#include "src/dec/webpi_dec.h" -#include "src/dec/vp8i_dec.h" -#include "src/utils/utils.h" - -// In append mode, buffer allocations increase as multiples of this value. -// Needs to be a power of 2. -#define CHUNK_SIZE 4096 -#define MAX_MB_SIZE 4096 - -//------------------------------------------------------------------------------ -// Data structures for memory and states - -// Decoding states. State normally flows as: -// WEBP_HEADER->VP8_HEADER->VP8_PARTS0->VP8_DATA->DONE for a lossy image, and -// WEBP_HEADER->VP8L_HEADER->VP8L_DATA->DONE for a lossless image. -// If there is any error the decoder goes into state ERROR. -typedef enum { - STATE_WEBP_HEADER, // All the data before that of the VP8/VP8L chunk. - STATE_VP8_HEADER, // The VP8 Frame header (within the VP8 chunk). - STATE_VP8_PARTS0, - STATE_VP8_DATA, - STATE_VP8L_HEADER, - STATE_VP8L_DATA, - STATE_DONE, - STATE_ERROR -} DecState; - -// Operating state for the MemBuffer -typedef enum { - MEM_MODE_NONE = 0, - MEM_MODE_APPEND, - MEM_MODE_MAP -} MemBufferMode; - -// storage for partition #0 and partial data (in a rolling fashion) -typedef struct { - MemBufferMode mode_; // Operation mode - size_t start_; // start location of the data to be decoded - size_t end_; // end location - size_t buf_size_; // size of the allocated buffer - uint8_t* buf_; // We don't own this buffer in case WebPIUpdate() - - size_t part0_size_; // size of partition #0 - const uint8_t* part0_buf_; // buffer to store partition #0 -} MemBuffer; - -struct WebPIDecoder { - DecState state_; // current decoding state - WebPDecParams params_; // Params to store output info - int is_lossless_; // for down-casting 'dec_'. - void* dec_; // either a VP8Decoder or a VP8LDecoder instance - VP8Io io_; - - MemBuffer mem_; // input memory buffer. - WebPDecBuffer output_; // output buffer (when no external one is supplied, - // or if the external one has slow-memory) - WebPDecBuffer* final_output_; // Slow-memory output to copy to eventually. - size_t chunk_size_; // Compressed VP8/VP8L size extracted from Header. - - int last_mb_y_; // last row reached for intra-mode decoding -}; - -// MB context to restore in case VP8DecodeMB() fails -typedef struct { - VP8MB left_; - VP8MB info_; - VP8BitReader token_br_; -} MBContext; - -//------------------------------------------------------------------------------ -// MemBuffer: incoming data handling - -static WEBP_INLINE size_t MemDataSize(const MemBuffer* mem) { - return (mem->end_ - mem->start_); -} - -// Check if we need to preserve the compressed alpha data, as it may not have -// been decoded yet. -static int NeedCompressedAlpha(const WebPIDecoder* const idec) { - if (idec->state_ == STATE_WEBP_HEADER) { - // We haven't parsed the headers yet, so we don't know whether the image is - // lossy or lossless. This also means that we haven't parsed the ALPH chunk. - return 0; - } - if (idec->is_lossless_) { - return 0; // ALPH chunk is not present for lossless images. - } else { - const VP8Decoder* const dec = (VP8Decoder*)idec->dec_; - assert(dec != NULL); // Must be true as idec->state_ != STATE_WEBP_HEADER. - return (dec->alpha_data_ != NULL) && !dec->is_alpha_decoded_; - } -} - -static void DoRemap(WebPIDecoder* const idec, ptrdiff_t offset) { - MemBuffer* const mem = &idec->mem_; - const uint8_t* const new_base = mem->buf_ + mem->start_; - // note: for VP8, setting up idec->io_ is only really needed at the beginning - // of the decoding, till partition #0 is complete. - idec->io_.data = new_base; - idec->io_.data_size = MemDataSize(mem); - - if (idec->dec_ != NULL) { - if (!idec->is_lossless_) { - VP8Decoder* const dec = (VP8Decoder*)idec->dec_; - const uint32_t last_part = dec->num_parts_minus_one_; - if (offset != 0) { - uint32_t p; - for (p = 0; p <= last_part; ++p) { - VP8RemapBitReader(dec->parts_ + p, offset); - } - // Remap partition #0 data pointer to new offset, but only in MAP - // mode (in APPEND mode, partition #0 is copied into a fixed memory). - if (mem->mode_ == MEM_MODE_MAP) { - VP8RemapBitReader(&dec->br_, offset); - } - } - { - const uint8_t* const last_start = dec->parts_[last_part].buf_; - VP8BitReaderSetBuffer(&dec->parts_[last_part], last_start, - mem->buf_ + mem->end_ - last_start); - } - if (NeedCompressedAlpha(idec)) { - ALPHDecoder* const alph_dec = dec->alph_dec_; - dec->alpha_data_ += offset; - if (alph_dec != NULL && alph_dec->vp8l_dec_ != NULL) { - if (alph_dec->method_ == ALPHA_LOSSLESS_COMPRESSION) { - VP8LDecoder* const alph_vp8l_dec = alph_dec->vp8l_dec_; - assert(dec->alpha_data_size_ >= ALPHA_HEADER_LEN); - VP8LBitReaderSetBuffer(&alph_vp8l_dec->br_, - dec->alpha_data_ + ALPHA_HEADER_LEN, - dec->alpha_data_size_ - ALPHA_HEADER_LEN); - } else { // alph_dec->method_ == ALPHA_NO_COMPRESSION - // Nothing special to do in this case. - } - } - } - } else { // Resize lossless bitreader - VP8LDecoder* const dec = (VP8LDecoder*)idec->dec_; - VP8LBitReaderSetBuffer(&dec->br_, new_base, MemDataSize(mem)); - } - } -} - -// Appends data to the end of MemBuffer->buf_. It expands the allocated memory -// size if required and also updates VP8BitReader's if new memory is allocated. -static int AppendToMemBuffer(WebPIDecoder* const idec, - const uint8_t* const data, size_t data_size) { - VP8Decoder* const dec = (VP8Decoder*)idec->dec_; - MemBuffer* const mem = &idec->mem_; - const int need_compressed_alpha = NeedCompressedAlpha(idec); - const uint8_t* const old_start = - (mem->buf_ == NULL) ? NULL : mem->buf_ + mem->start_; - const uint8_t* const old_base = - need_compressed_alpha ? dec->alpha_data_ : old_start; - assert(mem->buf_ != NULL || mem->start_ == 0); - assert(mem->mode_ == MEM_MODE_APPEND); - if (data_size > MAX_CHUNK_PAYLOAD) { - // security safeguard: trying to allocate more than what the format - // allows for a chunk should be considered a smoke smell. - return 0; - } - - if (mem->end_ + data_size > mem->buf_size_) { // Need some free memory - const size_t new_mem_start = old_start - old_base; - const size_t current_size = MemDataSize(mem) + new_mem_start; - const uint64_t new_size = (uint64_t)current_size + data_size; - const uint64_t extra_size = (new_size + CHUNK_SIZE - 1) & ~(CHUNK_SIZE - 1); - uint8_t* const new_buf = - (uint8_t*)WebPSafeMalloc(extra_size, sizeof(*new_buf)); - if (new_buf == NULL) return 0; - if (old_base != NULL) memcpy(new_buf, old_base, current_size); - WebPSafeFree(mem->buf_); - mem->buf_ = new_buf; - mem->buf_size_ = (size_t)extra_size; - mem->start_ = new_mem_start; - mem->end_ = current_size; - } - - assert(mem->buf_ != NULL); - memcpy(mem->buf_ + mem->end_, data, data_size); - mem->end_ += data_size; - assert(mem->end_ <= mem->buf_size_); - - DoRemap(idec, mem->buf_ + mem->start_ - old_start); - return 1; -} - -static int RemapMemBuffer(WebPIDecoder* const idec, - const uint8_t* const data, size_t data_size) { - MemBuffer* const mem = &idec->mem_; - const uint8_t* const old_buf = mem->buf_; - const uint8_t* const old_start = - (old_buf == NULL) ? NULL : old_buf + mem->start_; - assert(old_buf != NULL || mem->start_ == 0); - assert(mem->mode_ == MEM_MODE_MAP); - - if (data_size < mem->buf_size_) return 0; // can't remap to a shorter buffer! - - mem->buf_ = (uint8_t*)data; - mem->end_ = mem->buf_size_ = data_size; - - DoRemap(idec, mem->buf_ + mem->start_ - old_start); - return 1; -} - -static void InitMemBuffer(MemBuffer* const mem) { - mem->mode_ = MEM_MODE_NONE; - mem->buf_ = NULL; - mem->buf_size_ = 0; - mem->part0_buf_ = NULL; - mem->part0_size_ = 0; -} - -static void ClearMemBuffer(MemBuffer* const mem) { - assert(mem); - if (mem->mode_ == MEM_MODE_APPEND) { - WebPSafeFree(mem->buf_); - WebPSafeFree((void*)mem->part0_buf_); - } -} - -static int CheckMemBufferMode(MemBuffer* const mem, MemBufferMode expected) { - if (mem->mode_ == MEM_MODE_NONE) { - mem->mode_ = expected; // switch to the expected mode - } else if (mem->mode_ != expected) { - return 0; // we mixed the modes => error - } - assert(mem->mode_ == expected); // mode is ok - return 1; -} - -// To be called last. -static VP8StatusCode FinishDecoding(WebPIDecoder* const idec) { - const WebPDecoderOptions* const options = idec->params_.options; - WebPDecBuffer* const output = idec->params_.output; - - idec->state_ = STATE_DONE; - if (options != NULL && options->flip) { - const VP8StatusCode status = WebPFlipBuffer(output); - if (status != VP8_STATUS_OK) return status; - } - if (idec->final_output_ != NULL) { - WebPCopyDecBufferPixels(output, idec->final_output_); // do the slow-copy - WebPFreeDecBuffer(&idec->output_); - *output = *idec->final_output_; - idec->final_output_ = NULL; - } - return VP8_STATUS_OK; -} - -//------------------------------------------------------------------------------ -// Macroblock-decoding contexts - -static void SaveContext(const VP8Decoder* dec, const VP8BitReader* token_br, - MBContext* const context) { - context->left_ = dec->mb_info_[-1]; - context->info_ = dec->mb_info_[dec->mb_x_]; - context->token_br_ = *token_br; -} - -static void RestoreContext(const MBContext* context, VP8Decoder* const dec, - VP8BitReader* const token_br) { - dec->mb_info_[-1] = context->left_; - dec->mb_info_[dec->mb_x_] = context->info_; - *token_br = context->token_br_; -} - -//------------------------------------------------------------------------------ - -static VP8StatusCode IDecError(WebPIDecoder* const idec, VP8StatusCode error) { - if (idec->state_ == STATE_VP8_DATA) { - // Synchronize the thread, clean-up and check for errors. - VP8ExitCritical((VP8Decoder*)idec->dec_, &idec->io_); - } - idec->state_ = STATE_ERROR; - return error; -} - -static void ChangeState(WebPIDecoder* const idec, DecState new_state, - size_t consumed_bytes) { - MemBuffer* const mem = &idec->mem_; - idec->state_ = new_state; - mem->start_ += consumed_bytes; - assert(mem->start_ <= mem->end_); - idec->io_.data = mem->buf_ + mem->start_; - idec->io_.data_size = MemDataSize(mem); -} - -// Headers -static VP8StatusCode DecodeWebPHeaders(WebPIDecoder* const idec) { - MemBuffer* const mem = &idec->mem_; - const uint8_t* data = mem->buf_ + mem->start_; - size_t curr_size = MemDataSize(mem); - VP8StatusCode status; - WebPHeaderStructure headers; - - headers.data = data; - headers.data_size = curr_size; - headers.have_all_data = 0; - status = WebPParseHeaders(&headers); - if (status == VP8_STATUS_NOT_ENOUGH_DATA) { - return VP8_STATUS_SUSPENDED; // We haven't found a VP8 chunk yet. - } else if (status != VP8_STATUS_OK) { - return IDecError(idec, status); - } - - idec->chunk_size_ = headers.compressed_size; - idec->is_lossless_ = headers.is_lossless; - if (!idec->is_lossless_) { - VP8Decoder* const dec = VP8New(); - if (dec == NULL) { - return VP8_STATUS_OUT_OF_MEMORY; - } - idec->dec_ = dec; - dec->alpha_data_ = headers.alpha_data; - dec->alpha_data_size_ = headers.alpha_data_size; - ChangeState(idec, STATE_VP8_HEADER, headers.offset); - } else { - VP8LDecoder* const dec = VP8LNew(); - if (dec == NULL) { - return VP8_STATUS_OUT_OF_MEMORY; - } - idec->dec_ = dec; - ChangeState(idec, STATE_VP8L_HEADER, headers.offset); - } - return VP8_STATUS_OK; -} - -static VP8StatusCode DecodeVP8FrameHeader(WebPIDecoder* const idec) { - const uint8_t* data = idec->mem_.buf_ + idec->mem_.start_; - const size_t curr_size = MemDataSize(&idec->mem_); - int width, height; - uint32_t bits; - - if (curr_size < VP8_FRAME_HEADER_SIZE) { - // Not enough data bytes to extract VP8 Frame Header. - return VP8_STATUS_SUSPENDED; - } - if (!VP8GetInfo(data, curr_size, idec->chunk_size_, &width, &height)) { - return IDecError(idec, VP8_STATUS_BITSTREAM_ERROR); - } - - bits = data[0] | (data[1] << 8) | (data[2] << 16); - idec->mem_.part0_size_ = (bits >> 5) + VP8_FRAME_HEADER_SIZE; - - idec->io_.data = data; - idec->io_.data_size = curr_size; - idec->state_ = STATE_VP8_PARTS0; - return VP8_STATUS_OK; -} - -// Partition #0 -static VP8StatusCode CopyParts0Data(WebPIDecoder* const idec) { - VP8Decoder* const dec = (VP8Decoder*)idec->dec_; - VP8BitReader* const br = &dec->br_; - const size_t part_size = br->buf_end_ - br->buf_; - MemBuffer* const mem = &idec->mem_; - assert(!idec->is_lossless_); - assert(mem->part0_buf_ == NULL); - // the following is a format limitation, no need for runtime check: - assert(part_size <= mem->part0_size_); - if (part_size == 0) { // can't have zero-size partition #0 - return VP8_STATUS_BITSTREAM_ERROR; - } - if (mem->mode_ == MEM_MODE_APPEND) { - // We copy and grab ownership of the partition #0 data. - uint8_t* const part0_buf = (uint8_t*)WebPSafeMalloc(1ULL, part_size); - if (part0_buf == NULL) { - return VP8_STATUS_OUT_OF_MEMORY; - } - memcpy(part0_buf, br->buf_, part_size); - mem->part0_buf_ = part0_buf; - VP8BitReaderSetBuffer(br, part0_buf, part_size); - } else { - // Else: just keep pointers to the partition #0's data in dec_->br_. - } - mem->start_ += part_size; - return VP8_STATUS_OK; -} - -static VP8StatusCode DecodePartition0(WebPIDecoder* const idec) { - VP8Decoder* const dec = (VP8Decoder*)idec->dec_; - VP8Io* const io = &idec->io_; - const WebPDecParams* const params = &idec->params_; - WebPDecBuffer* const output = params->output; - - // Wait till we have enough data for the whole partition #0 - if (MemDataSize(&idec->mem_) < idec->mem_.part0_size_) { - return VP8_STATUS_SUSPENDED; - } - - if (!VP8GetHeaders(dec, io)) { - const VP8StatusCode status = dec->status_; - if (status == VP8_STATUS_SUSPENDED || - status == VP8_STATUS_NOT_ENOUGH_DATA) { - // treating NOT_ENOUGH_DATA as SUSPENDED state - return VP8_STATUS_SUSPENDED; - } - return IDecError(idec, status); - } - - // Allocate/Verify output buffer now - dec->status_ = WebPAllocateDecBuffer(io->width, io->height, params->options, - output); - if (dec->status_ != VP8_STATUS_OK) { - return IDecError(idec, dec->status_); - } - // This change must be done before calling VP8InitFrame() - dec->mt_method_ = VP8GetThreadMethod(params->options, NULL, - io->width, io->height); - VP8InitDithering(params->options, dec); - - dec->status_ = CopyParts0Data(idec); - if (dec->status_ != VP8_STATUS_OK) { - return IDecError(idec, dec->status_); - } - - // Finish setting up the decoding parameters. Will call io->setup(). - if (VP8EnterCritical(dec, io) != VP8_STATUS_OK) { - return IDecError(idec, dec->status_); - } - - // Note: past this point, teardown() must always be called - // in case of error. - idec->state_ = STATE_VP8_DATA; - // Allocate memory and prepare everything. - if (!VP8InitFrame(dec, io)) { - return IDecError(idec, dec->status_); - } - return VP8_STATUS_OK; -} - -// Remaining partitions -static VP8StatusCode DecodeRemaining(WebPIDecoder* const idec) { - VP8Decoder* const dec = (VP8Decoder*)idec->dec_; - VP8Io* const io = &idec->io_; - - // Make sure partition #0 has been read before, to set dec to ready_. - if (!dec->ready_) { - return IDecError(idec, VP8_STATUS_BITSTREAM_ERROR); - } - for (; dec->mb_y_ < dec->mb_h_; ++dec->mb_y_) { - if (idec->last_mb_y_ != dec->mb_y_) { - if (!VP8ParseIntraModeRow(&dec->br_, dec)) { - // note: normally, error shouldn't occur since we already have the whole - // partition0 available here in DecodeRemaining(). Reaching EOF while - // reading intra modes really means a BITSTREAM_ERROR. - return IDecError(idec, VP8_STATUS_BITSTREAM_ERROR); - } - idec->last_mb_y_ = dec->mb_y_; - } - for (; dec->mb_x_ < dec->mb_w_; ++dec->mb_x_) { - VP8BitReader* const token_br = - &dec->parts_[dec->mb_y_ & dec->num_parts_minus_one_]; - MBContext context; - SaveContext(dec, token_br, &context); - if (!VP8DecodeMB(dec, token_br)) { - // We shouldn't fail when MAX_MB data was available - if (dec->num_parts_minus_one_ == 0 && - MemDataSize(&idec->mem_) > MAX_MB_SIZE) { - return IDecError(idec, VP8_STATUS_BITSTREAM_ERROR); - } - // Synchronize the threads. - if (dec->mt_method_ > 0) { - if (!WebPGetWorkerInterface()->Sync(&dec->worker_)) { - return IDecError(idec, VP8_STATUS_BITSTREAM_ERROR); - } - } - RestoreContext(&context, dec, token_br); - return VP8_STATUS_SUSPENDED; - } - // Release buffer only if there is only one partition - if (dec->num_parts_minus_one_ == 0) { - idec->mem_.start_ = token_br->buf_ - idec->mem_.buf_; - assert(idec->mem_.start_ <= idec->mem_.end_); - } - } - VP8InitScanline(dec); // Prepare for next scanline - - // Reconstruct, filter and emit the row. - if (!VP8ProcessRow(dec, io)) { - return IDecError(idec, VP8_STATUS_USER_ABORT); - } - } - // Synchronize the thread and check for errors. - if (!VP8ExitCritical(dec, io)) { - idec->state_ = STATE_ERROR; // prevent re-entry in IDecError - return IDecError(idec, VP8_STATUS_USER_ABORT); - } - dec->ready_ = 0; - return FinishDecoding(idec); -} - -static VP8StatusCode ErrorStatusLossless(WebPIDecoder* const idec, - VP8StatusCode status) { - if (status == VP8_STATUS_SUSPENDED || status == VP8_STATUS_NOT_ENOUGH_DATA) { - return VP8_STATUS_SUSPENDED; - } - return IDecError(idec, status); -} - -static VP8StatusCode DecodeVP8LHeader(WebPIDecoder* const idec) { - VP8Io* const io = &idec->io_; - VP8LDecoder* const dec = (VP8LDecoder*)idec->dec_; - const WebPDecParams* const params = &idec->params_; - WebPDecBuffer* const output = params->output; - size_t curr_size = MemDataSize(&idec->mem_); - assert(idec->is_lossless_); - - // Wait until there's enough data for decoding header. - if (curr_size < (idec->chunk_size_ >> 3)) { - dec->status_ = VP8_STATUS_SUSPENDED; - return ErrorStatusLossless(idec, dec->status_); - } - - if (!VP8LDecodeHeader(dec, io)) { - if (dec->status_ == VP8_STATUS_BITSTREAM_ERROR && - curr_size < idec->chunk_size_) { - dec->status_ = VP8_STATUS_SUSPENDED; - } - return ErrorStatusLossless(idec, dec->status_); - } - // Allocate/verify output buffer now. - dec->status_ = WebPAllocateDecBuffer(io->width, io->height, params->options, - output); - if (dec->status_ != VP8_STATUS_OK) { - return IDecError(idec, dec->status_); - } - - idec->state_ = STATE_VP8L_DATA; - return VP8_STATUS_OK; -} - -static VP8StatusCode DecodeVP8LData(WebPIDecoder* const idec) { - VP8LDecoder* const dec = (VP8LDecoder*)idec->dec_; - const size_t curr_size = MemDataSize(&idec->mem_); - assert(idec->is_lossless_); - - // Switch to incremental decoding if we don't have all the bytes available. - dec->incremental_ = (curr_size < idec->chunk_size_); - - if (!VP8LDecodeImage(dec)) { - return ErrorStatusLossless(idec, dec->status_); - } - assert(dec->status_ == VP8_STATUS_OK || dec->status_ == VP8_STATUS_SUSPENDED); - return (dec->status_ == VP8_STATUS_SUSPENDED) ? dec->status_ - : FinishDecoding(idec); -} - - // Main decoding loop -static VP8StatusCode IDecode(WebPIDecoder* idec) { - VP8StatusCode status = VP8_STATUS_SUSPENDED; - - if (idec->state_ == STATE_WEBP_HEADER) { - status = DecodeWebPHeaders(idec); - } else { - if (idec->dec_ == NULL) { - return VP8_STATUS_SUSPENDED; // can't continue if we have no decoder. - } - } - if (idec->state_ == STATE_VP8_HEADER) { - status = DecodeVP8FrameHeader(idec); - } - if (idec->state_ == STATE_VP8_PARTS0) { - status = DecodePartition0(idec); - } - if (idec->state_ == STATE_VP8_DATA) { - const VP8Decoder* const dec = (VP8Decoder*)idec->dec_; - if (dec == NULL) { - return VP8_STATUS_SUSPENDED; // can't continue if we have no decoder. - } - status = DecodeRemaining(idec); - } - if (idec->state_ == STATE_VP8L_HEADER) { - status = DecodeVP8LHeader(idec); - } - if (idec->state_ == STATE_VP8L_DATA) { - status = DecodeVP8LData(idec); - } - return status; -} - -//------------------------------------------------------------------------------ -// Internal constructor - -static WebPIDecoder* NewDecoder(WebPDecBuffer* const output_buffer, - const WebPBitstreamFeatures* const features) { - WebPIDecoder* idec = (WebPIDecoder*)WebPSafeCalloc(1ULL, sizeof(*idec)); - if (idec == NULL) { - return NULL; - } - - idec->state_ = STATE_WEBP_HEADER; - idec->chunk_size_ = 0; - - idec->last_mb_y_ = -1; - - InitMemBuffer(&idec->mem_); - WebPInitDecBuffer(&idec->output_); - VP8InitIo(&idec->io_); - - WebPResetDecParams(&idec->params_); - if (output_buffer == NULL || WebPAvoidSlowMemory(output_buffer, features)) { - idec->params_.output = &idec->output_; - idec->final_output_ = output_buffer; - if (output_buffer != NULL) { - idec->params_.output->colorspace = output_buffer->colorspace; - } - } else { - idec->params_.output = output_buffer; - idec->final_output_ = NULL; - } - WebPInitCustomIo(&idec->params_, &idec->io_); // Plug the I/O functions. - - return idec; -} - -//------------------------------------------------------------------------------ -// Public functions - -WebPIDecoder* WebPINewDecoder(WebPDecBuffer* output_buffer) { - return NewDecoder(output_buffer, NULL); -} - -WebPIDecoder* WebPIDecode(const uint8_t* data, size_t data_size, - WebPDecoderConfig* config) { - WebPIDecoder* idec; - WebPBitstreamFeatures tmp_features; - WebPBitstreamFeatures* const features = - (config == NULL) ? &tmp_features : &config->input; - memset(&tmp_features, 0, sizeof(tmp_features)); - - // Parse the bitstream's features, if requested: - if (data != NULL && data_size > 0) { - if (WebPGetFeatures(data, data_size, features) != VP8_STATUS_OK) { - return NULL; - } - } - - // Create an instance of the incremental decoder - idec = (config != NULL) ? NewDecoder(&config->output, features) - : NewDecoder(NULL, features); - if (idec == NULL) { - return NULL; - } - // Finish initialization - if (config != NULL) { - idec->params_.options = &config->options; - } - return idec; -} - -void WebPIDelete(WebPIDecoder* idec) { - if (idec == NULL) return; - if (idec->dec_ != NULL) { - if (!idec->is_lossless_) { - if (idec->state_ == STATE_VP8_DATA) { - // Synchronize the thread, clean-up and check for errors. - VP8ExitCritical((VP8Decoder*)idec->dec_, &idec->io_); - } - VP8Delete((VP8Decoder*)idec->dec_); - } else { - VP8LDelete((VP8LDecoder*)idec->dec_); - } - } - ClearMemBuffer(&idec->mem_); - WebPFreeDecBuffer(&idec->output_); - WebPSafeFree(idec); -} - -//------------------------------------------------------------------------------ -// Wrapper toward WebPINewDecoder - -WebPIDecoder* WebPINewRGB(WEBP_CSP_MODE csp, uint8_t* output_buffer, - size_t output_buffer_size, int output_stride) { - const int is_external_memory = (output_buffer != NULL) ? 1 : 0; - WebPIDecoder* idec; - - if (csp >= MODE_YUV) return NULL; - if (is_external_memory == 0) { // Overwrite parameters to sane values. - output_buffer_size = 0; - output_stride = 0; - } else { // A buffer was passed. Validate the other params. - if (output_stride == 0 || output_buffer_size == 0) { - return NULL; // invalid parameter. - } - } - idec = WebPINewDecoder(NULL); - if (idec == NULL) return NULL; - idec->output_.colorspace = csp; - idec->output_.is_external_memory = is_external_memory; - idec->output_.u.RGBA.rgba = output_buffer; - idec->output_.u.RGBA.stride = output_stride; - idec->output_.u.RGBA.size = output_buffer_size; - return idec; -} - -WebPIDecoder* WebPINewYUVA(uint8_t* luma, size_t luma_size, int luma_stride, - uint8_t* u, size_t u_size, int u_stride, - uint8_t* v, size_t v_size, int v_stride, - uint8_t* a, size_t a_size, int a_stride) { - const int is_external_memory = (luma != NULL) ? 1 : 0; - WebPIDecoder* idec; - WEBP_CSP_MODE colorspace; - - if (is_external_memory == 0) { // Overwrite parameters to sane values. - luma_size = u_size = v_size = a_size = 0; - luma_stride = u_stride = v_stride = a_stride = 0; - u = v = a = NULL; - colorspace = MODE_YUVA; - } else { // A luma buffer was passed. Validate the other parameters. - if (u == NULL || v == NULL) return NULL; - if (luma_size == 0 || u_size == 0 || v_size == 0) return NULL; - if (luma_stride == 0 || u_stride == 0 || v_stride == 0) return NULL; - if (a != NULL) { - if (a_size == 0 || a_stride == 0) return NULL; - } - colorspace = (a == NULL) ? MODE_YUV : MODE_YUVA; - } - - idec = WebPINewDecoder(NULL); - if (idec == NULL) return NULL; - - idec->output_.colorspace = colorspace; - idec->output_.is_external_memory = is_external_memory; - idec->output_.u.YUVA.y = luma; - idec->output_.u.YUVA.y_stride = luma_stride; - idec->output_.u.YUVA.y_size = luma_size; - idec->output_.u.YUVA.u = u; - idec->output_.u.YUVA.u_stride = u_stride; - idec->output_.u.YUVA.u_size = u_size; - idec->output_.u.YUVA.v = v; - idec->output_.u.YUVA.v_stride = v_stride; - idec->output_.u.YUVA.v_size = v_size; - idec->output_.u.YUVA.a = a; - idec->output_.u.YUVA.a_stride = a_stride; - idec->output_.u.YUVA.a_size = a_size; - return idec; -} - -WebPIDecoder* WebPINewYUV(uint8_t* luma, size_t luma_size, int luma_stride, - uint8_t* u, size_t u_size, int u_stride, - uint8_t* v, size_t v_size, int v_stride) { - return WebPINewYUVA(luma, luma_size, luma_stride, - u, u_size, u_stride, - v, v_size, v_stride, - NULL, 0, 0); -} - -//------------------------------------------------------------------------------ - -static VP8StatusCode IDecCheckStatus(const WebPIDecoder* const idec) { - assert(idec); - if (idec->state_ == STATE_ERROR) { - return VP8_STATUS_BITSTREAM_ERROR; - } - if (idec->state_ == STATE_DONE) { - return VP8_STATUS_OK; - } - return VP8_STATUS_SUSPENDED; -} - -VP8StatusCode WebPIAppend(WebPIDecoder* idec, - const uint8_t* data, size_t data_size) { - VP8StatusCode status; - if (idec == NULL || data == NULL) { - return VP8_STATUS_INVALID_PARAM; - } - status = IDecCheckStatus(idec); - if (status != VP8_STATUS_SUSPENDED) { - return status; - } - // Check mixed calls between RemapMemBuffer and AppendToMemBuffer. - if (!CheckMemBufferMode(&idec->mem_, MEM_MODE_APPEND)) { - return VP8_STATUS_INVALID_PARAM; - } - // Append data to memory buffer - if (!AppendToMemBuffer(idec, data, data_size)) { - return VP8_STATUS_OUT_OF_MEMORY; - } - return IDecode(idec); -} - -VP8StatusCode WebPIUpdate(WebPIDecoder* idec, - const uint8_t* data, size_t data_size) { - VP8StatusCode status; - if (idec == NULL || data == NULL) { - return VP8_STATUS_INVALID_PARAM; - } - status = IDecCheckStatus(idec); - if (status != VP8_STATUS_SUSPENDED) { - return status; - } - // Check mixed calls between RemapMemBuffer and AppendToMemBuffer. - if (!CheckMemBufferMode(&idec->mem_, MEM_MODE_MAP)) { - return VP8_STATUS_INVALID_PARAM; - } - // Make the memory buffer point to the new buffer - if (!RemapMemBuffer(idec, data, data_size)) { - return VP8_STATUS_INVALID_PARAM; - } - return IDecode(idec); -} - -//------------------------------------------------------------------------------ - -static const WebPDecBuffer* GetOutputBuffer(const WebPIDecoder* const idec) { - if (idec == NULL || idec->dec_ == NULL) { - return NULL; - } - if (idec->state_ <= STATE_VP8_PARTS0) { - return NULL; - } - if (idec->final_output_ != NULL) { - return NULL; // not yet slow-copied - } - return idec->params_.output; -} - -const WebPDecBuffer* WebPIDecodedArea(const WebPIDecoder* idec, - int* left, int* top, - int* width, int* height) { - const WebPDecBuffer* const src = GetOutputBuffer(idec); - if (left != NULL) *left = 0; - if (top != NULL) *top = 0; - if (src != NULL) { - if (width != NULL) *width = src->width; - if (height != NULL) *height = idec->params_.last_y; - } else { - if (width != NULL) *width = 0; - if (height != NULL) *height = 0; - } - return src; -} - -uint8_t* WebPIDecGetRGB(const WebPIDecoder* idec, int* last_y, - int* width, int* height, int* stride) { - const WebPDecBuffer* const src = GetOutputBuffer(idec); - if (src == NULL) return NULL; - if (src->colorspace >= MODE_YUV) { - return NULL; - } - - if (last_y != NULL) *last_y = idec->params_.last_y; - if (width != NULL) *width = src->width; - if (height != NULL) *height = src->height; - if (stride != NULL) *stride = src->u.RGBA.stride; - - return src->u.RGBA.rgba; -} - -uint8_t* WebPIDecGetYUVA(const WebPIDecoder* idec, int* last_y, - uint8_t** u, uint8_t** v, uint8_t** a, - int* width, int* height, - int* stride, int* uv_stride, int* a_stride) { - const WebPDecBuffer* const src = GetOutputBuffer(idec); - if (src == NULL) return NULL; - if (src->colorspace < MODE_YUV) { - return NULL; - } - - if (last_y != NULL) *last_y = idec->params_.last_y; - if (u != NULL) *u = src->u.YUVA.u; - if (v != NULL) *v = src->u.YUVA.v; - if (a != NULL) *a = src->u.YUVA.a; - if (width != NULL) *width = src->width; - if (height != NULL) *height = src->height; - if (stride != NULL) *stride = src->u.YUVA.y_stride; - if (uv_stride != NULL) *uv_stride = src->u.YUVA.u_stride; - if (a_stride != NULL) *a_stride = src->u.YUVA.a_stride; - - return src->u.YUVA.y; -} - -int WebPISetIOHooks(WebPIDecoder* const idec, - VP8IoPutHook put, - VP8IoSetupHook setup, - VP8IoTeardownHook teardown, - void* user_data) { - if (idec == NULL || idec->state_ > STATE_WEBP_HEADER) { - return 0; - } - - idec->io_.put = put; - idec->io_.setup = setup; - idec->io_.teardown = teardown; - idec->io_.opaque = user_data; - - return 1; -} diff --git a/Extended/libwebp/src/dec/io_dec.c b/Extended/libwebp/src/dec/io_dec.c deleted file mode 100644 index e603f19..0000000 --- a/Extended/libwebp/src/dec/io_dec.c +++ /dev/null @@ -1,649 +0,0 @@ -// Copyright 2011 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// functions for sample output. -// -// Author: Skal (pascal.massimino@gmail.com) - -#include -#include -#include "src/dec/vp8i_dec.h" -#include "src/dec/webpi_dec.h" -#include "src/dsp/dsp.h" -#include "src/dsp/yuv.h" -#include "src/utils/utils.h" - -//------------------------------------------------------------------------------ -// Main YUV<->RGB conversion functions - -static int EmitYUV(const VP8Io* const io, WebPDecParams* const p) { - WebPDecBuffer* output = p->output; - const WebPYUVABuffer* const buf = &output->u.YUVA; - uint8_t* const y_dst = buf->y + io->mb_y * buf->y_stride; - uint8_t* const u_dst = buf->u + (io->mb_y >> 1) * buf->u_stride; - uint8_t* const v_dst = buf->v + (io->mb_y >> 1) * buf->v_stride; - const int mb_w = io->mb_w; - const int mb_h = io->mb_h; - const int uv_w = (mb_w + 1) / 2; - const int uv_h = (mb_h + 1) / 2; - int j; - for (j = 0; j < mb_h; ++j) { - memcpy(y_dst + j * buf->y_stride, io->y + j * io->y_stride, mb_w); - } - for (j = 0; j < uv_h; ++j) { - memcpy(u_dst + j * buf->u_stride, io->u + j * io->uv_stride, uv_w); - memcpy(v_dst + j * buf->v_stride, io->v + j * io->uv_stride, uv_w); - } - return io->mb_h; -} - -// Point-sampling U/V sampler. -static int EmitSampledRGB(const VP8Io* const io, WebPDecParams* const p) { - WebPDecBuffer* const output = p->output; - WebPRGBABuffer* const buf = &output->u.RGBA; - uint8_t* const dst = buf->rgba + io->mb_y * buf->stride; - WebPSamplerProcessPlane(io->y, io->y_stride, - io->u, io->v, io->uv_stride, - dst, buf->stride, io->mb_w, io->mb_h, - WebPSamplers[output->colorspace]); - return io->mb_h; -} - -//------------------------------------------------------------------------------ -// Fancy upsampling - -#ifdef FANCY_UPSAMPLING -static int EmitFancyRGB(const VP8Io* const io, WebPDecParams* const p) { - int num_lines_out = io->mb_h; // a priori guess - const WebPRGBABuffer* const buf = &p->output->u.RGBA; - uint8_t* dst = buf->rgba + io->mb_y * buf->stride; - WebPUpsampleLinePairFunc upsample = WebPUpsamplers[p->output->colorspace]; - const uint8_t* cur_y = io->y; - const uint8_t* cur_u = io->u; - const uint8_t* cur_v = io->v; - const uint8_t* top_u = p->tmp_u; - const uint8_t* top_v = p->tmp_v; - int y = io->mb_y; - const int y_end = io->mb_y + io->mb_h; - const int mb_w = io->mb_w; - const int uv_w = (mb_w + 1) / 2; - - if (y == 0) { - // First line is special cased. We mirror the u/v samples at boundary. - upsample(cur_y, NULL, cur_u, cur_v, cur_u, cur_v, dst, NULL, mb_w); - } else { - // We can finish the left-over line from previous call. - upsample(p->tmp_y, cur_y, top_u, top_v, cur_u, cur_v, - dst - buf->stride, dst, mb_w); - ++num_lines_out; - } - // Loop over each output pairs of row. - for (; y + 2 < y_end; y += 2) { - top_u = cur_u; - top_v = cur_v; - cur_u += io->uv_stride; - cur_v += io->uv_stride; - dst += 2 * buf->stride; - cur_y += 2 * io->y_stride; - upsample(cur_y - io->y_stride, cur_y, - top_u, top_v, cur_u, cur_v, - dst - buf->stride, dst, mb_w); - } - // move to last row - cur_y += io->y_stride; - if (io->crop_top + y_end < io->crop_bottom) { - // Save the unfinished samples for next call (as we're not done yet). - memcpy(p->tmp_y, cur_y, mb_w * sizeof(*p->tmp_y)); - memcpy(p->tmp_u, cur_u, uv_w * sizeof(*p->tmp_u)); - memcpy(p->tmp_v, cur_v, uv_w * sizeof(*p->tmp_v)); - // The fancy upsampler leaves a row unfinished behind - // (except for the very last row) - num_lines_out--; - } else { - // Process the very last row of even-sized picture - if (!(y_end & 1)) { - upsample(cur_y, NULL, cur_u, cur_v, cur_u, cur_v, - dst + buf->stride, NULL, mb_w); - } - } - return num_lines_out; -} - -#endif /* FANCY_UPSAMPLING */ - -//------------------------------------------------------------------------------ - -static void FillAlphaPlane(uint8_t* dst, int w, int h, int stride) { - int j; - for (j = 0; j < h; ++j) { - memset(dst, 0xff, w * sizeof(*dst)); - dst += stride; - } -} - -static int EmitAlphaYUV(const VP8Io* const io, WebPDecParams* const p, - int expected_num_lines_out) { - const uint8_t* alpha = io->a; - const WebPYUVABuffer* const buf = &p->output->u.YUVA; - const int mb_w = io->mb_w; - const int mb_h = io->mb_h; - uint8_t* dst = buf->a + io->mb_y * buf->a_stride; - int j; - (void)expected_num_lines_out; - assert(expected_num_lines_out == mb_h); - if (alpha != NULL) { - for (j = 0; j < mb_h; ++j) { - memcpy(dst, alpha, mb_w * sizeof(*dst)); - alpha += io->width; - dst += buf->a_stride; - } - } else if (buf->a != NULL) { - // the user requested alpha, but there is none, set it to opaque. - FillAlphaPlane(dst, mb_w, mb_h, buf->a_stride); - } - return 0; -} - -static int GetAlphaSourceRow(const VP8Io* const io, - const uint8_t** alpha, int* const num_rows) { - int start_y = io->mb_y; - *num_rows = io->mb_h; - - // Compensate for the 1-line delay of the fancy upscaler. - // This is similar to EmitFancyRGB(). - if (io->fancy_upsampling) { - if (start_y == 0) { - // We don't process the last row yet. It'll be done during the next call. - --*num_rows; - } else { - --start_y; - // Fortunately, *alpha data is persistent, so we can go back - // one row and finish alpha blending, now that the fancy upscaler - // completed the YUV->RGB interpolation. - *alpha -= io->width; - } - if (io->crop_top + io->mb_y + io->mb_h == io->crop_bottom) { - // If it's the very last call, we process all the remaining rows! - *num_rows = io->crop_bottom - io->crop_top - start_y; - } - } - return start_y; -} - -static int EmitAlphaRGB(const VP8Io* const io, WebPDecParams* const p, - int expected_num_lines_out) { - const uint8_t* alpha = io->a; - if (alpha != NULL) { - const int mb_w = io->mb_w; - const WEBP_CSP_MODE colorspace = p->output->colorspace; - const int alpha_first = - (colorspace == MODE_ARGB || colorspace == MODE_Argb); - const WebPRGBABuffer* const buf = &p->output->u.RGBA; - int num_rows; - const int start_y = GetAlphaSourceRow(io, &alpha, &num_rows); - uint8_t* const base_rgba = buf->rgba + start_y * buf->stride; - uint8_t* const dst = base_rgba + (alpha_first ? 0 : 3); - const int has_alpha = WebPDispatchAlpha(alpha, io->width, mb_w, - num_rows, dst, buf->stride); - (void)expected_num_lines_out; - assert(expected_num_lines_out == num_rows); - // has_alpha is true if there's non-trivial alpha to premultiply with. - if (has_alpha && WebPIsPremultipliedMode(colorspace)) { - WebPApplyAlphaMultiply(base_rgba, alpha_first, - mb_w, num_rows, buf->stride); - } - } - return 0; -} - -static int EmitAlphaRGBA4444(const VP8Io* const io, WebPDecParams* const p, - int expected_num_lines_out) { - const uint8_t* alpha = io->a; - if (alpha != NULL) { - const int mb_w = io->mb_w; - const WEBP_CSP_MODE colorspace = p->output->colorspace; - const WebPRGBABuffer* const buf = &p->output->u.RGBA; - int num_rows; - const int start_y = GetAlphaSourceRow(io, &alpha, &num_rows); - uint8_t* const base_rgba = buf->rgba + start_y * buf->stride; -#if (WEBP_SWAP_16BIT_CSP == 1) - uint8_t* alpha_dst = base_rgba; -#else - uint8_t* alpha_dst = base_rgba + 1; -#endif - uint32_t alpha_mask = 0x0f; - int i, j; - for (j = 0; j < num_rows; ++j) { - for (i = 0; i < mb_w; ++i) { - // Fill in the alpha value (converted to 4 bits). - const uint32_t alpha_value = alpha[i] >> 4; - alpha_dst[2 * i] = (alpha_dst[2 * i] & 0xf0) | alpha_value; - alpha_mask &= alpha_value; - } - alpha += io->width; - alpha_dst += buf->stride; - } - (void)expected_num_lines_out; - assert(expected_num_lines_out == num_rows); - if (alpha_mask != 0x0f && WebPIsPremultipliedMode(colorspace)) { - WebPApplyAlphaMultiply4444(base_rgba, mb_w, num_rows, buf->stride); - } - } - return 0; -} - -//------------------------------------------------------------------------------ -// YUV rescaling (no final RGB conversion needed) - -#if !defined(WEBP_REDUCE_SIZE) -static int Rescale(const uint8_t* src, int src_stride, - int new_lines, WebPRescaler* const wrk) { - int num_lines_out = 0; - while (new_lines > 0) { // import new contributions of source rows. - const int lines_in = WebPRescalerImport(wrk, new_lines, src, src_stride); - src += lines_in * src_stride; - new_lines -= lines_in; - num_lines_out += WebPRescalerExport(wrk); // emit output row(s) - } - return num_lines_out; -} - -static int EmitRescaledYUV(const VP8Io* const io, WebPDecParams* const p) { - const int mb_h = io->mb_h; - const int uv_mb_h = (mb_h + 1) >> 1; - WebPRescaler* const scaler = p->scaler_y; - int num_lines_out = 0; - if (WebPIsAlphaMode(p->output->colorspace) && io->a != NULL) { - // Before rescaling, we premultiply the luma directly into the io->y - // internal buffer. This is OK since these samples are not used for - // intra-prediction (the top samples are saved in cache_y_/u_/v_). - // But we need to cast the const away, though. - WebPMultRows((uint8_t*)io->y, io->y_stride, - io->a, io->width, io->mb_w, mb_h, 0); - } - num_lines_out = Rescale(io->y, io->y_stride, mb_h, scaler); - Rescale(io->u, io->uv_stride, uv_mb_h, p->scaler_u); - Rescale(io->v, io->uv_stride, uv_mb_h, p->scaler_v); - return num_lines_out; -} - -static int EmitRescaledAlphaYUV(const VP8Io* const io, WebPDecParams* const p, - int expected_num_lines_out) { - const WebPYUVABuffer* const buf = &p->output->u.YUVA; - uint8_t* const dst_a = buf->a + p->last_y * buf->a_stride; - if (io->a != NULL) { - uint8_t* const dst_y = buf->y + p->last_y * buf->y_stride; - const int num_lines_out = Rescale(io->a, io->width, io->mb_h, p->scaler_a); - assert(expected_num_lines_out == num_lines_out); - if (num_lines_out > 0) { // unmultiply the Y - WebPMultRows(dst_y, buf->y_stride, dst_a, buf->a_stride, - p->scaler_a->dst_width, num_lines_out, 1); - } - } else if (buf->a != NULL) { - // the user requested alpha, but there is none, set it to opaque. - assert(p->last_y + expected_num_lines_out <= io->scaled_height); - FillAlphaPlane(dst_a, io->scaled_width, expected_num_lines_out, - buf->a_stride); - } - return 0; -} - -static int InitYUVRescaler(const VP8Io* const io, WebPDecParams* const p) { - const int has_alpha = WebPIsAlphaMode(p->output->colorspace); - const WebPYUVABuffer* const buf = &p->output->u.YUVA; - const int out_width = io->scaled_width; - const int out_height = io->scaled_height; - const int uv_out_width = (out_width + 1) >> 1; - const int uv_out_height = (out_height + 1) >> 1; - const int uv_in_width = (io->mb_w + 1) >> 1; - const int uv_in_height = (io->mb_h + 1) >> 1; - const size_t work_size = 2 * out_width; // scratch memory for luma rescaler - const size_t uv_work_size = 2 * uv_out_width; // and for each u/v ones - size_t tmp_size, rescaler_size; - rescaler_t* work; - WebPRescaler* scalers; - const int num_rescalers = has_alpha ? 4 : 3; - - tmp_size = (work_size + 2 * uv_work_size) * sizeof(*work); - if (has_alpha) { - tmp_size += work_size * sizeof(*work); - } - rescaler_size = num_rescalers * sizeof(*p->scaler_y) + WEBP_ALIGN_CST; - - p->memory = WebPSafeMalloc(1ULL, tmp_size + rescaler_size); - if (p->memory == NULL) { - return 0; // memory error - } - work = (rescaler_t*)p->memory; - - scalers = (WebPRescaler*)WEBP_ALIGN((const uint8_t*)work + tmp_size); - p->scaler_y = &scalers[0]; - p->scaler_u = &scalers[1]; - p->scaler_v = &scalers[2]; - p->scaler_a = has_alpha ? &scalers[3] : NULL; - - WebPRescalerInit(p->scaler_y, io->mb_w, io->mb_h, - buf->y, out_width, out_height, buf->y_stride, 1, - work); - WebPRescalerInit(p->scaler_u, uv_in_width, uv_in_height, - buf->u, uv_out_width, uv_out_height, buf->u_stride, 1, - work + work_size); - WebPRescalerInit(p->scaler_v, uv_in_width, uv_in_height, - buf->v, uv_out_width, uv_out_height, buf->v_stride, 1, - work + work_size + uv_work_size); - p->emit = EmitRescaledYUV; - - if (has_alpha) { - WebPRescalerInit(p->scaler_a, io->mb_w, io->mb_h, - buf->a, out_width, out_height, buf->a_stride, 1, - work + work_size + 2 * uv_work_size); - p->emit_alpha = EmitRescaledAlphaYUV; - WebPInitAlphaProcessing(); - } - return 1; -} - -//------------------------------------------------------------------------------ -// RGBA rescaling - -static int ExportRGB(WebPDecParams* const p, int y_pos) { - const WebPYUV444Converter convert = - WebPYUV444Converters[p->output->colorspace]; - const WebPRGBABuffer* const buf = &p->output->u.RGBA; - uint8_t* dst = buf->rgba + y_pos * buf->stride; - int num_lines_out = 0; - // For RGB rescaling, because of the YUV420, current scan position - // U/V can be +1/-1 line from the Y one. Hence the double test. - while (WebPRescalerHasPendingOutput(p->scaler_y) && - WebPRescalerHasPendingOutput(p->scaler_u)) { - assert(y_pos + num_lines_out < p->output->height); - assert(p->scaler_u->y_accum == p->scaler_v->y_accum); - WebPRescalerExportRow(p->scaler_y); - WebPRescalerExportRow(p->scaler_u); - WebPRescalerExportRow(p->scaler_v); - convert(p->scaler_y->dst, p->scaler_u->dst, p->scaler_v->dst, - dst, p->scaler_y->dst_width); - dst += buf->stride; - ++num_lines_out; - } - return num_lines_out; -} - -static int EmitRescaledRGB(const VP8Io* const io, WebPDecParams* const p) { - const int mb_h = io->mb_h; - const int uv_mb_h = (mb_h + 1) >> 1; - int j = 0, uv_j = 0; - int num_lines_out = 0; - while (j < mb_h) { - const int y_lines_in = - WebPRescalerImport(p->scaler_y, mb_h - j, - io->y + j * io->y_stride, io->y_stride); - j += y_lines_in; - if (WebPRescaleNeededLines(p->scaler_u, uv_mb_h - uv_j)) { - const int u_lines_in = - WebPRescalerImport(p->scaler_u, uv_mb_h - uv_j, - io->u + uv_j * io->uv_stride, io->uv_stride); - const int v_lines_in = - WebPRescalerImport(p->scaler_v, uv_mb_h - uv_j, - io->v + uv_j * io->uv_stride, io->uv_stride); - (void)v_lines_in; // remove a gcc warning - assert(u_lines_in == v_lines_in); - uv_j += u_lines_in; - } - num_lines_out += ExportRGB(p, p->last_y + num_lines_out); - } - return num_lines_out; -} - -static int ExportAlpha(WebPDecParams* const p, int y_pos, int max_lines_out) { - const WebPRGBABuffer* const buf = &p->output->u.RGBA; - uint8_t* const base_rgba = buf->rgba + y_pos * buf->stride; - const WEBP_CSP_MODE colorspace = p->output->colorspace; - const int alpha_first = - (colorspace == MODE_ARGB || colorspace == MODE_Argb); - uint8_t* dst = base_rgba + (alpha_first ? 0 : 3); - int num_lines_out = 0; - const int is_premult_alpha = WebPIsPremultipliedMode(colorspace); - uint32_t non_opaque = 0; - const int width = p->scaler_a->dst_width; - - while (WebPRescalerHasPendingOutput(p->scaler_a) && - num_lines_out < max_lines_out) { - assert(y_pos + num_lines_out < p->output->height); - WebPRescalerExportRow(p->scaler_a); - non_opaque |= WebPDispatchAlpha(p->scaler_a->dst, 0, width, 1, dst, 0); - dst += buf->stride; - ++num_lines_out; - } - if (is_premult_alpha && non_opaque) { - WebPApplyAlphaMultiply(base_rgba, alpha_first, - width, num_lines_out, buf->stride); - } - return num_lines_out; -} - -static int ExportAlphaRGBA4444(WebPDecParams* const p, int y_pos, - int max_lines_out) { - const WebPRGBABuffer* const buf = &p->output->u.RGBA; - uint8_t* const base_rgba = buf->rgba + y_pos * buf->stride; -#if (WEBP_SWAP_16BIT_CSP == 1) - uint8_t* alpha_dst = base_rgba; -#else - uint8_t* alpha_dst = base_rgba + 1; -#endif - int num_lines_out = 0; - const WEBP_CSP_MODE colorspace = p->output->colorspace; - const int width = p->scaler_a->dst_width; - const int is_premult_alpha = WebPIsPremultipliedMode(colorspace); - uint32_t alpha_mask = 0x0f; - - while (WebPRescalerHasPendingOutput(p->scaler_a) && - num_lines_out < max_lines_out) { - int i; - assert(y_pos + num_lines_out < p->output->height); - WebPRescalerExportRow(p->scaler_a); - for (i = 0; i < width; ++i) { - // Fill in the alpha value (converted to 4 bits). - const uint32_t alpha_value = p->scaler_a->dst[i] >> 4; - alpha_dst[2 * i] = (alpha_dst[2 * i] & 0xf0) | alpha_value; - alpha_mask &= alpha_value; - } - alpha_dst += buf->stride; - ++num_lines_out; - } - if (is_premult_alpha && alpha_mask != 0x0f) { - WebPApplyAlphaMultiply4444(base_rgba, width, num_lines_out, buf->stride); - } - return num_lines_out; -} - -static int EmitRescaledAlphaRGB(const VP8Io* const io, WebPDecParams* const p, - int expected_num_out_lines) { - if (io->a != NULL) { - WebPRescaler* const scaler = p->scaler_a; - int lines_left = expected_num_out_lines; - const int y_end = p->last_y + lines_left; - while (lines_left > 0) { - const int row_offset = scaler->src_y - io->mb_y; - WebPRescalerImport(scaler, io->mb_h + io->mb_y - scaler->src_y, - io->a + row_offset * io->width, io->width); - lines_left -= p->emit_alpha_row(p, y_end - lines_left, lines_left); - } - } - return 0; -} - -static int InitRGBRescaler(const VP8Io* const io, WebPDecParams* const p) { - const int has_alpha = WebPIsAlphaMode(p->output->colorspace); - const int out_width = io->scaled_width; - const int out_height = io->scaled_height; - const int uv_in_width = (io->mb_w + 1) >> 1; - const int uv_in_height = (io->mb_h + 1) >> 1; - const size_t work_size = 2 * out_width; // scratch memory for one rescaler - rescaler_t* work; // rescalers work area - uint8_t* tmp; // tmp storage for scaled YUV444 samples before RGB conversion - size_t tmp_size1, tmp_size2, total_size, rescaler_size; - WebPRescaler* scalers; - const int num_rescalers = has_alpha ? 4 : 3; - - tmp_size1 = 3 * work_size; - tmp_size2 = 3 * out_width; - if (has_alpha) { - tmp_size1 += work_size; - tmp_size2 += out_width; - } - total_size = tmp_size1 * sizeof(*work) + tmp_size2 * sizeof(*tmp); - rescaler_size = num_rescalers * sizeof(*p->scaler_y) + WEBP_ALIGN_CST; - - p->memory = WebPSafeMalloc(1ULL, total_size + rescaler_size); - if (p->memory == NULL) { - return 0; // memory error - } - work = (rescaler_t*)p->memory; - tmp = (uint8_t*)(work + tmp_size1); - - scalers = (WebPRescaler*)WEBP_ALIGN((const uint8_t*)work + total_size); - p->scaler_y = &scalers[0]; - p->scaler_u = &scalers[1]; - p->scaler_v = &scalers[2]; - p->scaler_a = has_alpha ? &scalers[3] : NULL; - - WebPRescalerInit(p->scaler_y, io->mb_w, io->mb_h, - tmp + 0 * out_width, out_width, out_height, 0, 1, - work + 0 * work_size); - WebPRescalerInit(p->scaler_u, uv_in_width, uv_in_height, - tmp + 1 * out_width, out_width, out_height, 0, 1, - work + 1 * work_size); - WebPRescalerInit(p->scaler_v, uv_in_width, uv_in_height, - tmp + 2 * out_width, out_width, out_height, 0, 1, - work + 2 * work_size); - p->emit = EmitRescaledRGB; - WebPInitYUV444Converters(); - - if (has_alpha) { - WebPRescalerInit(p->scaler_a, io->mb_w, io->mb_h, - tmp + 3 * out_width, out_width, out_height, 0, 1, - work + 3 * work_size); - p->emit_alpha = EmitRescaledAlphaRGB; - if (p->output->colorspace == MODE_RGBA_4444 || - p->output->colorspace == MODE_rgbA_4444) { - p->emit_alpha_row = ExportAlphaRGBA4444; - } else { - p->emit_alpha_row = ExportAlpha; - } - WebPInitAlphaProcessing(); - } - return 1; -} - -#endif // WEBP_REDUCE_SIZE - -//------------------------------------------------------------------------------ -// Default custom functions - -static int CustomSetup(VP8Io* io) { - WebPDecParams* const p = (WebPDecParams*)io->opaque; - const WEBP_CSP_MODE colorspace = p->output->colorspace; - const int is_rgb = WebPIsRGBMode(colorspace); - const int is_alpha = WebPIsAlphaMode(colorspace); - - p->memory = NULL; - p->emit = NULL; - p->emit_alpha = NULL; - p->emit_alpha_row = NULL; - if (!WebPIoInitFromOptions(p->options, io, is_alpha ? MODE_YUV : MODE_YUVA)) { - return 0; - } - if (is_alpha && WebPIsPremultipliedMode(colorspace)) { - WebPInitUpsamplers(); - } - if (io->use_scaling) { -#if !defined(WEBP_REDUCE_SIZE) - const int ok = is_rgb ? InitRGBRescaler(io, p) : InitYUVRescaler(io, p); - if (!ok) { - return 0; // memory error - } -#else - return 0; // rescaling support not compiled -#endif - } else { - if (is_rgb) { - WebPInitSamplers(); - p->emit = EmitSampledRGB; // default - if (io->fancy_upsampling) { -#ifdef FANCY_UPSAMPLING - const int uv_width = (io->mb_w + 1) >> 1; - p->memory = WebPSafeMalloc(1ULL, (size_t)(io->mb_w + 2 * uv_width)); - if (p->memory == NULL) { - return 0; // memory error. - } - p->tmp_y = (uint8_t*)p->memory; - p->tmp_u = p->tmp_y + io->mb_w; - p->tmp_v = p->tmp_u + uv_width; - p->emit = EmitFancyRGB; - WebPInitUpsamplers(); -#endif - } - } else { - p->emit = EmitYUV; - } - if (is_alpha) { // need transparency output - p->emit_alpha = - (colorspace == MODE_RGBA_4444 || colorspace == MODE_rgbA_4444) ? - EmitAlphaRGBA4444 - : is_rgb ? EmitAlphaRGB - : EmitAlphaYUV; - if (is_rgb) { - WebPInitAlphaProcessing(); - } - } - } - - return 1; -} - -//------------------------------------------------------------------------------ - -static int CustomPut(const VP8Io* io) { - WebPDecParams* const p = (WebPDecParams*)io->opaque; - const int mb_w = io->mb_w; - const int mb_h = io->mb_h; - int num_lines_out; - assert(!(io->mb_y & 1)); - - if (mb_w <= 0 || mb_h <= 0) { - return 0; - } - num_lines_out = p->emit(io, p); - if (p->emit_alpha != NULL) { - p->emit_alpha(io, p, num_lines_out); - } - p->last_y += num_lines_out; - return 1; -} - -//------------------------------------------------------------------------------ - -static void CustomTeardown(const VP8Io* io) { - WebPDecParams* const p = (WebPDecParams*)io->opaque; - WebPSafeFree(p->memory); - p->memory = NULL; -} - -//------------------------------------------------------------------------------ -// Main entry point - -void WebPInitCustomIo(WebPDecParams* const params, VP8Io* const io) { - io->put = CustomPut; - io->setup = CustomSetup; - io->teardown = CustomTeardown; - io->opaque = params; -} - -//------------------------------------------------------------------------------ diff --git a/Extended/libwebp/src/dec/quant_dec.c b/Extended/libwebp/src/dec/quant_dec.c deleted file mode 100644 index a0ac018..0000000 --- a/Extended/libwebp/src/dec/quant_dec.c +++ /dev/null @@ -1,115 +0,0 @@ -// Copyright 2010 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Quantizer initialization -// -// Author: Skal (pascal.massimino@gmail.com) - -#include "src/dec/vp8i_dec.h" - -static WEBP_INLINE int clip(int v, int M) { - return v < 0 ? 0 : v > M ? M : v; -} - -// Paragraph 14.1 -static const uint8_t kDcTable[128] = { - 4, 5, 6, 7, 8, 9, 10, 10, - 11, 12, 13, 14, 15, 16, 17, 17, - 18, 19, 20, 20, 21, 21, 22, 22, - 23, 23, 24, 25, 25, 26, 27, 28, - 29, 30, 31, 32, 33, 34, 35, 36, - 37, 37, 38, 39, 40, 41, 42, 43, - 44, 45, 46, 46, 47, 48, 49, 50, - 51, 52, 53, 54, 55, 56, 57, 58, - 59, 60, 61, 62, 63, 64, 65, 66, - 67, 68, 69, 70, 71, 72, 73, 74, - 75, 76, 76, 77, 78, 79, 80, 81, - 82, 83, 84, 85, 86, 87, 88, 89, - 91, 93, 95, 96, 98, 100, 101, 102, - 104, 106, 108, 110, 112, 114, 116, 118, - 122, 124, 126, 128, 130, 132, 134, 136, - 138, 140, 143, 145, 148, 151, 154, 157 -}; - -static const uint16_t kAcTable[128] = { - 4, 5, 6, 7, 8, 9, 10, 11, - 12, 13, 14, 15, 16, 17, 18, 19, - 20, 21, 22, 23, 24, 25, 26, 27, - 28, 29, 30, 31, 32, 33, 34, 35, - 36, 37, 38, 39, 40, 41, 42, 43, - 44, 45, 46, 47, 48, 49, 50, 51, - 52, 53, 54, 55, 56, 57, 58, 60, - 62, 64, 66, 68, 70, 72, 74, 76, - 78, 80, 82, 84, 86, 88, 90, 92, - 94, 96, 98, 100, 102, 104, 106, 108, - 110, 112, 114, 116, 119, 122, 125, 128, - 131, 134, 137, 140, 143, 146, 149, 152, - 155, 158, 161, 164, 167, 170, 173, 177, - 181, 185, 189, 193, 197, 201, 205, 209, - 213, 217, 221, 225, 229, 234, 239, 245, - 249, 254, 259, 264, 269, 274, 279, 284 -}; - -//------------------------------------------------------------------------------ -// Paragraph 9.6 - -void VP8ParseQuant(VP8Decoder* const dec) { - VP8BitReader* const br = &dec->br_; - const int base_q0 = VP8GetValue(br, 7, "global-header"); - const int dqy1_dc = VP8Get(br, "global-header") ? - VP8GetSignedValue(br, 4, "global-header") : 0; - const int dqy2_dc = VP8Get(br, "global-header") ? - VP8GetSignedValue(br, 4, "global-header") : 0; - const int dqy2_ac = VP8Get(br, "global-header") ? - VP8GetSignedValue(br, 4, "global-header") : 0; - const int dquv_dc = VP8Get(br, "global-header") ? - VP8GetSignedValue(br, 4, "global-header") : 0; - const int dquv_ac = VP8Get(br, "global-header") ? - VP8GetSignedValue(br, 4, "global-header") : 0; - - const VP8SegmentHeader* const hdr = &dec->segment_hdr_; - int i; - - for (i = 0; i < NUM_MB_SEGMENTS; ++i) { - int q; - if (hdr->use_segment_) { - q = hdr->quantizer_[i]; - if (!hdr->absolute_delta_) { - q += base_q0; - } - } else { - if (i > 0) { - dec->dqm_[i] = dec->dqm_[0]; - continue; - } else { - q = base_q0; - } - } - { - VP8QuantMatrix* const m = &dec->dqm_[i]; - m->y1_mat_[0] = kDcTable[clip(q + dqy1_dc, 127)]; - m->y1_mat_[1] = kAcTable[clip(q + 0, 127)]; - - m->y2_mat_[0] = kDcTable[clip(q + dqy2_dc, 127)] * 2; - // For all x in [0..284], x*155/100 is bitwise equal to (x*101581) >> 16. - // The smallest precision for that is '(x*6349) >> 12' but 16 is a good - // word size. - m->y2_mat_[1] = (kAcTable[clip(q + dqy2_ac, 127)] * 101581) >> 16; - if (m->y2_mat_[1] < 8) m->y2_mat_[1] = 8; - - m->uv_mat_[0] = kDcTable[clip(q + dquv_dc, 117)]; - m->uv_mat_[1] = kAcTable[clip(q + dquv_ac, 127)]; - - m->uv_quant_ = q + dquv_ac; // for dithering strength evaluation - } - } -} - -//------------------------------------------------------------------------------ - diff --git a/Extended/libwebp/src/dec/tree_dec.c b/Extended/libwebp/src/dec/tree_dec.c deleted file mode 100644 index 1c6fdea..0000000 --- a/Extended/libwebp/src/dec/tree_dec.c +++ /dev/null @@ -1,537 +0,0 @@ -// Copyright 2010 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Coding trees and probas -// -// Author: Skal (pascal.massimino@gmail.com) - -#include "src/dec/vp8i_dec.h" -#include "src/utils/bit_reader_inl_utils.h" - -#if !defined(USE_GENERIC_TREE) -#if !defined(__arm__) && !defined(_M_ARM) && !defined(__aarch64__) -// using a table is ~1-2% slower on ARM. Prefer the coded-tree approach then. -#define USE_GENERIC_TREE 1 // ALTERNATE_CODE -#else -#define USE_GENERIC_TREE 0 -#endif -#endif // USE_GENERIC_TREE - -#if (USE_GENERIC_TREE == 1) -static const int8_t kYModesIntra4[18] = { - -B_DC_PRED, 1, - -B_TM_PRED, 2, - -B_VE_PRED, 3, - 4, 6, - -B_HE_PRED, 5, - -B_RD_PRED, -B_VR_PRED, - -B_LD_PRED, 7, - -B_VL_PRED, 8, - -B_HD_PRED, -B_HU_PRED -}; -#endif - -//------------------------------------------------------------------------------ -// Default probabilities - -// Paragraph 13.5 -static const uint8_t - CoeffsProba0[NUM_TYPES][NUM_BANDS][NUM_CTX][NUM_PROBAS] = { - { { { 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128 }, - { 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128 }, - { 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128 } - }, - { { 253, 136, 254, 255, 228, 219, 128, 128, 128, 128, 128 }, - { 189, 129, 242, 255, 227, 213, 255, 219, 128, 128, 128 }, - { 106, 126, 227, 252, 214, 209, 255, 255, 128, 128, 128 } - }, - { { 1, 98, 248, 255, 236, 226, 255, 255, 128, 128, 128 }, - { 181, 133, 238, 254, 221, 234, 255, 154, 128, 128, 128 }, - { 78, 134, 202, 247, 198, 180, 255, 219, 128, 128, 128 }, - }, - { { 1, 185, 249, 255, 243, 255, 128, 128, 128, 128, 128 }, - { 184, 150, 247, 255, 236, 224, 128, 128, 128, 128, 128 }, - { 77, 110, 216, 255, 236, 230, 128, 128, 128, 128, 128 }, - }, - { { 1, 101, 251, 255, 241, 255, 128, 128, 128, 128, 128 }, - { 170, 139, 241, 252, 236, 209, 255, 255, 128, 128, 128 }, - { 37, 116, 196, 243, 228, 255, 255, 255, 128, 128, 128 } - }, - { { 1, 204, 254, 255, 245, 255, 128, 128, 128, 128, 128 }, - { 207, 160, 250, 255, 238, 128, 128, 128, 128, 128, 128 }, - { 102, 103, 231, 255, 211, 171, 128, 128, 128, 128, 128 } - }, - { { 1, 152, 252, 255, 240, 255, 128, 128, 128, 128, 128 }, - { 177, 135, 243, 255, 234, 225, 128, 128, 128, 128, 128 }, - { 80, 129, 211, 255, 194, 224, 128, 128, 128, 128, 128 } - }, - { { 1, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128 }, - { 246, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128 }, - { 255, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128 } - } - }, - { { { 198, 35, 237, 223, 193, 187, 162, 160, 145, 155, 62 }, - { 131, 45, 198, 221, 172, 176, 220, 157, 252, 221, 1 }, - { 68, 47, 146, 208, 149, 167, 221, 162, 255, 223, 128 } - }, - { { 1, 149, 241, 255, 221, 224, 255, 255, 128, 128, 128 }, - { 184, 141, 234, 253, 222, 220, 255, 199, 128, 128, 128 }, - { 81, 99, 181, 242, 176, 190, 249, 202, 255, 255, 128 } - }, - { { 1, 129, 232, 253, 214, 197, 242, 196, 255, 255, 128 }, - { 99, 121, 210, 250, 201, 198, 255, 202, 128, 128, 128 }, - { 23, 91, 163, 242, 170, 187, 247, 210, 255, 255, 128 } - }, - { { 1, 200, 246, 255, 234, 255, 128, 128, 128, 128, 128 }, - { 109, 178, 241, 255, 231, 245, 255, 255, 128, 128, 128 }, - { 44, 130, 201, 253, 205, 192, 255, 255, 128, 128, 128 } - }, - { { 1, 132, 239, 251, 219, 209, 255, 165, 128, 128, 128 }, - { 94, 136, 225, 251, 218, 190, 255, 255, 128, 128, 128 }, - { 22, 100, 174, 245, 186, 161, 255, 199, 128, 128, 128 } - }, - { { 1, 182, 249, 255, 232, 235, 128, 128, 128, 128, 128 }, - { 124, 143, 241, 255, 227, 234, 128, 128, 128, 128, 128 }, - { 35, 77, 181, 251, 193, 211, 255, 205, 128, 128, 128 } - }, - { { 1, 157, 247, 255, 236, 231, 255, 255, 128, 128, 128 }, - { 121, 141, 235, 255, 225, 227, 255, 255, 128, 128, 128 }, - { 45, 99, 188, 251, 195, 217, 255, 224, 128, 128, 128 } - }, - { { 1, 1, 251, 255, 213, 255, 128, 128, 128, 128, 128 }, - { 203, 1, 248, 255, 255, 128, 128, 128, 128, 128, 128 }, - { 137, 1, 177, 255, 224, 255, 128, 128, 128, 128, 128 } - } - }, - { { { 253, 9, 248, 251, 207, 208, 255, 192, 128, 128, 128 }, - { 175, 13, 224, 243, 193, 185, 249, 198, 255, 255, 128 }, - { 73, 17, 171, 221, 161, 179, 236, 167, 255, 234, 128 } - }, - { { 1, 95, 247, 253, 212, 183, 255, 255, 128, 128, 128 }, - { 239, 90, 244, 250, 211, 209, 255, 255, 128, 128, 128 }, - { 155, 77, 195, 248, 188, 195, 255, 255, 128, 128, 128 } - }, - { { 1, 24, 239, 251, 218, 219, 255, 205, 128, 128, 128 }, - { 201, 51, 219, 255, 196, 186, 128, 128, 128, 128, 128 }, - { 69, 46, 190, 239, 201, 218, 255, 228, 128, 128, 128 } - }, - { { 1, 191, 251, 255, 255, 128, 128, 128, 128, 128, 128 }, - { 223, 165, 249, 255, 213, 255, 128, 128, 128, 128, 128 }, - { 141, 124, 248, 255, 255, 128, 128, 128, 128, 128, 128 } - }, - { { 1, 16, 248, 255, 255, 128, 128, 128, 128, 128, 128 }, - { 190, 36, 230, 255, 236, 255, 128, 128, 128, 128, 128 }, - { 149, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128 } - }, - { { 1, 226, 255, 128, 128, 128, 128, 128, 128, 128, 128 }, - { 247, 192, 255, 128, 128, 128, 128, 128, 128, 128, 128 }, - { 240, 128, 255, 128, 128, 128, 128, 128, 128, 128, 128 } - }, - { { 1, 134, 252, 255, 255, 128, 128, 128, 128, 128, 128 }, - { 213, 62, 250, 255, 255, 128, 128, 128, 128, 128, 128 }, - { 55, 93, 255, 128, 128, 128, 128, 128, 128, 128, 128 } - }, - { { 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128 }, - { 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128 }, - { 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128 } - } - }, - { { { 202, 24, 213, 235, 186, 191, 220, 160, 240, 175, 255 }, - { 126, 38, 182, 232, 169, 184, 228, 174, 255, 187, 128 }, - { 61, 46, 138, 219, 151, 178, 240, 170, 255, 216, 128 } - }, - { { 1, 112, 230, 250, 199, 191, 247, 159, 255, 255, 128 }, - { 166, 109, 228, 252, 211, 215, 255, 174, 128, 128, 128 }, - { 39, 77, 162, 232, 172, 180, 245, 178, 255, 255, 128 } - }, - { { 1, 52, 220, 246, 198, 199, 249, 220, 255, 255, 128 }, - { 124, 74, 191, 243, 183, 193, 250, 221, 255, 255, 128 }, - { 24, 71, 130, 219, 154, 170, 243, 182, 255, 255, 128 } - }, - { { 1, 182, 225, 249, 219, 240, 255, 224, 128, 128, 128 }, - { 149, 150, 226, 252, 216, 205, 255, 171, 128, 128, 128 }, - { 28, 108, 170, 242, 183, 194, 254, 223, 255, 255, 128 } - }, - { { 1, 81, 230, 252, 204, 203, 255, 192, 128, 128, 128 }, - { 123, 102, 209, 247, 188, 196, 255, 233, 128, 128, 128 }, - { 20, 95, 153, 243, 164, 173, 255, 203, 128, 128, 128 } - }, - { { 1, 222, 248, 255, 216, 213, 128, 128, 128, 128, 128 }, - { 168, 175, 246, 252, 235, 205, 255, 255, 128, 128, 128 }, - { 47, 116, 215, 255, 211, 212, 255, 255, 128, 128, 128 } - }, - { { 1, 121, 236, 253, 212, 214, 255, 255, 128, 128, 128 }, - { 141, 84, 213, 252, 201, 202, 255, 219, 128, 128, 128 }, - { 42, 80, 160, 240, 162, 185, 255, 205, 128, 128, 128 } - }, - { { 1, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128 }, - { 244, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128 }, - { 238, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128 } - } - } -}; - -// Paragraph 11.5 -static const uint8_t kBModesProba[NUM_BMODES][NUM_BMODES][NUM_BMODES - 1] = { - { { 231, 120, 48, 89, 115, 113, 120, 152, 112 }, - { 152, 179, 64, 126, 170, 118, 46, 70, 95 }, - { 175, 69, 143, 80, 85, 82, 72, 155, 103 }, - { 56, 58, 10, 171, 218, 189, 17, 13, 152 }, - { 114, 26, 17, 163, 44, 195, 21, 10, 173 }, - { 121, 24, 80, 195, 26, 62, 44, 64, 85 }, - { 144, 71, 10, 38, 171, 213, 144, 34, 26 }, - { 170, 46, 55, 19, 136, 160, 33, 206, 71 }, - { 63, 20, 8, 114, 114, 208, 12, 9, 226 }, - { 81, 40, 11, 96, 182, 84, 29, 16, 36 } }, - { { 134, 183, 89, 137, 98, 101, 106, 165, 148 }, - { 72, 187, 100, 130, 157, 111, 32, 75, 80 }, - { 66, 102, 167, 99, 74, 62, 40, 234, 128 }, - { 41, 53, 9, 178, 241, 141, 26, 8, 107 }, - { 74, 43, 26, 146, 73, 166, 49, 23, 157 }, - { 65, 38, 105, 160, 51, 52, 31, 115, 128 }, - { 104, 79, 12, 27, 217, 255, 87, 17, 7 }, - { 87, 68, 71, 44, 114, 51, 15, 186, 23 }, - { 47, 41, 14, 110, 182, 183, 21, 17, 194 }, - { 66, 45, 25, 102, 197, 189, 23, 18, 22 } }, - { { 88, 88, 147, 150, 42, 46, 45, 196, 205 }, - { 43, 97, 183, 117, 85, 38, 35, 179, 61 }, - { 39, 53, 200, 87, 26, 21, 43, 232, 171 }, - { 56, 34, 51, 104, 114, 102, 29, 93, 77 }, - { 39, 28, 85, 171, 58, 165, 90, 98, 64 }, - { 34, 22, 116, 206, 23, 34, 43, 166, 73 }, - { 107, 54, 32, 26, 51, 1, 81, 43, 31 }, - { 68, 25, 106, 22, 64, 171, 36, 225, 114 }, - { 34, 19, 21, 102, 132, 188, 16, 76, 124 }, - { 62, 18, 78, 95, 85, 57, 50, 48, 51 } }, - { { 193, 101, 35, 159, 215, 111, 89, 46, 111 }, - { 60, 148, 31, 172, 219, 228, 21, 18, 111 }, - { 112, 113, 77, 85, 179, 255, 38, 120, 114 }, - { 40, 42, 1, 196, 245, 209, 10, 25, 109 }, - { 88, 43, 29, 140, 166, 213, 37, 43, 154 }, - { 61, 63, 30, 155, 67, 45, 68, 1, 209 }, - { 100, 80, 8, 43, 154, 1, 51, 26, 71 }, - { 142, 78, 78, 16, 255, 128, 34, 197, 171 }, - { 41, 40, 5, 102, 211, 183, 4, 1, 221 }, - { 51, 50, 17, 168, 209, 192, 23, 25, 82 } }, - { { 138, 31, 36, 171, 27, 166, 38, 44, 229 }, - { 67, 87, 58, 169, 82, 115, 26, 59, 179 }, - { 63, 59, 90, 180, 59, 166, 93, 73, 154 }, - { 40, 40, 21, 116, 143, 209, 34, 39, 175 }, - { 47, 15, 16, 183, 34, 223, 49, 45, 183 }, - { 46, 17, 33, 183, 6, 98, 15, 32, 183 }, - { 57, 46, 22, 24, 128, 1, 54, 17, 37 }, - { 65, 32, 73, 115, 28, 128, 23, 128, 205 }, - { 40, 3, 9, 115, 51, 192, 18, 6, 223 }, - { 87, 37, 9, 115, 59, 77, 64, 21, 47 } }, - { { 104, 55, 44, 218, 9, 54, 53, 130, 226 }, - { 64, 90, 70, 205, 40, 41, 23, 26, 57 }, - { 54, 57, 112, 184, 5, 41, 38, 166, 213 }, - { 30, 34, 26, 133, 152, 116, 10, 32, 134 }, - { 39, 19, 53, 221, 26, 114, 32, 73, 255 }, - { 31, 9, 65, 234, 2, 15, 1, 118, 73 }, - { 75, 32, 12, 51, 192, 255, 160, 43, 51 }, - { 88, 31, 35, 67, 102, 85, 55, 186, 85 }, - { 56, 21, 23, 111, 59, 205, 45, 37, 192 }, - { 55, 38, 70, 124, 73, 102, 1, 34, 98 } }, - { { 125, 98, 42, 88, 104, 85, 117, 175, 82 }, - { 95, 84, 53, 89, 128, 100, 113, 101, 45 }, - { 75, 79, 123, 47, 51, 128, 81, 171, 1 }, - { 57, 17, 5, 71, 102, 57, 53, 41, 49 }, - { 38, 33, 13, 121, 57, 73, 26, 1, 85 }, - { 41, 10, 67, 138, 77, 110, 90, 47, 114 }, - { 115, 21, 2, 10, 102, 255, 166, 23, 6 }, - { 101, 29, 16, 10, 85, 128, 101, 196, 26 }, - { 57, 18, 10, 102, 102, 213, 34, 20, 43 }, - { 117, 20, 15, 36, 163, 128, 68, 1, 26 } }, - { { 102, 61, 71, 37, 34, 53, 31, 243, 192 }, - { 69, 60, 71, 38, 73, 119, 28, 222, 37 }, - { 68, 45, 128, 34, 1, 47, 11, 245, 171 }, - { 62, 17, 19, 70, 146, 85, 55, 62, 70 }, - { 37, 43, 37, 154, 100, 163, 85, 160, 1 }, - { 63, 9, 92, 136, 28, 64, 32, 201, 85 }, - { 75, 15, 9, 9, 64, 255, 184, 119, 16 }, - { 86, 6, 28, 5, 64, 255, 25, 248, 1 }, - { 56, 8, 17, 132, 137, 255, 55, 116, 128 }, - { 58, 15, 20, 82, 135, 57, 26, 121, 40 } }, - { { 164, 50, 31, 137, 154, 133, 25, 35, 218 }, - { 51, 103, 44, 131, 131, 123, 31, 6, 158 }, - { 86, 40, 64, 135, 148, 224, 45, 183, 128 }, - { 22, 26, 17, 131, 240, 154, 14, 1, 209 }, - { 45, 16, 21, 91, 64, 222, 7, 1, 197 }, - { 56, 21, 39, 155, 60, 138, 23, 102, 213 }, - { 83, 12, 13, 54, 192, 255, 68, 47, 28 }, - { 85, 26, 85, 85, 128, 128, 32, 146, 171 }, - { 18, 11, 7, 63, 144, 171, 4, 4, 246 }, - { 35, 27, 10, 146, 174, 171, 12, 26, 128 } }, - { { 190, 80, 35, 99, 180, 80, 126, 54, 45 }, - { 85, 126, 47, 87, 176, 51, 41, 20, 32 }, - { 101, 75, 128, 139, 118, 146, 116, 128, 85 }, - { 56, 41, 15, 176, 236, 85, 37, 9, 62 }, - { 71, 30, 17, 119, 118, 255, 17, 18, 138 }, - { 101, 38, 60, 138, 55, 70, 43, 26, 142 }, - { 146, 36, 19, 30, 171, 255, 97, 27, 20 }, - { 138, 45, 61, 62, 219, 1, 81, 188, 64 }, - { 32, 41, 20, 117, 151, 142, 20, 21, 163 }, - { 112, 19, 12, 61, 195, 128, 48, 4, 24 } } -}; - -void VP8ResetProba(VP8Proba* const proba) { - memset(proba->segments_, 255u, sizeof(proba->segments_)); - // proba->bands_[][] is initialized later -} - -static void ParseIntraMode(VP8BitReader* const br, - VP8Decoder* const dec, int mb_x) { - uint8_t* const top = dec->intra_t_ + 4 * mb_x; - uint8_t* const left = dec->intra_l_; - VP8MBData* const block = dec->mb_data_ + mb_x; - - // Note: we don't save segment map (yet), as we don't expect - // to decode more than 1 keyframe. - if (dec->segment_hdr_.update_map_) { - // Hardcoded tree parsing - block->segment_ = !VP8GetBit(br, dec->proba_.segments_[0], "segments") - ? VP8GetBit(br, dec->proba_.segments_[1], "segments") - : VP8GetBit(br, dec->proba_.segments_[2], "segments") + 2; - } else { - block->segment_ = 0; // default for intra - } - if (dec->use_skip_proba_) block->skip_ = VP8GetBit(br, dec->skip_p_, "skip"); - - block->is_i4x4_ = !VP8GetBit(br, 145, "block-size"); - if (!block->is_i4x4_) { - // Hardcoded 16x16 intra-mode decision tree. - const int ymode = - VP8GetBit(br, 156, "pred-modes") ? - (VP8GetBit(br, 128, "pred-modes") ? TM_PRED : H_PRED) : - (VP8GetBit(br, 163, "pred-modes") ? V_PRED : DC_PRED); - block->imodes_[0] = ymode; - memset(top, ymode, 4 * sizeof(*top)); - memset(left, ymode, 4 * sizeof(*left)); - } else { - uint8_t* modes = block->imodes_; - int y; - for (y = 0; y < 4; ++y) { - int ymode = left[y]; - int x; - for (x = 0; x < 4; ++x) { - const uint8_t* const prob = kBModesProba[top[x]][ymode]; -#if (USE_GENERIC_TREE == 1) - // Generic tree-parsing - int i = kYModesIntra4[VP8GetBit(br, prob[0], "pred-modes")]; - while (i > 0) { - i = kYModesIntra4[2 * i + VP8GetBit(br, prob[i], "pred-modes")]; - } - ymode = -i; -#else - // Hardcoded tree parsing - ymode = !VP8GetBit(br, prob[0], "pred-modes") ? B_DC_PRED : - !VP8GetBit(br, prob[1], "pred-modes") ? B_TM_PRED : - !VP8GetBit(br, prob[2], "pred-modes") ? B_VE_PRED : - !VP8GetBit(br, prob[3], "pred-modes") ? - (!VP8GetBit(br, prob[4], "pred-modes") ? B_HE_PRED : - (!VP8GetBit(br, prob[5], "pred-modes") ? B_RD_PRED - : B_VR_PRED)) : - (!VP8GetBit(br, prob[6], "pred-modes") ? B_LD_PRED : - (!VP8GetBit(br, prob[7], "pred-modes") ? B_VL_PRED : - (!VP8GetBit(br, prob[8], "pred-modes") ? B_HD_PRED - : B_HU_PRED)) - ); -#endif // USE_GENERIC_TREE - top[x] = ymode; - } - memcpy(modes, top, 4 * sizeof(*top)); - modes += 4; - left[y] = ymode; - } - } - // Hardcoded UVMode decision tree - block->uvmode_ = !VP8GetBit(br, 142, "pred-modes-uv") ? DC_PRED - : !VP8GetBit(br, 114, "pred-modes-uv") ? V_PRED - : VP8GetBit(br, 183, "pred-modes-uv") ? TM_PRED : H_PRED; -} - -int VP8ParseIntraModeRow(VP8BitReader* const br, VP8Decoder* const dec) { - int mb_x; - for (mb_x = 0; mb_x < dec->mb_w_; ++mb_x) { - ParseIntraMode(br, dec, mb_x); - } - return !dec->br_.eof_; -} - -//------------------------------------------------------------------------------ -// Paragraph 13 - -static const uint8_t - CoeffsUpdateProba[NUM_TYPES][NUM_BANDS][NUM_CTX][NUM_PROBAS] = { - { { { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 } - }, - { { 176, 246, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 223, 241, 252, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 249, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255 } - }, - { { 255, 244, 252, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 234, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 } - }, - { { 255, 246, 254, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 239, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 254, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255 } - }, - { { 255, 248, 254, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 251, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 } - }, - { { 255, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 251, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 254, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255 } - }, - { { 255, 254, 253, 255, 254, 255, 255, 255, 255, 255, 255 }, - { 250, 255, 254, 255, 254, 255, 255, 255, 255, 255, 255 }, - { 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 } - }, - { { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 } - } - }, - { { { 217, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 225, 252, 241, 253, 255, 255, 254, 255, 255, 255, 255 }, - { 234, 250, 241, 250, 253, 255, 253, 254, 255, 255, 255 } - }, - { { 255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 223, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 238, 253, 254, 254, 255, 255, 255, 255, 255, 255, 255 } - }, - { { 255, 248, 254, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 249, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 } - }, - { { 255, 253, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 247, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 } - }, - { { 255, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 252, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 } - }, - { { 255, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 } - }, - { { 255, 254, 253, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 250, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 } - }, - { { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 } - } - }, - { { { 186, 251, 250, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 234, 251, 244, 254, 255, 255, 255, 255, 255, 255, 255 }, - { 251, 251, 243, 253, 254, 255, 254, 255, 255, 255, 255 } - }, - { { 255, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 236, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 251, 253, 253, 254, 254, 255, 255, 255, 255, 255, 255 } - }, - { { 255, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 254, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 } - }, - { { 255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 254, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 } - }, - { { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 } - }, - { { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 } - }, - { { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 } - }, - { { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 } - } - }, - { { { 248, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 250, 254, 252, 254, 255, 255, 255, 255, 255, 255, 255 }, - { 248, 254, 249, 253, 255, 255, 255, 255, 255, 255, 255 } - }, - { { 255, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 246, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 252, 254, 251, 254, 254, 255, 255, 255, 255, 255, 255 } - }, - { { 255, 254, 252, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 248, 254, 253, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 253, 255, 254, 254, 255, 255, 255, 255, 255, 255, 255 } - }, - { { 255, 251, 254, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 245, 251, 254, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 253, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255 } - }, - { { 255, 251, 253, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 252, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255 } - }, - { { 255, 252, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 249, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 255, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255 } - }, - { { 255, 255, 253, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 250, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 } - }, - { { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 } - } - } -}; - -// Paragraph 9.9 - -static const uint8_t kBands[16 + 1] = { - 0, 1, 2, 3, 6, 4, 5, 6, 6, 6, 6, 6, 6, 6, 6, 7, - 0 // extra entry as sentinel -}; - -void VP8ParseProba(VP8BitReader* const br, VP8Decoder* const dec) { - VP8Proba* const proba = &dec->proba_; - int t, b, c, p; - for (t = 0; t < NUM_TYPES; ++t) { - for (b = 0; b < NUM_BANDS; ++b) { - for (c = 0; c < NUM_CTX; ++c) { - for (p = 0; p < NUM_PROBAS; ++p) { - const int v = - VP8GetBit(br, CoeffsUpdateProba[t][b][c][p], "global-header") ? - VP8GetValue(br, 8, "global-header") : - CoeffsProba0[t][b][c][p]; - proba->bands_[t][b].probas_[c][p] = v; - } - } - } - for (b = 0; b < 16 + 1; ++b) { - proba->bands_ptr_[t][b] = &proba->bands_[t][kBands[b]]; - } - } - dec->use_skip_proba_ = VP8Get(br, "global-header"); - if (dec->use_skip_proba_) { - dec->skip_p_ = VP8GetValue(br, 8, "global-header"); - } -} diff --git a/Extended/libwebp/src/dec/vp8_dec.c b/Extended/libwebp/src/dec/vp8_dec.c deleted file mode 100644 index 57efb69..0000000 --- a/Extended/libwebp/src/dec/vp8_dec.c +++ /dev/null @@ -1,724 +0,0 @@ -// Copyright 2010 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// main entry for the decoder -// -// Author: Skal (pascal.massimino@gmail.com) - -#include - -#include "src/dec/alphai_dec.h" -#include "src/dec/vp8i_dec.h" -#include "src/dec/vp8li_dec.h" -#include "src/dec/webpi_dec.h" -#include "src/utils/bit_reader_inl_utils.h" -#include "src/utils/utils.h" - -//------------------------------------------------------------------------------ - -int WebPGetDecoderVersion(void) { - return (DEC_MAJ_VERSION << 16) | (DEC_MIN_VERSION << 8) | DEC_REV_VERSION; -} - -//------------------------------------------------------------------------------ -// Signature and pointer-to-function for GetCoeffs() variants below. - -typedef int (*GetCoeffsFunc)(VP8BitReader* const br, - const VP8BandProbas* const prob[], - int ctx, const quant_t dq, int n, int16_t* out); -static volatile GetCoeffsFunc GetCoeffs = NULL; - -static void InitGetCoeffs(void); - -//------------------------------------------------------------------------------ -// VP8Decoder - -static void SetOk(VP8Decoder* const dec) { - dec->status_ = VP8_STATUS_OK; - dec->error_msg_ = "OK"; -} - -int VP8InitIoInternal(VP8Io* const io, int version) { - if (WEBP_ABI_IS_INCOMPATIBLE(version, WEBP_DECODER_ABI_VERSION)) { - return 0; // mismatch error - } - if (io != NULL) { - memset(io, 0, sizeof(*io)); - } - return 1; -} - -VP8Decoder* VP8New(void) { - VP8Decoder* const dec = (VP8Decoder*)WebPSafeCalloc(1ULL, sizeof(*dec)); - if (dec != NULL) { - SetOk(dec); - WebPGetWorkerInterface()->Init(&dec->worker_); - dec->ready_ = 0; - dec->num_parts_minus_one_ = 0; - InitGetCoeffs(); - } - return dec; -} - -VP8StatusCode VP8Status(VP8Decoder* const dec) { - if (!dec) return VP8_STATUS_INVALID_PARAM; - return dec->status_; -} - -const char* VP8StatusMessage(VP8Decoder* const dec) { - if (dec == NULL) return "no object"; - if (!dec->error_msg_) return "OK"; - return dec->error_msg_; -} - -void VP8Delete(VP8Decoder* const dec) { - if (dec != NULL) { - VP8Clear(dec); - WebPSafeFree(dec); - } -} - -int VP8SetError(VP8Decoder* const dec, - VP8StatusCode error, const char* const msg) { - // The oldest error reported takes precedence over the new one. - if (dec->status_ == VP8_STATUS_OK) { - dec->status_ = error; - dec->error_msg_ = msg; - dec->ready_ = 0; - } - return 0; -} - -//------------------------------------------------------------------------------ - -int VP8CheckSignature(const uint8_t* const data, size_t data_size) { - return (data_size >= 3 && - data[0] == 0x9d && data[1] == 0x01 && data[2] == 0x2a); -} - -int VP8GetInfo(const uint8_t* data, size_t data_size, size_t chunk_size, - int* const width, int* const height) { - if (data == NULL || data_size < VP8_FRAME_HEADER_SIZE) { - return 0; // not enough data - } - // check signature - if (!VP8CheckSignature(data + 3, data_size - 3)) { - return 0; // Wrong signature. - } else { - const uint32_t bits = data[0] | (data[1] << 8) | (data[2] << 16); - const int key_frame = !(bits & 1); - const int w = ((data[7] << 8) | data[6]) & 0x3fff; - const int h = ((data[9] << 8) | data[8]) & 0x3fff; - - if (!key_frame) { // Not a keyframe. - return 0; - } - - if (((bits >> 1) & 7) > 3) { - return 0; // unknown profile - } - if (!((bits >> 4) & 1)) { - return 0; // first frame is invisible! - } - if (((bits >> 5)) >= chunk_size) { // partition_length - return 0; // inconsistent size information. - } - if (w == 0 || h == 0) { - return 0; // We don't support both width and height to be zero. - } - - if (width) { - *width = w; - } - if (height) { - *height = h; - } - - return 1; - } -} - -//------------------------------------------------------------------------------ -// Header parsing - -static void ResetSegmentHeader(VP8SegmentHeader* const hdr) { - assert(hdr != NULL); - hdr->use_segment_ = 0; - hdr->update_map_ = 0; - hdr->absolute_delta_ = 1; - memset(hdr->quantizer_, 0, sizeof(hdr->quantizer_)); - memset(hdr->filter_strength_, 0, sizeof(hdr->filter_strength_)); -} - -// Paragraph 9.3 -static int ParseSegmentHeader(VP8BitReader* br, - VP8SegmentHeader* hdr, VP8Proba* proba) { - assert(br != NULL); - assert(hdr != NULL); - hdr->use_segment_ = VP8Get(br, "global-header"); - if (hdr->use_segment_) { - hdr->update_map_ = VP8Get(br, "global-header"); - if (VP8Get(br, "global-header")) { // update data - int s; - hdr->absolute_delta_ = VP8Get(br, "global-header"); - for (s = 0; s < NUM_MB_SEGMENTS; ++s) { - hdr->quantizer_[s] = VP8Get(br, "global-header") ? - VP8GetSignedValue(br, 7, "global-header") : 0; - } - for (s = 0; s < NUM_MB_SEGMENTS; ++s) { - hdr->filter_strength_[s] = VP8Get(br, "global-header") ? - VP8GetSignedValue(br, 6, "global-header") : 0; - } - } - if (hdr->update_map_) { - int s; - for (s = 0; s < MB_FEATURE_TREE_PROBS; ++s) { - proba->segments_[s] = VP8Get(br, "global-header") ? - VP8GetValue(br, 8, "global-header") : 255u; - } - } - } else { - hdr->update_map_ = 0; - } - return !br->eof_; -} - -// Paragraph 9.5 -// This function returns VP8_STATUS_SUSPENDED if we don't have all the -// necessary data in 'buf'. -// This case is not necessarily an error (for incremental decoding). -// Still, no bitreader is ever initialized to make it possible to read -// unavailable memory. -// If we don't even have the partitions' sizes, than VP8_STATUS_NOT_ENOUGH_DATA -// is returned, and this is an unrecoverable error. -// If the partitions were positioned ok, VP8_STATUS_OK is returned. -static VP8StatusCode ParsePartitions(VP8Decoder* const dec, - const uint8_t* buf, size_t size) { - VP8BitReader* const br = &dec->br_; - const uint8_t* sz = buf; - const uint8_t* buf_end = buf + size; - const uint8_t* part_start; - size_t size_left = size; - size_t last_part; - size_t p; - - dec->num_parts_minus_one_ = (1 << VP8GetValue(br, 2, "global-header")) - 1; - last_part = dec->num_parts_minus_one_; - if (size < 3 * last_part) { - // we can't even read the sizes with sz[]! That's a failure. - return VP8_STATUS_NOT_ENOUGH_DATA; - } - part_start = buf + last_part * 3; - size_left -= last_part * 3; - for (p = 0; p < last_part; ++p) { - size_t psize = sz[0] | (sz[1] << 8) | (sz[2] << 16); - if (psize > size_left) psize = size_left; - VP8InitBitReader(dec->parts_ + p, part_start, psize); - part_start += psize; - size_left -= psize; - sz += 3; - } - VP8InitBitReader(dec->parts_ + last_part, part_start, size_left); - return (part_start < buf_end) ? VP8_STATUS_OK : - VP8_STATUS_SUSPENDED; // Init is ok, but there's not enough data -} - -// Paragraph 9.4 -static int ParseFilterHeader(VP8BitReader* br, VP8Decoder* const dec) { - VP8FilterHeader* const hdr = &dec->filter_hdr_; - hdr->simple_ = VP8Get(br, "global-header"); - hdr->level_ = VP8GetValue(br, 6, "global-header"); - hdr->sharpness_ = VP8GetValue(br, 3, "global-header"); - hdr->use_lf_delta_ = VP8Get(br, "global-header"); - if (hdr->use_lf_delta_) { - if (VP8Get(br, "global-header")) { // update lf-delta? - int i; - for (i = 0; i < NUM_REF_LF_DELTAS; ++i) { - if (VP8Get(br, "global-header")) { - hdr->ref_lf_delta_[i] = VP8GetSignedValue(br, 6, "global-header"); - } - } - for (i = 0; i < NUM_MODE_LF_DELTAS; ++i) { - if (VP8Get(br, "global-header")) { - hdr->mode_lf_delta_[i] = VP8GetSignedValue(br, 6, "global-header"); - } - } - } - } - dec->filter_type_ = (hdr->level_ == 0) ? 0 : hdr->simple_ ? 1 : 2; - return !br->eof_; -} - -// Topmost call -int VP8GetHeaders(VP8Decoder* const dec, VP8Io* const io) { - const uint8_t* buf; - size_t buf_size; - VP8FrameHeader* frm_hdr; - VP8PictureHeader* pic_hdr; - VP8BitReader* br; - VP8StatusCode status; - - if (dec == NULL) { - return 0; - } - SetOk(dec); - if (io == NULL) { - return VP8SetError(dec, VP8_STATUS_INVALID_PARAM, - "null VP8Io passed to VP8GetHeaders()"); - } - buf = io->data; - buf_size = io->data_size; - if (buf_size < 4) { - return VP8SetError(dec, VP8_STATUS_NOT_ENOUGH_DATA, - "Truncated header."); - } - - // Paragraph 9.1 - { - const uint32_t bits = buf[0] | (buf[1] << 8) | (buf[2] << 16); - frm_hdr = &dec->frm_hdr_; - frm_hdr->key_frame_ = !(bits & 1); - frm_hdr->profile_ = (bits >> 1) & 7; - frm_hdr->show_ = (bits >> 4) & 1; - frm_hdr->partition_length_ = (bits >> 5); - if (frm_hdr->profile_ > 3) { - return VP8SetError(dec, VP8_STATUS_BITSTREAM_ERROR, - "Incorrect keyframe parameters."); - } - if (!frm_hdr->show_) { - return VP8SetError(dec, VP8_STATUS_UNSUPPORTED_FEATURE, - "Frame not displayable."); - } - buf += 3; - buf_size -= 3; - } - - pic_hdr = &dec->pic_hdr_; - if (frm_hdr->key_frame_) { - // Paragraph 9.2 - if (buf_size < 7) { - return VP8SetError(dec, VP8_STATUS_NOT_ENOUGH_DATA, - "cannot parse picture header"); - } - if (!VP8CheckSignature(buf, buf_size)) { - return VP8SetError(dec, VP8_STATUS_BITSTREAM_ERROR, - "Bad code word"); - } - pic_hdr->width_ = ((buf[4] << 8) | buf[3]) & 0x3fff; - pic_hdr->xscale_ = buf[4] >> 6; // ratio: 1, 5/4 5/3 or 2 - pic_hdr->height_ = ((buf[6] << 8) | buf[5]) & 0x3fff; - pic_hdr->yscale_ = buf[6] >> 6; - buf += 7; - buf_size -= 7; - - dec->mb_w_ = (pic_hdr->width_ + 15) >> 4; - dec->mb_h_ = (pic_hdr->height_ + 15) >> 4; - - // Setup default output area (can be later modified during io->setup()) - io->width = pic_hdr->width_; - io->height = pic_hdr->height_; - // IMPORTANT! use some sane dimensions in crop_* and scaled_* fields. - // So they can be used interchangeably without always testing for - // 'use_cropping'. - io->use_cropping = 0; - io->crop_top = 0; - io->crop_left = 0; - io->crop_right = io->width; - io->crop_bottom = io->height; - io->use_scaling = 0; - io->scaled_width = io->width; - io->scaled_height = io->height; - - io->mb_w = io->width; // sanity check - io->mb_h = io->height; // ditto - - VP8ResetProba(&dec->proba_); - ResetSegmentHeader(&dec->segment_hdr_); - } - - // Check if we have all the partition #0 available, and initialize dec->br_ - // to read this partition (and this partition only). - if (frm_hdr->partition_length_ > buf_size) { - return VP8SetError(dec, VP8_STATUS_NOT_ENOUGH_DATA, - "bad partition length"); - } - - br = &dec->br_; - VP8InitBitReader(br, buf, frm_hdr->partition_length_); - buf += frm_hdr->partition_length_; - buf_size -= frm_hdr->partition_length_; - - if (frm_hdr->key_frame_) { - pic_hdr->colorspace_ = VP8Get(br, "global-header"); - pic_hdr->clamp_type_ = VP8Get(br, "global-header"); - } - if (!ParseSegmentHeader(br, &dec->segment_hdr_, &dec->proba_)) { - return VP8SetError(dec, VP8_STATUS_BITSTREAM_ERROR, - "cannot parse segment header"); - } - // Filter specs - if (!ParseFilterHeader(br, dec)) { - return VP8SetError(dec, VP8_STATUS_BITSTREAM_ERROR, - "cannot parse filter header"); - } - status = ParsePartitions(dec, buf, buf_size); - if (status != VP8_STATUS_OK) { - return VP8SetError(dec, status, "cannot parse partitions"); - } - - // quantizer change - VP8ParseQuant(dec); - - // Frame buffer marking - if (!frm_hdr->key_frame_) { - return VP8SetError(dec, VP8_STATUS_UNSUPPORTED_FEATURE, - "Not a key frame."); - } - - VP8Get(br, "global-header"); // ignore the value of update_proba_ - - VP8ParseProba(br, dec); - - // sanitized state - dec->ready_ = 1; - return 1; -} - -//------------------------------------------------------------------------------ -// Residual decoding (Paragraph 13.2 / 13.3) - -static const uint8_t kCat3[] = { 173, 148, 140, 0 }; -static const uint8_t kCat4[] = { 176, 155, 140, 135, 0 }; -static const uint8_t kCat5[] = { 180, 157, 141, 134, 130, 0 }; -static const uint8_t kCat6[] = - { 254, 254, 243, 230, 196, 177, 153, 140, 133, 130, 129, 0 }; -static const uint8_t* const kCat3456[] = { kCat3, kCat4, kCat5, kCat6 }; -static const uint8_t kZigzag[16] = { - 0, 1, 4, 8, 5, 2, 3, 6, 9, 12, 13, 10, 7, 11, 14, 15 -}; - -// See section 13-2: http://tools.ietf.org/html/rfc6386#section-13.2 -static int GetLargeValue(VP8BitReader* const br, const uint8_t* const p) { - int v; - if (!VP8GetBit(br, p[3], "coeffs")) { - if (!VP8GetBit(br, p[4], "coeffs")) { - v = 2; - } else { - v = 3 + VP8GetBit(br, p[5], "coeffs"); - } - } else { - if (!VP8GetBit(br, p[6], "coeffs")) { - if (!VP8GetBit(br, p[7], "coeffs")) { - v = 5 + VP8GetBit(br, 159, "coeffs"); - } else { - v = 7 + 2 * VP8GetBit(br, 165, "coeffs"); - v += VP8GetBit(br, 145, "coeffs"); - } - } else { - const uint8_t* tab; - const int bit1 = VP8GetBit(br, p[8], "coeffs"); - const int bit0 = VP8GetBit(br, p[9 + bit1], "coeffs"); - const int cat = 2 * bit1 + bit0; - v = 0; - for (tab = kCat3456[cat]; *tab; ++tab) { - v += v + VP8GetBit(br, *tab, "coeffs"); - } - v += 3 + (8 << cat); - } - } - return v; -} - -// Returns the position of the last non-zero coeff plus one -static int GetCoeffsFast(VP8BitReader* const br, - const VP8BandProbas* const prob[], - int ctx, const quant_t dq, int n, int16_t* out) { - const uint8_t* p = prob[n]->probas_[ctx]; - for (; n < 16; ++n) { - if (!VP8GetBit(br, p[0], "coeffs")) { - return n; // previous coeff was last non-zero coeff - } - while (!VP8GetBit(br, p[1], "coeffs")) { // sequence of zero coeffs - p = prob[++n]->probas_[0]; - if (n == 16) return 16; - } - { // non zero coeff - const VP8ProbaArray* const p_ctx = &prob[n + 1]->probas_[0]; - int v; - if (!VP8GetBit(br, p[2], "coeffs")) { - v = 1; - p = p_ctx[1]; - } else { - v = GetLargeValue(br, p); - p = p_ctx[2]; - } - out[kZigzag[n]] = VP8GetSigned(br, v, "coeffs") * dq[n > 0]; - } - } - return 16; -} - -// This version of GetCoeffs() uses VP8GetBitAlt() which is an alternate version -// of VP8GetBitAlt() targeting specific platforms. -static int GetCoeffsAlt(VP8BitReader* const br, - const VP8BandProbas* const prob[], - int ctx, const quant_t dq, int n, int16_t* out) { - const uint8_t* p = prob[n]->probas_[ctx]; - for (; n < 16; ++n) { - if (!VP8GetBitAlt(br, p[0], "coeffs")) { - return n; // previous coeff was last non-zero coeff - } - while (!VP8GetBitAlt(br, p[1], "coeffs")) { // sequence of zero coeffs - p = prob[++n]->probas_[0]; - if (n == 16) return 16; - } - { // non zero coeff - const VP8ProbaArray* const p_ctx = &prob[n + 1]->probas_[0]; - int v; - if (!VP8GetBitAlt(br, p[2], "coeffs")) { - v = 1; - p = p_ctx[1]; - } else { - v = GetLargeValue(br, p); - p = p_ctx[2]; - } - out[kZigzag[n]] = VP8GetSigned(br, v, "coeffs") * dq[n > 0]; - } - } - return 16; -} - -static WEBP_TSAN_IGNORE_FUNCTION void InitGetCoeffs(void) { - if (GetCoeffs == NULL) { - if (VP8GetCPUInfo != NULL && VP8GetCPUInfo(kSlowSSSE3)) { - GetCoeffs = GetCoeffsAlt; - } else { - GetCoeffs = GetCoeffsFast; - } - } -} - -static WEBP_INLINE uint32_t NzCodeBits(uint32_t nz_coeffs, int nz, int dc_nz) { - nz_coeffs <<= 2; - nz_coeffs |= (nz > 3) ? 3 : (nz > 1) ? 2 : dc_nz; - return nz_coeffs; -} - -static int ParseResiduals(VP8Decoder* const dec, - VP8MB* const mb, VP8BitReader* const token_br) { - const VP8BandProbas* (* const bands)[16 + 1] = dec->proba_.bands_ptr_; - const VP8BandProbas* const * ac_proba; - VP8MBData* const block = dec->mb_data_ + dec->mb_x_; - const VP8QuantMatrix* const q = &dec->dqm_[block->segment_]; - int16_t* dst = block->coeffs_; - VP8MB* const left_mb = dec->mb_info_ - 1; - uint8_t tnz, lnz; - uint32_t non_zero_y = 0; - uint32_t non_zero_uv = 0; - int x, y, ch; - uint32_t out_t_nz, out_l_nz; - int first; - - memset(dst, 0, 384 * sizeof(*dst)); - if (!block->is_i4x4_) { // parse DC - int16_t dc[16] = { 0 }; - const int ctx = mb->nz_dc_ + left_mb->nz_dc_; - const int nz = GetCoeffs(token_br, bands[1], ctx, q->y2_mat_, 0, dc); - mb->nz_dc_ = left_mb->nz_dc_ = (nz > 0); - if (nz > 1) { // more than just the DC -> perform the full transform - VP8TransformWHT(dc, dst); - } else { // only DC is non-zero -> inlined simplified transform - int i; - const int dc0 = (dc[0] + 3) >> 3; - for (i = 0; i < 16 * 16; i += 16) dst[i] = dc0; - } - first = 1; - ac_proba = bands[0]; - } else { - first = 0; - ac_proba = bands[3]; - } - - tnz = mb->nz_ & 0x0f; - lnz = left_mb->nz_ & 0x0f; - for (y = 0; y < 4; ++y) { - int l = lnz & 1; - uint32_t nz_coeffs = 0; - for (x = 0; x < 4; ++x) { - const int ctx = l + (tnz & 1); - const int nz = GetCoeffs(token_br, ac_proba, ctx, q->y1_mat_, first, dst); - l = (nz > first); - tnz = (tnz >> 1) | (l << 7); - nz_coeffs = NzCodeBits(nz_coeffs, nz, dst[0] != 0); - dst += 16; - } - tnz >>= 4; - lnz = (lnz >> 1) | (l << 7); - non_zero_y = (non_zero_y << 8) | nz_coeffs; - } - out_t_nz = tnz; - out_l_nz = lnz >> 4; - - for (ch = 0; ch < 4; ch += 2) { - uint32_t nz_coeffs = 0; - tnz = mb->nz_ >> (4 + ch); - lnz = left_mb->nz_ >> (4 + ch); - for (y = 0; y < 2; ++y) { - int l = lnz & 1; - for (x = 0; x < 2; ++x) { - const int ctx = l + (tnz & 1); - const int nz = GetCoeffs(token_br, bands[2], ctx, q->uv_mat_, 0, dst); - l = (nz > 0); - tnz = (tnz >> 1) | (l << 3); - nz_coeffs = NzCodeBits(nz_coeffs, nz, dst[0] != 0); - dst += 16; - } - tnz >>= 2; - lnz = (lnz >> 1) | (l << 5); - } - // Note: we don't really need the per-4x4 details for U/V blocks. - non_zero_uv |= nz_coeffs << (4 * ch); - out_t_nz |= (tnz << 4) << ch; - out_l_nz |= (lnz & 0xf0) << ch; - } - mb->nz_ = out_t_nz; - left_mb->nz_ = out_l_nz; - - block->non_zero_y_ = non_zero_y; - block->non_zero_uv_ = non_zero_uv; - - // We look at the mode-code of each block and check if some blocks have less - // than three non-zero coeffs (code < 2). This is to avoid dithering flat and - // empty blocks. - block->dither_ = (non_zero_uv & 0xaaaa) ? 0 : q->dither_; - - return !(non_zero_y | non_zero_uv); // will be used for further optimization -} - -//------------------------------------------------------------------------------ -// Main loop - -int VP8DecodeMB(VP8Decoder* const dec, VP8BitReader* const token_br) { - VP8MB* const left = dec->mb_info_ - 1; - VP8MB* const mb = dec->mb_info_ + dec->mb_x_; - VP8MBData* const block = dec->mb_data_ + dec->mb_x_; - int skip = dec->use_skip_proba_ ? block->skip_ : 0; - - if (!skip) { - skip = ParseResiduals(dec, mb, token_br); - } else { - left->nz_ = mb->nz_ = 0; - if (!block->is_i4x4_) { - left->nz_dc_ = mb->nz_dc_ = 0; - } - block->non_zero_y_ = 0; - block->non_zero_uv_ = 0; - block->dither_ = 0; - } - - if (dec->filter_type_ > 0) { // store filter info - VP8FInfo* const finfo = dec->f_info_ + dec->mb_x_; - *finfo = dec->fstrengths_[block->segment_][block->is_i4x4_]; - finfo->f_inner_ |= !skip; - } - - return !token_br->eof_; -} - -void VP8InitScanline(VP8Decoder* const dec) { - VP8MB* const left = dec->mb_info_ - 1; - left->nz_ = 0; - left->nz_dc_ = 0; - memset(dec->intra_l_, B_DC_PRED, sizeof(dec->intra_l_)); - dec->mb_x_ = 0; -} - -static int ParseFrame(VP8Decoder* const dec, VP8Io* io) { - for (dec->mb_y_ = 0; dec->mb_y_ < dec->br_mb_y_; ++dec->mb_y_) { - // Parse bitstream for this row. - VP8BitReader* const token_br = - &dec->parts_[dec->mb_y_ & dec->num_parts_minus_one_]; - if (!VP8ParseIntraModeRow(&dec->br_, dec)) { - return VP8SetError(dec, VP8_STATUS_NOT_ENOUGH_DATA, - "Premature end-of-partition0 encountered."); - } - for (; dec->mb_x_ < dec->mb_w_; ++dec->mb_x_) { - if (!VP8DecodeMB(dec, token_br)) { - return VP8SetError(dec, VP8_STATUS_NOT_ENOUGH_DATA, - "Premature end-of-file encountered."); - } - } - VP8InitScanline(dec); // Prepare for next scanline - - // Reconstruct, filter and emit the row. - if (!VP8ProcessRow(dec, io)) { - return VP8SetError(dec, VP8_STATUS_USER_ABORT, "Output aborted."); - } - } - if (dec->mt_method_ > 0) { - if (!WebPGetWorkerInterface()->Sync(&dec->worker_)) return 0; - } - - return 1; -} - -// Main entry point -int VP8Decode(VP8Decoder* const dec, VP8Io* const io) { - int ok = 0; - if (dec == NULL) { - return 0; - } - if (io == NULL) { - return VP8SetError(dec, VP8_STATUS_INVALID_PARAM, - "NULL VP8Io parameter in VP8Decode()."); - } - - if (!dec->ready_) { - if (!VP8GetHeaders(dec, io)) { - return 0; - } - } - assert(dec->ready_); - - // Finish setting up the decoding parameter. Will call io->setup(). - ok = (VP8EnterCritical(dec, io) == VP8_STATUS_OK); - if (ok) { // good to go. - // Will allocate memory and prepare everything. - if (ok) ok = VP8InitFrame(dec, io); - - // Main decoding loop - if (ok) ok = ParseFrame(dec, io); - - // Exit. - ok &= VP8ExitCritical(dec, io); - } - - if (!ok) { - VP8Clear(dec); - return 0; - } - - dec->ready_ = 0; - return ok; -} - -void VP8Clear(VP8Decoder* const dec) { - if (dec == NULL) { - return; - } - WebPGetWorkerInterface()->End(&dec->worker_); - WebPDeallocateAlphaMemory(dec); - WebPSafeFree(dec->mem_); - dec->mem_ = NULL; - dec->mem_size_ = 0; - memset(&dec->br_, 0, sizeof(dec->br_)); - dec->ready_ = 0; -} - -//------------------------------------------------------------------------------ diff --git a/Extended/libwebp/src/dec/vp8_dec.h b/Extended/libwebp/src/dec/vp8_dec.h deleted file mode 100644 index a05405d..0000000 --- a/Extended/libwebp/src/dec/vp8_dec.h +++ /dev/null @@ -1,185 +0,0 @@ -// Copyright 2010 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Low-level API for VP8 decoder -// -// Author: Skal (pascal.massimino@gmail.com) - -#ifndef WEBP_DEC_VP8_DEC_H_ -#define WEBP_DEC_VP8_DEC_H_ - -#include "src/webp/decode.h" - -#ifdef __cplusplus -extern "C" { -#endif - -//------------------------------------------------------------------------------ -// Lower-level API -// -// These functions provide fine-grained control of the decoding process. -// The call flow should resemble: -// -// VP8Io io; -// VP8InitIo(&io); -// io.data = data; -// io.data_size = size; -// /* customize io's functions (setup()/put()/teardown()) if needed. */ -// -// VP8Decoder* dec = VP8New(); -// int ok = VP8Decode(dec, &io); -// if (!ok) printf("Error: %s\n", VP8StatusMessage(dec)); -// VP8Delete(dec); -// return ok; - -// Input / Output -typedef struct VP8Io VP8Io; -typedef int (*VP8IoPutHook)(const VP8Io* io); -typedef int (*VP8IoSetupHook)(VP8Io* io); -typedef void (*VP8IoTeardownHook)(const VP8Io* io); - -struct VP8Io { - // set by VP8GetHeaders() - int width, height; // picture dimensions, in pixels (invariable). - // These are the original, uncropped dimensions. - // The actual area passed to put() is stored - // in mb_w / mb_h fields. - - // set before calling put() - int mb_y; // position of the current rows (in pixels) - int mb_w; // number of columns in the sample - int mb_h; // number of rows in the sample - const uint8_t* y, *u, *v; // rows to copy (in yuv420 format) - int y_stride; // row stride for luma - int uv_stride; // row stride for chroma - - void* opaque; // user data - - // called when fresh samples are available. Currently, samples are in - // YUV420 format, and can be up to width x 24 in size (depending on the - // in-loop filtering level, e.g.). Should return false in case of error - // or abort request. The actual size of the area to update is mb_w x mb_h - // in size, taking cropping into account. - VP8IoPutHook put; - - // called just before starting to decode the blocks. - // Must return false in case of setup error, true otherwise. If false is - // returned, teardown() will NOT be called. But if the setup succeeded - // and true is returned, then teardown() will always be called afterward. - VP8IoSetupHook setup; - - // Called just after block decoding is finished (or when an error occurred - // during put()). Is NOT called if setup() failed. - VP8IoTeardownHook teardown; - - // this is a recommendation for the user-side yuv->rgb converter. This flag - // is set when calling setup() hook and can be overwritten by it. It then - // can be taken into consideration during the put() method. - int fancy_upsampling; - - // Input buffer. - size_t data_size; - const uint8_t* data; - - // If true, in-loop filtering will not be performed even if present in the - // bitstream. Switching off filtering may speed up decoding at the expense - // of more visible blocking. Note that output will also be non-compliant - // with the VP8 specifications. - int bypass_filtering; - - // Cropping parameters. - int use_cropping; - int crop_left, crop_right, crop_top, crop_bottom; - - // Scaling parameters. - int use_scaling; - int scaled_width, scaled_height; - - // If non NULL, pointer to the alpha data (if present) corresponding to the - // start of the current row (That is: it is pre-offset by mb_y and takes - // cropping into account). - const uint8_t* a; -}; - -// Internal, version-checked, entry point -int VP8InitIoInternal(VP8Io* const, int); - -// Set the custom IO function pointers and user-data. The setter for IO hooks -// should be called before initiating incremental decoding. Returns true if -// WebPIDecoder object is successfully modified, false otherwise. -int WebPISetIOHooks(WebPIDecoder* const idec, - VP8IoPutHook put, - VP8IoSetupHook setup, - VP8IoTeardownHook teardown, - void* user_data); - -// Main decoding object. This is an opaque structure. -typedef struct VP8Decoder VP8Decoder; - -// Create a new decoder object. -VP8Decoder* VP8New(void); - -// Must be called to make sure 'io' is initialized properly. -// Returns false in case of version mismatch. Upon such failure, no other -// decoding function should be called (VP8Decode, VP8GetHeaders, ...) -static WEBP_INLINE int VP8InitIo(VP8Io* const io) { - return VP8InitIoInternal(io, WEBP_DECODER_ABI_VERSION); -} - -// Decode the VP8 frame header. Returns true if ok. -// Note: 'io->data' must be pointing to the start of the VP8 frame header. -int VP8GetHeaders(VP8Decoder* const dec, VP8Io* const io); - -// Decode a picture. Will call VP8GetHeaders() if it wasn't done already. -// Returns false in case of error. -int VP8Decode(VP8Decoder* const dec, VP8Io* const io); - -// Return current status of the decoder: -VP8StatusCode VP8Status(VP8Decoder* const dec); - -// return readable string corresponding to the last status. -const char* VP8StatusMessage(VP8Decoder* const dec); - -// Resets the decoder in its initial state, reclaiming memory. -// Not a mandatory call between calls to VP8Decode(). -void VP8Clear(VP8Decoder* const dec); - -// Destroy the decoder object. -void VP8Delete(VP8Decoder* const dec); - -//------------------------------------------------------------------------------ -// Miscellaneous VP8/VP8L bitstream probing functions. - -// Returns true if the next 3 bytes in data contain the VP8 signature. -WEBP_EXTERN int VP8CheckSignature(const uint8_t* const data, size_t data_size); - -// Validates the VP8 data-header and retrieves basic header information viz -// width and height. Returns 0 in case of formatting error. *width/*height -// can be passed NULL. -WEBP_EXTERN int VP8GetInfo( - const uint8_t* data, - size_t data_size, // data available so far - size_t chunk_size, // total data size expected in the chunk - int* const width, int* const height); - -// Returns true if the next byte(s) in data is a VP8L signature. -WEBP_EXTERN int VP8LCheckSignature(const uint8_t* const data, size_t size); - -// Validates the VP8L data-header and retrieves basic header information viz -// width, height and alpha. Returns 0 in case of formatting error. -// width/height/has_alpha can be passed NULL. -WEBP_EXTERN int VP8LGetInfo( - const uint8_t* data, size_t data_size, // data available so far - int* const width, int* const height, int* const has_alpha); - -#ifdef __cplusplus -} // extern "C" -#endif - -#endif // WEBP_DEC_VP8_DEC_H_ diff --git a/Extended/libwebp/src/dec/vp8i_dec.h b/Extended/libwebp/src/dec/vp8i_dec.h deleted file mode 100644 index 600a684..0000000 --- a/Extended/libwebp/src/dec/vp8i_dec.h +++ /dev/null @@ -1,319 +0,0 @@ -// Copyright 2010 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// VP8 decoder: internal header. -// -// Author: Skal (pascal.massimino@gmail.com) - -#ifndef WEBP_DEC_VP8I_DEC_H_ -#define WEBP_DEC_VP8I_DEC_H_ - -#include // for memcpy() -#include "src/dec/common_dec.h" -#include "src/dec/vp8li_dec.h" -#include "src/utils/bit_reader_utils.h" -#include "src/utils/random_utils.h" -#include "src/utils/thread_utils.h" -#include "src/dsp/dsp.h" - -#ifdef __cplusplus -extern "C" { -#endif - -//------------------------------------------------------------------------------ -// Various defines and enums - -// version numbers -#define DEC_MAJ_VERSION 1 -#define DEC_MIN_VERSION 1 -#define DEC_REV_VERSION 0 - -// YUV-cache parameters. Cache is 32-bytes wide (= one cacheline). -// Constraints are: We need to store one 16x16 block of luma samples (y), -// and two 8x8 chroma blocks (u/v). These are better be 16-bytes aligned, -// in order to be SIMD-friendly. We also need to store the top, left and -// top-left samples (from previously decoded blocks), along with four -// extra top-right samples for luma (intra4x4 prediction only). -// One possible layout is, using 32 * (17 + 9) bytes: -// -// .+------ <- only 1 pixel high -// .|yyyyt. -// .|yyyyt. -// .|yyyyt. -// .|yyyy.. -// .+--.+-- <- only 1 pixel high -// .|uu.|vv -// .|uu.|vv -// -// Every character is a 4x4 block, with legend: -// '.' = unused -// 'y' = y-samples 'u' = u-samples 'v' = u-samples -// '|' = left sample, '-' = top sample, '+' = top-left sample -// 't' = extra top-right sample for 4x4 modes -#define YUV_SIZE (BPS * 17 + BPS * 9) -#define Y_OFF (BPS * 1 + 8) -#define U_OFF (Y_OFF + BPS * 16 + BPS) -#define V_OFF (U_OFF + 16) - -// minimal width under which lossy multi-threading is always disabled -#define MIN_WIDTH_FOR_THREADS 512 - -//------------------------------------------------------------------------------ -// Headers - -typedef struct { - uint8_t key_frame_; - uint8_t profile_; - uint8_t show_; - uint32_t partition_length_; -} VP8FrameHeader; - -typedef struct { - uint16_t width_; - uint16_t height_; - uint8_t xscale_; - uint8_t yscale_; - uint8_t colorspace_; // 0 = YCbCr - uint8_t clamp_type_; -} VP8PictureHeader; - -// segment features -typedef struct { - int use_segment_; - int update_map_; // whether to update the segment map or not - int absolute_delta_; // absolute or delta values for quantizer and filter - int8_t quantizer_[NUM_MB_SEGMENTS]; // quantization changes - int8_t filter_strength_[NUM_MB_SEGMENTS]; // filter strength for segments -} VP8SegmentHeader; - -// probas associated to one of the contexts -typedef uint8_t VP8ProbaArray[NUM_PROBAS]; - -typedef struct { // all the probas associated to one band - VP8ProbaArray probas_[NUM_CTX]; -} VP8BandProbas; - -// Struct collecting all frame-persistent probabilities. -typedef struct { - uint8_t segments_[MB_FEATURE_TREE_PROBS]; - // Type: 0:Intra16-AC 1:Intra16-DC 2:Chroma 3:Intra4 - VP8BandProbas bands_[NUM_TYPES][NUM_BANDS]; - const VP8BandProbas* bands_ptr_[NUM_TYPES][16 + 1]; -} VP8Proba; - -// Filter parameters -typedef struct { - int simple_; // 0=complex, 1=simple - int level_; // [0..63] - int sharpness_; // [0..7] - int use_lf_delta_; - int ref_lf_delta_[NUM_REF_LF_DELTAS]; - int mode_lf_delta_[NUM_MODE_LF_DELTAS]; -} VP8FilterHeader; - -//------------------------------------------------------------------------------ -// Informations about the macroblocks. - -typedef struct { // filter specs - uint8_t f_limit_; // filter limit in [3..189], or 0 if no filtering - uint8_t f_ilevel_; // inner limit in [1..63] - uint8_t f_inner_; // do inner filtering? - uint8_t hev_thresh_; // high edge variance threshold in [0..2] -} VP8FInfo; - -typedef struct { // Top/Left Contexts used for syntax-parsing - uint8_t nz_; // non-zero AC/DC coeffs (4bit for luma + 4bit for chroma) - uint8_t nz_dc_; // non-zero DC coeff (1bit) -} VP8MB; - -// Dequantization matrices -typedef int quant_t[2]; // [DC / AC]. Can be 'uint16_t[2]' too (~slower). -typedef struct { - quant_t y1_mat_, y2_mat_, uv_mat_; - - int uv_quant_; // U/V quantizer value - int dither_; // dithering amplitude (0 = off, max=255) -} VP8QuantMatrix; - -// Data needed to reconstruct a macroblock -typedef struct { - int16_t coeffs_[384]; // 384 coeffs = (16+4+4) * 4*4 - uint8_t is_i4x4_; // true if intra4x4 - uint8_t imodes_[16]; // one 16x16 mode (#0) or sixteen 4x4 modes - uint8_t uvmode_; // chroma prediction mode - // bit-wise info about the content of each sub-4x4 blocks (in decoding order). - // Each of the 4x4 blocks for y/u/v is associated with a 2b code according to: - // code=0 -> no coefficient - // code=1 -> only DC - // code=2 -> first three coefficients are non-zero - // code=3 -> more than three coefficients are non-zero - // This allows to call specialized transform functions. - uint32_t non_zero_y_; - uint32_t non_zero_uv_; - uint8_t dither_; // local dithering strength (deduced from non_zero_*) - uint8_t skip_; - uint8_t segment_; -} VP8MBData; - -// Persistent information needed by the parallel processing -typedef struct { - int id_; // cache row to process (in [0..2]) - int mb_y_; // macroblock position of the row - int filter_row_; // true if row-filtering is needed - VP8FInfo* f_info_; // filter strengths (swapped with dec->f_info_) - VP8MBData* mb_data_; // reconstruction data (swapped with dec->mb_data_) - VP8Io io_; // copy of the VP8Io to pass to put() -} VP8ThreadContext; - -// Saved top samples, per macroblock. Fits into a cache-line. -typedef struct { - uint8_t y[16], u[8], v[8]; -} VP8TopSamples; - -//------------------------------------------------------------------------------ -// VP8Decoder: the main opaque structure handed over to user - -struct VP8Decoder { - VP8StatusCode status_; - int ready_; // true if ready to decode a picture with VP8Decode() - const char* error_msg_; // set when status_ is not OK. - - // Main data source - VP8BitReader br_; - - // headers - VP8FrameHeader frm_hdr_; - VP8PictureHeader pic_hdr_; - VP8FilterHeader filter_hdr_; - VP8SegmentHeader segment_hdr_; - - // Worker - WebPWorker worker_; - int mt_method_; // multi-thread method: 0=off, 1=[parse+recon][filter] - // 2=[parse][recon+filter] - int cache_id_; // current cache row - int num_caches_; // number of cached rows of 16 pixels (1, 2 or 3) - VP8ThreadContext thread_ctx_; // Thread context - - // dimension, in macroblock units. - int mb_w_, mb_h_; - - // Macroblock to process/filter, depending on cropping and filter_type. - int tl_mb_x_, tl_mb_y_; // top-left MB that must be in-loop filtered - int br_mb_x_, br_mb_y_; // last bottom-right MB that must be decoded - - // number of partitions minus one. - uint32_t num_parts_minus_one_; - // per-partition boolean decoders. - VP8BitReader parts_[MAX_NUM_PARTITIONS]; - - // Dithering strength, deduced from decoding options - int dither_; // whether to use dithering or not - VP8Random dithering_rg_; // random generator for dithering - - // dequantization (one set of DC/AC dequant factor per segment) - VP8QuantMatrix dqm_[NUM_MB_SEGMENTS]; - - // probabilities - VP8Proba proba_; - int use_skip_proba_; - uint8_t skip_p_; - - // Boundary data cache and persistent buffers. - uint8_t* intra_t_; // top intra modes values: 4 * mb_w_ - uint8_t intra_l_[4]; // left intra modes values - - VP8TopSamples* yuv_t_; // top y/u/v samples - - VP8MB* mb_info_; // contextual macroblock info (mb_w_ + 1) - VP8FInfo* f_info_; // filter strength info - uint8_t* yuv_b_; // main block for Y/U/V (size = YUV_SIZE) - - uint8_t* cache_y_; // macroblock row for storing unfiltered samples - uint8_t* cache_u_; - uint8_t* cache_v_; - int cache_y_stride_; - int cache_uv_stride_; - - // main memory chunk for the above data. Persistent. - void* mem_; - size_t mem_size_; - - // Per macroblock non-persistent infos. - int mb_x_, mb_y_; // current position, in macroblock units - VP8MBData* mb_data_; // parsed reconstruction data - - // Filtering side-info - int filter_type_; // 0=off, 1=simple, 2=complex - VP8FInfo fstrengths_[NUM_MB_SEGMENTS][2]; // precalculated per-segment/type - - // Alpha - struct ALPHDecoder* alph_dec_; // alpha-plane decoder object - const uint8_t* alpha_data_; // compressed alpha data (if present) - size_t alpha_data_size_; - int is_alpha_decoded_; // true if alpha_data_ is decoded in alpha_plane_ - uint8_t* alpha_plane_mem_; // memory allocated for alpha_plane_ - uint8_t* alpha_plane_; // output. Persistent, contains the whole data. - const uint8_t* alpha_prev_line_; // last decoded alpha row (or NULL) - int alpha_dithering_; // derived from decoding options (0=off, 100=full) -}; - -//------------------------------------------------------------------------------ -// internal functions. Not public. - -// in vp8.c -int VP8SetError(VP8Decoder* const dec, - VP8StatusCode error, const char* const msg); - -// in tree.c -void VP8ResetProba(VP8Proba* const proba); -void VP8ParseProba(VP8BitReader* const br, VP8Decoder* const dec); -// parses one row of intra mode data in partition 0, returns !eof -int VP8ParseIntraModeRow(VP8BitReader* const br, VP8Decoder* const dec); - -// in quant.c -void VP8ParseQuant(VP8Decoder* const dec); - -// in frame.c -int VP8InitFrame(VP8Decoder* const dec, VP8Io* const io); -// Call io->setup() and finish setting up scan parameters. -// After this call returns, one must always call VP8ExitCritical() with the -// same parameters. Both functions should be used in pair. Returns VP8_STATUS_OK -// if ok, otherwise sets and returns the error status on *dec. -VP8StatusCode VP8EnterCritical(VP8Decoder* const dec, VP8Io* const io); -// Must always be called in pair with VP8EnterCritical(). -// Returns false in case of error. -int VP8ExitCritical(VP8Decoder* const dec, VP8Io* const io); -// Return the multi-threading method to use (0=off), depending -// on options and bitstream size. Only for lossy decoding. -int VP8GetThreadMethod(const WebPDecoderOptions* const options, - const WebPHeaderStructure* const headers, - int width, int height); -// Initialize dithering post-process if needed. -void VP8InitDithering(const WebPDecoderOptions* const options, - VP8Decoder* const dec); -// Process the last decoded row (filtering + output). -int VP8ProcessRow(VP8Decoder* const dec, VP8Io* const io); -// To be called at the start of a new scanline, to initialize predictors. -void VP8InitScanline(VP8Decoder* const dec); -// Decode one macroblock. Returns false if there is not enough data. -int VP8DecodeMB(VP8Decoder* const dec, VP8BitReader* const token_br); - -// in alpha.c -const uint8_t* VP8DecompressAlphaRows(VP8Decoder* const dec, - const VP8Io* const io, - int row, int num_rows); - -//------------------------------------------------------------------------------ - -#ifdef __cplusplus -} // extern "C" -#endif - -#endif // WEBP_DEC_VP8I_DEC_H_ diff --git a/Extended/libwebp/src/dec/vp8l_dec.c b/Extended/libwebp/src/dec/vp8l_dec.c deleted file mode 100644 index 93615d4..0000000 --- a/Extended/libwebp/src/dec/vp8l_dec.c +++ /dev/null @@ -1,1739 +0,0 @@ -// Copyright 2012 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// main entry for the decoder -// -// Authors: Vikas Arora (vikaas.arora@gmail.com) -// Jyrki Alakuijala (jyrki@google.com) - -#include - -#include "src/dec/alphai_dec.h" -#include "src/dec/vp8li_dec.h" -#include "src/dsp/dsp.h" -#include "src/dsp/lossless.h" -#include "src/dsp/lossless_common.h" -#include "src/dsp/yuv.h" -#include "src/utils/endian_inl_utils.h" -#include "src/utils/huffman_utils.h" -#include "src/utils/utils.h" - -#define NUM_ARGB_CACHE_ROWS 16 - -static const int kCodeLengthLiterals = 16; -static const int kCodeLengthRepeatCode = 16; -static const uint8_t kCodeLengthExtraBits[3] = { 2, 3, 7 }; -static const uint8_t kCodeLengthRepeatOffsets[3] = { 3, 3, 11 }; - -// ----------------------------------------------------------------------------- -// Five Huffman codes are used at each meta code: -// 1. green + length prefix codes + color cache codes, -// 2. alpha, -// 3. red, -// 4. blue, and, -// 5. distance prefix codes. -typedef enum { - GREEN = 0, - RED = 1, - BLUE = 2, - ALPHA = 3, - DIST = 4 -} HuffIndex; - -static const uint16_t kAlphabetSize[HUFFMAN_CODES_PER_META_CODE] = { - NUM_LITERAL_CODES + NUM_LENGTH_CODES, - NUM_LITERAL_CODES, NUM_LITERAL_CODES, NUM_LITERAL_CODES, - NUM_DISTANCE_CODES -}; - -static const uint8_t kLiteralMap[HUFFMAN_CODES_PER_META_CODE] = { - 0, 1, 1, 1, 0 -}; - -#define NUM_CODE_LENGTH_CODES 19 -static const uint8_t kCodeLengthCodeOrder[NUM_CODE_LENGTH_CODES] = { - 17, 18, 0, 1, 2, 3, 4, 5, 16, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 -}; - -#define CODE_TO_PLANE_CODES 120 -static const uint8_t kCodeToPlane[CODE_TO_PLANE_CODES] = { - 0x18, 0x07, 0x17, 0x19, 0x28, 0x06, 0x27, 0x29, 0x16, 0x1a, - 0x26, 0x2a, 0x38, 0x05, 0x37, 0x39, 0x15, 0x1b, 0x36, 0x3a, - 0x25, 0x2b, 0x48, 0x04, 0x47, 0x49, 0x14, 0x1c, 0x35, 0x3b, - 0x46, 0x4a, 0x24, 0x2c, 0x58, 0x45, 0x4b, 0x34, 0x3c, 0x03, - 0x57, 0x59, 0x13, 0x1d, 0x56, 0x5a, 0x23, 0x2d, 0x44, 0x4c, - 0x55, 0x5b, 0x33, 0x3d, 0x68, 0x02, 0x67, 0x69, 0x12, 0x1e, - 0x66, 0x6a, 0x22, 0x2e, 0x54, 0x5c, 0x43, 0x4d, 0x65, 0x6b, - 0x32, 0x3e, 0x78, 0x01, 0x77, 0x79, 0x53, 0x5d, 0x11, 0x1f, - 0x64, 0x6c, 0x42, 0x4e, 0x76, 0x7a, 0x21, 0x2f, 0x75, 0x7b, - 0x31, 0x3f, 0x63, 0x6d, 0x52, 0x5e, 0x00, 0x74, 0x7c, 0x41, - 0x4f, 0x10, 0x20, 0x62, 0x6e, 0x30, 0x73, 0x7d, 0x51, 0x5f, - 0x40, 0x72, 0x7e, 0x61, 0x6f, 0x50, 0x71, 0x7f, 0x60, 0x70 -}; - -// Memory needed for lookup tables of one Huffman tree group. Red, blue, alpha -// and distance alphabets are constant (256 for red, blue and alpha, 40 for -// distance) and lookup table sizes for them in worst case are 630 and 410 -// respectively. Size of green alphabet depends on color cache size and is equal -// to 256 (green component values) + 24 (length prefix values) -// + color_cache_size (between 0 and 2048). -// All values computed for 8-bit first level lookup with Mark Adler's tool: -// http://www.hdfgroup.org/ftp/lib-external/zlib/zlib-1.2.5/examples/enough.c -#define FIXED_TABLE_SIZE (630 * 3 + 410) -static const uint16_t kTableSize[12] = { - FIXED_TABLE_SIZE + 654, - FIXED_TABLE_SIZE + 656, - FIXED_TABLE_SIZE + 658, - FIXED_TABLE_SIZE + 662, - FIXED_TABLE_SIZE + 670, - FIXED_TABLE_SIZE + 686, - FIXED_TABLE_SIZE + 718, - FIXED_TABLE_SIZE + 782, - FIXED_TABLE_SIZE + 912, - FIXED_TABLE_SIZE + 1168, - FIXED_TABLE_SIZE + 1680, - FIXED_TABLE_SIZE + 2704 -}; - -static int DecodeImageStream(int xsize, int ysize, - int is_level0, - VP8LDecoder* const dec, - uint32_t** const decoded_data); - -//------------------------------------------------------------------------------ - -int VP8LCheckSignature(const uint8_t* const data, size_t size) { - return (size >= VP8L_FRAME_HEADER_SIZE && - data[0] == VP8L_MAGIC_BYTE && - (data[4] >> 5) == 0); // version -} - -static int ReadImageInfo(VP8LBitReader* const br, - int* const width, int* const height, - int* const has_alpha) { - if (VP8LReadBits(br, 8) != VP8L_MAGIC_BYTE) return 0; - *width = VP8LReadBits(br, VP8L_IMAGE_SIZE_BITS) + 1; - *height = VP8LReadBits(br, VP8L_IMAGE_SIZE_BITS) + 1; - *has_alpha = VP8LReadBits(br, 1); - if (VP8LReadBits(br, VP8L_VERSION_BITS) != 0) return 0; - return !br->eos_; -} - -int VP8LGetInfo(const uint8_t* data, size_t data_size, - int* const width, int* const height, int* const has_alpha) { - if (data == NULL || data_size < VP8L_FRAME_HEADER_SIZE) { - return 0; // not enough data - } else if (!VP8LCheckSignature(data, data_size)) { - return 0; // bad signature - } else { - int w, h, a; - VP8LBitReader br; - VP8LInitBitReader(&br, data, data_size); - if (!ReadImageInfo(&br, &w, &h, &a)) { - return 0; - } - if (width != NULL) *width = w; - if (height != NULL) *height = h; - if (has_alpha != NULL) *has_alpha = a; - return 1; - } -} - -//------------------------------------------------------------------------------ - -static WEBP_INLINE int GetCopyDistance(int distance_symbol, - VP8LBitReader* const br) { - int extra_bits, offset; - if (distance_symbol < 4) { - return distance_symbol + 1; - } - extra_bits = (distance_symbol - 2) >> 1; - offset = (2 + (distance_symbol & 1)) << extra_bits; - return offset + VP8LReadBits(br, extra_bits) + 1; -} - -static WEBP_INLINE int GetCopyLength(int length_symbol, - VP8LBitReader* const br) { - // Length and distance prefixes are encoded the same way. - return GetCopyDistance(length_symbol, br); -} - -static WEBP_INLINE int PlaneCodeToDistance(int xsize, int plane_code) { - if (plane_code > CODE_TO_PLANE_CODES) { - return plane_code - CODE_TO_PLANE_CODES; - } else { - const int dist_code = kCodeToPlane[plane_code - 1]; - const int yoffset = dist_code >> 4; - const int xoffset = 8 - (dist_code & 0xf); - const int dist = yoffset * xsize + xoffset; - return (dist >= 1) ? dist : 1; // dist<1 can happen if xsize is very small - } -} - -//------------------------------------------------------------------------------ -// Decodes the next Huffman code from bit-stream. -// FillBitWindow(br) needs to be called at minimum every second call -// to ReadSymbol, in order to pre-fetch enough bits. -static WEBP_INLINE int ReadSymbol(const HuffmanCode* table, - VP8LBitReader* const br) { - int nbits; - uint32_t val = VP8LPrefetchBits(br); - table += val & HUFFMAN_TABLE_MASK; - nbits = table->bits - HUFFMAN_TABLE_BITS; - if (nbits > 0) { - VP8LSetBitPos(br, br->bit_pos_ + HUFFMAN_TABLE_BITS); - val = VP8LPrefetchBits(br); - table += table->value; - table += val & ((1 << nbits) - 1); - } - VP8LSetBitPos(br, br->bit_pos_ + table->bits); - return table->value; -} - -// Reads packed symbol depending on GREEN channel -#define BITS_SPECIAL_MARKER 0x100 // something large enough (and a bit-mask) -#define PACKED_NON_LITERAL_CODE 0 // must be < NUM_LITERAL_CODES -static WEBP_INLINE int ReadPackedSymbols(const HTreeGroup* group, - VP8LBitReader* const br, - uint32_t* const dst) { - const uint32_t val = VP8LPrefetchBits(br) & (HUFFMAN_PACKED_TABLE_SIZE - 1); - const HuffmanCode32 code = group->packed_table[val]; - assert(group->use_packed_table); - if (code.bits < BITS_SPECIAL_MARKER) { - VP8LSetBitPos(br, br->bit_pos_ + code.bits); - *dst = code.value; - return PACKED_NON_LITERAL_CODE; - } else { - VP8LSetBitPos(br, br->bit_pos_ + code.bits - BITS_SPECIAL_MARKER); - assert(code.value >= NUM_LITERAL_CODES); - return code.value; - } -} - -static int AccumulateHCode(HuffmanCode hcode, int shift, - HuffmanCode32* const huff) { - huff->bits += hcode.bits; - huff->value |= (uint32_t)hcode.value << shift; - assert(huff->bits <= HUFFMAN_TABLE_BITS); - return hcode.bits; -} - -static void BuildPackedTable(HTreeGroup* const htree_group) { - uint32_t code; - for (code = 0; code < HUFFMAN_PACKED_TABLE_SIZE; ++code) { - uint32_t bits = code; - HuffmanCode32* const huff = &htree_group->packed_table[bits]; - HuffmanCode hcode = htree_group->htrees[GREEN][bits]; - if (hcode.value >= NUM_LITERAL_CODES) { - huff->bits = hcode.bits + BITS_SPECIAL_MARKER; - huff->value = hcode.value; - } else { - huff->bits = 0; - huff->value = 0; - bits >>= AccumulateHCode(hcode, 8, huff); - bits >>= AccumulateHCode(htree_group->htrees[RED][bits], 16, huff); - bits >>= AccumulateHCode(htree_group->htrees[BLUE][bits], 0, huff); - bits >>= AccumulateHCode(htree_group->htrees[ALPHA][bits], 24, huff); - (void)bits; - } - } -} - -static int ReadHuffmanCodeLengths( - VP8LDecoder* const dec, const int* const code_length_code_lengths, - int num_symbols, int* const code_lengths) { - int ok = 0; - VP8LBitReader* const br = &dec->br_; - int symbol; - int max_symbol; - int prev_code_len = DEFAULT_CODE_LENGTH; - HuffmanCode table[1 << LENGTHS_TABLE_BITS]; - - if (!VP8LBuildHuffmanTable(table, LENGTHS_TABLE_BITS, - code_length_code_lengths, - NUM_CODE_LENGTH_CODES)) { - goto End; - } - - if (VP8LReadBits(br, 1)) { // use length - const int length_nbits = 2 + 2 * VP8LReadBits(br, 3); - max_symbol = 2 + VP8LReadBits(br, length_nbits); - if (max_symbol > num_symbols) { - goto End; - } - } else { - max_symbol = num_symbols; - } - - symbol = 0; - while (symbol < num_symbols) { - const HuffmanCode* p; - int code_len; - if (max_symbol-- == 0) break; - VP8LFillBitWindow(br); - p = &table[VP8LPrefetchBits(br) & LENGTHS_TABLE_MASK]; - VP8LSetBitPos(br, br->bit_pos_ + p->bits); - code_len = p->value; - if (code_len < kCodeLengthLiterals) { - code_lengths[symbol++] = code_len; - if (code_len != 0) prev_code_len = code_len; - } else { - const int use_prev = (code_len == kCodeLengthRepeatCode); - const int slot = code_len - kCodeLengthLiterals; - const int extra_bits = kCodeLengthExtraBits[slot]; - const int repeat_offset = kCodeLengthRepeatOffsets[slot]; - int repeat = VP8LReadBits(br, extra_bits) + repeat_offset; - if (symbol + repeat > num_symbols) { - goto End; - } else { - const int length = use_prev ? prev_code_len : 0; - while (repeat-- > 0) code_lengths[symbol++] = length; - } - } - } - ok = 1; - - End: - if (!ok) dec->status_ = VP8_STATUS_BITSTREAM_ERROR; - return ok; -} - -// 'code_lengths' is pre-allocated temporary buffer, used for creating Huffman -// tree. -static int ReadHuffmanCode(int alphabet_size, VP8LDecoder* const dec, - int* const code_lengths, HuffmanCode* const table) { - int ok = 0; - int size = 0; - VP8LBitReader* const br = &dec->br_; - const int simple_code = VP8LReadBits(br, 1); - - memset(code_lengths, 0, alphabet_size * sizeof(*code_lengths)); - - if (simple_code) { // Read symbols, codes & code lengths directly. - const int num_symbols = VP8LReadBits(br, 1) + 1; - const int first_symbol_len_code = VP8LReadBits(br, 1); - // The first code is either 1 bit or 8 bit code. - int symbol = VP8LReadBits(br, (first_symbol_len_code == 0) ? 1 : 8); - code_lengths[symbol] = 1; - // The second code (if present), is always 8 bit long. - if (num_symbols == 2) { - symbol = VP8LReadBits(br, 8); - code_lengths[symbol] = 1; - } - ok = 1; - } else { // Decode Huffman-coded code lengths. - int i; - int code_length_code_lengths[NUM_CODE_LENGTH_CODES] = { 0 }; - const int num_codes = VP8LReadBits(br, 4) + 4; - if (num_codes > NUM_CODE_LENGTH_CODES) { - dec->status_ = VP8_STATUS_BITSTREAM_ERROR; - return 0; - } - - for (i = 0; i < num_codes; ++i) { - code_length_code_lengths[kCodeLengthCodeOrder[i]] = VP8LReadBits(br, 3); - } - ok = ReadHuffmanCodeLengths(dec, code_length_code_lengths, alphabet_size, - code_lengths); - } - - ok = ok && !br->eos_; - if (ok) { - size = VP8LBuildHuffmanTable(table, HUFFMAN_TABLE_BITS, - code_lengths, alphabet_size); - } - if (!ok || size == 0) { - dec->status_ = VP8_STATUS_BITSTREAM_ERROR; - return 0; - } - return size; -} - -static int ReadHuffmanCodes(VP8LDecoder* const dec, int xsize, int ysize, - int color_cache_bits, int allow_recursion) { - int i, j; - VP8LBitReader* const br = &dec->br_; - VP8LMetadata* const hdr = &dec->hdr_; - uint32_t* huffman_image = NULL; - HTreeGroup* htree_groups = NULL; - HuffmanCode* huffman_tables = NULL; - HuffmanCode* huffman_table = NULL; - int num_htree_groups = 1; - int num_htree_groups_max = 1; - int max_alphabet_size = 0; - int* code_lengths = NULL; - const int table_size = kTableSize[color_cache_bits]; - int* mapping = NULL; - int ok = 0; - - if (allow_recursion && VP8LReadBits(br, 1)) { - // use meta Huffman codes. - const int huffman_precision = VP8LReadBits(br, 3) + 2; - const int huffman_xsize = VP8LSubSampleSize(xsize, huffman_precision); - const int huffman_ysize = VP8LSubSampleSize(ysize, huffman_precision); - const int huffman_pixs = huffman_xsize * huffman_ysize; - if (!DecodeImageStream(huffman_xsize, huffman_ysize, 0, dec, - &huffman_image)) { - goto Error; - } - hdr->huffman_subsample_bits_ = huffman_precision; - for (i = 0; i < huffman_pixs; ++i) { - // The huffman data is stored in red and green bytes. - const int group = (huffman_image[i] >> 8) & 0xffff; - huffman_image[i] = group; - if (group >= num_htree_groups_max) { - num_htree_groups_max = group + 1; - } - } - // Check the validity of num_htree_groups_max. If it seems too big, use a - // smaller value for later. This will prevent big memory allocations to end - // up with a bad bitstream anyway. - // The value of 1000 is totally arbitrary. We know that num_htree_groups_max - // is smaller than (1 << 16) and should be smaller than the number of pixels - // (though the format allows it to be bigger). - if (num_htree_groups_max > 1000 || num_htree_groups_max > xsize * ysize) { - // Create a mapping from the used indices to the minimal set of used - // values [0, num_htree_groups) - mapping = (int*)WebPSafeMalloc(num_htree_groups_max, sizeof(*mapping)); - if (mapping == NULL) { - dec->status_ = VP8_STATUS_OUT_OF_MEMORY; - goto Error; - } - // -1 means a value is unmapped, and therefore unused in the Huffman - // image. - memset(mapping, 0xff, num_htree_groups_max * sizeof(*mapping)); - for (num_htree_groups = 0, i = 0; i < huffman_pixs; ++i) { - // Get the current mapping for the group and remap the Huffman image. - int* const mapped_group = &mapping[huffman_image[i]]; - if (*mapped_group == -1) *mapped_group = num_htree_groups++; - huffman_image[i] = *mapped_group; - } - } else { - num_htree_groups = num_htree_groups_max; - } - } - - if (br->eos_) goto Error; - - // Find maximum alphabet size for the htree group. - for (j = 0; j < HUFFMAN_CODES_PER_META_CODE; ++j) { - int alphabet_size = kAlphabetSize[j]; - if (j == 0 && color_cache_bits > 0) { - alphabet_size += 1 << color_cache_bits; - } - if (max_alphabet_size < alphabet_size) { - max_alphabet_size = alphabet_size; - } - } - - code_lengths = (int*)WebPSafeCalloc((uint64_t)max_alphabet_size, - sizeof(*code_lengths)); - huffman_tables = (HuffmanCode*)WebPSafeMalloc(num_htree_groups * table_size, - sizeof(*huffman_tables)); - htree_groups = VP8LHtreeGroupsNew(num_htree_groups); - - if (htree_groups == NULL || code_lengths == NULL || huffman_tables == NULL) { - dec->status_ = VP8_STATUS_OUT_OF_MEMORY; - goto Error; - } - - huffman_table = huffman_tables; - for (i = 0; i < num_htree_groups_max; ++i) { - // If the index "i" is unused in the Huffman image, just make sure the - // coefficients are valid but do not store them. - if (mapping != NULL && mapping[i] == -1) { - for (j = 0; j < HUFFMAN_CODES_PER_META_CODE; ++j) { - int alphabet_size = kAlphabetSize[j]; - if (j == 0 && color_cache_bits > 0) { - alphabet_size += (1 << color_cache_bits); - } - // Passing in NULL so that nothing gets filled. - if (!ReadHuffmanCode(alphabet_size, dec, code_lengths, NULL)) { - goto Error; - } - } - } else { - HTreeGroup* const htree_group = - &htree_groups[(mapping == NULL) ? i : mapping[i]]; - HuffmanCode** const htrees = htree_group->htrees; - int size; - int total_size = 0; - int is_trivial_literal = 1; - int max_bits = 0; - for (j = 0; j < HUFFMAN_CODES_PER_META_CODE; ++j) { - int alphabet_size = kAlphabetSize[j]; - htrees[j] = huffman_table; - if (j == 0 && color_cache_bits > 0) { - alphabet_size += (1 << color_cache_bits); - } - size = ReadHuffmanCode(alphabet_size, dec, code_lengths, huffman_table); - if (size == 0) { - goto Error; - } - if (is_trivial_literal && kLiteralMap[j] == 1) { - is_trivial_literal = (huffman_table->bits == 0); - } - total_size += huffman_table->bits; - huffman_table += size; - if (j <= ALPHA) { - int local_max_bits = code_lengths[0]; - int k; - for (k = 1; k < alphabet_size; ++k) { - if (code_lengths[k] > local_max_bits) { - local_max_bits = code_lengths[k]; - } - } - max_bits += local_max_bits; - } - } - htree_group->is_trivial_literal = is_trivial_literal; - htree_group->is_trivial_code = 0; - if (is_trivial_literal) { - const int red = htrees[RED][0].value; - const int blue = htrees[BLUE][0].value; - const int alpha = htrees[ALPHA][0].value; - htree_group->literal_arb = ((uint32_t)alpha << 24) | (red << 16) | blue; - if (total_size == 0 && htrees[GREEN][0].value < NUM_LITERAL_CODES) { - htree_group->is_trivial_code = 1; - htree_group->literal_arb |= htrees[GREEN][0].value << 8; - } - } - htree_group->use_packed_table = - !htree_group->is_trivial_code && (max_bits < HUFFMAN_PACKED_BITS); - if (htree_group->use_packed_table) BuildPackedTable(htree_group); - } - } - ok = 1; - - // All OK. Finalize pointers. - hdr->huffman_image_ = huffman_image; - hdr->num_htree_groups_ = num_htree_groups; - hdr->htree_groups_ = htree_groups; - hdr->huffman_tables_ = huffman_tables; - - Error: - WebPSafeFree(code_lengths); - WebPSafeFree(mapping); - if (!ok) { - WebPSafeFree(huffman_image); - WebPSafeFree(huffman_tables); - VP8LHtreeGroupsFree(htree_groups); - } - return ok; -} - -//------------------------------------------------------------------------------ -// Scaling. - -#if !defined(WEBP_REDUCE_SIZE) -static int AllocateAndInitRescaler(VP8LDecoder* const dec, VP8Io* const io) { - const int num_channels = 4; - const int in_width = io->mb_w; - const int out_width = io->scaled_width; - const int in_height = io->mb_h; - const int out_height = io->scaled_height; - const uint64_t work_size = 2 * num_channels * (uint64_t)out_width; - rescaler_t* work; // Rescaler work area. - const uint64_t scaled_data_size = (uint64_t)out_width; - uint32_t* scaled_data; // Temporary storage for scaled BGRA data. - const uint64_t memory_size = sizeof(*dec->rescaler) + - work_size * sizeof(*work) + - scaled_data_size * sizeof(*scaled_data); - uint8_t* memory = (uint8_t*)WebPSafeMalloc(memory_size, sizeof(*memory)); - if (memory == NULL) { - dec->status_ = VP8_STATUS_OUT_OF_MEMORY; - return 0; - } - assert(dec->rescaler_memory == NULL); - dec->rescaler_memory = memory; - - dec->rescaler = (WebPRescaler*)memory; - memory += sizeof(*dec->rescaler); - work = (rescaler_t*)memory; - memory += work_size * sizeof(*work); - scaled_data = (uint32_t*)memory; - - WebPRescalerInit(dec->rescaler, in_width, in_height, (uint8_t*)scaled_data, - out_width, out_height, 0, num_channels, work); - return 1; -} -#endif // WEBP_REDUCE_SIZE - -//------------------------------------------------------------------------------ -// Export to ARGB - -#if !defined(WEBP_REDUCE_SIZE) - -// We have special "export" function since we need to convert from BGRA -static int Export(WebPRescaler* const rescaler, WEBP_CSP_MODE colorspace, - int rgba_stride, uint8_t* const rgba) { - uint32_t* const src = (uint32_t*)rescaler->dst; - const int dst_width = rescaler->dst_width; - int num_lines_out = 0; - while (WebPRescalerHasPendingOutput(rescaler)) { - uint8_t* const dst = rgba + num_lines_out * rgba_stride; - WebPRescalerExportRow(rescaler); - WebPMultARGBRow(src, dst_width, 1); - VP8LConvertFromBGRA(src, dst_width, colorspace, dst); - ++num_lines_out; - } - return num_lines_out; -} - -// Emit scaled rows. -static int EmitRescaledRowsRGBA(const VP8LDecoder* const dec, - uint8_t* in, int in_stride, int mb_h, - uint8_t* const out, int out_stride) { - const WEBP_CSP_MODE colorspace = dec->output_->colorspace; - int num_lines_in = 0; - int num_lines_out = 0; - while (num_lines_in < mb_h) { - uint8_t* const row_in = in + num_lines_in * in_stride; - uint8_t* const row_out = out + num_lines_out * out_stride; - const int lines_left = mb_h - num_lines_in; - const int needed_lines = WebPRescaleNeededLines(dec->rescaler, lines_left); - int lines_imported; - assert(needed_lines > 0 && needed_lines <= lines_left); - WebPMultARGBRows(row_in, in_stride, - dec->rescaler->src_width, needed_lines, 0); - lines_imported = - WebPRescalerImport(dec->rescaler, lines_left, row_in, in_stride); - assert(lines_imported == needed_lines); - num_lines_in += lines_imported; - num_lines_out += Export(dec->rescaler, colorspace, out_stride, row_out); - } - return num_lines_out; -} - -#endif // WEBP_REDUCE_SIZE - -// Emit rows without any scaling. -static int EmitRows(WEBP_CSP_MODE colorspace, - const uint8_t* row_in, int in_stride, - int mb_w, int mb_h, - uint8_t* const out, int out_stride) { - int lines = mb_h; - uint8_t* row_out = out; - while (lines-- > 0) { - VP8LConvertFromBGRA((const uint32_t*)row_in, mb_w, colorspace, row_out); - row_in += in_stride; - row_out += out_stride; - } - return mb_h; // Num rows out == num rows in. -} - -//------------------------------------------------------------------------------ -// Export to YUVA - -static void ConvertToYUVA(const uint32_t* const src, int width, int y_pos, - const WebPDecBuffer* const output) { - const WebPYUVABuffer* const buf = &output->u.YUVA; - - // first, the luma plane - WebPConvertARGBToY(src, buf->y + y_pos * buf->y_stride, width); - - // then U/V planes - { - uint8_t* const u = buf->u + (y_pos >> 1) * buf->u_stride; - uint8_t* const v = buf->v + (y_pos >> 1) * buf->v_stride; - // even lines: store values - // odd lines: average with previous values - WebPConvertARGBToUV(src, u, v, width, !(y_pos & 1)); - } - // Lastly, store alpha if needed. - if (buf->a != NULL) { - uint8_t* const a = buf->a + y_pos * buf->a_stride; -#if defined(WORDS_BIGENDIAN) - WebPExtractAlpha((uint8_t*)src + 0, 0, width, 1, a, 0); -#else - WebPExtractAlpha((uint8_t*)src + 3, 0, width, 1, a, 0); -#endif - } -} - -static int ExportYUVA(const VP8LDecoder* const dec, int y_pos) { - WebPRescaler* const rescaler = dec->rescaler; - uint32_t* const src = (uint32_t*)rescaler->dst; - const int dst_width = rescaler->dst_width; - int num_lines_out = 0; - while (WebPRescalerHasPendingOutput(rescaler)) { - WebPRescalerExportRow(rescaler); - WebPMultARGBRow(src, dst_width, 1); - ConvertToYUVA(src, dst_width, y_pos, dec->output_); - ++y_pos; - ++num_lines_out; - } - return num_lines_out; -} - -static int EmitRescaledRowsYUVA(const VP8LDecoder* const dec, - uint8_t* in, int in_stride, int mb_h) { - int num_lines_in = 0; - int y_pos = dec->last_out_row_; - while (num_lines_in < mb_h) { - const int lines_left = mb_h - num_lines_in; - const int needed_lines = WebPRescaleNeededLines(dec->rescaler, lines_left); - int lines_imported; - WebPMultARGBRows(in, in_stride, dec->rescaler->src_width, needed_lines, 0); - lines_imported = - WebPRescalerImport(dec->rescaler, lines_left, in, in_stride); - assert(lines_imported == needed_lines); - num_lines_in += lines_imported; - in += needed_lines * in_stride; - y_pos += ExportYUVA(dec, y_pos); - } - return y_pos; -} - -static int EmitRowsYUVA(const VP8LDecoder* const dec, - const uint8_t* in, int in_stride, - int mb_w, int num_rows) { - int y_pos = dec->last_out_row_; - while (num_rows-- > 0) { - ConvertToYUVA((const uint32_t*)in, mb_w, y_pos, dec->output_); - in += in_stride; - ++y_pos; - } - return y_pos; -} - -//------------------------------------------------------------------------------ -// Cropping. - -// Sets io->mb_y, io->mb_h & io->mb_w according to start row, end row and -// crop options. Also updates the input data pointer, so that it points to the -// start of the cropped window. Note that pixels are in ARGB format even if -// 'in_data' is uint8_t*. -// Returns true if the crop window is not empty. -static int SetCropWindow(VP8Io* const io, int y_start, int y_end, - uint8_t** const in_data, int pixel_stride) { - assert(y_start < y_end); - assert(io->crop_left < io->crop_right); - if (y_end > io->crop_bottom) { - y_end = io->crop_bottom; // make sure we don't overflow on last row. - } - if (y_start < io->crop_top) { - const int delta = io->crop_top - y_start; - y_start = io->crop_top; - *in_data += delta * pixel_stride; - } - if (y_start >= y_end) return 0; // Crop window is empty. - - *in_data += io->crop_left * sizeof(uint32_t); - - io->mb_y = y_start - io->crop_top; - io->mb_w = io->crop_right - io->crop_left; - io->mb_h = y_end - y_start; - return 1; // Non-empty crop window. -} - -//------------------------------------------------------------------------------ - -static WEBP_INLINE int GetMetaIndex( - const uint32_t* const image, int xsize, int bits, int x, int y) { - if (bits == 0) return 0; - return image[xsize * (y >> bits) + (x >> bits)]; -} - -static WEBP_INLINE HTreeGroup* GetHtreeGroupForPos(VP8LMetadata* const hdr, - int x, int y) { - const int meta_index = GetMetaIndex(hdr->huffman_image_, hdr->huffman_xsize_, - hdr->huffman_subsample_bits_, x, y); - assert(meta_index < hdr->num_htree_groups_); - return hdr->htree_groups_ + meta_index; -} - -//------------------------------------------------------------------------------ -// Main loop, with custom row-processing function - -typedef void (*ProcessRowsFunc)(VP8LDecoder* const dec, int row); - -static void ApplyInverseTransforms(VP8LDecoder* const dec, - int start_row, int num_rows, - const uint32_t* const rows) { - int n = dec->next_transform_; - const int cache_pixs = dec->width_ * num_rows; - const int end_row = start_row + num_rows; - const uint32_t* rows_in = rows; - uint32_t* const rows_out = dec->argb_cache_; - - // Inverse transforms. - while (n-- > 0) { - VP8LTransform* const transform = &dec->transforms_[n]; - VP8LInverseTransform(transform, start_row, end_row, rows_in, rows_out); - rows_in = rows_out; - } - if (rows_in != rows_out) { - // No transform called, hence just copy. - memcpy(rows_out, rows_in, cache_pixs * sizeof(*rows_out)); - } -} - -// Processes (transforms, scales & color-converts) the rows decoded after the -// last call. -static void ProcessRows(VP8LDecoder* const dec, int row) { - const uint32_t* const rows = dec->pixels_ + dec->width_ * dec->last_row_; - const int num_rows = row - dec->last_row_; - - assert(row <= dec->io_->crop_bottom); - // We can't process more than NUM_ARGB_CACHE_ROWS at a time (that's the size - // of argb_cache_), but we currently don't need more than that. - assert(num_rows <= NUM_ARGB_CACHE_ROWS); - if (num_rows > 0) { // Emit output. - VP8Io* const io = dec->io_; - uint8_t* rows_data = (uint8_t*)dec->argb_cache_; - const int in_stride = io->width * sizeof(uint32_t); // in unit of RGBA - ApplyInverseTransforms(dec, dec->last_row_, num_rows, rows); - if (!SetCropWindow(io, dec->last_row_, row, &rows_data, in_stride)) { - // Nothing to output (this time). - } else { - const WebPDecBuffer* const output = dec->output_; - if (WebPIsRGBMode(output->colorspace)) { // convert to RGBA - const WebPRGBABuffer* const buf = &output->u.RGBA; - uint8_t* const rgba = buf->rgba + dec->last_out_row_ * buf->stride; - const int num_rows_out = -#if !defined(WEBP_REDUCE_SIZE) - io->use_scaling ? - EmitRescaledRowsRGBA(dec, rows_data, in_stride, io->mb_h, - rgba, buf->stride) : -#endif // WEBP_REDUCE_SIZE - EmitRows(output->colorspace, rows_data, in_stride, - io->mb_w, io->mb_h, rgba, buf->stride); - // Update 'last_out_row_'. - dec->last_out_row_ += num_rows_out; - } else { // convert to YUVA - dec->last_out_row_ = io->use_scaling ? - EmitRescaledRowsYUVA(dec, rows_data, in_stride, io->mb_h) : - EmitRowsYUVA(dec, rows_data, in_stride, io->mb_w, io->mb_h); - } - assert(dec->last_out_row_ <= output->height); - } - } - - // Update 'last_row_'. - dec->last_row_ = row; - assert(dec->last_row_ <= dec->height_); -} - -// Row-processing for the special case when alpha data contains only one -// transform (color indexing), and trivial non-green literals. -static int Is8bOptimizable(const VP8LMetadata* const hdr) { - int i; - if (hdr->color_cache_size_ > 0) return 0; - // When the Huffman tree contains only one symbol, we can skip the - // call to ReadSymbol() for red/blue/alpha channels. - for (i = 0; i < hdr->num_htree_groups_; ++i) { - HuffmanCode** const htrees = hdr->htree_groups_[i].htrees; - if (htrees[RED][0].bits > 0) return 0; - if (htrees[BLUE][0].bits > 0) return 0; - if (htrees[ALPHA][0].bits > 0) return 0; - } - return 1; -} - -static void AlphaApplyFilter(ALPHDecoder* const alph_dec, - int first_row, int last_row, - uint8_t* out, int stride) { - if (alph_dec->filter_ != WEBP_FILTER_NONE) { - int y; - const uint8_t* prev_line = alph_dec->prev_line_; - assert(WebPUnfilters[alph_dec->filter_] != NULL); - for (y = first_row; y < last_row; ++y) { - WebPUnfilters[alph_dec->filter_](prev_line, out, out, stride); - prev_line = out; - out += stride; - } - alph_dec->prev_line_ = prev_line; - } -} - -static void ExtractPalettedAlphaRows(VP8LDecoder* const dec, int last_row) { - // For vertical and gradient filtering, we need to decode the part above the - // crop_top row, in order to have the correct spatial predictors. - ALPHDecoder* const alph_dec = (ALPHDecoder*)dec->io_->opaque; - const int top_row = - (alph_dec->filter_ == WEBP_FILTER_NONE || - alph_dec->filter_ == WEBP_FILTER_HORIZONTAL) ? dec->io_->crop_top - : dec->last_row_; - const int first_row = (dec->last_row_ < top_row) ? top_row : dec->last_row_; - assert(last_row <= dec->io_->crop_bottom); - if (last_row > first_row) { - // Special method for paletted alpha data. We only process the cropped area. - const int width = dec->io_->width; - uint8_t* out = alph_dec->output_ + width * first_row; - const uint8_t* const in = - (uint8_t*)dec->pixels_ + dec->width_ * first_row; - VP8LTransform* const transform = &dec->transforms_[0]; - assert(dec->next_transform_ == 1); - assert(transform->type_ == COLOR_INDEXING_TRANSFORM); - VP8LColorIndexInverseTransformAlpha(transform, first_row, last_row, - in, out); - AlphaApplyFilter(alph_dec, first_row, last_row, out, width); - } - dec->last_row_ = dec->last_out_row_ = last_row; -} - -//------------------------------------------------------------------------------ -// Helper functions for fast pattern copy (8b and 32b) - -// cyclic rotation of pattern word -static WEBP_INLINE uint32_t Rotate8b(uint32_t V) { -#if defined(WORDS_BIGENDIAN) - return ((V & 0xff000000u) >> 24) | (V << 8); -#else - return ((V & 0xffu) << 24) | (V >> 8); -#endif -} - -// copy 1, 2 or 4-bytes pattern -static WEBP_INLINE void CopySmallPattern8b(const uint8_t* src, uint8_t* dst, - int length, uint32_t pattern) { - int i; - // align 'dst' to 4-bytes boundary. Adjust the pattern along the way. - while ((uintptr_t)dst & 3) { - *dst++ = *src++; - pattern = Rotate8b(pattern); - --length; - } - // Copy the pattern 4 bytes at a time. - for (i = 0; i < (length >> 2); ++i) { - ((uint32_t*)dst)[i] = pattern; - } - // Finish with left-overs. 'pattern' is still correctly positioned, - // so no Rotate8b() call is needed. - for (i <<= 2; i < length; ++i) { - dst[i] = src[i]; - } -} - -static WEBP_INLINE void CopyBlock8b(uint8_t* const dst, int dist, int length) { - const uint8_t* src = dst - dist; - if (length >= 8) { - uint32_t pattern = 0; - switch (dist) { - case 1: - pattern = src[0]; -#if defined(__arm__) || defined(_M_ARM) // arm doesn't like multiply that much - pattern |= pattern << 8; - pattern |= pattern << 16; -#elif defined(WEBP_USE_MIPS_DSP_R2) - __asm__ volatile ("replv.qb %0, %0" : "+r"(pattern)); -#else - pattern = 0x01010101u * pattern; -#endif - break; - case 2: -#if !defined(WORDS_BIGENDIAN) - memcpy(&pattern, src, sizeof(uint16_t)); -#else - pattern = ((uint32_t)src[0] << 8) | src[1]; -#endif -#if defined(__arm__) || defined(_M_ARM) - pattern |= pattern << 16; -#elif defined(WEBP_USE_MIPS_DSP_R2) - __asm__ volatile ("replv.ph %0, %0" : "+r"(pattern)); -#else - pattern = 0x00010001u * pattern; -#endif - break; - case 4: - memcpy(&pattern, src, sizeof(uint32_t)); - break; - default: - goto Copy; - break; - } - CopySmallPattern8b(src, dst, length, pattern); - return; - } - Copy: - if (dist >= length) { // no overlap -> use memcpy() - memcpy(dst, src, length * sizeof(*dst)); - } else { - int i; - for (i = 0; i < length; ++i) dst[i] = src[i]; - } -} - -// copy pattern of 1 or 2 uint32_t's -static WEBP_INLINE void CopySmallPattern32b(const uint32_t* src, - uint32_t* dst, - int length, uint64_t pattern) { - int i; - if ((uintptr_t)dst & 4) { // Align 'dst' to 8-bytes boundary. - *dst++ = *src++; - pattern = (pattern >> 32) | (pattern << 32); - --length; - } - assert(0 == ((uintptr_t)dst & 7)); - for (i = 0; i < (length >> 1); ++i) { - ((uint64_t*)dst)[i] = pattern; // Copy the pattern 8 bytes at a time. - } - if (length & 1) { // Finish with left-over. - dst[i << 1] = src[i << 1]; - } -} - -static WEBP_INLINE void CopyBlock32b(uint32_t* const dst, - int dist, int length) { - const uint32_t* const src = dst - dist; - if (dist <= 2 && length >= 4 && ((uintptr_t)dst & 3) == 0) { - uint64_t pattern; - if (dist == 1) { - pattern = (uint64_t)src[0]; - pattern |= pattern << 32; - } else { - memcpy(&pattern, src, sizeof(pattern)); - } - CopySmallPattern32b(src, dst, length, pattern); - } else if (dist >= length) { // no overlap - memcpy(dst, src, length * sizeof(*dst)); - } else { - int i; - for (i = 0; i < length; ++i) dst[i] = src[i]; - } -} - -//------------------------------------------------------------------------------ - -static int DecodeAlphaData(VP8LDecoder* const dec, uint8_t* const data, - int width, int height, int last_row) { - int ok = 1; - int row = dec->last_pixel_ / width; - int col = dec->last_pixel_ % width; - VP8LBitReader* const br = &dec->br_; - VP8LMetadata* const hdr = &dec->hdr_; - int pos = dec->last_pixel_; // current position - const int end = width * height; // End of data - const int last = width * last_row; // Last pixel to decode - const int len_code_limit = NUM_LITERAL_CODES + NUM_LENGTH_CODES; - const int mask = hdr->huffman_mask_; - const HTreeGroup* htree_group = - (pos < last) ? GetHtreeGroupForPos(hdr, col, row) : NULL; - assert(pos <= end); - assert(last_row <= height); - assert(Is8bOptimizable(hdr)); - - while (!br->eos_ && pos < last) { - int code; - // Only update when changing tile. - if ((col & mask) == 0) { - htree_group = GetHtreeGroupForPos(hdr, col, row); - } - assert(htree_group != NULL); - VP8LFillBitWindow(br); - code = ReadSymbol(htree_group->htrees[GREEN], br); - if (code < NUM_LITERAL_CODES) { // Literal - data[pos] = code; - ++pos; - ++col; - if (col >= width) { - col = 0; - ++row; - if (row <= last_row && (row % NUM_ARGB_CACHE_ROWS == 0)) { - ExtractPalettedAlphaRows(dec, row); - } - } - } else if (code < len_code_limit) { // Backward reference - int dist_code, dist; - const int length_sym = code - NUM_LITERAL_CODES; - const int length = GetCopyLength(length_sym, br); - const int dist_symbol = ReadSymbol(htree_group->htrees[DIST], br); - VP8LFillBitWindow(br); - dist_code = GetCopyDistance(dist_symbol, br); - dist = PlaneCodeToDistance(width, dist_code); - if (pos >= dist && end - pos >= length) { - CopyBlock8b(data + pos, dist, length); - } else { - ok = 0; - goto End; - } - pos += length; - col += length; - while (col >= width) { - col -= width; - ++row; - if (row <= last_row && (row % NUM_ARGB_CACHE_ROWS == 0)) { - ExtractPalettedAlphaRows(dec, row); - } - } - if (pos < last && (col & mask)) { - htree_group = GetHtreeGroupForPos(hdr, col, row); - } - } else { // Not reached - ok = 0; - goto End; - } - br->eos_ = VP8LIsEndOfStream(br); - } - // Process the remaining rows corresponding to last row-block. - ExtractPalettedAlphaRows(dec, row > last_row ? last_row : row); - - End: - br->eos_ = VP8LIsEndOfStream(br); - if (!ok || (br->eos_ && pos < end)) { - ok = 0; - dec->status_ = br->eos_ ? VP8_STATUS_SUSPENDED - : VP8_STATUS_BITSTREAM_ERROR; - } else { - dec->last_pixel_ = pos; - } - return ok; -} - -static void SaveState(VP8LDecoder* const dec, int last_pixel) { - assert(dec->incremental_); - dec->saved_br_ = dec->br_; - dec->saved_last_pixel_ = last_pixel; - if (dec->hdr_.color_cache_size_ > 0) { - VP8LColorCacheCopy(&dec->hdr_.color_cache_, &dec->hdr_.saved_color_cache_); - } -} - -static void RestoreState(VP8LDecoder* const dec) { - assert(dec->br_.eos_); - dec->status_ = VP8_STATUS_SUSPENDED; - dec->br_ = dec->saved_br_; - dec->last_pixel_ = dec->saved_last_pixel_; - if (dec->hdr_.color_cache_size_ > 0) { - VP8LColorCacheCopy(&dec->hdr_.saved_color_cache_, &dec->hdr_.color_cache_); - } -} - -#define SYNC_EVERY_N_ROWS 8 // minimum number of rows between check-points -static int DecodeImageData(VP8LDecoder* const dec, uint32_t* const data, - int width, int height, int last_row, - ProcessRowsFunc process_func) { - int row = dec->last_pixel_ / width; - int col = dec->last_pixel_ % width; - VP8LBitReader* const br = &dec->br_; - VP8LMetadata* const hdr = &dec->hdr_; - uint32_t* src = data + dec->last_pixel_; - uint32_t* last_cached = src; - uint32_t* const src_end = data + width * height; // End of data - uint32_t* const src_last = data + width * last_row; // Last pixel to decode - const int len_code_limit = NUM_LITERAL_CODES + NUM_LENGTH_CODES; - const int color_cache_limit = len_code_limit + hdr->color_cache_size_; - int next_sync_row = dec->incremental_ ? row : 1 << 24; - VP8LColorCache* const color_cache = - (hdr->color_cache_size_ > 0) ? &hdr->color_cache_ : NULL; - const int mask = hdr->huffman_mask_; - const HTreeGroup* htree_group = - (src < src_last) ? GetHtreeGroupForPos(hdr, col, row) : NULL; - assert(dec->last_row_ < last_row); - assert(src_last <= src_end); - - while (src < src_last) { - int code; - if (row >= next_sync_row) { - SaveState(dec, (int)(src - data)); - next_sync_row = row + SYNC_EVERY_N_ROWS; - } - // Only update when changing tile. Note we could use this test: - // if "((((prev_col ^ col) | prev_row ^ row)) > mask)" -> tile changed - // but that's actually slower and needs storing the previous col/row. - if ((col & mask) == 0) { - htree_group = GetHtreeGroupForPos(hdr, col, row); - } - assert(htree_group != NULL); - if (htree_group->is_trivial_code) { - *src = htree_group->literal_arb; - goto AdvanceByOne; - } - VP8LFillBitWindow(br); - if (htree_group->use_packed_table) { - code = ReadPackedSymbols(htree_group, br, src); - if (VP8LIsEndOfStream(br)) break; - if (code == PACKED_NON_LITERAL_CODE) goto AdvanceByOne; - } else { - code = ReadSymbol(htree_group->htrees[GREEN], br); - } - if (VP8LIsEndOfStream(br)) break; - if (code < NUM_LITERAL_CODES) { // Literal - if (htree_group->is_trivial_literal) { - *src = htree_group->literal_arb | (code << 8); - } else { - int red, blue, alpha; - red = ReadSymbol(htree_group->htrees[RED], br); - VP8LFillBitWindow(br); - blue = ReadSymbol(htree_group->htrees[BLUE], br); - alpha = ReadSymbol(htree_group->htrees[ALPHA], br); - if (VP8LIsEndOfStream(br)) break; - *src = ((uint32_t)alpha << 24) | (red << 16) | (code << 8) | blue; - } - AdvanceByOne: - ++src; - ++col; - if (col >= width) { - col = 0; - ++row; - if (process_func != NULL) { - if (row <= last_row && (row % NUM_ARGB_CACHE_ROWS == 0)) { - process_func(dec, row); - } - } - if (color_cache != NULL) { - while (last_cached < src) { - VP8LColorCacheInsert(color_cache, *last_cached++); - } - } - } - } else if (code < len_code_limit) { // Backward reference - int dist_code, dist; - const int length_sym = code - NUM_LITERAL_CODES; - const int length = GetCopyLength(length_sym, br); - const int dist_symbol = ReadSymbol(htree_group->htrees[DIST], br); - VP8LFillBitWindow(br); - dist_code = GetCopyDistance(dist_symbol, br); - dist = PlaneCodeToDistance(width, dist_code); - - if (VP8LIsEndOfStream(br)) break; - if (src - data < (ptrdiff_t)dist || src_end - src < (ptrdiff_t)length) { - goto Error; - } else { - CopyBlock32b(src, dist, length); - } - src += length; - col += length; - while (col >= width) { - col -= width; - ++row; - if (process_func != NULL) { - if (row <= last_row && (row % NUM_ARGB_CACHE_ROWS == 0)) { - process_func(dec, row); - } - } - } - // Because of the check done above (before 'src' was incremented by - // 'length'), the following holds true. - assert(src <= src_end); - if (col & mask) htree_group = GetHtreeGroupForPos(hdr, col, row); - if (color_cache != NULL) { - while (last_cached < src) { - VP8LColorCacheInsert(color_cache, *last_cached++); - } - } - } else if (code < color_cache_limit) { // Color cache - const int key = code - len_code_limit; - assert(color_cache != NULL); - while (last_cached < src) { - VP8LColorCacheInsert(color_cache, *last_cached++); - } - *src = VP8LColorCacheLookup(color_cache, key); - goto AdvanceByOne; - } else { // Not reached - goto Error; - } - } - - br->eos_ = VP8LIsEndOfStream(br); - if (dec->incremental_ && br->eos_ && src < src_end) { - RestoreState(dec); - } else if (!br->eos_) { - // Process the remaining rows corresponding to last row-block. - if (process_func != NULL) { - process_func(dec, row > last_row ? last_row : row); - } - dec->status_ = VP8_STATUS_OK; - dec->last_pixel_ = (int)(src - data); // end-of-scan marker - } else { - // if not incremental, and we are past the end of buffer (eos_=1), then this - // is a real bitstream error. - goto Error; - } - return 1; - - Error: - dec->status_ = VP8_STATUS_BITSTREAM_ERROR; - return 0; -} - -// ----------------------------------------------------------------------------- -// VP8LTransform - -static void ClearTransform(VP8LTransform* const transform) { - WebPSafeFree(transform->data_); - transform->data_ = NULL; -} - -// For security reason, we need to remap the color map to span -// the total possible bundled values, and not just the num_colors. -static int ExpandColorMap(int num_colors, VP8LTransform* const transform) { - int i; - const int final_num_colors = 1 << (8 >> transform->bits_); - uint32_t* const new_color_map = - (uint32_t*)WebPSafeMalloc((uint64_t)final_num_colors, - sizeof(*new_color_map)); - if (new_color_map == NULL) { - return 0; - } else { - uint8_t* const data = (uint8_t*)transform->data_; - uint8_t* const new_data = (uint8_t*)new_color_map; - new_color_map[0] = transform->data_[0]; - for (i = 4; i < 4 * num_colors; ++i) { - // Equivalent to AddPixelEq(), on a byte-basis. - new_data[i] = (data[i] + new_data[i - 4]) & 0xff; - } - for (; i < 4 * final_num_colors; ++i) { - new_data[i] = 0; // black tail. - } - WebPSafeFree(transform->data_); - transform->data_ = new_color_map; - } - return 1; -} - -static int ReadTransform(int* const xsize, int const* ysize, - VP8LDecoder* const dec) { - int ok = 1; - VP8LBitReader* const br = &dec->br_; - VP8LTransform* transform = &dec->transforms_[dec->next_transform_]; - const VP8LImageTransformType type = - (VP8LImageTransformType)VP8LReadBits(br, 2); - - // Each transform type can only be present once in the stream. - if (dec->transforms_seen_ & (1U << type)) { - return 0; // Already there, let's not accept the second same transform. - } - dec->transforms_seen_ |= (1U << type); - - transform->type_ = type; - transform->xsize_ = *xsize; - transform->ysize_ = *ysize; - transform->data_ = NULL; - ++dec->next_transform_; - assert(dec->next_transform_ <= NUM_TRANSFORMS); - - switch (type) { - case PREDICTOR_TRANSFORM: - case CROSS_COLOR_TRANSFORM: - transform->bits_ = VP8LReadBits(br, 3) + 2; - ok = DecodeImageStream(VP8LSubSampleSize(transform->xsize_, - transform->bits_), - VP8LSubSampleSize(transform->ysize_, - transform->bits_), - 0, dec, &transform->data_); - break; - case COLOR_INDEXING_TRANSFORM: { - const int num_colors = VP8LReadBits(br, 8) + 1; - const int bits = (num_colors > 16) ? 0 - : (num_colors > 4) ? 1 - : (num_colors > 2) ? 2 - : 3; - *xsize = VP8LSubSampleSize(transform->xsize_, bits); - transform->bits_ = bits; - ok = DecodeImageStream(num_colors, 1, 0, dec, &transform->data_); - ok = ok && ExpandColorMap(num_colors, transform); - break; - } - case SUBTRACT_GREEN: - break; - default: - assert(0); // can't happen - break; - } - - return ok; -} - -// ----------------------------------------------------------------------------- -// VP8LMetadata - -static void InitMetadata(VP8LMetadata* const hdr) { - assert(hdr != NULL); - memset(hdr, 0, sizeof(*hdr)); -} - -static void ClearMetadata(VP8LMetadata* const hdr) { - assert(hdr != NULL); - - WebPSafeFree(hdr->huffman_image_); - WebPSafeFree(hdr->huffman_tables_); - VP8LHtreeGroupsFree(hdr->htree_groups_); - VP8LColorCacheClear(&hdr->color_cache_); - VP8LColorCacheClear(&hdr->saved_color_cache_); - InitMetadata(hdr); -} - -// ----------------------------------------------------------------------------- -// VP8LDecoder - -VP8LDecoder* VP8LNew(void) { - VP8LDecoder* const dec = (VP8LDecoder*)WebPSafeCalloc(1ULL, sizeof(*dec)); - if (dec == NULL) return NULL; - dec->status_ = VP8_STATUS_OK; - dec->state_ = READ_DIM; - - VP8LDspInit(); // Init critical function pointers. - - return dec; -} - -void VP8LClear(VP8LDecoder* const dec) { - int i; - if (dec == NULL) return; - ClearMetadata(&dec->hdr_); - - WebPSafeFree(dec->pixels_); - dec->pixels_ = NULL; - for (i = 0; i < dec->next_transform_; ++i) { - ClearTransform(&dec->transforms_[i]); - } - dec->next_transform_ = 0; - dec->transforms_seen_ = 0; - - WebPSafeFree(dec->rescaler_memory); - dec->rescaler_memory = NULL; - - dec->output_ = NULL; // leave no trace behind -} - -void VP8LDelete(VP8LDecoder* const dec) { - if (dec != NULL) { - VP8LClear(dec); - WebPSafeFree(dec); - } -} - -static void UpdateDecoder(VP8LDecoder* const dec, int width, int height) { - VP8LMetadata* const hdr = &dec->hdr_; - const int num_bits = hdr->huffman_subsample_bits_; - dec->width_ = width; - dec->height_ = height; - - hdr->huffman_xsize_ = VP8LSubSampleSize(width, num_bits); - hdr->huffman_mask_ = (num_bits == 0) ? ~0 : (1 << num_bits) - 1; -} - -static int DecodeImageStream(int xsize, int ysize, - int is_level0, - VP8LDecoder* const dec, - uint32_t** const decoded_data) { - int ok = 1; - int transform_xsize = xsize; - int transform_ysize = ysize; - VP8LBitReader* const br = &dec->br_; - VP8LMetadata* const hdr = &dec->hdr_; - uint32_t* data = NULL; - int color_cache_bits = 0; - - // Read the transforms (may recurse). - if (is_level0) { - while (ok && VP8LReadBits(br, 1)) { - ok = ReadTransform(&transform_xsize, &transform_ysize, dec); - } - } - - // Color cache - if (ok && VP8LReadBits(br, 1)) { - color_cache_bits = VP8LReadBits(br, 4); - ok = (color_cache_bits >= 1 && color_cache_bits <= MAX_CACHE_BITS); - if (!ok) { - dec->status_ = VP8_STATUS_BITSTREAM_ERROR; - goto End; - } - } - - // Read the Huffman codes (may recurse). - ok = ok && ReadHuffmanCodes(dec, transform_xsize, transform_ysize, - color_cache_bits, is_level0); - if (!ok) { - dec->status_ = VP8_STATUS_BITSTREAM_ERROR; - goto End; - } - - // Finish setting up the color-cache - if (color_cache_bits > 0) { - hdr->color_cache_size_ = 1 << color_cache_bits; - if (!VP8LColorCacheInit(&hdr->color_cache_, color_cache_bits)) { - dec->status_ = VP8_STATUS_OUT_OF_MEMORY; - ok = 0; - goto End; - } - } else { - hdr->color_cache_size_ = 0; - } - UpdateDecoder(dec, transform_xsize, transform_ysize); - - if (is_level0) { // level 0 complete - dec->state_ = READ_HDR; - goto End; - } - - { - const uint64_t total_size = (uint64_t)transform_xsize * transform_ysize; - data = (uint32_t*)WebPSafeMalloc(total_size, sizeof(*data)); - if (data == NULL) { - dec->status_ = VP8_STATUS_OUT_OF_MEMORY; - ok = 0; - goto End; - } - } - - // Use the Huffman trees to decode the LZ77 encoded data. - ok = DecodeImageData(dec, data, transform_xsize, transform_ysize, - transform_ysize, NULL); - ok = ok && !br->eos_; - - End: - if (!ok) { - WebPSafeFree(data); - ClearMetadata(hdr); - } else { - if (decoded_data != NULL) { - *decoded_data = data; - } else { - // We allocate image data in this function only for transforms. At level 0 - // (that is: not the transforms), we shouldn't have allocated anything. - assert(data == NULL); - assert(is_level0); - } - dec->last_pixel_ = 0; // Reset for future DECODE_DATA_FUNC() calls. - if (!is_level0) ClearMetadata(hdr); // Clean up temporary data behind. - } - return ok; -} - -//------------------------------------------------------------------------------ -// Allocate internal buffers dec->pixels_ and dec->argb_cache_. -static int AllocateInternalBuffers32b(VP8LDecoder* const dec, int final_width) { - const uint64_t num_pixels = (uint64_t)dec->width_ * dec->height_; - // Scratch buffer corresponding to top-prediction row for transforming the - // first row in the row-blocks. Not needed for paletted alpha. - const uint64_t cache_top_pixels = (uint16_t)final_width; - // Scratch buffer for temporary BGRA storage. Not needed for paletted alpha. - const uint64_t cache_pixels = (uint64_t)final_width * NUM_ARGB_CACHE_ROWS; - const uint64_t total_num_pixels = - num_pixels + cache_top_pixels + cache_pixels; - - assert(dec->width_ <= final_width); - dec->pixels_ = (uint32_t*)WebPSafeMalloc(total_num_pixels, sizeof(uint32_t)); - if (dec->pixels_ == NULL) { - dec->argb_cache_ = NULL; // for sanity check - dec->status_ = VP8_STATUS_OUT_OF_MEMORY; - return 0; - } - dec->argb_cache_ = dec->pixels_ + num_pixels + cache_top_pixels; - return 1; -} - -static int AllocateInternalBuffers8b(VP8LDecoder* const dec) { - const uint64_t total_num_pixels = (uint64_t)dec->width_ * dec->height_; - dec->argb_cache_ = NULL; // for sanity check - dec->pixels_ = (uint32_t*)WebPSafeMalloc(total_num_pixels, sizeof(uint8_t)); - if (dec->pixels_ == NULL) { - dec->status_ = VP8_STATUS_OUT_OF_MEMORY; - return 0; - } - return 1; -} - -//------------------------------------------------------------------------------ - -// Special row-processing that only stores the alpha data. -static void ExtractAlphaRows(VP8LDecoder* const dec, int last_row) { - int cur_row = dec->last_row_; - int num_rows = last_row - cur_row; - const uint32_t* in = dec->pixels_ + dec->width_ * cur_row; - - assert(last_row <= dec->io_->crop_bottom); - while (num_rows > 0) { - const int num_rows_to_process = - (num_rows > NUM_ARGB_CACHE_ROWS) ? NUM_ARGB_CACHE_ROWS : num_rows; - // Extract alpha (which is stored in the green plane). - ALPHDecoder* const alph_dec = (ALPHDecoder*)dec->io_->opaque; - uint8_t* const output = alph_dec->output_; - const int width = dec->io_->width; // the final width (!= dec->width_) - const int cache_pixs = width * num_rows_to_process; - uint8_t* const dst = output + width * cur_row; - const uint32_t* const src = dec->argb_cache_; - ApplyInverseTransforms(dec, cur_row, num_rows_to_process, in); - WebPExtractGreen(src, dst, cache_pixs); - AlphaApplyFilter(alph_dec, - cur_row, cur_row + num_rows_to_process, dst, width); - num_rows -= num_rows_to_process; - in += num_rows_to_process * dec->width_; - cur_row += num_rows_to_process; - } - assert(cur_row == last_row); - dec->last_row_ = dec->last_out_row_ = last_row; -} - -int VP8LDecodeAlphaHeader(ALPHDecoder* const alph_dec, - const uint8_t* const data, size_t data_size) { - int ok = 0; - VP8LDecoder* dec = VP8LNew(); - - if (dec == NULL) return 0; - - assert(alph_dec != NULL); - - dec->width_ = alph_dec->width_; - dec->height_ = alph_dec->height_; - dec->io_ = &alph_dec->io_; - dec->io_->opaque = alph_dec; - dec->io_->width = alph_dec->width_; - dec->io_->height = alph_dec->height_; - - dec->status_ = VP8_STATUS_OK; - VP8LInitBitReader(&dec->br_, data, data_size); - - if (!DecodeImageStream(alph_dec->width_, alph_dec->height_, 1, dec, NULL)) { - goto Err; - } - - // Special case: if alpha data uses only the color indexing transform and - // doesn't use color cache (a frequent case), we will use DecodeAlphaData() - // method that only needs allocation of 1 byte per pixel (alpha channel). - if (dec->next_transform_ == 1 && - dec->transforms_[0].type_ == COLOR_INDEXING_TRANSFORM && - Is8bOptimizable(&dec->hdr_)) { - alph_dec->use_8b_decode_ = 1; - ok = AllocateInternalBuffers8b(dec); - } else { - // Allocate internal buffers (note that dec->width_ may have changed here). - alph_dec->use_8b_decode_ = 0; - ok = AllocateInternalBuffers32b(dec, alph_dec->width_); - } - - if (!ok) goto Err; - - // Only set here, once we are sure it is valid (to avoid thread races). - alph_dec->vp8l_dec_ = dec; - return 1; - - Err: - VP8LDelete(dec); - return 0; -} - -int VP8LDecodeAlphaImageStream(ALPHDecoder* const alph_dec, int last_row) { - VP8LDecoder* const dec = alph_dec->vp8l_dec_; - assert(dec != NULL); - assert(last_row <= dec->height_); - - if (dec->last_row_ >= last_row) { - return 1; // done - } - - if (!alph_dec->use_8b_decode_) WebPInitAlphaProcessing(); - - // Decode (with special row processing). - return alph_dec->use_8b_decode_ ? - DecodeAlphaData(dec, (uint8_t*)dec->pixels_, dec->width_, dec->height_, - last_row) : - DecodeImageData(dec, dec->pixels_, dec->width_, dec->height_, - last_row, ExtractAlphaRows); -} - -//------------------------------------------------------------------------------ - -int VP8LDecodeHeader(VP8LDecoder* const dec, VP8Io* const io) { - int width, height, has_alpha; - - if (dec == NULL) return 0; - if (io == NULL) { - dec->status_ = VP8_STATUS_INVALID_PARAM; - return 0; - } - - dec->io_ = io; - dec->status_ = VP8_STATUS_OK; - VP8LInitBitReader(&dec->br_, io->data, io->data_size); - if (!ReadImageInfo(&dec->br_, &width, &height, &has_alpha)) { - dec->status_ = VP8_STATUS_BITSTREAM_ERROR; - goto Error; - } - dec->state_ = READ_DIM; - io->width = width; - io->height = height; - - if (!DecodeImageStream(width, height, 1, dec, NULL)) goto Error; - return 1; - - Error: - VP8LClear(dec); - assert(dec->status_ != VP8_STATUS_OK); - return 0; -} - -int VP8LDecodeImage(VP8LDecoder* const dec) { - VP8Io* io = NULL; - WebPDecParams* params = NULL; - - // Sanity checks. - if (dec == NULL) return 0; - - assert(dec->hdr_.huffman_tables_ != NULL); - assert(dec->hdr_.htree_groups_ != NULL); - assert(dec->hdr_.num_htree_groups_ > 0); - - io = dec->io_; - assert(io != NULL); - params = (WebPDecParams*)io->opaque; - assert(params != NULL); - - // Initialization. - if (dec->state_ != READ_DATA) { - dec->output_ = params->output; - assert(dec->output_ != NULL); - - if (!WebPIoInitFromOptions(params->options, io, MODE_BGRA)) { - dec->status_ = VP8_STATUS_INVALID_PARAM; - goto Err; - } - - if (!AllocateInternalBuffers32b(dec, io->width)) goto Err; - -#if !defined(WEBP_REDUCE_SIZE) - if (io->use_scaling && !AllocateAndInitRescaler(dec, io)) goto Err; -#else - if (io->use_scaling) { - dec->status_ = VP8_STATUS_INVALID_PARAM; - goto Err; - } -#endif - if (io->use_scaling || WebPIsPremultipliedMode(dec->output_->colorspace)) { - // need the alpha-multiply functions for premultiplied output or rescaling - WebPInitAlphaProcessing(); - } - - if (!WebPIsRGBMode(dec->output_->colorspace)) { - WebPInitConvertARGBToYUV(); - if (dec->output_->u.YUVA.a != NULL) WebPInitAlphaProcessing(); - } - if (dec->incremental_) { - if (dec->hdr_.color_cache_size_ > 0 && - dec->hdr_.saved_color_cache_.colors_ == NULL) { - if (!VP8LColorCacheInit(&dec->hdr_.saved_color_cache_, - dec->hdr_.color_cache_.hash_bits_)) { - dec->status_ = VP8_STATUS_OUT_OF_MEMORY; - goto Err; - } - } - } - dec->state_ = READ_DATA; - } - - // Decode. - if (!DecodeImageData(dec, dec->pixels_, dec->width_, dec->height_, - io->crop_bottom, ProcessRows)) { - goto Err; - } - - params->last_y = dec->last_out_row_; - return 1; - - Err: - VP8LClear(dec); - assert(dec->status_ != VP8_STATUS_OK); - return 0; -} - -//------------------------------------------------------------------------------ diff --git a/Extended/libwebp/src/dec/vp8li_dec.h b/Extended/libwebp/src/dec/vp8li_dec.h deleted file mode 100644 index 72b2e86..0000000 --- a/Extended/libwebp/src/dec/vp8li_dec.h +++ /dev/null @@ -1,135 +0,0 @@ -// Copyright 2012 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Lossless decoder: internal header. -// -// Author: Skal (pascal.massimino@gmail.com) -// Vikas Arora(vikaas.arora@gmail.com) - -#ifndef WEBP_DEC_VP8LI_DEC_H_ -#define WEBP_DEC_VP8LI_DEC_H_ - -#include // for memcpy() -#include "src/dec/webpi_dec.h" -#include "src/utils/bit_reader_utils.h" -#include "src/utils/color_cache_utils.h" -#include "src/utils/huffman_utils.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef enum { - READ_DATA = 0, - READ_HDR = 1, - READ_DIM = 2 -} VP8LDecodeState; - -typedef struct VP8LTransform VP8LTransform; -struct VP8LTransform { - VP8LImageTransformType type_; // transform type. - int bits_; // subsampling bits defining transform window. - int xsize_; // transform window X index. - int ysize_; // transform window Y index. - uint32_t* data_; // transform data. -}; - -typedef struct { - int color_cache_size_; - VP8LColorCache color_cache_; - VP8LColorCache saved_color_cache_; // for incremental - - int huffman_mask_; - int huffman_subsample_bits_; - int huffman_xsize_; - uint32_t* huffman_image_; - int num_htree_groups_; - HTreeGroup* htree_groups_; - HuffmanCode* huffman_tables_; -} VP8LMetadata; - -typedef struct VP8LDecoder VP8LDecoder; -struct VP8LDecoder { - VP8StatusCode status_; - VP8LDecodeState state_; - VP8Io* io_; - - const WebPDecBuffer* output_; // shortcut to io->opaque->output - - uint32_t* pixels_; // Internal data: either uint8_t* for alpha - // or uint32_t* for BGRA. - uint32_t* argb_cache_; // Scratch buffer for temporary BGRA storage. - - VP8LBitReader br_; - int incremental_; // if true, incremental decoding is expected - VP8LBitReader saved_br_; // note: could be local variables too - int saved_last_pixel_; - - int width_; - int height_; - int last_row_; // last input row decoded so far. - int last_pixel_; // last pixel decoded so far. However, it may - // not be transformed, scaled and - // color-converted yet. - int last_out_row_; // last row output so far. - - VP8LMetadata hdr_; - - int next_transform_; - VP8LTransform transforms_[NUM_TRANSFORMS]; - // or'd bitset storing the transforms types. - uint32_t transforms_seen_; - - uint8_t* rescaler_memory; // Working memory for rescaling work. - WebPRescaler* rescaler; // Common rescaler for all channels. -}; - -//------------------------------------------------------------------------------ -// internal functions. Not public. - -struct ALPHDecoder; // Defined in dec/alphai.h. - -// in vp8l.c - -// Decodes image header for alpha data stored using lossless compression. -// Returns false in case of error. -int VP8LDecodeAlphaHeader(struct ALPHDecoder* const alph_dec, - const uint8_t* const data, size_t data_size); - -// Decodes *at least* 'last_row' rows of alpha. If some of the initial rows are -// already decoded in previous call(s), it will resume decoding from where it -// was paused. -// Returns false in case of bitstream error. -int VP8LDecodeAlphaImageStream(struct ALPHDecoder* const alph_dec, - int last_row); - -// Allocates and initialize a new lossless decoder instance. -VP8LDecoder* VP8LNew(void); - -// Decodes the image header. Returns false in case of error. -int VP8LDecodeHeader(VP8LDecoder* const dec, VP8Io* const io); - -// Decodes an image. It's required to decode the lossless header before calling -// this function. Returns false in case of error, with updated dec->status_. -int VP8LDecodeImage(VP8LDecoder* const dec); - -// Resets the decoder in its initial state, reclaiming memory. -// Preserves the dec->status_ value. -void VP8LClear(VP8LDecoder* const dec); - -// Clears and deallocate a lossless decoder instance. -void VP8LDelete(VP8LDecoder* const dec); - -//------------------------------------------------------------------------------ - -#ifdef __cplusplus -} // extern "C" -#endif - -#endif // WEBP_DEC_VP8LI_DEC_H_ diff --git a/Extended/libwebp/src/dec/webp_dec.c b/Extended/libwebp/src/dec/webp_dec.c deleted file mode 100644 index 42d0988..0000000 --- a/Extended/libwebp/src/dec/webp_dec.c +++ /dev/null @@ -1,845 +0,0 @@ -// Copyright 2010 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Main decoding functions for WEBP images. -// -// Author: Skal (pascal.massimino@gmail.com) - -#include - -#include "src/dec/vp8i_dec.h" -#include "src/dec/vp8li_dec.h" -#include "src/dec/webpi_dec.h" -#include "src/utils/utils.h" -#include "src/webp/mux_types.h" // ALPHA_FLAG - -//------------------------------------------------------------------------------ -// RIFF layout is: -// Offset tag -// 0...3 "RIFF" 4-byte tag -// 4...7 size of image data (including metadata) starting at offset 8 -// 8...11 "WEBP" our form-type signature -// The RIFF container (12 bytes) is followed by appropriate chunks: -// 12..15 "VP8 ": 4-bytes tags, signaling the use of VP8 video format -// 16..19 size of the raw VP8 image data, starting at offset 20 -// 20.... the VP8 bytes -// Or, -// 12..15 "VP8L": 4-bytes tags, signaling the use of VP8L lossless format -// 16..19 size of the raw VP8L image data, starting at offset 20 -// 20.... the VP8L bytes -// Or, -// 12..15 "VP8X": 4-bytes tags, describing the extended-VP8 chunk. -// 16..19 size of the VP8X chunk starting at offset 20. -// 20..23 VP8X flags bit-map corresponding to the chunk-types present. -// 24..26 Width of the Canvas Image. -// 27..29 Height of the Canvas Image. -// There can be extra chunks after the "VP8X" chunk (ICCP, ANMF, VP8, VP8L, -// XMP, EXIF ...) -// All sizes are in little-endian order. -// Note: chunk data size must be padded to multiple of 2 when written. - -// Validates the RIFF container (if detected) and skips over it. -// If a RIFF container is detected, returns: -// VP8_STATUS_BITSTREAM_ERROR for invalid header, -// VP8_STATUS_NOT_ENOUGH_DATA for truncated data if have_all_data is true, -// and VP8_STATUS_OK otherwise. -// In case there are not enough bytes (partial RIFF container), return 0 for -// *riff_size. Else return the RIFF size extracted from the header. -static VP8StatusCode ParseRIFF(const uint8_t** const data, - size_t* const data_size, int have_all_data, - size_t* const riff_size) { - assert(data != NULL); - assert(data_size != NULL); - assert(riff_size != NULL); - - *riff_size = 0; // Default: no RIFF present. - if (*data_size >= RIFF_HEADER_SIZE && !memcmp(*data, "RIFF", TAG_SIZE)) { - if (memcmp(*data + 8, "WEBP", TAG_SIZE)) { - return VP8_STATUS_BITSTREAM_ERROR; // Wrong image file signature. - } else { - const uint32_t size = GetLE32(*data + TAG_SIZE); - // Check that we have at least one chunk (i.e "WEBP" + "VP8?nnnn"). - if (size < TAG_SIZE + CHUNK_HEADER_SIZE) { - return VP8_STATUS_BITSTREAM_ERROR; - } - if (size > MAX_CHUNK_PAYLOAD) { - return VP8_STATUS_BITSTREAM_ERROR; - } - if (have_all_data && (size > *data_size - CHUNK_HEADER_SIZE)) { - return VP8_STATUS_NOT_ENOUGH_DATA; // Truncated bitstream. - } - // We have a RIFF container. Skip it. - *riff_size = size; - *data += RIFF_HEADER_SIZE; - *data_size -= RIFF_HEADER_SIZE; - } - } - return VP8_STATUS_OK; -} - -// Validates the VP8X header and skips over it. -// Returns VP8_STATUS_BITSTREAM_ERROR for invalid VP8X header, -// VP8_STATUS_NOT_ENOUGH_DATA in case of insufficient data, and -// VP8_STATUS_OK otherwise. -// If a VP8X chunk is found, found_vp8x is set to true and *width_ptr, -// *height_ptr and *flags_ptr are set to the corresponding values extracted -// from the VP8X chunk. -static VP8StatusCode ParseVP8X(const uint8_t** const data, - size_t* const data_size, - int* const found_vp8x, - int* const width_ptr, int* const height_ptr, - uint32_t* const flags_ptr) { - const uint32_t vp8x_size = CHUNK_HEADER_SIZE + VP8X_CHUNK_SIZE; - assert(data != NULL); - assert(data_size != NULL); - assert(found_vp8x != NULL); - - *found_vp8x = 0; - - if (*data_size < CHUNK_HEADER_SIZE) { - return VP8_STATUS_NOT_ENOUGH_DATA; // Insufficient data. - } - - if (!memcmp(*data, "VP8X", TAG_SIZE)) { - int width, height; - uint32_t flags; - const uint32_t chunk_size = GetLE32(*data + TAG_SIZE); - if (chunk_size != VP8X_CHUNK_SIZE) { - return VP8_STATUS_BITSTREAM_ERROR; // Wrong chunk size. - } - - // Verify if enough data is available to validate the VP8X chunk. - if (*data_size < vp8x_size) { - return VP8_STATUS_NOT_ENOUGH_DATA; // Insufficient data. - } - flags = GetLE32(*data + 8); - width = 1 + GetLE24(*data + 12); - height = 1 + GetLE24(*data + 15); - if (width * (uint64_t)height >= MAX_IMAGE_AREA) { - return VP8_STATUS_BITSTREAM_ERROR; // image is too large - } - - if (flags_ptr != NULL) *flags_ptr = flags; - if (width_ptr != NULL) *width_ptr = width; - if (height_ptr != NULL) *height_ptr = height; - // Skip over VP8X header bytes. - *data += vp8x_size; - *data_size -= vp8x_size; - *found_vp8x = 1; - } - return VP8_STATUS_OK; -} - -// Skips to the next VP8/VP8L chunk header in the data given the size of the -// RIFF chunk 'riff_size'. -// Returns VP8_STATUS_BITSTREAM_ERROR if any invalid chunk size is encountered, -// VP8_STATUS_NOT_ENOUGH_DATA in case of insufficient data, and -// VP8_STATUS_OK otherwise. -// If an alpha chunk is found, *alpha_data and *alpha_size are set -// appropriately. -static VP8StatusCode ParseOptionalChunks(const uint8_t** const data, - size_t* const data_size, - size_t const riff_size, - const uint8_t** const alpha_data, - size_t* const alpha_size) { - const uint8_t* buf; - size_t buf_size; - uint32_t total_size = TAG_SIZE + // "WEBP". - CHUNK_HEADER_SIZE + // "VP8Xnnnn". - VP8X_CHUNK_SIZE; // data. - assert(data != NULL); - assert(data_size != NULL); - buf = *data; - buf_size = *data_size; - - assert(alpha_data != NULL); - assert(alpha_size != NULL); - *alpha_data = NULL; - *alpha_size = 0; - - while (1) { - uint32_t chunk_size; - uint32_t disk_chunk_size; // chunk_size with padding - - *data = buf; - *data_size = buf_size; - - if (buf_size < CHUNK_HEADER_SIZE) { // Insufficient data. - return VP8_STATUS_NOT_ENOUGH_DATA; - } - - chunk_size = GetLE32(buf + TAG_SIZE); - if (chunk_size > MAX_CHUNK_PAYLOAD) { - return VP8_STATUS_BITSTREAM_ERROR; // Not a valid chunk size. - } - // For odd-sized chunk-payload, there's one byte padding at the end. - disk_chunk_size = (CHUNK_HEADER_SIZE + chunk_size + 1) & ~1; - total_size += disk_chunk_size; - - // Check that total bytes skipped so far does not exceed riff_size. - if (riff_size > 0 && (total_size > riff_size)) { - return VP8_STATUS_BITSTREAM_ERROR; // Not a valid chunk size. - } - - // Start of a (possibly incomplete) VP8/VP8L chunk implies that we have - // parsed all the optional chunks. - // Note: This check must occur before the check 'buf_size < disk_chunk_size' - // below to allow incomplete VP8/VP8L chunks. - if (!memcmp(buf, "VP8 ", TAG_SIZE) || - !memcmp(buf, "VP8L", TAG_SIZE)) { - return VP8_STATUS_OK; - } - - if (buf_size < disk_chunk_size) { // Insufficient data. - return VP8_STATUS_NOT_ENOUGH_DATA; - } - - if (!memcmp(buf, "ALPH", TAG_SIZE)) { // A valid ALPH header. - *alpha_data = buf + CHUNK_HEADER_SIZE; - *alpha_size = chunk_size; - } - - // We have a full and valid chunk; skip it. - buf += disk_chunk_size; - buf_size -= disk_chunk_size; - } -} - -// Validates the VP8/VP8L Header ("VP8 nnnn" or "VP8L nnnn") and skips over it. -// Returns VP8_STATUS_BITSTREAM_ERROR for invalid (chunk larger than -// riff_size) VP8/VP8L header, -// VP8_STATUS_NOT_ENOUGH_DATA in case of insufficient data, and -// VP8_STATUS_OK otherwise. -// If a VP8/VP8L chunk is found, *chunk_size is set to the total number of bytes -// extracted from the VP8/VP8L chunk header. -// The flag '*is_lossless' is set to 1 in case of VP8L chunk / raw VP8L data. -static VP8StatusCode ParseVP8Header(const uint8_t** const data_ptr, - size_t* const data_size, int have_all_data, - size_t riff_size, size_t* const chunk_size, - int* const is_lossless) { - const uint8_t* const data = *data_ptr; - const int is_vp8 = !memcmp(data, "VP8 ", TAG_SIZE); - const int is_vp8l = !memcmp(data, "VP8L", TAG_SIZE); - const uint32_t minimal_size = - TAG_SIZE + CHUNK_HEADER_SIZE; // "WEBP" + "VP8 nnnn" OR - // "WEBP" + "VP8Lnnnn" - assert(data != NULL); - assert(data_size != NULL); - assert(chunk_size != NULL); - assert(is_lossless != NULL); - - if (*data_size < CHUNK_HEADER_SIZE) { - return VP8_STATUS_NOT_ENOUGH_DATA; // Insufficient data. - } - - if (is_vp8 || is_vp8l) { - // Bitstream contains VP8/VP8L header. - const uint32_t size = GetLE32(data + TAG_SIZE); - if ((riff_size >= minimal_size) && (size > riff_size - minimal_size)) { - return VP8_STATUS_BITSTREAM_ERROR; // Inconsistent size information. - } - if (have_all_data && (size > *data_size - CHUNK_HEADER_SIZE)) { - return VP8_STATUS_NOT_ENOUGH_DATA; // Truncated bitstream. - } - // Skip over CHUNK_HEADER_SIZE bytes from VP8/VP8L Header. - *chunk_size = size; - *data_ptr += CHUNK_HEADER_SIZE; - *data_size -= CHUNK_HEADER_SIZE; - *is_lossless = is_vp8l; - } else { - // Raw VP8/VP8L bitstream (no header). - *is_lossless = VP8LCheckSignature(data, *data_size); - *chunk_size = *data_size; - } - - return VP8_STATUS_OK; -} - -//------------------------------------------------------------------------------ - -// Fetch '*width', '*height', '*has_alpha' and fill out 'headers' based on -// 'data'. All the output parameters may be NULL. If 'headers' is NULL only the -// minimal amount will be read to fetch the remaining parameters. -// If 'headers' is non-NULL this function will attempt to locate both alpha -// data (with or without a VP8X chunk) and the bitstream chunk (VP8/VP8L). -// Note: The following chunk sequences (before the raw VP8/VP8L data) are -// considered valid by this function: -// RIFF + VP8(L) -// RIFF + VP8X + (optional chunks) + VP8(L) -// ALPH + VP8 <-- Not a valid WebP format: only allowed for internal purpose. -// VP8(L) <-- Not a valid WebP format: only allowed for internal purpose. -static VP8StatusCode ParseHeadersInternal(const uint8_t* data, - size_t data_size, - int* const width, - int* const height, - int* const has_alpha, - int* const has_animation, - int* const format, - WebPHeaderStructure* const headers) { - int canvas_width = 0; - int canvas_height = 0; - int image_width = 0; - int image_height = 0; - int found_riff = 0; - int found_vp8x = 0; - int animation_present = 0; - const int have_all_data = (headers != NULL) ? headers->have_all_data : 0; - - VP8StatusCode status; - WebPHeaderStructure hdrs; - - if (data == NULL || data_size < RIFF_HEADER_SIZE) { - return VP8_STATUS_NOT_ENOUGH_DATA; - } - memset(&hdrs, 0, sizeof(hdrs)); - hdrs.data = data; - hdrs.data_size = data_size; - - // Skip over RIFF header. - status = ParseRIFF(&data, &data_size, have_all_data, &hdrs.riff_size); - if (status != VP8_STATUS_OK) { - return status; // Wrong RIFF header / insufficient data. - } - found_riff = (hdrs.riff_size > 0); - - // Skip over VP8X. - { - uint32_t flags = 0; - status = ParseVP8X(&data, &data_size, &found_vp8x, - &canvas_width, &canvas_height, &flags); - if (status != VP8_STATUS_OK) { - return status; // Wrong VP8X / insufficient data. - } - animation_present = !!(flags & ANIMATION_FLAG); - if (!found_riff && found_vp8x) { - // Note: This restriction may be removed in the future, if it becomes - // necessary to send VP8X chunk to the decoder. - return VP8_STATUS_BITSTREAM_ERROR; - } - if (has_alpha != NULL) *has_alpha = !!(flags & ALPHA_FLAG); - if (has_animation != NULL) *has_animation = animation_present; - if (format != NULL) *format = 0; // default = undefined - - image_width = canvas_width; - image_height = canvas_height; - if (found_vp8x && animation_present && headers == NULL) { - status = VP8_STATUS_OK; - goto ReturnWidthHeight; // Just return features from VP8X header. - } - } - - if (data_size < TAG_SIZE) { - status = VP8_STATUS_NOT_ENOUGH_DATA; - goto ReturnWidthHeight; - } - - // Skip over optional chunks if data started with "RIFF + VP8X" or "ALPH". - if ((found_riff && found_vp8x) || - (!found_riff && !found_vp8x && !memcmp(data, "ALPH", TAG_SIZE))) { - status = ParseOptionalChunks(&data, &data_size, hdrs.riff_size, - &hdrs.alpha_data, &hdrs.alpha_data_size); - if (status != VP8_STATUS_OK) { - goto ReturnWidthHeight; // Invalid chunk size / insufficient data. - } - } - - // Skip over VP8/VP8L header. - status = ParseVP8Header(&data, &data_size, have_all_data, hdrs.riff_size, - &hdrs.compressed_size, &hdrs.is_lossless); - if (status != VP8_STATUS_OK) { - goto ReturnWidthHeight; // Wrong VP8/VP8L chunk-header / insufficient data. - } - if (hdrs.compressed_size > MAX_CHUNK_PAYLOAD) { - return VP8_STATUS_BITSTREAM_ERROR; - } - - if (format != NULL && !animation_present) { - *format = hdrs.is_lossless ? 2 : 1; - } - - if (!hdrs.is_lossless) { - if (data_size < VP8_FRAME_HEADER_SIZE) { - status = VP8_STATUS_NOT_ENOUGH_DATA; - goto ReturnWidthHeight; - } - // Validates raw VP8 data. - if (!VP8GetInfo(data, data_size, (uint32_t)hdrs.compressed_size, - &image_width, &image_height)) { - return VP8_STATUS_BITSTREAM_ERROR; - } - } else { - if (data_size < VP8L_FRAME_HEADER_SIZE) { - status = VP8_STATUS_NOT_ENOUGH_DATA; - goto ReturnWidthHeight; - } - // Validates raw VP8L data. - if (!VP8LGetInfo(data, data_size, &image_width, &image_height, has_alpha)) { - return VP8_STATUS_BITSTREAM_ERROR; - } - } - // Validates image size coherency. - if (found_vp8x) { - if (canvas_width != image_width || canvas_height != image_height) { - return VP8_STATUS_BITSTREAM_ERROR; - } - } - if (headers != NULL) { - *headers = hdrs; - headers->offset = data - headers->data; - assert((uint64_t)(data - headers->data) < MAX_CHUNK_PAYLOAD); - assert(headers->offset == headers->data_size - data_size); - } - ReturnWidthHeight: - if (status == VP8_STATUS_OK || - (status == VP8_STATUS_NOT_ENOUGH_DATA && found_vp8x && headers == NULL)) { - if (has_alpha != NULL) { - // If the data did not contain a VP8X/VP8L chunk the only definitive way - // to set this is by looking for alpha data (from an ALPH chunk). - *has_alpha |= (hdrs.alpha_data != NULL); - } - if (width != NULL) *width = image_width; - if (height != NULL) *height = image_height; - return VP8_STATUS_OK; - } else { - return status; - } -} - -VP8StatusCode WebPParseHeaders(WebPHeaderStructure* const headers) { - // status is marked volatile as a workaround for a clang-3.8 (aarch64) bug - volatile VP8StatusCode status; - int has_animation = 0; - assert(headers != NULL); - // fill out headers, ignore width/height/has_alpha. - status = ParseHeadersInternal(headers->data, headers->data_size, - NULL, NULL, NULL, &has_animation, - NULL, headers); - if (status == VP8_STATUS_OK || status == VP8_STATUS_NOT_ENOUGH_DATA) { - // The WebPDemux API + libwebp can be used to decode individual - // uncomposited frames or the WebPAnimDecoder can be used to fully - // reconstruct them (see webp/demux.h). - if (has_animation) { - status = VP8_STATUS_UNSUPPORTED_FEATURE; - } - } - return status; -} - -//------------------------------------------------------------------------------ -// WebPDecParams - -void WebPResetDecParams(WebPDecParams* const params) { - if (params != NULL) { - memset(params, 0, sizeof(*params)); - } -} - -//------------------------------------------------------------------------------ -// "Into" decoding variants - -// Main flow -static VP8StatusCode DecodeInto(const uint8_t* const data, size_t data_size, - WebPDecParams* const params) { - VP8StatusCode status; - VP8Io io; - WebPHeaderStructure headers; - - headers.data = data; - headers.data_size = data_size; - headers.have_all_data = 1; - status = WebPParseHeaders(&headers); // Process Pre-VP8 chunks. - if (status != VP8_STATUS_OK) { - return status; - } - - assert(params != NULL); - VP8InitIo(&io); - io.data = headers.data + headers.offset; - io.data_size = headers.data_size - headers.offset; - WebPInitCustomIo(params, &io); // Plug the I/O functions. - - if (!headers.is_lossless) { - VP8Decoder* const dec = VP8New(); - if (dec == NULL) { - return VP8_STATUS_OUT_OF_MEMORY; - } - dec->alpha_data_ = headers.alpha_data; - dec->alpha_data_size_ = headers.alpha_data_size; - - // Decode bitstream header, update io->width/io->height. - if (!VP8GetHeaders(dec, &io)) { - status = dec->status_; // An error occurred. Grab error status. - } else { - // Allocate/check output buffers. - status = WebPAllocateDecBuffer(io.width, io.height, params->options, - params->output); - if (status == VP8_STATUS_OK) { // Decode - // This change must be done before calling VP8Decode() - dec->mt_method_ = VP8GetThreadMethod(params->options, &headers, - io.width, io.height); - VP8InitDithering(params->options, dec); - if (!VP8Decode(dec, &io)) { - status = dec->status_; - } - } - } - VP8Delete(dec); - } else { - VP8LDecoder* const dec = VP8LNew(); - if (dec == NULL) { - return VP8_STATUS_OUT_OF_MEMORY; - } - if (!VP8LDecodeHeader(dec, &io)) { - status = dec->status_; // An error occurred. Grab error status. - } else { - // Allocate/check output buffers. - status = WebPAllocateDecBuffer(io.width, io.height, params->options, - params->output); - if (status == VP8_STATUS_OK) { // Decode - if (!VP8LDecodeImage(dec)) { - status = dec->status_; - } - } - } - VP8LDelete(dec); - } - - if (status != VP8_STATUS_OK) { - WebPFreeDecBuffer(params->output); - } else { - if (params->options != NULL && params->options->flip) { - // This restores the original stride values if options->flip was used - // during the call to WebPAllocateDecBuffer above. - status = WebPFlipBuffer(params->output); - } - } - return status; -} - -// Helpers -static uint8_t* DecodeIntoRGBABuffer(WEBP_CSP_MODE colorspace, - const uint8_t* const data, - size_t data_size, - uint8_t* const rgba, - int stride, size_t size) { - WebPDecParams params; - WebPDecBuffer buf; - if (rgba == NULL) { - return NULL; - } - WebPInitDecBuffer(&buf); - WebPResetDecParams(¶ms); - params.output = &buf; - buf.colorspace = colorspace; - buf.u.RGBA.rgba = rgba; - buf.u.RGBA.stride = stride; - buf.u.RGBA.size = size; - buf.is_external_memory = 1; - if (DecodeInto(data, data_size, ¶ms) != VP8_STATUS_OK) { - return NULL; - } - return rgba; -} - -uint8_t* WebPDecodeRGBInto(const uint8_t* data, size_t data_size, - uint8_t* output, size_t size, int stride) { - return DecodeIntoRGBABuffer(MODE_RGB, data, data_size, output, stride, size); -} - -uint8_t* WebPDecodeRGBAInto(const uint8_t* data, size_t data_size, - uint8_t* output, size_t size, int stride) { - return DecodeIntoRGBABuffer(MODE_RGBA, data, data_size, output, stride, size); -} - -uint8_t* WebPDecodeARGBInto(const uint8_t* data, size_t data_size, - uint8_t* output, size_t size, int stride) { - return DecodeIntoRGBABuffer(MODE_ARGB, data, data_size, output, stride, size); -} - -uint8_t* WebPDecodeBGRInto(const uint8_t* data, size_t data_size, - uint8_t* output, size_t size, int stride) { - return DecodeIntoRGBABuffer(MODE_BGR, data, data_size, output, stride, size); -} - -uint8_t* WebPDecodeBGRAInto(const uint8_t* data, size_t data_size, - uint8_t* output, size_t size, int stride) { - return DecodeIntoRGBABuffer(MODE_BGRA, data, data_size, output, stride, size); -} - -uint8_t* WebPDecodeYUVInto(const uint8_t* data, size_t data_size, - uint8_t* luma, size_t luma_size, int luma_stride, - uint8_t* u, size_t u_size, int u_stride, - uint8_t* v, size_t v_size, int v_stride) { - WebPDecParams params; - WebPDecBuffer output; - if (luma == NULL) return NULL; - WebPInitDecBuffer(&output); - WebPResetDecParams(¶ms); - params.output = &output; - output.colorspace = MODE_YUV; - output.u.YUVA.y = luma; - output.u.YUVA.y_stride = luma_stride; - output.u.YUVA.y_size = luma_size; - output.u.YUVA.u = u; - output.u.YUVA.u_stride = u_stride; - output.u.YUVA.u_size = u_size; - output.u.YUVA.v = v; - output.u.YUVA.v_stride = v_stride; - output.u.YUVA.v_size = v_size; - output.is_external_memory = 1; - if (DecodeInto(data, data_size, ¶ms) != VP8_STATUS_OK) { - return NULL; - } - return luma; -} - -//------------------------------------------------------------------------------ - -static uint8_t* Decode(WEBP_CSP_MODE mode, const uint8_t* const data, - size_t data_size, int* const width, int* const height, - WebPDecBuffer* const keep_info) { - WebPDecParams params; - WebPDecBuffer output; - - WebPInitDecBuffer(&output); - WebPResetDecParams(¶ms); - params.output = &output; - output.colorspace = mode; - - // Retrieve (and report back) the required dimensions from bitstream. - if (!WebPGetInfo(data, data_size, &output.width, &output.height)) { - return NULL; - } - if (width != NULL) *width = output.width; - if (height != NULL) *height = output.height; - - // Decode - if (DecodeInto(data, data_size, ¶ms) != VP8_STATUS_OK) { - return NULL; - } - if (keep_info != NULL) { // keep track of the side-info - WebPCopyDecBuffer(&output, keep_info); - } - // return decoded samples (don't clear 'output'!) - return WebPIsRGBMode(mode) ? output.u.RGBA.rgba : output.u.YUVA.y; -} - -uint8_t* WebPDecodeRGB(const uint8_t* data, size_t data_size, - int* width, int* height) { - return Decode(MODE_RGB, data, data_size, width, height, NULL); -} - -uint8_t* WebPDecodeRGBA(const uint8_t* data, size_t data_size, - int* width, int* height) { - return Decode(MODE_RGBA, data, data_size, width, height, NULL); -} - -uint8_t* WebPDecodeARGB(const uint8_t* data, size_t data_size, - int* width, int* height) { - return Decode(MODE_ARGB, data, data_size, width, height, NULL); -} - -uint8_t* WebPDecodeBGR(const uint8_t* data, size_t data_size, - int* width, int* height) { - return Decode(MODE_BGR, data, data_size, width, height, NULL); -} - -uint8_t* WebPDecodeBGRA(const uint8_t* data, size_t data_size, - int* width, int* height) { - return Decode(MODE_BGRA, data, data_size, width, height, NULL); -} - -uint8_t* WebPDecodeYUV(const uint8_t* data, size_t data_size, - int* width, int* height, uint8_t** u, uint8_t** v, - int* stride, int* uv_stride) { - WebPDecBuffer output; // only to preserve the side-infos - uint8_t* const out = Decode(MODE_YUV, data, data_size, - width, height, &output); - - if (out != NULL) { - const WebPYUVABuffer* const buf = &output.u.YUVA; - *u = buf->u; - *v = buf->v; - *stride = buf->y_stride; - *uv_stride = buf->u_stride; - assert(buf->u_stride == buf->v_stride); - } - return out; -} - -static void DefaultFeatures(WebPBitstreamFeatures* const features) { - assert(features != NULL); - memset(features, 0, sizeof(*features)); -} - -static VP8StatusCode GetFeatures(const uint8_t* const data, size_t data_size, - WebPBitstreamFeatures* const features) { - if (features == NULL || data == NULL) { - return VP8_STATUS_INVALID_PARAM; - } - DefaultFeatures(features); - - // Only parse enough of the data to retrieve the features. - return ParseHeadersInternal(data, data_size, - &features->width, &features->height, - &features->has_alpha, &features->has_animation, - &features->format, NULL); -} - -//------------------------------------------------------------------------------ -// WebPGetInfo() - -int WebPGetInfo(const uint8_t* data, size_t data_size, - int* width, int* height) { - WebPBitstreamFeatures features; - - if (GetFeatures(data, data_size, &features) != VP8_STATUS_OK) { - return 0; - } - - if (width != NULL) { - *width = features.width; - } - if (height != NULL) { - *height = features.height; - } - - return 1; -} - -//------------------------------------------------------------------------------ -// Advance decoding API - -int WebPInitDecoderConfigInternal(WebPDecoderConfig* config, - int version) { - if (WEBP_ABI_IS_INCOMPATIBLE(version, WEBP_DECODER_ABI_VERSION)) { - return 0; // version mismatch - } - if (config == NULL) { - return 0; - } - memset(config, 0, sizeof(*config)); - DefaultFeatures(&config->input); - WebPInitDecBuffer(&config->output); - return 1; -} - -VP8StatusCode WebPGetFeaturesInternal(const uint8_t* data, size_t data_size, - WebPBitstreamFeatures* features, - int version) { - if (WEBP_ABI_IS_INCOMPATIBLE(version, WEBP_DECODER_ABI_VERSION)) { - return VP8_STATUS_INVALID_PARAM; // version mismatch - } - if (features == NULL) { - return VP8_STATUS_INVALID_PARAM; - } - return GetFeatures(data, data_size, features); -} - -VP8StatusCode WebPDecode(const uint8_t* data, size_t data_size, - WebPDecoderConfig* config) { - WebPDecParams params; - VP8StatusCode status; - - if (config == NULL) { - return VP8_STATUS_INVALID_PARAM; - } - - status = GetFeatures(data, data_size, &config->input); - if (status != VP8_STATUS_OK) { - if (status == VP8_STATUS_NOT_ENOUGH_DATA) { - return VP8_STATUS_BITSTREAM_ERROR; // Not-enough-data treated as error. - } - return status; - } - - WebPResetDecParams(¶ms); - params.options = &config->options; - params.output = &config->output; - if (WebPAvoidSlowMemory(params.output, &config->input)) { - // decoding to slow memory: use a temporary in-mem buffer to decode into. - WebPDecBuffer in_mem_buffer; - WebPInitDecBuffer(&in_mem_buffer); - in_mem_buffer.colorspace = config->output.colorspace; - in_mem_buffer.width = config->input.width; - in_mem_buffer.height = config->input.height; - params.output = &in_mem_buffer; - status = DecodeInto(data, data_size, ¶ms); - if (status == VP8_STATUS_OK) { // do the slow-copy - status = WebPCopyDecBufferPixels(&in_mem_buffer, &config->output); - } - WebPFreeDecBuffer(&in_mem_buffer); - } else { - status = DecodeInto(data, data_size, ¶ms); - } - - return status; -} - -//------------------------------------------------------------------------------ -// Cropping and rescaling. - -int WebPIoInitFromOptions(const WebPDecoderOptions* const options, - VP8Io* const io, WEBP_CSP_MODE src_colorspace) { - const int W = io->width; - const int H = io->height; - int x = 0, y = 0, w = W, h = H; - - // Cropping - io->use_cropping = (options != NULL) && (options->use_cropping > 0); - if (io->use_cropping) { - w = options->crop_width; - h = options->crop_height; - x = options->crop_left; - y = options->crop_top; - if (!WebPIsRGBMode(src_colorspace)) { // only snap for YUV420 - x &= ~1; - y &= ~1; - } - if (x < 0 || y < 0 || w <= 0 || h <= 0 || x + w > W || y + h > H) { - return 0; // out of frame boundary error - } - } - io->crop_left = x; - io->crop_top = y; - io->crop_right = x + w; - io->crop_bottom = y + h; - io->mb_w = w; - io->mb_h = h; - - // Scaling - io->use_scaling = (options != NULL) && (options->use_scaling > 0); - if (io->use_scaling) { - int scaled_width = options->scaled_width; - int scaled_height = options->scaled_height; - if (!WebPRescalerGetScaledDimensions(w, h, &scaled_width, &scaled_height)) { - return 0; - } - io->scaled_width = scaled_width; - io->scaled_height = scaled_height; - } - - // Filter - io->bypass_filtering = (options != NULL) && options->bypass_filtering; - - // Fancy upsampler -#ifdef FANCY_UPSAMPLING - io->fancy_upsampling = (options == NULL) || (!options->no_fancy_upsampling); -#endif - - if (io->use_scaling) { - // disable filter (only for large downscaling ratio). - io->bypass_filtering = (io->scaled_width < W * 3 / 4) && - (io->scaled_height < H * 3 / 4); - io->fancy_upsampling = 0; - } - return 1; -} - -//------------------------------------------------------------------------------ diff --git a/Extended/libwebp/src/dec/webpi_dec.h b/Extended/libwebp/src/dec/webpi_dec.h deleted file mode 100644 index 24baff5..0000000 --- a/Extended/libwebp/src/dec/webpi_dec.h +++ /dev/null @@ -1,133 +0,0 @@ -// Copyright 2011 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Internal header: WebP decoding parameters and custom IO on buffer -// -// Author: somnath@google.com (Somnath Banerjee) - -#ifndef WEBP_DEC_WEBPI_DEC_H_ -#define WEBP_DEC_WEBPI_DEC_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -#include "src/utils/rescaler_utils.h" -#include "src/dec/vp8_dec.h" - -//------------------------------------------------------------------------------ -// WebPDecParams: Decoding output parameters. Transient internal object. - -typedef struct WebPDecParams WebPDecParams; -typedef int (*OutputFunc)(const VP8Io* const io, WebPDecParams* const p); -typedef int (*OutputAlphaFunc)(const VP8Io* const io, WebPDecParams* const p, - int expected_num_out_lines); -typedef int (*OutputRowFunc)(WebPDecParams* const p, int y_pos, - int max_out_lines); - -struct WebPDecParams { - WebPDecBuffer* output; // output buffer. - uint8_t* tmp_y, *tmp_u, *tmp_v; // cache for the fancy upsampler - // or used for tmp rescaling - - int last_y; // coordinate of the line that was last output - const WebPDecoderOptions* options; // if not NULL, use alt decoding features - - WebPRescaler* scaler_y, *scaler_u, *scaler_v, *scaler_a; // rescalers - void* memory; // overall scratch memory for the output work. - - OutputFunc emit; // output RGB or YUV samples - OutputAlphaFunc emit_alpha; // output alpha channel - OutputRowFunc emit_alpha_row; // output one line of rescaled alpha values -}; - -// Should be called first, before any use of the WebPDecParams object. -void WebPResetDecParams(WebPDecParams* const params); - -//------------------------------------------------------------------------------ -// Header parsing helpers - -// Structure storing a description of the RIFF headers. -typedef struct { - const uint8_t* data; // input buffer - size_t data_size; // input buffer size - int have_all_data; // true if all data is known to be available - size_t offset; // offset to main data chunk (VP8 or VP8L) - const uint8_t* alpha_data; // points to alpha chunk (if present) - size_t alpha_data_size; // alpha chunk size - size_t compressed_size; // VP8/VP8L compressed data size - size_t riff_size; // size of the riff payload (or 0 if absent) - int is_lossless; // true if a VP8L chunk is present -} WebPHeaderStructure; - -// Skips over all valid chunks prior to the first VP8/VP8L frame header. -// Returns: VP8_STATUS_OK, VP8_STATUS_BITSTREAM_ERROR (invalid header/chunk), -// VP8_STATUS_NOT_ENOUGH_DATA (partial input) or VP8_STATUS_UNSUPPORTED_FEATURE -// in the case of non-decodable features (animation for instance). -// In 'headers', compressed_size, offset, alpha_data, alpha_size, and lossless -// fields are updated appropriately upon success. -VP8StatusCode WebPParseHeaders(WebPHeaderStructure* const headers); - -//------------------------------------------------------------------------------ -// Misc utils - -// Initializes VP8Io with custom setup, io and teardown functions. The default -// hooks will use the supplied 'params' as io->opaque handle. -void WebPInitCustomIo(WebPDecParams* const params, VP8Io* const io); - -// Setup crop_xxx fields, mb_w and mb_h in io. 'src_colorspace' refers -// to the *compressed* format, not the output one. -int WebPIoInitFromOptions(const WebPDecoderOptions* const options, - VP8Io* const io, WEBP_CSP_MODE src_colorspace); - -//------------------------------------------------------------------------------ -// Internal functions regarding WebPDecBuffer memory (in buffer.c). -// Don't really need to be externally visible for now. - -// Prepare 'buffer' with the requested initial dimensions width/height. -// If no external storage is supplied, initializes buffer by allocating output -// memory and setting up the stride information. Validate the parameters. Return -// an error code in case of problem (no memory, or invalid stride / size / -// dimension / etc.). If *options is not NULL, also verify that the options' -// parameters are valid and apply them to the width/height dimensions of the -// output buffer. This takes cropping / scaling / rotation into account. -// Also incorporates the options->flip flag to flip the buffer parameters if -// needed. -VP8StatusCode WebPAllocateDecBuffer(int width, int height, - const WebPDecoderOptions* const options, - WebPDecBuffer* const buffer); - -// Flip buffer vertically by negating the various strides. -VP8StatusCode WebPFlipBuffer(WebPDecBuffer* const buffer); - -// Copy 'src' into 'dst' buffer, making sure 'dst' is not marked as owner of the -// memory (still held by 'src'). No pixels are copied. -void WebPCopyDecBuffer(const WebPDecBuffer* const src, - WebPDecBuffer* const dst); - -// Copy and transfer ownership from src to dst (beware of parameter order!) -void WebPGrabDecBuffer(WebPDecBuffer* const src, WebPDecBuffer* const dst); - -// Copy pixels from 'src' into a *preallocated* 'dst' buffer. Returns -// VP8_STATUS_INVALID_PARAM if the 'dst' is not set up correctly for the copy. -VP8StatusCode WebPCopyDecBufferPixels(const WebPDecBuffer* const src, - WebPDecBuffer* const dst); - -// Returns true if decoding will be slow with the current configuration -// and bitstream features. -int WebPAvoidSlowMemory(const WebPDecBuffer* const output, - const WebPBitstreamFeatures* const features); - -//------------------------------------------------------------------------------ - -#ifdef __cplusplus -} // extern "C" -#endif - -#endif // WEBP_DEC_WEBPI_DEC_H_ diff --git a/Extended/libwebp/src/demux/.deps/anim_decode.Plo b/Extended/libwebp/src/demux/.deps/anim_decode.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/demux/.deps/anim_decode.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/demux/.deps/demux.Plo b/Extended/libwebp/src/demux/.deps/demux.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/demux/.deps/demux.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/demux/Makefile b/Extended/libwebp/src/demux/Makefile deleted file mode 100644 index 456ac55..0000000 --- a/Extended/libwebp/src/demux/Makefile +++ /dev/null @@ -1,747 +0,0 @@ -# Makefile.in generated by automake 1.16.1 from Makefile.am. -# src/demux/Makefile. Generated from Makefile.in by configure. - -# Copyright (C) 1994-2018 Free Software Foundation, Inc. - -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - - - - - - -am__is_gnu_make = { \ - if test -z '$(MAKELEVEL)'; then \ - false; \ - elif test -n '$(MAKE_HOST)'; then \ - true; \ - elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ - true; \ - else \ - false; \ - fi; \ -} -am__make_running_with_option = \ - case $${target_option-} in \ - ?) ;; \ - *) echo "am__make_running_with_option: internal error: invalid" \ - "target option '$${target_option-}' specified" >&2; \ - exit 1;; \ - esac; \ - has_opt=no; \ - sane_makeflags=$$MAKEFLAGS; \ - if $(am__is_gnu_make); then \ - sane_makeflags=$$MFLAGS; \ - else \ - case $$MAKEFLAGS in \ - *\\[\ \ ]*) \ - bs=\\; \ - sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ - | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ - esac; \ - fi; \ - skip_next=no; \ - strip_trailopt () \ - { \ - flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ - }; \ - for flg in $$sane_makeflags; do \ - test $$skip_next = yes && { skip_next=no; continue; }; \ - case $$flg in \ - *=*|--*) continue;; \ - -*I) strip_trailopt 'I'; skip_next=yes;; \ - -*I?*) strip_trailopt 'I';; \ - -*O) strip_trailopt 'O'; skip_next=yes;; \ - -*O?*) strip_trailopt 'O';; \ - -*l) strip_trailopt 'l'; skip_next=yes;; \ - -*l?*) strip_trailopt 'l';; \ - -[dEDm]) skip_next=yes;; \ - -[JT]) skip_next=yes;; \ - esac; \ - case $$flg in \ - *$$target_option*) has_opt=yes; break;; \ - esac; \ - done; \ - test $$has_opt = yes -am__make_dryrun = (target_option=n; $(am__make_running_with_option)) -am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) -pkgdatadir = $(datadir)/libwebp -pkgincludedir = $(includedir)/libwebp -pkglibdir = $(libdir)/libwebp -pkglibexecdir = $(libexecdir)/libwebp -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = x86_64-apple-darwin19.6.0 -host_triplet = x86_64-apple-darwin19.6.0 -subdir = src/demux -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pthread.m4 \ - $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ - $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ - $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -DIST_COMMON = $(srcdir)/Makefile.am $(libwebpdemuxinclude_HEADERS) \ - $(noinst_HEADERS) $(am__DIST_COMMON) -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = $(top_builddir)/src/webp/config.h -CONFIG_CLEAN_FILES = libwebpdemux.pc -CONFIG_CLEAN_VPATH_FILES = -am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; -am__vpath_adj = case $$p in \ - $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ - *) f=$$p;; \ - esac; -am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; -am__install_max = 40 -am__nobase_strip_setup = \ - srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` -am__nobase_strip = \ - for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" -am__nobase_list = $(am__nobase_strip_setup); \ - for p in $$list; do echo "$$p $$p"; done | \ - sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ - $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ - if (++n[$$2] == $(am__install_max)) \ - { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ - END { for (dir in files) print dir, files[dir] }' -am__base_list = \ - sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ - sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' -am__uninstall_files_from_dir = { \ - test -z "$$files" \ - || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ - || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ - $(am__cd) "$$dir" && rm -f $$files; }; \ - } -am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(pkgconfigdir)" \ - "$(DESTDIR)$(libwebpdemuxincludedir)" -LTLIBRARIES = $(lib_LTLIBRARIES) -libwebpdemux_la_DEPENDENCIES = ../libwebp.la -am_libwebpdemux_la_OBJECTS = anim_decode.lo demux.lo -libwebpdemux_la_OBJECTS = $(am_libwebpdemux_la_OBJECTS) -AM_V_lt = $(am__v_lt_$(V)) -am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) -am__v_lt_0 = --silent -am__v_lt_1 = -libwebpdemux_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ - $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ - $(AM_CFLAGS) $(CFLAGS) $(libwebpdemux_la_LDFLAGS) $(LDFLAGS) \ - -o $@ -AM_V_P = $(am__v_P_$(V)) -am__v_P_ = $(am__v_P_$(AM_DEFAULT_VERBOSITY)) -am__v_P_0 = false -am__v_P_1 = : -AM_V_GEN = $(am__v_GEN_$(V)) -am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) -am__v_GEN_0 = @echo " GEN " $@; -am__v_GEN_1 = -AM_V_at = $(am__v_at_$(V)) -am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) -am__v_at_0 = @ -am__v_at_1 = -DEFAULT_INCLUDES = -I. -I$(top_builddir)/src/webp -depcomp = $(SHELL) $(top_srcdir)/depcomp -am__maybe_remake_depfiles = depfiles -am__depfiles_remade = ./$(DEPDIR)/anim_decode.Plo \ - ./$(DEPDIR)/demux.Plo -am__mv = mv -f -COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ - $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CFLAGS) $(CFLAGS) -AM_V_CC = $(am__v_CC_$(V)) -am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) -am__v_CC_0 = @echo " CC " $@; -am__v_CC_1 = -CCLD = $(CC) -LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ - $(AM_LDFLAGS) $(LDFLAGS) -o $@ -AM_V_CCLD = $(am__v_CCLD_$(V)) -am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) -am__v_CCLD_0 = @echo " CCLD " $@; -am__v_CCLD_1 = -SOURCES = $(libwebpdemux_la_SOURCES) -DIST_SOURCES = $(libwebpdemux_la_SOURCES) -am__can_run_installinfo = \ - case $$AM_UPDATE_INFO_DIR in \ - n|no|NO) false;; \ - *) (install-info --version) >/dev/null 2>&1;; \ - esac -DATA = $(pkgconfig_DATA) -HEADERS = $(libwebpdemuxinclude_HEADERS) $(noinst_HEADERS) -am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) -# Read a list of newline-separated strings from the standard input, -# and print each of them once, without duplicates. Input order is -# *not* preserved. -am__uniquify_input = $(AWK) '\ - BEGIN { nonempty = 0; } \ - { items[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in items) print i; }; } \ -' -# Make sure the list of sources is unique. This is necessary because, -# e.g., the same source file might be shared among _SOURCES variables -# for different programs/libraries. -am__define_uniq_tagged_files = \ - list='$(am__tagged_files)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | $(am__uniquify_input)` -ETAGS = etags -CTAGS = ctags -am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/libwebpdemux.pc.in \ - $(top_srcdir)/depcomp -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = ${SHELL} /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp/missing aclocal-1.16 -AMTAR = $${TAR-tar} -AM_CFLAGS = -fvisibility=hidden -Wall -Wconstant-conversion -Wdeclaration-after-statement -Wextra -Wfloat-conversion -Wformat -Wformat-nonliteral -Wformat -Wformat-security -Wmissing-declarations -Wmissing-prototypes -Wold-style-definition -Wparentheses-equality -Wshadow -Wshorten-64-to-32 -Wundef -Wunreachable-code -Wunused -Wvla -Wno-deprecated-declarations -AM_CPPFLAGS = -DNDEBUG -I$(top_builddir) -I$(top_srcdir) -AM_DEFAULT_VERBOSITY = 0 -AR = ar -AUTOCONF = ${SHELL} /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp/missing autoconf -AUTOHEADER = ${SHELL} /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp/missing autoheader -AUTOMAKE = ${SHELL} /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp/missing automake-1.16 -AWK = awk -CC = gcc -CCDEPMODE = depmode=gcc3 -CFLAGS = -g -O2 -D_THREAD_SAFE -pthread -CPP = gcc -E -CPPFLAGS = -CYGPATH_W = echo -DEFS = -DHAVE_CONFIG_H -DEPDIR = .deps -DLLTOOL = false -DSYMUTIL = dsymutil -DUMPBIN = -ECHO_C = \c -ECHO_N = -ECHO_T = -EGREP = /usr/bin/grep -E -EXEEXT = -FGREP = /usr/bin/grep -F -GIF_INCLUDES = -GIF_LIBS = -lgif -GL_INCLUDES = -GL_LIBS = -framework GLUT -framework OpenGL -GREP = /usr/bin/grep -INSTALL = /opt/twitter_mde/homebrew_minimal/mde_bin/ginstall -c -INSTALL_DATA = ${INSTALL} -m 644 -INSTALL_PROGRAM = ${INSTALL} -INSTALL_SCRIPT = ${INSTALL} -INSTALL_STRIP_PROGRAM = $(install_sh) -c -s -JPEG_INCLUDES = -DWEBP_HAVE_JPEG -JPEG_LIBS = -ljpeg -LD = /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld -LDFLAGS = -LIBOBJS = -LIBPNG_CONFIG = /opt/twitter_mde/bin/libpng-config -LIBS = -LIBSDL_CONFIG = -LIBTOOL = $(SHELL) $(top_builddir)/libtool -LIPO = lipo -LN_S = ln -s -LTLIBOBJS = -LT_SYS_LIBRARY_PATH = -MAKEINFO = ${SHELL} /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp/missing makeinfo -MANIFEST_TOOL = : -MKDIR_P = /opt/twitter_mde/homebrew_minimal/mde_bin/gmkdir -p -NEON_FLAGS = -NM = /usr/bin/nm -B -NMEDIT = nmedit -OBJDUMP = objdump -OBJEXT = o -OTOOL = otool -OTOOL64 = : -PACKAGE = libwebp -PACKAGE_BUGREPORT = https://bugs.chromium.org/p/webp -PACKAGE_NAME = libwebp -PACKAGE_STRING = libwebp 1.1.0 -PACKAGE_TARNAME = libwebp -PACKAGE_URL = http://developers.google.com/speed/webp -PACKAGE_VERSION = 1.1.0 -PATH_SEPARATOR = : -PNG_INCLUDES = -I/opt/twitter_mde/package/twitter_dev_homebrew/current/Cellar/libpng/1.6.34/include/libpng16 -DWEBP_HAVE_PNG -PNG_LIBS = -L/opt/twitter_mde/package/twitter_dev_homebrew/current/Cellar/libpng/1.6.34/lib -lpng16 -PTHREAD_CC = gcc -PTHREAD_CFLAGS = -D_THREAD_SAFE -pthread -PTHREAD_LIBS = -RANLIB = ranlib -SDL_INCLUDES = -SDL_LIBS = -SED = /usr/bin/sed -SET_MAKE = -SHELL = /bin/sh -SSE2_FLAGS = -msse2 -SSE41_FLAGS = -msse4.1 -STRIP = strip -TIFF_INCLUDES = -DWEBP_HAVE_TIFF -TIFF_LIBS = -ltiff -USE_SWAP_16BIT_CSP = -VERSION = 1.1.0 -abs_builddir = /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp/src/demux -abs_srcdir = /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp/src/demux -abs_top_builddir = /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp -abs_top_srcdir = /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp -ac_ct_AR = ar -ac_ct_CC = gcc -ac_ct_DUMPBIN = -am__include = include -am__leading_dot = . -am__quote = -am__tar = $${TAR-tar} chof - "$$tardir" -am__untar = $${TAR-tar} xf - -ax_pthread_config = -bindir = ${exec_prefix}/bin -build = x86_64-apple-darwin19.6.0 -build_alias = -build_cpu = x86_64 -build_os = darwin19.6.0 -build_vendor = apple -builddir = . -datadir = ${datarootdir} -datarootdir = ${prefix}/share -docdir = ${datarootdir}/doc/${PACKAGE_TARNAME} -dvidir = ${docdir} -exec_prefix = ${prefix} -host = x86_64-apple-darwin19.6.0 -host_alias = -host_cpu = x86_64 -host_os = darwin19.6.0 -host_vendor = apple -htmldir = ${docdir} -includedir = ${prefix}/include -infodir = ${datarootdir}/info -install_sh = ${SHELL} /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp/install-sh -libdir = ${exec_prefix}/lib -libexecdir = ${exec_prefix}/libexec -localedir = ${datarootdir}/locale -localstatedir = ${prefix}/var -mandir = ${datarootdir}/man -mkdir_p = $(MKDIR_P) -oldincludedir = /usr/include -pdfdir = ${docdir} -pkgconfigdir = ${libdir}/pkgconfig -prefix = /usr/local -program_transform_name = s,x,x, -psdir = ${docdir} -runstatedir = ${localstatedir}/run -sbindir = ${exec_prefix}/sbin -sharedstatedir = ${prefix}/com -srcdir = . -sysconfdir = ${prefix}/etc -target_alias = -top_build_prefix = ../../ -top_builddir = ../.. -top_srcdir = ../.. -lib_LTLIBRARIES = libwebpdemux.la -libwebpdemux_la_SOURCES = anim_decode.c demux.c -libwebpdemuxinclude_HEADERS = ../webp/decode.h ../webp/demux.h \ - ../webp/mux_types.h ../webp/types.h -noinst_HEADERS = ../webp/format_constants.h -libwebpdemux_la_LIBADD = ../libwebp.la -libwebpdemux_la_LDFLAGS = -no-undefined -version-info 2:6:0 -libwebpdemuxincludedir = $(includedir)/webp -pkgconfig_DATA = libwebpdemux.pc -all: all-am - -.SUFFIXES: -.SUFFIXES: .c .lo .o .obj -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ - && { if test -f $@; then exit 0; else break; fi; }; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/demux/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --foreign src/demux/Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(am__aclocal_m4_deps): -libwebpdemux.pc: $(top_builddir)/config.status $(srcdir)/libwebpdemux.pc.in - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ - -install-libLTLIBRARIES: $(lib_LTLIBRARIES) - @$(NORMAL_INSTALL) - @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ - list2=; for p in $$list; do \ - if test -f $$p; then \ - list2="$$list2 $$p"; \ - else :; fi; \ - done; \ - test -z "$$list2" || { \ - echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ - $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ - echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ - $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ - } - -uninstall-libLTLIBRARIES: - @$(NORMAL_UNINSTALL) - @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ - for p in $$list; do \ - $(am__strip_dir) \ - echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ - $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ - done - -clean-libLTLIBRARIES: - -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) - @list='$(lib_LTLIBRARIES)'; \ - locs=`for p in $$list; do echo $$p; done | \ - sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ - sort -u`; \ - test -z "$$locs" || { \ - echo rm -f $${locs}; \ - rm -f $${locs}; \ - } - -libwebpdemux.la: $(libwebpdemux_la_OBJECTS) $(libwebpdemux_la_DEPENDENCIES) $(EXTRA_libwebpdemux_la_DEPENDENCIES) - $(AM_V_CCLD)$(libwebpdemux_la_LINK) -rpath $(libdir) $(libwebpdemux_la_OBJECTS) $(libwebpdemux_la_LIBADD) $(LIBS) - -mostlyclean-compile: - -rm -f *.$(OBJEXT) - -distclean-compile: - -rm -f *.tab.c - -include ./$(DEPDIR)/anim_decode.Plo # am--include-marker -include ./$(DEPDIR)/demux.Plo # am--include-marker - -$(am__depfiles_remade): - @$(MKDIR_P) $(@D) - @echo '# dummy' >$@-t && $(am__mv) $@-t $@ - -am--depfiles: $(am__depfiles_remade) - -.c.o: - $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ - $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ - $(am__mv) $$depbase.Tpo $$depbase.Po -# $(AM_V_CC)source='$<' object='$@' libtool=no \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(COMPILE) -c -o $@ $< - -.c.obj: - $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ - $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ - $(am__mv) $$depbase.Tpo $$depbase.Po -# $(AM_V_CC)source='$<' object='$@' libtool=no \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` - -.c.lo: - $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ - $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ - $(am__mv) $$depbase.Tpo $$depbase.Plo -# $(AM_V_CC)source='$<' object='$@' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LTCOMPILE) -c -o $@ $< - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs -install-pkgconfigDATA: $(pkgconfig_DATA) - @$(NORMAL_INSTALL) - @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ - if test -n "$$list"; then \ - echo " $(MKDIR_P) '$(DESTDIR)$(pkgconfigdir)'"; \ - $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)" || exit 1; \ - fi; \ - for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - echo "$$d$$p"; \ - done | $(am__base_list) | \ - while read files; do \ - echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgconfigdir)'"; \ - $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \ - done - -uninstall-pkgconfigDATA: - @$(NORMAL_UNINSTALL) - @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ - files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ - dir='$(DESTDIR)$(pkgconfigdir)'; $(am__uninstall_files_from_dir) -install-libwebpdemuxincludeHEADERS: $(libwebpdemuxinclude_HEADERS) - @$(NORMAL_INSTALL) - @list='$(libwebpdemuxinclude_HEADERS)'; test -n "$(libwebpdemuxincludedir)" || list=; \ - if test -n "$$list"; then \ - echo " $(MKDIR_P) '$(DESTDIR)$(libwebpdemuxincludedir)'"; \ - $(MKDIR_P) "$(DESTDIR)$(libwebpdemuxincludedir)" || exit 1; \ - fi; \ - for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - echo "$$d$$p"; \ - done | $(am__base_list) | \ - while read files; do \ - echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(libwebpdemuxincludedir)'"; \ - $(INSTALL_HEADER) $$files "$(DESTDIR)$(libwebpdemuxincludedir)" || exit $$?; \ - done - -uninstall-libwebpdemuxincludeHEADERS: - @$(NORMAL_UNINSTALL) - @list='$(libwebpdemuxinclude_HEADERS)'; test -n "$(libwebpdemuxincludedir)" || list=; \ - files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ - dir='$(DESTDIR)$(libwebpdemuxincludedir)'; $(am__uninstall_files_from_dir) - -ID: $(am__tagged_files) - $(am__define_uniq_tagged_files); mkid -fID $$unique -tags: tags-am -TAGS: tags - -tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) - set x; \ - here=`pwd`; \ - $(am__define_uniq_tagged_files); \ - shift; \ - if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ - test -n "$$unique" || unique=$$empty_fix; \ - if test $$# -gt 0; then \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - "$$@" $$unique; \ - else \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$unique; \ - fi; \ - fi -ctags: ctags-am - -CTAGS: ctags -ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) - $(am__define_uniq_tagged_files); \ - test -z "$(CTAGS_ARGS)$$unique" \ - || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$unique - -GTAGS: - here=`$(am__cd) $(top_builddir) && pwd` \ - && $(am__cd) $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) "$$here" -cscopelist: cscopelist-am - -cscopelist-am: $(am__tagged_files) - list='$(am__tagged_files)'; \ - case "$(srcdir)" in \ - [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ - *) sdir=$(subdir)/$(srcdir) ;; \ - esac; \ - for i in $$list; do \ - if test -f "$$i"; then \ - echo "$(subdir)/$$i"; \ - else \ - echo "$$sdir/$$i"; \ - fi; \ - done >> $(top_builddir)/cscope.files - -distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - -distdir: $(BUILT_SOURCES) - $(MAKE) $(AM_MAKEFLAGS) distdir-am - -distdir-am: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - list='$(DISTFILES)'; \ - dist_files=`for file in $$list; do echo $$file; done | \ - sed -e "s|^$$srcdirstrip/||;t" \ - -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ - case $$dist_files in \ - */*) $(MKDIR_P) `echo "$$dist_files" | \ - sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ - sort -u` ;; \ - esac; \ - for file in $$dist_files; do \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - if test -d $$d/$$file; then \ - dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test -d "$(distdir)/$$file"; then \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ - else \ - test -f "$(distdir)/$$file" \ - || cp -p $$d/$$file "$(distdir)/$$file" \ - || exit 1; \ - fi; \ - done -check-am: all-am -check: check-am -all-am: Makefile $(LTLIBRARIES) $(DATA) $(HEADERS) -installdirs: - for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(pkgconfigdir)" "$(DESTDIR)$(libwebpdemuxincludedir)"; do \ - test -z "$$dir" || $(MKDIR_P) "$$dir"; \ - done -install: install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-am -install-strip: - if test -z '$(STRIP)'; then \ - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - install; \ - else \ - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ - fi -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-am - -clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ - mostlyclean-am - -distclean: distclean-am - -rm -f ./$(DEPDIR)/anim_decode.Plo - -rm -f ./$(DEPDIR)/demux.Plo - -rm -f Makefile -distclean-am: clean-am distclean-compile distclean-generic \ - distclean-tags - -dvi: dvi-am - -dvi-am: - -html: html-am - -html-am: - -info: info-am - -info-am: - -install-data-am: install-libwebpdemuxincludeHEADERS \ - install-pkgconfigDATA - -install-dvi: install-dvi-am - -install-dvi-am: - -install-exec-am: install-libLTLIBRARIES - -install-html: install-html-am - -install-html-am: - -install-info: install-info-am - -install-info-am: - -install-man: - -install-pdf: install-pdf-am - -install-pdf-am: - -install-ps: install-ps-am - -install-ps-am: - -installcheck-am: - -maintainer-clean: maintainer-clean-am - -rm -f ./$(DEPDIR)/anim_decode.Plo - -rm -f ./$(DEPDIR)/demux.Plo - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-compile mostlyclean-generic \ - mostlyclean-libtool - -pdf: pdf-am - -pdf-am: - -ps: ps-am - -ps-am: - -uninstall-am: uninstall-libLTLIBRARIES \ - uninstall-libwebpdemuxincludeHEADERS uninstall-pkgconfigDATA - -.MAKE: install-am install-strip - -.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ - clean-generic clean-libLTLIBRARIES clean-libtool cscopelist-am \ - ctags ctags-am distclean distclean-compile distclean-generic \ - distclean-libtool distclean-tags distdir dvi dvi-am html \ - html-am info info-am install install-am install-data \ - install-data-am install-dvi install-dvi-am install-exec \ - install-exec-am install-html install-html-am install-info \ - install-info-am install-libLTLIBRARIES \ - install-libwebpdemuxincludeHEADERS install-man install-pdf \ - install-pdf-am install-pkgconfigDATA install-ps install-ps-am \ - install-strip installcheck installcheck-am installdirs \ - maintainer-clean maintainer-clean-generic mostlyclean \ - mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ - pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \ - uninstall-libLTLIBRARIES uninstall-libwebpdemuxincludeHEADERS \ - uninstall-pkgconfigDATA - -.PRECIOUS: Makefile - - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/Extended/libwebp/src/demux/Makefile.am b/Extended/libwebp/src/demux/Makefile.am deleted file mode 100644 index a0b0c6a..0000000 --- a/Extended/libwebp/src/demux/Makefile.am +++ /dev/null @@ -1,18 +0,0 @@ -AM_CPPFLAGS += -I$(top_builddir) -I$(top_srcdir) -lib_LTLIBRARIES = libwebpdemux.la - -libwebpdemux_la_SOURCES = -libwebpdemux_la_SOURCES += anim_decode.c demux.c - -libwebpdemuxinclude_HEADERS = -libwebpdemuxinclude_HEADERS += ../webp/decode.h -libwebpdemuxinclude_HEADERS += ../webp/demux.h -libwebpdemuxinclude_HEADERS += ../webp/mux_types.h -libwebpdemuxinclude_HEADERS += ../webp/types.h -noinst_HEADERS = -noinst_HEADERS += ../webp/format_constants.h - -libwebpdemux_la_LIBADD = ../libwebp.la -libwebpdemux_la_LDFLAGS = -no-undefined -version-info 2:6:0 -libwebpdemuxincludedir = $(includedir)/webp -pkgconfig_DATA = libwebpdemux.pc diff --git a/Extended/libwebp/src/demux/Makefile.in b/Extended/libwebp/src/demux/Makefile.in deleted file mode 100644 index 1e30159..0000000 --- a/Extended/libwebp/src/demux/Makefile.in +++ /dev/null @@ -1,747 +0,0 @@ -# Makefile.in generated by automake 1.16.1 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994-2018 Free Software Foundation, Inc. - -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -@SET_MAKE@ - - - -VPATH = @srcdir@ -am__is_gnu_make = { \ - if test -z '$(MAKELEVEL)'; then \ - false; \ - elif test -n '$(MAKE_HOST)'; then \ - true; \ - elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ - true; \ - else \ - false; \ - fi; \ -} -am__make_running_with_option = \ - case $${target_option-} in \ - ?) ;; \ - *) echo "am__make_running_with_option: internal error: invalid" \ - "target option '$${target_option-}' specified" >&2; \ - exit 1;; \ - esac; \ - has_opt=no; \ - sane_makeflags=$$MAKEFLAGS; \ - if $(am__is_gnu_make); then \ - sane_makeflags=$$MFLAGS; \ - else \ - case $$MAKEFLAGS in \ - *\\[\ \ ]*) \ - bs=\\; \ - sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ - | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ - esac; \ - fi; \ - skip_next=no; \ - strip_trailopt () \ - { \ - flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ - }; \ - for flg in $$sane_makeflags; do \ - test $$skip_next = yes && { skip_next=no; continue; }; \ - case $$flg in \ - *=*|--*) continue;; \ - -*I) strip_trailopt 'I'; skip_next=yes;; \ - -*I?*) strip_trailopt 'I';; \ - -*O) strip_trailopt 'O'; skip_next=yes;; \ - -*O?*) strip_trailopt 'O';; \ - -*l) strip_trailopt 'l'; skip_next=yes;; \ - -*l?*) strip_trailopt 'l';; \ - -[dEDm]) skip_next=yes;; \ - -[JT]) skip_next=yes;; \ - esac; \ - case $$flg in \ - *$$target_option*) has_opt=yes; break;; \ - esac; \ - done; \ - test $$has_opt = yes -am__make_dryrun = (target_option=n; $(am__make_running_with_option)) -am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) -pkgdatadir = $(datadir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkglibexecdir = $(libexecdir)/@PACKAGE@ -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = @build@ -host_triplet = @host@ -subdir = src/demux -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pthread.m4 \ - $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ - $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ - $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -DIST_COMMON = $(srcdir)/Makefile.am $(libwebpdemuxinclude_HEADERS) \ - $(noinst_HEADERS) $(am__DIST_COMMON) -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = $(top_builddir)/src/webp/config.h -CONFIG_CLEAN_FILES = libwebpdemux.pc -CONFIG_CLEAN_VPATH_FILES = -am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; -am__vpath_adj = case $$p in \ - $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ - *) f=$$p;; \ - esac; -am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; -am__install_max = 40 -am__nobase_strip_setup = \ - srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` -am__nobase_strip = \ - for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" -am__nobase_list = $(am__nobase_strip_setup); \ - for p in $$list; do echo "$$p $$p"; done | \ - sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ - $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ - if (++n[$$2] == $(am__install_max)) \ - { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ - END { for (dir in files) print dir, files[dir] }' -am__base_list = \ - sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ - sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' -am__uninstall_files_from_dir = { \ - test -z "$$files" \ - || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ - || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ - $(am__cd) "$$dir" && rm -f $$files; }; \ - } -am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(pkgconfigdir)" \ - "$(DESTDIR)$(libwebpdemuxincludedir)" -LTLIBRARIES = $(lib_LTLIBRARIES) -libwebpdemux_la_DEPENDENCIES = ../libwebp.la -am_libwebpdemux_la_OBJECTS = anim_decode.lo demux.lo -libwebpdemux_la_OBJECTS = $(am_libwebpdemux_la_OBJECTS) -AM_V_lt = $(am__v_lt_@AM_V@) -am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) -am__v_lt_0 = --silent -am__v_lt_1 = -libwebpdemux_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ - $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ - $(AM_CFLAGS) $(CFLAGS) $(libwebpdemux_la_LDFLAGS) $(LDFLAGS) \ - -o $@ -AM_V_P = $(am__v_P_@AM_V@) -am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) -am__v_P_0 = false -am__v_P_1 = : -AM_V_GEN = $(am__v_GEN_@AM_V@) -am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) -am__v_GEN_0 = @echo " GEN " $@; -am__v_GEN_1 = -AM_V_at = $(am__v_at_@AM_V@) -am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) -am__v_at_0 = @ -am__v_at_1 = -DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/src/webp -depcomp = $(SHELL) $(top_srcdir)/depcomp -am__maybe_remake_depfiles = depfiles -am__depfiles_remade = ./$(DEPDIR)/anim_decode.Plo \ - ./$(DEPDIR)/demux.Plo -am__mv = mv -f -COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ - $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CFLAGS) $(CFLAGS) -AM_V_CC = $(am__v_CC_@AM_V@) -am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) -am__v_CC_0 = @echo " CC " $@; -am__v_CC_1 = -CCLD = $(CC) -LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ - $(AM_LDFLAGS) $(LDFLAGS) -o $@ -AM_V_CCLD = $(am__v_CCLD_@AM_V@) -am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) -am__v_CCLD_0 = @echo " CCLD " $@; -am__v_CCLD_1 = -SOURCES = $(libwebpdemux_la_SOURCES) -DIST_SOURCES = $(libwebpdemux_la_SOURCES) -am__can_run_installinfo = \ - case $$AM_UPDATE_INFO_DIR in \ - n|no|NO) false;; \ - *) (install-info --version) >/dev/null 2>&1;; \ - esac -DATA = $(pkgconfig_DATA) -HEADERS = $(libwebpdemuxinclude_HEADERS) $(noinst_HEADERS) -am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) -# Read a list of newline-separated strings from the standard input, -# and print each of them once, without duplicates. Input order is -# *not* preserved. -am__uniquify_input = $(AWK) '\ - BEGIN { nonempty = 0; } \ - { items[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in items) print i; }; } \ -' -# Make sure the list of sources is unique. This is necessary because, -# e.g., the same source file might be shared among _SOURCES variables -# for different programs/libraries. -am__define_uniq_tagged_files = \ - list='$(am__tagged_files)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | $(am__uniquify_input)` -ETAGS = etags -CTAGS = ctags -am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/libwebpdemux.pc.in \ - $(top_srcdir)/depcomp -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = @ACLOCAL@ -AMTAR = @AMTAR@ -AM_CFLAGS = @AM_CFLAGS@ -AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_builddir) -I$(top_srcdir) -AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ -AR = @AR@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -CC = @CC@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -DLLTOOL = @DLLTOOL@ -DSYMUTIL = @DSYMUTIL@ -DUMPBIN = @DUMPBIN@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -FGREP = @FGREP@ -GIF_INCLUDES = @GIF_INCLUDES@ -GIF_LIBS = @GIF_LIBS@ -GL_INCLUDES = @GL_INCLUDES@ -GL_LIBS = @GL_LIBS@ -GREP = @GREP@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -JPEG_INCLUDES = @JPEG_INCLUDES@ -JPEG_LIBS = @JPEG_LIBS@ -LD = @LD@ -LDFLAGS = @LDFLAGS@ -LIBOBJS = @LIBOBJS@ -LIBPNG_CONFIG = @LIBPNG_CONFIG@ -LIBS = @LIBS@ -LIBSDL_CONFIG = @LIBSDL_CONFIG@ -LIBTOOL = @LIBTOOL@ -LIPO = @LIPO@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ -MAKEINFO = @MAKEINFO@ -MANIFEST_TOOL = @MANIFEST_TOOL@ -MKDIR_P = @MKDIR_P@ -NEON_FLAGS = @NEON_FLAGS@ -NM = @NM@ -NMEDIT = @NMEDIT@ -OBJDUMP = @OBJDUMP@ -OBJEXT = @OBJEXT@ -OTOOL = @OTOOL@ -OTOOL64 = @OTOOL64@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_URL = @PACKAGE_URL@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -PNG_INCLUDES = @PNG_INCLUDES@ -PNG_LIBS = @PNG_LIBS@ -PTHREAD_CC = @PTHREAD_CC@ -PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ -PTHREAD_LIBS = @PTHREAD_LIBS@ -RANLIB = @RANLIB@ -SDL_INCLUDES = @SDL_INCLUDES@ -SDL_LIBS = @SDL_LIBS@ -SED = @SED@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -SSE2_FLAGS = @SSE2_FLAGS@ -SSE41_FLAGS = @SSE41_FLAGS@ -STRIP = @STRIP@ -TIFF_INCLUDES = @TIFF_INCLUDES@ -TIFF_LIBS = @TIFF_LIBS@ -USE_SWAP_16BIT_CSP = @USE_SWAP_16BIT_CSP@ -VERSION = @VERSION@ -abs_builddir = @abs_builddir@ -abs_srcdir = @abs_srcdir@ -abs_top_builddir = @abs_top_builddir@ -abs_top_srcdir = @abs_top_srcdir@ -ac_ct_AR = @ac_ct_AR@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ -am__include = @am__include@ -am__leading_dot = @am__leading_dot@ -am__quote = @am__quote@ -am__tar = @am__tar@ -am__untar = @am__untar@ -ax_pthread_config = @ax_pthread_config@ -bindir = @bindir@ -build = @build@ -build_alias = @build_alias@ -build_cpu = @build_cpu@ -build_os = @build_os@ -build_vendor = @build_vendor@ -builddir = @builddir@ -datadir = @datadir@ -datarootdir = @datarootdir@ -docdir = @docdir@ -dvidir = @dvidir@ -exec_prefix = @exec_prefix@ -host = @host@ -host_alias = @host_alias@ -host_cpu = @host_cpu@ -host_os = @host_os@ -host_vendor = @host_vendor@ -htmldir = @htmldir@ -includedir = @includedir@ -infodir = @infodir@ -install_sh = @install_sh@ -libdir = @libdir@ -libexecdir = @libexecdir@ -localedir = @localedir@ -localstatedir = @localstatedir@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -oldincludedir = @oldincludedir@ -pdfdir = @pdfdir@ -pkgconfigdir = @pkgconfigdir@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -psdir = @psdir@ -runstatedir = @runstatedir@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -srcdir = @srcdir@ -sysconfdir = @sysconfdir@ -target_alias = @target_alias@ -top_build_prefix = @top_build_prefix@ -top_builddir = @top_builddir@ -top_srcdir = @top_srcdir@ -lib_LTLIBRARIES = libwebpdemux.la -libwebpdemux_la_SOURCES = anim_decode.c demux.c -libwebpdemuxinclude_HEADERS = ../webp/decode.h ../webp/demux.h \ - ../webp/mux_types.h ../webp/types.h -noinst_HEADERS = ../webp/format_constants.h -libwebpdemux_la_LIBADD = ../libwebp.la -libwebpdemux_la_LDFLAGS = -no-undefined -version-info 2:6:0 -libwebpdemuxincludedir = $(includedir)/webp -pkgconfig_DATA = libwebpdemux.pc -all: all-am - -.SUFFIXES: -.SUFFIXES: .c .lo .o .obj -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ - && { if test -f $@; then exit 0; else break; fi; }; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/demux/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --foreign src/demux/Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(am__aclocal_m4_deps): -libwebpdemux.pc: $(top_builddir)/config.status $(srcdir)/libwebpdemux.pc.in - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ - -install-libLTLIBRARIES: $(lib_LTLIBRARIES) - @$(NORMAL_INSTALL) - @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ - list2=; for p in $$list; do \ - if test -f $$p; then \ - list2="$$list2 $$p"; \ - else :; fi; \ - done; \ - test -z "$$list2" || { \ - echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ - $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ - echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ - $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ - } - -uninstall-libLTLIBRARIES: - @$(NORMAL_UNINSTALL) - @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ - for p in $$list; do \ - $(am__strip_dir) \ - echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ - $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ - done - -clean-libLTLIBRARIES: - -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) - @list='$(lib_LTLIBRARIES)'; \ - locs=`for p in $$list; do echo $$p; done | \ - sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ - sort -u`; \ - test -z "$$locs" || { \ - echo rm -f $${locs}; \ - rm -f $${locs}; \ - } - -libwebpdemux.la: $(libwebpdemux_la_OBJECTS) $(libwebpdemux_la_DEPENDENCIES) $(EXTRA_libwebpdemux_la_DEPENDENCIES) - $(AM_V_CCLD)$(libwebpdemux_la_LINK) -rpath $(libdir) $(libwebpdemux_la_OBJECTS) $(libwebpdemux_la_LIBADD) $(LIBS) - -mostlyclean-compile: - -rm -f *.$(OBJEXT) - -distclean-compile: - -rm -f *.tab.c - -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/anim_decode.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/demux.Plo@am__quote@ # am--include-marker - -$(am__depfiles_remade): - @$(MKDIR_P) $(@D) - @echo '# dummy' >$@-t && $(am__mv) $@-t $@ - -am--depfiles: $(am__depfiles_remade) - -.c.o: -@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ -@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ -@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< - -.c.obj: -@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ -@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ -@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` - -.c.lo: -@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ -@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ -@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs -install-pkgconfigDATA: $(pkgconfig_DATA) - @$(NORMAL_INSTALL) - @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ - if test -n "$$list"; then \ - echo " $(MKDIR_P) '$(DESTDIR)$(pkgconfigdir)'"; \ - $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)" || exit 1; \ - fi; \ - for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - echo "$$d$$p"; \ - done | $(am__base_list) | \ - while read files; do \ - echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgconfigdir)'"; \ - $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \ - done - -uninstall-pkgconfigDATA: - @$(NORMAL_UNINSTALL) - @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ - files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ - dir='$(DESTDIR)$(pkgconfigdir)'; $(am__uninstall_files_from_dir) -install-libwebpdemuxincludeHEADERS: $(libwebpdemuxinclude_HEADERS) - @$(NORMAL_INSTALL) - @list='$(libwebpdemuxinclude_HEADERS)'; test -n "$(libwebpdemuxincludedir)" || list=; \ - if test -n "$$list"; then \ - echo " $(MKDIR_P) '$(DESTDIR)$(libwebpdemuxincludedir)'"; \ - $(MKDIR_P) "$(DESTDIR)$(libwebpdemuxincludedir)" || exit 1; \ - fi; \ - for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - echo "$$d$$p"; \ - done | $(am__base_list) | \ - while read files; do \ - echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(libwebpdemuxincludedir)'"; \ - $(INSTALL_HEADER) $$files "$(DESTDIR)$(libwebpdemuxincludedir)" || exit $$?; \ - done - -uninstall-libwebpdemuxincludeHEADERS: - @$(NORMAL_UNINSTALL) - @list='$(libwebpdemuxinclude_HEADERS)'; test -n "$(libwebpdemuxincludedir)" || list=; \ - files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ - dir='$(DESTDIR)$(libwebpdemuxincludedir)'; $(am__uninstall_files_from_dir) - -ID: $(am__tagged_files) - $(am__define_uniq_tagged_files); mkid -fID $$unique -tags: tags-am -TAGS: tags - -tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) - set x; \ - here=`pwd`; \ - $(am__define_uniq_tagged_files); \ - shift; \ - if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ - test -n "$$unique" || unique=$$empty_fix; \ - if test $$# -gt 0; then \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - "$$@" $$unique; \ - else \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$unique; \ - fi; \ - fi -ctags: ctags-am - -CTAGS: ctags -ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) - $(am__define_uniq_tagged_files); \ - test -z "$(CTAGS_ARGS)$$unique" \ - || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$unique - -GTAGS: - here=`$(am__cd) $(top_builddir) && pwd` \ - && $(am__cd) $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) "$$here" -cscopelist: cscopelist-am - -cscopelist-am: $(am__tagged_files) - list='$(am__tagged_files)'; \ - case "$(srcdir)" in \ - [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ - *) sdir=$(subdir)/$(srcdir) ;; \ - esac; \ - for i in $$list; do \ - if test -f "$$i"; then \ - echo "$(subdir)/$$i"; \ - else \ - echo "$$sdir/$$i"; \ - fi; \ - done >> $(top_builddir)/cscope.files - -distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - -distdir: $(BUILT_SOURCES) - $(MAKE) $(AM_MAKEFLAGS) distdir-am - -distdir-am: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - list='$(DISTFILES)'; \ - dist_files=`for file in $$list; do echo $$file; done | \ - sed -e "s|^$$srcdirstrip/||;t" \ - -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ - case $$dist_files in \ - */*) $(MKDIR_P) `echo "$$dist_files" | \ - sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ - sort -u` ;; \ - esac; \ - for file in $$dist_files; do \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - if test -d $$d/$$file; then \ - dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test -d "$(distdir)/$$file"; then \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ - else \ - test -f "$(distdir)/$$file" \ - || cp -p $$d/$$file "$(distdir)/$$file" \ - || exit 1; \ - fi; \ - done -check-am: all-am -check: check-am -all-am: Makefile $(LTLIBRARIES) $(DATA) $(HEADERS) -installdirs: - for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(pkgconfigdir)" "$(DESTDIR)$(libwebpdemuxincludedir)"; do \ - test -z "$$dir" || $(MKDIR_P) "$$dir"; \ - done -install: install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-am -install-strip: - if test -z '$(STRIP)'; then \ - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - install; \ - else \ - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ - fi -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-am - -clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ - mostlyclean-am - -distclean: distclean-am - -rm -f ./$(DEPDIR)/anim_decode.Plo - -rm -f ./$(DEPDIR)/demux.Plo - -rm -f Makefile -distclean-am: clean-am distclean-compile distclean-generic \ - distclean-tags - -dvi: dvi-am - -dvi-am: - -html: html-am - -html-am: - -info: info-am - -info-am: - -install-data-am: install-libwebpdemuxincludeHEADERS \ - install-pkgconfigDATA - -install-dvi: install-dvi-am - -install-dvi-am: - -install-exec-am: install-libLTLIBRARIES - -install-html: install-html-am - -install-html-am: - -install-info: install-info-am - -install-info-am: - -install-man: - -install-pdf: install-pdf-am - -install-pdf-am: - -install-ps: install-ps-am - -install-ps-am: - -installcheck-am: - -maintainer-clean: maintainer-clean-am - -rm -f ./$(DEPDIR)/anim_decode.Plo - -rm -f ./$(DEPDIR)/demux.Plo - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-compile mostlyclean-generic \ - mostlyclean-libtool - -pdf: pdf-am - -pdf-am: - -ps: ps-am - -ps-am: - -uninstall-am: uninstall-libLTLIBRARIES \ - uninstall-libwebpdemuxincludeHEADERS uninstall-pkgconfigDATA - -.MAKE: install-am install-strip - -.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ - clean-generic clean-libLTLIBRARIES clean-libtool cscopelist-am \ - ctags ctags-am distclean distclean-compile distclean-generic \ - distclean-libtool distclean-tags distdir dvi dvi-am html \ - html-am info info-am install install-am install-data \ - install-data-am install-dvi install-dvi-am install-exec \ - install-exec-am install-html install-html-am install-info \ - install-info-am install-libLTLIBRARIES \ - install-libwebpdemuxincludeHEADERS install-man install-pdf \ - install-pdf-am install-pkgconfigDATA install-ps install-ps-am \ - install-strip installcheck installcheck-am installdirs \ - maintainer-clean maintainer-clean-generic mostlyclean \ - mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ - pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \ - uninstall-libLTLIBRARIES uninstall-libwebpdemuxincludeHEADERS \ - uninstall-pkgconfigDATA - -.PRECIOUS: Makefile - - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/Extended/libwebp/src/demux/anim_decode.c b/Extended/libwebp/src/demux/anim_decode.c deleted file mode 100644 index 05dd707..0000000 --- a/Extended/libwebp/src/demux/anim_decode.c +++ /dev/null @@ -1,454 +0,0 @@ -// Copyright 2015 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// AnimDecoder implementation. -// - -#ifdef HAVE_CONFIG_H -#include "src/webp/config.h" -#endif - -#include -#include - -#include "src/utils/utils.h" -#include "src/webp/decode.h" -#include "src/webp/demux.h" - -#define NUM_CHANNELS 4 - -typedef void (*BlendRowFunc)(uint32_t* const, const uint32_t* const, int); -static void BlendPixelRowNonPremult(uint32_t* const src, - const uint32_t* const dst, int num_pixels); -static void BlendPixelRowPremult(uint32_t* const src, const uint32_t* const dst, - int num_pixels); - -struct WebPAnimDecoder { - WebPDemuxer* demux_; // Demuxer created from given WebP bitstream. - WebPDecoderConfig config_; // Decoder config. - // Note: we use a pointer to a function blending multiple pixels at a time to - // allow possible inlining of per-pixel blending function. - BlendRowFunc blend_func_; // Pointer to the chose blend row function. - WebPAnimInfo info_; // Global info about the animation. - uint8_t* curr_frame_; // Current canvas (not disposed). - uint8_t* prev_frame_disposed_; // Previous canvas (properly disposed). - int prev_frame_timestamp_; // Previous frame timestamp (milliseconds). - WebPIterator prev_iter_; // Iterator object for previous frame. - int prev_frame_was_keyframe_; // True if previous frame was a keyframe. - int next_frame_; // Index of the next frame to be decoded - // (starting from 1). -}; - -static void DefaultDecoderOptions(WebPAnimDecoderOptions* const dec_options) { - dec_options->color_mode = MODE_RGBA; - dec_options->use_threads = 0; -} - -int WebPAnimDecoderOptionsInitInternal(WebPAnimDecoderOptions* dec_options, - int abi_version) { - if (dec_options == NULL || - WEBP_ABI_IS_INCOMPATIBLE(abi_version, WEBP_DEMUX_ABI_VERSION)) { - return 0; - } - DefaultDecoderOptions(dec_options); - return 1; -} - -static int ApplyDecoderOptions(const WebPAnimDecoderOptions* const dec_options, - WebPAnimDecoder* const dec) { - WEBP_CSP_MODE mode; - WebPDecoderConfig* config = &dec->config_; - assert(dec_options != NULL); - - mode = dec_options->color_mode; - if (mode != MODE_RGBA && mode != MODE_BGRA && - mode != MODE_rgbA && mode != MODE_bgrA) { - return 0; - } - dec->blend_func_ = (mode == MODE_RGBA || mode == MODE_BGRA) - ? &BlendPixelRowNonPremult - : &BlendPixelRowPremult; - WebPInitDecoderConfig(config); - config->output.colorspace = mode; - config->output.is_external_memory = 1; - config->options.use_threads = dec_options->use_threads; - // Note: config->output.u.RGBA is set at the time of decoding each frame. - return 1; -} - -WebPAnimDecoder* WebPAnimDecoderNewInternal( - const WebPData* webp_data, const WebPAnimDecoderOptions* dec_options, - int abi_version) { - WebPAnimDecoderOptions options; - WebPAnimDecoder* dec = NULL; - if (webp_data == NULL || - WEBP_ABI_IS_INCOMPATIBLE(abi_version, WEBP_DEMUX_ABI_VERSION)) { - return NULL; - } - - // Note: calloc() so that the pointer members are initialized to NULL. - dec = (WebPAnimDecoder*)WebPSafeCalloc(1ULL, sizeof(*dec)); - if (dec == NULL) goto Error; - - if (dec_options != NULL) { - options = *dec_options; - } else { - DefaultDecoderOptions(&options); - } - if (!ApplyDecoderOptions(&options, dec)) goto Error; - - dec->demux_ = WebPDemux(webp_data); - if (dec->demux_ == NULL) goto Error; - - dec->info_.canvas_width = WebPDemuxGetI(dec->demux_, WEBP_FF_CANVAS_WIDTH); - dec->info_.canvas_height = WebPDemuxGetI(dec->demux_, WEBP_FF_CANVAS_HEIGHT); - dec->info_.loop_count = WebPDemuxGetI(dec->demux_, WEBP_FF_LOOP_COUNT); - dec->info_.bgcolor = WebPDemuxGetI(dec->demux_, WEBP_FF_BACKGROUND_COLOR); - dec->info_.frame_count = WebPDemuxGetI(dec->demux_, WEBP_FF_FRAME_COUNT); - - // Note: calloc() because we fill frame with zeroes as well. - dec->curr_frame_ = (uint8_t*)WebPSafeCalloc( - dec->info_.canvas_width * NUM_CHANNELS, dec->info_.canvas_height); - if (dec->curr_frame_ == NULL) goto Error; - dec->prev_frame_disposed_ = (uint8_t*)WebPSafeCalloc( - dec->info_.canvas_width * NUM_CHANNELS, dec->info_.canvas_height); - if (dec->prev_frame_disposed_ == NULL) goto Error; - - WebPAnimDecoderReset(dec); - return dec; - - Error: - WebPAnimDecoderDelete(dec); - return NULL; -} - -int WebPAnimDecoderGetInfo(const WebPAnimDecoder* dec, WebPAnimInfo* info) { - if (dec == NULL || info == NULL) return 0; - *info = dec->info_; - return 1; -} - -// Returns true if the frame covers the full canvas. -static int IsFullFrame(int width, int height, int canvas_width, - int canvas_height) { - return (width == canvas_width && height == canvas_height); -} - -// Clear the canvas to transparent. -static int ZeroFillCanvas(uint8_t* buf, uint32_t canvas_width, - uint32_t canvas_height) { - const uint64_t size = - (uint64_t)canvas_width * canvas_height * NUM_CHANNELS * sizeof(*buf); - if (size != (size_t)size) return 0; - memset(buf, 0, (size_t)size); - return 1; -} - -// Clear given frame rectangle to transparent. -static void ZeroFillFrameRect(uint8_t* buf, int buf_stride, int x_offset, - int y_offset, int width, int height) { - int j; - assert(width * NUM_CHANNELS <= buf_stride); - buf += y_offset * buf_stride + x_offset * NUM_CHANNELS; - for (j = 0; j < height; ++j) { - memset(buf, 0, width * NUM_CHANNELS); - buf += buf_stride; - } -} - -// Copy width * height pixels from 'src' to 'dst'. -static int CopyCanvas(const uint8_t* src, uint8_t* dst, - uint32_t width, uint32_t height) { - const uint64_t size = (uint64_t)width * height * NUM_CHANNELS; - if (size != (size_t)size) return 0; - assert(src != NULL && dst != NULL); - memcpy(dst, src, (size_t)size); - return 1; -} - -// Returns true if the current frame is a key-frame. -static int IsKeyFrame(const WebPIterator* const curr, - const WebPIterator* const prev, - int prev_frame_was_key_frame, - int canvas_width, int canvas_height) { - if (curr->frame_num == 1) { - return 1; - } else if ((!curr->has_alpha || curr->blend_method == WEBP_MUX_NO_BLEND) && - IsFullFrame(curr->width, curr->height, - canvas_width, canvas_height)) { - return 1; - } else { - return (prev->dispose_method == WEBP_MUX_DISPOSE_BACKGROUND) && - (IsFullFrame(prev->width, prev->height, canvas_width, - canvas_height) || - prev_frame_was_key_frame); - } -} - - -// Blend a single channel of 'src' over 'dst', given their alpha channel values. -// 'src' and 'dst' are assumed to be NOT pre-multiplied by alpha. -static uint8_t BlendChannelNonPremult(uint32_t src, uint8_t src_a, - uint32_t dst, uint8_t dst_a, - uint32_t scale, int shift) { - const uint8_t src_channel = (src >> shift) & 0xff; - const uint8_t dst_channel = (dst >> shift) & 0xff; - const uint32_t blend_unscaled = src_channel * src_a + dst_channel * dst_a; - assert(blend_unscaled < (1ULL << 32) / scale); - return (blend_unscaled * scale) >> 24; -} - -// Blend 'src' over 'dst' assuming they are NOT pre-multiplied by alpha. -static uint32_t BlendPixelNonPremult(uint32_t src, uint32_t dst) { - const uint8_t src_a = (src >> 24) & 0xff; - - if (src_a == 0) { - return dst; - } else { - const uint8_t dst_a = (dst >> 24) & 0xff; - // This is the approximate integer arithmetic for the actual formula: - // dst_factor_a = (dst_a * (255 - src_a)) / 255. - const uint8_t dst_factor_a = (dst_a * (256 - src_a)) >> 8; - const uint8_t blend_a = src_a + dst_factor_a; - const uint32_t scale = (1UL << 24) / blend_a; - - const uint8_t blend_r = - BlendChannelNonPremult(src, src_a, dst, dst_factor_a, scale, 0); - const uint8_t blend_g = - BlendChannelNonPremult(src, src_a, dst, dst_factor_a, scale, 8); - const uint8_t blend_b = - BlendChannelNonPremult(src, src_a, dst, dst_factor_a, scale, 16); - assert(src_a + dst_factor_a < 256); - - return (blend_r << 0) | - (blend_g << 8) | - (blend_b << 16) | - ((uint32_t)blend_a << 24); - } -} - -// Blend 'num_pixels' in 'src' over 'dst' assuming they are NOT pre-multiplied -// by alpha. -static void BlendPixelRowNonPremult(uint32_t* const src, - const uint32_t* const dst, int num_pixels) { - int i; - for (i = 0; i < num_pixels; ++i) { - const uint8_t src_alpha = (src[i] >> 24) & 0xff; - if (src_alpha != 0xff) { - src[i] = BlendPixelNonPremult(src[i], dst[i]); - } - } -} - -// Individually multiply each channel in 'pix' by 'scale'. -static WEBP_INLINE uint32_t ChannelwiseMultiply(uint32_t pix, uint32_t scale) { - uint32_t mask = 0x00FF00FF; - uint32_t rb = ((pix & mask) * scale) >> 8; - uint32_t ag = ((pix >> 8) & mask) * scale; - return (rb & mask) | (ag & ~mask); -} - -// Blend 'src' over 'dst' assuming they are pre-multiplied by alpha. -static uint32_t BlendPixelPremult(uint32_t src, uint32_t dst) { - const uint8_t src_a = (src >> 24) & 0xff; - return src + ChannelwiseMultiply(dst, 256 - src_a); -} - -// Blend 'num_pixels' in 'src' over 'dst' assuming they are pre-multiplied by -// alpha. -static void BlendPixelRowPremult(uint32_t* const src, const uint32_t* const dst, - int num_pixels) { - int i; - for (i = 0; i < num_pixels; ++i) { - const uint8_t src_alpha = (src[i] >> 24) & 0xff; - if (src_alpha != 0xff) { - src[i] = BlendPixelPremult(src[i], dst[i]); - } - } -} - -// Returns two ranges ( pairs) at row 'canvas_y', that belong to -// 'src' but not 'dst'. A point range is empty if the corresponding width is 0. -static void FindBlendRangeAtRow(const WebPIterator* const src, - const WebPIterator* const dst, int canvas_y, - int* const left1, int* const width1, - int* const left2, int* const width2) { - const int src_max_x = src->x_offset + src->width; - const int dst_max_x = dst->x_offset + dst->width; - const int dst_max_y = dst->y_offset + dst->height; - assert(canvas_y >= src->y_offset && canvas_y < (src->y_offset + src->height)); - *left1 = -1; - *width1 = 0; - *left2 = -1; - *width2 = 0; - - if (canvas_y < dst->y_offset || canvas_y >= dst_max_y || - src->x_offset >= dst_max_x || src_max_x <= dst->x_offset) { - *left1 = src->x_offset; - *width1 = src->width; - return; - } - - if (src->x_offset < dst->x_offset) { - *left1 = src->x_offset; - *width1 = dst->x_offset - src->x_offset; - } - - if (src_max_x > dst_max_x) { - *left2 = dst_max_x; - *width2 = src_max_x - dst_max_x; - } -} - -int WebPAnimDecoderGetNext(WebPAnimDecoder* dec, - uint8_t** buf_ptr, int* timestamp_ptr) { - WebPIterator iter; - uint32_t width; - uint32_t height; - int is_key_frame; - int timestamp; - BlendRowFunc blend_row; - - if (dec == NULL || buf_ptr == NULL || timestamp_ptr == NULL) return 0; - if (!WebPAnimDecoderHasMoreFrames(dec)) return 0; - - width = dec->info_.canvas_width; - height = dec->info_.canvas_height; - blend_row = dec->blend_func_; - - // Get compressed frame. - if (!WebPDemuxGetFrame(dec->demux_, dec->next_frame_, &iter)) { - return 0; - } - timestamp = dec->prev_frame_timestamp_ + iter.duration; - - // Initialize. - is_key_frame = IsKeyFrame(&iter, &dec->prev_iter_, - dec->prev_frame_was_keyframe_, width, height); - if (is_key_frame) { - if (!ZeroFillCanvas(dec->curr_frame_, width, height)) { - goto Error; - } - } else { - if (!CopyCanvas(dec->prev_frame_disposed_, dec->curr_frame_, - width, height)) { - goto Error; - } - } - - // Decode. - { - const uint8_t* in = iter.fragment.bytes; - const size_t in_size = iter.fragment.size; - const size_t out_offset = - (iter.y_offset * width + iter.x_offset) * NUM_CHANNELS; - WebPDecoderConfig* const config = &dec->config_; - WebPRGBABuffer* const buf = &config->output.u.RGBA; - buf->stride = NUM_CHANNELS * width; - buf->size = buf->stride * iter.height; - buf->rgba = dec->curr_frame_ + out_offset; - - if (WebPDecode(in, in_size, config) != VP8_STATUS_OK) { - goto Error; - } - } - - // During the decoding of current frame, we may have set some pixels to be - // transparent (i.e. alpha < 255). However, the value of each of these - // pixels should have been determined by blending it against the value of - // that pixel in the previous frame if blending method of is WEBP_MUX_BLEND. - if (iter.frame_num > 1 && iter.blend_method == WEBP_MUX_BLEND && - !is_key_frame) { - if (dec->prev_iter_.dispose_method == WEBP_MUX_DISPOSE_NONE) { - int y; - // Blend transparent pixels with pixels in previous canvas. - for (y = 0; y < iter.height; ++y) { - const size_t offset = - (iter.y_offset + y) * width + iter.x_offset; - blend_row((uint32_t*)dec->curr_frame_ + offset, - (uint32_t*)dec->prev_frame_disposed_ + offset, iter.width); - } - } else { - int y; - assert(dec->prev_iter_.dispose_method == WEBP_MUX_DISPOSE_BACKGROUND); - // We need to blend a transparent pixel with its value just after - // initialization. That is, blend it with: - // * Fully transparent pixel if it belongs to prevRect <-- No-op. - // * The pixel in the previous canvas otherwise <-- Need alpha-blending. - for (y = 0; y < iter.height; ++y) { - const int canvas_y = iter.y_offset + y; - int left1, width1, left2, width2; - FindBlendRangeAtRow(&iter, &dec->prev_iter_, canvas_y, &left1, &width1, - &left2, &width2); - if (width1 > 0) { - const size_t offset1 = canvas_y * width + left1; - blend_row((uint32_t*)dec->curr_frame_ + offset1, - (uint32_t*)dec->prev_frame_disposed_ + offset1, width1); - } - if (width2 > 0) { - const size_t offset2 = canvas_y * width + left2; - blend_row((uint32_t*)dec->curr_frame_ + offset2, - (uint32_t*)dec->prev_frame_disposed_ + offset2, width2); - } - } - } - } - - // Update info of the previous frame and dispose it for the next iteration. - dec->prev_frame_timestamp_ = timestamp; - WebPDemuxReleaseIterator(&dec->prev_iter_); - dec->prev_iter_ = iter; - dec->prev_frame_was_keyframe_ = is_key_frame; - CopyCanvas(dec->curr_frame_, dec->prev_frame_disposed_, width, height); - if (dec->prev_iter_.dispose_method == WEBP_MUX_DISPOSE_BACKGROUND) { - ZeroFillFrameRect(dec->prev_frame_disposed_, width * NUM_CHANNELS, - dec->prev_iter_.x_offset, dec->prev_iter_.y_offset, - dec->prev_iter_.width, dec->prev_iter_.height); - } - ++dec->next_frame_; - - // All OK, fill in the values. - *buf_ptr = dec->curr_frame_; - *timestamp_ptr = timestamp; - return 1; - - Error: - WebPDemuxReleaseIterator(&iter); - return 0; -} - -int WebPAnimDecoderHasMoreFrames(const WebPAnimDecoder* dec) { - if (dec == NULL) return 0; - return (dec->next_frame_ <= (int)dec->info_.frame_count); -} - -void WebPAnimDecoderReset(WebPAnimDecoder* dec) { - if (dec != NULL) { - dec->prev_frame_timestamp_ = 0; - WebPDemuxReleaseIterator(&dec->prev_iter_); - memset(&dec->prev_iter_, 0, sizeof(dec->prev_iter_)); - dec->prev_frame_was_keyframe_ = 0; - dec->next_frame_ = 1; - } -} - -const WebPDemuxer* WebPAnimDecoderGetDemuxer(const WebPAnimDecoder* dec) { - if (dec == NULL) return NULL; - return dec->demux_; -} - -void WebPAnimDecoderDelete(WebPAnimDecoder* dec) { - if (dec != NULL) { - WebPDemuxReleaseIterator(&dec->prev_iter_); - WebPDemuxDelete(dec->demux_); - WebPSafeFree(dec->curr_frame_); - WebPSafeFree(dec->prev_frame_disposed_); - WebPSafeFree(dec); - } -} diff --git a/Extended/libwebp/src/demux/demux.c b/Extended/libwebp/src/demux/demux.c deleted file mode 100644 index 1b3cc2e..0000000 --- a/Extended/libwebp/src/demux/demux.c +++ /dev/null @@ -1,967 +0,0 @@ -// Copyright 2012 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// WebP container demux. -// - -#ifdef HAVE_CONFIG_H -#include "src/webp/config.h" -#endif - -#include -#include -#include - -#include "src/utils/utils.h" -#include "src/webp/decode.h" // WebPGetFeatures -#include "src/webp/demux.h" -#include "src/webp/format_constants.h" - -#define DMUX_MAJ_VERSION 1 -#define DMUX_MIN_VERSION 1 -#define DMUX_REV_VERSION 0 - -typedef struct { - size_t start_; // start location of the data - size_t end_; // end location - size_t riff_end_; // riff chunk end location, can be > end_. - size_t buf_size_; // size of the buffer - const uint8_t* buf_; -} MemBuffer; - -typedef struct { - size_t offset_; - size_t size_; -} ChunkData; - -typedef struct Frame { - int x_offset_, y_offset_; - int width_, height_; - int has_alpha_; - int duration_; - WebPMuxAnimDispose dispose_method_; - WebPMuxAnimBlend blend_method_; - int frame_num_; - int complete_; // img_components_ contains a full image. - ChunkData img_components_[2]; // 0=VP8{,L} 1=ALPH - struct Frame* next_; -} Frame; - -typedef struct Chunk { - ChunkData data_; - struct Chunk* next_; -} Chunk; - -struct WebPDemuxer { - MemBuffer mem_; - WebPDemuxState state_; - int is_ext_format_; - uint32_t feature_flags_; - int canvas_width_, canvas_height_; - int loop_count_; - uint32_t bgcolor_; - int num_frames_; - Frame* frames_; - Frame** frames_tail_; - Chunk* chunks_; // non-image chunks - Chunk** chunks_tail_; -}; - -typedef enum { - PARSE_OK, - PARSE_NEED_MORE_DATA, - PARSE_ERROR -} ParseStatus; - -typedef struct ChunkParser { - uint8_t id[4]; - ParseStatus (*parse)(WebPDemuxer* const dmux); - int (*valid)(const WebPDemuxer* const dmux); -} ChunkParser; - -static ParseStatus ParseSingleImage(WebPDemuxer* const dmux); -static ParseStatus ParseVP8X(WebPDemuxer* const dmux); -static int IsValidSimpleFormat(const WebPDemuxer* const dmux); -static int IsValidExtendedFormat(const WebPDemuxer* const dmux); - -static const ChunkParser kMasterChunks[] = { - { { 'V', 'P', '8', ' ' }, ParseSingleImage, IsValidSimpleFormat }, - { { 'V', 'P', '8', 'L' }, ParseSingleImage, IsValidSimpleFormat }, - { { 'V', 'P', '8', 'X' }, ParseVP8X, IsValidExtendedFormat }, - { { '0', '0', '0', '0' }, NULL, NULL }, -}; - -//------------------------------------------------------------------------------ - -int WebPGetDemuxVersion(void) { - return (DMUX_MAJ_VERSION << 16) | (DMUX_MIN_VERSION << 8) | DMUX_REV_VERSION; -} - -// ----------------------------------------------------------------------------- -// MemBuffer - -static int RemapMemBuffer(MemBuffer* const mem, - const uint8_t* data, size_t size) { - if (size < mem->buf_size_) return 0; // can't remap to a shorter buffer! - - mem->buf_ = data; - mem->end_ = mem->buf_size_ = size; - return 1; -} - -static int InitMemBuffer(MemBuffer* const mem, - const uint8_t* data, size_t size) { - memset(mem, 0, sizeof(*mem)); - return RemapMemBuffer(mem, data, size); -} - -// Return the remaining data size available in 'mem'. -static WEBP_INLINE size_t MemDataSize(const MemBuffer* const mem) { - return (mem->end_ - mem->start_); -} - -// Return true if 'size' exceeds the end of the RIFF chunk. -static WEBP_INLINE int SizeIsInvalid(const MemBuffer* const mem, size_t size) { - return (size > mem->riff_end_ - mem->start_); -} - -static WEBP_INLINE void Skip(MemBuffer* const mem, size_t size) { - mem->start_ += size; -} - -static WEBP_INLINE void Rewind(MemBuffer* const mem, size_t size) { - mem->start_ -= size; -} - -static WEBP_INLINE const uint8_t* GetBuffer(MemBuffer* const mem) { - return mem->buf_ + mem->start_; -} - -// Read from 'mem' and skip the read bytes. -static WEBP_INLINE uint8_t ReadByte(MemBuffer* const mem) { - const uint8_t byte = mem->buf_[mem->start_]; - Skip(mem, 1); - return byte; -} - -static WEBP_INLINE int ReadLE16s(MemBuffer* const mem) { - const uint8_t* const data = mem->buf_ + mem->start_; - const int val = GetLE16(data); - Skip(mem, 2); - return val; -} - -static WEBP_INLINE int ReadLE24s(MemBuffer* const mem) { - const uint8_t* const data = mem->buf_ + mem->start_; - const int val = GetLE24(data); - Skip(mem, 3); - return val; -} - -static WEBP_INLINE uint32_t ReadLE32(MemBuffer* const mem) { - const uint8_t* const data = mem->buf_ + mem->start_; - const uint32_t val = GetLE32(data); - Skip(mem, 4); - return val; -} - -// ----------------------------------------------------------------------------- -// Secondary chunk parsing - -static void AddChunk(WebPDemuxer* const dmux, Chunk* const chunk) { - *dmux->chunks_tail_ = chunk; - chunk->next_ = NULL; - dmux->chunks_tail_ = &chunk->next_; -} - -// Add a frame to the end of the list, ensuring the last frame is complete. -// Returns true on success, false otherwise. -static int AddFrame(WebPDemuxer* const dmux, Frame* const frame) { - const Frame* const last_frame = *dmux->frames_tail_; - if (last_frame != NULL && !last_frame->complete_) return 0; - - *dmux->frames_tail_ = frame; - frame->next_ = NULL; - dmux->frames_tail_ = &frame->next_; - return 1; -} - -static void SetFrameInfo(size_t start_offset, size_t size, - int frame_num, int complete, - const WebPBitstreamFeatures* const features, - Frame* const frame) { - frame->img_components_[0].offset_ = start_offset; - frame->img_components_[0].size_ = size; - frame->width_ = features->width; - frame->height_ = features->height; - frame->has_alpha_ |= features->has_alpha; - frame->frame_num_ = frame_num; - frame->complete_ = complete; -} - -// Store image bearing chunks to 'frame'. 'min_size' is an optional size -// requirement, it may be zero. -static ParseStatus StoreFrame(int frame_num, uint32_t min_size, - MemBuffer* const mem, Frame* const frame) { - int alpha_chunks = 0; - int image_chunks = 0; - int done = (MemDataSize(mem) < CHUNK_HEADER_SIZE || - MemDataSize(mem) < min_size); - ParseStatus status = PARSE_OK; - - if (done) return PARSE_NEED_MORE_DATA; - - do { - const size_t chunk_start_offset = mem->start_; - const uint32_t fourcc = ReadLE32(mem); - const uint32_t payload_size = ReadLE32(mem); - const uint32_t payload_size_padded = payload_size + (payload_size & 1); - const size_t payload_available = (payload_size_padded > MemDataSize(mem)) - ? MemDataSize(mem) : payload_size_padded; - const size_t chunk_size = CHUNK_HEADER_SIZE + payload_available; - - if (payload_size > MAX_CHUNK_PAYLOAD) return PARSE_ERROR; - if (SizeIsInvalid(mem, payload_size_padded)) return PARSE_ERROR; - if (payload_size_padded > MemDataSize(mem)) status = PARSE_NEED_MORE_DATA; - - switch (fourcc) { - case MKFOURCC('A', 'L', 'P', 'H'): - if (alpha_chunks == 0) { - ++alpha_chunks; - frame->img_components_[1].offset_ = chunk_start_offset; - frame->img_components_[1].size_ = chunk_size; - frame->has_alpha_ = 1; - frame->frame_num_ = frame_num; - Skip(mem, payload_available); - } else { - goto Done; - } - break; - case MKFOURCC('V', 'P', '8', 'L'): - if (alpha_chunks > 0) return PARSE_ERROR; // VP8L has its own alpha - // fall through - case MKFOURCC('V', 'P', '8', ' '): - if (image_chunks == 0) { - // Extract the bitstream features, tolerating failures when the data - // is incomplete. - WebPBitstreamFeatures features; - const VP8StatusCode vp8_status = - WebPGetFeatures(mem->buf_ + chunk_start_offset, chunk_size, - &features); - if (status == PARSE_NEED_MORE_DATA && - vp8_status == VP8_STATUS_NOT_ENOUGH_DATA) { - return PARSE_NEED_MORE_DATA; - } else if (vp8_status != VP8_STATUS_OK) { - // We have enough data, and yet WebPGetFeatures() failed. - return PARSE_ERROR; - } - ++image_chunks; - SetFrameInfo(chunk_start_offset, chunk_size, frame_num, - status == PARSE_OK, &features, frame); - Skip(mem, payload_available); - } else { - goto Done; - } - break; - Done: - default: - // Restore fourcc/size when moving up one level in parsing. - Rewind(mem, CHUNK_HEADER_SIZE); - done = 1; - break; - } - - if (mem->start_ == mem->riff_end_) { - done = 1; - } else if (MemDataSize(mem) < CHUNK_HEADER_SIZE) { - status = PARSE_NEED_MORE_DATA; - } - } while (!done && status == PARSE_OK); - - return status; -} - -// Creates a new Frame if 'actual_size' is within bounds and 'mem' contains -// enough data ('min_size') to parse the payload. -// Returns PARSE_OK on success with *frame pointing to the new Frame. -// Returns PARSE_NEED_MORE_DATA with insufficient data, PARSE_ERROR otherwise. -static ParseStatus NewFrame(const MemBuffer* const mem, - uint32_t min_size, uint32_t actual_size, - Frame** frame) { - if (SizeIsInvalid(mem, min_size)) return PARSE_ERROR; - if (actual_size < min_size) return PARSE_ERROR; - if (MemDataSize(mem) < min_size) return PARSE_NEED_MORE_DATA; - - *frame = (Frame*)WebPSafeCalloc(1ULL, sizeof(**frame)); - return (*frame == NULL) ? PARSE_ERROR : PARSE_OK; -} - -// Parse a 'ANMF' chunk and any image bearing chunks that immediately follow. -// 'frame_chunk_size' is the previously validated, padded chunk size. -static ParseStatus ParseAnimationFrame( - WebPDemuxer* const dmux, uint32_t frame_chunk_size) { - const int is_animation = !!(dmux->feature_flags_ & ANIMATION_FLAG); - const uint32_t anmf_payload_size = frame_chunk_size - ANMF_CHUNK_SIZE; - int added_frame = 0; - int bits; - MemBuffer* const mem = &dmux->mem_; - Frame* frame; - ParseStatus status = - NewFrame(mem, ANMF_CHUNK_SIZE, frame_chunk_size, &frame); - if (status != PARSE_OK) return status; - - frame->x_offset_ = 2 * ReadLE24s(mem); - frame->y_offset_ = 2 * ReadLE24s(mem); - frame->width_ = 1 + ReadLE24s(mem); - frame->height_ = 1 + ReadLE24s(mem); - frame->duration_ = ReadLE24s(mem); - bits = ReadByte(mem); - frame->dispose_method_ = - (bits & 1) ? WEBP_MUX_DISPOSE_BACKGROUND : WEBP_MUX_DISPOSE_NONE; - frame->blend_method_ = (bits & 2) ? WEBP_MUX_NO_BLEND : WEBP_MUX_BLEND; - if (frame->width_ * (uint64_t)frame->height_ >= MAX_IMAGE_AREA) { - WebPSafeFree(frame); - return PARSE_ERROR; - } - - // Store a frame only if the animation flag is set there is some data for - // this frame is available. - status = StoreFrame(dmux->num_frames_ + 1, anmf_payload_size, mem, frame); - if (status != PARSE_ERROR && is_animation && frame->frame_num_ > 0) { - added_frame = AddFrame(dmux, frame); - if (added_frame) { - ++dmux->num_frames_; - } else { - status = PARSE_ERROR; - } - } - - if (!added_frame) WebPSafeFree(frame); - return status; -} - -// General chunk storage, starting with the header at 'start_offset', allowing -// the user to request the payload via a fourcc string. 'size' includes the -// header and the unpadded payload size. -// Returns true on success, false otherwise. -static int StoreChunk(WebPDemuxer* const dmux, - size_t start_offset, uint32_t size) { - Chunk* const chunk = (Chunk*)WebPSafeCalloc(1ULL, sizeof(*chunk)); - if (chunk == NULL) return 0; - - chunk->data_.offset_ = start_offset; - chunk->data_.size_ = size; - AddChunk(dmux, chunk); - return 1; -} - -// ----------------------------------------------------------------------------- -// Primary chunk parsing - -static ParseStatus ReadHeader(MemBuffer* const mem) { - const size_t min_size = RIFF_HEADER_SIZE + CHUNK_HEADER_SIZE; - uint32_t riff_size; - - // Basic file level validation. - if (MemDataSize(mem) < min_size) return PARSE_NEED_MORE_DATA; - if (memcmp(GetBuffer(mem), "RIFF", CHUNK_SIZE_BYTES) || - memcmp(GetBuffer(mem) + CHUNK_HEADER_SIZE, "WEBP", CHUNK_SIZE_BYTES)) { - return PARSE_ERROR; - } - - riff_size = GetLE32(GetBuffer(mem) + TAG_SIZE); - if (riff_size < CHUNK_HEADER_SIZE) return PARSE_ERROR; - if (riff_size > MAX_CHUNK_PAYLOAD) return PARSE_ERROR; - - // There's no point in reading past the end of the RIFF chunk - mem->riff_end_ = riff_size + CHUNK_HEADER_SIZE; - if (mem->buf_size_ > mem->riff_end_) { - mem->buf_size_ = mem->end_ = mem->riff_end_; - } - - Skip(mem, RIFF_HEADER_SIZE); - return PARSE_OK; -} - -static ParseStatus ParseSingleImage(WebPDemuxer* const dmux) { - const size_t min_size = CHUNK_HEADER_SIZE; - MemBuffer* const mem = &dmux->mem_; - Frame* frame; - ParseStatus status; - int image_added = 0; - - if (dmux->frames_ != NULL) return PARSE_ERROR; - if (SizeIsInvalid(mem, min_size)) return PARSE_ERROR; - if (MemDataSize(mem) < min_size) return PARSE_NEED_MORE_DATA; - - frame = (Frame*)WebPSafeCalloc(1ULL, sizeof(*frame)); - if (frame == NULL) return PARSE_ERROR; - - // For the single image case we allow parsing of a partial frame, so no - // minimum size is imposed here. - status = StoreFrame(1, 0, &dmux->mem_, frame); - if (status != PARSE_ERROR) { - const int has_alpha = !!(dmux->feature_flags_ & ALPHA_FLAG); - // Clear any alpha when the alpha flag is missing. - if (!has_alpha && frame->img_components_[1].size_ > 0) { - frame->img_components_[1].offset_ = 0; - frame->img_components_[1].size_ = 0; - frame->has_alpha_ = 0; - } - - // Use the frame width/height as the canvas values for non-vp8x files. - // Also, set ALPHA_FLAG if this is a lossless image with alpha. - if (!dmux->is_ext_format_ && frame->width_ > 0 && frame->height_ > 0) { - dmux->state_ = WEBP_DEMUX_PARSED_HEADER; - dmux->canvas_width_ = frame->width_; - dmux->canvas_height_ = frame->height_; - dmux->feature_flags_ |= frame->has_alpha_ ? ALPHA_FLAG : 0; - } - if (!AddFrame(dmux, frame)) { - status = PARSE_ERROR; // last frame was left incomplete - } else { - image_added = 1; - dmux->num_frames_ = 1; - } - } - - if (!image_added) WebPSafeFree(frame); - return status; -} - -static ParseStatus ParseVP8XChunks(WebPDemuxer* const dmux) { - const int is_animation = !!(dmux->feature_flags_ & ANIMATION_FLAG); - MemBuffer* const mem = &dmux->mem_; - int anim_chunks = 0; - ParseStatus status = PARSE_OK; - - do { - int store_chunk = 1; - const size_t chunk_start_offset = mem->start_; - const uint32_t fourcc = ReadLE32(mem); - const uint32_t chunk_size = ReadLE32(mem); - const uint32_t chunk_size_padded = chunk_size + (chunk_size & 1); - - if (chunk_size > MAX_CHUNK_PAYLOAD) return PARSE_ERROR; - if (SizeIsInvalid(mem, chunk_size_padded)) return PARSE_ERROR; - - switch (fourcc) { - case MKFOURCC('V', 'P', '8', 'X'): { - return PARSE_ERROR; - } - case MKFOURCC('A', 'L', 'P', 'H'): - case MKFOURCC('V', 'P', '8', ' '): - case MKFOURCC('V', 'P', '8', 'L'): { - // check that this isn't an animation (all frames should be in an ANMF). - if (anim_chunks > 0 || is_animation) return PARSE_ERROR; - - Rewind(mem, CHUNK_HEADER_SIZE); - status = ParseSingleImage(dmux); - break; - } - case MKFOURCC('A', 'N', 'I', 'M'): { - if (chunk_size_padded < ANIM_CHUNK_SIZE) return PARSE_ERROR; - - if (MemDataSize(mem) < chunk_size_padded) { - status = PARSE_NEED_MORE_DATA; - } else if (anim_chunks == 0) { - ++anim_chunks; - dmux->bgcolor_ = ReadLE32(mem); - dmux->loop_count_ = ReadLE16s(mem); - Skip(mem, chunk_size_padded - ANIM_CHUNK_SIZE); - } else { - store_chunk = 0; - goto Skip; - } - break; - } - case MKFOURCC('A', 'N', 'M', 'F'): { - if (anim_chunks == 0) return PARSE_ERROR; // 'ANIM' precedes frames. - status = ParseAnimationFrame(dmux, chunk_size_padded); - break; - } - case MKFOURCC('I', 'C', 'C', 'P'): { - store_chunk = !!(dmux->feature_flags_ & ICCP_FLAG); - goto Skip; - } - case MKFOURCC('E', 'X', 'I', 'F'): { - store_chunk = !!(dmux->feature_flags_ & EXIF_FLAG); - goto Skip; - } - case MKFOURCC('X', 'M', 'P', ' '): { - store_chunk = !!(dmux->feature_flags_ & XMP_FLAG); - goto Skip; - } - Skip: - default: { - if (chunk_size_padded <= MemDataSize(mem)) { - if (store_chunk) { - // Store only the chunk header and unpadded size as only the payload - // will be returned to the user. - if (!StoreChunk(dmux, chunk_start_offset, - CHUNK_HEADER_SIZE + chunk_size)) { - return PARSE_ERROR; - } - } - Skip(mem, chunk_size_padded); - } else { - status = PARSE_NEED_MORE_DATA; - } - } - } - - if (mem->start_ == mem->riff_end_) { - break; - } else if (MemDataSize(mem) < CHUNK_HEADER_SIZE) { - status = PARSE_NEED_MORE_DATA; - } - } while (status == PARSE_OK); - - return status; -} - -static ParseStatus ParseVP8X(WebPDemuxer* const dmux) { - MemBuffer* const mem = &dmux->mem_; - uint32_t vp8x_size; - - if (MemDataSize(mem) < CHUNK_HEADER_SIZE) return PARSE_NEED_MORE_DATA; - - dmux->is_ext_format_ = 1; - Skip(mem, TAG_SIZE); // VP8X - vp8x_size = ReadLE32(mem); - if (vp8x_size > MAX_CHUNK_PAYLOAD) return PARSE_ERROR; - if (vp8x_size < VP8X_CHUNK_SIZE) return PARSE_ERROR; - vp8x_size += vp8x_size & 1; - if (SizeIsInvalid(mem, vp8x_size)) return PARSE_ERROR; - if (MemDataSize(mem) < vp8x_size) return PARSE_NEED_MORE_DATA; - - dmux->feature_flags_ = ReadByte(mem); - Skip(mem, 3); // Reserved. - dmux->canvas_width_ = 1 + ReadLE24s(mem); - dmux->canvas_height_ = 1 + ReadLE24s(mem); - if (dmux->canvas_width_ * (uint64_t)dmux->canvas_height_ >= MAX_IMAGE_AREA) { - return PARSE_ERROR; // image final dimension is too large - } - Skip(mem, vp8x_size - VP8X_CHUNK_SIZE); // skip any trailing data. - dmux->state_ = WEBP_DEMUX_PARSED_HEADER; - - if (SizeIsInvalid(mem, CHUNK_HEADER_SIZE)) return PARSE_ERROR; - if (MemDataSize(mem) < CHUNK_HEADER_SIZE) return PARSE_NEED_MORE_DATA; - - return ParseVP8XChunks(dmux); -} - -// ----------------------------------------------------------------------------- -// Format validation - -static int IsValidSimpleFormat(const WebPDemuxer* const dmux) { - const Frame* const frame = dmux->frames_; - if (dmux->state_ == WEBP_DEMUX_PARSING_HEADER) return 1; - - if (dmux->canvas_width_ <= 0 || dmux->canvas_height_ <= 0) return 0; - if (dmux->state_ == WEBP_DEMUX_DONE && frame == NULL) return 0; - - if (frame->width_ <= 0 || frame->height_ <= 0) return 0; - return 1; -} - -// If 'exact' is true, check that the image resolution matches the canvas. -// If 'exact' is false, check that the x/y offsets do not exceed the canvas. -static int CheckFrameBounds(const Frame* const frame, int exact, - int canvas_width, int canvas_height) { - if (exact) { - if (frame->x_offset_ != 0 || frame->y_offset_ != 0) { - return 0; - } - if (frame->width_ != canvas_width || frame->height_ != canvas_height) { - return 0; - } - } else { - if (frame->x_offset_ < 0 || frame->y_offset_ < 0) return 0; - if (frame->width_ + frame->x_offset_ > canvas_width) return 0; - if (frame->height_ + frame->y_offset_ > canvas_height) return 0; - } - return 1; -} - -static int IsValidExtendedFormat(const WebPDemuxer* const dmux) { - const int is_animation = !!(dmux->feature_flags_ & ANIMATION_FLAG); - const Frame* f = dmux->frames_; - - if (dmux->state_ == WEBP_DEMUX_PARSING_HEADER) return 1; - - if (dmux->canvas_width_ <= 0 || dmux->canvas_height_ <= 0) return 0; - if (dmux->loop_count_ < 0) return 0; - if (dmux->state_ == WEBP_DEMUX_DONE && dmux->frames_ == NULL) return 0; - if (dmux->feature_flags_ & ~ALL_VALID_FLAGS) return 0; // invalid bitstream - - while (f != NULL) { - const int cur_frame_set = f->frame_num_; - int frame_count = 0; - - // Check frame properties. - for (; f != NULL && f->frame_num_ == cur_frame_set; f = f->next_) { - const ChunkData* const image = f->img_components_; - const ChunkData* const alpha = f->img_components_ + 1; - - if (!is_animation && f->frame_num_ > 1) return 0; - - if (f->complete_) { - if (alpha->size_ == 0 && image->size_ == 0) return 0; - // Ensure alpha precedes image bitstream. - if (alpha->size_ > 0 && alpha->offset_ > image->offset_) { - return 0; - } - - if (f->width_ <= 0 || f->height_ <= 0) return 0; - } else { - // There shouldn't be a partial frame in a complete file. - if (dmux->state_ == WEBP_DEMUX_DONE) return 0; - - // Ensure alpha precedes image bitstream. - if (alpha->size_ > 0 && image->size_ > 0 && - alpha->offset_ > image->offset_) { - return 0; - } - // There shouldn't be any frames after an incomplete one. - if (f->next_ != NULL) return 0; - } - - if (f->width_ > 0 && f->height_ > 0 && - !CheckFrameBounds(f, !is_animation, - dmux->canvas_width_, dmux->canvas_height_)) { - return 0; - } - - ++frame_count; - } - } - return 1; -} - -// ----------------------------------------------------------------------------- -// WebPDemuxer object - -static void InitDemux(WebPDemuxer* const dmux, const MemBuffer* const mem) { - dmux->state_ = WEBP_DEMUX_PARSING_HEADER; - dmux->loop_count_ = 1; - dmux->bgcolor_ = 0xFFFFFFFF; // White background by default. - dmux->canvas_width_ = -1; - dmux->canvas_height_ = -1; - dmux->frames_tail_ = &dmux->frames_; - dmux->chunks_tail_ = &dmux->chunks_; - dmux->mem_ = *mem; -} - -static ParseStatus CreateRawImageDemuxer(MemBuffer* const mem, - WebPDemuxer** demuxer) { - WebPBitstreamFeatures features; - const VP8StatusCode status = - WebPGetFeatures(mem->buf_, mem->buf_size_, &features); - *demuxer = NULL; - if (status != VP8_STATUS_OK) { - return (status == VP8_STATUS_NOT_ENOUGH_DATA) ? PARSE_NEED_MORE_DATA - : PARSE_ERROR; - } - - { - WebPDemuxer* const dmux = (WebPDemuxer*)WebPSafeCalloc(1ULL, sizeof(*dmux)); - Frame* const frame = (Frame*)WebPSafeCalloc(1ULL, sizeof(*frame)); - if (dmux == NULL || frame == NULL) goto Error; - InitDemux(dmux, mem); - SetFrameInfo(0, mem->buf_size_, 1 /*frame_num*/, 1 /*complete*/, &features, - frame); - if (!AddFrame(dmux, frame)) goto Error; - dmux->state_ = WEBP_DEMUX_DONE; - dmux->canvas_width_ = frame->width_; - dmux->canvas_height_ = frame->height_; - dmux->feature_flags_ |= frame->has_alpha_ ? ALPHA_FLAG : 0; - dmux->num_frames_ = 1; - assert(IsValidSimpleFormat(dmux)); - *demuxer = dmux; - return PARSE_OK; - - Error: - WebPSafeFree(dmux); - WebPSafeFree(frame); - return PARSE_ERROR; - } -} - -WebPDemuxer* WebPDemuxInternal(const WebPData* data, int allow_partial, - WebPDemuxState* state, int version) { - const ChunkParser* parser; - int partial; - ParseStatus status = PARSE_ERROR; - MemBuffer mem; - WebPDemuxer* dmux; - - if (state != NULL) *state = WEBP_DEMUX_PARSE_ERROR; - - if (WEBP_ABI_IS_INCOMPATIBLE(version, WEBP_DEMUX_ABI_VERSION)) return NULL; - if (data == NULL || data->bytes == NULL || data->size == 0) return NULL; - - if (!InitMemBuffer(&mem, data->bytes, data->size)) return NULL; - status = ReadHeader(&mem); - if (status != PARSE_OK) { - // If parsing of the webp file header fails attempt to handle a raw - // VP8/VP8L frame. Note 'allow_partial' is ignored in this case. - if (status == PARSE_ERROR) { - status = CreateRawImageDemuxer(&mem, &dmux); - if (status == PARSE_OK) { - if (state != NULL) *state = WEBP_DEMUX_DONE; - return dmux; - } - } - if (state != NULL) { - *state = (status == PARSE_NEED_MORE_DATA) ? WEBP_DEMUX_PARSING_HEADER - : WEBP_DEMUX_PARSE_ERROR; - } - return NULL; - } - - partial = (mem.buf_size_ < mem.riff_end_); - if (!allow_partial && partial) return NULL; - - dmux = (WebPDemuxer*)WebPSafeCalloc(1ULL, sizeof(*dmux)); - if (dmux == NULL) return NULL; - InitDemux(dmux, &mem); - - status = PARSE_ERROR; - for (parser = kMasterChunks; parser->parse != NULL; ++parser) { - if (!memcmp(parser->id, GetBuffer(&dmux->mem_), TAG_SIZE)) { - status = parser->parse(dmux); - if (status == PARSE_OK) dmux->state_ = WEBP_DEMUX_DONE; - if (status == PARSE_NEED_MORE_DATA && !partial) status = PARSE_ERROR; - if (status != PARSE_ERROR && !parser->valid(dmux)) status = PARSE_ERROR; - if (status == PARSE_ERROR) dmux->state_ = WEBP_DEMUX_PARSE_ERROR; - break; - } - } - if (state != NULL) *state = dmux->state_; - - if (status == PARSE_ERROR) { - WebPDemuxDelete(dmux); - return NULL; - } - return dmux; -} - -void WebPDemuxDelete(WebPDemuxer* dmux) { - Chunk* c; - Frame* f; - if (dmux == NULL) return; - - for (f = dmux->frames_; f != NULL;) { - Frame* const cur_frame = f; - f = f->next_; - WebPSafeFree(cur_frame); - } - for (c = dmux->chunks_; c != NULL;) { - Chunk* const cur_chunk = c; - c = c->next_; - WebPSafeFree(cur_chunk); - } - WebPSafeFree(dmux); -} - -// ----------------------------------------------------------------------------- - -uint32_t WebPDemuxGetI(const WebPDemuxer* dmux, WebPFormatFeature feature) { - if (dmux == NULL) return 0; - - switch (feature) { - case WEBP_FF_FORMAT_FLAGS: return dmux->feature_flags_; - case WEBP_FF_CANVAS_WIDTH: return (uint32_t)dmux->canvas_width_; - case WEBP_FF_CANVAS_HEIGHT: return (uint32_t)dmux->canvas_height_; - case WEBP_FF_LOOP_COUNT: return (uint32_t)dmux->loop_count_; - case WEBP_FF_BACKGROUND_COLOR: return dmux->bgcolor_; - case WEBP_FF_FRAME_COUNT: return (uint32_t)dmux->num_frames_; - } - return 0; -} - -// ----------------------------------------------------------------------------- -// Frame iteration - -static const Frame* GetFrame(const WebPDemuxer* const dmux, int frame_num) { - const Frame* f; - for (f = dmux->frames_; f != NULL; f = f->next_) { - if (frame_num == f->frame_num_) break; - } - return f; -} - -static const uint8_t* GetFramePayload(const uint8_t* const mem_buf, - const Frame* const frame, - size_t* const data_size) { - *data_size = 0; - if (frame != NULL) { - const ChunkData* const image = frame->img_components_; - const ChunkData* const alpha = frame->img_components_ + 1; - size_t start_offset = image->offset_; - *data_size = image->size_; - - // if alpha exists it precedes image, update the size allowing for - // intervening chunks. - if (alpha->size_ > 0) { - const size_t inter_size = (image->offset_ > 0) - ? image->offset_ - (alpha->offset_ + alpha->size_) - : 0; - start_offset = alpha->offset_; - *data_size += alpha->size_ + inter_size; - } - return mem_buf + start_offset; - } - return NULL; -} - -// Create a whole 'frame' from VP8 (+ alpha) or lossless. -static int SynthesizeFrame(const WebPDemuxer* const dmux, - const Frame* const frame, - WebPIterator* const iter) { - const uint8_t* const mem_buf = dmux->mem_.buf_; - size_t payload_size = 0; - const uint8_t* const payload = GetFramePayload(mem_buf, frame, &payload_size); - if (payload == NULL) return 0; - assert(frame != NULL); - - iter->frame_num = frame->frame_num_; - iter->num_frames = dmux->num_frames_; - iter->x_offset = frame->x_offset_; - iter->y_offset = frame->y_offset_; - iter->width = frame->width_; - iter->height = frame->height_; - iter->has_alpha = frame->has_alpha_; - iter->duration = frame->duration_; - iter->dispose_method = frame->dispose_method_; - iter->blend_method = frame->blend_method_; - iter->complete = frame->complete_; - iter->fragment.bytes = payload; - iter->fragment.size = payload_size; - return 1; -} - -static int SetFrame(int frame_num, WebPIterator* const iter) { - const Frame* frame; - const WebPDemuxer* const dmux = (WebPDemuxer*)iter->private_; - if (dmux == NULL || frame_num < 0) return 0; - if (frame_num > dmux->num_frames_) return 0; - if (frame_num == 0) frame_num = dmux->num_frames_; - - frame = GetFrame(dmux, frame_num); - if (frame == NULL) return 0; - - return SynthesizeFrame(dmux, frame, iter); -} - -int WebPDemuxGetFrame(const WebPDemuxer* dmux, int frame, WebPIterator* iter) { - if (iter == NULL) return 0; - - memset(iter, 0, sizeof(*iter)); - iter->private_ = (void*)dmux; - return SetFrame(frame, iter); -} - -int WebPDemuxNextFrame(WebPIterator* iter) { - if (iter == NULL) return 0; - return SetFrame(iter->frame_num + 1, iter); -} - -int WebPDemuxPrevFrame(WebPIterator* iter) { - if (iter == NULL) return 0; - if (iter->frame_num <= 1) return 0; - return SetFrame(iter->frame_num - 1, iter); -} - -void WebPDemuxReleaseIterator(WebPIterator* iter) { - (void)iter; -} - -// ----------------------------------------------------------------------------- -// Chunk iteration - -static int ChunkCount(const WebPDemuxer* const dmux, const char fourcc[4]) { - const uint8_t* const mem_buf = dmux->mem_.buf_; - const Chunk* c; - int count = 0; - for (c = dmux->chunks_; c != NULL; c = c->next_) { - const uint8_t* const header = mem_buf + c->data_.offset_; - if (!memcmp(header, fourcc, TAG_SIZE)) ++count; - } - return count; -} - -static const Chunk* GetChunk(const WebPDemuxer* const dmux, - const char fourcc[4], int chunk_num) { - const uint8_t* const mem_buf = dmux->mem_.buf_; - const Chunk* c; - int count = 0; - for (c = dmux->chunks_; c != NULL; c = c->next_) { - const uint8_t* const header = mem_buf + c->data_.offset_; - if (!memcmp(header, fourcc, TAG_SIZE)) ++count; - if (count == chunk_num) break; - } - return c; -} - -static int SetChunk(const char fourcc[4], int chunk_num, - WebPChunkIterator* const iter) { - const WebPDemuxer* const dmux = (WebPDemuxer*)iter->private_; - int count; - - if (dmux == NULL || fourcc == NULL || chunk_num < 0) return 0; - count = ChunkCount(dmux, fourcc); - if (count == 0) return 0; - if (chunk_num == 0) chunk_num = count; - - if (chunk_num <= count) { - const uint8_t* const mem_buf = dmux->mem_.buf_; - const Chunk* const chunk = GetChunk(dmux, fourcc, chunk_num); - iter->chunk.bytes = mem_buf + chunk->data_.offset_ + CHUNK_HEADER_SIZE; - iter->chunk.size = chunk->data_.size_ - CHUNK_HEADER_SIZE; - iter->num_chunks = count; - iter->chunk_num = chunk_num; - return 1; - } - return 0; -} - -int WebPDemuxGetChunk(const WebPDemuxer* dmux, - const char fourcc[4], int chunk_num, - WebPChunkIterator* iter) { - if (iter == NULL) return 0; - - memset(iter, 0, sizeof(*iter)); - iter->private_ = (void*)dmux; - return SetChunk(fourcc, chunk_num, iter); -} - -int WebPDemuxNextChunk(WebPChunkIterator* iter) { - if (iter != NULL) { - const char* const fourcc = - (const char*)iter->chunk.bytes - CHUNK_HEADER_SIZE; - return SetChunk(fourcc, iter->chunk_num + 1, iter); - } - return 0; -} - -int WebPDemuxPrevChunk(WebPChunkIterator* iter) { - if (iter != NULL && iter->chunk_num > 1) { - const char* const fourcc = - (const char*)iter->chunk.bytes - CHUNK_HEADER_SIZE; - return SetChunk(fourcc, iter->chunk_num - 1, iter); - } - return 0; -} - -void WebPDemuxReleaseChunkIterator(WebPChunkIterator* iter) { - (void)iter; -} - diff --git a/Extended/libwebp/src/demux/libwebpdemux.pc b/Extended/libwebp/src/demux/libwebpdemux.pc deleted file mode 100644 index 124bb04..0000000 --- a/Extended/libwebp/src/demux/libwebpdemux.pc +++ /dev/null @@ -1,11 +0,0 @@ -prefix=/usr/local -exec_prefix=${prefix} -libdir=${exec_prefix}/lib -includedir=${prefix}/include - -Name: libwebpdemux -Description: Library for parsing the WebP graphics format container -Version: 1.1.0 -Requires: libwebp >= 0.2.0 -Cflags: -I${includedir} -Libs: -L${libdir} -lwebpdemux diff --git a/Extended/libwebp/src/demux/libwebpdemux.pc.in b/Extended/libwebp/src/demux/libwebpdemux.pc.in deleted file mode 100644 index 6dfbbbd..0000000 --- a/Extended/libwebp/src/demux/libwebpdemux.pc.in +++ /dev/null @@ -1,11 +0,0 @@ -prefix=@prefix@ -exec_prefix=@exec_prefix@ -libdir=@libdir@ -includedir=@includedir@ - -Name: libwebpdemux -Description: Library for parsing the WebP graphics format container -Version: @PACKAGE_VERSION@ -Requires: libwebp >= 0.2.0 -Cflags: -I${includedir} -Libs: -L${libdir} -lwebpdemux diff --git a/Extended/libwebp/src/demux/libwebpdemux.rc b/Extended/libwebp/src/demux/libwebpdemux.rc deleted file mode 100644 index 66f26d1..0000000 --- a/Extended/libwebp/src/demux/libwebpdemux.rc +++ /dev/null @@ -1,41 +0,0 @@ -#define APSTUDIO_READONLY_SYMBOLS -#include "winres.h" -#undef APSTUDIO_READONLY_SYMBOLS - -#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) -LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US - -VS_VERSION_INFO VERSIONINFO - FILEVERSION 1,0,1,0 - PRODUCTVERSION 1,0,1,0 - FILEFLAGSMASK 0x3fL -#ifdef _DEBUG - FILEFLAGS 0x1L -#else - FILEFLAGS 0x0L -#endif - FILEOS 0x40004L - FILETYPE 0x2L - FILESUBTYPE 0x0L -BEGIN - BLOCK "StringFileInfo" - BEGIN - BLOCK "040904b0" - BEGIN - VALUE "CompanyName", "Google, Inc." - VALUE "FileDescription", "libwebpdemux DLL" - VALUE "FileVersion", "1.1.0" - VALUE "InternalName", "libwebpdemux.dll" - VALUE "LegalCopyright", "Copyright (C) 2019" - VALUE "OriginalFilename", "libwebpdemux.dll" - VALUE "ProductName", "WebP Image Demuxer" - VALUE "ProductVersion", "1.1.0" - END - END - BLOCK "VarFileInfo" - BEGIN - VALUE "Translation", 0x409, 1200 - END -END - -#endif // English (United States) resources diff --git a/Extended/libwebp/src/dsp/.deps/libwebpdsp_la-alpha_processing.Plo b/Extended/libwebp/src/dsp/.deps/libwebpdsp_la-alpha_processing.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/dsp/.deps/libwebpdsp_la-alpha_processing.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/dsp/.deps/libwebpdsp_la-cost.Plo b/Extended/libwebp/src/dsp/.deps/libwebpdsp_la-cost.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/dsp/.deps/libwebpdsp_la-cost.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/dsp/.deps/libwebpdsp_la-cpu.Plo b/Extended/libwebp/src/dsp/.deps/libwebpdsp_la-cpu.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/dsp/.deps/libwebpdsp_la-cpu.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/dsp/.deps/libwebpdsp_la-dec.Plo b/Extended/libwebp/src/dsp/.deps/libwebpdsp_la-dec.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/dsp/.deps/libwebpdsp_la-dec.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/dsp/.deps/libwebpdsp_la-dec_clip_tables.Plo b/Extended/libwebp/src/dsp/.deps/libwebpdsp_la-dec_clip_tables.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/dsp/.deps/libwebpdsp_la-dec_clip_tables.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/dsp/.deps/libwebpdsp_la-enc.Plo b/Extended/libwebp/src/dsp/.deps/libwebpdsp_la-enc.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/dsp/.deps/libwebpdsp_la-enc.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/dsp/.deps/libwebpdsp_la-filters.Plo b/Extended/libwebp/src/dsp/.deps/libwebpdsp_la-filters.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/dsp/.deps/libwebpdsp_la-filters.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/dsp/.deps/libwebpdsp_la-lossless.Plo b/Extended/libwebp/src/dsp/.deps/libwebpdsp_la-lossless.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/dsp/.deps/libwebpdsp_la-lossless.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/dsp/.deps/libwebpdsp_la-lossless_enc.Plo b/Extended/libwebp/src/dsp/.deps/libwebpdsp_la-lossless_enc.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/dsp/.deps/libwebpdsp_la-lossless_enc.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/dsp/.deps/libwebpdsp_la-rescaler.Plo b/Extended/libwebp/src/dsp/.deps/libwebpdsp_la-rescaler.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/dsp/.deps/libwebpdsp_la-rescaler.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/dsp/.deps/libwebpdsp_la-ssim.Plo b/Extended/libwebp/src/dsp/.deps/libwebpdsp_la-ssim.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/dsp/.deps/libwebpdsp_la-ssim.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/dsp/.deps/libwebpdsp_la-upsampling.Plo b/Extended/libwebp/src/dsp/.deps/libwebpdsp_la-upsampling.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/dsp/.deps/libwebpdsp_la-upsampling.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/dsp/.deps/libwebpdsp_la-yuv.Plo b/Extended/libwebp/src/dsp/.deps/libwebpdsp_la-yuv.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/dsp/.deps/libwebpdsp_la-yuv.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/dsp/.deps/libwebpdsp_mips32_la-cost_mips32.Plo b/Extended/libwebp/src/dsp/.deps/libwebpdsp_mips32_la-cost_mips32.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/dsp/.deps/libwebpdsp_mips32_la-cost_mips32.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/dsp/.deps/libwebpdsp_mips32_la-enc_mips32.Plo b/Extended/libwebp/src/dsp/.deps/libwebpdsp_mips32_la-enc_mips32.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/dsp/.deps/libwebpdsp_mips32_la-enc_mips32.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/dsp/.deps/libwebpdsp_mips32_la-lossless_enc_mips32.Plo b/Extended/libwebp/src/dsp/.deps/libwebpdsp_mips32_la-lossless_enc_mips32.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/dsp/.deps/libwebpdsp_mips32_la-lossless_enc_mips32.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/dsp/.deps/libwebpdsp_mips_dsp_r2_la-cost_mips_dsp_r2.Plo b/Extended/libwebp/src/dsp/.deps/libwebpdsp_mips_dsp_r2_la-cost_mips_dsp_r2.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/dsp/.deps/libwebpdsp_mips_dsp_r2_la-cost_mips_dsp_r2.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/dsp/.deps/libwebpdsp_mips_dsp_r2_la-enc_mips_dsp_r2.Plo b/Extended/libwebp/src/dsp/.deps/libwebpdsp_mips_dsp_r2_la-enc_mips_dsp_r2.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/dsp/.deps/libwebpdsp_mips_dsp_r2_la-enc_mips_dsp_r2.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/dsp/.deps/libwebpdsp_mips_dsp_r2_la-lossless_enc_mips_dsp_r2.Plo b/Extended/libwebp/src/dsp/.deps/libwebpdsp_mips_dsp_r2_la-lossless_enc_mips_dsp_r2.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/dsp/.deps/libwebpdsp_mips_dsp_r2_la-lossless_enc_mips_dsp_r2.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/dsp/.deps/libwebpdsp_msa_la-enc_msa.Plo b/Extended/libwebp/src/dsp/.deps/libwebpdsp_msa_la-enc_msa.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/dsp/.deps/libwebpdsp_msa_la-enc_msa.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/dsp/.deps/libwebpdsp_msa_la-lossless_enc_msa.Plo b/Extended/libwebp/src/dsp/.deps/libwebpdsp_msa_la-lossless_enc_msa.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/dsp/.deps/libwebpdsp_msa_la-lossless_enc_msa.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/dsp/.deps/libwebpdsp_neon_la-cost_neon.Plo b/Extended/libwebp/src/dsp/.deps/libwebpdsp_neon_la-cost_neon.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/dsp/.deps/libwebpdsp_neon_la-cost_neon.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/dsp/.deps/libwebpdsp_neon_la-enc_neon.Plo b/Extended/libwebp/src/dsp/.deps/libwebpdsp_neon_la-enc_neon.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/dsp/.deps/libwebpdsp_neon_la-enc_neon.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/dsp/.deps/libwebpdsp_neon_la-lossless_enc_neon.Plo b/Extended/libwebp/src/dsp/.deps/libwebpdsp_neon_la-lossless_enc_neon.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/dsp/.deps/libwebpdsp_neon_la-lossless_enc_neon.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/dsp/.deps/libwebpdsp_sse2_la-cost_sse2.Plo b/Extended/libwebp/src/dsp/.deps/libwebpdsp_sse2_la-cost_sse2.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/dsp/.deps/libwebpdsp_sse2_la-cost_sse2.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/dsp/.deps/libwebpdsp_sse2_la-enc_sse2.Plo b/Extended/libwebp/src/dsp/.deps/libwebpdsp_sse2_la-enc_sse2.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/dsp/.deps/libwebpdsp_sse2_la-enc_sse2.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/dsp/.deps/libwebpdsp_sse2_la-lossless_enc_sse2.Plo b/Extended/libwebp/src/dsp/.deps/libwebpdsp_sse2_la-lossless_enc_sse2.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/dsp/.deps/libwebpdsp_sse2_la-lossless_enc_sse2.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/dsp/.deps/libwebpdsp_sse2_la-ssim_sse2.Plo b/Extended/libwebp/src/dsp/.deps/libwebpdsp_sse2_la-ssim_sse2.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/dsp/.deps/libwebpdsp_sse2_la-ssim_sse2.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/dsp/.deps/libwebpdsp_sse41_la-enc_sse41.Plo b/Extended/libwebp/src/dsp/.deps/libwebpdsp_sse41_la-enc_sse41.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/dsp/.deps/libwebpdsp_sse41_la-enc_sse41.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/dsp/.deps/libwebpdsp_sse41_la-lossless_enc_sse41.Plo b/Extended/libwebp/src/dsp/.deps/libwebpdsp_sse41_la-lossless_enc_sse41.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/dsp/.deps/libwebpdsp_sse41_la-lossless_enc_sse41.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_la-alpha_processing.Plo b/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_la-alpha_processing.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_la-alpha_processing.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_la-cpu.Plo b/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_la-cpu.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_la-cpu.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_la-dec.Plo b/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_la-dec.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_la-dec.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_la-dec_clip_tables.Plo b/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_la-dec_clip_tables.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_la-dec_clip_tables.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_la-filters.Plo b/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_la-filters.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_la-filters.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_la-lossless.Plo b/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_la-lossless.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_la-lossless.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_la-rescaler.Plo b/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_la-rescaler.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_la-rescaler.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_la-upsampling.Plo b/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_la-upsampling.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_la-upsampling.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_la-yuv.Plo b/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_la-yuv.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_la-yuv.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_mips32_la-dec_mips32.Plo b/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_mips32_la-dec_mips32.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_mips32_la-dec_mips32.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_mips32_la-rescaler_mips32.Plo b/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_mips32_la-rescaler_mips32.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_mips32_la-rescaler_mips32.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_mips32_la-yuv_mips32.Plo b/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_mips32_la-yuv_mips32.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_mips32_la-yuv_mips32.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_mips_dsp_r2_la-alpha_processing_mips_dsp_r2.Plo b/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_mips_dsp_r2_la-alpha_processing_mips_dsp_r2.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_mips_dsp_r2_la-alpha_processing_mips_dsp_r2.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_mips_dsp_r2_la-dec_mips_dsp_r2.Plo b/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_mips_dsp_r2_la-dec_mips_dsp_r2.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_mips_dsp_r2_la-dec_mips_dsp_r2.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_mips_dsp_r2_la-filters_mips_dsp_r2.Plo b/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_mips_dsp_r2_la-filters_mips_dsp_r2.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_mips_dsp_r2_la-filters_mips_dsp_r2.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_mips_dsp_r2_la-lossless_mips_dsp_r2.Plo b/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_mips_dsp_r2_la-lossless_mips_dsp_r2.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_mips_dsp_r2_la-lossless_mips_dsp_r2.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_mips_dsp_r2_la-rescaler_mips_dsp_r2.Plo b/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_mips_dsp_r2_la-rescaler_mips_dsp_r2.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_mips_dsp_r2_la-rescaler_mips_dsp_r2.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_mips_dsp_r2_la-upsampling_mips_dsp_r2.Plo b/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_mips_dsp_r2_la-upsampling_mips_dsp_r2.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_mips_dsp_r2_la-upsampling_mips_dsp_r2.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_mips_dsp_r2_la-yuv_mips_dsp_r2.Plo b/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_mips_dsp_r2_la-yuv_mips_dsp_r2.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_mips_dsp_r2_la-yuv_mips_dsp_r2.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_msa_la-dec_msa.Plo b/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_msa_la-dec_msa.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_msa_la-dec_msa.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_msa_la-filters_msa.Plo b/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_msa_la-filters_msa.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_msa_la-filters_msa.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_msa_la-lossless_msa.Plo b/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_msa_la-lossless_msa.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_msa_la-lossless_msa.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_msa_la-rescaler_msa.Plo b/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_msa_la-rescaler_msa.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_msa_la-rescaler_msa.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_msa_la-upsampling_msa.Plo b/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_msa_la-upsampling_msa.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_msa_la-upsampling_msa.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_neon_la-alpha_processing_neon.Plo b/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_neon_la-alpha_processing_neon.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_neon_la-alpha_processing_neon.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_neon_la-dec_neon.Plo b/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_neon_la-dec_neon.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_neon_la-dec_neon.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_neon_la-filters_neon.Plo b/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_neon_la-filters_neon.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_neon_la-filters_neon.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_neon_la-lossless_neon.Plo b/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_neon_la-lossless_neon.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_neon_la-lossless_neon.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_neon_la-rescaler_neon.Plo b/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_neon_la-rescaler_neon.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_neon_la-rescaler_neon.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_neon_la-upsampling_neon.Plo b/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_neon_la-upsampling_neon.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_neon_la-upsampling_neon.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_neon_la-yuv_neon.Plo b/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_neon_la-yuv_neon.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_neon_la-yuv_neon.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_sse2_la-alpha_processing_sse2.Plo b/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_sse2_la-alpha_processing_sse2.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_sse2_la-alpha_processing_sse2.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_sse2_la-dec_sse2.Plo b/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_sse2_la-dec_sse2.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_sse2_la-dec_sse2.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_sse2_la-filters_sse2.Plo b/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_sse2_la-filters_sse2.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_sse2_la-filters_sse2.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_sse2_la-lossless_sse2.Plo b/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_sse2_la-lossless_sse2.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_sse2_la-lossless_sse2.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_sse2_la-rescaler_sse2.Plo b/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_sse2_la-rescaler_sse2.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_sse2_la-rescaler_sse2.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_sse2_la-upsampling_sse2.Plo b/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_sse2_la-upsampling_sse2.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_sse2_la-upsampling_sse2.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_sse2_la-yuv_sse2.Plo b/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_sse2_la-yuv_sse2.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_sse2_la-yuv_sse2.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_sse41_la-alpha_processing_sse41.Plo b/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_sse41_la-alpha_processing_sse41.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_sse41_la-alpha_processing_sse41.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_sse41_la-dec_sse41.Plo b/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_sse41_la-dec_sse41.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_sse41_la-dec_sse41.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_sse41_la-upsampling_sse41.Plo b/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_sse41_la-upsampling_sse41.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_sse41_la-upsampling_sse41.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_sse41_la-yuv_sse41.Plo b/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_sse41_la-yuv_sse41.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/dsp/.deps/libwebpdspdecode_sse41_la-yuv_sse41.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/dsp/Makefile b/Extended/libwebp/src/dsp/Makefile deleted file mode 100644 index 031120c..0000000 --- a/Extended/libwebp/src/dsp/Makefile +++ /dev/null @@ -1,1783 +0,0 @@ -# Makefile.in generated by automake 1.16.1 from Makefile.am. -# src/dsp/Makefile. Generated from Makefile.in by configure. - -# Copyright (C) 1994-2018 Free Software Foundation, Inc. - -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - - - - - -am__is_gnu_make = { \ - if test -z '$(MAKELEVEL)'; then \ - false; \ - elif test -n '$(MAKE_HOST)'; then \ - true; \ - elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ - true; \ - else \ - false; \ - fi; \ -} -am__make_running_with_option = \ - case $${target_option-} in \ - ?) ;; \ - *) echo "am__make_running_with_option: internal error: invalid" \ - "target option '$${target_option-}' specified" >&2; \ - exit 1;; \ - esac; \ - has_opt=no; \ - sane_makeflags=$$MAKEFLAGS; \ - if $(am__is_gnu_make); then \ - sane_makeflags=$$MFLAGS; \ - else \ - case $$MAKEFLAGS in \ - *\\[\ \ ]*) \ - bs=\\; \ - sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ - | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ - esac; \ - fi; \ - skip_next=no; \ - strip_trailopt () \ - { \ - flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ - }; \ - for flg in $$sane_makeflags; do \ - test $$skip_next = yes && { skip_next=no; continue; }; \ - case $$flg in \ - *=*|--*) continue;; \ - -*I) strip_trailopt 'I'; skip_next=yes;; \ - -*I?*) strip_trailopt 'I';; \ - -*O) strip_trailopt 'O'; skip_next=yes;; \ - -*O?*) strip_trailopt 'O';; \ - -*l) strip_trailopt 'l'; skip_next=yes;; \ - -*l?*) strip_trailopt 'l';; \ - -[dEDm]) skip_next=yes;; \ - -[JT]) skip_next=yes;; \ - esac; \ - case $$flg in \ - *$$target_option*) has_opt=yes; break;; \ - esac; \ - done; \ - test $$has_opt = yes -am__make_dryrun = (target_option=n; $(am__make_running_with_option)) -am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) -pkgdatadir = $(datadir)/libwebp -pkgincludedir = $(includedir)/libwebp -pkglibdir = $(libdir)/libwebp -pkglibexecdir = $(libexecdir)/libwebp -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = x86_64-apple-darwin19.6.0 -host_triplet = x86_64-apple-darwin19.6.0 -#am__append_1 = libwebpdspdecode.la -subdir = src/dsp -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pthread.m4 \ - $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ - $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ - $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -DIST_COMMON = $(srcdir)/Makefile.am $(common_HEADERS) \ - $(noinst_HEADERS) $(am__DIST_COMMON) -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = $(top_builddir)/src/webp/config.h -CONFIG_CLEAN_FILES = -CONFIG_CLEAN_VPATH_FILES = -LTLIBRARIES = $(noinst_LTLIBRARIES) -libwebpdsp_la_DEPENDENCIES = libwebpdsp_sse2.la libwebpdsp_sse41.la \ - libwebpdsp_neon.la libwebpdsp_msa.la libwebpdsp_mips32.la \ - libwebpdsp_mips_dsp_r2.la -am__objects_1 = libwebpdsp_la-alpha_processing.lo libwebpdsp_la-cpu.lo \ - libwebpdsp_la-dec.lo libwebpdsp_la-dec_clip_tables.lo \ - libwebpdsp_la-filters.lo libwebpdsp_la-lossless.lo \ - libwebpdsp_la-rescaler.lo libwebpdsp_la-upsampling.lo \ - libwebpdsp_la-yuv.lo -am__objects_2 = libwebpdsp_la-cost.lo libwebpdsp_la-enc.lo \ - libwebpdsp_la-lossless_enc.lo libwebpdsp_la-ssim.lo -am_libwebpdsp_la_OBJECTS = $(am__objects_1) $(am__objects_2) -libwebpdsp_la_OBJECTS = $(am_libwebpdsp_la_OBJECTS) -AM_V_lt = $(am__v_lt_$(V)) -am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) -am__v_lt_0 = --silent -am__v_lt_1 = -libwebpdsp_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ - $(libwebpdsp_la_LDFLAGS) $(LDFLAGS) -o $@ -libwebpdsp_mips32_la_DEPENDENCIES = libwebpdspdecode_mips32.la -am_libwebpdsp_mips32_la_OBJECTS = libwebpdsp_mips32_la-cost_mips32.lo \ - libwebpdsp_mips32_la-enc_mips32.lo \ - libwebpdsp_mips32_la-lossless_enc_mips32.lo -libwebpdsp_mips32_la_OBJECTS = $(am_libwebpdsp_mips32_la_OBJECTS) -libwebpdsp_mips32_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ - $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ - $(libwebpdsp_mips32_la_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ - $(LDFLAGS) -o $@ -libwebpdsp_mips_dsp_r2_la_DEPENDENCIES = \ - libwebpdspdecode_mips_dsp_r2.la -am_libwebpdsp_mips_dsp_r2_la_OBJECTS = \ - libwebpdsp_mips_dsp_r2_la-cost_mips_dsp_r2.lo \ - libwebpdsp_mips_dsp_r2_la-enc_mips_dsp_r2.lo \ - libwebpdsp_mips_dsp_r2_la-lossless_enc_mips_dsp_r2.lo -libwebpdsp_mips_dsp_r2_la_OBJECTS = \ - $(am_libwebpdsp_mips_dsp_r2_la_OBJECTS) -libwebpdsp_mips_dsp_r2_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ - $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ - $(libwebpdsp_mips_dsp_r2_la_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ - $(LDFLAGS) -o $@ -libwebpdsp_msa_la_DEPENDENCIES = libwebpdspdecode_msa.la -am_libwebpdsp_msa_la_OBJECTS = libwebpdsp_msa_la-enc_msa.lo \ - libwebpdsp_msa_la-lossless_enc_msa.lo -libwebpdsp_msa_la_OBJECTS = $(am_libwebpdsp_msa_la_OBJECTS) -libwebpdsp_msa_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ - $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ - $(libwebpdsp_msa_la_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ - -o $@ -libwebpdsp_neon_la_DEPENDENCIES = libwebpdspdecode_neon.la -am_libwebpdsp_neon_la_OBJECTS = libwebpdsp_neon_la-cost_neon.lo \ - libwebpdsp_neon_la-enc_neon.lo \ - libwebpdsp_neon_la-lossless_enc_neon.lo -libwebpdsp_neon_la_OBJECTS = $(am_libwebpdsp_neon_la_OBJECTS) -libwebpdsp_neon_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ - $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ - $(libwebpdsp_neon_la_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ - $(LDFLAGS) -o $@ -libwebpdsp_sse2_la_DEPENDENCIES = libwebpdspdecode_sse2.la -am_libwebpdsp_sse2_la_OBJECTS = libwebpdsp_sse2_la-cost_sse2.lo \ - libwebpdsp_sse2_la-enc_sse2.lo \ - libwebpdsp_sse2_la-lossless_enc_sse2.lo \ - libwebpdsp_sse2_la-ssim_sse2.lo -libwebpdsp_sse2_la_OBJECTS = $(am_libwebpdsp_sse2_la_OBJECTS) -libwebpdsp_sse2_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ - $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ - $(libwebpdsp_sse2_la_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ - $(LDFLAGS) -o $@ -libwebpdsp_sse41_la_DEPENDENCIES = libwebpdspdecode_sse41.la -am_libwebpdsp_sse41_la_OBJECTS = libwebpdsp_sse41_la-enc_sse41.lo \ - libwebpdsp_sse41_la-lossless_enc_sse41.lo -libwebpdsp_sse41_la_OBJECTS = $(am_libwebpdsp_sse41_la_OBJECTS) -libwebpdsp_sse41_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ - $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ - $(libwebpdsp_sse41_la_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ - $(LDFLAGS) -o $@ -#libwebpdspdecode_la_DEPENDENCIES = \ -# libwebpdspdecode_sse2.la \ -# libwebpdspdecode_sse41.la \ -# libwebpdspdecode_neon.la \ -# libwebpdspdecode_msa.la \ -# libwebpdspdecode_mips32.la \ -# libwebpdspdecode_mips_dsp_r2.la -am__libwebpdspdecode_la_SOURCES_DIST = alpha_processing.c cpu.c dec.c \ - dec_clip_tables.c dsp.h filters.c lossless.c lossless.h \ - lossless_common.h rescaler.c upsampling.c yuv.c yuv.h -am__objects_3 = libwebpdspdecode_la-alpha_processing.lo \ - libwebpdspdecode_la-cpu.lo libwebpdspdecode_la-dec.lo \ - libwebpdspdecode_la-dec_clip_tables.lo \ - libwebpdspdecode_la-filters.lo libwebpdspdecode_la-lossless.lo \ - libwebpdspdecode_la-rescaler.lo \ - libwebpdspdecode_la-upsampling.lo libwebpdspdecode_la-yuv.lo -#am_libwebpdspdecode_la_OBJECTS = \ -# $(am__objects_3) -libwebpdspdecode_la_OBJECTS = $(am_libwebpdspdecode_la_OBJECTS) -libwebpdspdecode_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ - $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ - $(AM_CFLAGS) $(CFLAGS) $(libwebpdspdecode_la_LDFLAGS) \ - $(LDFLAGS) -o $@ -#am_libwebpdspdecode_la_rpath = -libwebpdspdecode_mips32_la_LIBADD = -am_libwebpdspdecode_mips32_la_OBJECTS = \ - libwebpdspdecode_mips32_la-dec_mips32.lo \ - libwebpdspdecode_mips32_la-rescaler_mips32.lo \ - libwebpdspdecode_mips32_la-yuv_mips32.lo -libwebpdspdecode_mips32_la_OBJECTS = \ - $(am_libwebpdspdecode_mips32_la_OBJECTS) -libwebpdspdecode_mips32_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ - $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ - $(libwebpdspdecode_mips32_la_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ - $(LDFLAGS) -o $@ -libwebpdspdecode_mips_dsp_r2_la_LIBADD = -am_libwebpdspdecode_mips_dsp_r2_la_OBJECTS = libwebpdspdecode_mips_dsp_r2_la-alpha_processing_mips_dsp_r2.lo \ - libwebpdspdecode_mips_dsp_r2_la-dec_mips_dsp_r2.lo \ - libwebpdspdecode_mips_dsp_r2_la-filters_mips_dsp_r2.lo \ - libwebpdspdecode_mips_dsp_r2_la-lossless_mips_dsp_r2.lo \ - libwebpdspdecode_mips_dsp_r2_la-rescaler_mips_dsp_r2.lo \ - libwebpdspdecode_mips_dsp_r2_la-upsampling_mips_dsp_r2.lo \ - libwebpdspdecode_mips_dsp_r2_la-yuv_mips_dsp_r2.lo -libwebpdspdecode_mips_dsp_r2_la_OBJECTS = \ - $(am_libwebpdspdecode_mips_dsp_r2_la_OBJECTS) -libwebpdspdecode_mips_dsp_r2_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ - $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ - $(libwebpdspdecode_mips_dsp_r2_la_CFLAGS) $(CFLAGS) \ - $(AM_LDFLAGS) $(LDFLAGS) -o $@ -libwebpdspdecode_msa_la_LIBADD = -am_libwebpdspdecode_msa_la_OBJECTS = \ - libwebpdspdecode_msa_la-dec_msa.lo \ - libwebpdspdecode_msa_la-filters_msa.lo \ - libwebpdspdecode_msa_la-lossless_msa.lo \ - libwebpdspdecode_msa_la-rescaler_msa.lo \ - libwebpdspdecode_msa_la-upsampling_msa.lo -libwebpdspdecode_msa_la_OBJECTS = \ - $(am_libwebpdspdecode_msa_la_OBJECTS) -libwebpdspdecode_msa_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ - $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ - $(libwebpdspdecode_msa_la_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ - $(LDFLAGS) -o $@ -libwebpdspdecode_neon_la_LIBADD = -am_libwebpdspdecode_neon_la_OBJECTS = \ - libwebpdspdecode_neon_la-alpha_processing_neon.lo \ - libwebpdspdecode_neon_la-dec_neon.lo \ - libwebpdspdecode_neon_la-filters_neon.lo \ - libwebpdspdecode_neon_la-lossless_neon.lo \ - libwebpdspdecode_neon_la-rescaler_neon.lo \ - libwebpdspdecode_neon_la-upsampling_neon.lo \ - libwebpdspdecode_neon_la-yuv_neon.lo -libwebpdspdecode_neon_la_OBJECTS = \ - $(am_libwebpdspdecode_neon_la_OBJECTS) -libwebpdspdecode_neon_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ - $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ - $(libwebpdspdecode_neon_la_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ - $(LDFLAGS) -o $@ -libwebpdspdecode_sse2_la_LIBADD = -am_libwebpdspdecode_sse2_la_OBJECTS = \ - libwebpdspdecode_sse2_la-alpha_processing_sse2.lo \ - libwebpdspdecode_sse2_la-dec_sse2.lo \ - libwebpdspdecode_sse2_la-filters_sse2.lo \ - libwebpdspdecode_sse2_la-lossless_sse2.lo \ - libwebpdspdecode_sse2_la-rescaler_sse2.lo \ - libwebpdspdecode_sse2_la-upsampling_sse2.lo \ - libwebpdspdecode_sse2_la-yuv_sse2.lo -libwebpdspdecode_sse2_la_OBJECTS = \ - $(am_libwebpdspdecode_sse2_la_OBJECTS) -libwebpdspdecode_sse2_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ - $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ - $(libwebpdspdecode_sse2_la_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ - $(LDFLAGS) -o $@ -libwebpdspdecode_sse41_la_LIBADD = -am_libwebpdspdecode_sse41_la_OBJECTS = \ - libwebpdspdecode_sse41_la-alpha_processing_sse41.lo \ - libwebpdspdecode_sse41_la-dec_sse41.lo \ - libwebpdspdecode_sse41_la-upsampling_sse41.lo \ - libwebpdspdecode_sse41_la-yuv_sse41.lo -libwebpdspdecode_sse41_la_OBJECTS = \ - $(am_libwebpdspdecode_sse41_la_OBJECTS) -libwebpdspdecode_sse41_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ - $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ - $(libwebpdspdecode_sse41_la_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ - $(LDFLAGS) -o $@ -AM_V_P = $(am__v_P_$(V)) -am__v_P_ = $(am__v_P_$(AM_DEFAULT_VERBOSITY)) -am__v_P_0 = false -am__v_P_1 = : -AM_V_GEN = $(am__v_GEN_$(V)) -am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) -am__v_GEN_0 = @echo " GEN " $@; -am__v_GEN_1 = -AM_V_at = $(am__v_at_$(V)) -am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) -am__v_at_0 = @ -am__v_at_1 = -DEFAULT_INCLUDES = -I. -I$(top_builddir)/src/webp -depcomp = $(SHELL) $(top_srcdir)/depcomp -am__maybe_remake_depfiles = depfiles -am__depfiles_remade = ./$(DEPDIR)/libwebpdsp_la-alpha_processing.Plo \ - ./$(DEPDIR)/libwebpdsp_la-cost.Plo \ - ./$(DEPDIR)/libwebpdsp_la-cpu.Plo \ - ./$(DEPDIR)/libwebpdsp_la-dec.Plo \ - ./$(DEPDIR)/libwebpdsp_la-dec_clip_tables.Plo \ - ./$(DEPDIR)/libwebpdsp_la-enc.Plo \ - ./$(DEPDIR)/libwebpdsp_la-filters.Plo \ - ./$(DEPDIR)/libwebpdsp_la-lossless.Plo \ - ./$(DEPDIR)/libwebpdsp_la-lossless_enc.Plo \ - ./$(DEPDIR)/libwebpdsp_la-rescaler.Plo \ - ./$(DEPDIR)/libwebpdsp_la-ssim.Plo \ - ./$(DEPDIR)/libwebpdsp_la-upsampling.Plo \ - ./$(DEPDIR)/libwebpdsp_la-yuv.Plo \ - ./$(DEPDIR)/libwebpdsp_mips32_la-cost_mips32.Plo \ - ./$(DEPDIR)/libwebpdsp_mips32_la-enc_mips32.Plo \ - ./$(DEPDIR)/libwebpdsp_mips32_la-lossless_enc_mips32.Plo \ - ./$(DEPDIR)/libwebpdsp_mips_dsp_r2_la-cost_mips_dsp_r2.Plo \ - ./$(DEPDIR)/libwebpdsp_mips_dsp_r2_la-enc_mips_dsp_r2.Plo \ - ./$(DEPDIR)/libwebpdsp_mips_dsp_r2_la-lossless_enc_mips_dsp_r2.Plo \ - ./$(DEPDIR)/libwebpdsp_msa_la-enc_msa.Plo \ - ./$(DEPDIR)/libwebpdsp_msa_la-lossless_enc_msa.Plo \ - ./$(DEPDIR)/libwebpdsp_neon_la-cost_neon.Plo \ - ./$(DEPDIR)/libwebpdsp_neon_la-enc_neon.Plo \ - ./$(DEPDIR)/libwebpdsp_neon_la-lossless_enc_neon.Plo \ - ./$(DEPDIR)/libwebpdsp_sse2_la-cost_sse2.Plo \ - ./$(DEPDIR)/libwebpdsp_sse2_la-enc_sse2.Plo \ - ./$(DEPDIR)/libwebpdsp_sse2_la-lossless_enc_sse2.Plo \ - ./$(DEPDIR)/libwebpdsp_sse2_la-ssim_sse2.Plo \ - ./$(DEPDIR)/libwebpdsp_sse41_la-enc_sse41.Plo \ - ./$(DEPDIR)/libwebpdsp_sse41_la-lossless_enc_sse41.Plo \ - ./$(DEPDIR)/libwebpdspdecode_la-alpha_processing.Plo \ - ./$(DEPDIR)/libwebpdspdecode_la-cpu.Plo \ - ./$(DEPDIR)/libwebpdspdecode_la-dec.Plo \ - ./$(DEPDIR)/libwebpdspdecode_la-dec_clip_tables.Plo \ - ./$(DEPDIR)/libwebpdspdecode_la-filters.Plo \ - ./$(DEPDIR)/libwebpdspdecode_la-lossless.Plo \ - ./$(DEPDIR)/libwebpdspdecode_la-rescaler.Plo \ - ./$(DEPDIR)/libwebpdspdecode_la-upsampling.Plo \ - ./$(DEPDIR)/libwebpdspdecode_la-yuv.Plo \ - ./$(DEPDIR)/libwebpdspdecode_mips32_la-dec_mips32.Plo \ - ./$(DEPDIR)/libwebpdspdecode_mips32_la-rescaler_mips32.Plo \ - ./$(DEPDIR)/libwebpdspdecode_mips32_la-yuv_mips32.Plo \ - ./$(DEPDIR)/libwebpdspdecode_mips_dsp_r2_la-alpha_processing_mips_dsp_r2.Plo \ - ./$(DEPDIR)/libwebpdspdecode_mips_dsp_r2_la-dec_mips_dsp_r2.Plo \ - ./$(DEPDIR)/libwebpdspdecode_mips_dsp_r2_la-filters_mips_dsp_r2.Plo \ - ./$(DEPDIR)/libwebpdspdecode_mips_dsp_r2_la-lossless_mips_dsp_r2.Plo \ - ./$(DEPDIR)/libwebpdspdecode_mips_dsp_r2_la-rescaler_mips_dsp_r2.Plo \ - ./$(DEPDIR)/libwebpdspdecode_mips_dsp_r2_la-upsampling_mips_dsp_r2.Plo \ - ./$(DEPDIR)/libwebpdspdecode_mips_dsp_r2_la-yuv_mips_dsp_r2.Plo \ - ./$(DEPDIR)/libwebpdspdecode_msa_la-dec_msa.Plo \ - ./$(DEPDIR)/libwebpdspdecode_msa_la-filters_msa.Plo \ - ./$(DEPDIR)/libwebpdspdecode_msa_la-lossless_msa.Plo \ - ./$(DEPDIR)/libwebpdspdecode_msa_la-rescaler_msa.Plo \ - ./$(DEPDIR)/libwebpdspdecode_msa_la-upsampling_msa.Plo \ - ./$(DEPDIR)/libwebpdspdecode_neon_la-alpha_processing_neon.Plo \ - ./$(DEPDIR)/libwebpdspdecode_neon_la-dec_neon.Plo \ - ./$(DEPDIR)/libwebpdspdecode_neon_la-filters_neon.Plo \ - ./$(DEPDIR)/libwebpdspdecode_neon_la-lossless_neon.Plo \ - ./$(DEPDIR)/libwebpdspdecode_neon_la-rescaler_neon.Plo \ - ./$(DEPDIR)/libwebpdspdecode_neon_la-upsampling_neon.Plo \ - ./$(DEPDIR)/libwebpdspdecode_neon_la-yuv_neon.Plo \ - ./$(DEPDIR)/libwebpdspdecode_sse2_la-alpha_processing_sse2.Plo \ - ./$(DEPDIR)/libwebpdspdecode_sse2_la-dec_sse2.Plo \ - ./$(DEPDIR)/libwebpdspdecode_sse2_la-filters_sse2.Plo \ - ./$(DEPDIR)/libwebpdspdecode_sse2_la-lossless_sse2.Plo \ - ./$(DEPDIR)/libwebpdspdecode_sse2_la-rescaler_sse2.Plo \ - ./$(DEPDIR)/libwebpdspdecode_sse2_la-upsampling_sse2.Plo \ - ./$(DEPDIR)/libwebpdspdecode_sse2_la-yuv_sse2.Plo \ - ./$(DEPDIR)/libwebpdspdecode_sse41_la-alpha_processing_sse41.Plo \ - ./$(DEPDIR)/libwebpdspdecode_sse41_la-dec_sse41.Plo \ - ./$(DEPDIR)/libwebpdspdecode_sse41_la-upsampling_sse41.Plo \ - ./$(DEPDIR)/libwebpdspdecode_sse41_la-yuv_sse41.Plo -am__mv = mv -f -COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ - $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CFLAGS) $(CFLAGS) -AM_V_CC = $(am__v_CC_$(V)) -am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) -am__v_CC_0 = @echo " CC " $@; -am__v_CC_1 = -CCLD = $(CC) -LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ - $(AM_LDFLAGS) $(LDFLAGS) -o $@ -AM_V_CCLD = $(am__v_CCLD_$(V)) -am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) -am__v_CCLD_0 = @echo " CCLD " $@; -am__v_CCLD_1 = -SOURCES = $(libwebpdsp_la_SOURCES) $(libwebpdsp_mips32_la_SOURCES) \ - $(libwebpdsp_mips_dsp_r2_la_SOURCES) \ - $(libwebpdsp_msa_la_SOURCES) $(libwebpdsp_neon_la_SOURCES) \ - $(libwebpdsp_sse2_la_SOURCES) $(libwebpdsp_sse41_la_SOURCES) \ - $(libwebpdspdecode_la_SOURCES) \ - $(libwebpdspdecode_mips32_la_SOURCES) \ - $(libwebpdspdecode_mips_dsp_r2_la_SOURCES) \ - $(libwebpdspdecode_msa_la_SOURCES) \ - $(libwebpdspdecode_neon_la_SOURCES) \ - $(libwebpdspdecode_sse2_la_SOURCES) \ - $(libwebpdspdecode_sse41_la_SOURCES) -DIST_SOURCES = $(libwebpdsp_la_SOURCES) \ - $(libwebpdsp_mips32_la_SOURCES) \ - $(libwebpdsp_mips_dsp_r2_la_SOURCES) \ - $(libwebpdsp_msa_la_SOURCES) $(libwebpdsp_neon_la_SOURCES) \ - $(libwebpdsp_sse2_la_SOURCES) $(libwebpdsp_sse41_la_SOURCES) \ - $(am__libwebpdspdecode_la_SOURCES_DIST) \ - $(libwebpdspdecode_mips32_la_SOURCES) \ - $(libwebpdspdecode_mips_dsp_r2_la_SOURCES) \ - $(libwebpdspdecode_msa_la_SOURCES) \ - $(libwebpdspdecode_neon_la_SOURCES) \ - $(libwebpdspdecode_sse2_la_SOURCES) \ - $(libwebpdspdecode_sse41_la_SOURCES) -am__can_run_installinfo = \ - case $$AM_UPDATE_INFO_DIR in \ - n|no|NO) false;; \ - *) (install-info --version) >/dev/null 2>&1;; \ - esac -am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; -am__vpath_adj = case $$p in \ - $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ - *) f=$$p;; \ - esac; -am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; -am__install_max = 40 -am__nobase_strip_setup = \ - srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` -am__nobase_strip = \ - for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" -am__nobase_list = $(am__nobase_strip_setup); \ - for p in $$list; do echo "$$p $$p"; done | \ - sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ - $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ - if (++n[$$2] == $(am__install_max)) \ - { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ - END { for (dir in files) print dir, files[dir] }' -am__base_list = \ - sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ - sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' -am__uninstall_files_from_dir = { \ - test -z "$$files" \ - || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ - || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ - $(am__cd) "$$dir" && rm -f $$files; }; \ - } -am__installdirs = "$(DESTDIR)$(commondir)" -HEADERS = $(common_HEADERS) $(noinst_HEADERS) -am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) -# Read a list of newline-separated strings from the standard input, -# and print each of them once, without duplicates. Input order is -# *not* preserved. -am__uniquify_input = $(AWK) '\ - BEGIN { nonempty = 0; } \ - { items[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in items) print i; }; } \ -' -# Make sure the list of sources is unique. This is necessary because, -# e.g., the same source file might be shared among _SOURCES variables -# for different programs/libraries. -am__define_uniq_tagged_files = \ - list='$(am__tagged_files)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | $(am__uniquify_input)` -ETAGS = etags -CTAGS = ctags -am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = ${SHELL} /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp/missing aclocal-1.16 -AMTAR = $${TAR-tar} -AM_CFLAGS = -fvisibility=hidden -Wall -Wconstant-conversion -Wdeclaration-after-statement -Wextra -Wfloat-conversion -Wformat -Wformat-nonliteral -Wformat -Wformat-security -Wmissing-declarations -Wmissing-prototypes -Wold-style-definition -Wparentheses-equality -Wshadow -Wshorten-64-to-32 -Wundef -Wunreachable-code -Wunused -Wvla -Wno-deprecated-declarations -AM_CPPFLAGS = -DNDEBUG -I$(top_builddir) -I$(top_srcdir) -AM_DEFAULT_VERBOSITY = 0 -AR = ar -AUTOCONF = ${SHELL} /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp/missing autoconf -AUTOHEADER = ${SHELL} /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp/missing autoheader -AUTOMAKE = ${SHELL} /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp/missing automake-1.16 -AWK = awk -CC = gcc -CCDEPMODE = depmode=gcc3 -CFLAGS = -g -O2 -D_THREAD_SAFE -pthread -CPP = gcc -E -CPPFLAGS = -CYGPATH_W = echo -DEFS = -DHAVE_CONFIG_H -DEPDIR = .deps -DLLTOOL = false -DSYMUTIL = dsymutil -DUMPBIN = -ECHO_C = \c -ECHO_N = -ECHO_T = -EGREP = /usr/bin/grep -E -EXEEXT = -FGREP = /usr/bin/grep -F -GIF_INCLUDES = -GIF_LIBS = -lgif -GL_INCLUDES = -GL_LIBS = -framework GLUT -framework OpenGL -GREP = /usr/bin/grep -INSTALL = /opt/twitter_mde/homebrew_minimal/mde_bin/ginstall -c -INSTALL_DATA = ${INSTALL} -m 644 -INSTALL_PROGRAM = ${INSTALL} -INSTALL_SCRIPT = ${INSTALL} -INSTALL_STRIP_PROGRAM = $(install_sh) -c -s -JPEG_INCLUDES = -DWEBP_HAVE_JPEG -JPEG_LIBS = -ljpeg -LD = /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld -LDFLAGS = -LIBOBJS = -LIBPNG_CONFIG = /opt/twitter_mde/bin/libpng-config -LIBS = -LIBSDL_CONFIG = -LIBTOOL = $(SHELL) $(top_builddir)/libtool -LIPO = lipo -LN_S = ln -s -LTLIBOBJS = -LT_SYS_LIBRARY_PATH = -MAKEINFO = ${SHELL} /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp/missing makeinfo -MANIFEST_TOOL = : -MKDIR_P = /opt/twitter_mde/homebrew_minimal/mde_bin/gmkdir -p -NEON_FLAGS = -NM = /usr/bin/nm -B -NMEDIT = nmedit -OBJDUMP = objdump -OBJEXT = o -OTOOL = otool -OTOOL64 = : -PACKAGE = libwebp -PACKAGE_BUGREPORT = https://bugs.chromium.org/p/webp -PACKAGE_NAME = libwebp -PACKAGE_STRING = libwebp 1.1.0 -PACKAGE_TARNAME = libwebp -PACKAGE_URL = http://developers.google.com/speed/webp -PACKAGE_VERSION = 1.1.0 -PATH_SEPARATOR = : -PNG_INCLUDES = -I/opt/twitter_mde/package/twitter_dev_homebrew/current/Cellar/libpng/1.6.34/include/libpng16 -DWEBP_HAVE_PNG -PNG_LIBS = -L/opt/twitter_mde/package/twitter_dev_homebrew/current/Cellar/libpng/1.6.34/lib -lpng16 -PTHREAD_CC = gcc -PTHREAD_CFLAGS = -D_THREAD_SAFE -pthread -PTHREAD_LIBS = -RANLIB = ranlib -SDL_INCLUDES = -SDL_LIBS = -SED = /usr/bin/sed -SET_MAKE = -SHELL = /bin/sh -SSE2_FLAGS = -msse2 -SSE41_FLAGS = -msse4.1 -STRIP = strip -TIFF_INCLUDES = -DWEBP_HAVE_TIFF -TIFF_LIBS = -ltiff -USE_SWAP_16BIT_CSP = -VERSION = 1.1.0 -abs_builddir = /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp/src/dsp -abs_srcdir = /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp/src/dsp -abs_top_builddir = /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp -abs_top_srcdir = /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp -ac_ct_AR = ar -ac_ct_CC = gcc -ac_ct_DUMPBIN = -am__include = include -am__leading_dot = . -am__quote = -am__tar = $${TAR-tar} chof - "$$tardir" -am__untar = $${TAR-tar} xf - -ax_pthread_config = -bindir = ${exec_prefix}/bin -build = x86_64-apple-darwin19.6.0 -build_alias = -build_cpu = x86_64 -build_os = darwin19.6.0 -build_vendor = apple -builddir = . -datadir = ${datarootdir} -datarootdir = ${prefix}/share -docdir = ${datarootdir}/doc/${PACKAGE_TARNAME} -dvidir = ${docdir} -exec_prefix = ${prefix} -host = x86_64-apple-darwin19.6.0 -host_alias = -host_cpu = x86_64 -host_os = darwin19.6.0 -host_vendor = apple -htmldir = ${docdir} -includedir = ${prefix}/include -infodir = ${datarootdir}/info -install_sh = ${SHELL} /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp/install-sh -libdir = ${exec_prefix}/lib -libexecdir = ${exec_prefix}/libexec -localedir = ${datarootdir}/locale -localstatedir = ${prefix}/var -mandir = ${datarootdir}/man -mkdir_p = $(MKDIR_P) -oldincludedir = /usr/include -pdfdir = ${docdir} -pkgconfigdir = ${libdir}/pkgconfig -prefix = /usr/local -program_transform_name = s,x,x, -psdir = ${docdir} -runstatedir = ${localstatedir}/run -sbindir = ${exec_prefix}/sbin -sharedstatedir = ${prefix}/com -srcdir = . -sysconfdir = ${prefix}/etc -target_alias = -top_build_prefix = ../../ -top_builddir = ../.. -top_srcdir = ../.. -noinst_LTLIBRARIES = libwebpdsp.la libwebpdsp_sse2.la \ - libwebpdspdecode_sse2.la libwebpdsp_sse41.la \ - libwebpdspdecode_sse41.la libwebpdsp_neon.la \ - libwebpdspdecode_neon.la libwebpdsp_msa.la \ - libwebpdspdecode_msa.la libwebpdsp_mips32.la \ - libwebpdspdecode_mips32.la libwebpdsp_mips_dsp_r2.la \ - libwebpdspdecode_mips_dsp_r2.la $(am__append_1) -common_HEADERS = ../webp/types.h -commondir = $(includedir)/webp -COMMON_SOURCES = alpha_processing.c cpu.c dec.c dec_clip_tables.c \ - dsp.h filters.c lossless.c lossless.h lossless_common.h \ - rescaler.c upsampling.c yuv.c yuv.h -ENC_SOURCES = cost.c enc.c lossless_enc.c quant.h ssim.c -libwebpdspdecode_sse41_la_SOURCES = alpha_processing_sse41.c \ - dec_sse41.c upsampling_sse41.c yuv_sse41.c -libwebpdspdecode_sse41_la_CPPFLAGS = $(libwebpdsp_la_CPPFLAGS) -libwebpdspdecode_sse41_la_CFLAGS = $(AM_CFLAGS) $(SSE41_FLAGS) -libwebpdspdecode_sse2_la_SOURCES = alpha_processing_sse2.c \ - common_sse2.h dec_sse2.c filters_sse2.c lossless_sse2.c \ - rescaler_sse2.c upsampling_sse2.c yuv_sse2.c -libwebpdspdecode_sse2_la_CPPFLAGS = $(libwebpdsp_sse2_la_CPPFLAGS) -libwebpdspdecode_sse2_la_CFLAGS = $(libwebpdsp_sse2_la_CFLAGS) -libwebpdspdecode_neon_la_SOURCES = alpha_processing_neon.c dec_neon.c \ - filters_neon.c lossless_neon.c neon.h rescaler_neon.c \ - upsampling_neon.c yuv_neon.c -libwebpdspdecode_neon_la_CPPFLAGS = $(libwebpdsp_neon_la_CPPFLAGS) -libwebpdspdecode_neon_la_CFLAGS = $(libwebpdsp_neon_la_CFLAGS) -libwebpdspdecode_msa_la_SOURCES = dec_msa.c filters_msa.c \ - lossless_msa.c msa_macro.h rescaler_msa.c upsampling_msa.c -libwebpdspdecode_msa_la_CPPFLAGS = $(libwebpdsp_msa_la_CPPFLAGS) -libwebpdspdecode_msa_la_CFLAGS = $(libwebpdsp_msa_la_CFLAGS) -libwebpdspdecode_mips32_la_SOURCES = dec_mips32.c mips_macro.h \ - rescaler_mips32.c yuv_mips32.c -libwebpdspdecode_mips32_la_CPPFLAGS = $(libwebpdsp_mips32_la_CPPFLAGS) -libwebpdspdecode_mips32_la_CFLAGS = $(libwebpdsp_mips32_la_CFLAGS) -libwebpdspdecode_mips_dsp_r2_la_SOURCES = \ - alpha_processing_mips_dsp_r2.c dec_mips_dsp_r2.c \ - filters_mips_dsp_r2.c lossless_mips_dsp_r2.c mips_macro.h \ - rescaler_mips_dsp_r2.c upsampling_mips_dsp_r2.c \ - yuv_mips_dsp_r2.c -libwebpdspdecode_mips_dsp_r2_la_CPPFLAGS = $(libwebpdsp_mips_dsp_r2_la_CPPFLAGS) -libwebpdspdecode_mips_dsp_r2_la_CFLAGS = $(libwebpdsp_mips_dsp_r2_la_CFLAGS) -libwebpdsp_sse2_la_SOURCES = cost_sse2.c enc_sse2.c \ - lossless_enc_sse2.c ssim_sse2.c -libwebpdsp_sse2_la_CPPFLAGS = $(libwebpdsp_la_CPPFLAGS) -libwebpdsp_sse2_la_CFLAGS = $(AM_CFLAGS) $(SSE2_FLAGS) -libwebpdsp_sse2_la_LIBADD = libwebpdspdecode_sse2.la -libwebpdsp_sse41_la_SOURCES = enc_sse41.c lossless_enc_sse41.c -libwebpdsp_sse41_la_CPPFLAGS = $(libwebpdsp_la_CPPFLAGS) -libwebpdsp_sse41_la_CFLAGS = $(AM_CFLAGS) $(SSE41_FLAGS) -libwebpdsp_sse41_la_LIBADD = libwebpdspdecode_sse41.la -libwebpdsp_neon_la_SOURCES = cost_neon.c enc_neon.c \ - lossless_enc_neon.c -libwebpdsp_neon_la_CPPFLAGS = $(libwebpdsp_la_CPPFLAGS) -libwebpdsp_neon_la_CFLAGS = $(AM_CFLAGS) $(NEON_FLAGS) -libwebpdsp_neon_la_LIBADD = libwebpdspdecode_neon.la -libwebpdsp_msa_la_SOURCES = enc_msa.c lossless_enc_msa.c -libwebpdsp_msa_la_CPPFLAGS = $(libwebpdsp_la_CPPFLAGS) -libwebpdsp_msa_la_CFLAGS = $(AM_CFLAGS) -libwebpdsp_msa_la_LIBADD = libwebpdspdecode_msa.la -libwebpdsp_mips32_la_SOURCES = cost_mips32.c enc_mips32.c \ - lossless_enc_mips32.c -libwebpdsp_mips32_la_CPPFLAGS = $(libwebpdsp_la_CPPFLAGS) -libwebpdsp_mips32_la_CFLAGS = $(AM_CFLAGS) -libwebpdsp_mips32_la_LIBADD = libwebpdspdecode_mips32.la -libwebpdsp_mips_dsp_r2_la_SOURCES = cost_mips_dsp_r2.c \ - enc_mips_dsp_r2.c lossless_enc_mips_dsp_r2.c -libwebpdsp_mips_dsp_r2_la_CPPFLAGS = $(libwebpdsp_la_CPPFLAGS) -libwebpdsp_mips_dsp_r2_la_CFLAGS = $(AM_CFLAGS) -libwebpdsp_mips_dsp_r2_la_LIBADD = libwebpdspdecode_mips_dsp_r2.la -libwebpdsp_la_SOURCES = $(COMMON_SOURCES) $(ENC_SOURCES) -noinst_HEADERS = ../dec/vp8_dec.h ../webp/decode.h -libwebpdsp_la_CPPFLAGS = $(AM_CPPFLAGS) $(USE_SWAP_16BIT_CSP) -libwebpdsp_la_LDFLAGS = -lm -libwebpdsp_la_LIBADD = libwebpdsp_sse2.la libwebpdsp_sse41.la \ - libwebpdsp_neon.la libwebpdsp_msa.la libwebpdsp_mips32.la \ - libwebpdsp_mips_dsp_r2.la -#libwebpdspdecode_la_SOURCES = $(COMMON_SOURCES) -#libwebpdspdecode_la_CPPFLAGS = $(libwebpdsp_la_CPPFLAGS) -#libwebpdspdecode_la_LDFLAGS = $(libwebpdsp_la_LDFLAGS) -#libwebpdspdecode_la_LIBADD = \ -# libwebpdspdecode_sse2.la \ -# libwebpdspdecode_sse41.la \ -# libwebpdspdecode_neon.la \ -# libwebpdspdecode_msa.la \ -# libwebpdspdecode_mips32.la \ -# libwebpdspdecode_mips_dsp_r2.la -all: all-am - -.SUFFIXES: -.SUFFIXES: .c .lo .o .obj -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ - && { if test -f $@; then exit 0; else break; fi; }; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/dsp/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --foreign src/dsp/Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(am__aclocal_m4_deps): - -clean-noinstLTLIBRARIES: - -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) - @list='$(noinst_LTLIBRARIES)'; \ - locs=`for p in $$list; do echo $$p; done | \ - sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ - sort -u`; \ - test -z "$$locs" || { \ - echo rm -f $${locs}; \ - rm -f $${locs}; \ - } - -libwebpdsp.la: $(libwebpdsp_la_OBJECTS) $(libwebpdsp_la_DEPENDENCIES) $(EXTRA_libwebpdsp_la_DEPENDENCIES) - $(AM_V_CCLD)$(libwebpdsp_la_LINK) $(libwebpdsp_la_OBJECTS) $(libwebpdsp_la_LIBADD) $(LIBS) - -libwebpdsp_mips32.la: $(libwebpdsp_mips32_la_OBJECTS) $(libwebpdsp_mips32_la_DEPENDENCIES) $(EXTRA_libwebpdsp_mips32_la_DEPENDENCIES) - $(AM_V_CCLD)$(libwebpdsp_mips32_la_LINK) $(libwebpdsp_mips32_la_OBJECTS) $(libwebpdsp_mips32_la_LIBADD) $(LIBS) - -libwebpdsp_mips_dsp_r2.la: $(libwebpdsp_mips_dsp_r2_la_OBJECTS) $(libwebpdsp_mips_dsp_r2_la_DEPENDENCIES) $(EXTRA_libwebpdsp_mips_dsp_r2_la_DEPENDENCIES) - $(AM_V_CCLD)$(libwebpdsp_mips_dsp_r2_la_LINK) $(libwebpdsp_mips_dsp_r2_la_OBJECTS) $(libwebpdsp_mips_dsp_r2_la_LIBADD) $(LIBS) - -libwebpdsp_msa.la: $(libwebpdsp_msa_la_OBJECTS) $(libwebpdsp_msa_la_DEPENDENCIES) $(EXTRA_libwebpdsp_msa_la_DEPENDENCIES) - $(AM_V_CCLD)$(libwebpdsp_msa_la_LINK) $(libwebpdsp_msa_la_OBJECTS) $(libwebpdsp_msa_la_LIBADD) $(LIBS) - -libwebpdsp_neon.la: $(libwebpdsp_neon_la_OBJECTS) $(libwebpdsp_neon_la_DEPENDENCIES) $(EXTRA_libwebpdsp_neon_la_DEPENDENCIES) - $(AM_V_CCLD)$(libwebpdsp_neon_la_LINK) $(libwebpdsp_neon_la_OBJECTS) $(libwebpdsp_neon_la_LIBADD) $(LIBS) - -libwebpdsp_sse2.la: $(libwebpdsp_sse2_la_OBJECTS) $(libwebpdsp_sse2_la_DEPENDENCIES) $(EXTRA_libwebpdsp_sse2_la_DEPENDENCIES) - $(AM_V_CCLD)$(libwebpdsp_sse2_la_LINK) $(libwebpdsp_sse2_la_OBJECTS) $(libwebpdsp_sse2_la_LIBADD) $(LIBS) - -libwebpdsp_sse41.la: $(libwebpdsp_sse41_la_OBJECTS) $(libwebpdsp_sse41_la_DEPENDENCIES) $(EXTRA_libwebpdsp_sse41_la_DEPENDENCIES) - $(AM_V_CCLD)$(libwebpdsp_sse41_la_LINK) $(libwebpdsp_sse41_la_OBJECTS) $(libwebpdsp_sse41_la_LIBADD) $(LIBS) - -libwebpdspdecode.la: $(libwebpdspdecode_la_OBJECTS) $(libwebpdspdecode_la_DEPENDENCIES) $(EXTRA_libwebpdspdecode_la_DEPENDENCIES) - $(AM_V_CCLD)$(libwebpdspdecode_la_LINK) $(am_libwebpdspdecode_la_rpath) $(libwebpdspdecode_la_OBJECTS) $(libwebpdspdecode_la_LIBADD) $(LIBS) - -libwebpdspdecode_mips32.la: $(libwebpdspdecode_mips32_la_OBJECTS) $(libwebpdspdecode_mips32_la_DEPENDENCIES) $(EXTRA_libwebpdspdecode_mips32_la_DEPENDENCIES) - $(AM_V_CCLD)$(libwebpdspdecode_mips32_la_LINK) $(libwebpdspdecode_mips32_la_OBJECTS) $(libwebpdspdecode_mips32_la_LIBADD) $(LIBS) - -libwebpdspdecode_mips_dsp_r2.la: $(libwebpdspdecode_mips_dsp_r2_la_OBJECTS) $(libwebpdspdecode_mips_dsp_r2_la_DEPENDENCIES) $(EXTRA_libwebpdspdecode_mips_dsp_r2_la_DEPENDENCIES) - $(AM_V_CCLD)$(libwebpdspdecode_mips_dsp_r2_la_LINK) $(libwebpdspdecode_mips_dsp_r2_la_OBJECTS) $(libwebpdspdecode_mips_dsp_r2_la_LIBADD) $(LIBS) - -libwebpdspdecode_msa.la: $(libwebpdspdecode_msa_la_OBJECTS) $(libwebpdspdecode_msa_la_DEPENDENCIES) $(EXTRA_libwebpdspdecode_msa_la_DEPENDENCIES) - $(AM_V_CCLD)$(libwebpdspdecode_msa_la_LINK) $(libwebpdspdecode_msa_la_OBJECTS) $(libwebpdspdecode_msa_la_LIBADD) $(LIBS) - -libwebpdspdecode_neon.la: $(libwebpdspdecode_neon_la_OBJECTS) $(libwebpdspdecode_neon_la_DEPENDENCIES) $(EXTRA_libwebpdspdecode_neon_la_DEPENDENCIES) - $(AM_V_CCLD)$(libwebpdspdecode_neon_la_LINK) $(libwebpdspdecode_neon_la_OBJECTS) $(libwebpdspdecode_neon_la_LIBADD) $(LIBS) - -libwebpdspdecode_sse2.la: $(libwebpdspdecode_sse2_la_OBJECTS) $(libwebpdspdecode_sse2_la_DEPENDENCIES) $(EXTRA_libwebpdspdecode_sse2_la_DEPENDENCIES) - $(AM_V_CCLD)$(libwebpdspdecode_sse2_la_LINK) $(libwebpdspdecode_sse2_la_OBJECTS) $(libwebpdspdecode_sse2_la_LIBADD) $(LIBS) - -libwebpdspdecode_sse41.la: $(libwebpdspdecode_sse41_la_OBJECTS) $(libwebpdspdecode_sse41_la_DEPENDENCIES) $(EXTRA_libwebpdspdecode_sse41_la_DEPENDENCIES) - $(AM_V_CCLD)$(libwebpdspdecode_sse41_la_LINK) $(libwebpdspdecode_sse41_la_OBJECTS) $(libwebpdspdecode_sse41_la_LIBADD) $(LIBS) - -mostlyclean-compile: - -rm -f *.$(OBJEXT) - -distclean-compile: - -rm -f *.tab.c - -include ./$(DEPDIR)/libwebpdsp_la-alpha_processing.Plo # am--include-marker -include ./$(DEPDIR)/libwebpdsp_la-cost.Plo # am--include-marker -include ./$(DEPDIR)/libwebpdsp_la-cpu.Plo # am--include-marker -include ./$(DEPDIR)/libwebpdsp_la-dec.Plo # am--include-marker -include ./$(DEPDIR)/libwebpdsp_la-dec_clip_tables.Plo # am--include-marker -include ./$(DEPDIR)/libwebpdsp_la-enc.Plo # am--include-marker -include ./$(DEPDIR)/libwebpdsp_la-filters.Plo # am--include-marker -include ./$(DEPDIR)/libwebpdsp_la-lossless.Plo # am--include-marker -include ./$(DEPDIR)/libwebpdsp_la-lossless_enc.Plo # am--include-marker -include ./$(DEPDIR)/libwebpdsp_la-rescaler.Plo # am--include-marker -include ./$(DEPDIR)/libwebpdsp_la-ssim.Plo # am--include-marker -include ./$(DEPDIR)/libwebpdsp_la-upsampling.Plo # am--include-marker -include ./$(DEPDIR)/libwebpdsp_la-yuv.Plo # am--include-marker -include ./$(DEPDIR)/libwebpdsp_mips32_la-cost_mips32.Plo # am--include-marker -include ./$(DEPDIR)/libwebpdsp_mips32_la-enc_mips32.Plo # am--include-marker -include ./$(DEPDIR)/libwebpdsp_mips32_la-lossless_enc_mips32.Plo # am--include-marker -include ./$(DEPDIR)/libwebpdsp_mips_dsp_r2_la-cost_mips_dsp_r2.Plo # am--include-marker -include ./$(DEPDIR)/libwebpdsp_mips_dsp_r2_la-enc_mips_dsp_r2.Plo # am--include-marker -include ./$(DEPDIR)/libwebpdsp_mips_dsp_r2_la-lossless_enc_mips_dsp_r2.Plo # am--include-marker -include ./$(DEPDIR)/libwebpdsp_msa_la-enc_msa.Plo # am--include-marker -include ./$(DEPDIR)/libwebpdsp_msa_la-lossless_enc_msa.Plo # am--include-marker -include ./$(DEPDIR)/libwebpdsp_neon_la-cost_neon.Plo # am--include-marker -include ./$(DEPDIR)/libwebpdsp_neon_la-enc_neon.Plo # am--include-marker -include ./$(DEPDIR)/libwebpdsp_neon_la-lossless_enc_neon.Plo # am--include-marker -include ./$(DEPDIR)/libwebpdsp_sse2_la-cost_sse2.Plo # am--include-marker -include ./$(DEPDIR)/libwebpdsp_sse2_la-enc_sse2.Plo # am--include-marker -include ./$(DEPDIR)/libwebpdsp_sse2_la-lossless_enc_sse2.Plo # am--include-marker -include ./$(DEPDIR)/libwebpdsp_sse2_la-ssim_sse2.Plo # am--include-marker -include ./$(DEPDIR)/libwebpdsp_sse41_la-enc_sse41.Plo # am--include-marker -include ./$(DEPDIR)/libwebpdsp_sse41_la-lossless_enc_sse41.Plo # am--include-marker -include ./$(DEPDIR)/libwebpdspdecode_la-alpha_processing.Plo # am--include-marker -include ./$(DEPDIR)/libwebpdspdecode_la-cpu.Plo # am--include-marker -include ./$(DEPDIR)/libwebpdspdecode_la-dec.Plo # am--include-marker -include ./$(DEPDIR)/libwebpdspdecode_la-dec_clip_tables.Plo # am--include-marker -include ./$(DEPDIR)/libwebpdspdecode_la-filters.Plo # am--include-marker -include ./$(DEPDIR)/libwebpdspdecode_la-lossless.Plo # am--include-marker -include ./$(DEPDIR)/libwebpdspdecode_la-rescaler.Plo # am--include-marker -include ./$(DEPDIR)/libwebpdspdecode_la-upsampling.Plo # am--include-marker -include ./$(DEPDIR)/libwebpdspdecode_la-yuv.Plo # am--include-marker -include ./$(DEPDIR)/libwebpdspdecode_mips32_la-dec_mips32.Plo # am--include-marker -include ./$(DEPDIR)/libwebpdspdecode_mips32_la-rescaler_mips32.Plo # am--include-marker -include ./$(DEPDIR)/libwebpdspdecode_mips32_la-yuv_mips32.Plo # am--include-marker -include ./$(DEPDIR)/libwebpdspdecode_mips_dsp_r2_la-alpha_processing_mips_dsp_r2.Plo # am--include-marker -include ./$(DEPDIR)/libwebpdspdecode_mips_dsp_r2_la-dec_mips_dsp_r2.Plo # am--include-marker -include ./$(DEPDIR)/libwebpdspdecode_mips_dsp_r2_la-filters_mips_dsp_r2.Plo # am--include-marker -include ./$(DEPDIR)/libwebpdspdecode_mips_dsp_r2_la-lossless_mips_dsp_r2.Plo # am--include-marker -include ./$(DEPDIR)/libwebpdspdecode_mips_dsp_r2_la-rescaler_mips_dsp_r2.Plo # am--include-marker -include ./$(DEPDIR)/libwebpdspdecode_mips_dsp_r2_la-upsampling_mips_dsp_r2.Plo # am--include-marker -include ./$(DEPDIR)/libwebpdspdecode_mips_dsp_r2_la-yuv_mips_dsp_r2.Plo # am--include-marker -include ./$(DEPDIR)/libwebpdspdecode_msa_la-dec_msa.Plo # am--include-marker -include ./$(DEPDIR)/libwebpdspdecode_msa_la-filters_msa.Plo # am--include-marker -include ./$(DEPDIR)/libwebpdspdecode_msa_la-lossless_msa.Plo # am--include-marker -include ./$(DEPDIR)/libwebpdspdecode_msa_la-rescaler_msa.Plo # am--include-marker -include ./$(DEPDIR)/libwebpdspdecode_msa_la-upsampling_msa.Plo # am--include-marker -include ./$(DEPDIR)/libwebpdspdecode_neon_la-alpha_processing_neon.Plo # am--include-marker -include ./$(DEPDIR)/libwebpdspdecode_neon_la-dec_neon.Plo # am--include-marker -include ./$(DEPDIR)/libwebpdspdecode_neon_la-filters_neon.Plo # am--include-marker -include ./$(DEPDIR)/libwebpdspdecode_neon_la-lossless_neon.Plo # am--include-marker -include ./$(DEPDIR)/libwebpdspdecode_neon_la-rescaler_neon.Plo # am--include-marker -include ./$(DEPDIR)/libwebpdspdecode_neon_la-upsampling_neon.Plo # am--include-marker -include ./$(DEPDIR)/libwebpdspdecode_neon_la-yuv_neon.Plo # am--include-marker -include ./$(DEPDIR)/libwebpdspdecode_sse2_la-alpha_processing_sse2.Plo # am--include-marker -include ./$(DEPDIR)/libwebpdspdecode_sse2_la-dec_sse2.Plo # am--include-marker -include ./$(DEPDIR)/libwebpdspdecode_sse2_la-filters_sse2.Plo # am--include-marker -include ./$(DEPDIR)/libwebpdspdecode_sse2_la-lossless_sse2.Plo # am--include-marker -include ./$(DEPDIR)/libwebpdspdecode_sse2_la-rescaler_sse2.Plo # am--include-marker -include ./$(DEPDIR)/libwebpdspdecode_sse2_la-upsampling_sse2.Plo # am--include-marker -include ./$(DEPDIR)/libwebpdspdecode_sse2_la-yuv_sse2.Plo # am--include-marker -include ./$(DEPDIR)/libwebpdspdecode_sse41_la-alpha_processing_sse41.Plo # am--include-marker -include ./$(DEPDIR)/libwebpdspdecode_sse41_la-dec_sse41.Plo # am--include-marker -include ./$(DEPDIR)/libwebpdspdecode_sse41_la-upsampling_sse41.Plo # am--include-marker -include ./$(DEPDIR)/libwebpdspdecode_sse41_la-yuv_sse41.Plo # am--include-marker - -$(am__depfiles_remade): - @$(MKDIR_P) $(@D) - @echo '# dummy' >$@-t && $(am__mv) $@-t $@ - -am--depfiles: $(am__depfiles_remade) - -.c.o: - $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ - $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ - $(am__mv) $$depbase.Tpo $$depbase.Po -# $(AM_V_CC)source='$<' object='$@' libtool=no \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(COMPILE) -c -o $@ $< - -.c.obj: - $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ - $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ - $(am__mv) $$depbase.Tpo $$depbase.Po -# $(AM_V_CC)source='$<' object='$@' libtool=no \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` - -.c.lo: - $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ - $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ - $(am__mv) $$depbase.Tpo $$depbase.Plo -# $(AM_V_CC)source='$<' object='$@' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LTCOMPILE) -c -o $@ $< - -libwebpdsp_la-alpha_processing.lo: alpha_processing.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwebpdsp_la-alpha_processing.lo -MD -MP -MF $(DEPDIR)/libwebpdsp_la-alpha_processing.Tpo -c -o libwebpdsp_la-alpha_processing.lo `test -f 'alpha_processing.c' || echo '$(srcdir)/'`alpha_processing.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdsp_la-alpha_processing.Tpo $(DEPDIR)/libwebpdsp_la-alpha_processing.Plo -# $(AM_V_CC)source='alpha_processing.c' object='libwebpdsp_la-alpha_processing.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwebpdsp_la-alpha_processing.lo `test -f 'alpha_processing.c' || echo '$(srcdir)/'`alpha_processing.c - -libwebpdsp_la-cpu.lo: cpu.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwebpdsp_la-cpu.lo -MD -MP -MF $(DEPDIR)/libwebpdsp_la-cpu.Tpo -c -o libwebpdsp_la-cpu.lo `test -f 'cpu.c' || echo '$(srcdir)/'`cpu.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdsp_la-cpu.Tpo $(DEPDIR)/libwebpdsp_la-cpu.Plo -# $(AM_V_CC)source='cpu.c' object='libwebpdsp_la-cpu.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwebpdsp_la-cpu.lo `test -f 'cpu.c' || echo '$(srcdir)/'`cpu.c - -libwebpdsp_la-dec.lo: dec.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwebpdsp_la-dec.lo -MD -MP -MF $(DEPDIR)/libwebpdsp_la-dec.Tpo -c -o libwebpdsp_la-dec.lo `test -f 'dec.c' || echo '$(srcdir)/'`dec.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdsp_la-dec.Tpo $(DEPDIR)/libwebpdsp_la-dec.Plo -# $(AM_V_CC)source='dec.c' object='libwebpdsp_la-dec.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwebpdsp_la-dec.lo `test -f 'dec.c' || echo '$(srcdir)/'`dec.c - -libwebpdsp_la-dec_clip_tables.lo: dec_clip_tables.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwebpdsp_la-dec_clip_tables.lo -MD -MP -MF $(DEPDIR)/libwebpdsp_la-dec_clip_tables.Tpo -c -o libwebpdsp_la-dec_clip_tables.lo `test -f 'dec_clip_tables.c' || echo '$(srcdir)/'`dec_clip_tables.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdsp_la-dec_clip_tables.Tpo $(DEPDIR)/libwebpdsp_la-dec_clip_tables.Plo -# $(AM_V_CC)source='dec_clip_tables.c' object='libwebpdsp_la-dec_clip_tables.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwebpdsp_la-dec_clip_tables.lo `test -f 'dec_clip_tables.c' || echo '$(srcdir)/'`dec_clip_tables.c - -libwebpdsp_la-filters.lo: filters.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwebpdsp_la-filters.lo -MD -MP -MF $(DEPDIR)/libwebpdsp_la-filters.Tpo -c -o libwebpdsp_la-filters.lo `test -f 'filters.c' || echo '$(srcdir)/'`filters.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdsp_la-filters.Tpo $(DEPDIR)/libwebpdsp_la-filters.Plo -# $(AM_V_CC)source='filters.c' object='libwebpdsp_la-filters.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwebpdsp_la-filters.lo `test -f 'filters.c' || echo '$(srcdir)/'`filters.c - -libwebpdsp_la-lossless.lo: lossless.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwebpdsp_la-lossless.lo -MD -MP -MF $(DEPDIR)/libwebpdsp_la-lossless.Tpo -c -o libwebpdsp_la-lossless.lo `test -f 'lossless.c' || echo '$(srcdir)/'`lossless.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdsp_la-lossless.Tpo $(DEPDIR)/libwebpdsp_la-lossless.Plo -# $(AM_V_CC)source='lossless.c' object='libwebpdsp_la-lossless.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwebpdsp_la-lossless.lo `test -f 'lossless.c' || echo '$(srcdir)/'`lossless.c - -libwebpdsp_la-rescaler.lo: rescaler.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwebpdsp_la-rescaler.lo -MD -MP -MF $(DEPDIR)/libwebpdsp_la-rescaler.Tpo -c -o libwebpdsp_la-rescaler.lo `test -f 'rescaler.c' || echo '$(srcdir)/'`rescaler.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdsp_la-rescaler.Tpo $(DEPDIR)/libwebpdsp_la-rescaler.Plo -# $(AM_V_CC)source='rescaler.c' object='libwebpdsp_la-rescaler.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwebpdsp_la-rescaler.lo `test -f 'rescaler.c' || echo '$(srcdir)/'`rescaler.c - -libwebpdsp_la-upsampling.lo: upsampling.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwebpdsp_la-upsampling.lo -MD -MP -MF $(DEPDIR)/libwebpdsp_la-upsampling.Tpo -c -o libwebpdsp_la-upsampling.lo `test -f 'upsampling.c' || echo '$(srcdir)/'`upsampling.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdsp_la-upsampling.Tpo $(DEPDIR)/libwebpdsp_la-upsampling.Plo -# $(AM_V_CC)source='upsampling.c' object='libwebpdsp_la-upsampling.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwebpdsp_la-upsampling.lo `test -f 'upsampling.c' || echo '$(srcdir)/'`upsampling.c - -libwebpdsp_la-yuv.lo: yuv.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwebpdsp_la-yuv.lo -MD -MP -MF $(DEPDIR)/libwebpdsp_la-yuv.Tpo -c -o libwebpdsp_la-yuv.lo `test -f 'yuv.c' || echo '$(srcdir)/'`yuv.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdsp_la-yuv.Tpo $(DEPDIR)/libwebpdsp_la-yuv.Plo -# $(AM_V_CC)source='yuv.c' object='libwebpdsp_la-yuv.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwebpdsp_la-yuv.lo `test -f 'yuv.c' || echo '$(srcdir)/'`yuv.c - -libwebpdsp_la-cost.lo: cost.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwebpdsp_la-cost.lo -MD -MP -MF $(DEPDIR)/libwebpdsp_la-cost.Tpo -c -o libwebpdsp_la-cost.lo `test -f 'cost.c' || echo '$(srcdir)/'`cost.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdsp_la-cost.Tpo $(DEPDIR)/libwebpdsp_la-cost.Plo -# $(AM_V_CC)source='cost.c' object='libwebpdsp_la-cost.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwebpdsp_la-cost.lo `test -f 'cost.c' || echo '$(srcdir)/'`cost.c - -libwebpdsp_la-enc.lo: enc.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwebpdsp_la-enc.lo -MD -MP -MF $(DEPDIR)/libwebpdsp_la-enc.Tpo -c -o libwebpdsp_la-enc.lo `test -f 'enc.c' || echo '$(srcdir)/'`enc.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdsp_la-enc.Tpo $(DEPDIR)/libwebpdsp_la-enc.Plo -# $(AM_V_CC)source='enc.c' object='libwebpdsp_la-enc.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwebpdsp_la-enc.lo `test -f 'enc.c' || echo '$(srcdir)/'`enc.c - -libwebpdsp_la-lossless_enc.lo: lossless_enc.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwebpdsp_la-lossless_enc.lo -MD -MP -MF $(DEPDIR)/libwebpdsp_la-lossless_enc.Tpo -c -o libwebpdsp_la-lossless_enc.lo `test -f 'lossless_enc.c' || echo '$(srcdir)/'`lossless_enc.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdsp_la-lossless_enc.Tpo $(DEPDIR)/libwebpdsp_la-lossless_enc.Plo -# $(AM_V_CC)source='lossless_enc.c' object='libwebpdsp_la-lossless_enc.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwebpdsp_la-lossless_enc.lo `test -f 'lossless_enc.c' || echo '$(srcdir)/'`lossless_enc.c - -libwebpdsp_la-ssim.lo: ssim.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwebpdsp_la-ssim.lo -MD -MP -MF $(DEPDIR)/libwebpdsp_la-ssim.Tpo -c -o libwebpdsp_la-ssim.lo `test -f 'ssim.c' || echo '$(srcdir)/'`ssim.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdsp_la-ssim.Tpo $(DEPDIR)/libwebpdsp_la-ssim.Plo -# $(AM_V_CC)source='ssim.c' object='libwebpdsp_la-ssim.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwebpdsp_la-ssim.lo `test -f 'ssim.c' || echo '$(srcdir)/'`ssim.c - -libwebpdsp_mips32_la-cost_mips32.lo: cost_mips32.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_mips32_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdsp_mips32_la_CFLAGS) $(CFLAGS) -MT libwebpdsp_mips32_la-cost_mips32.lo -MD -MP -MF $(DEPDIR)/libwebpdsp_mips32_la-cost_mips32.Tpo -c -o libwebpdsp_mips32_la-cost_mips32.lo `test -f 'cost_mips32.c' || echo '$(srcdir)/'`cost_mips32.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdsp_mips32_la-cost_mips32.Tpo $(DEPDIR)/libwebpdsp_mips32_la-cost_mips32.Plo -# $(AM_V_CC)source='cost_mips32.c' object='libwebpdsp_mips32_la-cost_mips32.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_mips32_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdsp_mips32_la_CFLAGS) $(CFLAGS) -c -o libwebpdsp_mips32_la-cost_mips32.lo `test -f 'cost_mips32.c' || echo '$(srcdir)/'`cost_mips32.c - -libwebpdsp_mips32_la-enc_mips32.lo: enc_mips32.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_mips32_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdsp_mips32_la_CFLAGS) $(CFLAGS) -MT libwebpdsp_mips32_la-enc_mips32.lo -MD -MP -MF $(DEPDIR)/libwebpdsp_mips32_la-enc_mips32.Tpo -c -o libwebpdsp_mips32_la-enc_mips32.lo `test -f 'enc_mips32.c' || echo '$(srcdir)/'`enc_mips32.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdsp_mips32_la-enc_mips32.Tpo $(DEPDIR)/libwebpdsp_mips32_la-enc_mips32.Plo -# $(AM_V_CC)source='enc_mips32.c' object='libwebpdsp_mips32_la-enc_mips32.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_mips32_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdsp_mips32_la_CFLAGS) $(CFLAGS) -c -o libwebpdsp_mips32_la-enc_mips32.lo `test -f 'enc_mips32.c' || echo '$(srcdir)/'`enc_mips32.c - -libwebpdsp_mips32_la-lossless_enc_mips32.lo: lossless_enc_mips32.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_mips32_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdsp_mips32_la_CFLAGS) $(CFLAGS) -MT libwebpdsp_mips32_la-lossless_enc_mips32.lo -MD -MP -MF $(DEPDIR)/libwebpdsp_mips32_la-lossless_enc_mips32.Tpo -c -o libwebpdsp_mips32_la-lossless_enc_mips32.lo `test -f 'lossless_enc_mips32.c' || echo '$(srcdir)/'`lossless_enc_mips32.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdsp_mips32_la-lossless_enc_mips32.Tpo $(DEPDIR)/libwebpdsp_mips32_la-lossless_enc_mips32.Plo -# $(AM_V_CC)source='lossless_enc_mips32.c' object='libwebpdsp_mips32_la-lossless_enc_mips32.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_mips32_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdsp_mips32_la_CFLAGS) $(CFLAGS) -c -o libwebpdsp_mips32_la-lossless_enc_mips32.lo `test -f 'lossless_enc_mips32.c' || echo '$(srcdir)/'`lossless_enc_mips32.c - -libwebpdsp_mips_dsp_r2_la-cost_mips_dsp_r2.lo: cost_mips_dsp_r2.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_mips_dsp_r2_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdsp_mips_dsp_r2_la_CFLAGS) $(CFLAGS) -MT libwebpdsp_mips_dsp_r2_la-cost_mips_dsp_r2.lo -MD -MP -MF $(DEPDIR)/libwebpdsp_mips_dsp_r2_la-cost_mips_dsp_r2.Tpo -c -o libwebpdsp_mips_dsp_r2_la-cost_mips_dsp_r2.lo `test -f 'cost_mips_dsp_r2.c' || echo '$(srcdir)/'`cost_mips_dsp_r2.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdsp_mips_dsp_r2_la-cost_mips_dsp_r2.Tpo $(DEPDIR)/libwebpdsp_mips_dsp_r2_la-cost_mips_dsp_r2.Plo -# $(AM_V_CC)source='cost_mips_dsp_r2.c' object='libwebpdsp_mips_dsp_r2_la-cost_mips_dsp_r2.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_mips_dsp_r2_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdsp_mips_dsp_r2_la_CFLAGS) $(CFLAGS) -c -o libwebpdsp_mips_dsp_r2_la-cost_mips_dsp_r2.lo `test -f 'cost_mips_dsp_r2.c' || echo '$(srcdir)/'`cost_mips_dsp_r2.c - -libwebpdsp_mips_dsp_r2_la-enc_mips_dsp_r2.lo: enc_mips_dsp_r2.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_mips_dsp_r2_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdsp_mips_dsp_r2_la_CFLAGS) $(CFLAGS) -MT libwebpdsp_mips_dsp_r2_la-enc_mips_dsp_r2.lo -MD -MP -MF $(DEPDIR)/libwebpdsp_mips_dsp_r2_la-enc_mips_dsp_r2.Tpo -c -o libwebpdsp_mips_dsp_r2_la-enc_mips_dsp_r2.lo `test -f 'enc_mips_dsp_r2.c' || echo '$(srcdir)/'`enc_mips_dsp_r2.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdsp_mips_dsp_r2_la-enc_mips_dsp_r2.Tpo $(DEPDIR)/libwebpdsp_mips_dsp_r2_la-enc_mips_dsp_r2.Plo -# $(AM_V_CC)source='enc_mips_dsp_r2.c' object='libwebpdsp_mips_dsp_r2_la-enc_mips_dsp_r2.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_mips_dsp_r2_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdsp_mips_dsp_r2_la_CFLAGS) $(CFLAGS) -c -o libwebpdsp_mips_dsp_r2_la-enc_mips_dsp_r2.lo `test -f 'enc_mips_dsp_r2.c' || echo '$(srcdir)/'`enc_mips_dsp_r2.c - -libwebpdsp_mips_dsp_r2_la-lossless_enc_mips_dsp_r2.lo: lossless_enc_mips_dsp_r2.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_mips_dsp_r2_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdsp_mips_dsp_r2_la_CFLAGS) $(CFLAGS) -MT libwebpdsp_mips_dsp_r2_la-lossless_enc_mips_dsp_r2.lo -MD -MP -MF $(DEPDIR)/libwebpdsp_mips_dsp_r2_la-lossless_enc_mips_dsp_r2.Tpo -c -o libwebpdsp_mips_dsp_r2_la-lossless_enc_mips_dsp_r2.lo `test -f 'lossless_enc_mips_dsp_r2.c' || echo '$(srcdir)/'`lossless_enc_mips_dsp_r2.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdsp_mips_dsp_r2_la-lossless_enc_mips_dsp_r2.Tpo $(DEPDIR)/libwebpdsp_mips_dsp_r2_la-lossless_enc_mips_dsp_r2.Plo -# $(AM_V_CC)source='lossless_enc_mips_dsp_r2.c' object='libwebpdsp_mips_dsp_r2_la-lossless_enc_mips_dsp_r2.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_mips_dsp_r2_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdsp_mips_dsp_r2_la_CFLAGS) $(CFLAGS) -c -o libwebpdsp_mips_dsp_r2_la-lossless_enc_mips_dsp_r2.lo `test -f 'lossless_enc_mips_dsp_r2.c' || echo '$(srcdir)/'`lossless_enc_mips_dsp_r2.c - -libwebpdsp_msa_la-enc_msa.lo: enc_msa.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_msa_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdsp_msa_la_CFLAGS) $(CFLAGS) -MT libwebpdsp_msa_la-enc_msa.lo -MD -MP -MF $(DEPDIR)/libwebpdsp_msa_la-enc_msa.Tpo -c -o libwebpdsp_msa_la-enc_msa.lo `test -f 'enc_msa.c' || echo '$(srcdir)/'`enc_msa.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdsp_msa_la-enc_msa.Tpo $(DEPDIR)/libwebpdsp_msa_la-enc_msa.Plo -# $(AM_V_CC)source='enc_msa.c' object='libwebpdsp_msa_la-enc_msa.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_msa_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdsp_msa_la_CFLAGS) $(CFLAGS) -c -o libwebpdsp_msa_la-enc_msa.lo `test -f 'enc_msa.c' || echo '$(srcdir)/'`enc_msa.c - -libwebpdsp_msa_la-lossless_enc_msa.lo: lossless_enc_msa.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_msa_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdsp_msa_la_CFLAGS) $(CFLAGS) -MT libwebpdsp_msa_la-lossless_enc_msa.lo -MD -MP -MF $(DEPDIR)/libwebpdsp_msa_la-lossless_enc_msa.Tpo -c -o libwebpdsp_msa_la-lossless_enc_msa.lo `test -f 'lossless_enc_msa.c' || echo '$(srcdir)/'`lossless_enc_msa.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdsp_msa_la-lossless_enc_msa.Tpo $(DEPDIR)/libwebpdsp_msa_la-lossless_enc_msa.Plo -# $(AM_V_CC)source='lossless_enc_msa.c' object='libwebpdsp_msa_la-lossless_enc_msa.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_msa_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdsp_msa_la_CFLAGS) $(CFLAGS) -c -o libwebpdsp_msa_la-lossless_enc_msa.lo `test -f 'lossless_enc_msa.c' || echo '$(srcdir)/'`lossless_enc_msa.c - -libwebpdsp_neon_la-cost_neon.lo: cost_neon.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_neon_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdsp_neon_la_CFLAGS) $(CFLAGS) -MT libwebpdsp_neon_la-cost_neon.lo -MD -MP -MF $(DEPDIR)/libwebpdsp_neon_la-cost_neon.Tpo -c -o libwebpdsp_neon_la-cost_neon.lo `test -f 'cost_neon.c' || echo '$(srcdir)/'`cost_neon.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdsp_neon_la-cost_neon.Tpo $(DEPDIR)/libwebpdsp_neon_la-cost_neon.Plo -# $(AM_V_CC)source='cost_neon.c' object='libwebpdsp_neon_la-cost_neon.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_neon_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdsp_neon_la_CFLAGS) $(CFLAGS) -c -o libwebpdsp_neon_la-cost_neon.lo `test -f 'cost_neon.c' || echo '$(srcdir)/'`cost_neon.c - -libwebpdsp_neon_la-enc_neon.lo: enc_neon.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_neon_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdsp_neon_la_CFLAGS) $(CFLAGS) -MT libwebpdsp_neon_la-enc_neon.lo -MD -MP -MF $(DEPDIR)/libwebpdsp_neon_la-enc_neon.Tpo -c -o libwebpdsp_neon_la-enc_neon.lo `test -f 'enc_neon.c' || echo '$(srcdir)/'`enc_neon.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdsp_neon_la-enc_neon.Tpo $(DEPDIR)/libwebpdsp_neon_la-enc_neon.Plo -# $(AM_V_CC)source='enc_neon.c' object='libwebpdsp_neon_la-enc_neon.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_neon_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdsp_neon_la_CFLAGS) $(CFLAGS) -c -o libwebpdsp_neon_la-enc_neon.lo `test -f 'enc_neon.c' || echo '$(srcdir)/'`enc_neon.c - -libwebpdsp_neon_la-lossless_enc_neon.lo: lossless_enc_neon.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_neon_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdsp_neon_la_CFLAGS) $(CFLAGS) -MT libwebpdsp_neon_la-lossless_enc_neon.lo -MD -MP -MF $(DEPDIR)/libwebpdsp_neon_la-lossless_enc_neon.Tpo -c -o libwebpdsp_neon_la-lossless_enc_neon.lo `test -f 'lossless_enc_neon.c' || echo '$(srcdir)/'`lossless_enc_neon.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdsp_neon_la-lossless_enc_neon.Tpo $(DEPDIR)/libwebpdsp_neon_la-lossless_enc_neon.Plo -# $(AM_V_CC)source='lossless_enc_neon.c' object='libwebpdsp_neon_la-lossless_enc_neon.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_neon_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdsp_neon_la_CFLAGS) $(CFLAGS) -c -o libwebpdsp_neon_la-lossless_enc_neon.lo `test -f 'lossless_enc_neon.c' || echo '$(srcdir)/'`lossless_enc_neon.c - -libwebpdsp_sse2_la-cost_sse2.lo: cost_sse2.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_sse2_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdsp_sse2_la_CFLAGS) $(CFLAGS) -MT libwebpdsp_sse2_la-cost_sse2.lo -MD -MP -MF $(DEPDIR)/libwebpdsp_sse2_la-cost_sse2.Tpo -c -o libwebpdsp_sse2_la-cost_sse2.lo `test -f 'cost_sse2.c' || echo '$(srcdir)/'`cost_sse2.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdsp_sse2_la-cost_sse2.Tpo $(DEPDIR)/libwebpdsp_sse2_la-cost_sse2.Plo -# $(AM_V_CC)source='cost_sse2.c' object='libwebpdsp_sse2_la-cost_sse2.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_sse2_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdsp_sse2_la_CFLAGS) $(CFLAGS) -c -o libwebpdsp_sse2_la-cost_sse2.lo `test -f 'cost_sse2.c' || echo '$(srcdir)/'`cost_sse2.c - -libwebpdsp_sse2_la-enc_sse2.lo: enc_sse2.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_sse2_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdsp_sse2_la_CFLAGS) $(CFLAGS) -MT libwebpdsp_sse2_la-enc_sse2.lo -MD -MP -MF $(DEPDIR)/libwebpdsp_sse2_la-enc_sse2.Tpo -c -o libwebpdsp_sse2_la-enc_sse2.lo `test -f 'enc_sse2.c' || echo '$(srcdir)/'`enc_sse2.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdsp_sse2_la-enc_sse2.Tpo $(DEPDIR)/libwebpdsp_sse2_la-enc_sse2.Plo -# $(AM_V_CC)source='enc_sse2.c' object='libwebpdsp_sse2_la-enc_sse2.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_sse2_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdsp_sse2_la_CFLAGS) $(CFLAGS) -c -o libwebpdsp_sse2_la-enc_sse2.lo `test -f 'enc_sse2.c' || echo '$(srcdir)/'`enc_sse2.c - -libwebpdsp_sse2_la-lossless_enc_sse2.lo: lossless_enc_sse2.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_sse2_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdsp_sse2_la_CFLAGS) $(CFLAGS) -MT libwebpdsp_sse2_la-lossless_enc_sse2.lo -MD -MP -MF $(DEPDIR)/libwebpdsp_sse2_la-lossless_enc_sse2.Tpo -c -o libwebpdsp_sse2_la-lossless_enc_sse2.lo `test -f 'lossless_enc_sse2.c' || echo '$(srcdir)/'`lossless_enc_sse2.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdsp_sse2_la-lossless_enc_sse2.Tpo $(DEPDIR)/libwebpdsp_sse2_la-lossless_enc_sse2.Plo -# $(AM_V_CC)source='lossless_enc_sse2.c' object='libwebpdsp_sse2_la-lossless_enc_sse2.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_sse2_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdsp_sse2_la_CFLAGS) $(CFLAGS) -c -o libwebpdsp_sse2_la-lossless_enc_sse2.lo `test -f 'lossless_enc_sse2.c' || echo '$(srcdir)/'`lossless_enc_sse2.c - -libwebpdsp_sse2_la-ssim_sse2.lo: ssim_sse2.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_sse2_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdsp_sse2_la_CFLAGS) $(CFLAGS) -MT libwebpdsp_sse2_la-ssim_sse2.lo -MD -MP -MF $(DEPDIR)/libwebpdsp_sse2_la-ssim_sse2.Tpo -c -o libwebpdsp_sse2_la-ssim_sse2.lo `test -f 'ssim_sse2.c' || echo '$(srcdir)/'`ssim_sse2.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdsp_sse2_la-ssim_sse2.Tpo $(DEPDIR)/libwebpdsp_sse2_la-ssim_sse2.Plo -# $(AM_V_CC)source='ssim_sse2.c' object='libwebpdsp_sse2_la-ssim_sse2.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_sse2_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdsp_sse2_la_CFLAGS) $(CFLAGS) -c -o libwebpdsp_sse2_la-ssim_sse2.lo `test -f 'ssim_sse2.c' || echo '$(srcdir)/'`ssim_sse2.c - -libwebpdsp_sse41_la-enc_sse41.lo: enc_sse41.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_sse41_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdsp_sse41_la_CFLAGS) $(CFLAGS) -MT libwebpdsp_sse41_la-enc_sse41.lo -MD -MP -MF $(DEPDIR)/libwebpdsp_sse41_la-enc_sse41.Tpo -c -o libwebpdsp_sse41_la-enc_sse41.lo `test -f 'enc_sse41.c' || echo '$(srcdir)/'`enc_sse41.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdsp_sse41_la-enc_sse41.Tpo $(DEPDIR)/libwebpdsp_sse41_la-enc_sse41.Plo -# $(AM_V_CC)source='enc_sse41.c' object='libwebpdsp_sse41_la-enc_sse41.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_sse41_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdsp_sse41_la_CFLAGS) $(CFLAGS) -c -o libwebpdsp_sse41_la-enc_sse41.lo `test -f 'enc_sse41.c' || echo '$(srcdir)/'`enc_sse41.c - -libwebpdsp_sse41_la-lossless_enc_sse41.lo: lossless_enc_sse41.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_sse41_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdsp_sse41_la_CFLAGS) $(CFLAGS) -MT libwebpdsp_sse41_la-lossless_enc_sse41.lo -MD -MP -MF $(DEPDIR)/libwebpdsp_sse41_la-lossless_enc_sse41.Tpo -c -o libwebpdsp_sse41_la-lossless_enc_sse41.lo `test -f 'lossless_enc_sse41.c' || echo '$(srcdir)/'`lossless_enc_sse41.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdsp_sse41_la-lossless_enc_sse41.Tpo $(DEPDIR)/libwebpdsp_sse41_la-lossless_enc_sse41.Plo -# $(AM_V_CC)source='lossless_enc_sse41.c' object='libwebpdsp_sse41_la-lossless_enc_sse41.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_sse41_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdsp_sse41_la_CFLAGS) $(CFLAGS) -c -o libwebpdsp_sse41_la-lossless_enc_sse41.lo `test -f 'lossless_enc_sse41.c' || echo '$(srcdir)/'`lossless_enc_sse41.c - -libwebpdspdecode_la-alpha_processing.lo: alpha_processing.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwebpdspdecode_la-alpha_processing.lo -MD -MP -MF $(DEPDIR)/libwebpdspdecode_la-alpha_processing.Tpo -c -o libwebpdspdecode_la-alpha_processing.lo `test -f 'alpha_processing.c' || echo '$(srcdir)/'`alpha_processing.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdspdecode_la-alpha_processing.Tpo $(DEPDIR)/libwebpdspdecode_la-alpha_processing.Plo -# $(AM_V_CC)source='alpha_processing.c' object='libwebpdspdecode_la-alpha_processing.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwebpdspdecode_la-alpha_processing.lo `test -f 'alpha_processing.c' || echo '$(srcdir)/'`alpha_processing.c - -libwebpdspdecode_la-cpu.lo: cpu.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwebpdspdecode_la-cpu.lo -MD -MP -MF $(DEPDIR)/libwebpdspdecode_la-cpu.Tpo -c -o libwebpdspdecode_la-cpu.lo `test -f 'cpu.c' || echo '$(srcdir)/'`cpu.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdspdecode_la-cpu.Tpo $(DEPDIR)/libwebpdspdecode_la-cpu.Plo -# $(AM_V_CC)source='cpu.c' object='libwebpdspdecode_la-cpu.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwebpdspdecode_la-cpu.lo `test -f 'cpu.c' || echo '$(srcdir)/'`cpu.c - -libwebpdspdecode_la-dec.lo: dec.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwebpdspdecode_la-dec.lo -MD -MP -MF $(DEPDIR)/libwebpdspdecode_la-dec.Tpo -c -o libwebpdspdecode_la-dec.lo `test -f 'dec.c' || echo '$(srcdir)/'`dec.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdspdecode_la-dec.Tpo $(DEPDIR)/libwebpdspdecode_la-dec.Plo -# $(AM_V_CC)source='dec.c' object='libwebpdspdecode_la-dec.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwebpdspdecode_la-dec.lo `test -f 'dec.c' || echo '$(srcdir)/'`dec.c - -libwebpdspdecode_la-dec_clip_tables.lo: dec_clip_tables.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwebpdspdecode_la-dec_clip_tables.lo -MD -MP -MF $(DEPDIR)/libwebpdspdecode_la-dec_clip_tables.Tpo -c -o libwebpdspdecode_la-dec_clip_tables.lo `test -f 'dec_clip_tables.c' || echo '$(srcdir)/'`dec_clip_tables.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdspdecode_la-dec_clip_tables.Tpo $(DEPDIR)/libwebpdspdecode_la-dec_clip_tables.Plo -# $(AM_V_CC)source='dec_clip_tables.c' object='libwebpdspdecode_la-dec_clip_tables.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwebpdspdecode_la-dec_clip_tables.lo `test -f 'dec_clip_tables.c' || echo '$(srcdir)/'`dec_clip_tables.c - -libwebpdspdecode_la-filters.lo: filters.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwebpdspdecode_la-filters.lo -MD -MP -MF $(DEPDIR)/libwebpdspdecode_la-filters.Tpo -c -o libwebpdspdecode_la-filters.lo `test -f 'filters.c' || echo '$(srcdir)/'`filters.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdspdecode_la-filters.Tpo $(DEPDIR)/libwebpdspdecode_la-filters.Plo -# $(AM_V_CC)source='filters.c' object='libwebpdspdecode_la-filters.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwebpdspdecode_la-filters.lo `test -f 'filters.c' || echo '$(srcdir)/'`filters.c - -libwebpdspdecode_la-lossless.lo: lossless.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwebpdspdecode_la-lossless.lo -MD -MP -MF $(DEPDIR)/libwebpdspdecode_la-lossless.Tpo -c -o libwebpdspdecode_la-lossless.lo `test -f 'lossless.c' || echo '$(srcdir)/'`lossless.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdspdecode_la-lossless.Tpo $(DEPDIR)/libwebpdspdecode_la-lossless.Plo -# $(AM_V_CC)source='lossless.c' object='libwebpdspdecode_la-lossless.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwebpdspdecode_la-lossless.lo `test -f 'lossless.c' || echo '$(srcdir)/'`lossless.c - -libwebpdspdecode_la-rescaler.lo: rescaler.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwebpdspdecode_la-rescaler.lo -MD -MP -MF $(DEPDIR)/libwebpdspdecode_la-rescaler.Tpo -c -o libwebpdspdecode_la-rescaler.lo `test -f 'rescaler.c' || echo '$(srcdir)/'`rescaler.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdspdecode_la-rescaler.Tpo $(DEPDIR)/libwebpdspdecode_la-rescaler.Plo -# $(AM_V_CC)source='rescaler.c' object='libwebpdspdecode_la-rescaler.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwebpdspdecode_la-rescaler.lo `test -f 'rescaler.c' || echo '$(srcdir)/'`rescaler.c - -libwebpdspdecode_la-upsampling.lo: upsampling.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwebpdspdecode_la-upsampling.lo -MD -MP -MF $(DEPDIR)/libwebpdspdecode_la-upsampling.Tpo -c -o libwebpdspdecode_la-upsampling.lo `test -f 'upsampling.c' || echo '$(srcdir)/'`upsampling.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdspdecode_la-upsampling.Tpo $(DEPDIR)/libwebpdspdecode_la-upsampling.Plo -# $(AM_V_CC)source='upsampling.c' object='libwebpdspdecode_la-upsampling.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwebpdspdecode_la-upsampling.lo `test -f 'upsampling.c' || echo '$(srcdir)/'`upsampling.c - -libwebpdspdecode_la-yuv.lo: yuv.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwebpdspdecode_la-yuv.lo -MD -MP -MF $(DEPDIR)/libwebpdspdecode_la-yuv.Tpo -c -o libwebpdspdecode_la-yuv.lo `test -f 'yuv.c' || echo '$(srcdir)/'`yuv.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdspdecode_la-yuv.Tpo $(DEPDIR)/libwebpdspdecode_la-yuv.Plo -# $(AM_V_CC)source='yuv.c' object='libwebpdspdecode_la-yuv.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwebpdspdecode_la-yuv.lo `test -f 'yuv.c' || echo '$(srcdir)/'`yuv.c - -libwebpdspdecode_mips32_la-dec_mips32.lo: dec_mips32.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_mips32_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_mips32_la_CFLAGS) $(CFLAGS) -MT libwebpdspdecode_mips32_la-dec_mips32.lo -MD -MP -MF $(DEPDIR)/libwebpdspdecode_mips32_la-dec_mips32.Tpo -c -o libwebpdspdecode_mips32_la-dec_mips32.lo `test -f 'dec_mips32.c' || echo '$(srcdir)/'`dec_mips32.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdspdecode_mips32_la-dec_mips32.Tpo $(DEPDIR)/libwebpdspdecode_mips32_la-dec_mips32.Plo -# $(AM_V_CC)source='dec_mips32.c' object='libwebpdspdecode_mips32_la-dec_mips32.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_mips32_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_mips32_la_CFLAGS) $(CFLAGS) -c -o libwebpdspdecode_mips32_la-dec_mips32.lo `test -f 'dec_mips32.c' || echo '$(srcdir)/'`dec_mips32.c - -libwebpdspdecode_mips32_la-rescaler_mips32.lo: rescaler_mips32.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_mips32_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_mips32_la_CFLAGS) $(CFLAGS) -MT libwebpdspdecode_mips32_la-rescaler_mips32.lo -MD -MP -MF $(DEPDIR)/libwebpdspdecode_mips32_la-rescaler_mips32.Tpo -c -o libwebpdspdecode_mips32_la-rescaler_mips32.lo `test -f 'rescaler_mips32.c' || echo '$(srcdir)/'`rescaler_mips32.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdspdecode_mips32_la-rescaler_mips32.Tpo $(DEPDIR)/libwebpdspdecode_mips32_la-rescaler_mips32.Plo -# $(AM_V_CC)source='rescaler_mips32.c' object='libwebpdspdecode_mips32_la-rescaler_mips32.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_mips32_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_mips32_la_CFLAGS) $(CFLAGS) -c -o libwebpdspdecode_mips32_la-rescaler_mips32.lo `test -f 'rescaler_mips32.c' || echo '$(srcdir)/'`rescaler_mips32.c - -libwebpdspdecode_mips32_la-yuv_mips32.lo: yuv_mips32.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_mips32_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_mips32_la_CFLAGS) $(CFLAGS) -MT libwebpdspdecode_mips32_la-yuv_mips32.lo -MD -MP -MF $(DEPDIR)/libwebpdspdecode_mips32_la-yuv_mips32.Tpo -c -o libwebpdspdecode_mips32_la-yuv_mips32.lo `test -f 'yuv_mips32.c' || echo '$(srcdir)/'`yuv_mips32.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdspdecode_mips32_la-yuv_mips32.Tpo $(DEPDIR)/libwebpdspdecode_mips32_la-yuv_mips32.Plo -# $(AM_V_CC)source='yuv_mips32.c' object='libwebpdspdecode_mips32_la-yuv_mips32.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_mips32_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_mips32_la_CFLAGS) $(CFLAGS) -c -o libwebpdspdecode_mips32_la-yuv_mips32.lo `test -f 'yuv_mips32.c' || echo '$(srcdir)/'`yuv_mips32.c - -libwebpdspdecode_mips_dsp_r2_la-alpha_processing_mips_dsp_r2.lo: alpha_processing_mips_dsp_r2.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_mips_dsp_r2_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_mips_dsp_r2_la_CFLAGS) $(CFLAGS) -MT libwebpdspdecode_mips_dsp_r2_la-alpha_processing_mips_dsp_r2.lo -MD -MP -MF $(DEPDIR)/libwebpdspdecode_mips_dsp_r2_la-alpha_processing_mips_dsp_r2.Tpo -c -o libwebpdspdecode_mips_dsp_r2_la-alpha_processing_mips_dsp_r2.lo `test -f 'alpha_processing_mips_dsp_r2.c' || echo '$(srcdir)/'`alpha_processing_mips_dsp_r2.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdspdecode_mips_dsp_r2_la-alpha_processing_mips_dsp_r2.Tpo $(DEPDIR)/libwebpdspdecode_mips_dsp_r2_la-alpha_processing_mips_dsp_r2.Plo -# $(AM_V_CC)source='alpha_processing_mips_dsp_r2.c' object='libwebpdspdecode_mips_dsp_r2_la-alpha_processing_mips_dsp_r2.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_mips_dsp_r2_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_mips_dsp_r2_la_CFLAGS) $(CFLAGS) -c -o libwebpdspdecode_mips_dsp_r2_la-alpha_processing_mips_dsp_r2.lo `test -f 'alpha_processing_mips_dsp_r2.c' || echo '$(srcdir)/'`alpha_processing_mips_dsp_r2.c - -libwebpdspdecode_mips_dsp_r2_la-dec_mips_dsp_r2.lo: dec_mips_dsp_r2.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_mips_dsp_r2_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_mips_dsp_r2_la_CFLAGS) $(CFLAGS) -MT libwebpdspdecode_mips_dsp_r2_la-dec_mips_dsp_r2.lo -MD -MP -MF $(DEPDIR)/libwebpdspdecode_mips_dsp_r2_la-dec_mips_dsp_r2.Tpo -c -o libwebpdspdecode_mips_dsp_r2_la-dec_mips_dsp_r2.lo `test -f 'dec_mips_dsp_r2.c' || echo '$(srcdir)/'`dec_mips_dsp_r2.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdspdecode_mips_dsp_r2_la-dec_mips_dsp_r2.Tpo $(DEPDIR)/libwebpdspdecode_mips_dsp_r2_la-dec_mips_dsp_r2.Plo -# $(AM_V_CC)source='dec_mips_dsp_r2.c' object='libwebpdspdecode_mips_dsp_r2_la-dec_mips_dsp_r2.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_mips_dsp_r2_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_mips_dsp_r2_la_CFLAGS) $(CFLAGS) -c -o libwebpdspdecode_mips_dsp_r2_la-dec_mips_dsp_r2.lo `test -f 'dec_mips_dsp_r2.c' || echo '$(srcdir)/'`dec_mips_dsp_r2.c - -libwebpdspdecode_mips_dsp_r2_la-filters_mips_dsp_r2.lo: filters_mips_dsp_r2.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_mips_dsp_r2_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_mips_dsp_r2_la_CFLAGS) $(CFLAGS) -MT libwebpdspdecode_mips_dsp_r2_la-filters_mips_dsp_r2.lo -MD -MP -MF $(DEPDIR)/libwebpdspdecode_mips_dsp_r2_la-filters_mips_dsp_r2.Tpo -c -o libwebpdspdecode_mips_dsp_r2_la-filters_mips_dsp_r2.lo `test -f 'filters_mips_dsp_r2.c' || echo '$(srcdir)/'`filters_mips_dsp_r2.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdspdecode_mips_dsp_r2_la-filters_mips_dsp_r2.Tpo $(DEPDIR)/libwebpdspdecode_mips_dsp_r2_la-filters_mips_dsp_r2.Plo -# $(AM_V_CC)source='filters_mips_dsp_r2.c' object='libwebpdspdecode_mips_dsp_r2_la-filters_mips_dsp_r2.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_mips_dsp_r2_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_mips_dsp_r2_la_CFLAGS) $(CFLAGS) -c -o libwebpdspdecode_mips_dsp_r2_la-filters_mips_dsp_r2.lo `test -f 'filters_mips_dsp_r2.c' || echo '$(srcdir)/'`filters_mips_dsp_r2.c - -libwebpdspdecode_mips_dsp_r2_la-lossless_mips_dsp_r2.lo: lossless_mips_dsp_r2.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_mips_dsp_r2_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_mips_dsp_r2_la_CFLAGS) $(CFLAGS) -MT libwebpdspdecode_mips_dsp_r2_la-lossless_mips_dsp_r2.lo -MD -MP -MF $(DEPDIR)/libwebpdspdecode_mips_dsp_r2_la-lossless_mips_dsp_r2.Tpo -c -o libwebpdspdecode_mips_dsp_r2_la-lossless_mips_dsp_r2.lo `test -f 'lossless_mips_dsp_r2.c' || echo '$(srcdir)/'`lossless_mips_dsp_r2.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdspdecode_mips_dsp_r2_la-lossless_mips_dsp_r2.Tpo $(DEPDIR)/libwebpdspdecode_mips_dsp_r2_la-lossless_mips_dsp_r2.Plo -# $(AM_V_CC)source='lossless_mips_dsp_r2.c' object='libwebpdspdecode_mips_dsp_r2_la-lossless_mips_dsp_r2.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_mips_dsp_r2_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_mips_dsp_r2_la_CFLAGS) $(CFLAGS) -c -o libwebpdspdecode_mips_dsp_r2_la-lossless_mips_dsp_r2.lo `test -f 'lossless_mips_dsp_r2.c' || echo '$(srcdir)/'`lossless_mips_dsp_r2.c - -libwebpdspdecode_mips_dsp_r2_la-rescaler_mips_dsp_r2.lo: rescaler_mips_dsp_r2.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_mips_dsp_r2_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_mips_dsp_r2_la_CFLAGS) $(CFLAGS) -MT libwebpdspdecode_mips_dsp_r2_la-rescaler_mips_dsp_r2.lo -MD -MP -MF $(DEPDIR)/libwebpdspdecode_mips_dsp_r2_la-rescaler_mips_dsp_r2.Tpo -c -o libwebpdspdecode_mips_dsp_r2_la-rescaler_mips_dsp_r2.lo `test -f 'rescaler_mips_dsp_r2.c' || echo '$(srcdir)/'`rescaler_mips_dsp_r2.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdspdecode_mips_dsp_r2_la-rescaler_mips_dsp_r2.Tpo $(DEPDIR)/libwebpdspdecode_mips_dsp_r2_la-rescaler_mips_dsp_r2.Plo -# $(AM_V_CC)source='rescaler_mips_dsp_r2.c' object='libwebpdspdecode_mips_dsp_r2_la-rescaler_mips_dsp_r2.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_mips_dsp_r2_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_mips_dsp_r2_la_CFLAGS) $(CFLAGS) -c -o libwebpdspdecode_mips_dsp_r2_la-rescaler_mips_dsp_r2.lo `test -f 'rescaler_mips_dsp_r2.c' || echo '$(srcdir)/'`rescaler_mips_dsp_r2.c - -libwebpdspdecode_mips_dsp_r2_la-upsampling_mips_dsp_r2.lo: upsampling_mips_dsp_r2.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_mips_dsp_r2_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_mips_dsp_r2_la_CFLAGS) $(CFLAGS) -MT libwebpdspdecode_mips_dsp_r2_la-upsampling_mips_dsp_r2.lo -MD -MP -MF $(DEPDIR)/libwebpdspdecode_mips_dsp_r2_la-upsampling_mips_dsp_r2.Tpo -c -o libwebpdspdecode_mips_dsp_r2_la-upsampling_mips_dsp_r2.lo `test -f 'upsampling_mips_dsp_r2.c' || echo '$(srcdir)/'`upsampling_mips_dsp_r2.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdspdecode_mips_dsp_r2_la-upsampling_mips_dsp_r2.Tpo $(DEPDIR)/libwebpdspdecode_mips_dsp_r2_la-upsampling_mips_dsp_r2.Plo -# $(AM_V_CC)source='upsampling_mips_dsp_r2.c' object='libwebpdspdecode_mips_dsp_r2_la-upsampling_mips_dsp_r2.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_mips_dsp_r2_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_mips_dsp_r2_la_CFLAGS) $(CFLAGS) -c -o libwebpdspdecode_mips_dsp_r2_la-upsampling_mips_dsp_r2.lo `test -f 'upsampling_mips_dsp_r2.c' || echo '$(srcdir)/'`upsampling_mips_dsp_r2.c - -libwebpdspdecode_mips_dsp_r2_la-yuv_mips_dsp_r2.lo: yuv_mips_dsp_r2.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_mips_dsp_r2_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_mips_dsp_r2_la_CFLAGS) $(CFLAGS) -MT libwebpdspdecode_mips_dsp_r2_la-yuv_mips_dsp_r2.lo -MD -MP -MF $(DEPDIR)/libwebpdspdecode_mips_dsp_r2_la-yuv_mips_dsp_r2.Tpo -c -o libwebpdspdecode_mips_dsp_r2_la-yuv_mips_dsp_r2.lo `test -f 'yuv_mips_dsp_r2.c' || echo '$(srcdir)/'`yuv_mips_dsp_r2.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdspdecode_mips_dsp_r2_la-yuv_mips_dsp_r2.Tpo $(DEPDIR)/libwebpdspdecode_mips_dsp_r2_la-yuv_mips_dsp_r2.Plo -# $(AM_V_CC)source='yuv_mips_dsp_r2.c' object='libwebpdspdecode_mips_dsp_r2_la-yuv_mips_dsp_r2.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_mips_dsp_r2_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_mips_dsp_r2_la_CFLAGS) $(CFLAGS) -c -o libwebpdspdecode_mips_dsp_r2_la-yuv_mips_dsp_r2.lo `test -f 'yuv_mips_dsp_r2.c' || echo '$(srcdir)/'`yuv_mips_dsp_r2.c - -libwebpdspdecode_msa_la-dec_msa.lo: dec_msa.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_msa_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_msa_la_CFLAGS) $(CFLAGS) -MT libwebpdspdecode_msa_la-dec_msa.lo -MD -MP -MF $(DEPDIR)/libwebpdspdecode_msa_la-dec_msa.Tpo -c -o libwebpdspdecode_msa_la-dec_msa.lo `test -f 'dec_msa.c' || echo '$(srcdir)/'`dec_msa.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdspdecode_msa_la-dec_msa.Tpo $(DEPDIR)/libwebpdspdecode_msa_la-dec_msa.Plo -# $(AM_V_CC)source='dec_msa.c' object='libwebpdspdecode_msa_la-dec_msa.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_msa_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_msa_la_CFLAGS) $(CFLAGS) -c -o libwebpdspdecode_msa_la-dec_msa.lo `test -f 'dec_msa.c' || echo '$(srcdir)/'`dec_msa.c - -libwebpdspdecode_msa_la-filters_msa.lo: filters_msa.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_msa_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_msa_la_CFLAGS) $(CFLAGS) -MT libwebpdspdecode_msa_la-filters_msa.lo -MD -MP -MF $(DEPDIR)/libwebpdspdecode_msa_la-filters_msa.Tpo -c -o libwebpdspdecode_msa_la-filters_msa.lo `test -f 'filters_msa.c' || echo '$(srcdir)/'`filters_msa.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdspdecode_msa_la-filters_msa.Tpo $(DEPDIR)/libwebpdspdecode_msa_la-filters_msa.Plo -# $(AM_V_CC)source='filters_msa.c' object='libwebpdspdecode_msa_la-filters_msa.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_msa_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_msa_la_CFLAGS) $(CFLAGS) -c -o libwebpdspdecode_msa_la-filters_msa.lo `test -f 'filters_msa.c' || echo '$(srcdir)/'`filters_msa.c - -libwebpdspdecode_msa_la-lossless_msa.lo: lossless_msa.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_msa_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_msa_la_CFLAGS) $(CFLAGS) -MT libwebpdspdecode_msa_la-lossless_msa.lo -MD -MP -MF $(DEPDIR)/libwebpdspdecode_msa_la-lossless_msa.Tpo -c -o libwebpdspdecode_msa_la-lossless_msa.lo `test -f 'lossless_msa.c' || echo '$(srcdir)/'`lossless_msa.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdspdecode_msa_la-lossless_msa.Tpo $(DEPDIR)/libwebpdspdecode_msa_la-lossless_msa.Plo -# $(AM_V_CC)source='lossless_msa.c' object='libwebpdspdecode_msa_la-lossless_msa.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_msa_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_msa_la_CFLAGS) $(CFLAGS) -c -o libwebpdspdecode_msa_la-lossless_msa.lo `test -f 'lossless_msa.c' || echo '$(srcdir)/'`lossless_msa.c - -libwebpdspdecode_msa_la-rescaler_msa.lo: rescaler_msa.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_msa_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_msa_la_CFLAGS) $(CFLAGS) -MT libwebpdspdecode_msa_la-rescaler_msa.lo -MD -MP -MF $(DEPDIR)/libwebpdspdecode_msa_la-rescaler_msa.Tpo -c -o libwebpdspdecode_msa_la-rescaler_msa.lo `test -f 'rescaler_msa.c' || echo '$(srcdir)/'`rescaler_msa.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdspdecode_msa_la-rescaler_msa.Tpo $(DEPDIR)/libwebpdspdecode_msa_la-rescaler_msa.Plo -# $(AM_V_CC)source='rescaler_msa.c' object='libwebpdspdecode_msa_la-rescaler_msa.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_msa_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_msa_la_CFLAGS) $(CFLAGS) -c -o libwebpdspdecode_msa_la-rescaler_msa.lo `test -f 'rescaler_msa.c' || echo '$(srcdir)/'`rescaler_msa.c - -libwebpdspdecode_msa_la-upsampling_msa.lo: upsampling_msa.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_msa_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_msa_la_CFLAGS) $(CFLAGS) -MT libwebpdspdecode_msa_la-upsampling_msa.lo -MD -MP -MF $(DEPDIR)/libwebpdspdecode_msa_la-upsampling_msa.Tpo -c -o libwebpdspdecode_msa_la-upsampling_msa.lo `test -f 'upsampling_msa.c' || echo '$(srcdir)/'`upsampling_msa.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdspdecode_msa_la-upsampling_msa.Tpo $(DEPDIR)/libwebpdspdecode_msa_la-upsampling_msa.Plo -# $(AM_V_CC)source='upsampling_msa.c' object='libwebpdspdecode_msa_la-upsampling_msa.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_msa_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_msa_la_CFLAGS) $(CFLAGS) -c -o libwebpdspdecode_msa_la-upsampling_msa.lo `test -f 'upsampling_msa.c' || echo '$(srcdir)/'`upsampling_msa.c - -libwebpdspdecode_neon_la-alpha_processing_neon.lo: alpha_processing_neon.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_neon_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_neon_la_CFLAGS) $(CFLAGS) -MT libwebpdspdecode_neon_la-alpha_processing_neon.lo -MD -MP -MF $(DEPDIR)/libwebpdspdecode_neon_la-alpha_processing_neon.Tpo -c -o libwebpdspdecode_neon_la-alpha_processing_neon.lo `test -f 'alpha_processing_neon.c' || echo '$(srcdir)/'`alpha_processing_neon.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdspdecode_neon_la-alpha_processing_neon.Tpo $(DEPDIR)/libwebpdspdecode_neon_la-alpha_processing_neon.Plo -# $(AM_V_CC)source='alpha_processing_neon.c' object='libwebpdspdecode_neon_la-alpha_processing_neon.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_neon_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_neon_la_CFLAGS) $(CFLAGS) -c -o libwebpdspdecode_neon_la-alpha_processing_neon.lo `test -f 'alpha_processing_neon.c' || echo '$(srcdir)/'`alpha_processing_neon.c - -libwebpdspdecode_neon_la-dec_neon.lo: dec_neon.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_neon_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_neon_la_CFLAGS) $(CFLAGS) -MT libwebpdspdecode_neon_la-dec_neon.lo -MD -MP -MF $(DEPDIR)/libwebpdspdecode_neon_la-dec_neon.Tpo -c -o libwebpdspdecode_neon_la-dec_neon.lo `test -f 'dec_neon.c' || echo '$(srcdir)/'`dec_neon.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdspdecode_neon_la-dec_neon.Tpo $(DEPDIR)/libwebpdspdecode_neon_la-dec_neon.Plo -# $(AM_V_CC)source='dec_neon.c' object='libwebpdspdecode_neon_la-dec_neon.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_neon_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_neon_la_CFLAGS) $(CFLAGS) -c -o libwebpdspdecode_neon_la-dec_neon.lo `test -f 'dec_neon.c' || echo '$(srcdir)/'`dec_neon.c - -libwebpdspdecode_neon_la-filters_neon.lo: filters_neon.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_neon_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_neon_la_CFLAGS) $(CFLAGS) -MT libwebpdspdecode_neon_la-filters_neon.lo -MD -MP -MF $(DEPDIR)/libwebpdspdecode_neon_la-filters_neon.Tpo -c -o libwebpdspdecode_neon_la-filters_neon.lo `test -f 'filters_neon.c' || echo '$(srcdir)/'`filters_neon.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdspdecode_neon_la-filters_neon.Tpo $(DEPDIR)/libwebpdspdecode_neon_la-filters_neon.Plo -# $(AM_V_CC)source='filters_neon.c' object='libwebpdspdecode_neon_la-filters_neon.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_neon_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_neon_la_CFLAGS) $(CFLAGS) -c -o libwebpdspdecode_neon_la-filters_neon.lo `test -f 'filters_neon.c' || echo '$(srcdir)/'`filters_neon.c - -libwebpdspdecode_neon_la-lossless_neon.lo: lossless_neon.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_neon_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_neon_la_CFLAGS) $(CFLAGS) -MT libwebpdspdecode_neon_la-lossless_neon.lo -MD -MP -MF $(DEPDIR)/libwebpdspdecode_neon_la-lossless_neon.Tpo -c -o libwebpdspdecode_neon_la-lossless_neon.lo `test -f 'lossless_neon.c' || echo '$(srcdir)/'`lossless_neon.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdspdecode_neon_la-lossless_neon.Tpo $(DEPDIR)/libwebpdspdecode_neon_la-lossless_neon.Plo -# $(AM_V_CC)source='lossless_neon.c' object='libwebpdspdecode_neon_la-lossless_neon.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_neon_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_neon_la_CFLAGS) $(CFLAGS) -c -o libwebpdspdecode_neon_la-lossless_neon.lo `test -f 'lossless_neon.c' || echo '$(srcdir)/'`lossless_neon.c - -libwebpdspdecode_neon_la-rescaler_neon.lo: rescaler_neon.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_neon_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_neon_la_CFLAGS) $(CFLAGS) -MT libwebpdspdecode_neon_la-rescaler_neon.lo -MD -MP -MF $(DEPDIR)/libwebpdspdecode_neon_la-rescaler_neon.Tpo -c -o libwebpdspdecode_neon_la-rescaler_neon.lo `test -f 'rescaler_neon.c' || echo '$(srcdir)/'`rescaler_neon.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdspdecode_neon_la-rescaler_neon.Tpo $(DEPDIR)/libwebpdspdecode_neon_la-rescaler_neon.Plo -# $(AM_V_CC)source='rescaler_neon.c' object='libwebpdspdecode_neon_la-rescaler_neon.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_neon_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_neon_la_CFLAGS) $(CFLAGS) -c -o libwebpdspdecode_neon_la-rescaler_neon.lo `test -f 'rescaler_neon.c' || echo '$(srcdir)/'`rescaler_neon.c - -libwebpdspdecode_neon_la-upsampling_neon.lo: upsampling_neon.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_neon_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_neon_la_CFLAGS) $(CFLAGS) -MT libwebpdspdecode_neon_la-upsampling_neon.lo -MD -MP -MF $(DEPDIR)/libwebpdspdecode_neon_la-upsampling_neon.Tpo -c -o libwebpdspdecode_neon_la-upsampling_neon.lo `test -f 'upsampling_neon.c' || echo '$(srcdir)/'`upsampling_neon.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdspdecode_neon_la-upsampling_neon.Tpo $(DEPDIR)/libwebpdspdecode_neon_la-upsampling_neon.Plo -# $(AM_V_CC)source='upsampling_neon.c' object='libwebpdspdecode_neon_la-upsampling_neon.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_neon_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_neon_la_CFLAGS) $(CFLAGS) -c -o libwebpdspdecode_neon_la-upsampling_neon.lo `test -f 'upsampling_neon.c' || echo '$(srcdir)/'`upsampling_neon.c - -libwebpdspdecode_neon_la-yuv_neon.lo: yuv_neon.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_neon_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_neon_la_CFLAGS) $(CFLAGS) -MT libwebpdspdecode_neon_la-yuv_neon.lo -MD -MP -MF $(DEPDIR)/libwebpdspdecode_neon_la-yuv_neon.Tpo -c -o libwebpdspdecode_neon_la-yuv_neon.lo `test -f 'yuv_neon.c' || echo '$(srcdir)/'`yuv_neon.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdspdecode_neon_la-yuv_neon.Tpo $(DEPDIR)/libwebpdspdecode_neon_la-yuv_neon.Plo -# $(AM_V_CC)source='yuv_neon.c' object='libwebpdspdecode_neon_la-yuv_neon.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_neon_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_neon_la_CFLAGS) $(CFLAGS) -c -o libwebpdspdecode_neon_la-yuv_neon.lo `test -f 'yuv_neon.c' || echo '$(srcdir)/'`yuv_neon.c - -libwebpdspdecode_sse2_la-alpha_processing_sse2.lo: alpha_processing_sse2.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_sse2_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_sse2_la_CFLAGS) $(CFLAGS) -MT libwebpdspdecode_sse2_la-alpha_processing_sse2.lo -MD -MP -MF $(DEPDIR)/libwebpdspdecode_sse2_la-alpha_processing_sse2.Tpo -c -o libwebpdspdecode_sse2_la-alpha_processing_sse2.lo `test -f 'alpha_processing_sse2.c' || echo '$(srcdir)/'`alpha_processing_sse2.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdspdecode_sse2_la-alpha_processing_sse2.Tpo $(DEPDIR)/libwebpdspdecode_sse2_la-alpha_processing_sse2.Plo -# $(AM_V_CC)source='alpha_processing_sse2.c' object='libwebpdspdecode_sse2_la-alpha_processing_sse2.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_sse2_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_sse2_la_CFLAGS) $(CFLAGS) -c -o libwebpdspdecode_sse2_la-alpha_processing_sse2.lo `test -f 'alpha_processing_sse2.c' || echo '$(srcdir)/'`alpha_processing_sse2.c - -libwebpdspdecode_sse2_la-dec_sse2.lo: dec_sse2.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_sse2_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_sse2_la_CFLAGS) $(CFLAGS) -MT libwebpdspdecode_sse2_la-dec_sse2.lo -MD -MP -MF $(DEPDIR)/libwebpdspdecode_sse2_la-dec_sse2.Tpo -c -o libwebpdspdecode_sse2_la-dec_sse2.lo `test -f 'dec_sse2.c' || echo '$(srcdir)/'`dec_sse2.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdspdecode_sse2_la-dec_sse2.Tpo $(DEPDIR)/libwebpdspdecode_sse2_la-dec_sse2.Plo -# $(AM_V_CC)source='dec_sse2.c' object='libwebpdspdecode_sse2_la-dec_sse2.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_sse2_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_sse2_la_CFLAGS) $(CFLAGS) -c -o libwebpdspdecode_sse2_la-dec_sse2.lo `test -f 'dec_sse2.c' || echo '$(srcdir)/'`dec_sse2.c - -libwebpdspdecode_sse2_la-filters_sse2.lo: filters_sse2.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_sse2_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_sse2_la_CFLAGS) $(CFLAGS) -MT libwebpdspdecode_sse2_la-filters_sse2.lo -MD -MP -MF $(DEPDIR)/libwebpdspdecode_sse2_la-filters_sse2.Tpo -c -o libwebpdspdecode_sse2_la-filters_sse2.lo `test -f 'filters_sse2.c' || echo '$(srcdir)/'`filters_sse2.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdspdecode_sse2_la-filters_sse2.Tpo $(DEPDIR)/libwebpdspdecode_sse2_la-filters_sse2.Plo -# $(AM_V_CC)source='filters_sse2.c' object='libwebpdspdecode_sse2_la-filters_sse2.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_sse2_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_sse2_la_CFLAGS) $(CFLAGS) -c -o libwebpdspdecode_sse2_la-filters_sse2.lo `test -f 'filters_sse2.c' || echo '$(srcdir)/'`filters_sse2.c - -libwebpdspdecode_sse2_la-lossless_sse2.lo: lossless_sse2.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_sse2_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_sse2_la_CFLAGS) $(CFLAGS) -MT libwebpdspdecode_sse2_la-lossless_sse2.lo -MD -MP -MF $(DEPDIR)/libwebpdspdecode_sse2_la-lossless_sse2.Tpo -c -o libwebpdspdecode_sse2_la-lossless_sse2.lo `test -f 'lossless_sse2.c' || echo '$(srcdir)/'`lossless_sse2.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdspdecode_sse2_la-lossless_sse2.Tpo $(DEPDIR)/libwebpdspdecode_sse2_la-lossless_sse2.Plo -# $(AM_V_CC)source='lossless_sse2.c' object='libwebpdspdecode_sse2_la-lossless_sse2.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_sse2_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_sse2_la_CFLAGS) $(CFLAGS) -c -o libwebpdspdecode_sse2_la-lossless_sse2.lo `test -f 'lossless_sse2.c' || echo '$(srcdir)/'`lossless_sse2.c - -libwebpdspdecode_sse2_la-rescaler_sse2.lo: rescaler_sse2.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_sse2_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_sse2_la_CFLAGS) $(CFLAGS) -MT libwebpdspdecode_sse2_la-rescaler_sse2.lo -MD -MP -MF $(DEPDIR)/libwebpdspdecode_sse2_la-rescaler_sse2.Tpo -c -o libwebpdspdecode_sse2_la-rescaler_sse2.lo `test -f 'rescaler_sse2.c' || echo '$(srcdir)/'`rescaler_sse2.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdspdecode_sse2_la-rescaler_sse2.Tpo $(DEPDIR)/libwebpdspdecode_sse2_la-rescaler_sse2.Plo -# $(AM_V_CC)source='rescaler_sse2.c' object='libwebpdspdecode_sse2_la-rescaler_sse2.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_sse2_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_sse2_la_CFLAGS) $(CFLAGS) -c -o libwebpdspdecode_sse2_la-rescaler_sse2.lo `test -f 'rescaler_sse2.c' || echo '$(srcdir)/'`rescaler_sse2.c - -libwebpdspdecode_sse2_la-upsampling_sse2.lo: upsampling_sse2.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_sse2_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_sse2_la_CFLAGS) $(CFLAGS) -MT libwebpdspdecode_sse2_la-upsampling_sse2.lo -MD -MP -MF $(DEPDIR)/libwebpdspdecode_sse2_la-upsampling_sse2.Tpo -c -o libwebpdspdecode_sse2_la-upsampling_sse2.lo `test -f 'upsampling_sse2.c' || echo '$(srcdir)/'`upsampling_sse2.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdspdecode_sse2_la-upsampling_sse2.Tpo $(DEPDIR)/libwebpdspdecode_sse2_la-upsampling_sse2.Plo -# $(AM_V_CC)source='upsampling_sse2.c' object='libwebpdspdecode_sse2_la-upsampling_sse2.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_sse2_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_sse2_la_CFLAGS) $(CFLAGS) -c -o libwebpdspdecode_sse2_la-upsampling_sse2.lo `test -f 'upsampling_sse2.c' || echo '$(srcdir)/'`upsampling_sse2.c - -libwebpdspdecode_sse2_la-yuv_sse2.lo: yuv_sse2.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_sse2_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_sse2_la_CFLAGS) $(CFLAGS) -MT libwebpdspdecode_sse2_la-yuv_sse2.lo -MD -MP -MF $(DEPDIR)/libwebpdspdecode_sse2_la-yuv_sse2.Tpo -c -o libwebpdspdecode_sse2_la-yuv_sse2.lo `test -f 'yuv_sse2.c' || echo '$(srcdir)/'`yuv_sse2.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdspdecode_sse2_la-yuv_sse2.Tpo $(DEPDIR)/libwebpdspdecode_sse2_la-yuv_sse2.Plo -# $(AM_V_CC)source='yuv_sse2.c' object='libwebpdspdecode_sse2_la-yuv_sse2.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_sse2_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_sse2_la_CFLAGS) $(CFLAGS) -c -o libwebpdspdecode_sse2_la-yuv_sse2.lo `test -f 'yuv_sse2.c' || echo '$(srcdir)/'`yuv_sse2.c - -libwebpdspdecode_sse41_la-alpha_processing_sse41.lo: alpha_processing_sse41.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_sse41_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_sse41_la_CFLAGS) $(CFLAGS) -MT libwebpdspdecode_sse41_la-alpha_processing_sse41.lo -MD -MP -MF $(DEPDIR)/libwebpdspdecode_sse41_la-alpha_processing_sse41.Tpo -c -o libwebpdspdecode_sse41_la-alpha_processing_sse41.lo `test -f 'alpha_processing_sse41.c' || echo '$(srcdir)/'`alpha_processing_sse41.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdspdecode_sse41_la-alpha_processing_sse41.Tpo $(DEPDIR)/libwebpdspdecode_sse41_la-alpha_processing_sse41.Plo -# $(AM_V_CC)source='alpha_processing_sse41.c' object='libwebpdspdecode_sse41_la-alpha_processing_sse41.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_sse41_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_sse41_la_CFLAGS) $(CFLAGS) -c -o libwebpdspdecode_sse41_la-alpha_processing_sse41.lo `test -f 'alpha_processing_sse41.c' || echo '$(srcdir)/'`alpha_processing_sse41.c - -libwebpdspdecode_sse41_la-dec_sse41.lo: dec_sse41.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_sse41_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_sse41_la_CFLAGS) $(CFLAGS) -MT libwebpdspdecode_sse41_la-dec_sse41.lo -MD -MP -MF $(DEPDIR)/libwebpdspdecode_sse41_la-dec_sse41.Tpo -c -o libwebpdspdecode_sse41_la-dec_sse41.lo `test -f 'dec_sse41.c' || echo '$(srcdir)/'`dec_sse41.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdspdecode_sse41_la-dec_sse41.Tpo $(DEPDIR)/libwebpdspdecode_sse41_la-dec_sse41.Plo -# $(AM_V_CC)source='dec_sse41.c' object='libwebpdspdecode_sse41_la-dec_sse41.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_sse41_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_sse41_la_CFLAGS) $(CFLAGS) -c -o libwebpdspdecode_sse41_la-dec_sse41.lo `test -f 'dec_sse41.c' || echo '$(srcdir)/'`dec_sse41.c - -libwebpdspdecode_sse41_la-upsampling_sse41.lo: upsampling_sse41.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_sse41_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_sse41_la_CFLAGS) $(CFLAGS) -MT libwebpdspdecode_sse41_la-upsampling_sse41.lo -MD -MP -MF $(DEPDIR)/libwebpdspdecode_sse41_la-upsampling_sse41.Tpo -c -o libwebpdspdecode_sse41_la-upsampling_sse41.lo `test -f 'upsampling_sse41.c' || echo '$(srcdir)/'`upsampling_sse41.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdspdecode_sse41_la-upsampling_sse41.Tpo $(DEPDIR)/libwebpdspdecode_sse41_la-upsampling_sse41.Plo -# $(AM_V_CC)source='upsampling_sse41.c' object='libwebpdspdecode_sse41_la-upsampling_sse41.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_sse41_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_sse41_la_CFLAGS) $(CFLAGS) -c -o libwebpdspdecode_sse41_la-upsampling_sse41.lo `test -f 'upsampling_sse41.c' || echo '$(srcdir)/'`upsampling_sse41.c - -libwebpdspdecode_sse41_la-yuv_sse41.lo: yuv_sse41.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_sse41_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_sse41_la_CFLAGS) $(CFLAGS) -MT libwebpdspdecode_sse41_la-yuv_sse41.lo -MD -MP -MF $(DEPDIR)/libwebpdspdecode_sse41_la-yuv_sse41.Tpo -c -o libwebpdspdecode_sse41_la-yuv_sse41.lo `test -f 'yuv_sse41.c' || echo '$(srcdir)/'`yuv_sse41.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdspdecode_sse41_la-yuv_sse41.Tpo $(DEPDIR)/libwebpdspdecode_sse41_la-yuv_sse41.Plo -# $(AM_V_CC)source='yuv_sse41.c' object='libwebpdspdecode_sse41_la-yuv_sse41.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_sse41_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_sse41_la_CFLAGS) $(CFLAGS) -c -o libwebpdspdecode_sse41_la-yuv_sse41.lo `test -f 'yuv_sse41.c' || echo '$(srcdir)/'`yuv_sse41.c - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs -install-commonHEADERS: $(common_HEADERS) - @$(NORMAL_INSTALL) - @list='$(common_HEADERS)'; test -n "$(commondir)" || list=; \ - if test -n "$$list"; then \ - echo " $(MKDIR_P) '$(DESTDIR)$(commondir)'"; \ - $(MKDIR_P) "$(DESTDIR)$(commondir)" || exit 1; \ - fi; \ - for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - echo "$$d$$p"; \ - done | $(am__base_list) | \ - while read files; do \ - echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(commondir)'"; \ - $(INSTALL_HEADER) $$files "$(DESTDIR)$(commondir)" || exit $$?; \ - done - -uninstall-commonHEADERS: - @$(NORMAL_UNINSTALL) - @list='$(common_HEADERS)'; test -n "$(commondir)" || list=; \ - files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ - dir='$(DESTDIR)$(commondir)'; $(am__uninstall_files_from_dir) - -ID: $(am__tagged_files) - $(am__define_uniq_tagged_files); mkid -fID $$unique -tags: tags-am -TAGS: tags - -tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) - set x; \ - here=`pwd`; \ - $(am__define_uniq_tagged_files); \ - shift; \ - if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ - test -n "$$unique" || unique=$$empty_fix; \ - if test $$# -gt 0; then \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - "$$@" $$unique; \ - else \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$unique; \ - fi; \ - fi -ctags: ctags-am - -CTAGS: ctags -ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) - $(am__define_uniq_tagged_files); \ - test -z "$(CTAGS_ARGS)$$unique" \ - || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$unique - -GTAGS: - here=`$(am__cd) $(top_builddir) && pwd` \ - && $(am__cd) $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) "$$here" -cscopelist: cscopelist-am - -cscopelist-am: $(am__tagged_files) - list='$(am__tagged_files)'; \ - case "$(srcdir)" in \ - [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ - *) sdir=$(subdir)/$(srcdir) ;; \ - esac; \ - for i in $$list; do \ - if test -f "$$i"; then \ - echo "$(subdir)/$$i"; \ - else \ - echo "$$sdir/$$i"; \ - fi; \ - done >> $(top_builddir)/cscope.files - -distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - -distdir: $(BUILT_SOURCES) - $(MAKE) $(AM_MAKEFLAGS) distdir-am - -distdir-am: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - list='$(DISTFILES)'; \ - dist_files=`for file in $$list; do echo $$file; done | \ - sed -e "s|^$$srcdirstrip/||;t" \ - -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ - case $$dist_files in \ - */*) $(MKDIR_P) `echo "$$dist_files" | \ - sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ - sort -u` ;; \ - esac; \ - for file in $$dist_files; do \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - if test -d $$d/$$file; then \ - dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test -d "$(distdir)/$$file"; then \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ - else \ - test -f "$(distdir)/$$file" \ - || cp -p $$d/$$file "$(distdir)/$$file" \ - || exit 1; \ - fi; \ - done -check-am: all-am -check: check-am -all-am: Makefile $(LTLIBRARIES) $(HEADERS) -installdirs: - for dir in "$(DESTDIR)$(commondir)"; do \ - test -z "$$dir" || $(MKDIR_P) "$$dir"; \ - done -install: install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-am -install-strip: - if test -z '$(STRIP)'; then \ - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - install; \ - else \ - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ - fi -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-am - -clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ - mostlyclean-am - -distclean: distclean-am - -rm -f ./$(DEPDIR)/libwebpdsp_la-alpha_processing.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_la-cost.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_la-cpu.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_la-dec.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_la-dec_clip_tables.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_la-enc.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_la-filters.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_la-lossless.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_la-lossless_enc.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_la-rescaler.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_la-ssim.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_la-upsampling.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_la-yuv.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_mips32_la-cost_mips32.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_mips32_la-enc_mips32.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_mips32_la-lossless_enc_mips32.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_mips_dsp_r2_la-cost_mips_dsp_r2.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_mips_dsp_r2_la-enc_mips_dsp_r2.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_mips_dsp_r2_la-lossless_enc_mips_dsp_r2.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_msa_la-enc_msa.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_msa_la-lossless_enc_msa.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_neon_la-cost_neon.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_neon_la-enc_neon.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_neon_la-lossless_enc_neon.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_sse2_la-cost_sse2.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_sse2_la-enc_sse2.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_sse2_la-lossless_enc_sse2.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_sse2_la-ssim_sse2.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_sse41_la-enc_sse41.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_sse41_la-lossless_enc_sse41.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_la-alpha_processing.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_la-cpu.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_la-dec.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_la-dec_clip_tables.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_la-filters.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_la-lossless.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_la-rescaler.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_la-upsampling.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_la-yuv.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_mips32_la-dec_mips32.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_mips32_la-rescaler_mips32.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_mips32_la-yuv_mips32.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_mips_dsp_r2_la-alpha_processing_mips_dsp_r2.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_mips_dsp_r2_la-dec_mips_dsp_r2.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_mips_dsp_r2_la-filters_mips_dsp_r2.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_mips_dsp_r2_la-lossless_mips_dsp_r2.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_mips_dsp_r2_la-rescaler_mips_dsp_r2.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_mips_dsp_r2_la-upsampling_mips_dsp_r2.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_mips_dsp_r2_la-yuv_mips_dsp_r2.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_msa_la-dec_msa.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_msa_la-filters_msa.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_msa_la-lossless_msa.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_msa_la-rescaler_msa.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_msa_la-upsampling_msa.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_neon_la-alpha_processing_neon.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_neon_la-dec_neon.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_neon_la-filters_neon.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_neon_la-lossless_neon.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_neon_la-rescaler_neon.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_neon_la-upsampling_neon.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_neon_la-yuv_neon.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_sse2_la-alpha_processing_sse2.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_sse2_la-dec_sse2.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_sse2_la-filters_sse2.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_sse2_la-lossless_sse2.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_sse2_la-rescaler_sse2.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_sse2_la-upsampling_sse2.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_sse2_la-yuv_sse2.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_sse41_la-alpha_processing_sse41.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_sse41_la-dec_sse41.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_sse41_la-upsampling_sse41.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_sse41_la-yuv_sse41.Plo - -rm -f Makefile -distclean-am: clean-am distclean-compile distclean-generic \ - distclean-tags - -dvi: dvi-am - -dvi-am: - -html: html-am - -html-am: - -info: info-am - -info-am: - -install-data-am: install-commonHEADERS - -install-dvi: install-dvi-am - -install-dvi-am: - -install-exec-am: - -install-html: install-html-am - -install-html-am: - -install-info: install-info-am - -install-info-am: - -install-man: - -install-pdf: install-pdf-am - -install-pdf-am: - -install-ps: install-ps-am - -install-ps-am: - -installcheck-am: - -maintainer-clean: maintainer-clean-am - -rm -f ./$(DEPDIR)/libwebpdsp_la-alpha_processing.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_la-cost.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_la-cpu.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_la-dec.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_la-dec_clip_tables.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_la-enc.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_la-filters.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_la-lossless.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_la-lossless_enc.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_la-rescaler.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_la-ssim.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_la-upsampling.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_la-yuv.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_mips32_la-cost_mips32.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_mips32_la-enc_mips32.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_mips32_la-lossless_enc_mips32.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_mips_dsp_r2_la-cost_mips_dsp_r2.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_mips_dsp_r2_la-enc_mips_dsp_r2.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_mips_dsp_r2_la-lossless_enc_mips_dsp_r2.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_msa_la-enc_msa.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_msa_la-lossless_enc_msa.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_neon_la-cost_neon.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_neon_la-enc_neon.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_neon_la-lossless_enc_neon.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_sse2_la-cost_sse2.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_sse2_la-enc_sse2.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_sse2_la-lossless_enc_sse2.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_sse2_la-ssim_sse2.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_sse41_la-enc_sse41.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_sse41_la-lossless_enc_sse41.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_la-alpha_processing.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_la-cpu.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_la-dec.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_la-dec_clip_tables.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_la-filters.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_la-lossless.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_la-rescaler.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_la-upsampling.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_la-yuv.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_mips32_la-dec_mips32.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_mips32_la-rescaler_mips32.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_mips32_la-yuv_mips32.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_mips_dsp_r2_la-alpha_processing_mips_dsp_r2.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_mips_dsp_r2_la-dec_mips_dsp_r2.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_mips_dsp_r2_la-filters_mips_dsp_r2.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_mips_dsp_r2_la-lossless_mips_dsp_r2.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_mips_dsp_r2_la-rescaler_mips_dsp_r2.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_mips_dsp_r2_la-upsampling_mips_dsp_r2.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_mips_dsp_r2_la-yuv_mips_dsp_r2.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_msa_la-dec_msa.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_msa_la-filters_msa.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_msa_la-lossless_msa.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_msa_la-rescaler_msa.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_msa_la-upsampling_msa.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_neon_la-alpha_processing_neon.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_neon_la-dec_neon.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_neon_la-filters_neon.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_neon_la-lossless_neon.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_neon_la-rescaler_neon.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_neon_la-upsampling_neon.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_neon_la-yuv_neon.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_sse2_la-alpha_processing_sse2.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_sse2_la-dec_sse2.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_sse2_la-filters_sse2.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_sse2_la-lossless_sse2.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_sse2_la-rescaler_sse2.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_sse2_la-upsampling_sse2.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_sse2_la-yuv_sse2.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_sse41_la-alpha_processing_sse41.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_sse41_la-dec_sse41.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_sse41_la-upsampling_sse41.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_sse41_la-yuv_sse41.Plo - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-compile mostlyclean-generic \ - mostlyclean-libtool - -pdf: pdf-am - -pdf-am: - -ps: ps-am - -ps-am: - -uninstall-am: uninstall-commonHEADERS - -.MAKE: install-am install-strip - -.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ - clean-generic clean-libtool clean-noinstLTLIBRARIES \ - cscopelist-am ctags ctags-am distclean distclean-compile \ - distclean-generic distclean-libtool distclean-tags distdir dvi \ - dvi-am html html-am info info-am install install-am \ - install-commonHEADERS install-data install-data-am install-dvi \ - install-dvi-am install-exec install-exec-am install-html \ - install-html-am install-info install-info-am install-man \ - install-pdf install-pdf-am install-ps install-ps-am \ - install-strip installcheck installcheck-am installdirs \ - maintainer-clean maintainer-clean-generic mostlyclean \ - mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ - pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \ - uninstall-commonHEADERS - -.PRECIOUS: Makefile - - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/Extended/libwebp/src/dsp/Makefile.am b/Extended/libwebp/src/dsp/Makefile.am deleted file mode 100644 index 9f67f5b..0000000 --- a/Extended/libwebp/src/dsp/Makefile.am +++ /dev/null @@ -1,185 +0,0 @@ -AM_CPPFLAGS += -I$(top_builddir) -I$(top_srcdir) -noinst_LTLIBRARIES = -noinst_LTLIBRARIES += libwebpdsp.la -noinst_LTLIBRARIES += libwebpdsp_sse2.la -noinst_LTLIBRARIES += libwebpdspdecode_sse2.la -noinst_LTLIBRARIES += libwebpdsp_sse41.la -noinst_LTLIBRARIES += libwebpdspdecode_sse41.la -noinst_LTLIBRARIES += libwebpdsp_neon.la -noinst_LTLIBRARIES += libwebpdspdecode_neon.la -noinst_LTLIBRARIES += libwebpdsp_msa.la -noinst_LTLIBRARIES += libwebpdspdecode_msa.la -noinst_LTLIBRARIES += libwebpdsp_mips32.la -noinst_LTLIBRARIES += libwebpdspdecode_mips32.la -noinst_LTLIBRARIES += libwebpdsp_mips_dsp_r2.la -noinst_LTLIBRARIES += libwebpdspdecode_mips_dsp_r2.la - -if BUILD_LIBWEBPDECODER - noinst_LTLIBRARIES += libwebpdspdecode.la -endif - -common_HEADERS = ../webp/types.h -commondir = $(includedir)/webp - -COMMON_SOURCES = -COMMON_SOURCES += alpha_processing.c -COMMON_SOURCES += cpu.c -COMMON_SOURCES += dec.c -COMMON_SOURCES += dec_clip_tables.c -COMMON_SOURCES += dsp.h -COMMON_SOURCES += filters.c -COMMON_SOURCES += lossless.c -COMMON_SOURCES += lossless.h -COMMON_SOURCES += lossless_common.h -COMMON_SOURCES += rescaler.c -COMMON_SOURCES += upsampling.c -COMMON_SOURCES += yuv.c -COMMON_SOURCES += yuv.h - -ENC_SOURCES = -ENC_SOURCES += cost.c -ENC_SOURCES += enc.c -ENC_SOURCES += lossless_enc.c -ENC_SOURCES += quant.h -ENC_SOURCES += ssim.c - -libwebpdspdecode_sse41_la_SOURCES = -libwebpdspdecode_sse41_la_SOURCES += alpha_processing_sse41.c -libwebpdspdecode_sse41_la_SOURCES += dec_sse41.c -libwebpdspdecode_sse41_la_SOURCES += upsampling_sse41.c -libwebpdspdecode_sse41_la_SOURCES += yuv_sse41.c -libwebpdspdecode_sse41_la_CPPFLAGS = $(libwebpdsp_la_CPPFLAGS) -libwebpdspdecode_sse41_la_CFLAGS = $(AM_CFLAGS) $(SSE41_FLAGS) - -libwebpdspdecode_sse2_la_SOURCES = -libwebpdspdecode_sse2_la_SOURCES += alpha_processing_sse2.c -libwebpdspdecode_sse2_la_SOURCES += common_sse2.h -libwebpdspdecode_sse2_la_SOURCES += dec_sse2.c -libwebpdspdecode_sse2_la_SOURCES += filters_sse2.c -libwebpdspdecode_sse2_la_SOURCES += lossless_sse2.c -libwebpdspdecode_sse2_la_SOURCES += rescaler_sse2.c -libwebpdspdecode_sse2_la_SOURCES += upsampling_sse2.c -libwebpdspdecode_sse2_la_SOURCES += yuv_sse2.c -libwebpdspdecode_sse2_la_CPPFLAGS = $(libwebpdsp_sse2_la_CPPFLAGS) -libwebpdspdecode_sse2_la_CFLAGS = $(libwebpdsp_sse2_la_CFLAGS) - -libwebpdspdecode_neon_la_SOURCES = -libwebpdspdecode_neon_la_SOURCES += alpha_processing_neon.c -libwebpdspdecode_neon_la_SOURCES += dec_neon.c -libwebpdspdecode_neon_la_SOURCES += filters_neon.c -libwebpdspdecode_neon_la_SOURCES += lossless_neon.c -libwebpdspdecode_neon_la_SOURCES += neon.h -libwebpdspdecode_neon_la_SOURCES += rescaler_neon.c -libwebpdspdecode_neon_la_SOURCES += upsampling_neon.c -libwebpdspdecode_neon_la_SOURCES += yuv_neon.c -libwebpdspdecode_neon_la_CPPFLAGS = $(libwebpdsp_neon_la_CPPFLAGS) -libwebpdspdecode_neon_la_CFLAGS = $(libwebpdsp_neon_la_CFLAGS) - -libwebpdspdecode_msa_la_SOURCES = -libwebpdspdecode_msa_la_SOURCES += dec_msa.c -libwebpdspdecode_msa_la_SOURCES += filters_msa.c -libwebpdspdecode_msa_la_SOURCES += lossless_msa.c -libwebpdspdecode_msa_la_SOURCES += msa_macro.h -libwebpdspdecode_msa_la_SOURCES += rescaler_msa.c -libwebpdspdecode_msa_la_SOURCES += upsampling_msa.c -libwebpdspdecode_msa_la_CPPFLAGS = $(libwebpdsp_msa_la_CPPFLAGS) -libwebpdspdecode_msa_la_CFLAGS = $(libwebpdsp_msa_la_CFLAGS) - -libwebpdspdecode_mips32_la_SOURCES = -libwebpdspdecode_mips32_la_SOURCES += dec_mips32.c -libwebpdspdecode_mips32_la_SOURCES += mips_macro.h -libwebpdspdecode_mips32_la_SOURCES += rescaler_mips32.c -libwebpdspdecode_mips32_la_SOURCES += yuv_mips32.c -libwebpdspdecode_mips32_la_CPPFLAGS = $(libwebpdsp_mips32_la_CPPFLAGS) -libwebpdspdecode_mips32_la_CFLAGS = $(libwebpdsp_mips32_la_CFLAGS) - -libwebpdspdecode_mips_dsp_r2_la_SOURCES = -libwebpdspdecode_mips_dsp_r2_la_SOURCES += alpha_processing_mips_dsp_r2.c -libwebpdspdecode_mips_dsp_r2_la_SOURCES += dec_mips_dsp_r2.c -libwebpdspdecode_mips_dsp_r2_la_SOURCES += filters_mips_dsp_r2.c -libwebpdspdecode_mips_dsp_r2_la_SOURCES += lossless_mips_dsp_r2.c -libwebpdspdecode_mips_dsp_r2_la_SOURCES += mips_macro.h -libwebpdspdecode_mips_dsp_r2_la_SOURCES += rescaler_mips_dsp_r2.c -libwebpdspdecode_mips_dsp_r2_la_SOURCES += upsampling_mips_dsp_r2.c -libwebpdspdecode_mips_dsp_r2_la_SOURCES += yuv_mips_dsp_r2.c -libwebpdspdecode_mips_dsp_r2_la_CPPFLAGS = $(libwebpdsp_mips_dsp_r2_la_CPPFLAGS) -libwebpdspdecode_mips_dsp_r2_la_CFLAGS = $(libwebpdsp_mips_dsp_r2_la_CFLAGS) - -libwebpdsp_sse2_la_SOURCES = -libwebpdsp_sse2_la_SOURCES += cost_sse2.c -libwebpdsp_sse2_la_SOURCES += enc_sse2.c -libwebpdsp_sse2_la_SOURCES += lossless_enc_sse2.c -libwebpdsp_sse2_la_SOURCES += ssim_sse2.c -libwebpdsp_sse2_la_CPPFLAGS = $(libwebpdsp_la_CPPFLAGS) -libwebpdsp_sse2_la_CFLAGS = $(AM_CFLAGS) $(SSE2_FLAGS) -libwebpdsp_sse2_la_LIBADD = libwebpdspdecode_sse2.la - -libwebpdsp_sse41_la_SOURCES = -libwebpdsp_sse41_la_SOURCES += enc_sse41.c -libwebpdsp_sse41_la_SOURCES += lossless_enc_sse41.c -libwebpdsp_sse41_la_CPPFLAGS = $(libwebpdsp_la_CPPFLAGS) -libwebpdsp_sse41_la_CFLAGS = $(AM_CFLAGS) $(SSE41_FLAGS) -libwebpdsp_sse41_la_LIBADD = libwebpdspdecode_sse41.la - -libwebpdsp_neon_la_SOURCES = -libwebpdsp_neon_la_SOURCES += cost_neon.c -libwebpdsp_neon_la_SOURCES += enc_neon.c -libwebpdsp_neon_la_SOURCES += lossless_enc_neon.c -libwebpdsp_neon_la_CPPFLAGS = $(libwebpdsp_la_CPPFLAGS) -libwebpdsp_neon_la_CFLAGS = $(AM_CFLAGS) $(NEON_FLAGS) -libwebpdsp_neon_la_LIBADD = libwebpdspdecode_neon.la - -libwebpdsp_msa_la_SOURCES = -libwebpdsp_msa_la_SOURCES += enc_msa.c -libwebpdsp_msa_la_SOURCES += lossless_enc_msa.c -libwebpdsp_msa_la_CPPFLAGS = $(libwebpdsp_la_CPPFLAGS) -libwebpdsp_msa_la_CFLAGS = $(AM_CFLAGS) -libwebpdsp_msa_la_LIBADD = libwebpdspdecode_msa.la - -libwebpdsp_mips32_la_SOURCES = -libwebpdsp_mips32_la_SOURCES += cost_mips32.c -libwebpdsp_mips32_la_SOURCES += enc_mips32.c -libwebpdsp_mips32_la_SOURCES += lossless_enc_mips32.c -libwebpdsp_mips32_la_CPPFLAGS = $(libwebpdsp_la_CPPFLAGS) -libwebpdsp_mips32_la_CFLAGS = $(AM_CFLAGS) -libwebpdsp_mips32_la_LIBADD = libwebpdspdecode_mips32.la - -libwebpdsp_mips_dsp_r2_la_SOURCES = -libwebpdsp_mips_dsp_r2_la_SOURCES += cost_mips_dsp_r2.c -libwebpdsp_mips_dsp_r2_la_SOURCES += enc_mips_dsp_r2.c -libwebpdsp_mips_dsp_r2_la_SOURCES += lossless_enc_mips_dsp_r2.c -libwebpdsp_mips_dsp_r2_la_CPPFLAGS = $(libwebpdsp_la_CPPFLAGS) -libwebpdsp_mips_dsp_r2_la_CFLAGS = $(AM_CFLAGS) -libwebpdsp_mips_dsp_r2_la_LIBADD = libwebpdspdecode_mips_dsp_r2.la - -libwebpdsp_la_SOURCES = $(COMMON_SOURCES) $(ENC_SOURCES) - -noinst_HEADERS = -noinst_HEADERS += ../dec/vp8_dec.h -noinst_HEADERS += ../webp/decode.h - -libwebpdsp_la_CPPFLAGS = -libwebpdsp_la_CPPFLAGS += $(AM_CPPFLAGS) -libwebpdsp_la_CPPFLAGS += $(USE_SWAP_16BIT_CSP) -libwebpdsp_la_LDFLAGS = -lm -libwebpdsp_la_LIBADD = -libwebpdsp_la_LIBADD += libwebpdsp_sse2.la -libwebpdsp_la_LIBADD += libwebpdsp_sse41.la -libwebpdsp_la_LIBADD += libwebpdsp_neon.la -libwebpdsp_la_LIBADD += libwebpdsp_msa.la -libwebpdsp_la_LIBADD += libwebpdsp_mips32.la -libwebpdsp_la_LIBADD += libwebpdsp_mips_dsp_r2.la - -if BUILD_LIBWEBPDECODER - libwebpdspdecode_la_SOURCES = $(COMMON_SOURCES) - - libwebpdspdecode_la_CPPFLAGS = $(libwebpdsp_la_CPPFLAGS) - libwebpdspdecode_la_LDFLAGS = $(libwebpdsp_la_LDFLAGS) - libwebpdspdecode_la_LIBADD = - libwebpdspdecode_la_LIBADD += libwebpdspdecode_sse2.la - libwebpdspdecode_la_LIBADD += libwebpdspdecode_sse41.la - libwebpdspdecode_la_LIBADD += libwebpdspdecode_neon.la - libwebpdspdecode_la_LIBADD += libwebpdspdecode_msa.la - libwebpdspdecode_la_LIBADD += libwebpdspdecode_mips32.la - libwebpdspdecode_la_LIBADD += libwebpdspdecode_mips_dsp_r2.la -endif diff --git a/Extended/libwebp/src/dsp/Makefile.in b/Extended/libwebp/src/dsp/Makefile.in deleted file mode 100644 index 58e1b52..0000000 --- a/Extended/libwebp/src/dsp/Makefile.in +++ /dev/null @@ -1,1783 +0,0 @@ -# Makefile.in generated by automake 1.16.1 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994-2018 Free Software Foundation, Inc. - -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -@SET_MAKE@ - - -VPATH = @srcdir@ -am__is_gnu_make = { \ - if test -z '$(MAKELEVEL)'; then \ - false; \ - elif test -n '$(MAKE_HOST)'; then \ - true; \ - elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ - true; \ - else \ - false; \ - fi; \ -} -am__make_running_with_option = \ - case $${target_option-} in \ - ?) ;; \ - *) echo "am__make_running_with_option: internal error: invalid" \ - "target option '$${target_option-}' specified" >&2; \ - exit 1;; \ - esac; \ - has_opt=no; \ - sane_makeflags=$$MAKEFLAGS; \ - if $(am__is_gnu_make); then \ - sane_makeflags=$$MFLAGS; \ - else \ - case $$MAKEFLAGS in \ - *\\[\ \ ]*) \ - bs=\\; \ - sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ - | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ - esac; \ - fi; \ - skip_next=no; \ - strip_trailopt () \ - { \ - flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ - }; \ - for flg in $$sane_makeflags; do \ - test $$skip_next = yes && { skip_next=no; continue; }; \ - case $$flg in \ - *=*|--*) continue;; \ - -*I) strip_trailopt 'I'; skip_next=yes;; \ - -*I?*) strip_trailopt 'I';; \ - -*O) strip_trailopt 'O'; skip_next=yes;; \ - -*O?*) strip_trailopt 'O';; \ - -*l) strip_trailopt 'l'; skip_next=yes;; \ - -*l?*) strip_trailopt 'l';; \ - -[dEDm]) skip_next=yes;; \ - -[JT]) skip_next=yes;; \ - esac; \ - case $$flg in \ - *$$target_option*) has_opt=yes; break;; \ - esac; \ - done; \ - test $$has_opt = yes -am__make_dryrun = (target_option=n; $(am__make_running_with_option)) -am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) -pkgdatadir = $(datadir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkglibexecdir = $(libexecdir)/@PACKAGE@ -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = @build@ -host_triplet = @host@ -@BUILD_LIBWEBPDECODER_TRUE@am__append_1 = libwebpdspdecode.la -subdir = src/dsp -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pthread.m4 \ - $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ - $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ - $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -DIST_COMMON = $(srcdir)/Makefile.am $(common_HEADERS) \ - $(noinst_HEADERS) $(am__DIST_COMMON) -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = $(top_builddir)/src/webp/config.h -CONFIG_CLEAN_FILES = -CONFIG_CLEAN_VPATH_FILES = -LTLIBRARIES = $(noinst_LTLIBRARIES) -libwebpdsp_la_DEPENDENCIES = libwebpdsp_sse2.la libwebpdsp_sse41.la \ - libwebpdsp_neon.la libwebpdsp_msa.la libwebpdsp_mips32.la \ - libwebpdsp_mips_dsp_r2.la -am__objects_1 = libwebpdsp_la-alpha_processing.lo libwebpdsp_la-cpu.lo \ - libwebpdsp_la-dec.lo libwebpdsp_la-dec_clip_tables.lo \ - libwebpdsp_la-filters.lo libwebpdsp_la-lossless.lo \ - libwebpdsp_la-rescaler.lo libwebpdsp_la-upsampling.lo \ - libwebpdsp_la-yuv.lo -am__objects_2 = libwebpdsp_la-cost.lo libwebpdsp_la-enc.lo \ - libwebpdsp_la-lossless_enc.lo libwebpdsp_la-ssim.lo -am_libwebpdsp_la_OBJECTS = $(am__objects_1) $(am__objects_2) -libwebpdsp_la_OBJECTS = $(am_libwebpdsp_la_OBJECTS) -AM_V_lt = $(am__v_lt_@AM_V@) -am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) -am__v_lt_0 = --silent -am__v_lt_1 = -libwebpdsp_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ - $(libwebpdsp_la_LDFLAGS) $(LDFLAGS) -o $@ -libwebpdsp_mips32_la_DEPENDENCIES = libwebpdspdecode_mips32.la -am_libwebpdsp_mips32_la_OBJECTS = libwebpdsp_mips32_la-cost_mips32.lo \ - libwebpdsp_mips32_la-enc_mips32.lo \ - libwebpdsp_mips32_la-lossless_enc_mips32.lo -libwebpdsp_mips32_la_OBJECTS = $(am_libwebpdsp_mips32_la_OBJECTS) -libwebpdsp_mips32_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ - $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ - $(libwebpdsp_mips32_la_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ - $(LDFLAGS) -o $@ -libwebpdsp_mips_dsp_r2_la_DEPENDENCIES = \ - libwebpdspdecode_mips_dsp_r2.la -am_libwebpdsp_mips_dsp_r2_la_OBJECTS = \ - libwebpdsp_mips_dsp_r2_la-cost_mips_dsp_r2.lo \ - libwebpdsp_mips_dsp_r2_la-enc_mips_dsp_r2.lo \ - libwebpdsp_mips_dsp_r2_la-lossless_enc_mips_dsp_r2.lo -libwebpdsp_mips_dsp_r2_la_OBJECTS = \ - $(am_libwebpdsp_mips_dsp_r2_la_OBJECTS) -libwebpdsp_mips_dsp_r2_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ - $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ - $(libwebpdsp_mips_dsp_r2_la_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ - $(LDFLAGS) -o $@ -libwebpdsp_msa_la_DEPENDENCIES = libwebpdspdecode_msa.la -am_libwebpdsp_msa_la_OBJECTS = libwebpdsp_msa_la-enc_msa.lo \ - libwebpdsp_msa_la-lossless_enc_msa.lo -libwebpdsp_msa_la_OBJECTS = $(am_libwebpdsp_msa_la_OBJECTS) -libwebpdsp_msa_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ - $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ - $(libwebpdsp_msa_la_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ - -o $@ -libwebpdsp_neon_la_DEPENDENCIES = libwebpdspdecode_neon.la -am_libwebpdsp_neon_la_OBJECTS = libwebpdsp_neon_la-cost_neon.lo \ - libwebpdsp_neon_la-enc_neon.lo \ - libwebpdsp_neon_la-lossless_enc_neon.lo -libwebpdsp_neon_la_OBJECTS = $(am_libwebpdsp_neon_la_OBJECTS) -libwebpdsp_neon_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ - $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ - $(libwebpdsp_neon_la_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ - $(LDFLAGS) -o $@ -libwebpdsp_sse2_la_DEPENDENCIES = libwebpdspdecode_sse2.la -am_libwebpdsp_sse2_la_OBJECTS = libwebpdsp_sse2_la-cost_sse2.lo \ - libwebpdsp_sse2_la-enc_sse2.lo \ - libwebpdsp_sse2_la-lossless_enc_sse2.lo \ - libwebpdsp_sse2_la-ssim_sse2.lo -libwebpdsp_sse2_la_OBJECTS = $(am_libwebpdsp_sse2_la_OBJECTS) -libwebpdsp_sse2_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ - $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ - $(libwebpdsp_sse2_la_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ - $(LDFLAGS) -o $@ -libwebpdsp_sse41_la_DEPENDENCIES = libwebpdspdecode_sse41.la -am_libwebpdsp_sse41_la_OBJECTS = libwebpdsp_sse41_la-enc_sse41.lo \ - libwebpdsp_sse41_la-lossless_enc_sse41.lo -libwebpdsp_sse41_la_OBJECTS = $(am_libwebpdsp_sse41_la_OBJECTS) -libwebpdsp_sse41_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ - $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ - $(libwebpdsp_sse41_la_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ - $(LDFLAGS) -o $@ -@BUILD_LIBWEBPDECODER_TRUE@libwebpdspdecode_la_DEPENDENCIES = \ -@BUILD_LIBWEBPDECODER_TRUE@ libwebpdspdecode_sse2.la \ -@BUILD_LIBWEBPDECODER_TRUE@ libwebpdspdecode_sse41.la \ -@BUILD_LIBWEBPDECODER_TRUE@ libwebpdspdecode_neon.la \ -@BUILD_LIBWEBPDECODER_TRUE@ libwebpdspdecode_msa.la \ -@BUILD_LIBWEBPDECODER_TRUE@ libwebpdspdecode_mips32.la \ -@BUILD_LIBWEBPDECODER_TRUE@ libwebpdspdecode_mips_dsp_r2.la -am__libwebpdspdecode_la_SOURCES_DIST = alpha_processing.c cpu.c dec.c \ - dec_clip_tables.c dsp.h filters.c lossless.c lossless.h \ - lossless_common.h rescaler.c upsampling.c yuv.c yuv.h -am__objects_3 = libwebpdspdecode_la-alpha_processing.lo \ - libwebpdspdecode_la-cpu.lo libwebpdspdecode_la-dec.lo \ - libwebpdspdecode_la-dec_clip_tables.lo \ - libwebpdspdecode_la-filters.lo libwebpdspdecode_la-lossless.lo \ - libwebpdspdecode_la-rescaler.lo \ - libwebpdspdecode_la-upsampling.lo libwebpdspdecode_la-yuv.lo -@BUILD_LIBWEBPDECODER_TRUE@am_libwebpdspdecode_la_OBJECTS = \ -@BUILD_LIBWEBPDECODER_TRUE@ $(am__objects_3) -libwebpdspdecode_la_OBJECTS = $(am_libwebpdspdecode_la_OBJECTS) -libwebpdspdecode_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ - $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ - $(AM_CFLAGS) $(CFLAGS) $(libwebpdspdecode_la_LDFLAGS) \ - $(LDFLAGS) -o $@ -@BUILD_LIBWEBPDECODER_TRUE@am_libwebpdspdecode_la_rpath = -libwebpdspdecode_mips32_la_LIBADD = -am_libwebpdspdecode_mips32_la_OBJECTS = \ - libwebpdspdecode_mips32_la-dec_mips32.lo \ - libwebpdspdecode_mips32_la-rescaler_mips32.lo \ - libwebpdspdecode_mips32_la-yuv_mips32.lo -libwebpdspdecode_mips32_la_OBJECTS = \ - $(am_libwebpdspdecode_mips32_la_OBJECTS) -libwebpdspdecode_mips32_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ - $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ - $(libwebpdspdecode_mips32_la_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ - $(LDFLAGS) -o $@ -libwebpdspdecode_mips_dsp_r2_la_LIBADD = -am_libwebpdspdecode_mips_dsp_r2_la_OBJECTS = libwebpdspdecode_mips_dsp_r2_la-alpha_processing_mips_dsp_r2.lo \ - libwebpdspdecode_mips_dsp_r2_la-dec_mips_dsp_r2.lo \ - libwebpdspdecode_mips_dsp_r2_la-filters_mips_dsp_r2.lo \ - libwebpdspdecode_mips_dsp_r2_la-lossless_mips_dsp_r2.lo \ - libwebpdspdecode_mips_dsp_r2_la-rescaler_mips_dsp_r2.lo \ - libwebpdspdecode_mips_dsp_r2_la-upsampling_mips_dsp_r2.lo \ - libwebpdspdecode_mips_dsp_r2_la-yuv_mips_dsp_r2.lo -libwebpdspdecode_mips_dsp_r2_la_OBJECTS = \ - $(am_libwebpdspdecode_mips_dsp_r2_la_OBJECTS) -libwebpdspdecode_mips_dsp_r2_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ - $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ - $(libwebpdspdecode_mips_dsp_r2_la_CFLAGS) $(CFLAGS) \ - $(AM_LDFLAGS) $(LDFLAGS) -o $@ -libwebpdspdecode_msa_la_LIBADD = -am_libwebpdspdecode_msa_la_OBJECTS = \ - libwebpdspdecode_msa_la-dec_msa.lo \ - libwebpdspdecode_msa_la-filters_msa.lo \ - libwebpdspdecode_msa_la-lossless_msa.lo \ - libwebpdspdecode_msa_la-rescaler_msa.lo \ - libwebpdspdecode_msa_la-upsampling_msa.lo -libwebpdspdecode_msa_la_OBJECTS = \ - $(am_libwebpdspdecode_msa_la_OBJECTS) -libwebpdspdecode_msa_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ - $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ - $(libwebpdspdecode_msa_la_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ - $(LDFLAGS) -o $@ -libwebpdspdecode_neon_la_LIBADD = -am_libwebpdspdecode_neon_la_OBJECTS = \ - libwebpdspdecode_neon_la-alpha_processing_neon.lo \ - libwebpdspdecode_neon_la-dec_neon.lo \ - libwebpdspdecode_neon_la-filters_neon.lo \ - libwebpdspdecode_neon_la-lossless_neon.lo \ - libwebpdspdecode_neon_la-rescaler_neon.lo \ - libwebpdspdecode_neon_la-upsampling_neon.lo \ - libwebpdspdecode_neon_la-yuv_neon.lo -libwebpdspdecode_neon_la_OBJECTS = \ - $(am_libwebpdspdecode_neon_la_OBJECTS) -libwebpdspdecode_neon_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ - $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ - $(libwebpdspdecode_neon_la_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ - $(LDFLAGS) -o $@ -libwebpdspdecode_sse2_la_LIBADD = -am_libwebpdspdecode_sse2_la_OBJECTS = \ - libwebpdspdecode_sse2_la-alpha_processing_sse2.lo \ - libwebpdspdecode_sse2_la-dec_sse2.lo \ - libwebpdspdecode_sse2_la-filters_sse2.lo \ - libwebpdspdecode_sse2_la-lossless_sse2.lo \ - libwebpdspdecode_sse2_la-rescaler_sse2.lo \ - libwebpdspdecode_sse2_la-upsampling_sse2.lo \ - libwebpdspdecode_sse2_la-yuv_sse2.lo -libwebpdspdecode_sse2_la_OBJECTS = \ - $(am_libwebpdspdecode_sse2_la_OBJECTS) -libwebpdspdecode_sse2_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ - $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ - $(libwebpdspdecode_sse2_la_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ - $(LDFLAGS) -o $@ -libwebpdspdecode_sse41_la_LIBADD = -am_libwebpdspdecode_sse41_la_OBJECTS = \ - libwebpdspdecode_sse41_la-alpha_processing_sse41.lo \ - libwebpdspdecode_sse41_la-dec_sse41.lo \ - libwebpdspdecode_sse41_la-upsampling_sse41.lo \ - libwebpdspdecode_sse41_la-yuv_sse41.lo -libwebpdspdecode_sse41_la_OBJECTS = \ - $(am_libwebpdspdecode_sse41_la_OBJECTS) -libwebpdspdecode_sse41_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ - $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ - $(libwebpdspdecode_sse41_la_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ - $(LDFLAGS) -o $@ -AM_V_P = $(am__v_P_@AM_V@) -am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) -am__v_P_0 = false -am__v_P_1 = : -AM_V_GEN = $(am__v_GEN_@AM_V@) -am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) -am__v_GEN_0 = @echo " GEN " $@; -am__v_GEN_1 = -AM_V_at = $(am__v_at_@AM_V@) -am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) -am__v_at_0 = @ -am__v_at_1 = -DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/src/webp -depcomp = $(SHELL) $(top_srcdir)/depcomp -am__maybe_remake_depfiles = depfiles -am__depfiles_remade = ./$(DEPDIR)/libwebpdsp_la-alpha_processing.Plo \ - ./$(DEPDIR)/libwebpdsp_la-cost.Plo \ - ./$(DEPDIR)/libwebpdsp_la-cpu.Plo \ - ./$(DEPDIR)/libwebpdsp_la-dec.Plo \ - ./$(DEPDIR)/libwebpdsp_la-dec_clip_tables.Plo \ - ./$(DEPDIR)/libwebpdsp_la-enc.Plo \ - ./$(DEPDIR)/libwebpdsp_la-filters.Plo \ - ./$(DEPDIR)/libwebpdsp_la-lossless.Plo \ - ./$(DEPDIR)/libwebpdsp_la-lossless_enc.Plo \ - ./$(DEPDIR)/libwebpdsp_la-rescaler.Plo \ - ./$(DEPDIR)/libwebpdsp_la-ssim.Plo \ - ./$(DEPDIR)/libwebpdsp_la-upsampling.Plo \ - ./$(DEPDIR)/libwebpdsp_la-yuv.Plo \ - ./$(DEPDIR)/libwebpdsp_mips32_la-cost_mips32.Plo \ - ./$(DEPDIR)/libwebpdsp_mips32_la-enc_mips32.Plo \ - ./$(DEPDIR)/libwebpdsp_mips32_la-lossless_enc_mips32.Plo \ - ./$(DEPDIR)/libwebpdsp_mips_dsp_r2_la-cost_mips_dsp_r2.Plo \ - ./$(DEPDIR)/libwebpdsp_mips_dsp_r2_la-enc_mips_dsp_r2.Plo \ - ./$(DEPDIR)/libwebpdsp_mips_dsp_r2_la-lossless_enc_mips_dsp_r2.Plo \ - ./$(DEPDIR)/libwebpdsp_msa_la-enc_msa.Plo \ - ./$(DEPDIR)/libwebpdsp_msa_la-lossless_enc_msa.Plo \ - ./$(DEPDIR)/libwebpdsp_neon_la-cost_neon.Plo \ - ./$(DEPDIR)/libwebpdsp_neon_la-enc_neon.Plo \ - ./$(DEPDIR)/libwebpdsp_neon_la-lossless_enc_neon.Plo \ - ./$(DEPDIR)/libwebpdsp_sse2_la-cost_sse2.Plo \ - ./$(DEPDIR)/libwebpdsp_sse2_la-enc_sse2.Plo \ - ./$(DEPDIR)/libwebpdsp_sse2_la-lossless_enc_sse2.Plo \ - ./$(DEPDIR)/libwebpdsp_sse2_la-ssim_sse2.Plo \ - ./$(DEPDIR)/libwebpdsp_sse41_la-enc_sse41.Plo \ - ./$(DEPDIR)/libwebpdsp_sse41_la-lossless_enc_sse41.Plo \ - ./$(DEPDIR)/libwebpdspdecode_la-alpha_processing.Plo \ - ./$(DEPDIR)/libwebpdspdecode_la-cpu.Plo \ - ./$(DEPDIR)/libwebpdspdecode_la-dec.Plo \ - ./$(DEPDIR)/libwebpdspdecode_la-dec_clip_tables.Plo \ - ./$(DEPDIR)/libwebpdspdecode_la-filters.Plo \ - ./$(DEPDIR)/libwebpdspdecode_la-lossless.Plo \ - ./$(DEPDIR)/libwebpdspdecode_la-rescaler.Plo \ - ./$(DEPDIR)/libwebpdspdecode_la-upsampling.Plo \ - ./$(DEPDIR)/libwebpdspdecode_la-yuv.Plo \ - ./$(DEPDIR)/libwebpdspdecode_mips32_la-dec_mips32.Plo \ - ./$(DEPDIR)/libwebpdspdecode_mips32_la-rescaler_mips32.Plo \ - ./$(DEPDIR)/libwebpdspdecode_mips32_la-yuv_mips32.Plo \ - ./$(DEPDIR)/libwebpdspdecode_mips_dsp_r2_la-alpha_processing_mips_dsp_r2.Plo \ - ./$(DEPDIR)/libwebpdspdecode_mips_dsp_r2_la-dec_mips_dsp_r2.Plo \ - ./$(DEPDIR)/libwebpdspdecode_mips_dsp_r2_la-filters_mips_dsp_r2.Plo \ - ./$(DEPDIR)/libwebpdspdecode_mips_dsp_r2_la-lossless_mips_dsp_r2.Plo \ - ./$(DEPDIR)/libwebpdspdecode_mips_dsp_r2_la-rescaler_mips_dsp_r2.Plo \ - ./$(DEPDIR)/libwebpdspdecode_mips_dsp_r2_la-upsampling_mips_dsp_r2.Plo \ - ./$(DEPDIR)/libwebpdspdecode_mips_dsp_r2_la-yuv_mips_dsp_r2.Plo \ - ./$(DEPDIR)/libwebpdspdecode_msa_la-dec_msa.Plo \ - ./$(DEPDIR)/libwebpdspdecode_msa_la-filters_msa.Plo \ - ./$(DEPDIR)/libwebpdspdecode_msa_la-lossless_msa.Plo \ - ./$(DEPDIR)/libwebpdspdecode_msa_la-rescaler_msa.Plo \ - ./$(DEPDIR)/libwebpdspdecode_msa_la-upsampling_msa.Plo \ - ./$(DEPDIR)/libwebpdspdecode_neon_la-alpha_processing_neon.Plo \ - ./$(DEPDIR)/libwebpdspdecode_neon_la-dec_neon.Plo \ - ./$(DEPDIR)/libwebpdspdecode_neon_la-filters_neon.Plo \ - ./$(DEPDIR)/libwebpdspdecode_neon_la-lossless_neon.Plo \ - ./$(DEPDIR)/libwebpdspdecode_neon_la-rescaler_neon.Plo \ - ./$(DEPDIR)/libwebpdspdecode_neon_la-upsampling_neon.Plo \ - ./$(DEPDIR)/libwebpdspdecode_neon_la-yuv_neon.Plo \ - ./$(DEPDIR)/libwebpdspdecode_sse2_la-alpha_processing_sse2.Plo \ - ./$(DEPDIR)/libwebpdspdecode_sse2_la-dec_sse2.Plo \ - ./$(DEPDIR)/libwebpdspdecode_sse2_la-filters_sse2.Plo \ - ./$(DEPDIR)/libwebpdspdecode_sse2_la-lossless_sse2.Plo \ - ./$(DEPDIR)/libwebpdspdecode_sse2_la-rescaler_sse2.Plo \ - ./$(DEPDIR)/libwebpdspdecode_sse2_la-upsampling_sse2.Plo \ - ./$(DEPDIR)/libwebpdspdecode_sse2_la-yuv_sse2.Plo \ - ./$(DEPDIR)/libwebpdspdecode_sse41_la-alpha_processing_sse41.Plo \ - ./$(DEPDIR)/libwebpdspdecode_sse41_la-dec_sse41.Plo \ - ./$(DEPDIR)/libwebpdspdecode_sse41_la-upsampling_sse41.Plo \ - ./$(DEPDIR)/libwebpdspdecode_sse41_la-yuv_sse41.Plo -am__mv = mv -f -COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ - $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CFLAGS) $(CFLAGS) -AM_V_CC = $(am__v_CC_@AM_V@) -am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) -am__v_CC_0 = @echo " CC " $@; -am__v_CC_1 = -CCLD = $(CC) -LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ - $(AM_LDFLAGS) $(LDFLAGS) -o $@ -AM_V_CCLD = $(am__v_CCLD_@AM_V@) -am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) -am__v_CCLD_0 = @echo " CCLD " $@; -am__v_CCLD_1 = -SOURCES = $(libwebpdsp_la_SOURCES) $(libwebpdsp_mips32_la_SOURCES) \ - $(libwebpdsp_mips_dsp_r2_la_SOURCES) \ - $(libwebpdsp_msa_la_SOURCES) $(libwebpdsp_neon_la_SOURCES) \ - $(libwebpdsp_sse2_la_SOURCES) $(libwebpdsp_sse41_la_SOURCES) \ - $(libwebpdspdecode_la_SOURCES) \ - $(libwebpdspdecode_mips32_la_SOURCES) \ - $(libwebpdspdecode_mips_dsp_r2_la_SOURCES) \ - $(libwebpdspdecode_msa_la_SOURCES) \ - $(libwebpdspdecode_neon_la_SOURCES) \ - $(libwebpdspdecode_sse2_la_SOURCES) \ - $(libwebpdspdecode_sse41_la_SOURCES) -DIST_SOURCES = $(libwebpdsp_la_SOURCES) \ - $(libwebpdsp_mips32_la_SOURCES) \ - $(libwebpdsp_mips_dsp_r2_la_SOURCES) \ - $(libwebpdsp_msa_la_SOURCES) $(libwebpdsp_neon_la_SOURCES) \ - $(libwebpdsp_sse2_la_SOURCES) $(libwebpdsp_sse41_la_SOURCES) \ - $(am__libwebpdspdecode_la_SOURCES_DIST) \ - $(libwebpdspdecode_mips32_la_SOURCES) \ - $(libwebpdspdecode_mips_dsp_r2_la_SOURCES) \ - $(libwebpdspdecode_msa_la_SOURCES) \ - $(libwebpdspdecode_neon_la_SOURCES) \ - $(libwebpdspdecode_sse2_la_SOURCES) \ - $(libwebpdspdecode_sse41_la_SOURCES) -am__can_run_installinfo = \ - case $$AM_UPDATE_INFO_DIR in \ - n|no|NO) false;; \ - *) (install-info --version) >/dev/null 2>&1;; \ - esac -am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; -am__vpath_adj = case $$p in \ - $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ - *) f=$$p;; \ - esac; -am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; -am__install_max = 40 -am__nobase_strip_setup = \ - srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` -am__nobase_strip = \ - for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" -am__nobase_list = $(am__nobase_strip_setup); \ - for p in $$list; do echo "$$p $$p"; done | \ - sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ - $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ - if (++n[$$2] == $(am__install_max)) \ - { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ - END { for (dir in files) print dir, files[dir] }' -am__base_list = \ - sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ - sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' -am__uninstall_files_from_dir = { \ - test -z "$$files" \ - || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ - || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ - $(am__cd) "$$dir" && rm -f $$files; }; \ - } -am__installdirs = "$(DESTDIR)$(commondir)" -HEADERS = $(common_HEADERS) $(noinst_HEADERS) -am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) -# Read a list of newline-separated strings from the standard input, -# and print each of them once, without duplicates. Input order is -# *not* preserved. -am__uniquify_input = $(AWK) '\ - BEGIN { nonempty = 0; } \ - { items[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in items) print i; }; } \ -' -# Make sure the list of sources is unique. This is necessary because, -# e.g., the same source file might be shared among _SOURCES variables -# for different programs/libraries. -am__define_uniq_tagged_files = \ - list='$(am__tagged_files)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | $(am__uniquify_input)` -ETAGS = etags -CTAGS = ctags -am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = @ACLOCAL@ -AMTAR = @AMTAR@ -AM_CFLAGS = @AM_CFLAGS@ -AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_builddir) -I$(top_srcdir) -AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ -AR = @AR@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -CC = @CC@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -DLLTOOL = @DLLTOOL@ -DSYMUTIL = @DSYMUTIL@ -DUMPBIN = @DUMPBIN@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -FGREP = @FGREP@ -GIF_INCLUDES = @GIF_INCLUDES@ -GIF_LIBS = @GIF_LIBS@ -GL_INCLUDES = @GL_INCLUDES@ -GL_LIBS = @GL_LIBS@ -GREP = @GREP@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -JPEG_INCLUDES = @JPEG_INCLUDES@ -JPEG_LIBS = @JPEG_LIBS@ -LD = @LD@ -LDFLAGS = @LDFLAGS@ -LIBOBJS = @LIBOBJS@ -LIBPNG_CONFIG = @LIBPNG_CONFIG@ -LIBS = @LIBS@ -LIBSDL_CONFIG = @LIBSDL_CONFIG@ -LIBTOOL = @LIBTOOL@ -LIPO = @LIPO@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ -MAKEINFO = @MAKEINFO@ -MANIFEST_TOOL = @MANIFEST_TOOL@ -MKDIR_P = @MKDIR_P@ -NEON_FLAGS = @NEON_FLAGS@ -NM = @NM@ -NMEDIT = @NMEDIT@ -OBJDUMP = @OBJDUMP@ -OBJEXT = @OBJEXT@ -OTOOL = @OTOOL@ -OTOOL64 = @OTOOL64@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_URL = @PACKAGE_URL@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -PNG_INCLUDES = @PNG_INCLUDES@ -PNG_LIBS = @PNG_LIBS@ -PTHREAD_CC = @PTHREAD_CC@ -PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ -PTHREAD_LIBS = @PTHREAD_LIBS@ -RANLIB = @RANLIB@ -SDL_INCLUDES = @SDL_INCLUDES@ -SDL_LIBS = @SDL_LIBS@ -SED = @SED@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -SSE2_FLAGS = @SSE2_FLAGS@ -SSE41_FLAGS = @SSE41_FLAGS@ -STRIP = @STRIP@ -TIFF_INCLUDES = @TIFF_INCLUDES@ -TIFF_LIBS = @TIFF_LIBS@ -USE_SWAP_16BIT_CSP = @USE_SWAP_16BIT_CSP@ -VERSION = @VERSION@ -abs_builddir = @abs_builddir@ -abs_srcdir = @abs_srcdir@ -abs_top_builddir = @abs_top_builddir@ -abs_top_srcdir = @abs_top_srcdir@ -ac_ct_AR = @ac_ct_AR@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ -am__include = @am__include@ -am__leading_dot = @am__leading_dot@ -am__quote = @am__quote@ -am__tar = @am__tar@ -am__untar = @am__untar@ -ax_pthread_config = @ax_pthread_config@ -bindir = @bindir@ -build = @build@ -build_alias = @build_alias@ -build_cpu = @build_cpu@ -build_os = @build_os@ -build_vendor = @build_vendor@ -builddir = @builddir@ -datadir = @datadir@ -datarootdir = @datarootdir@ -docdir = @docdir@ -dvidir = @dvidir@ -exec_prefix = @exec_prefix@ -host = @host@ -host_alias = @host_alias@ -host_cpu = @host_cpu@ -host_os = @host_os@ -host_vendor = @host_vendor@ -htmldir = @htmldir@ -includedir = @includedir@ -infodir = @infodir@ -install_sh = @install_sh@ -libdir = @libdir@ -libexecdir = @libexecdir@ -localedir = @localedir@ -localstatedir = @localstatedir@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -oldincludedir = @oldincludedir@ -pdfdir = @pdfdir@ -pkgconfigdir = @pkgconfigdir@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -psdir = @psdir@ -runstatedir = @runstatedir@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -srcdir = @srcdir@ -sysconfdir = @sysconfdir@ -target_alias = @target_alias@ -top_build_prefix = @top_build_prefix@ -top_builddir = @top_builddir@ -top_srcdir = @top_srcdir@ -noinst_LTLIBRARIES = libwebpdsp.la libwebpdsp_sse2.la \ - libwebpdspdecode_sse2.la libwebpdsp_sse41.la \ - libwebpdspdecode_sse41.la libwebpdsp_neon.la \ - libwebpdspdecode_neon.la libwebpdsp_msa.la \ - libwebpdspdecode_msa.la libwebpdsp_mips32.la \ - libwebpdspdecode_mips32.la libwebpdsp_mips_dsp_r2.la \ - libwebpdspdecode_mips_dsp_r2.la $(am__append_1) -common_HEADERS = ../webp/types.h -commondir = $(includedir)/webp -COMMON_SOURCES = alpha_processing.c cpu.c dec.c dec_clip_tables.c \ - dsp.h filters.c lossless.c lossless.h lossless_common.h \ - rescaler.c upsampling.c yuv.c yuv.h -ENC_SOURCES = cost.c enc.c lossless_enc.c quant.h ssim.c -libwebpdspdecode_sse41_la_SOURCES = alpha_processing_sse41.c \ - dec_sse41.c upsampling_sse41.c yuv_sse41.c -libwebpdspdecode_sse41_la_CPPFLAGS = $(libwebpdsp_la_CPPFLAGS) -libwebpdspdecode_sse41_la_CFLAGS = $(AM_CFLAGS) $(SSE41_FLAGS) -libwebpdspdecode_sse2_la_SOURCES = alpha_processing_sse2.c \ - common_sse2.h dec_sse2.c filters_sse2.c lossless_sse2.c \ - rescaler_sse2.c upsampling_sse2.c yuv_sse2.c -libwebpdspdecode_sse2_la_CPPFLAGS = $(libwebpdsp_sse2_la_CPPFLAGS) -libwebpdspdecode_sse2_la_CFLAGS = $(libwebpdsp_sse2_la_CFLAGS) -libwebpdspdecode_neon_la_SOURCES = alpha_processing_neon.c dec_neon.c \ - filters_neon.c lossless_neon.c neon.h rescaler_neon.c \ - upsampling_neon.c yuv_neon.c -libwebpdspdecode_neon_la_CPPFLAGS = $(libwebpdsp_neon_la_CPPFLAGS) -libwebpdspdecode_neon_la_CFLAGS = $(libwebpdsp_neon_la_CFLAGS) -libwebpdspdecode_msa_la_SOURCES = dec_msa.c filters_msa.c \ - lossless_msa.c msa_macro.h rescaler_msa.c upsampling_msa.c -libwebpdspdecode_msa_la_CPPFLAGS = $(libwebpdsp_msa_la_CPPFLAGS) -libwebpdspdecode_msa_la_CFLAGS = $(libwebpdsp_msa_la_CFLAGS) -libwebpdspdecode_mips32_la_SOURCES = dec_mips32.c mips_macro.h \ - rescaler_mips32.c yuv_mips32.c -libwebpdspdecode_mips32_la_CPPFLAGS = $(libwebpdsp_mips32_la_CPPFLAGS) -libwebpdspdecode_mips32_la_CFLAGS = $(libwebpdsp_mips32_la_CFLAGS) -libwebpdspdecode_mips_dsp_r2_la_SOURCES = \ - alpha_processing_mips_dsp_r2.c dec_mips_dsp_r2.c \ - filters_mips_dsp_r2.c lossless_mips_dsp_r2.c mips_macro.h \ - rescaler_mips_dsp_r2.c upsampling_mips_dsp_r2.c \ - yuv_mips_dsp_r2.c -libwebpdspdecode_mips_dsp_r2_la_CPPFLAGS = $(libwebpdsp_mips_dsp_r2_la_CPPFLAGS) -libwebpdspdecode_mips_dsp_r2_la_CFLAGS = $(libwebpdsp_mips_dsp_r2_la_CFLAGS) -libwebpdsp_sse2_la_SOURCES = cost_sse2.c enc_sse2.c \ - lossless_enc_sse2.c ssim_sse2.c -libwebpdsp_sse2_la_CPPFLAGS = $(libwebpdsp_la_CPPFLAGS) -libwebpdsp_sse2_la_CFLAGS = $(AM_CFLAGS) $(SSE2_FLAGS) -libwebpdsp_sse2_la_LIBADD = libwebpdspdecode_sse2.la -libwebpdsp_sse41_la_SOURCES = enc_sse41.c lossless_enc_sse41.c -libwebpdsp_sse41_la_CPPFLAGS = $(libwebpdsp_la_CPPFLAGS) -libwebpdsp_sse41_la_CFLAGS = $(AM_CFLAGS) $(SSE41_FLAGS) -libwebpdsp_sse41_la_LIBADD = libwebpdspdecode_sse41.la -libwebpdsp_neon_la_SOURCES = cost_neon.c enc_neon.c \ - lossless_enc_neon.c -libwebpdsp_neon_la_CPPFLAGS = $(libwebpdsp_la_CPPFLAGS) -libwebpdsp_neon_la_CFLAGS = $(AM_CFLAGS) $(NEON_FLAGS) -libwebpdsp_neon_la_LIBADD = libwebpdspdecode_neon.la -libwebpdsp_msa_la_SOURCES = enc_msa.c lossless_enc_msa.c -libwebpdsp_msa_la_CPPFLAGS = $(libwebpdsp_la_CPPFLAGS) -libwebpdsp_msa_la_CFLAGS = $(AM_CFLAGS) -libwebpdsp_msa_la_LIBADD = libwebpdspdecode_msa.la -libwebpdsp_mips32_la_SOURCES = cost_mips32.c enc_mips32.c \ - lossless_enc_mips32.c -libwebpdsp_mips32_la_CPPFLAGS = $(libwebpdsp_la_CPPFLAGS) -libwebpdsp_mips32_la_CFLAGS = $(AM_CFLAGS) -libwebpdsp_mips32_la_LIBADD = libwebpdspdecode_mips32.la -libwebpdsp_mips_dsp_r2_la_SOURCES = cost_mips_dsp_r2.c \ - enc_mips_dsp_r2.c lossless_enc_mips_dsp_r2.c -libwebpdsp_mips_dsp_r2_la_CPPFLAGS = $(libwebpdsp_la_CPPFLAGS) -libwebpdsp_mips_dsp_r2_la_CFLAGS = $(AM_CFLAGS) -libwebpdsp_mips_dsp_r2_la_LIBADD = libwebpdspdecode_mips_dsp_r2.la -libwebpdsp_la_SOURCES = $(COMMON_SOURCES) $(ENC_SOURCES) -noinst_HEADERS = ../dec/vp8_dec.h ../webp/decode.h -libwebpdsp_la_CPPFLAGS = $(AM_CPPFLAGS) $(USE_SWAP_16BIT_CSP) -libwebpdsp_la_LDFLAGS = -lm -libwebpdsp_la_LIBADD = libwebpdsp_sse2.la libwebpdsp_sse41.la \ - libwebpdsp_neon.la libwebpdsp_msa.la libwebpdsp_mips32.la \ - libwebpdsp_mips_dsp_r2.la -@BUILD_LIBWEBPDECODER_TRUE@libwebpdspdecode_la_SOURCES = $(COMMON_SOURCES) -@BUILD_LIBWEBPDECODER_TRUE@libwebpdspdecode_la_CPPFLAGS = $(libwebpdsp_la_CPPFLAGS) -@BUILD_LIBWEBPDECODER_TRUE@libwebpdspdecode_la_LDFLAGS = $(libwebpdsp_la_LDFLAGS) -@BUILD_LIBWEBPDECODER_TRUE@libwebpdspdecode_la_LIBADD = \ -@BUILD_LIBWEBPDECODER_TRUE@ libwebpdspdecode_sse2.la \ -@BUILD_LIBWEBPDECODER_TRUE@ libwebpdspdecode_sse41.la \ -@BUILD_LIBWEBPDECODER_TRUE@ libwebpdspdecode_neon.la \ -@BUILD_LIBWEBPDECODER_TRUE@ libwebpdspdecode_msa.la \ -@BUILD_LIBWEBPDECODER_TRUE@ libwebpdspdecode_mips32.la \ -@BUILD_LIBWEBPDECODER_TRUE@ libwebpdspdecode_mips_dsp_r2.la -all: all-am - -.SUFFIXES: -.SUFFIXES: .c .lo .o .obj -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ - && { if test -f $@; then exit 0; else break; fi; }; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/dsp/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --foreign src/dsp/Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(am__aclocal_m4_deps): - -clean-noinstLTLIBRARIES: - -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) - @list='$(noinst_LTLIBRARIES)'; \ - locs=`for p in $$list; do echo $$p; done | \ - sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ - sort -u`; \ - test -z "$$locs" || { \ - echo rm -f $${locs}; \ - rm -f $${locs}; \ - } - -libwebpdsp.la: $(libwebpdsp_la_OBJECTS) $(libwebpdsp_la_DEPENDENCIES) $(EXTRA_libwebpdsp_la_DEPENDENCIES) - $(AM_V_CCLD)$(libwebpdsp_la_LINK) $(libwebpdsp_la_OBJECTS) $(libwebpdsp_la_LIBADD) $(LIBS) - -libwebpdsp_mips32.la: $(libwebpdsp_mips32_la_OBJECTS) $(libwebpdsp_mips32_la_DEPENDENCIES) $(EXTRA_libwebpdsp_mips32_la_DEPENDENCIES) - $(AM_V_CCLD)$(libwebpdsp_mips32_la_LINK) $(libwebpdsp_mips32_la_OBJECTS) $(libwebpdsp_mips32_la_LIBADD) $(LIBS) - -libwebpdsp_mips_dsp_r2.la: $(libwebpdsp_mips_dsp_r2_la_OBJECTS) $(libwebpdsp_mips_dsp_r2_la_DEPENDENCIES) $(EXTRA_libwebpdsp_mips_dsp_r2_la_DEPENDENCIES) - $(AM_V_CCLD)$(libwebpdsp_mips_dsp_r2_la_LINK) $(libwebpdsp_mips_dsp_r2_la_OBJECTS) $(libwebpdsp_mips_dsp_r2_la_LIBADD) $(LIBS) - -libwebpdsp_msa.la: $(libwebpdsp_msa_la_OBJECTS) $(libwebpdsp_msa_la_DEPENDENCIES) $(EXTRA_libwebpdsp_msa_la_DEPENDENCIES) - $(AM_V_CCLD)$(libwebpdsp_msa_la_LINK) $(libwebpdsp_msa_la_OBJECTS) $(libwebpdsp_msa_la_LIBADD) $(LIBS) - -libwebpdsp_neon.la: $(libwebpdsp_neon_la_OBJECTS) $(libwebpdsp_neon_la_DEPENDENCIES) $(EXTRA_libwebpdsp_neon_la_DEPENDENCIES) - $(AM_V_CCLD)$(libwebpdsp_neon_la_LINK) $(libwebpdsp_neon_la_OBJECTS) $(libwebpdsp_neon_la_LIBADD) $(LIBS) - -libwebpdsp_sse2.la: $(libwebpdsp_sse2_la_OBJECTS) $(libwebpdsp_sse2_la_DEPENDENCIES) $(EXTRA_libwebpdsp_sse2_la_DEPENDENCIES) - $(AM_V_CCLD)$(libwebpdsp_sse2_la_LINK) $(libwebpdsp_sse2_la_OBJECTS) $(libwebpdsp_sse2_la_LIBADD) $(LIBS) - -libwebpdsp_sse41.la: $(libwebpdsp_sse41_la_OBJECTS) $(libwebpdsp_sse41_la_DEPENDENCIES) $(EXTRA_libwebpdsp_sse41_la_DEPENDENCIES) - $(AM_V_CCLD)$(libwebpdsp_sse41_la_LINK) $(libwebpdsp_sse41_la_OBJECTS) $(libwebpdsp_sse41_la_LIBADD) $(LIBS) - -libwebpdspdecode.la: $(libwebpdspdecode_la_OBJECTS) $(libwebpdspdecode_la_DEPENDENCIES) $(EXTRA_libwebpdspdecode_la_DEPENDENCIES) - $(AM_V_CCLD)$(libwebpdspdecode_la_LINK) $(am_libwebpdspdecode_la_rpath) $(libwebpdspdecode_la_OBJECTS) $(libwebpdspdecode_la_LIBADD) $(LIBS) - -libwebpdspdecode_mips32.la: $(libwebpdspdecode_mips32_la_OBJECTS) $(libwebpdspdecode_mips32_la_DEPENDENCIES) $(EXTRA_libwebpdspdecode_mips32_la_DEPENDENCIES) - $(AM_V_CCLD)$(libwebpdspdecode_mips32_la_LINK) $(libwebpdspdecode_mips32_la_OBJECTS) $(libwebpdspdecode_mips32_la_LIBADD) $(LIBS) - -libwebpdspdecode_mips_dsp_r2.la: $(libwebpdspdecode_mips_dsp_r2_la_OBJECTS) $(libwebpdspdecode_mips_dsp_r2_la_DEPENDENCIES) $(EXTRA_libwebpdspdecode_mips_dsp_r2_la_DEPENDENCIES) - $(AM_V_CCLD)$(libwebpdspdecode_mips_dsp_r2_la_LINK) $(libwebpdspdecode_mips_dsp_r2_la_OBJECTS) $(libwebpdspdecode_mips_dsp_r2_la_LIBADD) $(LIBS) - -libwebpdspdecode_msa.la: $(libwebpdspdecode_msa_la_OBJECTS) $(libwebpdspdecode_msa_la_DEPENDENCIES) $(EXTRA_libwebpdspdecode_msa_la_DEPENDENCIES) - $(AM_V_CCLD)$(libwebpdspdecode_msa_la_LINK) $(libwebpdspdecode_msa_la_OBJECTS) $(libwebpdspdecode_msa_la_LIBADD) $(LIBS) - -libwebpdspdecode_neon.la: $(libwebpdspdecode_neon_la_OBJECTS) $(libwebpdspdecode_neon_la_DEPENDENCIES) $(EXTRA_libwebpdspdecode_neon_la_DEPENDENCIES) - $(AM_V_CCLD)$(libwebpdspdecode_neon_la_LINK) $(libwebpdspdecode_neon_la_OBJECTS) $(libwebpdspdecode_neon_la_LIBADD) $(LIBS) - -libwebpdspdecode_sse2.la: $(libwebpdspdecode_sse2_la_OBJECTS) $(libwebpdspdecode_sse2_la_DEPENDENCIES) $(EXTRA_libwebpdspdecode_sse2_la_DEPENDENCIES) - $(AM_V_CCLD)$(libwebpdspdecode_sse2_la_LINK) $(libwebpdspdecode_sse2_la_OBJECTS) $(libwebpdspdecode_sse2_la_LIBADD) $(LIBS) - -libwebpdspdecode_sse41.la: $(libwebpdspdecode_sse41_la_OBJECTS) $(libwebpdspdecode_sse41_la_DEPENDENCIES) $(EXTRA_libwebpdspdecode_sse41_la_DEPENDENCIES) - $(AM_V_CCLD)$(libwebpdspdecode_sse41_la_LINK) $(libwebpdspdecode_sse41_la_OBJECTS) $(libwebpdspdecode_sse41_la_LIBADD) $(LIBS) - -mostlyclean-compile: - -rm -f *.$(OBJEXT) - -distclean-compile: - -rm -f *.tab.c - -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwebpdsp_la-alpha_processing.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwebpdsp_la-cost.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwebpdsp_la-cpu.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwebpdsp_la-dec.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwebpdsp_la-dec_clip_tables.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwebpdsp_la-enc.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwebpdsp_la-filters.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwebpdsp_la-lossless.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwebpdsp_la-lossless_enc.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwebpdsp_la-rescaler.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwebpdsp_la-ssim.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwebpdsp_la-upsampling.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwebpdsp_la-yuv.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwebpdsp_mips32_la-cost_mips32.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwebpdsp_mips32_la-enc_mips32.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwebpdsp_mips32_la-lossless_enc_mips32.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwebpdsp_mips_dsp_r2_la-cost_mips_dsp_r2.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwebpdsp_mips_dsp_r2_la-enc_mips_dsp_r2.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwebpdsp_mips_dsp_r2_la-lossless_enc_mips_dsp_r2.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwebpdsp_msa_la-enc_msa.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwebpdsp_msa_la-lossless_enc_msa.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwebpdsp_neon_la-cost_neon.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwebpdsp_neon_la-enc_neon.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwebpdsp_neon_la-lossless_enc_neon.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwebpdsp_sse2_la-cost_sse2.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwebpdsp_sse2_la-enc_sse2.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwebpdsp_sse2_la-lossless_enc_sse2.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwebpdsp_sse2_la-ssim_sse2.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwebpdsp_sse41_la-enc_sse41.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwebpdsp_sse41_la-lossless_enc_sse41.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwebpdspdecode_la-alpha_processing.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwebpdspdecode_la-cpu.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwebpdspdecode_la-dec.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwebpdspdecode_la-dec_clip_tables.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwebpdspdecode_la-filters.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwebpdspdecode_la-lossless.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwebpdspdecode_la-rescaler.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwebpdspdecode_la-upsampling.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwebpdspdecode_la-yuv.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwebpdspdecode_mips32_la-dec_mips32.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwebpdspdecode_mips32_la-rescaler_mips32.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwebpdspdecode_mips32_la-yuv_mips32.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwebpdspdecode_mips_dsp_r2_la-alpha_processing_mips_dsp_r2.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwebpdspdecode_mips_dsp_r2_la-dec_mips_dsp_r2.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwebpdspdecode_mips_dsp_r2_la-filters_mips_dsp_r2.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwebpdspdecode_mips_dsp_r2_la-lossless_mips_dsp_r2.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwebpdspdecode_mips_dsp_r2_la-rescaler_mips_dsp_r2.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwebpdspdecode_mips_dsp_r2_la-upsampling_mips_dsp_r2.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwebpdspdecode_mips_dsp_r2_la-yuv_mips_dsp_r2.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwebpdspdecode_msa_la-dec_msa.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwebpdspdecode_msa_la-filters_msa.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwebpdspdecode_msa_la-lossless_msa.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwebpdspdecode_msa_la-rescaler_msa.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwebpdspdecode_msa_la-upsampling_msa.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwebpdspdecode_neon_la-alpha_processing_neon.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwebpdspdecode_neon_la-dec_neon.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwebpdspdecode_neon_la-filters_neon.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwebpdspdecode_neon_la-lossless_neon.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwebpdspdecode_neon_la-rescaler_neon.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwebpdspdecode_neon_la-upsampling_neon.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwebpdspdecode_neon_la-yuv_neon.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwebpdspdecode_sse2_la-alpha_processing_sse2.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwebpdspdecode_sse2_la-dec_sse2.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwebpdspdecode_sse2_la-filters_sse2.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwebpdspdecode_sse2_la-lossless_sse2.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwebpdspdecode_sse2_la-rescaler_sse2.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwebpdspdecode_sse2_la-upsampling_sse2.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwebpdspdecode_sse2_la-yuv_sse2.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwebpdspdecode_sse41_la-alpha_processing_sse41.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwebpdspdecode_sse41_la-dec_sse41.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwebpdspdecode_sse41_la-upsampling_sse41.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwebpdspdecode_sse41_la-yuv_sse41.Plo@am__quote@ # am--include-marker - -$(am__depfiles_remade): - @$(MKDIR_P) $(@D) - @echo '# dummy' >$@-t && $(am__mv) $@-t $@ - -am--depfiles: $(am__depfiles_remade) - -.c.o: -@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ -@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ -@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< - -.c.obj: -@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ -@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ -@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` - -.c.lo: -@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ -@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ -@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< - -libwebpdsp_la-alpha_processing.lo: alpha_processing.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwebpdsp_la-alpha_processing.lo -MD -MP -MF $(DEPDIR)/libwebpdsp_la-alpha_processing.Tpo -c -o libwebpdsp_la-alpha_processing.lo `test -f 'alpha_processing.c' || echo '$(srcdir)/'`alpha_processing.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdsp_la-alpha_processing.Tpo $(DEPDIR)/libwebpdsp_la-alpha_processing.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='alpha_processing.c' object='libwebpdsp_la-alpha_processing.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwebpdsp_la-alpha_processing.lo `test -f 'alpha_processing.c' || echo '$(srcdir)/'`alpha_processing.c - -libwebpdsp_la-cpu.lo: cpu.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwebpdsp_la-cpu.lo -MD -MP -MF $(DEPDIR)/libwebpdsp_la-cpu.Tpo -c -o libwebpdsp_la-cpu.lo `test -f 'cpu.c' || echo '$(srcdir)/'`cpu.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdsp_la-cpu.Tpo $(DEPDIR)/libwebpdsp_la-cpu.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='cpu.c' object='libwebpdsp_la-cpu.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwebpdsp_la-cpu.lo `test -f 'cpu.c' || echo '$(srcdir)/'`cpu.c - -libwebpdsp_la-dec.lo: dec.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwebpdsp_la-dec.lo -MD -MP -MF $(DEPDIR)/libwebpdsp_la-dec.Tpo -c -o libwebpdsp_la-dec.lo `test -f 'dec.c' || echo '$(srcdir)/'`dec.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdsp_la-dec.Tpo $(DEPDIR)/libwebpdsp_la-dec.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dec.c' object='libwebpdsp_la-dec.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwebpdsp_la-dec.lo `test -f 'dec.c' || echo '$(srcdir)/'`dec.c - -libwebpdsp_la-dec_clip_tables.lo: dec_clip_tables.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwebpdsp_la-dec_clip_tables.lo -MD -MP -MF $(DEPDIR)/libwebpdsp_la-dec_clip_tables.Tpo -c -o libwebpdsp_la-dec_clip_tables.lo `test -f 'dec_clip_tables.c' || echo '$(srcdir)/'`dec_clip_tables.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdsp_la-dec_clip_tables.Tpo $(DEPDIR)/libwebpdsp_la-dec_clip_tables.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dec_clip_tables.c' object='libwebpdsp_la-dec_clip_tables.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwebpdsp_la-dec_clip_tables.lo `test -f 'dec_clip_tables.c' || echo '$(srcdir)/'`dec_clip_tables.c - -libwebpdsp_la-filters.lo: filters.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwebpdsp_la-filters.lo -MD -MP -MF $(DEPDIR)/libwebpdsp_la-filters.Tpo -c -o libwebpdsp_la-filters.lo `test -f 'filters.c' || echo '$(srcdir)/'`filters.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdsp_la-filters.Tpo $(DEPDIR)/libwebpdsp_la-filters.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='filters.c' object='libwebpdsp_la-filters.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwebpdsp_la-filters.lo `test -f 'filters.c' || echo '$(srcdir)/'`filters.c - -libwebpdsp_la-lossless.lo: lossless.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwebpdsp_la-lossless.lo -MD -MP -MF $(DEPDIR)/libwebpdsp_la-lossless.Tpo -c -o libwebpdsp_la-lossless.lo `test -f 'lossless.c' || echo '$(srcdir)/'`lossless.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdsp_la-lossless.Tpo $(DEPDIR)/libwebpdsp_la-lossless.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lossless.c' object='libwebpdsp_la-lossless.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwebpdsp_la-lossless.lo `test -f 'lossless.c' || echo '$(srcdir)/'`lossless.c - -libwebpdsp_la-rescaler.lo: rescaler.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwebpdsp_la-rescaler.lo -MD -MP -MF $(DEPDIR)/libwebpdsp_la-rescaler.Tpo -c -o libwebpdsp_la-rescaler.lo `test -f 'rescaler.c' || echo '$(srcdir)/'`rescaler.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdsp_la-rescaler.Tpo $(DEPDIR)/libwebpdsp_la-rescaler.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rescaler.c' object='libwebpdsp_la-rescaler.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwebpdsp_la-rescaler.lo `test -f 'rescaler.c' || echo '$(srcdir)/'`rescaler.c - -libwebpdsp_la-upsampling.lo: upsampling.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwebpdsp_la-upsampling.lo -MD -MP -MF $(DEPDIR)/libwebpdsp_la-upsampling.Tpo -c -o libwebpdsp_la-upsampling.lo `test -f 'upsampling.c' || echo '$(srcdir)/'`upsampling.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdsp_la-upsampling.Tpo $(DEPDIR)/libwebpdsp_la-upsampling.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='upsampling.c' object='libwebpdsp_la-upsampling.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwebpdsp_la-upsampling.lo `test -f 'upsampling.c' || echo '$(srcdir)/'`upsampling.c - -libwebpdsp_la-yuv.lo: yuv.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwebpdsp_la-yuv.lo -MD -MP -MF $(DEPDIR)/libwebpdsp_la-yuv.Tpo -c -o libwebpdsp_la-yuv.lo `test -f 'yuv.c' || echo '$(srcdir)/'`yuv.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdsp_la-yuv.Tpo $(DEPDIR)/libwebpdsp_la-yuv.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='yuv.c' object='libwebpdsp_la-yuv.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwebpdsp_la-yuv.lo `test -f 'yuv.c' || echo '$(srcdir)/'`yuv.c - -libwebpdsp_la-cost.lo: cost.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwebpdsp_la-cost.lo -MD -MP -MF $(DEPDIR)/libwebpdsp_la-cost.Tpo -c -o libwebpdsp_la-cost.lo `test -f 'cost.c' || echo '$(srcdir)/'`cost.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdsp_la-cost.Tpo $(DEPDIR)/libwebpdsp_la-cost.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='cost.c' object='libwebpdsp_la-cost.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwebpdsp_la-cost.lo `test -f 'cost.c' || echo '$(srcdir)/'`cost.c - -libwebpdsp_la-enc.lo: enc.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwebpdsp_la-enc.lo -MD -MP -MF $(DEPDIR)/libwebpdsp_la-enc.Tpo -c -o libwebpdsp_la-enc.lo `test -f 'enc.c' || echo '$(srcdir)/'`enc.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdsp_la-enc.Tpo $(DEPDIR)/libwebpdsp_la-enc.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='enc.c' object='libwebpdsp_la-enc.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwebpdsp_la-enc.lo `test -f 'enc.c' || echo '$(srcdir)/'`enc.c - -libwebpdsp_la-lossless_enc.lo: lossless_enc.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwebpdsp_la-lossless_enc.lo -MD -MP -MF $(DEPDIR)/libwebpdsp_la-lossless_enc.Tpo -c -o libwebpdsp_la-lossless_enc.lo `test -f 'lossless_enc.c' || echo '$(srcdir)/'`lossless_enc.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdsp_la-lossless_enc.Tpo $(DEPDIR)/libwebpdsp_la-lossless_enc.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lossless_enc.c' object='libwebpdsp_la-lossless_enc.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwebpdsp_la-lossless_enc.lo `test -f 'lossless_enc.c' || echo '$(srcdir)/'`lossless_enc.c - -libwebpdsp_la-ssim.lo: ssim.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwebpdsp_la-ssim.lo -MD -MP -MF $(DEPDIR)/libwebpdsp_la-ssim.Tpo -c -o libwebpdsp_la-ssim.lo `test -f 'ssim.c' || echo '$(srcdir)/'`ssim.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdsp_la-ssim.Tpo $(DEPDIR)/libwebpdsp_la-ssim.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ssim.c' object='libwebpdsp_la-ssim.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwebpdsp_la-ssim.lo `test -f 'ssim.c' || echo '$(srcdir)/'`ssim.c - -libwebpdsp_mips32_la-cost_mips32.lo: cost_mips32.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_mips32_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdsp_mips32_la_CFLAGS) $(CFLAGS) -MT libwebpdsp_mips32_la-cost_mips32.lo -MD -MP -MF $(DEPDIR)/libwebpdsp_mips32_la-cost_mips32.Tpo -c -o libwebpdsp_mips32_la-cost_mips32.lo `test -f 'cost_mips32.c' || echo '$(srcdir)/'`cost_mips32.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdsp_mips32_la-cost_mips32.Tpo $(DEPDIR)/libwebpdsp_mips32_la-cost_mips32.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='cost_mips32.c' object='libwebpdsp_mips32_la-cost_mips32.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_mips32_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdsp_mips32_la_CFLAGS) $(CFLAGS) -c -o libwebpdsp_mips32_la-cost_mips32.lo `test -f 'cost_mips32.c' || echo '$(srcdir)/'`cost_mips32.c - -libwebpdsp_mips32_la-enc_mips32.lo: enc_mips32.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_mips32_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdsp_mips32_la_CFLAGS) $(CFLAGS) -MT libwebpdsp_mips32_la-enc_mips32.lo -MD -MP -MF $(DEPDIR)/libwebpdsp_mips32_la-enc_mips32.Tpo -c -o libwebpdsp_mips32_la-enc_mips32.lo `test -f 'enc_mips32.c' || echo '$(srcdir)/'`enc_mips32.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdsp_mips32_la-enc_mips32.Tpo $(DEPDIR)/libwebpdsp_mips32_la-enc_mips32.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='enc_mips32.c' object='libwebpdsp_mips32_la-enc_mips32.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_mips32_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdsp_mips32_la_CFLAGS) $(CFLAGS) -c -o libwebpdsp_mips32_la-enc_mips32.lo `test -f 'enc_mips32.c' || echo '$(srcdir)/'`enc_mips32.c - -libwebpdsp_mips32_la-lossless_enc_mips32.lo: lossless_enc_mips32.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_mips32_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdsp_mips32_la_CFLAGS) $(CFLAGS) -MT libwebpdsp_mips32_la-lossless_enc_mips32.lo -MD -MP -MF $(DEPDIR)/libwebpdsp_mips32_la-lossless_enc_mips32.Tpo -c -o libwebpdsp_mips32_la-lossless_enc_mips32.lo `test -f 'lossless_enc_mips32.c' || echo '$(srcdir)/'`lossless_enc_mips32.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdsp_mips32_la-lossless_enc_mips32.Tpo $(DEPDIR)/libwebpdsp_mips32_la-lossless_enc_mips32.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lossless_enc_mips32.c' object='libwebpdsp_mips32_la-lossless_enc_mips32.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_mips32_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdsp_mips32_la_CFLAGS) $(CFLAGS) -c -o libwebpdsp_mips32_la-lossless_enc_mips32.lo `test -f 'lossless_enc_mips32.c' || echo '$(srcdir)/'`lossless_enc_mips32.c - -libwebpdsp_mips_dsp_r2_la-cost_mips_dsp_r2.lo: cost_mips_dsp_r2.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_mips_dsp_r2_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdsp_mips_dsp_r2_la_CFLAGS) $(CFLAGS) -MT libwebpdsp_mips_dsp_r2_la-cost_mips_dsp_r2.lo -MD -MP -MF $(DEPDIR)/libwebpdsp_mips_dsp_r2_la-cost_mips_dsp_r2.Tpo -c -o libwebpdsp_mips_dsp_r2_la-cost_mips_dsp_r2.lo `test -f 'cost_mips_dsp_r2.c' || echo '$(srcdir)/'`cost_mips_dsp_r2.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdsp_mips_dsp_r2_la-cost_mips_dsp_r2.Tpo $(DEPDIR)/libwebpdsp_mips_dsp_r2_la-cost_mips_dsp_r2.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='cost_mips_dsp_r2.c' object='libwebpdsp_mips_dsp_r2_la-cost_mips_dsp_r2.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_mips_dsp_r2_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdsp_mips_dsp_r2_la_CFLAGS) $(CFLAGS) -c -o libwebpdsp_mips_dsp_r2_la-cost_mips_dsp_r2.lo `test -f 'cost_mips_dsp_r2.c' || echo '$(srcdir)/'`cost_mips_dsp_r2.c - -libwebpdsp_mips_dsp_r2_la-enc_mips_dsp_r2.lo: enc_mips_dsp_r2.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_mips_dsp_r2_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdsp_mips_dsp_r2_la_CFLAGS) $(CFLAGS) -MT libwebpdsp_mips_dsp_r2_la-enc_mips_dsp_r2.lo -MD -MP -MF $(DEPDIR)/libwebpdsp_mips_dsp_r2_la-enc_mips_dsp_r2.Tpo -c -o libwebpdsp_mips_dsp_r2_la-enc_mips_dsp_r2.lo `test -f 'enc_mips_dsp_r2.c' || echo '$(srcdir)/'`enc_mips_dsp_r2.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdsp_mips_dsp_r2_la-enc_mips_dsp_r2.Tpo $(DEPDIR)/libwebpdsp_mips_dsp_r2_la-enc_mips_dsp_r2.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='enc_mips_dsp_r2.c' object='libwebpdsp_mips_dsp_r2_la-enc_mips_dsp_r2.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_mips_dsp_r2_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdsp_mips_dsp_r2_la_CFLAGS) $(CFLAGS) -c -o libwebpdsp_mips_dsp_r2_la-enc_mips_dsp_r2.lo `test -f 'enc_mips_dsp_r2.c' || echo '$(srcdir)/'`enc_mips_dsp_r2.c - -libwebpdsp_mips_dsp_r2_la-lossless_enc_mips_dsp_r2.lo: lossless_enc_mips_dsp_r2.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_mips_dsp_r2_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdsp_mips_dsp_r2_la_CFLAGS) $(CFLAGS) -MT libwebpdsp_mips_dsp_r2_la-lossless_enc_mips_dsp_r2.lo -MD -MP -MF $(DEPDIR)/libwebpdsp_mips_dsp_r2_la-lossless_enc_mips_dsp_r2.Tpo -c -o libwebpdsp_mips_dsp_r2_la-lossless_enc_mips_dsp_r2.lo `test -f 'lossless_enc_mips_dsp_r2.c' || echo '$(srcdir)/'`lossless_enc_mips_dsp_r2.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdsp_mips_dsp_r2_la-lossless_enc_mips_dsp_r2.Tpo $(DEPDIR)/libwebpdsp_mips_dsp_r2_la-lossless_enc_mips_dsp_r2.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lossless_enc_mips_dsp_r2.c' object='libwebpdsp_mips_dsp_r2_la-lossless_enc_mips_dsp_r2.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_mips_dsp_r2_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdsp_mips_dsp_r2_la_CFLAGS) $(CFLAGS) -c -o libwebpdsp_mips_dsp_r2_la-lossless_enc_mips_dsp_r2.lo `test -f 'lossless_enc_mips_dsp_r2.c' || echo '$(srcdir)/'`lossless_enc_mips_dsp_r2.c - -libwebpdsp_msa_la-enc_msa.lo: enc_msa.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_msa_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdsp_msa_la_CFLAGS) $(CFLAGS) -MT libwebpdsp_msa_la-enc_msa.lo -MD -MP -MF $(DEPDIR)/libwebpdsp_msa_la-enc_msa.Tpo -c -o libwebpdsp_msa_la-enc_msa.lo `test -f 'enc_msa.c' || echo '$(srcdir)/'`enc_msa.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdsp_msa_la-enc_msa.Tpo $(DEPDIR)/libwebpdsp_msa_la-enc_msa.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='enc_msa.c' object='libwebpdsp_msa_la-enc_msa.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_msa_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdsp_msa_la_CFLAGS) $(CFLAGS) -c -o libwebpdsp_msa_la-enc_msa.lo `test -f 'enc_msa.c' || echo '$(srcdir)/'`enc_msa.c - -libwebpdsp_msa_la-lossless_enc_msa.lo: lossless_enc_msa.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_msa_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdsp_msa_la_CFLAGS) $(CFLAGS) -MT libwebpdsp_msa_la-lossless_enc_msa.lo -MD -MP -MF $(DEPDIR)/libwebpdsp_msa_la-lossless_enc_msa.Tpo -c -o libwebpdsp_msa_la-lossless_enc_msa.lo `test -f 'lossless_enc_msa.c' || echo '$(srcdir)/'`lossless_enc_msa.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdsp_msa_la-lossless_enc_msa.Tpo $(DEPDIR)/libwebpdsp_msa_la-lossless_enc_msa.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lossless_enc_msa.c' object='libwebpdsp_msa_la-lossless_enc_msa.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_msa_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdsp_msa_la_CFLAGS) $(CFLAGS) -c -o libwebpdsp_msa_la-lossless_enc_msa.lo `test -f 'lossless_enc_msa.c' || echo '$(srcdir)/'`lossless_enc_msa.c - -libwebpdsp_neon_la-cost_neon.lo: cost_neon.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_neon_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdsp_neon_la_CFLAGS) $(CFLAGS) -MT libwebpdsp_neon_la-cost_neon.lo -MD -MP -MF $(DEPDIR)/libwebpdsp_neon_la-cost_neon.Tpo -c -o libwebpdsp_neon_la-cost_neon.lo `test -f 'cost_neon.c' || echo '$(srcdir)/'`cost_neon.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdsp_neon_la-cost_neon.Tpo $(DEPDIR)/libwebpdsp_neon_la-cost_neon.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='cost_neon.c' object='libwebpdsp_neon_la-cost_neon.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_neon_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdsp_neon_la_CFLAGS) $(CFLAGS) -c -o libwebpdsp_neon_la-cost_neon.lo `test -f 'cost_neon.c' || echo '$(srcdir)/'`cost_neon.c - -libwebpdsp_neon_la-enc_neon.lo: enc_neon.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_neon_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdsp_neon_la_CFLAGS) $(CFLAGS) -MT libwebpdsp_neon_la-enc_neon.lo -MD -MP -MF $(DEPDIR)/libwebpdsp_neon_la-enc_neon.Tpo -c -o libwebpdsp_neon_la-enc_neon.lo `test -f 'enc_neon.c' || echo '$(srcdir)/'`enc_neon.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdsp_neon_la-enc_neon.Tpo $(DEPDIR)/libwebpdsp_neon_la-enc_neon.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='enc_neon.c' object='libwebpdsp_neon_la-enc_neon.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_neon_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdsp_neon_la_CFLAGS) $(CFLAGS) -c -o libwebpdsp_neon_la-enc_neon.lo `test -f 'enc_neon.c' || echo '$(srcdir)/'`enc_neon.c - -libwebpdsp_neon_la-lossless_enc_neon.lo: lossless_enc_neon.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_neon_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdsp_neon_la_CFLAGS) $(CFLAGS) -MT libwebpdsp_neon_la-lossless_enc_neon.lo -MD -MP -MF $(DEPDIR)/libwebpdsp_neon_la-lossless_enc_neon.Tpo -c -o libwebpdsp_neon_la-lossless_enc_neon.lo `test -f 'lossless_enc_neon.c' || echo '$(srcdir)/'`lossless_enc_neon.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdsp_neon_la-lossless_enc_neon.Tpo $(DEPDIR)/libwebpdsp_neon_la-lossless_enc_neon.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lossless_enc_neon.c' object='libwebpdsp_neon_la-lossless_enc_neon.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_neon_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdsp_neon_la_CFLAGS) $(CFLAGS) -c -o libwebpdsp_neon_la-lossless_enc_neon.lo `test -f 'lossless_enc_neon.c' || echo '$(srcdir)/'`lossless_enc_neon.c - -libwebpdsp_sse2_la-cost_sse2.lo: cost_sse2.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_sse2_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdsp_sse2_la_CFLAGS) $(CFLAGS) -MT libwebpdsp_sse2_la-cost_sse2.lo -MD -MP -MF $(DEPDIR)/libwebpdsp_sse2_la-cost_sse2.Tpo -c -o libwebpdsp_sse2_la-cost_sse2.lo `test -f 'cost_sse2.c' || echo '$(srcdir)/'`cost_sse2.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdsp_sse2_la-cost_sse2.Tpo $(DEPDIR)/libwebpdsp_sse2_la-cost_sse2.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='cost_sse2.c' object='libwebpdsp_sse2_la-cost_sse2.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_sse2_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdsp_sse2_la_CFLAGS) $(CFLAGS) -c -o libwebpdsp_sse2_la-cost_sse2.lo `test -f 'cost_sse2.c' || echo '$(srcdir)/'`cost_sse2.c - -libwebpdsp_sse2_la-enc_sse2.lo: enc_sse2.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_sse2_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdsp_sse2_la_CFLAGS) $(CFLAGS) -MT libwebpdsp_sse2_la-enc_sse2.lo -MD -MP -MF $(DEPDIR)/libwebpdsp_sse2_la-enc_sse2.Tpo -c -o libwebpdsp_sse2_la-enc_sse2.lo `test -f 'enc_sse2.c' || echo '$(srcdir)/'`enc_sse2.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdsp_sse2_la-enc_sse2.Tpo $(DEPDIR)/libwebpdsp_sse2_la-enc_sse2.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='enc_sse2.c' object='libwebpdsp_sse2_la-enc_sse2.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_sse2_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdsp_sse2_la_CFLAGS) $(CFLAGS) -c -o libwebpdsp_sse2_la-enc_sse2.lo `test -f 'enc_sse2.c' || echo '$(srcdir)/'`enc_sse2.c - -libwebpdsp_sse2_la-lossless_enc_sse2.lo: lossless_enc_sse2.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_sse2_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdsp_sse2_la_CFLAGS) $(CFLAGS) -MT libwebpdsp_sse2_la-lossless_enc_sse2.lo -MD -MP -MF $(DEPDIR)/libwebpdsp_sse2_la-lossless_enc_sse2.Tpo -c -o libwebpdsp_sse2_la-lossless_enc_sse2.lo `test -f 'lossless_enc_sse2.c' || echo '$(srcdir)/'`lossless_enc_sse2.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdsp_sse2_la-lossless_enc_sse2.Tpo $(DEPDIR)/libwebpdsp_sse2_la-lossless_enc_sse2.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lossless_enc_sse2.c' object='libwebpdsp_sse2_la-lossless_enc_sse2.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_sse2_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdsp_sse2_la_CFLAGS) $(CFLAGS) -c -o libwebpdsp_sse2_la-lossless_enc_sse2.lo `test -f 'lossless_enc_sse2.c' || echo '$(srcdir)/'`lossless_enc_sse2.c - -libwebpdsp_sse2_la-ssim_sse2.lo: ssim_sse2.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_sse2_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdsp_sse2_la_CFLAGS) $(CFLAGS) -MT libwebpdsp_sse2_la-ssim_sse2.lo -MD -MP -MF $(DEPDIR)/libwebpdsp_sse2_la-ssim_sse2.Tpo -c -o libwebpdsp_sse2_la-ssim_sse2.lo `test -f 'ssim_sse2.c' || echo '$(srcdir)/'`ssim_sse2.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdsp_sse2_la-ssim_sse2.Tpo $(DEPDIR)/libwebpdsp_sse2_la-ssim_sse2.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ssim_sse2.c' object='libwebpdsp_sse2_la-ssim_sse2.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_sse2_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdsp_sse2_la_CFLAGS) $(CFLAGS) -c -o libwebpdsp_sse2_la-ssim_sse2.lo `test -f 'ssim_sse2.c' || echo '$(srcdir)/'`ssim_sse2.c - -libwebpdsp_sse41_la-enc_sse41.lo: enc_sse41.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_sse41_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdsp_sse41_la_CFLAGS) $(CFLAGS) -MT libwebpdsp_sse41_la-enc_sse41.lo -MD -MP -MF $(DEPDIR)/libwebpdsp_sse41_la-enc_sse41.Tpo -c -o libwebpdsp_sse41_la-enc_sse41.lo `test -f 'enc_sse41.c' || echo '$(srcdir)/'`enc_sse41.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdsp_sse41_la-enc_sse41.Tpo $(DEPDIR)/libwebpdsp_sse41_la-enc_sse41.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='enc_sse41.c' object='libwebpdsp_sse41_la-enc_sse41.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_sse41_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdsp_sse41_la_CFLAGS) $(CFLAGS) -c -o libwebpdsp_sse41_la-enc_sse41.lo `test -f 'enc_sse41.c' || echo '$(srcdir)/'`enc_sse41.c - -libwebpdsp_sse41_la-lossless_enc_sse41.lo: lossless_enc_sse41.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_sse41_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdsp_sse41_la_CFLAGS) $(CFLAGS) -MT libwebpdsp_sse41_la-lossless_enc_sse41.lo -MD -MP -MF $(DEPDIR)/libwebpdsp_sse41_la-lossless_enc_sse41.Tpo -c -o libwebpdsp_sse41_la-lossless_enc_sse41.lo `test -f 'lossless_enc_sse41.c' || echo '$(srcdir)/'`lossless_enc_sse41.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdsp_sse41_la-lossless_enc_sse41.Tpo $(DEPDIR)/libwebpdsp_sse41_la-lossless_enc_sse41.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lossless_enc_sse41.c' object='libwebpdsp_sse41_la-lossless_enc_sse41.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdsp_sse41_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdsp_sse41_la_CFLAGS) $(CFLAGS) -c -o libwebpdsp_sse41_la-lossless_enc_sse41.lo `test -f 'lossless_enc_sse41.c' || echo '$(srcdir)/'`lossless_enc_sse41.c - -libwebpdspdecode_la-alpha_processing.lo: alpha_processing.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwebpdspdecode_la-alpha_processing.lo -MD -MP -MF $(DEPDIR)/libwebpdspdecode_la-alpha_processing.Tpo -c -o libwebpdspdecode_la-alpha_processing.lo `test -f 'alpha_processing.c' || echo '$(srcdir)/'`alpha_processing.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdspdecode_la-alpha_processing.Tpo $(DEPDIR)/libwebpdspdecode_la-alpha_processing.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='alpha_processing.c' object='libwebpdspdecode_la-alpha_processing.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwebpdspdecode_la-alpha_processing.lo `test -f 'alpha_processing.c' || echo '$(srcdir)/'`alpha_processing.c - -libwebpdspdecode_la-cpu.lo: cpu.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwebpdspdecode_la-cpu.lo -MD -MP -MF $(DEPDIR)/libwebpdspdecode_la-cpu.Tpo -c -o libwebpdspdecode_la-cpu.lo `test -f 'cpu.c' || echo '$(srcdir)/'`cpu.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdspdecode_la-cpu.Tpo $(DEPDIR)/libwebpdspdecode_la-cpu.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='cpu.c' object='libwebpdspdecode_la-cpu.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwebpdspdecode_la-cpu.lo `test -f 'cpu.c' || echo '$(srcdir)/'`cpu.c - -libwebpdspdecode_la-dec.lo: dec.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwebpdspdecode_la-dec.lo -MD -MP -MF $(DEPDIR)/libwebpdspdecode_la-dec.Tpo -c -o libwebpdspdecode_la-dec.lo `test -f 'dec.c' || echo '$(srcdir)/'`dec.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdspdecode_la-dec.Tpo $(DEPDIR)/libwebpdspdecode_la-dec.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dec.c' object='libwebpdspdecode_la-dec.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwebpdspdecode_la-dec.lo `test -f 'dec.c' || echo '$(srcdir)/'`dec.c - -libwebpdspdecode_la-dec_clip_tables.lo: dec_clip_tables.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwebpdspdecode_la-dec_clip_tables.lo -MD -MP -MF $(DEPDIR)/libwebpdspdecode_la-dec_clip_tables.Tpo -c -o libwebpdspdecode_la-dec_clip_tables.lo `test -f 'dec_clip_tables.c' || echo '$(srcdir)/'`dec_clip_tables.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdspdecode_la-dec_clip_tables.Tpo $(DEPDIR)/libwebpdspdecode_la-dec_clip_tables.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dec_clip_tables.c' object='libwebpdspdecode_la-dec_clip_tables.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwebpdspdecode_la-dec_clip_tables.lo `test -f 'dec_clip_tables.c' || echo '$(srcdir)/'`dec_clip_tables.c - -libwebpdspdecode_la-filters.lo: filters.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwebpdspdecode_la-filters.lo -MD -MP -MF $(DEPDIR)/libwebpdspdecode_la-filters.Tpo -c -o libwebpdspdecode_la-filters.lo `test -f 'filters.c' || echo '$(srcdir)/'`filters.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdspdecode_la-filters.Tpo $(DEPDIR)/libwebpdspdecode_la-filters.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='filters.c' object='libwebpdspdecode_la-filters.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwebpdspdecode_la-filters.lo `test -f 'filters.c' || echo '$(srcdir)/'`filters.c - -libwebpdspdecode_la-lossless.lo: lossless.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwebpdspdecode_la-lossless.lo -MD -MP -MF $(DEPDIR)/libwebpdspdecode_la-lossless.Tpo -c -o libwebpdspdecode_la-lossless.lo `test -f 'lossless.c' || echo '$(srcdir)/'`lossless.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdspdecode_la-lossless.Tpo $(DEPDIR)/libwebpdspdecode_la-lossless.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lossless.c' object='libwebpdspdecode_la-lossless.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwebpdspdecode_la-lossless.lo `test -f 'lossless.c' || echo '$(srcdir)/'`lossless.c - -libwebpdspdecode_la-rescaler.lo: rescaler.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwebpdspdecode_la-rescaler.lo -MD -MP -MF $(DEPDIR)/libwebpdspdecode_la-rescaler.Tpo -c -o libwebpdspdecode_la-rescaler.lo `test -f 'rescaler.c' || echo '$(srcdir)/'`rescaler.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdspdecode_la-rescaler.Tpo $(DEPDIR)/libwebpdspdecode_la-rescaler.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rescaler.c' object='libwebpdspdecode_la-rescaler.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwebpdspdecode_la-rescaler.lo `test -f 'rescaler.c' || echo '$(srcdir)/'`rescaler.c - -libwebpdspdecode_la-upsampling.lo: upsampling.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwebpdspdecode_la-upsampling.lo -MD -MP -MF $(DEPDIR)/libwebpdspdecode_la-upsampling.Tpo -c -o libwebpdspdecode_la-upsampling.lo `test -f 'upsampling.c' || echo '$(srcdir)/'`upsampling.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdspdecode_la-upsampling.Tpo $(DEPDIR)/libwebpdspdecode_la-upsampling.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='upsampling.c' object='libwebpdspdecode_la-upsampling.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwebpdspdecode_la-upsampling.lo `test -f 'upsampling.c' || echo '$(srcdir)/'`upsampling.c - -libwebpdspdecode_la-yuv.lo: yuv.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwebpdspdecode_la-yuv.lo -MD -MP -MF $(DEPDIR)/libwebpdspdecode_la-yuv.Tpo -c -o libwebpdspdecode_la-yuv.lo `test -f 'yuv.c' || echo '$(srcdir)/'`yuv.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdspdecode_la-yuv.Tpo $(DEPDIR)/libwebpdspdecode_la-yuv.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='yuv.c' object='libwebpdspdecode_la-yuv.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwebpdspdecode_la-yuv.lo `test -f 'yuv.c' || echo '$(srcdir)/'`yuv.c - -libwebpdspdecode_mips32_la-dec_mips32.lo: dec_mips32.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_mips32_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_mips32_la_CFLAGS) $(CFLAGS) -MT libwebpdspdecode_mips32_la-dec_mips32.lo -MD -MP -MF $(DEPDIR)/libwebpdspdecode_mips32_la-dec_mips32.Tpo -c -o libwebpdspdecode_mips32_la-dec_mips32.lo `test -f 'dec_mips32.c' || echo '$(srcdir)/'`dec_mips32.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdspdecode_mips32_la-dec_mips32.Tpo $(DEPDIR)/libwebpdspdecode_mips32_la-dec_mips32.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dec_mips32.c' object='libwebpdspdecode_mips32_la-dec_mips32.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_mips32_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_mips32_la_CFLAGS) $(CFLAGS) -c -o libwebpdspdecode_mips32_la-dec_mips32.lo `test -f 'dec_mips32.c' || echo '$(srcdir)/'`dec_mips32.c - -libwebpdspdecode_mips32_la-rescaler_mips32.lo: rescaler_mips32.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_mips32_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_mips32_la_CFLAGS) $(CFLAGS) -MT libwebpdspdecode_mips32_la-rescaler_mips32.lo -MD -MP -MF $(DEPDIR)/libwebpdspdecode_mips32_la-rescaler_mips32.Tpo -c -o libwebpdspdecode_mips32_la-rescaler_mips32.lo `test -f 'rescaler_mips32.c' || echo '$(srcdir)/'`rescaler_mips32.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdspdecode_mips32_la-rescaler_mips32.Tpo $(DEPDIR)/libwebpdspdecode_mips32_la-rescaler_mips32.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rescaler_mips32.c' object='libwebpdspdecode_mips32_la-rescaler_mips32.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_mips32_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_mips32_la_CFLAGS) $(CFLAGS) -c -o libwebpdspdecode_mips32_la-rescaler_mips32.lo `test -f 'rescaler_mips32.c' || echo '$(srcdir)/'`rescaler_mips32.c - -libwebpdspdecode_mips32_la-yuv_mips32.lo: yuv_mips32.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_mips32_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_mips32_la_CFLAGS) $(CFLAGS) -MT libwebpdspdecode_mips32_la-yuv_mips32.lo -MD -MP -MF $(DEPDIR)/libwebpdspdecode_mips32_la-yuv_mips32.Tpo -c -o libwebpdspdecode_mips32_la-yuv_mips32.lo `test -f 'yuv_mips32.c' || echo '$(srcdir)/'`yuv_mips32.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdspdecode_mips32_la-yuv_mips32.Tpo $(DEPDIR)/libwebpdspdecode_mips32_la-yuv_mips32.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='yuv_mips32.c' object='libwebpdspdecode_mips32_la-yuv_mips32.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_mips32_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_mips32_la_CFLAGS) $(CFLAGS) -c -o libwebpdspdecode_mips32_la-yuv_mips32.lo `test -f 'yuv_mips32.c' || echo '$(srcdir)/'`yuv_mips32.c - -libwebpdspdecode_mips_dsp_r2_la-alpha_processing_mips_dsp_r2.lo: alpha_processing_mips_dsp_r2.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_mips_dsp_r2_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_mips_dsp_r2_la_CFLAGS) $(CFLAGS) -MT libwebpdspdecode_mips_dsp_r2_la-alpha_processing_mips_dsp_r2.lo -MD -MP -MF $(DEPDIR)/libwebpdspdecode_mips_dsp_r2_la-alpha_processing_mips_dsp_r2.Tpo -c -o libwebpdspdecode_mips_dsp_r2_la-alpha_processing_mips_dsp_r2.lo `test -f 'alpha_processing_mips_dsp_r2.c' || echo '$(srcdir)/'`alpha_processing_mips_dsp_r2.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdspdecode_mips_dsp_r2_la-alpha_processing_mips_dsp_r2.Tpo $(DEPDIR)/libwebpdspdecode_mips_dsp_r2_la-alpha_processing_mips_dsp_r2.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='alpha_processing_mips_dsp_r2.c' object='libwebpdspdecode_mips_dsp_r2_la-alpha_processing_mips_dsp_r2.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_mips_dsp_r2_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_mips_dsp_r2_la_CFLAGS) $(CFLAGS) -c -o libwebpdspdecode_mips_dsp_r2_la-alpha_processing_mips_dsp_r2.lo `test -f 'alpha_processing_mips_dsp_r2.c' || echo '$(srcdir)/'`alpha_processing_mips_dsp_r2.c - -libwebpdspdecode_mips_dsp_r2_la-dec_mips_dsp_r2.lo: dec_mips_dsp_r2.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_mips_dsp_r2_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_mips_dsp_r2_la_CFLAGS) $(CFLAGS) -MT libwebpdspdecode_mips_dsp_r2_la-dec_mips_dsp_r2.lo -MD -MP -MF $(DEPDIR)/libwebpdspdecode_mips_dsp_r2_la-dec_mips_dsp_r2.Tpo -c -o libwebpdspdecode_mips_dsp_r2_la-dec_mips_dsp_r2.lo `test -f 'dec_mips_dsp_r2.c' || echo '$(srcdir)/'`dec_mips_dsp_r2.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdspdecode_mips_dsp_r2_la-dec_mips_dsp_r2.Tpo $(DEPDIR)/libwebpdspdecode_mips_dsp_r2_la-dec_mips_dsp_r2.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dec_mips_dsp_r2.c' object='libwebpdspdecode_mips_dsp_r2_la-dec_mips_dsp_r2.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_mips_dsp_r2_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_mips_dsp_r2_la_CFLAGS) $(CFLAGS) -c -o libwebpdspdecode_mips_dsp_r2_la-dec_mips_dsp_r2.lo `test -f 'dec_mips_dsp_r2.c' || echo '$(srcdir)/'`dec_mips_dsp_r2.c - -libwebpdspdecode_mips_dsp_r2_la-filters_mips_dsp_r2.lo: filters_mips_dsp_r2.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_mips_dsp_r2_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_mips_dsp_r2_la_CFLAGS) $(CFLAGS) -MT libwebpdspdecode_mips_dsp_r2_la-filters_mips_dsp_r2.lo -MD -MP -MF $(DEPDIR)/libwebpdspdecode_mips_dsp_r2_la-filters_mips_dsp_r2.Tpo -c -o libwebpdspdecode_mips_dsp_r2_la-filters_mips_dsp_r2.lo `test -f 'filters_mips_dsp_r2.c' || echo '$(srcdir)/'`filters_mips_dsp_r2.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdspdecode_mips_dsp_r2_la-filters_mips_dsp_r2.Tpo $(DEPDIR)/libwebpdspdecode_mips_dsp_r2_la-filters_mips_dsp_r2.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='filters_mips_dsp_r2.c' object='libwebpdspdecode_mips_dsp_r2_la-filters_mips_dsp_r2.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_mips_dsp_r2_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_mips_dsp_r2_la_CFLAGS) $(CFLAGS) -c -o libwebpdspdecode_mips_dsp_r2_la-filters_mips_dsp_r2.lo `test -f 'filters_mips_dsp_r2.c' || echo '$(srcdir)/'`filters_mips_dsp_r2.c - -libwebpdspdecode_mips_dsp_r2_la-lossless_mips_dsp_r2.lo: lossless_mips_dsp_r2.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_mips_dsp_r2_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_mips_dsp_r2_la_CFLAGS) $(CFLAGS) -MT libwebpdspdecode_mips_dsp_r2_la-lossless_mips_dsp_r2.lo -MD -MP -MF $(DEPDIR)/libwebpdspdecode_mips_dsp_r2_la-lossless_mips_dsp_r2.Tpo -c -o libwebpdspdecode_mips_dsp_r2_la-lossless_mips_dsp_r2.lo `test -f 'lossless_mips_dsp_r2.c' || echo '$(srcdir)/'`lossless_mips_dsp_r2.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdspdecode_mips_dsp_r2_la-lossless_mips_dsp_r2.Tpo $(DEPDIR)/libwebpdspdecode_mips_dsp_r2_la-lossless_mips_dsp_r2.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lossless_mips_dsp_r2.c' object='libwebpdspdecode_mips_dsp_r2_la-lossless_mips_dsp_r2.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_mips_dsp_r2_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_mips_dsp_r2_la_CFLAGS) $(CFLAGS) -c -o libwebpdspdecode_mips_dsp_r2_la-lossless_mips_dsp_r2.lo `test -f 'lossless_mips_dsp_r2.c' || echo '$(srcdir)/'`lossless_mips_dsp_r2.c - -libwebpdspdecode_mips_dsp_r2_la-rescaler_mips_dsp_r2.lo: rescaler_mips_dsp_r2.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_mips_dsp_r2_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_mips_dsp_r2_la_CFLAGS) $(CFLAGS) -MT libwebpdspdecode_mips_dsp_r2_la-rescaler_mips_dsp_r2.lo -MD -MP -MF $(DEPDIR)/libwebpdspdecode_mips_dsp_r2_la-rescaler_mips_dsp_r2.Tpo -c -o libwebpdspdecode_mips_dsp_r2_la-rescaler_mips_dsp_r2.lo `test -f 'rescaler_mips_dsp_r2.c' || echo '$(srcdir)/'`rescaler_mips_dsp_r2.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdspdecode_mips_dsp_r2_la-rescaler_mips_dsp_r2.Tpo $(DEPDIR)/libwebpdspdecode_mips_dsp_r2_la-rescaler_mips_dsp_r2.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rescaler_mips_dsp_r2.c' object='libwebpdspdecode_mips_dsp_r2_la-rescaler_mips_dsp_r2.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_mips_dsp_r2_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_mips_dsp_r2_la_CFLAGS) $(CFLAGS) -c -o libwebpdspdecode_mips_dsp_r2_la-rescaler_mips_dsp_r2.lo `test -f 'rescaler_mips_dsp_r2.c' || echo '$(srcdir)/'`rescaler_mips_dsp_r2.c - -libwebpdspdecode_mips_dsp_r2_la-upsampling_mips_dsp_r2.lo: upsampling_mips_dsp_r2.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_mips_dsp_r2_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_mips_dsp_r2_la_CFLAGS) $(CFLAGS) -MT libwebpdspdecode_mips_dsp_r2_la-upsampling_mips_dsp_r2.lo -MD -MP -MF $(DEPDIR)/libwebpdspdecode_mips_dsp_r2_la-upsampling_mips_dsp_r2.Tpo -c -o libwebpdspdecode_mips_dsp_r2_la-upsampling_mips_dsp_r2.lo `test -f 'upsampling_mips_dsp_r2.c' || echo '$(srcdir)/'`upsampling_mips_dsp_r2.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdspdecode_mips_dsp_r2_la-upsampling_mips_dsp_r2.Tpo $(DEPDIR)/libwebpdspdecode_mips_dsp_r2_la-upsampling_mips_dsp_r2.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='upsampling_mips_dsp_r2.c' object='libwebpdspdecode_mips_dsp_r2_la-upsampling_mips_dsp_r2.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_mips_dsp_r2_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_mips_dsp_r2_la_CFLAGS) $(CFLAGS) -c -o libwebpdspdecode_mips_dsp_r2_la-upsampling_mips_dsp_r2.lo `test -f 'upsampling_mips_dsp_r2.c' || echo '$(srcdir)/'`upsampling_mips_dsp_r2.c - -libwebpdspdecode_mips_dsp_r2_la-yuv_mips_dsp_r2.lo: yuv_mips_dsp_r2.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_mips_dsp_r2_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_mips_dsp_r2_la_CFLAGS) $(CFLAGS) -MT libwebpdspdecode_mips_dsp_r2_la-yuv_mips_dsp_r2.lo -MD -MP -MF $(DEPDIR)/libwebpdspdecode_mips_dsp_r2_la-yuv_mips_dsp_r2.Tpo -c -o libwebpdspdecode_mips_dsp_r2_la-yuv_mips_dsp_r2.lo `test -f 'yuv_mips_dsp_r2.c' || echo '$(srcdir)/'`yuv_mips_dsp_r2.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdspdecode_mips_dsp_r2_la-yuv_mips_dsp_r2.Tpo $(DEPDIR)/libwebpdspdecode_mips_dsp_r2_la-yuv_mips_dsp_r2.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='yuv_mips_dsp_r2.c' object='libwebpdspdecode_mips_dsp_r2_la-yuv_mips_dsp_r2.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_mips_dsp_r2_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_mips_dsp_r2_la_CFLAGS) $(CFLAGS) -c -o libwebpdspdecode_mips_dsp_r2_la-yuv_mips_dsp_r2.lo `test -f 'yuv_mips_dsp_r2.c' || echo '$(srcdir)/'`yuv_mips_dsp_r2.c - -libwebpdspdecode_msa_la-dec_msa.lo: dec_msa.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_msa_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_msa_la_CFLAGS) $(CFLAGS) -MT libwebpdspdecode_msa_la-dec_msa.lo -MD -MP -MF $(DEPDIR)/libwebpdspdecode_msa_la-dec_msa.Tpo -c -o libwebpdspdecode_msa_la-dec_msa.lo `test -f 'dec_msa.c' || echo '$(srcdir)/'`dec_msa.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdspdecode_msa_la-dec_msa.Tpo $(DEPDIR)/libwebpdspdecode_msa_la-dec_msa.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dec_msa.c' object='libwebpdspdecode_msa_la-dec_msa.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_msa_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_msa_la_CFLAGS) $(CFLAGS) -c -o libwebpdspdecode_msa_la-dec_msa.lo `test -f 'dec_msa.c' || echo '$(srcdir)/'`dec_msa.c - -libwebpdspdecode_msa_la-filters_msa.lo: filters_msa.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_msa_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_msa_la_CFLAGS) $(CFLAGS) -MT libwebpdspdecode_msa_la-filters_msa.lo -MD -MP -MF $(DEPDIR)/libwebpdspdecode_msa_la-filters_msa.Tpo -c -o libwebpdspdecode_msa_la-filters_msa.lo `test -f 'filters_msa.c' || echo '$(srcdir)/'`filters_msa.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdspdecode_msa_la-filters_msa.Tpo $(DEPDIR)/libwebpdspdecode_msa_la-filters_msa.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='filters_msa.c' object='libwebpdspdecode_msa_la-filters_msa.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_msa_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_msa_la_CFLAGS) $(CFLAGS) -c -o libwebpdspdecode_msa_la-filters_msa.lo `test -f 'filters_msa.c' || echo '$(srcdir)/'`filters_msa.c - -libwebpdspdecode_msa_la-lossless_msa.lo: lossless_msa.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_msa_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_msa_la_CFLAGS) $(CFLAGS) -MT libwebpdspdecode_msa_la-lossless_msa.lo -MD -MP -MF $(DEPDIR)/libwebpdspdecode_msa_la-lossless_msa.Tpo -c -o libwebpdspdecode_msa_la-lossless_msa.lo `test -f 'lossless_msa.c' || echo '$(srcdir)/'`lossless_msa.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdspdecode_msa_la-lossless_msa.Tpo $(DEPDIR)/libwebpdspdecode_msa_la-lossless_msa.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lossless_msa.c' object='libwebpdspdecode_msa_la-lossless_msa.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_msa_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_msa_la_CFLAGS) $(CFLAGS) -c -o libwebpdspdecode_msa_la-lossless_msa.lo `test -f 'lossless_msa.c' || echo '$(srcdir)/'`lossless_msa.c - -libwebpdspdecode_msa_la-rescaler_msa.lo: rescaler_msa.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_msa_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_msa_la_CFLAGS) $(CFLAGS) -MT libwebpdspdecode_msa_la-rescaler_msa.lo -MD -MP -MF $(DEPDIR)/libwebpdspdecode_msa_la-rescaler_msa.Tpo -c -o libwebpdspdecode_msa_la-rescaler_msa.lo `test -f 'rescaler_msa.c' || echo '$(srcdir)/'`rescaler_msa.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdspdecode_msa_la-rescaler_msa.Tpo $(DEPDIR)/libwebpdspdecode_msa_la-rescaler_msa.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rescaler_msa.c' object='libwebpdspdecode_msa_la-rescaler_msa.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_msa_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_msa_la_CFLAGS) $(CFLAGS) -c -o libwebpdspdecode_msa_la-rescaler_msa.lo `test -f 'rescaler_msa.c' || echo '$(srcdir)/'`rescaler_msa.c - -libwebpdspdecode_msa_la-upsampling_msa.lo: upsampling_msa.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_msa_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_msa_la_CFLAGS) $(CFLAGS) -MT libwebpdspdecode_msa_la-upsampling_msa.lo -MD -MP -MF $(DEPDIR)/libwebpdspdecode_msa_la-upsampling_msa.Tpo -c -o libwebpdspdecode_msa_la-upsampling_msa.lo `test -f 'upsampling_msa.c' || echo '$(srcdir)/'`upsampling_msa.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdspdecode_msa_la-upsampling_msa.Tpo $(DEPDIR)/libwebpdspdecode_msa_la-upsampling_msa.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='upsampling_msa.c' object='libwebpdspdecode_msa_la-upsampling_msa.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_msa_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_msa_la_CFLAGS) $(CFLAGS) -c -o libwebpdspdecode_msa_la-upsampling_msa.lo `test -f 'upsampling_msa.c' || echo '$(srcdir)/'`upsampling_msa.c - -libwebpdspdecode_neon_la-alpha_processing_neon.lo: alpha_processing_neon.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_neon_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_neon_la_CFLAGS) $(CFLAGS) -MT libwebpdspdecode_neon_la-alpha_processing_neon.lo -MD -MP -MF $(DEPDIR)/libwebpdspdecode_neon_la-alpha_processing_neon.Tpo -c -o libwebpdspdecode_neon_la-alpha_processing_neon.lo `test -f 'alpha_processing_neon.c' || echo '$(srcdir)/'`alpha_processing_neon.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdspdecode_neon_la-alpha_processing_neon.Tpo $(DEPDIR)/libwebpdspdecode_neon_la-alpha_processing_neon.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='alpha_processing_neon.c' object='libwebpdspdecode_neon_la-alpha_processing_neon.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_neon_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_neon_la_CFLAGS) $(CFLAGS) -c -o libwebpdspdecode_neon_la-alpha_processing_neon.lo `test -f 'alpha_processing_neon.c' || echo '$(srcdir)/'`alpha_processing_neon.c - -libwebpdspdecode_neon_la-dec_neon.lo: dec_neon.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_neon_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_neon_la_CFLAGS) $(CFLAGS) -MT libwebpdspdecode_neon_la-dec_neon.lo -MD -MP -MF $(DEPDIR)/libwebpdspdecode_neon_la-dec_neon.Tpo -c -o libwebpdspdecode_neon_la-dec_neon.lo `test -f 'dec_neon.c' || echo '$(srcdir)/'`dec_neon.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdspdecode_neon_la-dec_neon.Tpo $(DEPDIR)/libwebpdspdecode_neon_la-dec_neon.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dec_neon.c' object='libwebpdspdecode_neon_la-dec_neon.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_neon_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_neon_la_CFLAGS) $(CFLAGS) -c -o libwebpdspdecode_neon_la-dec_neon.lo `test -f 'dec_neon.c' || echo '$(srcdir)/'`dec_neon.c - -libwebpdspdecode_neon_la-filters_neon.lo: filters_neon.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_neon_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_neon_la_CFLAGS) $(CFLAGS) -MT libwebpdspdecode_neon_la-filters_neon.lo -MD -MP -MF $(DEPDIR)/libwebpdspdecode_neon_la-filters_neon.Tpo -c -o libwebpdspdecode_neon_la-filters_neon.lo `test -f 'filters_neon.c' || echo '$(srcdir)/'`filters_neon.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdspdecode_neon_la-filters_neon.Tpo $(DEPDIR)/libwebpdspdecode_neon_la-filters_neon.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='filters_neon.c' object='libwebpdspdecode_neon_la-filters_neon.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_neon_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_neon_la_CFLAGS) $(CFLAGS) -c -o libwebpdspdecode_neon_la-filters_neon.lo `test -f 'filters_neon.c' || echo '$(srcdir)/'`filters_neon.c - -libwebpdspdecode_neon_la-lossless_neon.lo: lossless_neon.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_neon_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_neon_la_CFLAGS) $(CFLAGS) -MT libwebpdspdecode_neon_la-lossless_neon.lo -MD -MP -MF $(DEPDIR)/libwebpdspdecode_neon_la-lossless_neon.Tpo -c -o libwebpdspdecode_neon_la-lossless_neon.lo `test -f 'lossless_neon.c' || echo '$(srcdir)/'`lossless_neon.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdspdecode_neon_la-lossless_neon.Tpo $(DEPDIR)/libwebpdspdecode_neon_la-lossless_neon.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lossless_neon.c' object='libwebpdspdecode_neon_la-lossless_neon.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_neon_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_neon_la_CFLAGS) $(CFLAGS) -c -o libwebpdspdecode_neon_la-lossless_neon.lo `test -f 'lossless_neon.c' || echo '$(srcdir)/'`lossless_neon.c - -libwebpdspdecode_neon_la-rescaler_neon.lo: rescaler_neon.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_neon_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_neon_la_CFLAGS) $(CFLAGS) -MT libwebpdspdecode_neon_la-rescaler_neon.lo -MD -MP -MF $(DEPDIR)/libwebpdspdecode_neon_la-rescaler_neon.Tpo -c -o libwebpdspdecode_neon_la-rescaler_neon.lo `test -f 'rescaler_neon.c' || echo '$(srcdir)/'`rescaler_neon.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdspdecode_neon_la-rescaler_neon.Tpo $(DEPDIR)/libwebpdspdecode_neon_la-rescaler_neon.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rescaler_neon.c' object='libwebpdspdecode_neon_la-rescaler_neon.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_neon_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_neon_la_CFLAGS) $(CFLAGS) -c -o libwebpdspdecode_neon_la-rescaler_neon.lo `test -f 'rescaler_neon.c' || echo '$(srcdir)/'`rescaler_neon.c - -libwebpdspdecode_neon_la-upsampling_neon.lo: upsampling_neon.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_neon_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_neon_la_CFLAGS) $(CFLAGS) -MT libwebpdspdecode_neon_la-upsampling_neon.lo -MD -MP -MF $(DEPDIR)/libwebpdspdecode_neon_la-upsampling_neon.Tpo -c -o libwebpdspdecode_neon_la-upsampling_neon.lo `test -f 'upsampling_neon.c' || echo '$(srcdir)/'`upsampling_neon.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdspdecode_neon_la-upsampling_neon.Tpo $(DEPDIR)/libwebpdspdecode_neon_la-upsampling_neon.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='upsampling_neon.c' object='libwebpdspdecode_neon_la-upsampling_neon.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_neon_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_neon_la_CFLAGS) $(CFLAGS) -c -o libwebpdspdecode_neon_la-upsampling_neon.lo `test -f 'upsampling_neon.c' || echo '$(srcdir)/'`upsampling_neon.c - -libwebpdspdecode_neon_la-yuv_neon.lo: yuv_neon.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_neon_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_neon_la_CFLAGS) $(CFLAGS) -MT libwebpdspdecode_neon_la-yuv_neon.lo -MD -MP -MF $(DEPDIR)/libwebpdspdecode_neon_la-yuv_neon.Tpo -c -o libwebpdspdecode_neon_la-yuv_neon.lo `test -f 'yuv_neon.c' || echo '$(srcdir)/'`yuv_neon.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdspdecode_neon_la-yuv_neon.Tpo $(DEPDIR)/libwebpdspdecode_neon_la-yuv_neon.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='yuv_neon.c' object='libwebpdspdecode_neon_la-yuv_neon.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_neon_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_neon_la_CFLAGS) $(CFLAGS) -c -o libwebpdspdecode_neon_la-yuv_neon.lo `test -f 'yuv_neon.c' || echo '$(srcdir)/'`yuv_neon.c - -libwebpdspdecode_sse2_la-alpha_processing_sse2.lo: alpha_processing_sse2.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_sse2_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_sse2_la_CFLAGS) $(CFLAGS) -MT libwebpdspdecode_sse2_la-alpha_processing_sse2.lo -MD -MP -MF $(DEPDIR)/libwebpdspdecode_sse2_la-alpha_processing_sse2.Tpo -c -o libwebpdspdecode_sse2_la-alpha_processing_sse2.lo `test -f 'alpha_processing_sse2.c' || echo '$(srcdir)/'`alpha_processing_sse2.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdspdecode_sse2_la-alpha_processing_sse2.Tpo $(DEPDIR)/libwebpdspdecode_sse2_la-alpha_processing_sse2.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='alpha_processing_sse2.c' object='libwebpdspdecode_sse2_la-alpha_processing_sse2.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_sse2_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_sse2_la_CFLAGS) $(CFLAGS) -c -o libwebpdspdecode_sse2_la-alpha_processing_sse2.lo `test -f 'alpha_processing_sse2.c' || echo '$(srcdir)/'`alpha_processing_sse2.c - -libwebpdspdecode_sse2_la-dec_sse2.lo: dec_sse2.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_sse2_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_sse2_la_CFLAGS) $(CFLAGS) -MT libwebpdspdecode_sse2_la-dec_sse2.lo -MD -MP -MF $(DEPDIR)/libwebpdspdecode_sse2_la-dec_sse2.Tpo -c -o libwebpdspdecode_sse2_la-dec_sse2.lo `test -f 'dec_sse2.c' || echo '$(srcdir)/'`dec_sse2.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdspdecode_sse2_la-dec_sse2.Tpo $(DEPDIR)/libwebpdspdecode_sse2_la-dec_sse2.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dec_sse2.c' object='libwebpdspdecode_sse2_la-dec_sse2.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_sse2_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_sse2_la_CFLAGS) $(CFLAGS) -c -o libwebpdspdecode_sse2_la-dec_sse2.lo `test -f 'dec_sse2.c' || echo '$(srcdir)/'`dec_sse2.c - -libwebpdspdecode_sse2_la-filters_sse2.lo: filters_sse2.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_sse2_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_sse2_la_CFLAGS) $(CFLAGS) -MT libwebpdspdecode_sse2_la-filters_sse2.lo -MD -MP -MF $(DEPDIR)/libwebpdspdecode_sse2_la-filters_sse2.Tpo -c -o libwebpdspdecode_sse2_la-filters_sse2.lo `test -f 'filters_sse2.c' || echo '$(srcdir)/'`filters_sse2.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdspdecode_sse2_la-filters_sse2.Tpo $(DEPDIR)/libwebpdspdecode_sse2_la-filters_sse2.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='filters_sse2.c' object='libwebpdspdecode_sse2_la-filters_sse2.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_sse2_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_sse2_la_CFLAGS) $(CFLAGS) -c -o libwebpdspdecode_sse2_la-filters_sse2.lo `test -f 'filters_sse2.c' || echo '$(srcdir)/'`filters_sse2.c - -libwebpdspdecode_sse2_la-lossless_sse2.lo: lossless_sse2.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_sse2_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_sse2_la_CFLAGS) $(CFLAGS) -MT libwebpdspdecode_sse2_la-lossless_sse2.lo -MD -MP -MF $(DEPDIR)/libwebpdspdecode_sse2_la-lossless_sse2.Tpo -c -o libwebpdspdecode_sse2_la-lossless_sse2.lo `test -f 'lossless_sse2.c' || echo '$(srcdir)/'`lossless_sse2.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdspdecode_sse2_la-lossless_sse2.Tpo $(DEPDIR)/libwebpdspdecode_sse2_la-lossless_sse2.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lossless_sse2.c' object='libwebpdspdecode_sse2_la-lossless_sse2.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_sse2_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_sse2_la_CFLAGS) $(CFLAGS) -c -o libwebpdspdecode_sse2_la-lossless_sse2.lo `test -f 'lossless_sse2.c' || echo '$(srcdir)/'`lossless_sse2.c - -libwebpdspdecode_sse2_la-rescaler_sse2.lo: rescaler_sse2.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_sse2_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_sse2_la_CFLAGS) $(CFLAGS) -MT libwebpdspdecode_sse2_la-rescaler_sse2.lo -MD -MP -MF $(DEPDIR)/libwebpdspdecode_sse2_la-rescaler_sse2.Tpo -c -o libwebpdspdecode_sse2_la-rescaler_sse2.lo `test -f 'rescaler_sse2.c' || echo '$(srcdir)/'`rescaler_sse2.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdspdecode_sse2_la-rescaler_sse2.Tpo $(DEPDIR)/libwebpdspdecode_sse2_la-rescaler_sse2.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rescaler_sse2.c' object='libwebpdspdecode_sse2_la-rescaler_sse2.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_sse2_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_sse2_la_CFLAGS) $(CFLAGS) -c -o libwebpdspdecode_sse2_la-rescaler_sse2.lo `test -f 'rescaler_sse2.c' || echo '$(srcdir)/'`rescaler_sse2.c - -libwebpdspdecode_sse2_la-upsampling_sse2.lo: upsampling_sse2.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_sse2_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_sse2_la_CFLAGS) $(CFLAGS) -MT libwebpdspdecode_sse2_la-upsampling_sse2.lo -MD -MP -MF $(DEPDIR)/libwebpdspdecode_sse2_la-upsampling_sse2.Tpo -c -o libwebpdspdecode_sse2_la-upsampling_sse2.lo `test -f 'upsampling_sse2.c' || echo '$(srcdir)/'`upsampling_sse2.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdspdecode_sse2_la-upsampling_sse2.Tpo $(DEPDIR)/libwebpdspdecode_sse2_la-upsampling_sse2.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='upsampling_sse2.c' object='libwebpdspdecode_sse2_la-upsampling_sse2.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_sse2_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_sse2_la_CFLAGS) $(CFLAGS) -c -o libwebpdspdecode_sse2_la-upsampling_sse2.lo `test -f 'upsampling_sse2.c' || echo '$(srcdir)/'`upsampling_sse2.c - -libwebpdspdecode_sse2_la-yuv_sse2.lo: yuv_sse2.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_sse2_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_sse2_la_CFLAGS) $(CFLAGS) -MT libwebpdspdecode_sse2_la-yuv_sse2.lo -MD -MP -MF $(DEPDIR)/libwebpdspdecode_sse2_la-yuv_sse2.Tpo -c -o libwebpdspdecode_sse2_la-yuv_sse2.lo `test -f 'yuv_sse2.c' || echo '$(srcdir)/'`yuv_sse2.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdspdecode_sse2_la-yuv_sse2.Tpo $(DEPDIR)/libwebpdspdecode_sse2_la-yuv_sse2.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='yuv_sse2.c' object='libwebpdspdecode_sse2_la-yuv_sse2.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_sse2_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_sse2_la_CFLAGS) $(CFLAGS) -c -o libwebpdspdecode_sse2_la-yuv_sse2.lo `test -f 'yuv_sse2.c' || echo '$(srcdir)/'`yuv_sse2.c - -libwebpdspdecode_sse41_la-alpha_processing_sse41.lo: alpha_processing_sse41.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_sse41_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_sse41_la_CFLAGS) $(CFLAGS) -MT libwebpdspdecode_sse41_la-alpha_processing_sse41.lo -MD -MP -MF $(DEPDIR)/libwebpdspdecode_sse41_la-alpha_processing_sse41.Tpo -c -o libwebpdspdecode_sse41_la-alpha_processing_sse41.lo `test -f 'alpha_processing_sse41.c' || echo '$(srcdir)/'`alpha_processing_sse41.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdspdecode_sse41_la-alpha_processing_sse41.Tpo $(DEPDIR)/libwebpdspdecode_sse41_la-alpha_processing_sse41.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='alpha_processing_sse41.c' object='libwebpdspdecode_sse41_la-alpha_processing_sse41.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_sse41_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_sse41_la_CFLAGS) $(CFLAGS) -c -o libwebpdspdecode_sse41_la-alpha_processing_sse41.lo `test -f 'alpha_processing_sse41.c' || echo '$(srcdir)/'`alpha_processing_sse41.c - -libwebpdspdecode_sse41_la-dec_sse41.lo: dec_sse41.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_sse41_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_sse41_la_CFLAGS) $(CFLAGS) -MT libwebpdspdecode_sse41_la-dec_sse41.lo -MD -MP -MF $(DEPDIR)/libwebpdspdecode_sse41_la-dec_sse41.Tpo -c -o libwebpdspdecode_sse41_la-dec_sse41.lo `test -f 'dec_sse41.c' || echo '$(srcdir)/'`dec_sse41.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdspdecode_sse41_la-dec_sse41.Tpo $(DEPDIR)/libwebpdspdecode_sse41_la-dec_sse41.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dec_sse41.c' object='libwebpdspdecode_sse41_la-dec_sse41.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_sse41_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_sse41_la_CFLAGS) $(CFLAGS) -c -o libwebpdspdecode_sse41_la-dec_sse41.lo `test -f 'dec_sse41.c' || echo '$(srcdir)/'`dec_sse41.c - -libwebpdspdecode_sse41_la-upsampling_sse41.lo: upsampling_sse41.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_sse41_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_sse41_la_CFLAGS) $(CFLAGS) -MT libwebpdspdecode_sse41_la-upsampling_sse41.lo -MD -MP -MF $(DEPDIR)/libwebpdspdecode_sse41_la-upsampling_sse41.Tpo -c -o libwebpdspdecode_sse41_la-upsampling_sse41.lo `test -f 'upsampling_sse41.c' || echo '$(srcdir)/'`upsampling_sse41.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdspdecode_sse41_la-upsampling_sse41.Tpo $(DEPDIR)/libwebpdspdecode_sse41_la-upsampling_sse41.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='upsampling_sse41.c' object='libwebpdspdecode_sse41_la-upsampling_sse41.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_sse41_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_sse41_la_CFLAGS) $(CFLAGS) -c -o libwebpdspdecode_sse41_la-upsampling_sse41.lo `test -f 'upsampling_sse41.c' || echo '$(srcdir)/'`upsampling_sse41.c - -libwebpdspdecode_sse41_la-yuv_sse41.lo: yuv_sse41.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_sse41_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_sse41_la_CFLAGS) $(CFLAGS) -MT libwebpdspdecode_sse41_la-yuv_sse41.lo -MD -MP -MF $(DEPDIR)/libwebpdspdecode_sse41_la-yuv_sse41.Tpo -c -o libwebpdspdecode_sse41_la-yuv_sse41.lo `test -f 'yuv_sse41.c' || echo '$(srcdir)/'`yuv_sse41.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpdspdecode_sse41_la-yuv_sse41.Tpo $(DEPDIR)/libwebpdspdecode_sse41_la-yuv_sse41.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='yuv_sse41.c' object='libwebpdspdecode_sse41_la-yuv_sse41.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpdspdecode_sse41_la_CPPFLAGS) $(CPPFLAGS) $(libwebpdspdecode_sse41_la_CFLAGS) $(CFLAGS) -c -o libwebpdspdecode_sse41_la-yuv_sse41.lo `test -f 'yuv_sse41.c' || echo '$(srcdir)/'`yuv_sse41.c - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs -install-commonHEADERS: $(common_HEADERS) - @$(NORMAL_INSTALL) - @list='$(common_HEADERS)'; test -n "$(commondir)" || list=; \ - if test -n "$$list"; then \ - echo " $(MKDIR_P) '$(DESTDIR)$(commondir)'"; \ - $(MKDIR_P) "$(DESTDIR)$(commondir)" || exit 1; \ - fi; \ - for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - echo "$$d$$p"; \ - done | $(am__base_list) | \ - while read files; do \ - echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(commondir)'"; \ - $(INSTALL_HEADER) $$files "$(DESTDIR)$(commondir)" || exit $$?; \ - done - -uninstall-commonHEADERS: - @$(NORMAL_UNINSTALL) - @list='$(common_HEADERS)'; test -n "$(commondir)" || list=; \ - files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ - dir='$(DESTDIR)$(commondir)'; $(am__uninstall_files_from_dir) - -ID: $(am__tagged_files) - $(am__define_uniq_tagged_files); mkid -fID $$unique -tags: tags-am -TAGS: tags - -tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) - set x; \ - here=`pwd`; \ - $(am__define_uniq_tagged_files); \ - shift; \ - if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ - test -n "$$unique" || unique=$$empty_fix; \ - if test $$# -gt 0; then \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - "$$@" $$unique; \ - else \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$unique; \ - fi; \ - fi -ctags: ctags-am - -CTAGS: ctags -ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) - $(am__define_uniq_tagged_files); \ - test -z "$(CTAGS_ARGS)$$unique" \ - || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$unique - -GTAGS: - here=`$(am__cd) $(top_builddir) && pwd` \ - && $(am__cd) $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) "$$here" -cscopelist: cscopelist-am - -cscopelist-am: $(am__tagged_files) - list='$(am__tagged_files)'; \ - case "$(srcdir)" in \ - [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ - *) sdir=$(subdir)/$(srcdir) ;; \ - esac; \ - for i in $$list; do \ - if test -f "$$i"; then \ - echo "$(subdir)/$$i"; \ - else \ - echo "$$sdir/$$i"; \ - fi; \ - done >> $(top_builddir)/cscope.files - -distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - -distdir: $(BUILT_SOURCES) - $(MAKE) $(AM_MAKEFLAGS) distdir-am - -distdir-am: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - list='$(DISTFILES)'; \ - dist_files=`for file in $$list; do echo $$file; done | \ - sed -e "s|^$$srcdirstrip/||;t" \ - -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ - case $$dist_files in \ - */*) $(MKDIR_P) `echo "$$dist_files" | \ - sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ - sort -u` ;; \ - esac; \ - for file in $$dist_files; do \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - if test -d $$d/$$file; then \ - dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test -d "$(distdir)/$$file"; then \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ - else \ - test -f "$(distdir)/$$file" \ - || cp -p $$d/$$file "$(distdir)/$$file" \ - || exit 1; \ - fi; \ - done -check-am: all-am -check: check-am -all-am: Makefile $(LTLIBRARIES) $(HEADERS) -installdirs: - for dir in "$(DESTDIR)$(commondir)"; do \ - test -z "$$dir" || $(MKDIR_P) "$$dir"; \ - done -install: install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-am -install-strip: - if test -z '$(STRIP)'; then \ - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - install; \ - else \ - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ - fi -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-am - -clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ - mostlyclean-am - -distclean: distclean-am - -rm -f ./$(DEPDIR)/libwebpdsp_la-alpha_processing.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_la-cost.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_la-cpu.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_la-dec.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_la-dec_clip_tables.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_la-enc.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_la-filters.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_la-lossless.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_la-lossless_enc.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_la-rescaler.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_la-ssim.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_la-upsampling.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_la-yuv.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_mips32_la-cost_mips32.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_mips32_la-enc_mips32.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_mips32_la-lossless_enc_mips32.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_mips_dsp_r2_la-cost_mips_dsp_r2.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_mips_dsp_r2_la-enc_mips_dsp_r2.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_mips_dsp_r2_la-lossless_enc_mips_dsp_r2.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_msa_la-enc_msa.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_msa_la-lossless_enc_msa.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_neon_la-cost_neon.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_neon_la-enc_neon.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_neon_la-lossless_enc_neon.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_sse2_la-cost_sse2.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_sse2_la-enc_sse2.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_sse2_la-lossless_enc_sse2.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_sse2_la-ssim_sse2.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_sse41_la-enc_sse41.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_sse41_la-lossless_enc_sse41.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_la-alpha_processing.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_la-cpu.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_la-dec.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_la-dec_clip_tables.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_la-filters.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_la-lossless.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_la-rescaler.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_la-upsampling.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_la-yuv.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_mips32_la-dec_mips32.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_mips32_la-rescaler_mips32.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_mips32_la-yuv_mips32.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_mips_dsp_r2_la-alpha_processing_mips_dsp_r2.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_mips_dsp_r2_la-dec_mips_dsp_r2.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_mips_dsp_r2_la-filters_mips_dsp_r2.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_mips_dsp_r2_la-lossless_mips_dsp_r2.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_mips_dsp_r2_la-rescaler_mips_dsp_r2.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_mips_dsp_r2_la-upsampling_mips_dsp_r2.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_mips_dsp_r2_la-yuv_mips_dsp_r2.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_msa_la-dec_msa.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_msa_la-filters_msa.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_msa_la-lossless_msa.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_msa_la-rescaler_msa.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_msa_la-upsampling_msa.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_neon_la-alpha_processing_neon.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_neon_la-dec_neon.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_neon_la-filters_neon.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_neon_la-lossless_neon.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_neon_la-rescaler_neon.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_neon_la-upsampling_neon.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_neon_la-yuv_neon.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_sse2_la-alpha_processing_sse2.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_sse2_la-dec_sse2.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_sse2_la-filters_sse2.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_sse2_la-lossless_sse2.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_sse2_la-rescaler_sse2.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_sse2_la-upsampling_sse2.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_sse2_la-yuv_sse2.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_sse41_la-alpha_processing_sse41.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_sse41_la-dec_sse41.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_sse41_la-upsampling_sse41.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_sse41_la-yuv_sse41.Plo - -rm -f Makefile -distclean-am: clean-am distclean-compile distclean-generic \ - distclean-tags - -dvi: dvi-am - -dvi-am: - -html: html-am - -html-am: - -info: info-am - -info-am: - -install-data-am: install-commonHEADERS - -install-dvi: install-dvi-am - -install-dvi-am: - -install-exec-am: - -install-html: install-html-am - -install-html-am: - -install-info: install-info-am - -install-info-am: - -install-man: - -install-pdf: install-pdf-am - -install-pdf-am: - -install-ps: install-ps-am - -install-ps-am: - -installcheck-am: - -maintainer-clean: maintainer-clean-am - -rm -f ./$(DEPDIR)/libwebpdsp_la-alpha_processing.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_la-cost.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_la-cpu.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_la-dec.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_la-dec_clip_tables.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_la-enc.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_la-filters.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_la-lossless.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_la-lossless_enc.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_la-rescaler.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_la-ssim.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_la-upsampling.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_la-yuv.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_mips32_la-cost_mips32.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_mips32_la-enc_mips32.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_mips32_la-lossless_enc_mips32.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_mips_dsp_r2_la-cost_mips_dsp_r2.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_mips_dsp_r2_la-enc_mips_dsp_r2.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_mips_dsp_r2_la-lossless_enc_mips_dsp_r2.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_msa_la-enc_msa.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_msa_la-lossless_enc_msa.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_neon_la-cost_neon.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_neon_la-enc_neon.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_neon_la-lossless_enc_neon.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_sse2_la-cost_sse2.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_sse2_la-enc_sse2.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_sse2_la-lossless_enc_sse2.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_sse2_la-ssim_sse2.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_sse41_la-enc_sse41.Plo - -rm -f ./$(DEPDIR)/libwebpdsp_sse41_la-lossless_enc_sse41.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_la-alpha_processing.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_la-cpu.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_la-dec.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_la-dec_clip_tables.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_la-filters.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_la-lossless.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_la-rescaler.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_la-upsampling.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_la-yuv.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_mips32_la-dec_mips32.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_mips32_la-rescaler_mips32.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_mips32_la-yuv_mips32.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_mips_dsp_r2_la-alpha_processing_mips_dsp_r2.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_mips_dsp_r2_la-dec_mips_dsp_r2.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_mips_dsp_r2_la-filters_mips_dsp_r2.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_mips_dsp_r2_la-lossless_mips_dsp_r2.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_mips_dsp_r2_la-rescaler_mips_dsp_r2.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_mips_dsp_r2_la-upsampling_mips_dsp_r2.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_mips_dsp_r2_la-yuv_mips_dsp_r2.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_msa_la-dec_msa.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_msa_la-filters_msa.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_msa_la-lossless_msa.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_msa_la-rescaler_msa.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_msa_la-upsampling_msa.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_neon_la-alpha_processing_neon.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_neon_la-dec_neon.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_neon_la-filters_neon.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_neon_la-lossless_neon.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_neon_la-rescaler_neon.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_neon_la-upsampling_neon.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_neon_la-yuv_neon.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_sse2_la-alpha_processing_sse2.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_sse2_la-dec_sse2.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_sse2_la-filters_sse2.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_sse2_la-lossless_sse2.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_sse2_la-rescaler_sse2.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_sse2_la-upsampling_sse2.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_sse2_la-yuv_sse2.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_sse41_la-alpha_processing_sse41.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_sse41_la-dec_sse41.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_sse41_la-upsampling_sse41.Plo - -rm -f ./$(DEPDIR)/libwebpdspdecode_sse41_la-yuv_sse41.Plo - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-compile mostlyclean-generic \ - mostlyclean-libtool - -pdf: pdf-am - -pdf-am: - -ps: ps-am - -ps-am: - -uninstall-am: uninstall-commonHEADERS - -.MAKE: install-am install-strip - -.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ - clean-generic clean-libtool clean-noinstLTLIBRARIES \ - cscopelist-am ctags ctags-am distclean distclean-compile \ - distclean-generic distclean-libtool distclean-tags distdir dvi \ - dvi-am html html-am info info-am install install-am \ - install-commonHEADERS install-data install-data-am install-dvi \ - install-dvi-am install-exec install-exec-am install-html \ - install-html-am install-info install-info-am install-man \ - install-pdf install-pdf-am install-ps install-ps-am \ - install-strip installcheck installcheck-am installdirs \ - maintainer-clean maintainer-clean-generic mostlyclean \ - mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ - pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \ - uninstall-commonHEADERS - -.PRECIOUS: Makefile - - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/Extended/libwebp/src/dsp/alpha_processing.c b/Extended/libwebp/src/dsp/alpha_processing.c deleted file mode 100644 index 819d139..0000000 --- a/Extended/libwebp/src/dsp/alpha_processing.c +++ /dev/null @@ -1,472 +0,0 @@ -// Copyright 2013 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Utilities for processing transparent channel. -// -// Author: Skal (pascal.massimino@gmail.com) - -#include -#include "src/dsp/dsp.h" - -// Tables can be faster on some platform but incur some extra binary size (~2k). -#if !defined(USE_TABLES_FOR_ALPHA_MULT) -#define USE_TABLES_FOR_ALPHA_MULT 0 // ALTERNATE_CODE -#endif - - -// ----------------------------------------------------------------------------- - -#define MFIX 24 // 24bit fixed-point arithmetic -#define HALF ((1u << MFIX) >> 1) -#define KINV_255 ((1u << MFIX) / 255u) - -static uint32_t Mult(uint8_t x, uint32_t mult) { - const uint32_t v = (x * mult + HALF) >> MFIX; - assert(v <= 255); // <- 24bit precision is enough to ensure that. - return v; -} - -#if (USE_TABLES_FOR_ALPHA_MULT == 1) - -static const uint32_t kMultTables[2][256] = { - { // (255u << MFIX) / alpha - 0x00000000, 0xff000000, 0x7f800000, 0x55000000, 0x3fc00000, 0x33000000, - 0x2a800000, 0x246db6db, 0x1fe00000, 0x1c555555, 0x19800000, 0x172e8ba2, - 0x15400000, 0x139d89d8, 0x1236db6d, 0x11000000, 0x0ff00000, 0x0f000000, - 0x0e2aaaaa, 0x0d6bca1a, 0x0cc00000, 0x0c249249, 0x0b9745d1, 0x0b1642c8, - 0x0aa00000, 0x0a333333, 0x09cec4ec, 0x0971c71c, 0x091b6db6, 0x08cb08d3, - 0x08800000, 0x0839ce73, 0x07f80000, 0x07ba2e8b, 0x07800000, 0x07492492, - 0x07155555, 0x06e45306, 0x06b5e50d, 0x0689d89d, 0x06600000, 0x063831f3, - 0x06124924, 0x05ee23b8, 0x05cba2e8, 0x05aaaaaa, 0x058b2164, 0x056cefa8, - 0x05500000, 0x05343eb1, 0x05199999, 0x05000000, 0x04e76276, 0x04cfb2b7, - 0x04b8e38e, 0x04a2e8ba, 0x048db6db, 0x0479435e, 0x04658469, 0x045270d0, - 0x04400000, 0x042e29f7, 0x041ce739, 0x040c30c3, 0x03fc0000, 0x03ec4ec4, - 0x03dd1745, 0x03ce540f, 0x03c00000, 0x03b21642, 0x03a49249, 0x03976fc6, - 0x038aaaaa, 0x037e3f1f, 0x03722983, 0x03666666, 0x035af286, 0x034fcace, - 0x0344ec4e, 0x033a5440, 0x03300000, 0x0325ed09, 0x031c18f9, 0x0312818a, - 0x03092492, 0x03000000, 0x02f711dc, 0x02ee5846, 0x02e5d174, 0x02dd7baf, - 0x02d55555, 0x02cd5cd5, 0x02c590b2, 0x02bdef7b, 0x02b677d4, 0x02af286b, - 0x02a80000, 0x02a0fd5c, 0x029a1f58, 0x029364d9, 0x028ccccc, 0x0286562d, - 0x02800000, 0x0279c952, 0x0273b13b, 0x026db6db, 0x0267d95b, 0x026217ec, - 0x025c71c7, 0x0256e62a, 0x0251745d, 0x024c1bac, 0x0246db6d, 0x0241b2f9, - 0x023ca1af, 0x0237a6f4, 0x0232c234, 0x022df2df, 0x02293868, 0x02249249, - 0x02200000, 0x021b810e, 0x021714fb, 0x0212bb51, 0x020e739c, 0x020a3d70, - 0x02061861, 0x02020408, 0x01fe0000, 0x01fa0be8, 0x01f62762, 0x01f25213, - 0x01ee8ba2, 0x01ead3ba, 0x01e72a07, 0x01e38e38, 0x01e00000, 0x01dc7f10, - 0x01d90b21, 0x01d5a3e9, 0x01d24924, 0x01cefa8d, 0x01cbb7e3, 0x01c880e5, - 0x01c55555, 0x01c234f7, 0x01bf1f8f, 0x01bc14e5, 0x01b914c1, 0x01b61eed, - 0x01b33333, 0x01b05160, 0x01ad7943, 0x01aaaaaa, 0x01a7e567, 0x01a5294a, - 0x01a27627, 0x019fcbd2, 0x019d2a20, 0x019a90e7, 0x01980000, 0x01957741, - 0x0192f684, 0x01907da4, 0x018e0c7c, 0x018ba2e8, 0x018940c5, 0x0186e5f0, - 0x01849249, 0x018245ae, 0x01800000, 0x017dc11f, 0x017b88ee, 0x0179574e, - 0x01772c23, 0x01750750, 0x0172e8ba, 0x0170d045, 0x016ebdd7, 0x016cb157, - 0x016aaaaa, 0x0168a9b9, 0x0166ae6a, 0x0164b8a7, 0x0162c859, 0x0160dd67, - 0x015ef7bd, 0x015d1745, 0x015b3bea, 0x01596596, 0x01579435, 0x0155c7b4, - 0x01540000, 0x01523d03, 0x01507eae, 0x014ec4ec, 0x014d0fac, 0x014b5edc, - 0x0149b26c, 0x01480a4a, 0x01466666, 0x0144c6af, 0x01432b16, 0x0141938b, - 0x01400000, 0x013e7063, 0x013ce4a9, 0x013b5cc0, 0x0139d89d, 0x01385830, - 0x0136db6d, 0x01356246, 0x0133ecad, 0x01327a97, 0x01310bf6, 0x012fa0be, - 0x012e38e3, 0x012cd459, 0x012b7315, 0x012a150a, 0x0128ba2e, 0x01276276, - 0x01260dd6, 0x0124bc44, 0x01236db6, 0x01222222, 0x0120d97c, 0x011f93bc, - 0x011e50d7, 0x011d10c4, 0x011bd37a, 0x011a98ef, 0x0119611a, 0x01182bf2, - 0x0116f96f, 0x0115c988, 0x01149c34, 0x0113716a, 0x01124924, 0x01112358, - 0x01100000, 0x010edf12, 0x010dc087, 0x010ca458, 0x010b8a7d, 0x010a72f0, - 0x01095da8, 0x01084a9f, 0x010739ce, 0x01062b2e, 0x01051eb8, 0x01041465, - 0x01030c30, 0x01020612, 0x01010204, 0x01000000 }, - { // alpha * KINV_255 - 0x00000000, 0x00010101, 0x00020202, 0x00030303, 0x00040404, 0x00050505, - 0x00060606, 0x00070707, 0x00080808, 0x00090909, 0x000a0a0a, 0x000b0b0b, - 0x000c0c0c, 0x000d0d0d, 0x000e0e0e, 0x000f0f0f, 0x00101010, 0x00111111, - 0x00121212, 0x00131313, 0x00141414, 0x00151515, 0x00161616, 0x00171717, - 0x00181818, 0x00191919, 0x001a1a1a, 0x001b1b1b, 0x001c1c1c, 0x001d1d1d, - 0x001e1e1e, 0x001f1f1f, 0x00202020, 0x00212121, 0x00222222, 0x00232323, - 0x00242424, 0x00252525, 0x00262626, 0x00272727, 0x00282828, 0x00292929, - 0x002a2a2a, 0x002b2b2b, 0x002c2c2c, 0x002d2d2d, 0x002e2e2e, 0x002f2f2f, - 0x00303030, 0x00313131, 0x00323232, 0x00333333, 0x00343434, 0x00353535, - 0x00363636, 0x00373737, 0x00383838, 0x00393939, 0x003a3a3a, 0x003b3b3b, - 0x003c3c3c, 0x003d3d3d, 0x003e3e3e, 0x003f3f3f, 0x00404040, 0x00414141, - 0x00424242, 0x00434343, 0x00444444, 0x00454545, 0x00464646, 0x00474747, - 0x00484848, 0x00494949, 0x004a4a4a, 0x004b4b4b, 0x004c4c4c, 0x004d4d4d, - 0x004e4e4e, 0x004f4f4f, 0x00505050, 0x00515151, 0x00525252, 0x00535353, - 0x00545454, 0x00555555, 0x00565656, 0x00575757, 0x00585858, 0x00595959, - 0x005a5a5a, 0x005b5b5b, 0x005c5c5c, 0x005d5d5d, 0x005e5e5e, 0x005f5f5f, - 0x00606060, 0x00616161, 0x00626262, 0x00636363, 0x00646464, 0x00656565, - 0x00666666, 0x00676767, 0x00686868, 0x00696969, 0x006a6a6a, 0x006b6b6b, - 0x006c6c6c, 0x006d6d6d, 0x006e6e6e, 0x006f6f6f, 0x00707070, 0x00717171, - 0x00727272, 0x00737373, 0x00747474, 0x00757575, 0x00767676, 0x00777777, - 0x00787878, 0x00797979, 0x007a7a7a, 0x007b7b7b, 0x007c7c7c, 0x007d7d7d, - 0x007e7e7e, 0x007f7f7f, 0x00808080, 0x00818181, 0x00828282, 0x00838383, - 0x00848484, 0x00858585, 0x00868686, 0x00878787, 0x00888888, 0x00898989, - 0x008a8a8a, 0x008b8b8b, 0x008c8c8c, 0x008d8d8d, 0x008e8e8e, 0x008f8f8f, - 0x00909090, 0x00919191, 0x00929292, 0x00939393, 0x00949494, 0x00959595, - 0x00969696, 0x00979797, 0x00989898, 0x00999999, 0x009a9a9a, 0x009b9b9b, - 0x009c9c9c, 0x009d9d9d, 0x009e9e9e, 0x009f9f9f, 0x00a0a0a0, 0x00a1a1a1, - 0x00a2a2a2, 0x00a3a3a3, 0x00a4a4a4, 0x00a5a5a5, 0x00a6a6a6, 0x00a7a7a7, - 0x00a8a8a8, 0x00a9a9a9, 0x00aaaaaa, 0x00ababab, 0x00acacac, 0x00adadad, - 0x00aeaeae, 0x00afafaf, 0x00b0b0b0, 0x00b1b1b1, 0x00b2b2b2, 0x00b3b3b3, - 0x00b4b4b4, 0x00b5b5b5, 0x00b6b6b6, 0x00b7b7b7, 0x00b8b8b8, 0x00b9b9b9, - 0x00bababa, 0x00bbbbbb, 0x00bcbcbc, 0x00bdbdbd, 0x00bebebe, 0x00bfbfbf, - 0x00c0c0c0, 0x00c1c1c1, 0x00c2c2c2, 0x00c3c3c3, 0x00c4c4c4, 0x00c5c5c5, - 0x00c6c6c6, 0x00c7c7c7, 0x00c8c8c8, 0x00c9c9c9, 0x00cacaca, 0x00cbcbcb, - 0x00cccccc, 0x00cdcdcd, 0x00cecece, 0x00cfcfcf, 0x00d0d0d0, 0x00d1d1d1, - 0x00d2d2d2, 0x00d3d3d3, 0x00d4d4d4, 0x00d5d5d5, 0x00d6d6d6, 0x00d7d7d7, - 0x00d8d8d8, 0x00d9d9d9, 0x00dadada, 0x00dbdbdb, 0x00dcdcdc, 0x00dddddd, - 0x00dedede, 0x00dfdfdf, 0x00e0e0e0, 0x00e1e1e1, 0x00e2e2e2, 0x00e3e3e3, - 0x00e4e4e4, 0x00e5e5e5, 0x00e6e6e6, 0x00e7e7e7, 0x00e8e8e8, 0x00e9e9e9, - 0x00eaeaea, 0x00ebebeb, 0x00ececec, 0x00ededed, 0x00eeeeee, 0x00efefef, - 0x00f0f0f0, 0x00f1f1f1, 0x00f2f2f2, 0x00f3f3f3, 0x00f4f4f4, 0x00f5f5f5, - 0x00f6f6f6, 0x00f7f7f7, 0x00f8f8f8, 0x00f9f9f9, 0x00fafafa, 0x00fbfbfb, - 0x00fcfcfc, 0x00fdfdfd, 0x00fefefe, 0x00ffffff } -}; - -static WEBP_INLINE uint32_t GetScale(uint32_t a, int inverse) { - return kMultTables[!inverse][a]; -} - -#else - -static WEBP_INLINE uint32_t GetScale(uint32_t a, int inverse) { - return inverse ? (255u << MFIX) / a : a * KINV_255; -} - -#endif // USE_TABLES_FOR_ALPHA_MULT - -void WebPMultARGBRow_C(uint32_t* const ptr, int width, int inverse) { - int x; - for (x = 0; x < width; ++x) { - const uint32_t argb = ptr[x]; - if (argb < 0xff000000u) { // alpha < 255 - if (argb <= 0x00ffffffu) { // alpha == 0 - ptr[x] = 0; - } else { - const uint32_t alpha = (argb >> 24) & 0xff; - const uint32_t scale = GetScale(alpha, inverse); - uint32_t out = argb & 0xff000000u; - out |= Mult(argb >> 0, scale) << 0; - out |= Mult(argb >> 8, scale) << 8; - out |= Mult(argb >> 16, scale) << 16; - ptr[x] = out; - } - } - } -} - -void WebPMultRow_C(uint8_t* const ptr, const uint8_t* const alpha, - int width, int inverse) { - int x; - for (x = 0; x < width; ++x) { - const uint32_t a = alpha[x]; - if (a != 255) { - if (a == 0) { - ptr[x] = 0; - } else { - const uint32_t scale = GetScale(a, inverse); - ptr[x] = Mult(ptr[x], scale); - } - } - } -} - -#undef KINV_255 -#undef HALF -#undef MFIX - -void (*WebPMultARGBRow)(uint32_t* const ptr, int width, int inverse); -void (*WebPMultRow)(uint8_t* const ptr, const uint8_t* const alpha, - int width, int inverse); - -//------------------------------------------------------------------------------ -// Generic per-plane calls - -void WebPMultARGBRows(uint8_t* ptr, int stride, int width, int num_rows, - int inverse) { - int n; - for (n = 0; n < num_rows; ++n) { - WebPMultARGBRow((uint32_t*)ptr, width, inverse); - ptr += stride; - } -} - -void WebPMultRows(uint8_t* ptr, int stride, - const uint8_t* alpha, int alpha_stride, - int width, int num_rows, int inverse) { - int n; - for (n = 0; n < num_rows; ++n) { - WebPMultRow(ptr, alpha, width, inverse); - ptr += stride; - alpha += alpha_stride; - } -} - -//------------------------------------------------------------------------------ -// Premultiplied modes - -// non dithered-modes - -// (x * a * 32897) >> 23 is bit-wise equivalent to (int)(x * a / 255.) -// for all 8bit x or a. For bit-wise equivalence to (int)(x * a / 255. + .5), -// one can use instead: (x * a * 65793 + (1 << 23)) >> 24 -#if 1 // (int)(x * a / 255.) -#define MULTIPLIER(a) ((a) * 32897U) -#define PREMULTIPLY(x, m) (((x) * (m)) >> 23) -#else // (int)(x * a / 255. + .5) -#define MULTIPLIER(a) ((a) * 65793U) -#define PREMULTIPLY(x, m) (((x) * (m) + (1U << 23)) >> 24) -#endif - -#if !WEBP_NEON_OMIT_C_CODE -static void ApplyAlphaMultiply_C(uint8_t* rgba, int alpha_first, - int w, int h, int stride) { - while (h-- > 0) { - uint8_t* const rgb = rgba + (alpha_first ? 1 : 0); - const uint8_t* const alpha = rgba + (alpha_first ? 0 : 3); - int i; - for (i = 0; i < w; ++i) { - const uint32_t a = alpha[4 * i]; - if (a != 0xff) { - const uint32_t mult = MULTIPLIER(a); - rgb[4 * i + 0] = PREMULTIPLY(rgb[4 * i + 0], mult); - rgb[4 * i + 1] = PREMULTIPLY(rgb[4 * i + 1], mult); - rgb[4 * i + 2] = PREMULTIPLY(rgb[4 * i + 2], mult); - } - } - rgba += stride; - } -} -#endif // !WEBP_NEON_OMIT_C_CODE -#undef MULTIPLIER -#undef PREMULTIPLY - -// rgbA4444 - -#define MULTIPLIER(a) ((a) * 0x1111) // 0x1111 ~= (1 << 16) / 15 - -static WEBP_INLINE uint8_t dither_hi(uint8_t x) { - return (x & 0xf0) | (x >> 4); -} - -static WEBP_INLINE uint8_t dither_lo(uint8_t x) { - return (x & 0x0f) | (x << 4); -} - -static WEBP_INLINE uint8_t multiply(uint8_t x, uint32_t m) { - return (x * m) >> 16; -} - -static WEBP_INLINE void ApplyAlphaMultiply4444_C(uint8_t* rgba4444, - int w, int h, int stride, - int rg_byte_pos /* 0 or 1 */) { - while (h-- > 0) { - int i; - for (i = 0; i < w; ++i) { - const uint32_t rg = rgba4444[2 * i + rg_byte_pos]; - const uint32_t ba = rgba4444[2 * i + (rg_byte_pos ^ 1)]; - const uint8_t a = ba & 0x0f; - const uint32_t mult = MULTIPLIER(a); - const uint8_t r = multiply(dither_hi(rg), mult); - const uint8_t g = multiply(dither_lo(rg), mult); - const uint8_t b = multiply(dither_hi(ba), mult); - rgba4444[2 * i + rg_byte_pos] = (r & 0xf0) | ((g >> 4) & 0x0f); - rgba4444[2 * i + (rg_byte_pos ^ 1)] = (b & 0xf0) | a; - } - rgba4444 += stride; - } -} -#undef MULTIPLIER - -static void ApplyAlphaMultiply_16b_C(uint8_t* rgba4444, - int w, int h, int stride) { -#if (WEBP_SWAP_16BIT_CSP == 1) - ApplyAlphaMultiply4444_C(rgba4444, w, h, stride, 1); -#else - ApplyAlphaMultiply4444_C(rgba4444, w, h, stride, 0); -#endif -} - -#if !WEBP_NEON_OMIT_C_CODE -static int DispatchAlpha_C(const uint8_t* alpha, int alpha_stride, - int width, int height, - uint8_t* dst, int dst_stride) { - uint32_t alpha_mask = 0xff; - int i, j; - - for (j = 0; j < height; ++j) { - for (i = 0; i < width; ++i) { - const uint32_t alpha_value = alpha[i]; - dst[4 * i] = alpha_value; - alpha_mask &= alpha_value; - } - alpha += alpha_stride; - dst += dst_stride; - } - - return (alpha_mask != 0xff); -} - -static void DispatchAlphaToGreen_C(const uint8_t* alpha, int alpha_stride, - int width, int height, - uint32_t* dst, int dst_stride) { - int i, j; - for (j = 0; j < height; ++j) { - for (i = 0; i < width; ++i) { - dst[i] = alpha[i] << 8; // leave A/R/B channels zero'd. - } - alpha += alpha_stride; - dst += dst_stride; - } -} - -static int ExtractAlpha_C(const uint8_t* argb, int argb_stride, - int width, int height, - uint8_t* alpha, int alpha_stride) { - uint8_t alpha_mask = 0xff; - int i, j; - - for (j = 0; j < height; ++j) { - for (i = 0; i < width; ++i) { - const uint8_t alpha_value = argb[4 * i]; - alpha[i] = alpha_value; - alpha_mask &= alpha_value; - } - argb += argb_stride; - alpha += alpha_stride; - } - return (alpha_mask == 0xff); -} - -static void ExtractGreen_C(const uint32_t* argb, uint8_t* alpha, int size) { - int i; - for (i = 0; i < size; ++i) alpha[i] = argb[i] >> 8; -} -#endif // !WEBP_NEON_OMIT_C_CODE - -//------------------------------------------------------------------------------ - -static int HasAlpha8b_C(const uint8_t* src, int length) { - while (length-- > 0) if (*src++ != 0xff) return 1; - return 0; -} - -static int HasAlpha32b_C(const uint8_t* src, int length) { - int x; - for (x = 0; length-- > 0; x += 4) if (src[x] != 0xff) return 1; - return 0; -} - -//------------------------------------------------------------------------------ -// Simple channel manipulations. - -static WEBP_INLINE uint32_t MakeARGB32(int a, int r, int g, int b) { - return (((uint32_t)a << 24) | (r << 16) | (g << 8) | b); -} - -#ifdef WORDS_BIGENDIAN -static void PackARGB_C(const uint8_t* a, const uint8_t* r, const uint8_t* g, - const uint8_t* b, int len, uint32_t* out) { - int i; - for (i = 0; i < len; ++i) { - out[i] = MakeARGB32(a[4 * i], r[4 * i], g[4 * i], b[4 * i]); - } -} -#endif - -static void PackRGB_C(const uint8_t* r, const uint8_t* g, const uint8_t* b, - int len, int step, uint32_t* out) { - int i, offset = 0; - for (i = 0; i < len; ++i) { - out[i] = MakeARGB32(0xff, r[offset], g[offset], b[offset]); - offset += step; - } -} - -void (*WebPApplyAlphaMultiply)(uint8_t*, int, int, int, int); -void (*WebPApplyAlphaMultiply4444)(uint8_t*, int, int, int); -int (*WebPDispatchAlpha)(const uint8_t*, int, int, int, uint8_t*, int); -void (*WebPDispatchAlphaToGreen)(const uint8_t*, int, int, int, uint32_t*, int); -int (*WebPExtractAlpha)(const uint8_t*, int, int, int, uint8_t*, int); -void (*WebPExtractGreen)(const uint32_t* argb, uint8_t* alpha, int size); -#ifdef WORDS_BIGENDIAN -void (*WebPPackARGB)(const uint8_t* a, const uint8_t* r, const uint8_t* g, - const uint8_t* b, int, uint32_t*); -#endif -void (*WebPPackRGB)(const uint8_t* r, const uint8_t* g, const uint8_t* b, - int len, int step, uint32_t* out); - -int (*WebPHasAlpha8b)(const uint8_t* src, int length); -int (*WebPHasAlpha32b)(const uint8_t* src, int length); - -//------------------------------------------------------------------------------ -// Init function - -extern void WebPInitAlphaProcessingMIPSdspR2(void); -extern void WebPInitAlphaProcessingSSE2(void); -extern void WebPInitAlphaProcessingSSE41(void); -extern void WebPInitAlphaProcessingNEON(void); - -WEBP_DSP_INIT_FUNC(WebPInitAlphaProcessing) { - WebPMultARGBRow = WebPMultARGBRow_C; - WebPMultRow = WebPMultRow_C; - WebPApplyAlphaMultiply4444 = ApplyAlphaMultiply_16b_C; - -#ifdef WORDS_BIGENDIAN - WebPPackARGB = PackARGB_C; -#endif - WebPPackRGB = PackRGB_C; -#if !WEBP_NEON_OMIT_C_CODE - WebPApplyAlphaMultiply = ApplyAlphaMultiply_C; - WebPDispatchAlpha = DispatchAlpha_C; - WebPDispatchAlphaToGreen = DispatchAlphaToGreen_C; - WebPExtractAlpha = ExtractAlpha_C; - WebPExtractGreen = ExtractGreen_C; -#endif - - WebPHasAlpha8b = HasAlpha8b_C; - WebPHasAlpha32b = HasAlpha32b_C; - - // If defined, use CPUInfo() to overwrite some pointers with faster versions. - if (VP8GetCPUInfo != NULL) { -#if defined(WEBP_USE_SSE2) - if (VP8GetCPUInfo(kSSE2)) { - WebPInitAlphaProcessingSSE2(); -#if defined(WEBP_USE_SSE41) - if (VP8GetCPUInfo(kSSE4_1)) { - WebPInitAlphaProcessingSSE41(); - } -#endif - } -#endif -#if defined(WEBP_USE_MIPS_DSP_R2) - if (VP8GetCPUInfo(kMIPSdspR2)) { - WebPInitAlphaProcessingMIPSdspR2(); - } -#endif - } - -#if defined(WEBP_USE_NEON) - if (WEBP_NEON_OMIT_C_CODE || - (VP8GetCPUInfo != NULL && VP8GetCPUInfo(kNEON))) { - WebPInitAlphaProcessingNEON(); - } -#endif - - assert(WebPMultARGBRow != NULL); - assert(WebPMultRow != NULL); - assert(WebPApplyAlphaMultiply != NULL); - assert(WebPApplyAlphaMultiply4444 != NULL); - assert(WebPDispatchAlpha != NULL); - assert(WebPDispatchAlphaToGreen != NULL); - assert(WebPExtractAlpha != NULL); - assert(WebPExtractGreen != NULL); -#ifdef WORDS_BIGENDIAN - assert(WebPPackARGB != NULL); -#endif - assert(WebPPackRGB != NULL); - assert(WebPHasAlpha8b != NULL); - assert(WebPHasAlpha32b != NULL); -} diff --git a/Extended/libwebp/src/dsp/alpha_processing_mips_dsp_r2.c b/Extended/libwebp/src/dsp/alpha_processing_mips_dsp_r2.c deleted file mode 100644 index 0090e87..0000000 --- a/Extended/libwebp/src/dsp/alpha_processing_mips_dsp_r2.c +++ /dev/null @@ -1,228 +0,0 @@ -// Copyright 2014 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Utilities for processing transparent channel. -// -// Author(s): Branimir Vasic (branimir.vasic@imgtec.com) -// Djordje Pesut (djordje.pesut@imgtec.com) - -#include "src/dsp/dsp.h" - -#if defined(WEBP_USE_MIPS_DSP_R2) - -static int DispatchAlpha_MIPSdspR2(const uint8_t* alpha, int alpha_stride, - int width, int height, - uint8_t* dst, int dst_stride) { - uint32_t alpha_mask = 0xffffffff; - int i, j, temp0; - - for (j = 0; j < height; ++j) { - uint8_t* pdst = dst; - const uint8_t* palpha = alpha; - for (i = 0; i < (width >> 2); ++i) { - int temp1, temp2, temp3; - - __asm__ volatile ( - "ulw %[temp0], 0(%[palpha]) \n\t" - "addiu %[palpha], %[palpha], 4 \n\t" - "addiu %[pdst], %[pdst], 16 \n\t" - "srl %[temp1], %[temp0], 8 \n\t" - "srl %[temp2], %[temp0], 16 \n\t" - "srl %[temp3], %[temp0], 24 \n\t" - "and %[alpha_mask], %[alpha_mask], %[temp0] \n\t" - "sb %[temp0], -16(%[pdst]) \n\t" - "sb %[temp1], -12(%[pdst]) \n\t" - "sb %[temp2], -8(%[pdst]) \n\t" - "sb %[temp3], -4(%[pdst]) \n\t" - : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [temp2]"=&r"(temp2), - [temp3]"=&r"(temp3), [palpha]"+r"(palpha), [pdst]"+r"(pdst), - [alpha_mask]"+r"(alpha_mask) - : - : "memory" - ); - } - - for (i = 0; i < (width & 3); ++i) { - __asm__ volatile ( - "lbu %[temp0], 0(%[palpha]) \n\t" - "addiu %[palpha], %[palpha], 1 \n\t" - "sb %[temp0], 0(%[pdst]) \n\t" - "and %[alpha_mask], %[alpha_mask], %[temp0] \n\t" - "addiu %[pdst], %[pdst], 4 \n\t" - : [temp0]"=&r"(temp0), [palpha]"+r"(palpha), [pdst]"+r"(pdst), - [alpha_mask]"+r"(alpha_mask) - : - : "memory" - ); - } - alpha += alpha_stride; - dst += dst_stride; - } - - __asm__ volatile ( - "ext %[temp0], %[alpha_mask], 0, 16 \n\t" - "srl %[alpha_mask], %[alpha_mask], 16 \n\t" - "and %[alpha_mask], %[alpha_mask], %[temp0] \n\t" - "ext %[temp0], %[alpha_mask], 0, 8 \n\t" - "srl %[alpha_mask], %[alpha_mask], 8 \n\t" - "and %[alpha_mask], %[alpha_mask], %[temp0] \n\t" - : [temp0]"=&r"(temp0), [alpha_mask]"+r"(alpha_mask) - : - ); - - return (alpha_mask != 0xff); -} - -static void MultARGBRow_MIPSdspR2(uint32_t* const ptr, int width, - int inverse) { - int x; - const uint32_t c_00ffffff = 0x00ffffffu; - const uint32_t c_ff000000 = 0xff000000u; - const uint32_t c_8000000 = 0x00800000u; - const uint32_t c_8000080 = 0x00800080u; - for (x = 0; x < width; ++x) { - const uint32_t argb = ptr[x]; - if (argb < 0xff000000u) { // alpha < 255 - if (argb <= 0x00ffffffu) { // alpha == 0 - ptr[x] = 0; - } else { - int temp0, temp1, temp2, temp3, alpha; - __asm__ volatile ( - "srl %[alpha], %[argb], 24 \n\t" - "replv.qb %[temp0], %[alpha] \n\t" - "and %[temp0], %[temp0], %[c_00ffffff] \n\t" - "beqz %[inverse], 0f \n\t" - "divu $zero, %[c_ff000000], %[alpha] \n\t" - "mflo %[temp0] \n\t" - "0: \n\t" - "andi %[temp1], %[argb], 0xff \n\t" - "ext %[temp2], %[argb], 8, 8 \n\t" - "ext %[temp3], %[argb], 16, 8 \n\t" - "mul %[temp1], %[temp1], %[temp0] \n\t" - "mul %[temp2], %[temp2], %[temp0] \n\t" - "mul %[temp3], %[temp3], %[temp0] \n\t" - "precrq.ph.w %[temp1], %[temp2], %[temp1] \n\t" - "addu %[temp3], %[temp3], %[c_8000000] \n\t" - "addu %[temp1], %[temp1], %[c_8000080] \n\t" - "precrq.ph.w %[temp3], %[argb], %[temp3] \n\t" - "precrq.qb.ph %[temp1], %[temp3], %[temp1] \n\t" - : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [temp2]"=&r"(temp2), - [temp3]"=&r"(temp3), [alpha]"=&r"(alpha) - : [inverse]"r"(inverse), [c_00ffffff]"r"(c_00ffffff), - [c_8000000]"r"(c_8000000), [c_8000080]"r"(c_8000080), - [c_ff000000]"r"(c_ff000000), [argb]"r"(argb) - : "memory", "hi", "lo" - ); - ptr[x] = temp1; - } - } - } -} - -#ifdef WORDS_BIGENDIAN -static void PackARGB_MIPSdspR2(const uint8_t* a, const uint8_t* r, - const uint8_t* g, const uint8_t* b, int len, - uint32_t* out) { - int temp0, temp1, temp2, temp3, offset; - const int rest = len & 1; - const uint32_t* const loop_end = out + len - rest; - const int step = 4; - __asm__ volatile ( - "xor %[offset], %[offset], %[offset] \n\t" - "beq %[loop_end], %[out], 0f \n\t" - "2: \n\t" - "lbux %[temp0], %[offset](%[a]) \n\t" - "lbux %[temp1], %[offset](%[r]) \n\t" - "lbux %[temp2], %[offset](%[g]) \n\t" - "lbux %[temp3], %[offset](%[b]) \n\t" - "ins %[temp1], %[temp0], 16, 16 \n\t" - "ins %[temp3], %[temp2], 16, 16 \n\t" - "addiu %[out], %[out], 4 \n\t" - "precr.qb.ph %[temp0], %[temp1], %[temp3] \n\t" - "sw %[temp0], -4(%[out]) \n\t" - "addu %[offset], %[offset], %[step] \n\t" - "bne %[loop_end], %[out], 2b \n\t" - "0: \n\t" - "beq %[rest], $zero, 1f \n\t" - "lbux %[temp0], %[offset](%[a]) \n\t" - "lbux %[temp1], %[offset](%[r]) \n\t" - "lbux %[temp2], %[offset](%[g]) \n\t" - "lbux %[temp3], %[offset](%[b]) \n\t" - "ins %[temp1], %[temp0], 16, 16 \n\t" - "ins %[temp3], %[temp2], 16, 16 \n\t" - "precr.qb.ph %[temp0], %[temp1], %[temp3] \n\t" - "sw %[temp0], 0(%[out]) \n\t" - "1: \n\t" - : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [temp2]"=&r"(temp2), - [temp3]"=&r"(temp3), [offset]"=&r"(offset), [out]"+&r"(out) - : [a]"r"(a), [r]"r"(r), [g]"r"(g), [b]"r"(b), [step]"r"(step), - [loop_end]"r"(loop_end), [rest]"r"(rest) - : "memory" - ); -} -#endif // WORDS_BIGENDIAN - -static void PackRGB_MIPSdspR2(const uint8_t* r, const uint8_t* g, - const uint8_t* b, int len, int step, - uint32_t* out) { - int temp0, temp1, temp2, offset; - const int rest = len & 1; - const int a = 0xff; - const uint32_t* const loop_end = out + len - rest; - __asm__ volatile ( - "xor %[offset], %[offset], %[offset] \n\t" - "beq %[loop_end], %[out], 0f \n\t" - "2: \n\t" - "lbux %[temp0], %[offset](%[r]) \n\t" - "lbux %[temp1], %[offset](%[g]) \n\t" - "lbux %[temp2], %[offset](%[b]) \n\t" - "ins %[temp0], %[a], 16, 16 \n\t" - "ins %[temp2], %[temp1], 16, 16 \n\t" - "addiu %[out], %[out], 4 \n\t" - "precr.qb.ph %[temp0], %[temp0], %[temp2] \n\t" - "sw %[temp0], -4(%[out]) \n\t" - "addu %[offset], %[offset], %[step] \n\t" - "bne %[loop_end], %[out], 2b \n\t" - "0: \n\t" - "beq %[rest], $zero, 1f \n\t" - "lbux %[temp0], %[offset](%[r]) \n\t" - "lbux %[temp1], %[offset](%[g]) \n\t" - "lbux %[temp2], %[offset](%[b]) \n\t" - "ins %[temp0], %[a], 16, 16 \n\t" - "ins %[temp2], %[temp1], 16, 16 \n\t" - "precr.qb.ph %[temp0], %[temp0], %[temp2] \n\t" - "sw %[temp0], 0(%[out]) \n\t" - "1: \n\t" - : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [temp2]"=&r"(temp2), - [offset]"=&r"(offset), [out]"+&r"(out) - : [a]"r"(a), [r]"r"(r), [g]"r"(g), [b]"r"(b), [step]"r"(step), - [loop_end]"r"(loop_end), [rest]"r"(rest) - : "memory" - ); -} - -//------------------------------------------------------------------------------ -// Entry point - -extern void WebPInitAlphaProcessingMIPSdspR2(void); - -WEBP_TSAN_IGNORE_FUNCTION void WebPInitAlphaProcessingMIPSdspR2(void) { - WebPDispatchAlpha = DispatchAlpha_MIPSdspR2; - WebPMultARGBRow = MultARGBRow_MIPSdspR2; -#ifdef WORDS_BIGENDIAN - WebPPackARGB = PackARGB_MIPSdspR2; -#endif - WebPPackRGB = PackRGB_MIPSdspR2; -} - -#else // !WEBP_USE_MIPS_DSP_R2 - -WEBP_DSP_INIT_STUB(WebPInitAlphaProcessingMIPSdspR2) - -#endif // WEBP_USE_MIPS_DSP_R2 diff --git a/Extended/libwebp/src/dsp/alpha_processing_neon.c b/Extended/libwebp/src/dsp/alpha_processing_neon.c deleted file mode 100644 index 9d55421..0000000 --- a/Extended/libwebp/src/dsp/alpha_processing_neon.c +++ /dev/null @@ -1,191 +0,0 @@ -// Copyright 2017 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Utilities for processing transparent channel, NEON version. -// -// Author: Skal (pascal.massimino@gmail.com) - -#include "src/dsp/dsp.h" - -#if defined(WEBP_USE_NEON) - -#include "src/dsp/neon.h" - -//------------------------------------------------------------------------------ - -#define MULTIPLIER(a) ((a) * 0x8081) -#define PREMULTIPLY(x, m) (((x) * (m)) >> 23) - -#define MULTIPLY_BY_ALPHA(V, ALPHA, OTHER) do { \ - const uint8x8_t alpha = (V).val[(ALPHA)]; \ - const uint16x8_t r1 = vmull_u8((V).val[1], alpha); \ - const uint16x8_t g1 = vmull_u8((V).val[2], alpha); \ - const uint16x8_t b1 = vmull_u8((V).val[(OTHER)], alpha); \ - /* we use: v / 255 = (v + 1 + (v >> 8)) >> 8 */ \ - const uint16x8_t r2 = vsraq_n_u16(r1, r1, 8); \ - const uint16x8_t g2 = vsraq_n_u16(g1, g1, 8); \ - const uint16x8_t b2 = vsraq_n_u16(b1, b1, 8); \ - const uint16x8_t r3 = vaddq_u16(r2, kOne); \ - const uint16x8_t g3 = vaddq_u16(g2, kOne); \ - const uint16x8_t b3 = vaddq_u16(b2, kOne); \ - (V).val[1] = vshrn_n_u16(r3, 8); \ - (V).val[2] = vshrn_n_u16(g3, 8); \ - (V).val[(OTHER)] = vshrn_n_u16(b3, 8); \ -} while (0) - -static void ApplyAlphaMultiply_NEON(uint8_t* rgba, int alpha_first, - int w, int h, int stride) { - const uint16x8_t kOne = vdupq_n_u16(1u); - while (h-- > 0) { - uint32_t* const rgbx = (uint32_t*)rgba; - int i = 0; - if (alpha_first) { - for (; i + 8 <= w; i += 8) { - // load aaaa...|rrrr...|gggg...|bbbb... - uint8x8x4_t RGBX = vld4_u8((const uint8_t*)(rgbx + i)); - MULTIPLY_BY_ALPHA(RGBX, 0, 3); - vst4_u8((uint8_t*)(rgbx + i), RGBX); - } - } else { - for (; i + 8 <= w; i += 8) { - uint8x8x4_t RGBX = vld4_u8((const uint8_t*)(rgbx + i)); - MULTIPLY_BY_ALPHA(RGBX, 3, 0); - vst4_u8((uint8_t*)(rgbx + i), RGBX); - } - } - // Finish with left-overs. - for (; i < w; ++i) { - uint8_t* const rgb = rgba + (alpha_first ? 1 : 0); - const uint8_t* const alpha = rgba + (alpha_first ? 0 : 3); - const uint32_t a = alpha[4 * i]; - if (a != 0xff) { - const uint32_t mult = MULTIPLIER(a); - rgb[4 * i + 0] = PREMULTIPLY(rgb[4 * i + 0], mult); - rgb[4 * i + 1] = PREMULTIPLY(rgb[4 * i + 1], mult); - rgb[4 * i + 2] = PREMULTIPLY(rgb[4 * i + 2], mult); - } - } - rgba += stride; - } -} -#undef MULTIPLY_BY_ALPHA -#undef MULTIPLIER -#undef PREMULTIPLY - -//------------------------------------------------------------------------------ - -static int DispatchAlpha_NEON(const uint8_t* alpha, int alpha_stride, - int width, int height, - uint8_t* dst, int dst_stride) { - uint32_t alpha_mask = 0xffffffffu; - uint8x8_t mask8 = vdup_n_u8(0xff); - uint32_t tmp[2]; - int i, j; - for (j = 0; j < height; ++j) { - // We don't know if alpha is first or last in dst[] (depending on rgbA/Argb - // mode). So we must be sure dst[4*i + 8 - 1] is writable for the store. - // Hence the test with 'width - 1' instead of just 'width'. - for (i = 0; i + 8 <= width - 1; i += 8) { - uint8x8x4_t rgbX = vld4_u8((const uint8_t*)(dst + 4 * i)); - const uint8x8_t alphas = vld1_u8(alpha + i); - rgbX.val[0] = alphas; - vst4_u8((uint8_t*)(dst + 4 * i), rgbX); - mask8 = vand_u8(mask8, alphas); - } - for (; i < width; ++i) { - const uint32_t alpha_value = alpha[i]; - dst[4 * i] = alpha_value; - alpha_mask &= alpha_value; - } - alpha += alpha_stride; - dst += dst_stride; - } - vst1_u8((uint8_t*)tmp, mask8); - alpha_mask &= tmp[0]; - alpha_mask &= tmp[1]; - return (alpha_mask != 0xffffffffu); -} - -static void DispatchAlphaToGreen_NEON(const uint8_t* alpha, int alpha_stride, - int width, int height, - uint32_t* dst, int dst_stride) { - int i, j; - uint8x8x4_t greens; // leave A/R/B channels zero'd. - greens.val[0] = vdup_n_u8(0); - greens.val[2] = vdup_n_u8(0); - greens.val[3] = vdup_n_u8(0); - for (j = 0; j < height; ++j) { - for (i = 0; i + 8 <= width; i += 8) { - greens.val[1] = vld1_u8(alpha + i); - vst4_u8((uint8_t*)(dst + i), greens); - } - for (; i < width; ++i) dst[i] = alpha[i] << 8; - alpha += alpha_stride; - dst += dst_stride; - } -} - -static int ExtractAlpha_NEON(const uint8_t* argb, int argb_stride, - int width, int height, - uint8_t* alpha, int alpha_stride) { - uint32_t alpha_mask = 0xffffffffu; - uint8x8_t mask8 = vdup_n_u8(0xff); - uint32_t tmp[2]; - int i, j; - for (j = 0; j < height; ++j) { - // We don't know if alpha is first or last in dst[] (depending on rgbA/Argb - // mode). So we must be sure dst[4*i + 8 - 1] is writable for the store. - // Hence the test with 'width - 1' instead of just 'width'. - for (i = 0; i + 8 <= width - 1; i += 8) { - const uint8x8x4_t rgbX = vld4_u8((const uint8_t*)(argb + 4 * i)); - const uint8x8_t alphas = rgbX.val[0]; - vst1_u8((uint8_t*)(alpha + i), alphas); - mask8 = vand_u8(mask8, alphas); - } - for (; i < width; ++i) { - alpha[i] = argb[4 * i]; - alpha_mask &= alpha[i]; - } - argb += argb_stride; - alpha += alpha_stride; - } - vst1_u8((uint8_t*)tmp, mask8); - alpha_mask &= tmp[0]; - alpha_mask &= tmp[1]; - return (alpha_mask == 0xffffffffu); -} - -static void ExtractGreen_NEON(const uint32_t* argb, - uint8_t* alpha, int size) { - int i; - for (i = 0; i + 16 <= size; i += 16) { - const uint8x16x4_t rgbX = vld4q_u8((const uint8_t*)(argb + i)); - const uint8x16_t greens = rgbX.val[1]; - vst1q_u8(alpha + i, greens); - } - for (; i < size; ++i) alpha[i] = (argb[i] >> 8) & 0xff; -} - -//------------------------------------------------------------------------------ - -extern void WebPInitAlphaProcessingNEON(void); - -WEBP_TSAN_IGNORE_FUNCTION void WebPInitAlphaProcessingNEON(void) { - WebPApplyAlphaMultiply = ApplyAlphaMultiply_NEON; - WebPDispatchAlpha = DispatchAlpha_NEON; - WebPDispatchAlphaToGreen = DispatchAlphaToGreen_NEON; - WebPExtractAlpha = ExtractAlpha_NEON; - WebPExtractGreen = ExtractGreen_NEON; -} - -#else // !WEBP_USE_NEON - -WEBP_DSP_INIT_STUB(WebPInitAlphaProcessingNEON) - -#endif // WEBP_USE_NEON diff --git a/Extended/libwebp/src/dsp/alpha_processing_sse2.c b/Extended/libwebp/src/dsp/alpha_processing_sse2.c deleted file mode 100644 index 2871c56..0000000 --- a/Extended/libwebp/src/dsp/alpha_processing_sse2.c +++ /dev/null @@ -1,343 +0,0 @@ -// Copyright 2014 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Utilities for processing transparent channel. -// -// Author: Skal (pascal.massimino@gmail.com) - -#include "src/dsp/dsp.h" - -#if defined(WEBP_USE_SSE2) -#include - -//------------------------------------------------------------------------------ - -static int DispatchAlpha_SSE2(const uint8_t* alpha, int alpha_stride, - int width, int height, - uint8_t* dst, int dst_stride) { - // alpha_and stores an 'and' operation of all the alpha[] values. The final - // value is not 0xff if any of the alpha[] is not equal to 0xff. - uint32_t alpha_and = 0xff; - int i, j; - const __m128i zero = _mm_setzero_si128(); - const __m128i rgb_mask = _mm_set1_epi32(0xffffff00u); // to preserve RGB - const __m128i all_0xff = _mm_set_epi32(0, 0, ~0u, ~0u); - __m128i all_alphas = all_0xff; - - // We must be able to access 3 extra bytes after the last written byte - // 'dst[4 * width - 4]', because we don't know if alpha is the first or the - // last byte of the quadruplet. - const int limit = (width - 1) & ~7; - - for (j = 0; j < height; ++j) { - __m128i* out = (__m128i*)dst; - for (i = 0; i < limit; i += 8) { - // load 8 alpha bytes - const __m128i a0 = _mm_loadl_epi64((const __m128i*)&alpha[i]); - const __m128i a1 = _mm_unpacklo_epi8(a0, zero); - const __m128i a2_lo = _mm_unpacklo_epi16(a1, zero); - const __m128i a2_hi = _mm_unpackhi_epi16(a1, zero); - // load 8 dst pixels (32 bytes) - const __m128i b0_lo = _mm_loadu_si128(out + 0); - const __m128i b0_hi = _mm_loadu_si128(out + 1); - // mask dst alpha values - const __m128i b1_lo = _mm_and_si128(b0_lo, rgb_mask); - const __m128i b1_hi = _mm_and_si128(b0_hi, rgb_mask); - // combine - const __m128i b2_lo = _mm_or_si128(b1_lo, a2_lo); - const __m128i b2_hi = _mm_or_si128(b1_hi, a2_hi); - // store - _mm_storeu_si128(out + 0, b2_lo); - _mm_storeu_si128(out + 1, b2_hi); - // accumulate eight alpha 'and' in parallel - all_alphas = _mm_and_si128(all_alphas, a0); - out += 2; - } - for (; i < width; ++i) { - const uint32_t alpha_value = alpha[i]; - dst[4 * i] = alpha_value; - alpha_and &= alpha_value; - } - alpha += alpha_stride; - dst += dst_stride; - } - // Combine the eight alpha 'and' into a 8-bit mask. - alpha_and &= _mm_movemask_epi8(_mm_cmpeq_epi8(all_alphas, all_0xff)); - return (alpha_and != 0xff); -} - -static void DispatchAlphaToGreen_SSE2(const uint8_t* alpha, int alpha_stride, - int width, int height, - uint32_t* dst, int dst_stride) { - int i, j; - const __m128i zero = _mm_setzero_si128(); - const int limit = width & ~15; - for (j = 0; j < height; ++j) { - for (i = 0; i < limit; i += 16) { // process 16 alpha bytes - const __m128i a0 = _mm_loadu_si128((const __m128i*)&alpha[i]); - const __m128i a1 = _mm_unpacklo_epi8(zero, a0); // note the 'zero' first! - const __m128i b1 = _mm_unpackhi_epi8(zero, a0); - const __m128i a2_lo = _mm_unpacklo_epi16(a1, zero); - const __m128i b2_lo = _mm_unpacklo_epi16(b1, zero); - const __m128i a2_hi = _mm_unpackhi_epi16(a1, zero); - const __m128i b2_hi = _mm_unpackhi_epi16(b1, zero); - _mm_storeu_si128((__m128i*)&dst[i + 0], a2_lo); - _mm_storeu_si128((__m128i*)&dst[i + 4], a2_hi); - _mm_storeu_si128((__m128i*)&dst[i + 8], b2_lo); - _mm_storeu_si128((__m128i*)&dst[i + 12], b2_hi); - } - for (; i < width; ++i) dst[i] = alpha[i] << 8; - alpha += alpha_stride; - dst += dst_stride; - } -} - -static int ExtractAlpha_SSE2(const uint8_t* argb, int argb_stride, - int width, int height, - uint8_t* alpha, int alpha_stride) { - // alpha_and stores an 'and' operation of all the alpha[] values. The final - // value is not 0xff if any of the alpha[] is not equal to 0xff. - uint32_t alpha_and = 0xff; - int i, j; - const __m128i a_mask = _mm_set1_epi32(0xffu); // to preserve alpha - const __m128i all_0xff = _mm_set_epi32(0, 0, ~0u, ~0u); - __m128i all_alphas = all_0xff; - - // We must be able to access 3 extra bytes after the last written byte - // 'src[4 * width - 4]', because we don't know if alpha is the first or the - // last byte of the quadruplet. - const int limit = (width - 1) & ~7; - - for (j = 0; j < height; ++j) { - const __m128i* src = (const __m128i*)argb; - for (i = 0; i < limit; i += 8) { - // load 32 argb bytes - const __m128i a0 = _mm_loadu_si128(src + 0); - const __m128i a1 = _mm_loadu_si128(src + 1); - const __m128i b0 = _mm_and_si128(a0, a_mask); - const __m128i b1 = _mm_and_si128(a1, a_mask); - const __m128i c0 = _mm_packs_epi32(b0, b1); - const __m128i d0 = _mm_packus_epi16(c0, c0); - // store - _mm_storel_epi64((__m128i*)&alpha[i], d0); - // accumulate eight alpha 'and' in parallel - all_alphas = _mm_and_si128(all_alphas, d0); - src += 2; - } - for (; i < width; ++i) { - const uint32_t alpha_value = argb[4 * i]; - alpha[i] = alpha_value; - alpha_and &= alpha_value; - } - argb += argb_stride; - alpha += alpha_stride; - } - // Combine the eight alpha 'and' into a 8-bit mask. - alpha_and &= _mm_movemask_epi8(_mm_cmpeq_epi8(all_alphas, all_0xff)); - return (alpha_and == 0xff); -} - -//------------------------------------------------------------------------------ -// Non-dither premultiplied modes - -#define MULTIPLIER(a) ((a) * 0x8081) -#define PREMULTIPLY(x, m) (((x) * (m)) >> 23) - -// We can't use a 'const int' for the SHUFFLE value, because it has to be an -// immediate in the _mm_shufflexx_epi16() instruction. We really need a macro. -// We use: v / 255 = (v * 0x8081) >> 23, where v = alpha * {r,g,b} is a 16bit -// value. -#define APPLY_ALPHA(RGBX, SHUFFLE) do { \ - const __m128i argb0 = _mm_loadu_si128((const __m128i*)&(RGBX)); \ - const __m128i argb1_lo = _mm_unpacklo_epi8(argb0, zero); \ - const __m128i argb1_hi = _mm_unpackhi_epi8(argb0, zero); \ - const __m128i alpha0_lo = _mm_or_si128(argb1_lo, kMask); \ - const __m128i alpha0_hi = _mm_or_si128(argb1_hi, kMask); \ - const __m128i alpha1_lo = _mm_shufflelo_epi16(alpha0_lo, SHUFFLE); \ - const __m128i alpha1_hi = _mm_shufflelo_epi16(alpha0_hi, SHUFFLE); \ - const __m128i alpha2_lo = _mm_shufflehi_epi16(alpha1_lo, SHUFFLE); \ - const __m128i alpha2_hi = _mm_shufflehi_epi16(alpha1_hi, SHUFFLE); \ - /* alpha2 = [ff a0 a0 a0][ff a1 a1 a1] */ \ - const __m128i A0_lo = _mm_mullo_epi16(alpha2_lo, argb1_lo); \ - const __m128i A0_hi = _mm_mullo_epi16(alpha2_hi, argb1_hi); \ - const __m128i A1_lo = _mm_mulhi_epu16(A0_lo, kMult); \ - const __m128i A1_hi = _mm_mulhi_epu16(A0_hi, kMult); \ - const __m128i A2_lo = _mm_srli_epi16(A1_lo, 7); \ - const __m128i A2_hi = _mm_srli_epi16(A1_hi, 7); \ - const __m128i A3 = _mm_packus_epi16(A2_lo, A2_hi); \ - _mm_storeu_si128((__m128i*)&(RGBX), A3); \ -} while (0) - -static void ApplyAlphaMultiply_SSE2(uint8_t* rgba, int alpha_first, - int w, int h, int stride) { - const __m128i zero = _mm_setzero_si128(); - const __m128i kMult = _mm_set1_epi16(0x8081u); - const __m128i kMask = _mm_set_epi16(0, 0xff, 0xff, 0, 0, 0xff, 0xff, 0); - const int kSpan = 4; - while (h-- > 0) { - uint32_t* const rgbx = (uint32_t*)rgba; - int i; - if (!alpha_first) { - for (i = 0; i + kSpan <= w; i += kSpan) { - APPLY_ALPHA(rgbx[i], _MM_SHUFFLE(2, 3, 3, 3)); - } - } else { - for (i = 0; i + kSpan <= w; i += kSpan) { - APPLY_ALPHA(rgbx[i], _MM_SHUFFLE(0, 0, 0, 1)); - } - } - // Finish with left-overs. - for (; i < w; ++i) { - uint8_t* const rgb = rgba + (alpha_first ? 1 : 0); - const uint8_t* const alpha = rgba + (alpha_first ? 0 : 3); - const uint32_t a = alpha[4 * i]; - if (a != 0xff) { - const uint32_t mult = MULTIPLIER(a); - rgb[4 * i + 0] = PREMULTIPLY(rgb[4 * i + 0], mult); - rgb[4 * i + 1] = PREMULTIPLY(rgb[4 * i + 1], mult); - rgb[4 * i + 2] = PREMULTIPLY(rgb[4 * i + 2], mult); - } - } - rgba += stride; - } -} -#undef MULTIPLIER -#undef PREMULTIPLY - -//------------------------------------------------------------------------------ -// Alpha detection - -static int HasAlpha8b_SSE2(const uint8_t* src, int length) { - const __m128i all_0xff = _mm_set1_epi8((char)0xff); - int i = 0; - for (; i + 16 <= length; i += 16) { - const __m128i v = _mm_loadu_si128((const __m128i*)(src + i)); - const __m128i bits = _mm_cmpeq_epi8(v, all_0xff); - const int mask = _mm_movemask_epi8(bits); - if (mask != 0xffff) return 1; - } - for (; i < length; ++i) if (src[i] != 0xff) return 1; - return 0; -} - -static int HasAlpha32b_SSE2(const uint8_t* src, int length) { - const __m128i alpha_mask = _mm_set1_epi32(0xff); - const __m128i all_0xff = _mm_set1_epi8((char)0xff); - int i = 0; - // We don't know if we can access the last 3 bytes after the last alpha - // value 'src[4 * length - 4]' (because we don't know if alpha is the first - // or the last byte of the quadruplet). Hence the '-3' protection below. - length = length * 4 - 3; // size in bytes - for (; i + 64 <= length; i += 64) { - const __m128i a0 = _mm_loadu_si128((const __m128i*)(src + i + 0)); - const __m128i a1 = _mm_loadu_si128((const __m128i*)(src + i + 16)); - const __m128i a2 = _mm_loadu_si128((const __m128i*)(src + i + 32)); - const __m128i a3 = _mm_loadu_si128((const __m128i*)(src + i + 48)); - const __m128i b0 = _mm_and_si128(a0, alpha_mask); - const __m128i b1 = _mm_and_si128(a1, alpha_mask); - const __m128i b2 = _mm_and_si128(a2, alpha_mask); - const __m128i b3 = _mm_and_si128(a3, alpha_mask); - const __m128i c0 = _mm_packs_epi32(b0, b1); - const __m128i c1 = _mm_packs_epi32(b2, b3); - const __m128i d = _mm_packus_epi16(c0, c1); - const __m128i bits = _mm_cmpeq_epi8(d, all_0xff); - const int mask = _mm_movemask_epi8(bits); - if (mask != 0xffff) return 1; - } - for (; i + 32 <= length; i += 32) { - const __m128i a0 = _mm_loadu_si128((const __m128i*)(src + i + 0)); - const __m128i a1 = _mm_loadu_si128((const __m128i*)(src + i + 16)); - const __m128i b0 = _mm_and_si128(a0, alpha_mask); - const __m128i b1 = _mm_and_si128(a1, alpha_mask); - const __m128i c = _mm_packs_epi32(b0, b1); - const __m128i d = _mm_packus_epi16(c, c); - const __m128i bits = _mm_cmpeq_epi8(d, all_0xff); - const int mask = _mm_movemask_epi8(bits); - if (mask != 0xffff) return 1; - } - for (; i <= length; i += 4) if (src[i] != 0xff) return 1; - return 0; -} - -// ----------------------------------------------------------------------------- -// Apply alpha value to rows - -static void MultARGBRow_SSE2(uint32_t* const ptr, int width, int inverse) { - int x = 0; - if (!inverse) { - const int kSpan = 2; - const __m128i zero = _mm_setzero_si128(); - const __m128i k128 = _mm_set1_epi16(128); - const __m128i kMult = _mm_set1_epi16(0x0101); - const __m128i kMask = _mm_set_epi16(0, 0xff, 0, 0, 0, 0xff, 0, 0); - for (x = 0; x + kSpan <= width; x += kSpan) { - // To compute 'result = (int)(a * x / 255. + .5)', we use: - // tmp = a * v + 128, result = (tmp * 0x0101u) >> 16 - const __m128i A0 = _mm_loadl_epi64((const __m128i*)&ptr[x]); - const __m128i A1 = _mm_unpacklo_epi8(A0, zero); - const __m128i A2 = _mm_or_si128(A1, kMask); - const __m128i A3 = _mm_shufflelo_epi16(A2, _MM_SHUFFLE(2, 3, 3, 3)); - const __m128i A4 = _mm_shufflehi_epi16(A3, _MM_SHUFFLE(2, 3, 3, 3)); - // here, A4 = [ff a0 a0 a0][ff a1 a1 a1] - const __m128i A5 = _mm_mullo_epi16(A4, A1); - const __m128i A6 = _mm_add_epi16(A5, k128); - const __m128i A7 = _mm_mulhi_epu16(A6, kMult); - const __m128i A10 = _mm_packus_epi16(A7, zero); - _mm_storel_epi64((__m128i*)&ptr[x], A10); - } - } - width -= x; - if (width > 0) WebPMultARGBRow_C(ptr + x, width, inverse); -} - -static void MultRow_SSE2(uint8_t* const ptr, const uint8_t* const alpha, - int width, int inverse) { - int x = 0; - if (!inverse) { - const __m128i zero = _mm_setzero_si128(); - const __m128i k128 = _mm_set1_epi16(128); - const __m128i kMult = _mm_set1_epi16(0x0101); - for (x = 0; x + 8 <= width; x += 8) { - const __m128i v0 = _mm_loadl_epi64((__m128i*)&ptr[x]); - const __m128i a0 = _mm_loadl_epi64((const __m128i*)&alpha[x]); - const __m128i v1 = _mm_unpacklo_epi8(v0, zero); - const __m128i a1 = _mm_unpacklo_epi8(a0, zero); - const __m128i v2 = _mm_mullo_epi16(v1, a1); - const __m128i v3 = _mm_add_epi16(v2, k128); - const __m128i v4 = _mm_mulhi_epu16(v3, kMult); - const __m128i v5 = _mm_packus_epi16(v4, zero); - _mm_storel_epi64((__m128i*)&ptr[x], v5); - } - } - width -= x; - if (width > 0) WebPMultRow_C(ptr + x, alpha + x, width, inverse); -} - -//------------------------------------------------------------------------------ -// Entry point - -extern void WebPInitAlphaProcessingSSE2(void); - -WEBP_TSAN_IGNORE_FUNCTION void WebPInitAlphaProcessingSSE2(void) { - WebPMultARGBRow = MultARGBRow_SSE2; - WebPMultRow = MultRow_SSE2; - WebPApplyAlphaMultiply = ApplyAlphaMultiply_SSE2; - WebPDispatchAlpha = DispatchAlpha_SSE2; - WebPDispatchAlphaToGreen = DispatchAlphaToGreen_SSE2; - WebPExtractAlpha = ExtractAlpha_SSE2; - - WebPHasAlpha8b = HasAlpha8b_SSE2; - WebPHasAlpha32b = HasAlpha32b_SSE2; -} - -#else // !WEBP_USE_SSE2 - -WEBP_DSP_INIT_STUB(WebPInitAlphaProcessingSSE2) - -#endif // WEBP_USE_SSE2 diff --git a/Extended/libwebp/src/dsp/alpha_processing_sse41.c b/Extended/libwebp/src/dsp/alpha_processing_sse41.c deleted file mode 100644 index 56040f9..0000000 --- a/Extended/libwebp/src/dsp/alpha_processing_sse41.c +++ /dev/null @@ -1,92 +0,0 @@ -// Copyright 2015 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Utilities for processing transparent channel, SSE4.1 variant. -// -// Author: Skal (pascal.massimino@gmail.com) - -#include "src/dsp/dsp.h" - -#if defined(WEBP_USE_SSE41) - -#include - -//------------------------------------------------------------------------------ - -static int ExtractAlpha_SSE41(const uint8_t* argb, int argb_stride, - int width, int height, - uint8_t* alpha, int alpha_stride) { - // alpha_and stores an 'and' operation of all the alpha[] values. The final - // value is not 0xff if any of the alpha[] is not equal to 0xff. - uint32_t alpha_and = 0xff; - int i, j; - const __m128i all_0xff = _mm_set1_epi32(~0u); - __m128i all_alphas = all_0xff; - - // We must be able to access 3 extra bytes after the last written byte - // 'src[4 * width - 4]', because we don't know if alpha is the first or the - // last byte of the quadruplet. - const int limit = (width - 1) & ~15; - const __m128i kCstAlpha0 = _mm_set_epi8(-1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 12, 8, 4, 0); - const __m128i kCstAlpha1 = _mm_set_epi8(-1, -1, -1, -1, -1, -1, -1, -1, - 12, 8, 4, 0, -1, -1, -1, -1); - const __m128i kCstAlpha2 = _mm_set_epi8(-1, -1, -1, -1, 12, 8, 4, 0, - -1, -1, -1, -1, -1, -1, -1, -1); - const __m128i kCstAlpha3 = _mm_set_epi8(12, 8, 4, 0, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1); - for (j = 0; j < height; ++j) { - const __m128i* src = (const __m128i*)argb; - for (i = 0; i < limit; i += 16) { - // load 64 argb bytes - const __m128i a0 = _mm_loadu_si128(src + 0); - const __m128i a1 = _mm_loadu_si128(src + 1); - const __m128i a2 = _mm_loadu_si128(src + 2); - const __m128i a3 = _mm_loadu_si128(src + 3); - const __m128i b0 = _mm_shuffle_epi8(a0, kCstAlpha0); - const __m128i b1 = _mm_shuffle_epi8(a1, kCstAlpha1); - const __m128i b2 = _mm_shuffle_epi8(a2, kCstAlpha2); - const __m128i b3 = _mm_shuffle_epi8(a3, kCstAlpha3); - const __m128i c0 = _mm_or_si128(b0, b1); - const __m128i c1 = _mm_or_si128(b2, b3); - const __m128i d0 = _mm_or_si128(c0, c1); - // store - _mm_storeu_si128((__m128i*)&alpha[i], d0); - // accumulate sixteen alpha 'and' in parallel - all_alphas = _mm_and_si128(all_alphas, d0); - src += 4; - } - for (; i < width; ++i) { - const uint32_t alpha_value = argb[4 * i]; - alpha[i] = alpha_value; - alpha_and &= alpha_value; - } - argb += argb_stride; - alpha += alpha_stride; - } - // Combine the sixteen alpha 'and' into an 8-bit mask. - alpha_and |= 0xff00u; // pretend the upper bits [8..15] were tested ok. - alpha_and &= _mm_movemask_epi8(_mm_cmpeq_epi8(all_alphas, all_0xff)); - return (alpha_and == 0xffffu); -} - -//------------------------------------------------------------------------------ -// Entry point - -extern void WebPInitAlphaProcessingSSE41(void); - -WEBP_TSAN_IGNORE_FUNCTION void WebPInitAlphaProcessingSSE41(void) { - WebPExtractAlpha = ExtractAlpha_SSE41; -} - -#else // !WEBP_USE_SSE41 - -WEBP_DSP_INIT_STUB(WebPInitAlphaProcessingSSE41) - -#endif // WEBP_USE_SSE41 diff --git a/Extended/libwebp/src/dsp/common_sse2.h b/Extended/libwebp/src/dsp/common_sse2.h deleted file mode 100644 index e9f1ebf..0000000 --- a/Extended/libwebp/src/dsp/common_sse2.h +++ /dev/null @@ -1,194 +0,0 @@ -// Copyright 2016 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// SSE2 code common to several files. -// -// Author: Vincent Rabaud (vrabaud@google.com) - -#ifndef WEBP_DSP_COMMON_SSE2_H_ -#define WEBP_DSP_COMMON_SSE2_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -#if defined(WEBP_USE_SSE2) - -#include - -//------------------------------------------------------------------------------ -// Quite useful macro for debugging. Left here for convenience. - -#if 0 -#include -static WEBP_INLINE void PrintReg(const __m128i r, const char* const name, - int size) { - int n; - union { - __m128i r; - uint8_t i8[16]; - uint16_t i16[8]; - uint32_t i32[4]; - uint64_t i64[2]; - } tmp; - tmp.r = r; - fprintf(stderr, "%s\t: ", name); - if (size == 8) { - for (n = 0; n < 16; ++n) fprintf(stderr, "%.2x ", tmp.i8[n]); - } else if (size == 16) { - for (n = 0; n < 8; ++n) fprintf(stderr, "%.4x ", tmp.i16[n]); - } else if (size == 32) { - for (n = 0; n < 4; ++n) fprintf(stderr, "%.8x ", tmp.i32[n]); - } else { - for (n = 0; n < 2; ++n) fprintf(stderr, "%.16lx ", tmp.i64[n]); - } - fprintf(stderr, "\n"); -} -#endif - -//------------------------------------------------------------------------------ -// Math functions. - -// Return the sum of all the 8b in the register. -static WEBP_INLINE int VP8HorizontalAdd8b(const __m128i* const a) { - const __m128i zero = _mm_setzero_si128(); - const __m128i sad8x2 = _mm_sad_epu8(*a, zero); - // sum the two sads: sad8x2[0:1] + sad8x2[8:9] - const __m128i sum = _mm_add_epi32(sad8x2, _mm_shuffle_epi32(sad8x2, 2)); - return _mm_cvtsi128_si32(sum); -} - -// Transpose two 4x4 16b matrices horizontally stored in registers. -static WEBP_INLINE void VP8Transpose_2_4x4_16b( - const __m128i* const in0, const __m128i* const in1, - const __m128i* const in2, const __m128i* const in3, __m128i* const out0, - __m128i* const out1, __m128i* const out2, __m128i* const out3) { - // Transpose the two 4x4. - // a00 a01 a02 a03 b00 b01 b02 b03 - // a10 a11 a12 a13 b10 b11 b12 b13 - // a20 a21 a22 a23 b20 b21 b22 b23 - // a30 a31 a32 a33 b30 b31 b32 b33 - const __m128i transpose0_0 = _mm_unpacklo_epi16(*in0, *in1); - const __m128i transpose0_1 = _mm_unpacklo_epi16(*in2, *in3); - const __m128i transpose0_2 = _mm_unpackhi_epi16(*in0, *in1); - const __m128i transpose0_3 = _mm_unpackhi_epi16(*in2, *in3); - // a00 a10 a01 a11 a02 a12 a03 a13 - // a20 a30 a21 a31 a22 a32 a23 a33 - // b00 b10 b01 b11 b02 b12 b03 b13 - // b20 b30 b21 b31 b22 b32 b23 b33 - const __m128i transpose1_0 = _mm_unpacklo_epi32(transpose0_0, transpose0_1); - const __m128i transpose1_1 = _mm_unpacklo_epi32(transpose0_2, transpose0_3); - const __m128i transpose1_2 = _mm_unpackhi_epi32(transpose0_0, transpose0_1); - const __m128i transpose1_3 = _mm_unpackhi_epi32(transpose0_2, transpose0_3); - // a00 a10 a20 a30 a01 a11 a21 a31 - // b00 b10 b20 b30 b01 b11 b21 b31 - // a02 a12 a22 a32 a03 a13 a23 a33 - // b02 b12 a22 b32 b03 b13 b23 b33 - *out0 = _mm_unpacklo_epi64(transpose1_0, transpose1_1); - *out1 = _mm_unpackhi_epi64(transpose1_0, transpose1_1); - *out2 = _mm_unpacklo_epi64(transpose1_2, transpose1_3); - *out3 = _mm_unpackhi_epi64(transpose1_2, transpose1_3); - // a00 a10 a20 a30 b00 b10 b20 b30 - // a01 a11 a21 a31 b01 b11 b21 b31 - // a02 a12 a22 a32 b02 b12 b22 b32 - // a03 a13 a23 a33 b03 b13 b23 b33 -} - -//------------------------------------------------------------------------------ -// Channel mixing. - -// Function used several times in VP8PlanarTo24b. -// It samples the in buffer as follows: one every two unsigned char is stored -// at the beginning of the buffer, while the other half is stored at the end. -#define VP8PlanarTo24bHelper(IN, OUT) \ - do { \ - const __m128i v_mask = _mm_set1_epi16(0x00ff); \ - /* Take one every two upper 8b values.*/ \ - (OUT##0) = _mm_packus_epi16(_mm_and_si128((IN##0), v_mask), \ - _mm_and_si128((IN##1), v_mask)); \ - (OUT##1) = _mm_packus_epi16(_mm_and_si128((IN##2), v_mask), \ - _mm_and_si128((IN##3), v_mask)); \ - (OUT##2) = _mm_packus_epi16(_mm_and_si128((IN##4), v_mask), \ - _mm_and_si128((IN##5), v_mask)); \ - /* Take one every two lower 8b values.*/ \ - (OUT##3) = _mm_packus_epi16(_mm_srli_epi16((IN##0), 8), \ - _mm_srli_epi16((IN##1), 8)); \ - (OUT##4) = _mm_packus_epi16(_mm_srli_epi16((IN##2), 8), \ - _mm_srli_epi16((IN##3), 8)); \ - (OUT##5) = _mm_packus_epi16(_mm_srli_epi16((IN##4), 8), \ - _mm_srli_epi16((IN##5), 8)); \ - } while (0) - -// Pack the planar buffers -// rrrr... rrrr... gggg... gggg... bbbb... bbbb.... -// triplet by triplet in the output buffer rgb as rgbrgbrgbrgb ... -static WEBP_INLINE void VP8PlanarTo24b_SSE2( - __m128i* const in0, __m128i* const in1, __m128i* const in2, - __m128i* const in3, __m128i* const in4, __m128i* const in5) { - // The input is 6 registers of sixteen 8b but for the sake of explanation, - // let's take 6 registers of four 8b values. - // To pack, we will keep taking one every two 8b integer and move it - // around as follows: - // Input: - // r0r1r2r3 | r4r5r6r7 | g0g1g2g3 | g4g5g6g7 | b0b1b2b3 | b4b5b6b7 - // Split the 6 registers in two sets of 3 registers: the first set as the even - // 8b bytes, the second the odd ones: - // r0r2r4r6 | g0g2g4g6 | b0b2b4b6 | r1r3r5r7 | g1g3g5g7 | b1b3b5b7 - // Repeat the same permutations twice more: - // r0r4g0g4 | b0b4r1r5 | g1g5b1b5 | r2r6g2g6 | b2b6r3r7 | g3g7b3b7 - // r0g0b0r1 | g1b1r2g2 | b2r3g3b3 | r4g4b4r5 | g5b5r6g6 | b6r7g7b7 - __m128i tmp0, tmp1, tmp2, tmp3, tmp4, tmp5; - VP8PlanarTo24bHelper(*in, tmp); - VP8PlanarTo24bHelper(tmp, *in); - VP8PlanarTo24bHelper(*in, tmp); - // We need to do it two more times than the example as we have sixteen bytes. - { - __m128i out0, out1, out2, out3, out4, out5; - VP8PlanarTo24bHelper(tmp, out); - VP8PlanarTo24bHelper(out, *in); - } -} - -#undef VP8PlanarTo24bHelper - -// Convert four packed four-channel buffers like argbargbargbargb... into the -// split channels aaaaa ... rrrr ... gggg .... bbbbb ...... -static WEBP_INLINE void VP8L32bToPlanar_SSE2(__m128i* const in0, - __m128i* const in1, - __m128i* const in2, - __m128i* const in3) { - // Column-wise transpose. - const __m128i A0 = _mm_unpacklo_epi8(*in0, *in1); - const __m128i A1 = _mm_unpackhi_epi8(*in0, *in1); - const __m128i A2 = _mm_unpacklo_epi8(*in2, *in3); - const __m128i A3 = _mm_unpackhi_epi8(*in2, *in3); - const __m128i B0 = _mm_unpacklo_epi8(A0, A1); - const __m128i B1 = _mm_unpackhi_epi8(A0, A1); - const __m128i B2 = _mm_unpacklo_epi8(A2, A3); - const __m128i B3 = _mm_unpackhi_epi8(A2, A3); - // C0 = g7 g6 ... g1 g0 | b7 b6 ... b1 b0 - // C1 = a7 a6 ... a1 a0 | r7 r6 ... r1 r0 - const __m128i C0 = _mm_unpacklo_epi8(B0, B1); - const __m128i C1 = _mm_unpackhi_epi8(B0, B1); - const __m128i C2 = _mm_unpacklo_epi8(B2, B3); - const __m128i C3 = _mm_unpackhi_epi8(B2, B3); - // Gather the channels. - *in0 = _mm_unpackhi_epi64(C1, C3); - *in1 = _mm_unpacklo_epi64(C1, C3); - *in2 = _mm_unpackhi_epi64(C0, C2); - *in3 = _mm_unpacklo_epi64(C0, C2); -} - -#endif // WEBP_USE_SSE2 - -#ifdef __cplusplus -} // extern "C" -#endif - -#endif // WEBP_DSP_COMMON_SSE2_H_ diff --git a/Extended/libwebp/src/dsp/common_sse41.h b/Extended/libwebp/src/dsp/common_sse41.h deleted file mode 100644 index 2f173c0..0000000 --- a/Extended/libwebp/src/dsp/common_sse41.h +++ /dev/null @@ -1,132 +0,0 @@ -// Copyright 2016 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// SSE4 code common to several files. -// -// Author: Vincent Rabaud (vrabaud@google.com) - -#ifndef WEBP_DSP_COMMON_SSE41_H_ -#define WEBP_DSP_COMMON_SSE41_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -#if defined(WEBP_USE_SSE41) -#include - -//------------------------------------------------------------------------------ -// Channel mixing. -// Shuffles the input buffer as A0 0 0 A1 0 0 A2 ... -#define WEBP_SSE41_SHUFF(OUT, IN0, IN1) \ - OUT##0 = _mm_shuffle_epi8(*IN0, shuff0); \ - OUT##1 = _mm_shuffle_epi8(*IN0, shuff1); \ - OUT##2 = _mm_shuffle_epi8(*IN0, shuff2); \ - OUT##3 = _mm_shuffle_epi8(*IN1, shuff0); \ - OUT##4 = _mm_shuffle_epi8(*IN1, shuff1); \ - OUT##5 = _mm_shuffle_epi8(*IN1, shuff2); - -// Pack the planar buffers -// rrrr... rrrr... gggg... gggg... bbbb... bbbb.... -// triplet by triplet in the output buffer rgb as rgbrgbrgbrgb ... -static WEBP_INLINE void VP8PlanarTo24b_SSE41( - __m128i* const in0, __m128i* const in1, __m128i* const in2, - __m128i* const in3, __m128i* const in4, __m128i* const in5) { - __m128i R0, R1, R2, R3, R4, R5; - __m128i G0, G1, G2, G3, G4, G5; - __m128i B0, B1, B2, B3, B4, B5; - - // Process R. - { - const __m128i shuff0 = _mm_set_epi8( - 5, -1, -1, 4, -1, -1, 3, -1, -1, 2, -1, -1, 1, -1, -1, 0); - const __m128i shuff1 = _mm_set_epi8( - -1, 10, -1, -1, 9, -1, -1, 8, -1, -1, 7, -1, -1, 6, -1, -1); - const __m128i shuff2 = _mm_set_epi8( - -1, -1, 15, -1, -1, 14, -1, -1, 13, -1, -1, 12, -1, -1, 11, -1); - WEBP_SSE41_SHUFF(R, in0, in1) - } - - // Process G. - { - // Same as before, just shifted to the left by one and including the right - // padding. - const __m128i shuff0 = _mm_set_epi8( - -1, -1, 4, -1, -1, 3, -1, -1, 2, -1, -1, 1, -1, -1, 0, -1); - const __m128i shuff1 = _mm_set_epi8( - 10, -1, -1, 9, -1, -1, 8, -1, -1, 7, -1, -1, 6, -1, -1, 5); - const __m128i shuff2 = _mm_set_epi8( - -1, 15, -1, -1, 14, -1, -1, 13, -1, -1, 12, -1, -1, 11, -1, -1); - WEBP_SSE41_SHUFF(G, in2, in3) - } - - // Process B. - { - const __m128i shuff0 = _mm_set_epi8( - -1, 4, -1, -1, 3, -1, -1, 2, -1, -1, 1, -1, -1, 0, -1, -1); - const __m128i shuff1 = _mm_set_epi8( - -1, -1, 9, -1, -1, 8, -1, -1, 7, -1, -1, 6, -1, -1, 5, -1); - const __m128i shuff2 = _mm_set_epi8( - 15, -1, -1, 14, -1, -1, 13, -1, -1, 12, -1, -1, 11, -1, -1, 10); - WEBP_SSE41_SHUFF(B, in4, in5) - } - - // OR the different channels. - { - const __m128i RG0 = _mm_or_si128(R0, G0); - const __m128i RG1 = _mm_or_si128(R1, G1); - const __m128i RG2 = _mm_or_si128(R2, G2); - const __m128i RG3 = _mm_or_si128(R3, G3); - const __m128i RG4 = _mm_or_si128(R4, G4); - const __m128i RG5 = _mm_or_si128(R5, G5); - *in0 = _mm_or_si128(RG0, B0); - *in1 = _mm_or_si128(RG1, B1); - *in2 = _mm_or_si128(RG2, B2); - *in3 = _mm_or_si128(RG3, B3); - *in4 = _mm_or_si128(RG4, B4); - *in5 = _mm_or_si128(RG5, B5); - } -} - -#undef WEBP_SSE41_SHUFF - -// Convert four packed four-channel buffers like argbargbargbargb... into the -// split channels aaaaa ... rrrr ... gggg .... bbbbb ...... -static WEBP_INLINE void VP8L32bToPlanar_SSE41(__m128i* const in0, - __m128i* const in1, - __m128i* const in2, - __m128i* const in3) { - // aaaarrrrggggbbbb - const __m128i shuff0 = - _mm_set_epi8(15, 11, 7, 3, 14, 10, 6, 2, 13, 9, 5, 1, 12, 8, 4, 0); - const __m128i A0 = _mm_shuffle_epi8(*in0, shuff0); - const __m128i A1 = _mm_shuffle_epi8(*in1, shuff0); - const __m128i A2 = _mm_shuffle_epi8(*in2, shuff0); - const __m128i A3 = _mm_shuffle_epi8(*in3, shuff0); - // A0A1R0R1 - // G0G1B0B1 - // A2A3R2R3 - // G0G1B0B1 - const __m128i B0 = _mm_unpacklo_epi32(A0, A1); - const __m128i B1 = _mm_unpackhi_epi32(A0, A1); - const __m128i B2 = _mm_unpacklo_epi32(A2, A3); - const __m128i B3 = _mm_unpackhi_epi32(A2, A3); - *in3 = _mm_unpacklo_epi64(B0, B2); - *in2 = _mm_unpackhi_epi64(B0, B2); - *in1 = _mm_unpacklo_epi64(B1, B3); - *in0 = _mm_unpackhi_epi64(B1, B3); -} - -#endif // WEBP_USE_SSE41 - -#ifdef __cplusplus -} // extern "C" -#endif - -#endif // WEBP_DSP_COMMON_SSE41_H_ diff --git a/Extended/libwebp/src/dsp/cost.c b/Extended/libwebp/src/dsp/cost.c deleted file mode 100644 index cc681cd..0000000 --- a/Extended/libwebp/src/dsp/cost.c +++ /dev/null @@ -1,411 +0,0 @@ -// Copyright 2014 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Author: Skal (pascal.massimino@gmail.com) - -#include "src/dsp/dsp.h" -#include "src/enc/cost_enc.h" - -//------------------------------------------------------------------------------ -// Boolean-cost cost table - -const uint16_t VP8EntropyCost[256] = { - 1792, 1792, 1792, 1536, 1536, 1408, 1366, 1280, 1280, 1216, - 1178, 1152, 1110, 1076, 1061, 1024, 1024, 992, 968, 951, - 939, 911, 896, 878, 871, 854, 838, 820, 811, 794, - 786, 768, 768, 752, 740, 732, 720, 709, 704, 690, - 683, 672, 666, 655, 647, 640, 631, 622, 615, 607, - 598, 592, 586, 576, 572, 564, 559, 555, 547, 541, - 534, 528, 522, 512, 512, 504, 500, 494, 488, 483, - 477, 473, 467, 461, 458, 452, 448, 443, 438, 434, - 427, 424, 419, 415, 410, 406, 403, 399, 394, 390, - 384, 384, 377, 374, 370, 366, 362, 359, 355, 351, - 347, 342, 342, 336, 333, 330, 326, 323, 320, 316, - 312, 308, 305, 302, 299, 296, 293, 288, 287, 283, - 280, 277, 274, 272, 268, 266, 262, 256, 256, 256, - 251, 248, 245, 242, 240, 237, 234, 232, 228, 226, - 223, 221, 218, 216, 214, 211, 208, 205, 203, 201, - 198, 196, 192, 191, 188, 187, 183, 181, 179, 176, - 175, 171, 171, 168, 165, 163, 160, 159, 156, 154, - 152, 150, 148, 146, 144, 142, 139, 138, 135, 133, - 131, 128, 128, 125, 123, 121, 119, 117, 115, 113, - 111, 110, 107, 105, 103, 102, 100, 98, 96, 94, - 92, 91, 89, 86, 86, 83, 82, 80, 77, 76, - 74, 73, 71, 69, 67, 66, 64, 63, 61, 59, - 57, 55, 54, 52, 51, 49, 47, 46, 44, 43, - 41, 40, 38, 36, 35, 33, 32, 30, 29, 27, - 25, 24, 22, 21, 19, 18, 16, 15, 13, 12, - 10, 9, 7, 6, 4, 3 -}; - -//------------------------------------------------------------------------------ -// Level cost tables - -// fixed costs for coding levels, deduce from the coding tree. -// This is only the part that doesn't depend on the probability state. -const uint16_t VP8LevelFixedCosts[MAX_LEVEL + 1] = { - 0, 256, 256, 256, 256, 432, 618, 630, - 731, 640, 640, 828, 901, 948, 1021, 1101, - 1174, 1221, 1294, 1042, 1085, 1115, 1158, 1202, - 1245, 1275, 1318, 1337, 1380, 1410, 1453, 1497, - 1540, 1570, 1613, 1280, 1295, 1317, 1332, 1358, - 1373, 1395, 1410, 1454, 1469, 1491, 1506, 1532, - 1547, 1569, 1584, 1601, 1616, 1638, 1653, 1679, - 1694, 1716, 1731, 1775, 1790, 1812, 1827, 1853, - 1868, 1890, 1905, 1727, 1733, 1742, 1748, 1759, - 1765, 1774, 1780, 1800, 1806, 1815, 1821, 1832, - 1838, 1847, 1853, 1878, 1884, 1893, 1899, 1910, - 1916, 1925, 1931, 1951, 1957, 1966, 1972, 1983, - 1989, 1998, 2004, 2027, 2033, 2042, 2048, 2059, - 2065, 2074, 2080, 2100, 2106, 2115, 2121, 2132, - 2138, 2147, 2153, 2178, 2184, 2193, 2199, 2210, - 2216, 2225, 2231, 2251, 2257, 2266, 2272, 2283, - 2289, 2298, 2304, 2168, 2174, 2183, 2189, 2200, - 2206, 2215, 2221, 2241, 2247, 2256, 2262, 2273, - 2279, 2288, 2294, 2319, 2325, 2334, 2340, 2351, - 2357, 2366, 2372, 2392, 2398, 2407, 2413, 2424, - 2430, 2439, 2445, 2468, 2474, 2483, 2489, 2500, - 2506, 2515, 2521, 2541, 2547, 2556, 2562, 2573, - 2579, 2588, 2594, 2619, 2625, 2634, 2640, 2651, - 2657, 2666, 2672, 2692, 2698, 2707, 2713, 2724, - 2730, 2739, 2745, 2540, 2546, 2555, 2561, 2572, - 2578, 2587, 2593, 2613, 2619, 2628, 2634, 2645, - 2651, 2660, 2666, 2691, 2697, 2706, 2712, 2723, - 2729, 2738, 2744, 2764, 2770, 2779, 2785, 2796, - 2802, 2811, 2817, 2840, 2846, 2855, 2861, 2872, - 2878, 2887, 2893, 2913, 2919, 2928, 2934, 2945, - 2951, 2960, 2966, 2991, 2997, 3006, 3012, 3023, - 3029, 3038, 3044, 3064, 3070, 3079, 3085, 3096, - 3102, 3111, 3117, 2981, 2987, 2996, 3002, 3013, - 3019, 3028, 3034, 3054, 3060, 3069, 3075, 3086, - 3092, 3101, 3107, 3132, 3138, 3147, 3153, 3164, - 3170, 3179, 3185, 3205, 3211, 3220, 3226, 3237, - 3243, 3252, 3258, 3281, 3287, 3296, 3302, 3313, - 3319, 3328, 3334, 3354, 3360, 3369, 3375, 3386, - 3392, 3401, 3407, 3432, 3438, 3447, 3453, 3464, - 3470, 3479, 3485, 3505, 3511, 3520, 3526, 3537, - 3543, 3552, 3558, 2816, 2822, 2831, 2837, 2848, - 2854, 2863, 2869, 2889, 2895, 2904, 2910, 2921, - 2927, 2936, 2942, 2967, 2973, 2982, 2988, 2999, - 3005, 3014, 3020, 3040, 3046, 3055, 3061, 3072, - 3078, 3087, 3093, 3116, 3122, 3131, 3137, 3148, - 3154, 3163, 3169, 3189, 3195, 3204, 3210, 3221, - 3227, 3236, 3242, 3267, 3273, 3282, 3288, 3299, - 3305, 3314, 3320, 3340, 3346, 3355, 3361, 3372, - 3378, 3387, 3393, 3257, 3263, 3272, 3278, 3289, - 3295, 3304, 3310, 3330, 3336, 3345, 3351, 3362, - 3368, 3377, 3383, 3408, 3414, 3423, 3429, 3440, - 3446, 3455, 3461, 3481, 3487, 3496, 3502, 3513, - 3519, 3528, 3534, 3557, 3563, 3572, 3578, 3589, - 3595, 3604, 3610, 3630, 3636, 3645, 3651, 3662, - 3668, 3677, 3683, 3708, 3714, 3723, 3729, 3740, - 3746, 3755, 3761, 3781, 3787, 3796, 3802, 3813, - 3819, 3828, 3834, 3629, 3635, 3644, 3650, 3661, - 3667, 3676, 3682, 3702, 3708, 3717, 3723, 3734, - 3740, 3749, 3755, 3780, 3786, 3795, 3801, 3812, - 3818, 3827, 3833, 3853, 3859, 3868, 3874, 3885, - 3891, 3900, 3906, 3929, 3935, 3944, 3950, 3961, - 3967, 3976, 3982, 4002, 4008, 4017, 4023, 4034, - 4040, 4049, 4055, 4080, 4086, 4095, 4101, 4112, - 4118, 4127, 4133, 4153, 4159, 4168, 4174, 4185, - 4191, 4200, 4206, 4070, 4076, 4085, 4091, 4102, - 4108, 4117, 4123, 4143, 4149, 4158, 4164, 4175, - 4181, 4190, 4196, 4221, 4227, 4236, 4242, 4253, - 4259, 4268, 4274, 4294, 4300, 4309, 4315, 4326, - 4332, 4341, 4347, 4370, 4376, 4385, 4391, 4402, - 4408, 4417, 4423, 4443, 4449, 4458, 4464, 4475, - 4481, 4490, 4496, 4521, 4527, 4536, 4542, 4553, - 4559, 4568, 4574, 4594, 4600, 4609, 4615, 4626, - 4632, 4641, 4647, 3515, 3521, 3530, 3536, 3547, - 3553, 3562, 3568, 3588, 3594, 3603, 3609, 3620, - 3626, 3635, 3641, 3666, 3672, 3681, 3687, 3698, - 3704, 3713, 3719, 3739, 3745, 3754, 3760, 3771, - 3777, 3786, 3792, 3815, 3821, 3830, 3836, 3847, - 3853, 3862, 3868, 3888, 3894, 3903, 3909, 3920, - 3926, 3935, 3941, 3966, 3972, 3981, 3987, 3998, - 4004, 4013, 4019, 4039, 4045, 4054, 4060, 4071, - 4077, 4086, 4092, 3956, 3962, 3971, 3977, 3988, - 3994, 4003, 4009, 4029, 4035, 4044, 4050, 4061, - 4067, 4076, 4082, 4107, 4113, 4122, 4128, 4139, - 4145, 4154, 4160, 4180, 4186, 4195, 4201, 4212, - 4218, 4227, 4233, 4256, 4262, 4271, 4277, 4288, - 4294, 4303, 4309, 4329, 4335, 4344, 4350, 4361, - 4367, 4376, 4382, 4407, 4413, 4422, 4428, 4439, - 4445, 4454, 4460, 4480, 4486, 4495, 4501, 4512, - 4518, 4527, 4533, 4328, 4334, 4343, 4349, 4360, - 4366, 4375, 4381, 4401, 4407, 4416, 4422, 4433, - 4439, 4448, 4454, 4479, 4485, 4494, 4500, 4511, - 4517, 4526, 4532, 4552, 4558, 4567, 4573, 4584, - 4590, 4599, 4605, 4628, 4634, 4643, 4649, 4660, - 4666, 4675, 4681, 4701, 4707, 4716, 4722, 4733, - 4739, 4748, 4754, 4779, 4785, 4794, 4800, 4811, - 4817, 4826, 4832, 4852, 4858, 4867, 4873, 4884, - 4890, 4899, 4905, 4769, 4775, 4784, 4790, 4801, - 4807, 4816, 4822, 4842, 4848, 4857, 4863, 4874, - 4880, 4889, 4895, 4920, 4926, 4935, 4941, 4952, - 4958, 4967, 4973, 4993, 4999, 5008, 5014, 5025, - 5031, 5040, 5046, 5069, 5075, 5084, 5090, 5101, - 5107, 5116, 5122, 5142, 5148, 5157, 5163, 5174, - 5180, 5189, 5195, 5220, 5226, 5235, 5241, 5252, - 5258, 5267, 5273, 5293, 5299, 5308, 5314, 5325, - 5331, 5340, 5346, 4604, 4610, 4619, 4625, 4636, - 4642, 4651, 4657, 4677, 4683, 4692, 4698, 4709, - 4715, 4724, 4730, 4755, 4761, 4770, 4776, 4787, - 4793, 4802, 4808, 4828, 4834, 4843, 4849, 4860, - 4866, 4875, 4881, 4904, 4910, 4919, 4925, 4936, - 4942, 4951, 4957, 4977, 4983, 4992, 4998, 5009, - 5015, 5024, 5030, 5055, 5061, 5070, 5076, 5087, - 5093, 5102, 5108, 5128, 5134, 5143, 5149, 5160, - 5166, 5175, 5181, 5045, 5051, 5060, 5066, 5077, - 5083, 5092, 5098, 5118, 5124, 5133, 5139, 5150, - 5156, 5165, 5171, 5196, 5202, 5211, 5217, 5228, - 5234, 5243, 5249, 5269, 5275, 5284, 5290, 5301, - 5307, 5316, 5322, 5345, 5351, 5360, 5366, 5377, - 5383, 5392, 5398, 5418, 5424, 5433, 5439, 5450, - 5456, 5465, 5471, 5496, 5502, 5511, 5517, 5528, - 5534, 5543, 5549, 5569, 5575, 5584, 5590, 5601, - 5607, 5616, 5622, 5417, 5423, 5432, 5438, 5449, - 5455, 5464, 5470, 5490, 5496, 5505, 5511, 5522, - 5528, 5537, 5543, 5568, 5574, 5583, 5589, 5600, - 5606, 5615, 5621, 5641, 5647, 5656, 5662, 5673, - 5679, 5688, 5694, 5717, 5723, 5732, 5738, 5749, - 5755, 5764, 5770, 5790, 5796, 5805, 5811, 5822, - 5828, 5837, 5843, 5868, 5874, 5883, 5889, 5900, - 5906, 5915, 5921, 5941, 5947, 5956, 5962, 5973, - 5979, 5988, 5994, 5858, 5864, 5873, 5879, 5890, - 5896, 5905, 5911, 5931, 5937, 5946, 5952, 5963, - 5969, 5978, 5984, 6009, 6015, 6024, 6030, 6041, - 6047, 6056, 6062, 6082, 6088, 6097, 6103, 6114, - 6120, 6129, 6135, 6158, 6164, 6173, 6179, 6190, - 6196, 6205, 6211, 6231, 6237, 6246, 6252, 6263, - 6269, 6278, 6284, 6309, 6315, 6324, 6330, 6341, - 6347, 6356, 6362, 6382, 6388, 6397, 6403, 6414, - 6420, 6429, 6435, 3515, 3521, 3530, 3536, 3547, - 3553, 3562, 3568, 3588, 3594, 3603, 3609, 3620, - 3626, 3635, 3641, 3666, 3672, 3681, 3687, 3698, - 3704, 3713, 3719, 3739, 3745, 3754, 3760, 3771, - 3777, 3786, 3792, 3815, 3821, 3830, 3836, 3847, - 3853, 3862, 3868, 3888, 3894, 3903, 3909, 3920, - 3926, 3935, 3941, 3966, 3972, 3981, 3987, 3998, - 4004, 4013, 4019, 4039, 4045, 4054, 4060, 4071, - 4077, 4086, 4092, 3956, 3962, 3971, 3977, 3988, - 3994, 4003, 4009, 4029, 4035, 4044, 4050, 4061, - 4067, 4076, 4082, 4107, 4113, 4122, 4128, 4139, - 4145, 4154, 4160, 4180, 4186, 4195, 4201, 4212, - 4218, 4227, 4233, 4256, 4262, 4271, 4277, 4288, - 4294, 4303, 4309, 4329, 4335, 4344, 4350, 4361, - 4367, 4376, 4382, 4407, 4413, 4422, 4428, 4439, - 4445, 4454, 4460, 4480, 4486, 4495, 4501, 4512, - 4518, 4527, 4533, 4328, 4334, 4343, 4349, 4360, - 4366, 4375, 4381, 4401, 4407, 4416, 4422, 4433, - 4439, 4448, 4454, 4479, 4485, 4494, 4500, 4511, - 4517, 4526, 4532, 4552, 4558, 4567, 4573, 4584, - 4590, 4599, 4605, 4628, 4634, 4643, 4649, 4660, - 4666, 4675, 4681, 4701, 4707, 4716, 4722, 4733, - 4739, 4748, 4754, 4779, 4785, 4794, 4800, 4811, - 4817, 4826, 4832, 4852, 4858, 4867, 4873, 4884, - 4890, 4899, 4905, 4769, 4775, 4784, 4790, 4801, - 4807, 4816, 4822, 4842, 4848, 4857, 4863, 4874, - 4880, 4889, 4895, 4920, 4926, 4935, 4941, 4952, - 4958, 4967, 4973, 4993, 4999, 5008, 5014, 5025, - 5031, 5040, 5046, 5069, 5075, 5084, 5090, 5101, - 5107, 5116, 5122, 5142, 5148, 5157, 5163, 5174, - 5180, 5189, 5195, 5220, 5226, 5235, 5241, 5252, - 5258, 5267, 5273, 5293, 5299, 5308, 5314, 5325, - 5331, 5340, 5346, 4604, 4610, 4619, 4625, 4636, - 4642, 4651, 4657, 4677, 4683, 4692, 4698, 4709, - 4715, 4724, 4730, 4755, 4761, 4770, 4776, 4787, - 4793, 4802, 4808, 4828, 4834, 4843, 4849, 4860, - 4866, 4875, 4881, 4904, 4910, 4919, 4925, 4936, - 4942, 4951, 4957, 4977, 4983, 4992, 4998, 5009, - 5015, 5024, 5030, 5055, 5061, 5070, 5076, 5087, - 5093, 5102, 5108, 5128, 5134, 5143, 5149, 5160, - 5166, 5175, 5181, 5045, 5051, 5060, 5066, 5077, - 5083, 5092, 5098, 5118, 5124, 5133, 5139, 5150, - 5156, 5165, 5171, 5196, 5202, 5211, 5217, 5228, - 5234, 5243, 5249, 5269, 5275, 5284, 5290, 5301, - 5307, 5316, 5322, 5345, 5351, 5360, 5366, 5377, - 5383, 5392, 5398, 5418, 5424, 5433, 5439, 5450, - 5456, 5465, 5471, 5496, 5502, 5511, 5517, 5528, - 5534, 5543, 5549, 5569, 5575, 5584, 5590, 5601, - 5607, 5616, 5622, 5417, 5423, 5432, 5438, 5449, - 5455, 5464, 5470, 5490, 5496, 5505, 5511, 5522, - 5528, 5537, 5543, 5568, 5574, 5583, 5589, 5600, - 5606, 5615, 5621, 5641, 5647, 5656, 5662, 5673, - 5679, 5688, 5694, 5717, 5723, 5732, 5738, 5749, - 5755, 5764, 5770, 5790, 5796, 5805, 5811, 5822, - 5828, 5837, 5843, 5868, 5874, 5883, 5889, 5900, - 5906, 5915, 5921, 5941, 5947, 5956, 5962, 5973, - 5979, 5988, 5994, 5858, 5864, 5873, 5879, 5890, - 5896, 5905, 5911, 5931, 5937, 5946, 5952, 5963, - 5969, 5978, 5984, 6009, 6015, 6024, 6030, 6041, - 6047, 6056, 6062, 6082, 6088, 6097, 6103, 6114, - 6120, 6129, 6135, 6158, 6164, 6173, 6179, 6190, - 6196, 6205, 6211, 6231, 6237, 6246, 6252, 6263, - 6269, 6278, 6284, 6309, 6315, 6324, 6330, 6341, - 6347, 6356, 6362, 6382, 6388, 6397, 6403, 6414, - 6420, 6429, 6435, 5303, 5309, 5318, 5324, 5335, - 5341, 5350, 5356, 5376, 5382, 5391, 5397, 5408, - 5414, 5423, 5429, 5454, 5460, 5469, 5475, 5486, - 5492, 5501, 5507, 5527, 5533, 5542, 5548, 5559, - 5565, 5574, 5580, 5603, 5609, 5618, 5624, 5635, - 5641, 5650, 5656, 5676, 5682, 5691, 5697, 5708, - 5714, 5723, 5729, 5754, 5760, 5769, 5775, 5786, - 5792, 5801, 5807, 5827, 5833, 5842, 5848, 5859, - 5865, 5874, 5880, 5744, 5750, 5759, 5765, 5776, - 5782, 5791, 5797, 5817, 5823, 5832, 5838, 5849, - 5855, 5864, 5870, 5895, 5901, 5910, 5916, 5927, - 5933, 5942, 5948, 5968, 5974, 5983, 5989, 6000, - 6006, 6015, 6021, 6044, 6050, 6059, 6065, 6076, - 6082, 6091, 6097, 6117, 6123, 6132, 6138, 6149, - 6155, 6164, 6170, 6195, 6201, 6210, 6216, 6227, - 6233, 6242, 6248, 6268, 6274, 6283, 6289, 6300, - 6306, 6315, 6321, 6116, 6122, 6131, 6137, 6148, - 6154, 6163, 6169, 6189, 6195, 6204, 6210, 6221, - 6227, 6236, 6242, 6267, 6273, 6282, 6288, 6299, - 6305, 6314, 6320, 6340, 6346, 6355, 6361, 6372, - 6378, 6387, 6393, 6416, 6422, 6431, 6437, 6448, - 6454, 6463, 6469, 6489, 6495, 6504, 6510, 6521, - 6527, 6536, 6542, 6567, 6573, 6582, 6588, 6599, - 6605, 6614, 6620, 6640, 6646, 6655, 6661, 6672, - 6678, 6687, 6693, 6557, 6563, 6572, 6578, 6589, - 6595, 6604, 6610, 6630, 6636, 6645, 6651, 6662, - 6668, 6677, 6683, 6708, 6714, 6723, 6729, 6740, - 6746, 6755, 6761, 6781, 6787, 6796, 6802, 6813, - 6819, 6828, 6834, 6857, 6863, 6872, 6878, 6889, - 6895, 6904, 6910, 6930, 6936, 6945, 6951, 6962, - 6968, 6977, 6983, 7008, 7014, 7023, 7029, 7040, - 7046, 7055, 7061, 7081, 7087, 7096, 7102, 7113, - 7119, 7128, 7134, 6392, 6398, 6407, 6413, 6424, - 6430, 6439, 6445, 6465, 6471, 6480, 6486, 6497, - 6503, 6512, 6518, 6543, 6549, 6558, 6564, 6575, - 6581, 6590, 6596, 6616, 6622, 6631, 6637, 6648, - 6654, 6663, 6669, 6692, 6698, 6707, 6713, 6724, - 6730, 6739, 6745, 6765, 6771, 6780, 6786, 6797, - 6803, 6812, 6818, 6843, 6849, 6858, 6864, 6875, - 6881, 6890, 6896, 6916, 6922, 6931, 6937, 6948, - 6954, 6963, 6969, 6833, 6839, 6848, 6854, 6865, - 6871, 6880, 6886, 6906, 6912, 6921, 6927, 6938, - 6944, 6953, 6959, 6984, 6990, 6999, 7005, 7016, - 7022, 7031, 7037, 7057, 7063, 7072, 7078, 7089, - 7095, 7104, 7110, 7133, 7139, 7148, 7154, 7165, - 7171, 7180, 7186, 7206, 7212, 7221, 7227, 7238, - 7244, 7253, 7259, 7284, 7290, 7299, 7305, 7316, - 7322, 7331, 7337, 7357, 7363, 7372, 7378, 7389, - 7395, 7404, 7410, 7205, 7211, 7220, 7226, 7237, - 7243, 7252, 7258, 7278, 7284, 7293, 7299, 7310, - 7316, 7325, 7331, 7356, 7362, 7371, 7377, 7388, - 7394, 7403, 7409, 7429, 7435, 7444, 7450, 7461, - 7467, 7476, 7482, 7505, 7511, 7520, 7526, 7537, - 7543, 7552, 7558, 7578, 7584, 7593, 7599, 7610, - 7616, 7625, 7631, 7656, 7662, 7671, 7677, 7688, - 7694, 7703, 7709, 7729, 7735, 7744, 7750, 7761 -}; - -//------------------------------------------------------------------------------ -// Tables for level coding - -const uint8_t VP8EncBands[16 + 1] = { - 0, 1, 2, 3, 6, 4, 5, 6, 6, 6, 6, 6, 6, 6, 6, 7, - 0 // sentinel -}; - -//------------------------------------------------------------------------------ -// Mode costs - -static int GetResidualCost_C(int ctx0, const VP8Residual* const res) { - int n = res->first; - // should be prob[VP8EncBands[n]], but it's equivalent for n=0 or 1 - const int p0 = res->prob[n][ctx0][0]; - CostArrayPtr const costs = res->costs; - const uint16_t* t = costs[n][ctx0]; - // bit_cost(1, p0) is already incorporated in t[] tables, but only if ctx != 0 - // (as required by the syntax). For ctx0 == 0, we need to add it here or it'll - // be missing during the loop. - int cost = (ctx0 == 0) ? VP8BitCost(1, p0) : 0; - - if (res->last < 0) { - return VP8BitCost(0, p0); - } - for (; n < res->last; ++n) { - const int v = abs(res->coeffs[n]); - const int ctx = (v >= 2) ? 2 : v; - cost += VP8LevelCost(t, v); - t = costs[n + 1][ctx]; - } - // Last coefficient is always non-zero - { - const int v = abs(res->coeffs[n]); - assert(v != 0); - cost += VP8LevelCost(t, v); - if (n < 15) { - const int b = VP8EncBands[n + 1]; - const int ctx = (v == 1) ? 1 : 2; - const int last_p0 = res->prob[b][ctx][0]; - cost += VP8BitCost(0, last_p0); - } - } - return cost; -} - -static void SetResidualCoeffs_C(const int16_t* const coeffs, - VP8Residual* const res) { - int n; - res->last = -1; - assert(res->first == 0 || coeffs[0] == 0); - for (n = 15; n >= 0; --n) { - if (coeffs[n]) { - res->last = n; - break; - } - } - res->coeffs = coeffs; -} - -//------------------------------------------------------------------------------ -// init function - -VP8GetResidualCostFunc VP8GetResidualCost; -VP8SetResidualCoeffsFunc VP8SetResidualCoeffs; - -extern void VP8EncDspCostInitMIPS32(void); -extern void VP8EncDspCostInitMIPSdspR2(void); -extern void VP8EncDspCostInitSSE2(void); -extern void VP8EncDspCostInitNEON(void); - -WEBP_DSP_INIT_FUNC(VP8EncDspCostInit) { - VP8GetResidualCost = GetResidualCost_C; - VP8SetResidualCoeffs = SetResidualCoeffs_C; - - // If defined, use CPUInfo() to overwrite some pointers with faster versions. - if (VP8GetCPUInfo != NULL) { -#if defined(WEBP_USE_MIPS32) - if (VP8GetCPUInfo(kMIPS32)) { - VP8EncDspCostInitMIPS32(); - } -#endif -#if defined(WEBP_USE_MIPS_DSP_R2) - if (VP8GetCPUInfo(kMIPSdspR2)) { - VP8EncDspCostInitMIPSdspR2(); - } -#endif -#if defined(WEBP_USE_SSE2) - if (VP8GetCPUInfo(kSSE2)) { - VP8EncDspCostInitSSE2(); - } -#endif -#if defined(WEBP_USE_NEON) - if (VP8GetCPUInfo(kNEON)) { - VP8EncDspCostInitNEON(); - } -#endif - } -} - -//------------------------------------------------------------------------------ diff --git a/Extended/libwebp/src/dsp/cost_mips32.c b/Extended/libwebp/src/dsp/cost_mips32.c deleted file mode 100644 index 0500f88..0000000 --- a/Extended/libwebp/src/dsp/cost_mips32.c +++ /dev/null @@ -1,154 +0,0 @@ -// Copyright 2014 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Author: Djordje Pesut (djordje.pesut@imgtec.com) - -#include "src/dsp/dsp.h" - -#if defined(WEBP_USE_MIPS32) - -#include "src/enc/cost_enc.h" - -static int GetResidualCost_MIPS32(int ctx0, const VP8Residual* const res) { - int temp0, temp1; - int v_reg, ctx_reg; - int n = res->first; - // should be prob[VP8EncBands[n]], but it's equivalent for n=0 or 1 - int p0 = res->prob[n][ctx0][0]; - CostArrayPtr const costs = res->costs; - const uint16_t* t = costs[n][ctx0]; - // bit_cost(1, p0) is already incorporated in t[] tables, but only if ctx != 0 - // (as required by the syntax). For ctx0 == 0, we need to add it here or it'll - // be missing during the loop. - int cost = (ctx0 == 0) ? VP8BitCost(1, p0) : 0; - const int16_t* res_coeffs = res->coeffs; - const int res_last = res->last; - const int const_max_level = MAX_VARIABLE_LEVEL; - const int const_2 = 2; - const uint16_t** p_costs = &costs[n][0]; - const size_t inc_p_costs = NUM_CTX * sizeof(*p_costs); - - if (res->last < 0) { - return VP8BitCost(0, p0); - } - - __asm__ volatile ( - ".set push \n\t" - ".set noreorder \n\t" - "subu %[temp1], %[res_last], %[n] \n\t" - "sll %[temp0], %[n], 1 \n\t" - "blez %[temp1], 2f \n\t" - " addu %[res_coeffs], %[res_coeffs], %[temp0] \n\t" - "1: \n\t" - "lh %[v_reg], 0(%[res_coeffs]) \n\t" - "addiu %[n], %[n], 1 \n\t" - "negu %[temp0], %[v_reg] \n\t" - "slti %[temp1], %[v_reg], 0 \n\t" - "movn %[v_reg], %[temp0], %[temp1] \n\t" - "sltiu %[temp0], %[v_reg], 2 \n\t" - "move %[ctx_reg], %[v_reg] \n\t" - "movz %[ctx_reg], %[const_2], %[temp0] \n\t" - "sll %[temp1], %[v_reg], 1 \n\t" - "addu %[temp1], %[temp1], %[VP8LevelFixedCosts] \n\t" - "lhu %[temp1], 0(%[temp1]) \n\t" - "slt %[temp0], %[v_reg], %[const_max_level] \n\t" - "movz %[v_reg], %[const_max_level], %[temp0] \n\t" - "addu %[cost], %[cost], %[temp1] \n\t" - "sll %[v_reg], %[v_reg], 1 \n\t" - "sll %[ctx_reg], %[ctx_reg], 2 \n\t" - "addu %[v_reg], %[v_reg], %[t] \n\t" - "lhu %[temp0], 0(%[v_reg]) \n\t" - "addu %[p_costs], %[p_costs], %[inc_p_costs] \n\t" - "addu %[t], %[p_costs], %[ctx_reg] \n\t" - "addu %[cost], %[cost], %[temp0] \n\t" - "addiu %[res_coeffs], %[res_coeffs], 2 \n\t" - "bne %[n], %[res_last], 1b \n\t" - " lw %[t], 0(%[t]) \n\t" - "2: \n\t" - ".set pop \n\t" - : [cost]"+&r"(cost), [t]"+&r"(t), [n]"+&r"(n), [v_reg]"=&r"(v_reg), - [ctx_reg]"=&r"(ctx_reg), [p_costs]"+&r"(p_costs), [temp0]"=&r"(temp0), - [temp1]"=&r"(temp1), [res_coeffs]"+&r"(res_coeffs) - : [const_2]"r"(const_2), [const_max_level]"r"(const_max_level), - [VP8LevelFixedCosts]"r"(VP8LevelFixedCosts), [res_last]"r"(res_last), - [inc_p_costs]"r"(inc_p_costs) - : "memory" - ); - - // Last coefficient is always non-zero - { - const int v = abs(res->coeffs[n]); - assert(v != 0); - cost += VP8LevelCost(t, v); - if (n < 15) { - const int b = VP8EncBands[n + 1]; - const int ctx = (v == 1) ? 1 : 2; - const int last_p0 = res->prob[b][ctx][0]; - cost += VP8BitCost(0, last_p0); - } - } - return cost; -} - -static void SetResidualCoeffs_MIPS32(const int16_t* const coeffs, - VP8Residual* const res) { - const int16_t* p_coeffs = (int16_t*)coeffs; - int temp0, temp1, temp2, n, n1; - assert(res->first == 0 || coeffs[0] == 0); - - __asm__ volatile ( - ".set push \n\t" - ".set noreorder \n\t" - "addiu %[p_coeffs], %[p_coeffs], 28 \n\t" - "li %[n], 15 \n\t" - "li %[temp2], -1 \n\t" - "0: \n\t" - "ulw %[temp0], 0(%[p_coeffs]) \n\t" - "beqz %[temp0], 1f \n\t" -#if defined(WORDS_BIGENDIAN) - " sll %[temp1], %[temp0], 16 \n\t" -#else - " srl %[temp1], %[temp0], 16 \n\t" -#endif - "addiu %[n1], %[n], -1 \n\t" - "movz %[temp0], %[n1], %[temp1] \n\t" - "movn %[temp0], %[n], %[temp1] \n\t" - "j 2f \n\t" - " addiu %[temp2], %[temp0], 0 \n\t" - "1: \n\t" - "addiu %[n], %[n], -2 \n\t" - "bgtz %[n], 0b \n\t" - " addiu %[p_coeffs], %[p_coeffs], -4 \n\t" - "2: \n\t" - ".set pop \n\t" - : [p_coeffs]"+&r"(p_coeffs), [temp0]"=&r"(temp0), - [temp1]"=&r"(temp1), [temp2]"=&r"(temp2), - [n]"=&r"(n), [n1]"=&r"(n1) - : - : "memory" - ); - res->last = temp2; - res->coeffs = coeffs; -} - -//------------------------------------------------------------------------------ -// Entry point - -extern void VP8EncDspCostInitMIPS32(void); - -WEBP_TSAN_IGNORE_FUNCTION void VP8EncDspCostInitMIPS32(void) { - VP8GetResidualCost = GetResidualCost_MIPS32; - VP8SetResidualCoeffs = SetResidualCoeffs_MIPS32; -} - -#else // !WEBP_USE_MIPS32 - -WEBP_DSP_INIT_STUB(VP8EncDspCostInitMIPS32) - -#endif // WEBP_USE_MIPS32 diff --git a/Extended/libwebp/src/dsp/cost_mips_dsp_r2.c b/Extended/libwebp/src/dsp/cost_mips_dsp_r2.c deleted file mode 100644 index 51248de..0000000 --- a/Extended/libwebp/src/dsp/cost_mips_dsp_r2.c +++ /dev/null @@ -1,107 +0,0 @@ -// Copyright 2014 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Author: Djordje Pesut (djordje.pesut@imgtec.com) - -#include "src/dsp/dsp.h" - -#if defined(WEBP_USE_MIPS_DSP_R2) - -#include "src/enc/cost_enc.h" - -static int GetResidualCost_MIPSdspR2(int ctx0, const VP8Residual* const res) { - int temp0, temp1; - int v_reg, ctx_reg; - int n = res->first; - // should be prob[VP8EncBands[n]], but it's equivalent for n=0 or 1 - int p0 = res->prob[n][ctx0][0]; - CostArrayPtr const costs = res->costs; - const uint16_t* t = costs[n][ctx0]; - // bit_cost(1, p0) is already incorporated in t[] tables, but only if ctx != 0 - // (as required by the syntax). For ctx0 == 0, we need to add it here or it'll - // be missing during the loop. - int cost = (ctx0 == 0) ? VP8BitCost(1, p0) : 0; - const int16_t* res_coeffs = res->coeffs; - const int res_last = res->last; - const int const_max_level = MAX_VARIABLE_LEVEL; - const int const_2 = 2; - const uint16_t** p_costs = &costs[n][0]; - const size_t inc_p_costs = NUM_CTX * sizeof(*p_costs); - - if (res->last < 0) { - return VP8BitCost(0, p0); - } - - __asm__ volatile ( - ".set push \n\t" - ".set noreorder \n\t" - "subu %[temp1], %[res_last], %[n] \n\t" - "blez %[temp1], 2f \n\t" - " nop \n\t" - "1: \n\t" - "sll %[temp0], %[n], 1 \n\t" - "lhx %[v_reg], %[temp0](%[res_coeffs]) \n\t" - "addiu %[n], %[n], 1 \n\t" - "absq_s.w %[v_reg], %[v_reg] \n\t" - "sltiu %[temp0], %[v_reg], 2 \n\t" - "move %[ctx_reg], %[v_reg] \n\t" - "movz %[ctx_reg], %[const_2], %[temp0] \n\t" - "sll %[temp1], %[v_reg], 1 \n\t" - "lhx %[temp1], %[temp1](%[VP8LevelFixedCosts]) \n\t" - "slt %[temp0], %[v_reg], %[const_max_level] \n\t" - "movz %[v_reg], %[const_max_level], %[temp0] \n\t" - "addu %[cost], %[cost], %[temp1] \n\t" - "sll %[v_reg], %[v_reg], 1 \n\t" - "sll %[ctx_reg], %[ctx_reg], 2 \n\t" - "lhx %[temp0], %[v_reg](%[t]) \n\t" - "addu %[p_costs], %[p_costs], %[inc_p_costs] \n\t" - "addu %[t], %[p_costs], %[ctx_reg] \n\t" - "addu %[cost], %[cost], %[temp0] \n\t" - "bne %[n], %[res_last], 1b \n\t" - " lw %[t], 0(%[t]) \n\t" - "2: \n\t" - ".set pop \n\t" - : [cost]"+&r"(cost), [t]"+&r"(t), [n]"+&r"(n), [v_reg]"=&r"(v_reg), - [ctx_reg]"=&r"(ctx_reg), [p_costs]"+&r"(p_costs), [temp0]"=&r"(temp0), - [temp1]"=&r"(temp1) - : [const_2]"r"(const_2), [const_max_level]"r"(const_max_level), - [VP8LevelFixedCosts]"r"(VP8LevelFixedCosts), [res_last]"r"(res_last), - [res_coeffs]"r"(res_coeffs), [inc_p_costs]"r"(inc_p_costs) - : "memory" - ); - - // Last coefficient is always non-zero - { - const int v = abs(res->coeffs[n]); - assert(v != 0); - cost += VP8LevelCost(t, v); - if (n < 15) { - const int b = VP8EncBands[n + 1]; - const int ctx = (v == 1) ? 1 : 2; - const int last_p0 = res->prob[b][ctx][0]; - cost += VP8BitCost(0, last_p0); - } - } - return cost; -} - -//------------------------------------------------------------------------------ -// Entry point - -extern void VP8EncDspCostInitMIPSdspR2(void); - -WEBP_TSAN_IGNORE_FUNCTION void VP8EncDspCostInitMIPSdspR2(void) { - VP8GetResidualCost = GetResidualCost_MIPSdspR2; -} - -#else // !WEBP_USE_MIPS_DSP_R2 - -WEBP_DSP_INIT_STUB(VP8EncDspCostInitMIPSdspR2) - -#endif // WEBP_USE_MIPS_DSP_R2 diff --git a/Extended/libwebp/src/dsp/cost_neon.c b/Extended/libwebp/src/dsp/cost_neon.c deleted file mode 100644 index 8cc8ce5..0000000 --- a/Extended/libwebp/src/dsp/cost_neon.c +++ /dev/null @@ -1,122 +0,0 @@ -// Copyright 2018 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// ARM NEON version of cost functions - -#include "src/dsp/dsp.h" - -#if defined(WEBP_USE_NEON) - -#include "src/dsp/neon.h" -#include "src/enc/cost_enc.h" - -static const uint8_t position[16] = { 1, 2, 3, 4, 5, 6, 7, 8, - 9, 10, 11, 12, 13, 14, 15, 16 }; - -static void SetResidualCoeffs_NEON(const int16_t* const coeffs, - VP8Residual* const res) { - const int16x8_t minus_one = vdupq_n_s16(-1); - const int16x8_t coeffs_0 = vld1q_s16(coeffs); - const int16x8_t coeffs_1 = vld1q_s16(coeffs + 8); - const uint16x8_t eob_0 = vtstq_s16(coeffs_0, minus_one); - const uint16x8_t eob_1 = vtstq_s16(coeffs_1, minus_one); - const uint8x16_t eob = vcombine_u8(vqmovn_u16(eob_0), vqmovn_u16(eob_1)); - const uint8x16_t masked = vandq_u8(eob, vld1q_u8(position)); - -#ifdef __aarch64__ - res->last = vmaxvq_u8(masked) - 1; -#else - const uint8x8_t eob_8x8 = vmax_u8(vget_low_u8(masked), vget_high_u8(masked)); - const uint16x8_t eob_16x8 = vmovl_u8(eob_8x8); - const uint16x4_t eob_16x4 = - vmax_u16(vget_low_u16(eob_16x8), vget_high_u16(eob_16x8)); - const uint32x4_t eob_32x4 = vmovl_u16(eob_16x4); - uint32x2_t eob_32x2 = - vmax_u32(vget_low_u32(eob_32x4), vget_high_u32(eob_32x4)); - eob_32x2 = vpmax_u32(eob_32x2, eob_32x2); - - vst1_lane_s32(&res->last, vreinterpret_s32_u32(eob_32x2), 0); - --res->last; -#endif // __aarch64__ - - res->coeffs = coeffs; -} - -static int GetResidualCost_NEON(int ctx0, const VP8Residual* const res) { - uint8_t levels[16], ctxs[16]; - uint16_t abs_levels[16]; - int n = res->first; - // should be prob[VP8EncBands[n]], but it's equivalent for n=0 or 1 - const int p0 = res->prob[n][ctx0][0]; - CostArrayPtr const costs = res->costs; - const uint16_t* t = costs[n][ctx0]; - // bit_cost(1, p0) is already incorporated in t[] tables, but only if ctx != 0 - // (as required by the syntax). For ctx0 == 0, we need to add it here or it'll - // be missing during the loop. - int cost = (ctx0 == 0) ? VP8BitCost(1, p0) : 0; - - if (res->last < 0) { - return VP8BitCost(0, p0); - } - - { // precompute clamped levels and contexts, packed to 8b. - const uint8x16_t kCst2 = vdupq_n_u8(2); - const uint8x16_t kCst67 = vdupq_n_u8(MAX_VARIABLE_LEVEL); - const int16x8_t c0 = vld1q_s16(res->coeffs); - const int16x8_t c1 = vld1q_s16(res->coeffs + 8); - const uint16x8_t E0 = vreinterpretq_u16_s16(vabsq_s16(c0)); - const uint16x8_t E1 = vreinterpretq_u16_s16(vabsq_s16(c1)); - const uint8x16_t F = vcombine_u8(vqmovn_u16(E0), vqmovn_u16(E1)); - const uint8x16_t G = vminq_u8(F, kCst2); // context = 0,1,2 - const uint8x16_t H = vminq_u8(F, kCst67); // clamp_level in [0..67] - - vst1q_u8(ctxs, G); - vst1q_u8(levels, H); - - vst1q_u16(abs_levels, E0); - vst1q_u16(abs_levels + 8, E1); - } - for (; n < res->last; ++n) { - const int ctx = ctxs[n]; - const int level = levels[n]; - const int flevel = abs_levels[n]; // full level - cost += VP8LevelFixedCosts[flevel] + t[level]; // simplified VP8LevelCost() - t = costs[n + 1][ctx]; - } - // Last coefficient is always non-zero - { - const int level = levels[n]; - const int flevel = abs_levels[n]; - assert(flevel != 0); - cost += VP8LevelFixedCosts[flevel] + t[level]; - if (n < 15) { - const int b = VP8EncBands[n + 1]; - const int ctx = ctxs[n]; - const int last_p0 = res->prob[b][ctx][0]; - cost += VP8BitCost(0, last_p0); - } - } - return cost; -} - -//------------------------------------------------------------------------------ -// Entry point - -extern void VP8EncDspCostInitNEON(void); - -WEBP_TSAN_IGNORE_FUNCTION void VP8EncDspCostInitNEON(void) { - VP8SetResidualCoeffs = SetResidualCoeffs_NEON; - VP8GetResidualCost = GetResidualCost_NEON; -} - -#else // !WEBP_USE_NEON - -WEBP_DSP_INIT_STUB(VP8EncDspCostInitNEON) - -#endif // WEBP_USE_NEON diff --git a/Extended/libwebp/src/dsp/cost_sse2.c b/Extended/libwebp/src/dsp/cost_sse2.c deleted file mode 100644 index 487a079..0000000 --- a/Extended/libwebp/src/dsp/cost_sse2.c +++ /dev/null @@ -1,119 +0,0 @@ -// Copyright 2015 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// SSE2 version of cost functions -// -// Author: Skal (pascal.massimino@gmail.com) - -#include "src/dsp/dsp.h" - -#if defined(WEBP_USE_SSE2) -#include - -#include "src/enc/cost_enc.h" -#include "src/enc/vp8i_enc.h" -#include "src/utils/utils.h" - -//------------------------------------------------------------------------------ - -static void SetResidualCoeffs_SSE2(const int16_t* const coeffs, - VP8Residual* const res) { - const __m128i c0 = _mm_loadu_si128((const __m128i*)(coeffs + 0)); - const __m128i c1 = _mm_loadu_si128((const __m128i*)(coeffs + 8)); - // Use SSE2 to compare 16 values with a single instruction. - const __m128i zero = _mm_setzero_si128(); - const __m128i m0 = _mm_packs_epi16(c0, c1); - const __m128i m1 = _mm_cmpeq_epi8(m0, zero); - // Get the comparison results as a bitmask into 16bits. Negate the mask to get - // the position of entries that are not equal to zero. We don't need to mask - // out least significant bits according to res->first, since coeffs[0] is 0 - // if res->first > 0. - const uint32_t mask = 0x0000ffffu ^ (uint32_t)_mm_movemask_epi8(m1); - // The position of the most significant non-zero bit indicates the position of - // the last non-zero value. - assert(res->first == 0 || coeffs[0] == 0); - res->last = mask ? BitsLog2Floor(mask) : -1; - res->coeffs = coeffs; -} - -static int GetResidualCost_SSE2(int ctx0, const VP8Residual* const res) { - uint8_t levels[16], ctxs[16]; - uint16_t abs_levels[16]; - int n = res->first; - // should be prob[VP8EncBands[n]], but it's equivalent for n=0 or 1 - const int p0 = res->prob[n][ctx0][0]; - CostArrayPtr const costs = res->costs; - const uint16_t* t = costs[n][ctx0]; - // bit_cost(1, p0) is already incorporated in t[] tables, but only if ctx != 0 - // (as required by the syntax). For ctx0 == 0, we need to add it here or it'll - // be missing during the loop. - int cost = (ctx0 == 0) ? VP8BitCost(1, p0) : 0; - - if (res->last < 0) { - return VP8BitCost(0, p0); - } - - { // precompute clamped levels and contexts, packed to 8b. - const __m128i zero = _mm_setzero_si128(); - const __m128i kCst2 = _mm_set1_epi8(2); - const __m128i kCst67 = _mm_set1_epi8(MAX_VARIABLE_LEVEL); - const __m128i c0 = _mm_loadu_si128((const __m128i*)&res->coeffs[0]); - const __m128i c1 = _mm_loadu_si128((const __m128i*)&res->coeffs[8]); - const __m128i D0 = _mm_sub_epi16(zero, c0); - const __m128i D1 = _mm_sub_epi16(zero, c1); - const __m128i E0 = _mm_max_epi16(c0, D0); // abs(v), 16b - const __m128i E1 = _mm_max_epi16(c1, D1); - const __m128i F = _mm_packs_epi16(E0, E1); - const __m128i G = _mm_min_epu8(F, kCst2); // context = 0,1,2 - const __m128i H = _mm_min_epu8(F, kCst67); // clamp_level in [0..67] - - _mm_storeu_si128((__m128i*)&ctxs[0], G); - _mm_storeu_si128((__m128i*)&levels[0], H); - - _mm_storeu_si128((__m128i*)&abs_levels[0], E0); - _mm_storeu_si128((__m128i*)&abs_levels[8], E1); - } - for (; n < res->last; ++n) { - const int ctx = ctxs[n]; - const int level = levels[n]; - const int flevel = abs_levels[n]; // full level - cost += VP8LevelFixedCosts[flevel] + t[level]; // simplified VP8LevelCost() - t = costs[n + 1][ctx]; - } - // Last coefficient is always non-zero - { - const int level = levels[n]; - const int flevel = abs_levels[n]; - assert(flevel != 0); - cost += VP8LevelFixedCosts[flevel] + t[level]; - if (n < 15) { - const int b = VP8EncBands[n + 1]; - const int ctx = ctxs[n]; - const int last_p0 = res->prob[b][ctx][0]; - cost += VP8BitCost(0, last_p0); - } - } - return cost; -} - -//------------------------------------------------------------------------------ -// Entry point - -extern void VP8EncDspCostInitSSE2(void); - -WEBP_TSAN_IGNORE_FUNCTION void VP8EncDspCostInitSSE2(void) { - VP8SetResidualCoeffs = SetResidualCoeffs_SSE2; - VP8GetResidualCost = GetResidualCost_SSE2; -} - -#else // !WEBP_USE_SSE2 - -WEBP_DSP_INIT_STUB(VP8EncDspCostInitSSE2) - -#endif // WEBP_USE_SSE2 diff --git a/Extended/libwebp/src/dsp/cpu.c b/Extended/libwebp/src/dsp/cpu.c deleted file mode 100644 index 0fa5b6a..0000000 --- a/Extended/libwebp/src/dsp/cpu.c +++ /dev/null @@ -1,222 +0,0 @@ -// Copyright 2011 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// CPU detection -// -// Author: Christian Duvivier (cduvivier@google.com) - -#include "src/dsp/dsp.h" - -#if defined(WEBP_HAVE_NEON_RTCD) -#include -#include -#endif - -#if defined(WEBP_ANDROID_NEON) -#include -#endif - -//------------------------------------------------------------------------------ -// SSE2 detection. -// - -// apple/darwin gcc-4.0.1 defines __PIC__, but not __pic__ with -fPIC. -#if (defined(__pic__) || defined(__PIC__)) && defined(__i386__) -static WEBP_INLINE void GetCPUInfo(int cpu_info[4], int info_type) { - __asm__ volatile ( - "mov %%ebx, %%edi\n" - "cpuid\n" - "xchg %%edi, %%ebx\n" - : "=a"(cpu_info[0]), "=D"(cpu_info[1]), "=c"(cpu_info[2]), "=d"(cpu_info[3]) - : "a"(info_type), "c"(0)); -} -#elif defined(__x86_64__) && \ - (defined(__code_model_medium__) || defined(__code_model_large__)) && \ - defined(__PIC__) -static WEBP_INLINE void GetCPUInfo(int cpu_info[4], int info_type) { - __asm__ volatile ( - "xchg{q}\t{%%rbx}, %q1\n" - "cpuid\n" - "xchg{q}\t{%%rbx}, %q1\n" - : "=a"(cpu_info[0]), "=&r"(cpu_info[1]), "=c"(cpu_info[2]), - "=d"(cpu_info[3]) - : "a"(info_type), "c"(0)); -} -#elif defined(__i386__) || defined(__x86_64__) -static WEBP_INLINE void GetCPUInfo(int cpu_info[4], int info_type) { - __asm__ volatile ( - "cpuid\n" - : "=a"(cpu_info[0]), "=b"(cpu_info[1]), "=c"(cpu_info[2]), "=d"(cpu_info[3]) - : "a"(info_type), "c"(0)); -} -#elif (defined(_M_X64) || defined(_M_IX86)) && \ - defined(_MSC_FULL_VER) && _MSC_FULL_VER >= 150030729 // >= VS2008 SP1 -#include -#define GetCPUInfo(info, type) __cpuidex(info, type, 0) // set ecx=0 -#elif defined(WEBP_MSC_SSE2) -#define GetCPUInfo __cpuid -#endif - -// NaCl has no support for xgetbv or the raw opcode. -#if !defined(__native_client__) && (defined(__i386__) || defined(__x86_64__)) -static WEBP_INLINE uint64_t xgetbv(void) { - const uint32_t ecx = 0; - uint32_t eax, edx; - // Use the raw opcode for xgetbv for compatibility with older toolchains. - __asm__ volatile ( - ".byte 0x0f, 0x01, 0xd0\n" - : "=a"(eax), "=d"(edx) : "c" (ecx)); - return ((uint64_t)edx << 32) | eax; -} -#elif (defined(_M_X64) || defined(_M_IX86)) && \ - defined(_MSC_FULL_VER) && _MSC_FULL_VER >= 160040219 // >= VS2010 SP1 -#include -#define xgetbv() _xgetbv(0) -#elif defined(_MSC_VER) && defined(_M_IX86) -static WEBP_INLINE uint64_t xgetbv(void) { - uint32_t eax_, edx_; - __asm { - xor ecx, ecx // ecx = 0 - // Use the raw opcode for xgetbv for compatibility with older toolchains. - __asm _emit 0x0f __asm _emit 0x01 __asm _emit 0xd0 - mov eax_, eax - mov edx_, edx - } - return ((uint64_t)edx_ << 32) | eax_; -} -#else -#define xgetbv() 0U // no AVX for older x64 or unrecognized toolchains. -#endif - -#if defined(__i386__) || defined(__x86_64__) || defined(WEBP_MSC_SSE2) - -// helper function for run-time detection of slow SSSE3 platforms -static int CheckSlowModel(int info) { - // Table listing display models with longer latencies for the bsr instruction - // (ie 2 cycles vs 10/16 cycles) and some SSSE3 instructions like pshufb. - // Refer to Intel 64 and IA-32 Architectures Optimization Reference Manual. - static const uint8_t kSlowModels[] = { - 0x37, 0x4a, 0x4d, // Silvermont Microarchitecture - 0x1c, 0x26, 0x27 // Atom Microarchitecture - }; - const uint32_t model = ((info & 0xf0000) >> 12) | ((info >> 4) & 0xf); - const uint32_t family = (info >> 8) & 0xf; - if (family == 0x06) { - size_t i; - for (i = 0; i < sizeof(kSlowModels) / sizeof(kSlowModels[0]); ++i) { - if (model == kSlowModels[i]) return 1; - } - } - return 0; -} - -static int x86CPUInfo(CPUFeature feature) { - int max_cpuid_value; - int cpu_info[4]; - int is_intel = 0; - - // get the highest feature value cpuid supports - GetCPUInfo(cpu_info, 0); - max_cpuid_value = cpu_info[0]; - if (max_cpuid_value < 1) { - return 0; - } else { - const int VENDOR_ID_INTEL_EBX = 0x756e6547; // uneG - const int VENDOR_ID_INTEL_EDX = 0x49656e69; // Ieni - const int VENDOR_ID_INTEL_ECX = 0x6c65746e; // letn - is_intel = (cpu_info[1] == VENDOR_ID_INTEL_EBX && - cpu_info[2] == VENDOR_ID_INTEL_ECX && - cpu_info[3] == VENDOR_ID_INTEL_EDX); // genuine Intel? - } - - GetCPUInfo(cpu_info, 1); - if (feature == kSSE2) { - return !!(cpu_info[3] & (1 << 26)); - } - if (feature == kSSE3) { - return !!(cpu_info[2] & (1 << 0)); - } - if (feature == kSlowSSSE3) { - if (is_intel && (cpu_info[2] & (1 << 9))) { // SSSE3? - return CheckSlowModel(cpu_info[0]); - } - return 0; - } - - if (feature == kSSE4_1) { - return !!(cpu_info[2] & (1 << 19)); - } - if (feature == kAVX) { - // bits 27 (OSXSAVE) & 28 (256-bit AVX) - if ((cpu_info[2] & 0x18000000) == 0x18000000) { - // XMM state and YMM state enabled by the OS. - return (xgetbv() & 0x6) == 0x6; - } - } - if (feature == kAVX2) { - if (x86CPUInfo(kAVX) && max_cpuid_value >= 7) { - GetCPUInfo(cpu_info, 7); - return !!(cpu_info[1] & (1 << 5)); - } - } - return 0; -} -VP8CPUInfo VP8GetCPUInfo = x86CPUInfo; -#elif defined(WEBP_ANDROID_NEON) // NB: needs to be before generic NEON test. -static int AndroidCPUInfo(CPUFeature feature) { - const AndroidCpuFamily cpu_family = android_getCpuFamily(); - const uint64_t cpu_features = android_getCpuFeatures(); - if (feature == kNEON) { - return cpu_family == ANDROID_CPU_FAMILY_ARM && - (cpu_features & ANDROID_CPU_ARM_FEATURE_NEON) != 0; - } - return 0; -} -VP8CPUInfo VP8GetCPUInfo = AndroidCPUInfo; -#elif defined(WEBP_USE_NEON) -// define a dummy function to enable turning off NEON at runtime by setting -// VP8DecGetCPUInfo = NULL -static int armCPUInfo(CPUFeature feature) { - if (feature != kNEON) return 0; -#if defined(__linux__) && defined(WEBP_HAVE_NEON_RTCD) - { - int has_neon = 0; - char line[200]; - FILE* const cpuinfo = fopen("/proc/cpuinfo", "r"); - if (cpuinfo == NULL) return 0; - while (fgets(line, sizeof(line), cpuinfo)) { - if (!strncmp(line, "Features", 8)) { - if (strstr(line, " neon ") != NULL) { - has_neon = 1; - break; - } - } - } - fclose(cpuinfo); - return has_neon; - } -#else - return 1; -#endif -} -VP8CPUInfo VP8GetCPUInfo = armCPUInfo; -#elif defined(WEBP_USE_MIPS32) || defined(WEBP_USE_MIPS_DSP_R2) || \ - defined(WEBP_USE_MSA) -static int mipsCPUInfo(CPUFeature feature) { - if ((feature == kMIPS32) || (feature == kMIPSdspR2) || (feature == kMSA)) { - return 1; - } else { - return 0; - } - -} -VP8CPUInfo VP8GetCPUInfo = mipsCPUInfo; -#else -VP8CPUInfo VP8GetCPUInfo = NULL; -#endif diff --git a/Extended/libwebp/src/dsp/dec.c b/Extended/libwebp/src/dsp/dec.c deleted file mode 100644 index 1119842..0000000 --- a/Extended/libwebp/src/dsp/dec.c +++ /dev/null @@ -1,887 +0,0 @@ -// Copyright 2010 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Speed-critical decoding functions, default plain-C implementations. -// -// Author: Skal (pascal.massimino@gmail.com) - -#include - -#include "src/dsp/dsp.h" -#include "src/dec/vp8i_dec.h" -#include "src/utils/utils.h" - -//------------------------------------------------------------------------------ - -static WEBP_INLINE uint8_t clip_8b(int v) { - return (!(v & ~0xff)) ? v : (v < 0) ? 0 : 255; -} - -//------------------------------------------------------------------------------ -// Transforms (Paragraph 14.4) - -#define STORE(x, y, v) \ - dst[(x) + (y) * BPS] = clip_8b(dst[(x) + (y) * BPS] + ((v) >> 3)) - -#define STORE2(y, dc, d, c) do { \ - const int DC = (dc); \ - STORE(0, y, DC + (d)); \ - STORE(1, y, DC + (c)); \ - STORE(2, y, DC - (c)); \ - STORE(3, y, DC - (d)); \ -} while (0) - -#define MUL1(a) ((((a) * 20091) >> 16) + (a)) -#define MUL2(a) (((a) * 35468) >> 16) - -#if !WEBP_NEON_OMIT_C_CODE -static void TransformOne_C(const int16_t* in, uint8_t* dst) { - int C[4 * 4], *tmp; - int i; - tmp = C; - for (i = 0; i < 4; ++i) { // vertical pass - const int a = in[0] + in[8]; // [-4096, 4094] - const int b = in[0] - in[8]; // [-4095, 4095] - const int c = MUL2(in[4]) - MUL1(in[12]); // [-3783, 3783] - const int d = MUL1(in[4]) + MUL2(in[12]); // [-3785, 3781] - tmp[0] = a + d; // [-7881, 7875] - tmp[1] = b + c; // [-7878, 7878] - tmp[2] = b - c; // [-7878, 7878] - tmp[3] = a - d; // [-7877, 7879] - tmp += 4; - in++; - } - // Each pass is expanding the dynamic range by ~3.85 (upper bound). - // The exact value is (2. + (20091 + 35468) / 65536). - // After the second pass, maximum interval is [-3794, 3794], assuming - // an input in [-2048, 2047] interval. We then need to add a dst value - // in the [0, 255] range. - // In the worst case scenario, the input to clip_8b() can be as large as - // [-60713, 60968]. - tmp = C; - for (i = 0; i < 4; ++i) { // horizontal pass - const int dc = tmp[0] + 4; - const int a = dc + tmp[8]; - const int b = dc - tmp[8]; - const int c = MUL2(tmp[4]) - MUL1(tmp[12]); - const int d = MUL1(tmp[4]) + MUL2(tmp[12]); - STORE(0, 0, a + d); - STORE(1, 0, b + c); - STORE(2, 0, b - c); - STORE(3, 0, a - d); - tmp++; - dst += BPS; - } -} - -// Simplified transform when only in[0], in[1] and in[4] are non-zero -static void TransformAC3_C(const int16_t* in, uint8_t* dst) { - const int a = in[0] + 4; - const int c4 = MUL2(in[4]); - const int d4 = MUL1(in[4]); - const int c1 = MUL2(in[1]); - const int d1 = MUL1(in[1]); - STORE2(0, a + d4, d1, c1); - STORE2(1, a + c4, d1, c1); - STORE2(2, a - c4, d1, c1); - STORE2(3, a - d4, d1, c1); -} -#undef MUL1 -#undef MUL2 -#undef STORE2 - -static void TransformTwo_C(const int16_t* in, uint8_t* dst, int do_two) { - TransformOne_C(in, dst); - if (do_two) { - TransformOne_C(in + 16, dst + 4); - } -} -#endif // !WEBP_NEON_OMIT_C_CODE - -static void TransformUV_C(const int16_t* in, uint8_t* dst) { - VP8Transform(in + 0 * 16, dst, 1); - VP8Transform(in + 2 * 16, dst + 4 * BPS, 1); -} - -#if !WEBP_NEON_OMIT_C_CODE -static void TransformDC_C(const int16_t* in, uint8_t* dst) { - const int DC = in[0] + 4; - int i, j; - for (j = 0; j < 4; ++j) { - for (i = 0; i < 4; ++i) { - STORE(i, j, DC); - } - } -} -#endif // !WEBP_NEON_OMIT_C_CODE - -static void TransformDCUV_C(const int16_t* in, uint8_t* dst) { - if (in[0 * 16]) VP8TransformDC(in + 0 * 16, dst); - if (in[1 * 16]) VP8TransformDC(in + 1 * 16, dst + 4); - if (in[2 * 16]) VP8TransformDC(in + 2 * 16, dst + 4 * BPS); - if (in[3 * 16]) VP8TransformDC(in + 3 * 16, dst + 4 * BPS + 4); -} - -#undef STORE - -//------------------------------------------------------------------------------ -// Paragraph 14.3 - -#if !WEBP_NEON_OMIT_C_CODE -static void TransformWHT_C(const int16_t* in, int16_t* out) { - int tmp[16]; - int i; - for (i = 0; i < 4; ++i) { - const int a0 = in[0 + i] + in[12 + i]; - const int a1 = in[4 + i] + in[ 8 + i]; - const int a2 = in[4 + i] - in[ 8 + i]; - const int a3 = in[0 + i] - in[12 + i]; - tmp[0 + i] = a0 + a1; - tmp[8 + i] = a0 - a1; - tmp[4 + i] = a3 + a2; - tmp[12 + i] = a3 - a2; - } - for (i = 0; i < 4; ++i) { - const int dc = tmp[0 + i * 4] + 3; // w/ rounder - const int a0 = dc + tmp[3 + i * 4]; - const int a1 = tmp[1 + i * 4] + tmp[2 + i * 4]; - const int a2 = tmp[1 + i * 4] - tmp[2 + i * 4]; - const int a3 = dc - tmp[3 + i * 4]; - out[ 0] = (a0 + a1) >> 3; - out[16] = (a3 + a2) >> 3; - out[32] = (a0 - a1) >> 3; - out[48] = (a3 - a2) >> 3; - out += 64; - } -} -#endif // !WEBP_NEON_OMIT_C_CODE - -void (*VP8TransformWHT)(const int16_t* in, int16_t* out); - -//------------------------------------------------------------------------------ -// Intra predictions - -#define DST(x, y) dst[(x) + (y) * BPS] - -#if !WEBP_NEON_OMIT_C_CODE -static WEBP_INLINE void TrueMotion(uint8_t* dst, int size) { - const uint8_t* top = dst - BPS; - const uint8_t* const clip0 = VP8kclip1 - top[-1]; - int y; - for (y = 0; y < size; ++y) { - const uint8_t* const clip = clip0 + dst[-1]; - int x; - for (x = 0; x < size; ++x) { - dst[x] = clip[top[x]]; - } - dst += BPS; - } -} -static void TM4_C(uint8_t* dst) { TrueMotion(dst, 4); } -static void TM8uv_C(uint8_t* dst) { TrueMotion(dst, 8); } -static void TM16_C(uint8_t* dst) { TrueMotion(dst, 16); } - -//------------------------------------------------------------------------------ -// 16x16 - -static void VE16_C(uint8_t* dst) { // vertical - int j; - for (j = 0; j < 16; ++j) { - memcpy(dst + j * BPS, dst - BPS, 16); - } -} - -static void HE16_C(uint8_t* dst) { // horizontal - int j; - for (j = 16; j > 0; --j) { - memset(dst, dst[-1], 16); - dst += BPS; - } -} - -static WEBP_INLINE void Put16(int v, uint8_t* dst) { - int j; - for (j = 0; j < 16; ++j) { - memset(dst + j * BPS, v, 16); - } -} - -static void DC16_C(uint8_t* dst) { // DC - int DC = 16; - int j; - for (j = 0; j < 16; ++j) { - DC += dst[-1 + j * BPS] + dst[j - BPS]; - } - Put16(DC >> 5, dst); -} - -static void DC16NoTop_C(uint8_t* dst) { // DC with top samples not available - int DC = 8; - int j; - for (j = 0; j < 16; ++j) { - DC += dst[-1 + j * BPS]; - } - Put16(DC >> 4, dst); -} - -static void DC16NoLeft_C(uint8_t* dst) { // DC with left samples not available - int DC = 8; - int i; - for (i = 0; i < 16; ++i) { - DC += dst[i - BPS]; - } - Put16(DC >> 4, dst); -} - -static void DC16NoTopLeft_C(uint8_t* dst) { // DC with no top and left samples - Put16(0x80, dst); -} -#endif // !WEBP_NEON_OMIT_C_CODE - -VP8PredFunc VP8PredLuma16[NUM_B_DC_MODES]; - -//------------------------------------------------------------------------------ -// 4x4 - -#define AVG3(a, b, c) ((uint8_t)(((a) + 2 * (b) + (c) + 2) >> 2)) -#define AVG2(a, b) (((a) + (b) + 1) >> 1) - -#if !WEBP_NEON_OMIT_C_CODE -static void VE4_C(uint8_t* dst) { // vertical - const uint8_t* top = dst - BPS; - const uint8_t vals[4] = { - AVG3(top[-1], top[0], top[1]), - AVG3(top[ 0], top[1], top[2]), - AVG3(top[ 1], top[2], top[3]), - AVG3(top[ 2], top[3], top[4]) - }; - int i; - for (i = 0; i < 4; ++i) { - memcpy(dst + i * BPS, vals, sizeof(vals)); - } -} -#endif // !WEBP_NEON_OMIT_C_CODE - -static void HE4_C(uint8_t* dst) { // horizontal - const int A = dst[-1 - BPS]; - const int B = dst[-1]; - const int C = dst[-1 + BPS]; - const int D = dst[-1 + 2 * BPS]; - const int E = dst[-1 + 3 * BPS]; - WebPUint32ToMem(dst + 0 * BPS, 0x01010101U * AVG3(A, B, C)); - WebPUint32ToMem(dst + 1 * BPS, 0x01010101U * AVG3(B, C, D)); - WebPUint32ToMem(dst + 2 * BPS, 0x01010101U * AVG3(C, D, E)); - WebPUint32ToMem(dst + 3 * BPS, 0x01010101U * AVG3(D, E, E)); -} - -#if !WEBP_NEON_OMIT_C_CODE -static void DC4_C(uint8_t* dst) { // DC - uint32_t dc = 4; - int i; - for (i = 0; i < 4; ++i) dc += dst[i - BPS] + dst[-1 + i * BPS]; - dc >>= 3; - for (i = 0; i < 4; ++i) memset(dst + i * BPS, dc, 4); -} - -static void RD4_C(uint8_t* dst) { // Down-right - const int I = dst[-1 + 0 * BPS]; - const int J = dst[-1 + 1 * BPS]; - const int K = dst[-1 + 2 * BPS]; - const int L = dst[-1 + 3 * BPS]; - const int X = dst[-1 - BPS]; - const int A = dst[0 - BPS]; - const int B = dst[1 - BPS]; - const int C = dst[2 - BPS]; - const int D = dst[3 - BPS]; - DST(0, 3) = AVG3(J, K, L); - DST(1, 3) = DST(0, 2) = AVG3(I, J, K); - DST(2, 3) = DST(1, 2) = DST(0, 1) = AVG3(X, I, J); - DST(3, 3) = DST(2, 2) = DST(1, 1) = DST(0, 0) = AVG3(A, X, I); - DST(3, 2) = DST(2, 1) = DST(1, 0) = AVG3(B, A, X); - DST(3, 1) = DST(2, 0) = AVG3(C, B, A); - DST(3, 0) = AVG3(D, C, B); -} - -static void LD4_C(uint8_t* dst) { // Down-Left - const int A = dst[0 - BPS]; - const int B = dst[1 - BPS]; - const int C = dst[2 - BPS]; - const int D = dst[3 - BPS]; - const int E = dst[4 - BPS]; - const int F = dst[5 - BPS]; - const int G = dst[6 - BPS]; - const int H = dst[7 - BPS]; - DST(0, 0) = AVG3(A, B, C); - DST(1, 0) = DST(0, 1) = AVG3(B, C, D); - DST(2, 0) = DST(1, 1) = DST(0, 2) = AVG3(C, D, E); - DST(3, 0) = DST(2, 1) = DST(1, 2) = DST(0, 3) = AVG3(D, E, F); - DST(3, 1) = DST(2, 2) = DST(1, 3) = AVG3(E, F, G); - DST(3, 2) = DST(2, 3) = AVG3(F, G, H); - DST(3, 3) = AVG3(G, H, H); -} -#endif // !WEBP_NEON_OMIT_C_CODE - -static void VR4_C(uint8_t* dst) { // Vertical-Right - const int I = dst[-1 + 0 * BPS]; - const int J = dst[-1 + 1 * BPS]; - const int K = dst[-1 + 2 * BPS]; - const int X = dst[-1 - BPS]; - const int A = dst[0 - BPS]; - const int B = dst[1 - BPS]; - const int C = dst[2 - BPS]; - const int D = dst[3 - BPS]; - DST(0, 0) = DST(1, 2) = AVG2(X, A); - DST(1, 0) = DST(2, 2) = AVG2(A, B); - DST(2, 0) = DST(3, 2) = AVG2(B, C); - DST(3, 0) = AVG2(C, D); - - DST(0, 3) = AVG3(K, J, I); - DST(0, 2) = AVG3(J, I, X); - DST(0, 1) = DST(1, 3) = AVG3(I, X, A); - DST(1, 1) = DST(2, 3) = AVG3(X, A, B); - DST(2, 1) = DST(3, 3) = AVG3(A, B, C); - DST(3, 1) = AVG3(B, C, D); -} - -static void VL4_C(uint8_t* dst) { // Vertical-Left - const int A = dst[0 - BPS]; - const int B = dst[1 - BPS]; - const int C = dst[2 - BPS]; - const int D = dst[3 - BPS]; - const int E = dst[4 - BPS]; - const int F = dst[5 - BPS]; - const int G = dst[6 - BPS]; - const int H = dst[7 - BPS]; - DST(0, 0) = AVG2(A, B); - DST(1, 0) = DST(0, 2) = AVG2(B, C); - DST(2, 0) = DST(1, 2) = AVG2(C, D); - DST(3, 0) = DST(2, 2) = AVG2(D, E); - - DST(0, 1) = AVG3(A, B, C); - DST(1, 1) = DST(0, 3) = AVG3(B, C, D); - DST(2, 1) = DST(1, 3) = AVG3(C, D, E); - DST(3, 1) = DST(2, 3) = AVG3(D, E, F); - DST(3, 2) = AVG3(E, F, G); - DST(3, 3) = AVG3(F, G, H); -} - -static void HU4_C(uint8_t* dst) { // Horizontal-Up - const int I = dst[-1 + 0 * BPS]; - const int J = dst[-1 + 1 * BPS]; - const int K = dst[-1 + 2 * BPS]; - const int L = dst[-1 + 3 * BPS]; - DST(0, 0) = AVG2(I, J); - DST(2, 0) = DST(0, 1) = AVG2(J, K); - DST(2, 1) = DST(0, 2) = AVG2(K, L); - DST(1, 0) = AVG3(I, J, K); - DST(3, 0) = DST(1, 1) = AVG3(J, K, L); - DST(3, 1) = DST(1, 2) = AVG3(K, L, L); - DST(3, 2) = DST(2, 2) = - DST(0, 3) = DST(1, 3) = DST(2, 3) = DST(3, 3) = L; -} - -static void HD4_C(uint8_t* dst) { // Horizontal-Down - const int I = dst[-1 + 0 * BPS]; - const int J = dst[-1 + 1 * BPS]; - const int K = dst[-1 + 2 * BPS]; - const int L = dst[-1 + 3 * BPS]; - const int X = dst[-1 - BPS]; - const int A = dst[0 - BPS]; - const int B = dst[1 - BPS]; - const int C = dst[2 - BPS]; - - DST(0, 0) = DST(2, 1) = AVG2(I, X); - DST(0, 1) = DST(2, 2) = AVG2(J, I); - DST(0, 2) = DST(2, 3) = AVG2(K, J); - DST(0, 3) = AVG2(L, K); - - DST(3, 0) = AVG3(A, B, C); - DST(2, 0) = AVG3(X, A, B); - DST(1, 0) = DST(3, 1) = AVG3(I, X, A); - DST(1, 1) = DST(3, 2) = AVG3(J, I, X); - DST(1, 2) = DST(3, 3) = AVG3(K, J, I); - DST(1, 3) = AVG3(L, K, J); -} - -#undef DST -#undef AVG3 -#undef AVG2 - -VP8PredFunc VP8PredLuma4[NUM_BMODES]; - -//------------------------------------------------------------------------------ -// Chroma - -#if !WEBP_NEON_OMIT_C_CODE -static void VE8uv_C(uint8_t* dst) { // vertical - int j; - for (j = 0; j < 8; ++j) { - memcpy(dst + j * BPS, dst - BPS, 8); - } -} - -static void HE8uv_C(uint8_t* dst) { // horizontal - int j; - for (j = 0; j < 8; ++j) { - memset(dst, dst[-1], 8); - dst += BPS; - } -} - -// helper for chroma-DC predictions -static WEBP_INLINE void Put8x8uv(uint8_t value, uint8_t* dst) { - int j; - for (j = 0; j < 8; ++j) { - memset(dst + j * BPS, value, 8); - } -} - -static void DC8uv_C(uint8_t* dst) { // DC - int dc0 = 8; - int i; - for (i = 0; i < 8; ++i) { - dc0 += dst[i - BPS] + dst[-1 + i * BPS]; - } - Put8x8uv(dc0 >> 4, dst); -} - -static void DC8uvNoLeft_C(uint8_t* dst) { // DC with no left samples - int dc0 = 4; - int i; - for (i = 0; i < 8; ++i) { - dc0 += dst[i - BPS]; - } - Put8x8uv(dc0 >> 3, dst); -} - -static void DC8uvNoTop_C(uint8_t* dst) { // DC with no top samples - int dc0 = 4; - int i; - for (i = 0; i < 8; ++i) { - dc0 += dst[-1 + i * BPS]; - } - Put8x8uv(dc0 >> 3, dst); -} - -static void DC8uvNoTopLeft_C(uint8_t* dst) { // DC with nothing - Put8x8uv(0x80, dst); -} -#endif // !WEBP_NEON_OMIT_C_CODE - -VP8PredFunc VP8PredChroma8[NUM_B_DC_MODES]; - -//------------------------------------------------------------------------------ -// Edge filtering functions - -#if !WEBP_NEON_OMIT_C_CODE || WEBP_NEON_WORK_AROUND_GCC -// 4 pixels in, 2 pixels out -static WEBP_INLINE void DoFilter2_C(uint8_t* p, int step) { - const int p1 = p[-2*step], p0 = p[-step], q0 = p[0], q1 = p[step]; - const int a = 3 * (q0 - p0) + VP8ksclip1[p1 - q1]; // in [-893,892] - const int a1 = VP8ksclip2[(a + 4) >> 3]; // in [-16,15] - const int a2 = VP8ksclip2[(a + 3) >> 3]; - p[-step] = VP8kclip1[p0 + a2]; - p[ 0] = VP8kclip1[q0 - a1]; -} - -// 4 pixels in, 4 pixels out -static WEBP_INLINE void DoFilter4_C(uint8_t* p, int step) { - const int p1 = p[-2*step], p0 = p[-step], q0 = p[0], q1 = p[step]; - const int a = 3 * (q0 - p0); - const int a1 = VP8ksclip2[(a + 4) >> 3]; - const int a2 = VP8ksclip2[(a + 3) >> 3]; - const int a3 = (a1 + 1) >> 1; - p[-2*step] = VP8kclip1[p1 + a3]; - p[- step] = VP8kclip1[p0 + a2]; - p[ 0] = VP8kclip1[q0 - a1]; - p[ step] = VP8kclip1[q1 - a3]; -} - -// 6 pixels in, 6 pixels out -static WEBP_INLINE void DoFilter6_C(uint8_t* p, int step) { - const int p2 = p[-3*step], p1 = p[-2*step], p0 = p[-step]; - const int q0 = p[0], q1 = p[step], q2 = p[2*step]; - const int a = VP8ksclip1[3 * (q0 - p0) + VP8ksclip1[p1 - q1]]; - // a is in [-128,127], a1 in [-27,27], a2 in [-18,18] and a3 in [-9,9] - const int a1 = (27 * a + 63) >> 7; // eq. to ((3 * a + 7) * 9) >> 7 - const int a2 = (18 * a + 63) >> 7; // eq. to ((2 * a + 7) * 9) >> 7 - const int a3 = (9 * a + 63) >> 7; // eq. to ((1 * a + 7) * 9) >> 7 - p[-3*step] = VP8kclip1[p2 + a3]; - p[-2*step] = VP8kclip1[p1 + a2]; - p[- step] = VP8kclip1[p0 + a1]; - p[ 0] = VP8kclip1[q0 - a1]; - p[ step] = VP8kclip1[q1 - a2]; - p[ 2*step] = VP8kclip1[q2 - a3]; -} - -static WEBP_INLINE int Hev(const uint8_t* p, int step, int thresh) { - const int p1 = p[-2*step], p0 = p[-step], q0 = p[0], q1 = p[step]; - return (VP8kabs0[p1 - p0] > thresh) || (VP8kabs0[q1 - q0] > thresh); -} -#endif // !WEBP_NEON_OMIT_C_CODE || WEBP_NEON_WORK_AROUND_GCC - -#if !WEBP_NEON_OMIT_C_CODE -static WEBP_INLINE int NeedsFilter_C(const uint8_t* p, int step, int t) { - const int p1 = p[-2 * step], p0 = p[-step], q0 = p[0], q1 = p[step]; - return ((4 * VP8kabs0[p0 - q0] + VP8kabs0[p1 - q1]) <= t); -} -#endif // !WEBP_NEON_OMIT_C_CODE - -#if !WEBP_NEON_OMIT_C_CODE || WEBP_NEON_WORK_AROUND_GCC -static WEBP_INLINE int NeedsFilter2_C(const uint8_t* p, - int step, int t, int it) { - const int p3 = p[-4 * step], p2 = p[-3 * step], p1 = p[-2 * step]; - const int p0 = p[-step], q0 = p[0]; - const int q1 = p[step], q2 = p[2 * step], q3 = p[3 * step]; - if ((4 * VP8kabs0[p0 - q0] + VP8kabs0[p1 - q1]) > t) return 0; - return VP8kabs0[p3 - p2] <= it && VP8kabs0[p2 - p1] <= it && - VP8kabs0[p1 - p0] <= it && VP8kabs0[q3 - q2] <= it && - VP8kabs0[q2 - q1] <= it && VP8kabs0[q1 - q0] <= it; -} -#endif // !WEBP_NEON_OMIT_C_CODE || WEBP_NEON_WORK_AROUND_GCC - -//------------------------------------------------------------------------------ -// Simple In-loop filtering (Paragraph 15.2) - -#if !WEBP_NEON_OMIT_C_CODE -static void SimpleVFilter16_C(uint8_t* p, int stride, int thresh) { - int i; - const int thresh2 = 2 * thresh + 1; - for (i = 0; i < 16; ++i) { - if (NeedsFilter_C(p + i, stride, thresh2)) { - DoFilter2_C(p + i, stride); - } - } -} - -static void SimpleHFilter16_C(uint8_t* p, int stride, int thresh) { - int i; - const int thresh2 = 2 * thresh + 1; - for (i = 0; i < 16; ++i) { - if (NeedsFilter_C(p + i * stride, 1, thresh2)) { - DoFilter2_C(p + i * stride, 1); - } - } -} - -static void SimpleVFilter16i_C(uint8_t* p, int stride, int thresh) { - int k; - for (k = 3; k > 0; --k) { - p += 4 * stride; - SimpleVFilter16_C(p, stride, thresh); - } -} - -static void SimpleHFilter16i_C(uint8_t* p, int stride, int thresh) { - int k; - for (k = 3; k > 0; --k) { - p += 4; - SimpleHFilter16_C(p, stride, thresh); - } -} -#endif // !WEBP_NEON_OMIT_C_CODE - -//------------------------------------------------------------------------------ -// Complex In-loop filtering (Paragraph 15.3) - -#if !WEBP_NEON_OMIT_C_CODE || WEBP_NEON_WORK_AROUND_GCC -static WEBP_INLINE void FilterLoop26_C(uint8_t* p, - int hstride, int vstride, int size, - int thresh, int ithresh, - int hev_thresh) { - const int thresh2 = 2 * thresh + 1; - while (size-- > 0) { - if (NeedsFilter2_C(p, hstride, thresh2, ithresh)) { - if (Hev(p, hstride, hev_thresh)) { - DoFilter2_C(p, hstride); - } else { - DoFilter6_C(p, hstride); - } - } - p += vstride; - } -} - -static WEBP_INLINE void FilterLoop24_C(uint8_t* p, - int hstride, int vstride, int size, - int thresh, int ithresh, - int hev_thresh) { - const int thresh2 = 2 * thresh + 1; - while (size-- > 0) { - if (NeedsFilter2_C(p, hstride, thresh2, ithresh)) { - if (Hev(p, hstride, hev_thresh)) { - DoFilter2_C(p, hstride); - } else { - DoFilter4_C(p, hstride); - } - } - p += vstride; - } -} -#endif // !WEBP_NEON_OMIT_C_CODE || WEBP_NEON_WORK_AROUND_GCC - -#if !WEBP_NEON_OMIT_C_CODE -// on macroblock edges -static void VFilter16_C(uint8_t* p, int stride, - int thresh, int ithresh, int hev_thresh) { - FilterLoop26_C(p, stride, 1, 16, thresh, ithresh, hev_thresh); -} - -static void HFilter16_C(uint8_t* p, int stride, - int thresh, int ithresh, int hev_thresh) { - FilterLoop26_C(p, 1, stride, 16, thresh, ithresh, hev_thresh); -} - -// on three inner edges -static void VFilter16i_C(uint8_t* p, int stride, - int thresh, int ithresh, int hev_thresh) { - int k; - for (k = 3; k > 0; --k) { - p += 4 * stride; - FilterLoop24_C(p, stride, 1, 16, thresh, ithresh, hev_thresh); - } -} -#endif // !WEBP_NEON_OMIT_C_CODE - -#if !WEBP_NEON_OMIT_C_CODE || WEBP_NEON_WORK_AROUND_GCC -static void HFilter16i_C(uint8_t* p, int stride, - int thresh, int ithresh, int hev_thresh) { - int k; - for (k = 3; k > 0; --k) { - p += 4; - FilterLoop24_C(p, 1, stride, 16, thresh, ithresh, hev_thresh); - } -} -#endif // !WEBP_NEON_OMIT_C_CODE || WEBP_NEON_WORK_AROUND_GCC - -#if !WEBP_NEON_OMIT_C_CODE -// 8-pixels wide variant, for chroma filtering -static void VFilter8_C(uint8_t* u, uint8_t* v, int stride, - int thresh, int ithresh, int hev_thresh) { - FilterLoop26_C(u, stride, 1, 8, thresh, ithresh, hev_thresh); - FilterLoop26_C(v, stride, 1, 8, thresh, ithresh, hev_thresh); -} -#endif // !WEBP_NEON_OMIT_C_CODE - -#if !WEBP_NEON_OMIT_C_CODE || WEBP_NEON_WORK_AROUND_GCC -static void HFilter8_C(uint8_t* u, uint8_t* v, int stride, - int thresh, int ithresh, int hev_thresh) { - FilterLoop26_C(u, 1, stride, 8, thresh, ithresh, hev_thresh); - FilterLoop26_C(v, 1, stride, 8, thresh, ithresh, hev_thresh); -} -#endif // !WEBP_NEON_OMIT_C_CODE || WEBP_NEON_WORK_AROUND_GCC - -#if !WEBP_NEON_OMIT_C_CODE -static void VFilter8i_C(uint8_t* u, uint8_t* v, int stride, - int thresh, int ithresh, int hev_thresh) { - FilterLoop24_C(u + 4 * stride, stride, 1, 8, thresh, ithresh, hev_thresh); - FilterLoop24_C(v + 4 * stride, stride, 1, 8, thresh, ithresh, hev_thresh); -} -#endif // !WEBP_NEON_OMIT_C_CODE - -#if !WEBP_NEON_OMIT_C_CODE || WEBP_NEON_WORK_AROUND_GCC -static void HFilter8i_C(uint8_t* u, uint8_t* v, int stride, - int thresh, int ithresh, int hev_thresh) { - FilterLoop24_C(u + 4, 1, stride, 8, thresh, ithresh, hev_thresh); - FilterLoop24_C(v + 4, 1, stride, 8, thresh, ithresh, hev_thresh); -} -#endif // !WEBP_NEON_OMIT_C_CODE || WEBP_NEON_WORK_AROUND_GCC - -//------------------------------------------------------------------------------ - -static void DitherCombine8x8_C(const uint8_t* dither, uint8_t* dst, - int dst_stride) { - int i, j; - for (j = 0; j < 8; ++j) { - for (i = 0; i < 8; ++i) { - const int delta0 = dither[i] - VP8_DITHER_AMP_CENTER; - const int delta1 = - (delta0 + VP8_DITHER_DESCALE_ROUNDER) >> VP8_DITHER_DESCALE; - dst[i] = clip_8b((int)dst[i] + delta1); - } - dst += dst_stride; - dither += 8; - } -} - -//------------------------------------------------------------------------------ - -VP8DecIdct2 VP8Transform; -VP8DecIdct VP8TransformAC3; -VP8DecIdct VP8TransformUV; -VP8DecIdct VP8TransformDC; -VP8DecIdct VP8TransformDCUV; - -VP8LumaFilterFunc VP8VFilter16; -VP8LumaFilterFunc VP8HFilter16; -VP8ChromaFilterFunc VP8VFilter8; -VP8ChromaFilterFunc VP8HFilter8; -VP8LumaFilterFunc VP8VFilter16i; -VP8LumaFilterFunc VP8HFilter16i; -VP8ChromaFilterFunc VP8VFilter8i; -VP8ChromaFilterFunc VP8HFilter8i; -VP8SimpleFilterFunc VP8SimpleVFilter16; -VP8SimpleFilterFunc VP8SimpleHFilter16; -VP8SimpleFilterFunc VP8SimpleVFilter16i; -VP8SimpleFilterFunc VP8SimpleHFilter16i; - -void (*VP8DitherCombine8x8)(const uint8_t* dither, uint8_t* dst, - int dst_stride); - -extern void VP8DspInitSSE2(void); -extern void VP8DspInitSSE41(void); -extern void VP8DspInitNEON(void); -extern void VP8DspInitMIPS32(void); -extern void VP8DspInitMIPSdspR2(void); -extern void VP8DspInitMSA(void); - -WEBP_DSP_INIT_FUNC(VP8DspInit) { - VP8InitClipTables(); - -#if !WEBP_NEON_OMIT_C_CODE - VP8TransformWHT = TransformWHT_C; - VP8Transform = TransformTwo_C; - VP8TransformDC = TransformDC_C; - VP8TransformAC3 = TransformAC3_C; -#endif - VP8TransformUV = TransformUV_C; - VP8TransformDCUV = TransformDCUV_C; - -#if !WEBP_NEON_OMIT_C_CODE - VP8VFilter16 = VFilter16_C; - VP8VFilter16i = VFilter16i_C; - VP8HFilter16 = HFilter16_C; - VP8VFilter8 = VFilter8_C; - VP8VFilter8i = VFilter8i_C; - VP8SimpleVFilter16 = SimpleVFilter16_C; - VP8SimpleHFilter16 = SimpleHFilter16_C; - VP8SimpleVFilter16i = SimpleVFilter16i_C; - VP8SimpleHFilter16i = SimpleHFilter16i_C; -#endif - -#if !WEBP_NEON_OMIT_C_CODE || WEBP_NEON_WORK_AROUND_GCC - VP8HFilter16i = HFilter16i_C; - VP8HFilter8 = HFilter8_C; - VP8HFilter8i = HFilter8i_C; -#endif - -#if !WEBP_NEON_OMIT_C_CODE - VP8PredLuma4[0] = DC4_C; - VP8PredLuma4[1] = TM4_C; - VP8PredLuma4[2] = VE4_C; - VP8PredLuma4[4] = RD4_C; - VP8PredLuma4[6] = LD4_C; -#endif - - VP8PredLuma4[3] = HE4_C; - VP8PredLuma4[5] = VR4_C; - VP8PredLuma4[7] = VL4_C; - VP8PredLuma4[8] = HD4_C; - VP8PredLuma4[9] = HU4_C; - -#if !WEBP_NEON_OMIT_C_CODE - VP8PredLuma16[0] = DC16_C; - VP8PredLuma16[1] = TM16_C; - VP8PredLuma16[2] = VE16_C; - VP8PredLuma16[3] = HE16_C; - VP8PredLuma16[4] = DC16NoTop_C; - VP8PredLuma16[5] = DC16NoLeft_C; - VP8PredLuma16[6] = DC16NoTopLeft_C; - - VP8PredChroma8[0] = DC8uv_C; - VP8PredChroma8[1] = TM8uv_C; - VP8PredChroma8[2] = VE8uv_C; - VP8PredChroma8[3] = HE8uv_C; - VP8PredChroma8[4] = DC8uvNoTop_C; - VP8PredChroma8[5] = DC8uvNoLeft_C; - VP8PredChroma8[6] = DC8uvNoTopLeft_C; -#endif - - VP8DitherCombine8x8 = DitherCombine8x8_C; - - // If defined, use CPUInfo() to overwrite some pointers with faster versions. - if (VP8GetCPUInfo != NULL) { -#if defined(WEBP_USE_SSE2) - if (VP8GetCPUInfo(kSSE2)) { - VP8DspInitSSE2(); -#if defined(WEBP_USE_SSE41) - if (VP8GetCPUInfo(kSSE4_1)) { - VP8DspInitSSE41(); - } -#endif - } -#endif -#if defined(WEBP_USE_MIPS32) - if (VP8GetCPUInfo(kMIPS32)) { - VP8DspInitMIPS32(); - } -#endif -#if defined(WEBP_USE_MIPS_DSP_R2) - if (VP8GetCPUInfo(kMIPSdspR2)) { - VP8DspInitMIPSdspR2(); - } -#endif -#if defined(WEBP_USE_MSA) - if (VP8GetCPUInfo(kMSA)) { - VP8DspInitMSA(); - } -#endif - } - -#if defined(WEBP_USE_NEON) - if (WEBP_NEON_OMIT_C_CODE || - (VP8GetCPUInfo != NULL && VP8GetCPUInfo(kNEON))) { - VP8DspInitNEON(); - } -#endif - - assert(VP8TransformWHT != NULL); - assert(VP8Transform != NULL); - assert(VP8TransformDC != NULL); - assert(VP8TransformAC3 != NULL); - assert(VP8TransformUV != NULL); - assert(VP8TransformDCUV != NULL); - assert(VP8VFilter16 != NULL); - assert(VP8HFilter16 != NULL); - assert(VP8VFilter8 != NULL); - assert(VP8HFilter8 != NULL); - assert(VP8VFilter16i != NULL); - assert(VP8HFilter16i != NULL); - assert(VP8VFilter8i != NULL); - assert(VP8HFilter8i != NULL); - assert(VP8SimpleVFilter16 != NULL); - assert(VP8SimpleHFilter16 != NULL); - assert(VP8SimpleVFilter16i != NULL); - assert(VP8SimpleHFilter16i != NULL); - assert(VP8PredLuma4[0] != NULL); - assert(VP8PredLuma4[1] != NULL); - assert(VP8PredLuma4[2] != NULL); - assert(VP8PredLuma4[3] != NULL); - assert(VP8PredLuma4[4] != NULL); - assert(VP8PredLuma4[5] != NULL); - assert(VP8PredLuma4[6] != NULL); - assert(VP8PredLuma4[7] != NULL); - assert(VP8PredLuma4[8] != NULL); - assert(VP8PredLuma4[9] != NULL); - assert(VP8PredLuma16[0] != NULL); - assert(VP8PredLuma16[1] != NULL); - assert(VP8PredLuma16[2] != NULL); - assert(VP8PredLuma16[3] != NULL); - assert(VP8PredLuma16[4] != NULL); - assert(VP8PredLuma16[5] != NULL); - assert(VP8PredLuma16[6] != NULL); - assert(VP8PredChroma8[0] != NULL); - assert(VP8PredChroma8[1] != NULL); - assert(VP8PredChroma8[2] != NULL); - assert(VP8PredChroma8[3] != NULL); - assert(VP8PredChroma8[4] != NULL); - assert(VP8PredChroma8[5] != NULL); - assert(VP8PredChroma8[6] != NULL); - assert(VP8DitherCombine8x8 != NULL); -} diff --git a/Extended/libwebp/src/dsp/dec_clip_tables.c b/Extended/libwebp/src/dsp/dec_clip_tables.c deleted file mode 100644 index 427b74f..0000000 --- a/Extended/libwebp/src/dsp/dec_clip_tables.c +++ /dev/null @@ -1,369 +0,0 @@ -// Copyright 2014 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Clipping tables for filtering -// -// Author: Skal (pascal.massimino@gmail.com) - -#include "src/dsp/dsp.h" - -// define to 0 to have run-time table initialization -#if !defined(USE_STATIC_TABLES) -#define USE_STATIC_TABLES 1 // ALTERNATE_CODE -#endif - -#if (USE_STATIC_TABLES == 1) - -static const uint8_t abs0[255 + 255 + 1] = { - 0xff, 0xfe, 0xfd, 0xfc, 0xfb, 0xfa, 0xf9, 0xf8, 0xf7, 0xf6, 0xf5, 0xf4, - 0xf3, 0xf2, 0xf1, 0xf0, 0xef, 0xee, 0xed, 0xec, 0xeb, 0xea, 0xe9, 0xe8, - 0xe7, 0xe6, 0xe5, 0xe4, 0xe3, 0xe2, 0xe1, 0xe0, 0xdf, 0xde, 0xdd, 0xdc, - 0xdb, 0xda, 0xd9, 0xd8, 0xd7, 0xd6, 0xd5, 0xd4, 0xd3, 0xd2, 0xd1, 0xd0, - 0xcf, 0xce, 0xcd, 0xcc, 0xcb, 0xca, 0xc9, 0xc8, 0xc7, 0xc6, 0xc5, 0xc4, - 0xc3, 0xc2, 0xc1, 0xc0, 0xbf, 0xbe, 0xbd, 0xbc, 0xbb, 0xba, 0xb9, 0xb8, - 0xb7, 0xb6, 0xb5, 0xb4, 0xb3, 0xb2, 0xb1, 0xb0, 0xaf, 0xae, 0xad, 0xac, - 0xab, 0xaa, 0xa9, 0xa8, 0xa7, 0xa6, 0xa5, 0xa4, 0xa3, 0xa2, 0xa1, 0xa0, - 0x9f, 0x9e, 0x9d, 0x9c, 0x9b, 0x9a, 0x99, 0x98, 0x97, 0x96, 0x95, 0x94, - 0x93, 0x92, 0x91, 0x90, 0x8f, 0x8e, 0x8d, 0x8c, 0x8b, 0x8a, 0x89, 0x88, - 0x87, 0x86, 0x85, 0x84, 0x83, 0x82, 0x81, 0x80, 0x7f, 0x7e, 0x7d, 0x7c, - 0x7b, 0x7a, 0x79, 0x78, 0x77, 0x76, 0x75, 0x74, 0x73, 0x72, 0x71, 0x70, - 0x6f, 0x6e, 0x6d, 0x6c, 0x6b, 0x6a, 0x69, 0x68, 0x67, 0x66, 0x65, 0x64, - 0x63, 0x62, 0x61, 0x60, 0x5f, 0x5e, 0x5d, 0x5c, 0x5b, 0x5a, 0x59, 0x58, - 0x57, 0x56, 0x55, 0x54, 0x53, 0x52, 0x51, 0x50, 0x4f, 0x4e, 0x4d, 0x4c, - 0x4b, 0x4a, 0x49, 0x48, 0x47, 0x46, 0x45, 0x44, 0x43, 0x42, 0x41, 0x40, - 0x3f, 0x3e, 0x3d, 0x3c, 0x3b, 0x3a, 0x39, 0x38, 0x37, 0x36, 0x35, 0x34, - 0x33, 0x32, 0x31, 0x30, 0x2f, 0x2e, 0x2d, 0x2c, 0x2b, 0x2a, 0x29, 0x28, - 0x27, 0x26, 0x25, 0x24, 0x23, 0x22, 0x21, 0x20, 0x1f, 0x1e, 0x1d, 0x1c, - 0x1b, 0x1a, 0x19, 0x18, 0x17, 0x16, 0x15, 0x14, 0x13, 0x12, 0x11, 0x10, - 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08, 0x07, 0x06, 0x05, 0x04, - 0x03, 0x02, 0x01, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, - 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, - 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, - 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, - 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, - 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, - 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, - 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, - 0x5d, 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, - 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, - 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 0x80, - 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, - 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, - 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, - 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, - 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, - 0xbd, 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, - 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, - 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xe0, - 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, - 0xed, 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, - 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff -}; - -static const uint8_t sclip1[1020 + 1020 + 1] = { - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, - 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, - 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, - 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, - 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, - 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, - 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, - 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, - 0xdc, 0xdd, 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, - 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, - 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, - 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, - 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, - 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, - 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, - 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, - 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, - 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, - 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, - 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, - 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, - 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f -}; - -static const uint8_t sclip2[112 + 112 + 1] = { - 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, - 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, - 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, - 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, - 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, - 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, - 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, - 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, - 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, - 0xfc, 0xfd, 0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, - 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, - 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, - 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, - 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, - 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, - 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, - 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, - 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, - 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f -}; - -static const uint8_t clip1[255 + 511 + 1] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, - 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, - 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, - 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, - 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, - 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, - 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, - 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, - 0x5d, 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, - 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, - 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 0x80, - 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, - 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, - 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, - 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, - 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, - 0xbd, 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, - 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, - 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xe0, - 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, - 0xed, 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, - 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff -}; - -#else - -// uninitialized tables -static uint8_t abs0[255 + 255 + 1]; -static int8_t sclip1[1020 + 1020 + 1]; -static int8_t sclip2[112 + 112 + 1]; -static uint8_t clip1[255 + 511 + 1]; - -// We declare this variable 'volatile' to prevent instruction reordering -// and make sure it's set to true _last_ (so as to be thread-safe) -static volatile int tables_ok = 0; - -#endif // USE_STATIC_TABLES - -const int8_t* const VP8ksclip1 = (const int8_t*)&sclip1[1020]; -const int8_t* const VP8ksclip2 = (const int8_t*)&sclip2[112]; -const uint8_t* const VP8kclip1 = &clip1[255]; -const uint8_t* const VP8kabs0 = &abs0[255]; - -WEBP_TSAN_IGNORE_FUNCTION void VP8InitClipTables(void) { -#if (USE_STATIC_TABLES == 0) - int i; - if (!tables_ok) { - for (i = -255; i <= 255; ++i) { - abs0[255 + i] = (i < 0) ? -i : i; - } - for (i = -1020; i <= 1020; ++i) { - sclip1[1020 + i] = (i < -128) ? -128 : (i > 127) ? 127 : i; - } - for (i = -112; i <= 112; ++i) { - sclip2[112 + i] = (i < -16) ? -16 : (i > 15) ? 15 : i; - } - for (i = -255; i <= 255 + 255; ++i) { - clip1[255 + i] = (i < 0) ? 0 : (i > 255) ? 255 : i; - } - tables_ok = 1; - } -#endif // USE_STATIC_TABLES -} diff --git a/Extended/libwebp/src/dsp/dec_mips32.c b/Extended/libwebp/src/dsp/dec_mips32.c deleted file mode 100644 index e4e7096..0000000 --- a/Extended/libwebp/src/dsp/dec_mips32.c +++ /dev/null @@ -1,587 +0,0 @@ -// Copyright 2014 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// MIPS version of dsp functions -// -// Author(s): Djordje Pesut (djordje.pesut@imgtec.com) -// Jovan Zelincevic (jovan.zelincevic@imgtec.com) - -#include "src/dsp/dsp.h" - -#if defined(WEBP_USE_MIPS32) - -#include "src/dsp/mips_macro.h" - -static const int kC1 = 20091 + (1 << 16); -static const int kC2 = 35468; - -static WEBP_INLINE int abs_mips32(int x) { - const int sign = x >> 31; - return (x ^ sign) - sign; -} - -// 4 pixels in, 2 pixels out -static WEBP_INLINE void do_filter2(uint8_t* p, int step) { - const int p1 = p[-2 * step], p0 = p[-step], q0 = p[0], q1 = p[step]; - const int a = 3 * (q0 - p0) + VP8ksclip1[p1 - q1]; - const int a1 = VP8ksclip2[(a + 4) >> 3]; - const int a2 = VP8ksclip2[(a + 3) >> 3]; - p[-step] = VP8kclip1[p0 + a2]; - p[ 0] = VP8kclip1[q0 - a1]; -} - -// 4 pixels in, 4 pixels out -static WEBP_INLINE void do_filter4(uint8_t* p, int step) { - const int p1 = p[-2 * step], p0 = p[-step], q0 = p[0], q1 = p[step]; - const int a = 3 * (q0 - p0); - const int a1 = VP8ksclip2[(a + 4) >> 3]; - const int a2 = VP8ksclip2[(a + 3) >> 3]; - const int a3 = (a1 + 1) >> 1; - p[-2 * step] = VP8kclip1[p1 + a3]; - p[- step] = VP8kclip1[p0 + a2]; - p[ 0] = VP8kclip1[q0 - a1]; - p[ step] = VP8kclip1[q1 - a3]; -} - -// 6 pixels in, 6 pixels out -static WEBP_INLINE void do_filter6(uint8_t* p, int step) { - const int p2 = p[-3 * step], p1 = p[-2 * step], p0 = p[-step]; - const int q0 = p[0], q1 = p[step], q2 = p[2 * step]; - const int a = VP8ksclip1[3 * (q0 - p0) + VP8ksclip1[p1 - q1]]; - // a is in [-128,127], a1 in [-27,27], a2 in [-18,18] and a3 in [-9,9] - const int a1 = (27 * a + 63) >> 7; // eq. to ((3 * a + 7) * 9) >> 7 - const int a2 = (18 * a + 63) >> 7; // eq. to ((2 * a + 7) * 9) >> 7 - const int a3 = (9 * a + 63) >> 7; // eq. to ((1 * a + 7) * 9) >> 7 - p[-3 * step] = VP8kclip1[p2 + a3]; - p[-2 * step] = VP8kclip1[p1 + a2]; - p[- step] = VP8kclip1[p0 + a1]; - p[ 0] = VP8kclip1[q0 - a1]; - p[ step] = VP8kclip1[q1 - a2]; - p[ 2 * step] = VP8kclip1[q2 - a3]; -} - -static WEBP_INLINE int hev(const uint8_t* p, int step, int thresh) { - const int p1 = p[-2 * step], p0 = p[-step], q0 = p[0], q1 = p[step]; - return (abs_mips32(p1 - p0) > thresh) || (abs_mips32(q1 - q0) > thresh); -} - -static WEBP_INLINE int needs_filter(const uint8_t* p, int step, int t) { - const int p1 = p[-2 * step], p0 = p[-step], q0 = p[0], q1 = p[step]; - return ((4 * abs_mips32(p0 - q0) + abs_mips32(p1 - q1)) <= t); -} - -static WEBP_INLINE int needs_filter2(const uint8_t* p, - int step, int t, int it) { - const int p3 = p[-4 * step], p2 = p[-3 * step]; - const int p1 = p[-2 * step], p0 = p[-step]; - const int q0 = p[0], q1 = p[step], q2 = p[2 * step], q3 = p[3 * step]; - if ((4 * abs_mips32(p0 - q0) + abs_mips32(p1 - q1)) > t) { - return 0; - } - return abs_mips32(p3 - p2) <= it && abs_mips32(p2 - p1) <= it && - abs_mips32(p1 - p0) <= it && abs_mips32(q3 - q2) <= it && - abs_mips32(q2 - q1) <= it && abs_mips32(q1 - q0) <= it; -} - -static WEBP_INLINE void FilterLoop26(uint8_t* p, - int hstride, int vstride, int size, - int thresh, int ithresh, int hev_thresh) { - const int thresh2 = 2 * thresh + 1; - while (size-- > 0) { - if (needs_filter2(p, hstride, thresh2, ithresh)) { - if (hev(p, hstride, hev_thresh)) { - do_filter2(p, hstride); - } else { - do_filter6(p, hstride); - } - } - p += vstride; - } -} - -static WEBP_INLINE void FilterLoop24(uint8_t* p, - int hstride, int vstride, int size, - int thresh, int ithresh, int hev_thresh) { - const int thresh2 = 2 * thresh + 1; - while (size-- > 0) { - if (needs_filter2(p, hstride, thresh2, ithresh)) { - if (hev(p, hstride, hev_thresh)) { - do_filter2(p, hstride); - } else { - do_filter4(p, hstride); - } - } - p += vstride; - } -} - -// on macroblock edges -static void VFilter16(uint8_t* p, int stride, - int thresh, int ithresh, int hev_thresh) { - FilterLoop26(p, stride, 1, 16, thresh, ithresh, hev_thresh); -} - -static void HFilter16(uint8_t* p, int stride, - int thresh, int ithresh, int hev_thresh) { - FilterLoop26(p, 1, stride, 16, thresh, ithresh, hev_thresh); -} - -// 8-pixels wide variant, for chroma filtering -static void VFilter8(uint8_t* u, uint8_t* v, int stride, - int thresh, int ithresh, int hev_thresh) { - FilterLoop26(u, stride, 1, 8, thresh, ithresh, hev_thresh); - FilterLoop26(v, stride, 1, 8, thresh, ithresh, hev_thresh); -} - -static void HFilter8(uint8_t* u, uint8_t* v, int stride, - int thresh, int ithresh, int hev_thresh) { - FilterLoop26(u, 1, stride, 8, thresh, ithresh, hev_thresh); - FilterLoop26(v, 1, stride, 8, thresh, ithresh, hev_thresh); -} - -static void VFilter8i(uint8_t* u, uint8_t* v, int stride, - int thresh, int ithresh, int hev_thresh) { - FilterLoop24(u + 4 * stride, stride, 1, 8, thresh, ithresh, hev_thresh); - FilterLoop24(v + 4 * stride, stride, 1, 8, thresh, ithresh, hev_thresh); -} - -static void HFilter8i(uint8_t* u, uint8_t* v, int stride, - int thresh, int ithresh, int hev_thresh) { - FilterLoop24(u + 4, 1, stride, 8, thresh, ithresh, hev_thresh); - FilterLoop24(v + 4, 1, stride, 8, thresh, ithresh, hev_thresh); -} - -// on three inner edges -static void VFilter16i(uint8_t* p, int stride, - int thresh, int ithresh, int hev_thresh) { - int k; - for (k = 3; k > 0; --k) { - p += 4 * stride; - FilterLoop24(p, stride, 1, 16, thresh, ithresh, hev_thresh); - } -} - -static void HFilter16i(uint8_t* p, int stride, - int thresh, int ithresh, int hev_thresh) { - int k; - for (k = 3; k > 0; --k) { - p += 4; - FilterLoop24(p, 1, stride, 16, thresh, ithresh, hev_thresh); - } -} - -//------------------------------------------------------------------------------ -// Simple In-loop filtering (Paragraph 15.2) - -static void SimpleVFilter16(uint8_t* p, int stride, int thresh) { - int i; - const int thresh2 = 2 * thresh + 1; - for (i = 0; i < 16; ++i) { - if (needs_filter(p + i, stride, thresh2)) { - do_filter2(p + i, stride); - } - } -} - -static void SimpleHFilter16(uint8_t* p, int stride, int thresh) { - int i; - const int thresh2 = 2 * thresh + 1; - for (i = 0; i < 16; ++i) { - if (needs_filter(p + i * stride, 1, thresh2)) { - do_filter2(p + i * stride, 1); - } - } -} - -static void SimpleVFilter16i(uint8_t* p, int stride, int thresh) { - int k; - for (k = 3; k > 0; --k) { - p += 4 * stride; - SimpleVFilter16(p, stride, thresh); - } -} - -static void SimpleHFilter16i(uint8_t* p, int stride, int thresh) { - int k; - for (k = 3; k > 0; --k) { - p += 4; - SimpleHFilter16(p, stride, thresh); - } -} - -static void TransformOne(const int16_t* in, uint8_t* dst) { - int temp0, temp1, temp2, temp3, temp4; - int temp5, temp6, temp7, temp8, temp9; - int temp10, temp11, temp12, temp13, temp14; - int temp15, temp16, temp17, temp18; - int16_t* p_in = (int16_t*)in; - - // loops unrolled and merged to avoid usage of tmp buffer - // and to reduce number of stalls. MUL macro is written - // in assembler and inlined - __asm__ volatile( - "lh %[temp0], 0(%[in]) \n\t" - "lh %[temp8], 16(%[in]) \n\t" - "lh %[temp4], 8(%[in]) \n\t" - "lh %[temp12], 24(%[in]) \n\t" - "addu %[temp16], %[temp0], %[temp8] \n\t" - "subu %[temp0], %[temp0], %[temp8] \n\t" - "mul %[temp8], %[temp4], %[kC2] \n\t" - "mul %[temp17], %[temp12], %[kC1] \n\t" - "mul %[temp4], %[temp4], %[kC1] \n\t" - "mul %[temp12], %[temp12], %[kC2] \n\t" - "lh %[temp1], 2(%[in]) \n\t" - "lh %[temp5], 10(%[in]) \n\t" - "lh %[temp9], 18(%[in]) \n\t" - "lh %[temp13], 26(%[in]) \n\t" - "sra %[temp8], %[temp8], 16 \n\t" - "sra %[temp17], %[temp17], 16 \n\t" - "sra %[temp4], %[temp4], 16 \n\t" - "sra %[temp12], %[temp12], 16 \n\t" - "lh %[temp2], 4(%[in]) \n\t" - "lh %[temp6], 12(%[in]) \n\t" - "lh %[temp10], 20(%[in]) \n\t" - "lh %[temp14], 28(%[in]) \n\t" - "subu %[temp17], %[temp8], %[temp17] \n\t" - "addu %[temp4], %[temp4], %[temp12] \n\t" - "addu %[temp8], %[temp16], %[temp4] \n\t" - "subu %[temp4], %[temp16], %[temp4] \n\t" - "addu %[temp16], %[temp1], %[temp9] \n\t" - "subu %[temp1], %[temp1], %[temp9] \n\t" - "lh %[temp3], 6(%[in]) \n\t" - "lh %[temp7], 14(%[in]) \n\t" - "lh %[temp11], 22(%[in]) \n\t" - "lh %[temp15], 30(%[in]) \n\t" - "addu %[temp12], %[temp0], %[temp17] \n\t" - "subu %[temp0], %[temp0], %[temp17] \n\t" - "mul %[temp9], %[temp5], %[kC2] \n\t" - "mul %[temp17], %[temp13], %[kC1] \n\t" - "mul %[temp5], %[temp5], %[kC1] \n\t" - "mul %[temp13], %[temp13], %[kC2] \n\t" - "sra %[temp9], %[temp9], 16 \n\t" - "sra %[temp17], %[temp17], 16 \n\t" - "subu %[temp17], %[temp9], %[temp17] \n\t" - "sra %[temp5], %[temp5], 16 \n\t" - "sra %[temp13], %[temp13], 16 \n\t" - "addu %[temp5], %[temp5], %[temp13] \n\t" - "addu %[temp13], %[temp1], %[temp17] \n\t" - "subu %[temp1], %[temp1], %[temp17] \n\t" - "mul %[temp17], %[temp14], %[kC1] \n\t" - "mul %[temp14], %[temp14], %[kC2] \n\t" - "addu %[temp9], %[temp16], %[temp5] \n\t" - "subu %[temp5], %[temp16], %[temp5] \n\t" - "addu %[temp16], %[temp2], %[temp10] \n\t" - "subu %[temp2], %[temp2], %[temp10] \n\t" - "mul %[temp10], %[temp6], %[kC2] \n\t" - "mul %[temp6], %[temp6], %[kC1] \n\t" - "sra %[temp17], %[temp17], 16 \n\t" - "sra %[temp14], %[temp14], 16 \n\t" - "sra %[temp10], %[temp10], 16 \n\t" - "sra %[temp6], %[temp6], 16 \n\t" - "subu %[temp17], %[temp10], %[temp17] \n\t" - "addu %[temp6], %[temp6], %[temp14] \n\t" - "addu %[temp10], %[temp16], %[temp6] \n\t" - "subu %[temp6], %[temp16], %[temp6] \n\t" - "addu %[temp14], %[temp2], %[temp17] \n\t" - "subu %[temp2], %[temp2], %[temp17] \n\t" - "mul %[temp17], %[temp15], %[kC1] \n\t" - "mul %[temp15], %[temp15], %[kC2] \n\t" - "addu %[temp16], %[temp3], %[temp11] \n\t" - "subu %[temp3], %[temp3], %[temp11] \n\t" - "mul %[temp11], %[temp7], %[kC2] \n\t" - "mul %[temp7], %[temp7], %[kC1] \n\t" - "addiu %[temp8], %[temp8], 4 \n\t" - "addiu %[temp12], %[temp12], 4 \n\t" - "addiu %[temp0], %[temp0], 4 \n\t" - "addiu %[temp4], %[temp4], 4 \n\t" - "sra %[temp17], %[temp17], 16 \n\t" - "sra %[temp15], %[temp15], 16 \n\t" - "sra %[temp11], %[temp11], 16 \n\t" - "sra %[temp7], %[temp7], 16 \n\t" - "subu %[temp17], %[temp11], %[temp17] \n\t" - "addu %[temp7], %[temp7], %[temp15] \n\t" - "addu %[temp15], %[temp3], %[temp17] \n\t" - "subu %[temp3], %[temp3], %[temp17] \n\t" - "addu %[temp11], %[temp16], %[temp7] \n\t" - "subu %[temp7], %[temp16], %[temp7] \n\t" - "addu %[temp16], %[temp8], %[temp10] \n\t" - "subu %[temp8], %[temp8], %[temp10] \n\t" - "mul %[temp10], %[temp9], %[kC2] \n\t" - "mul %[temp17], %[temp11], %[kC1] \n\t" - "mul %[temp9], %[temp9], %[kC1] \n\t" - "mul %[temp11], %[temp11], %[kC2] \n\t" - "sra %[temp10], %[temp10], 16 \n\t" - "sra %[temp17], %[temp17], 16 \n\t" - "sra %[temp9], %[temp9], 16 \n\t" - "sra %[temp11], %[temp11], 16 \n\t" - "subu %[temp17], %[temp10], %[temp17] \n\t" - "addu %[temp11], %[temp9], %[temp11] \n\t" - "addu %[temp10], %[temp12], %[temp14] \n\t" - "subu %[temp12], %[temp12], %[temp14] \n\t" - "mul %[temp14], %[temp13], %[kC2] \n\t" - "mul %[temp9], %[temp15], %[kC1] \n\t" - "mul %[temp13], %[temp13], %[kC1] \n\t" - "mul %[temp15], %[temp15], %[kC2] \n\t" - "sra %[temp14], %[temp14], 16 \n\t" - "sra %[temp9], %[temp9], 16 \n\t" - "sra %[temp13], %[temp13], 16 \n\t" - "sra %[temp15], %[temp15], 16 \n\t" - "subu %[temp9], %[temp14], %[temp9] \n\t" - "addu %[temp15], %[temp13], %[temp15] \n\t" - "addu %[temp14], %[temp0], %[temp2] \n\t" - "subu %[temp0], %[temp0], %[temp2] \n\t" - "mul %[temp2], %[temp1], %[kC2] \n\t" - "mul %[temp13], %[temp3], %[kC1] \n\t" - "mul %[temp1], %[temp1], %[kC1] \n\t" - "mul %[temp3], %[temp3], %[kC2] \n\t" - "sra %[temp2], %[temp2], 16 \n\t" - "sra %[temp13], %[temp13], 16 \n\t" - "sra %[temp1], %[temp1], 16 \n\t" - "sra %[temp3], %[temp3], 16 \n\t" - "subu %[temp13], %[temp2], %[temp13] \n\t" - "addu %[temp3], %[temp1], %[temp3] \n\t" - "addu %[temp2], %[temp4], %[temp6] \n\t" - "subu %[temp4], %[temp4], %[temp6] \n\t" - "mul %[temp6], %[temp5], %[kC2] \n\t" - "mul %[temp1], %[temp7], %[kC1] \n\t" - "mul %[temp5], %[temp5], %[kC1] \n\t" - "mul %[temp7], %[temp7], %[kC2] \n\t" - "sra %[temp6], %[temp6], 16 \n\t" - "sra %[temp1], %[temp1], 16 \n\t" - "sra %[temp5], %[temp5], 16 \n\t" - "sra %[temp7], %[temp7], 16 \n\t" - "subu %[temp1], %[temp6], %[temp1] \n\t" - "addu %[temp7], %[temp5], %[temp7] \n\t" - "addu %[temp5], %[temp16], %[temp11] \n\t" - "subu %[temp16], %[temp16], %[temp11] \n\t" - "addu %[temp11], %[temp8], %[temp17] \n\t" - "subu %[temp8], %[temp8], %[temp17] \n\t" - "sra %[temp5], %[temp5], 3 \n\t" - "sra %[temp16], %[temp16], 3 \n\t" - "sra %[temp11], %[temp11], 3 \n\t" - "sra %[temp8], %[temp8], 3 \n\t" - "addu %[temp17], %[temp10], %[temp15] \n\t" - "subu %[temp10], %[temp10], %[temp15] \n\t" - "addu %[temp15], %[temp12], %[temp9] \n\t" - "subu %[temp12], %[temp12], %[temp9] \n\t" - "sra %[temp17], %[temp17], 3 \n\t" - "sra %[temp10], %[temp10], 3 \n\t" - "sra %[temp15], %[temp15], 3 \n\t" - "sra %[temp12], %[temp12], 3 \n\t" - "addu %[temp9], %[temp14], %[temp3] \n\t" - "subu %[temp14], %[temp14], %[temp3] \n\t" - "addu %[temp3], %[temp0], %[temp13] \n\t" - "subu %[temp0], %[temp0], %[temp13] \n\t" - "sra %[temp9], %[temp9], 3 \n\t" - "sra %[temp14], %[temp14], 3 \n\t" - "sra %[temp3], %[temp3], 3 \n\t" - "sra %[temp0], %[temp0], 3 \n\t" - "addu %[temp13], %[temp2], %[temp7] \n\t" - "subu %[temp2], %[temp2], %[temp7] \n\t" - "addu %[temp7], %[temp4], %[temp1] \n\t" - "subu %[temp4], %[temp4], %[temp1] \n\t" - "sra %[temp13], %[temp13], 3 \n\t" - "sra %[temp2], %[temp2], 3 \n\t" - "sra %[temp7], %[temp7], 3 \n\t" - "sra %[temp4], %[temp4], 3 \n\t" - "addiu %[temp6], $zero, 255 \n\t" - "lbu %[temp1], 0+0*" XSTR(BPS) "(%[dst]) \n\t" - "addu %[temp1], %[temp1], %[temp5] \n\t" - "sra %[temp5], %[temp1], 8 \n\t" - "sra %[temp18], %[temp1], 31 \n\t" - "beqz %[temp5], 1f \n\t" - "xor %[temp1], %[temp1], %[temp1] \n\t" - "movz %[temp1], %[temp6], %[temp18] \n\t" - "1: \n\t" - "lbu %[temp18], 1+0*" XSTR(BPS) "(%[dst]) \n\t" - "sb %[temp1], 0+0*" XSTR(BPS) "(%[dst]) \n\t" - "addu %[temp18], %[temp18], %[temp11] \n\t" - "sra %[temp11], %[temp18], 8 \n\t" - "sra %[temp1], %[temp18], 31 \n\t" - "beqz %[temp11], 2f \n\t" - "xor %[temp18], %[temp18], %[temp18] \n\t" - "movz %[temp18], %[temp6], %[temp1] \n\t" - "2: \n\t" - "lbu %[temp1], 2+0*" XSTR(BPS) "(%[dst]) \n\t" - "sb %[temp18], 1+0*" XSTR(BPS) "(%[dst]) \n\t" - "addu %[temp1], %[temp1], %[temp8] \n\t" - "sra %[temp8], %[temp1], 8 \n\t" - "sra %[temp18], %[temp1], 31 \n\t" - "beqz %[temp8], 3f \n\t" - "xor %[temp1], %[temp1], %[temp1] \n\t" - "movz %[temp1], %[temp6], %[temp18] \n\t" - "3: \n\t" - "lbu %[temp18], 3+0*" XSTR(BPS) "(%[dst]) \n\t" - "sb %[temp1], 2+0*" XSTR(BPS) "(%[dst]) \n\t" - "addu %[temp18], %[temp18], %[temp16] \n\t" - "sra %[temp16], %[temp18], 8 \n\t" - "sra %[temp1], %[temp18], 31 \n\t" - "beqz %[temp16], 4f \n\t" - "xor %[temp18], %[temp18], %[temp18] \n\t" - "movz %[temp18], %[temp6], %[temp1] \n\t" - "4: \n\t" - "sb %[temp18], 3+0*" XSTR(BPS) "(%[dst]) \n\t" - "lbu %[temp5], 0+1*" XSTR(BPS) "(%[dst]) \n\t" - "lbu %[temp8], 1+1*" XSTR(BPS) "(%[dst]) \n\t" - "lbu %[temp11], 2+1*" XSTR(BPS) "(%[dst]) \n\t" - "lbu %[temp16], 3+1*" XSTR(BPS) "(%[dst]) \n\t" - "addu %[temp5], %[temp5], %[temp17] \n\t" - "addu %[temp8], %[temp8], %[temp15] \n\t" - "addu %[temp11], %[temp11], %[temp12] \n\t" - "addu %[temp16], %[temp16], %[temp10] \n\t" - "sra %[temp18], %[temp5], 8 \n\t" - "sra %[temp1], %[temp5], 31 \n\t" - "beqz %[temp18], 5f \n\t" - "xor %[temp5], %[temp5], %[temp5] \n\t" - "movz %[temp5], %[temp6], %[temp1] \n\t" - "5: \n\t" - "sra %[temp18], %[temp8], 8 \n\t" - "sra %[temp1], %[temp8], 31 \n\t" - "beqz %[temp18], 6f \n\t" - "xor %[temp8], %[temp8], %[temp8] \n\t" - "movz %[temp8], %[temp6], %[temp1] \n\t" - "6: \n\t" - "sra %[temp18], %[temp11], 8 \n\t" - "sra %[temp1], %[temp11], 31 \n\t" - "sra %[temp17], %[temp16], 8 \n\t" - "sra %[temp15], %[temp16], 31 \n\t" - "beqz %[temp18], 7f \n\t" - "xor %[temp11], %[temp11], %[temp11] \n\t" - "movz %[temp11], %[temp6], %[temp1] \n\t" - "7: \n\t" - "beqz %[temp17], 8f \n\t" - "xor %[temp16], %[temp16], %[temp16] \n\t" - "movz %[temp16], %[temp6], %[temp15] \n\t" - "8: \n\t" - "sb %[temp5], 0+1*" XSTR(BPS) "(%[dst]) \n\t" - "sb %[temp8], 1+1*" XSTR(BPS) "(%[dst]) \n\t" - "sb %[temp11], 2+1*" XSTR(BPS) "(%[dst]) \n\t" - "sb %[temp16], 3+1*" XSTR(BPS) "(%[dst]) \n\t" - "lbu %[temp5], 0+2*" XSTR(BPS) "(%[dst]) \n\t" - "lbu %[temp8], 1+2*" XSTR(BPS) "(%[dst]) \n\t" - "lbu %[temp11], 2+2*" XSTR(BPS) "(%[dst]) \n\t" - "lbu %[temp16], 3+2*" XSTR(BPS) "(%[dst]) \n\t" - "addu %[temp5], %[temp5], %[temp9] \n\t" - "addu %[temp8], %[temp8], %[temp3] \n\t" - "addu %[temp11], %[temp11], %[temp0] \n\t" - "addu %[temp16], %[temp16], %[temp14] \n\t" - "sra %[temp18], %[temp5], 8 \n\t" - "sra %[temp1], %[temp5], 31 \n\t" - "sra %[temp17], %[temp8], 8 \n\t" - "sra %[temp15], %[temp8], 31 \n\t" - "sra %[temp12], %[temp11], 8 \n\t" - "sra %[temp10], %[temp11], 31 \n\t" - "sra %[temp9], %[temp16], 8 \n\t" - "sra %[temp3], %[temp16], 31 \n\t" - "beqz %[temp18], 9f \n\t" - "xor %[temp5], %[temp5], %[temp5] \n\t" - "movz %[temp5], %[temp6], %[temp1] \n\t" - "9: \n\t" - "beqz %[temp17], 10f \n\t" - "xor %[temp8], %[temp8], %[temp8] \n\t" - "movz %[temp8], %[temp6], %[temp15] \n\t" - "10: \n\t" - "beqz %[temp12], 11f \n\t" - "xor %[temp11], %[temp11], %[temp11] \n\t" - "movz %[temp11], %[temp6], %[temp10] \n\t" - "11: \n\t" - "beqz %[temp9], 12f \n\t" - "xor %[temp16], %[temp16], %[temp16] \n\t" - "movz %[temp16], %[temp6], %[temp3] \n\t" - "12: \n\t" - "sb %[temp5], 0+2*" XSTR(BPS) "(%[dst]) \n\t" - "sb %[temp8], 1+2*" XSTR(BPS) "(%[dst]) \n\t" - "sb %[temp11], 2+2*" XSTR(BPS) "(%[dst]) \n\t" - "sb %[temp16], 3+2*" XSTR(BPS) "(%[dst]) \n\t" - "lbu %[temp5], 0+3*" XSTR(BPS) "(%[dst]) \n\t" - "lbu %[temp8], 1+3*" XSTR(BPS) "(%[dst]) \n\t" - "lbu %[temp11], 2+3*" XSTR(BPS) "(%[dst]) \n\t" - "lbu %[temp16], 3+3*" XSTR(BPS) "(%[dst]) \n\t" - "addu %[temp5], %[temp5], %[temp13] \n\t" - "addu %[temp8], %[temp8], %[temp7] \n\t" - "addu %[temp11], %[temp11], %[temp4] \n\t" - "addu %[temp16], %[temp16], %[temp2] \n\t" - "sra %[temp18], %[temp5], 8 \n\t" - "sra %[temp1], %[temp5], 31 \n\t" - "sra %[temp17], %[temp8], 8 \n\t" - "sra %[temp15], %[temp8], 31 \n\t" - "sra %[temp12], %[temp11], 8 \n\t" - "sra %[temp10], %[temp11], 31 \n\t" - "sra %[temp9], %[temp16], 8 \n\t" - "sra %[temp3], %[temp16], 31 \n\t" - "beqz %[temp18], 13f \n\t" - "xor %[temp5], %[temp5], %[temp5] \n\t" - "movz %[temp5], %[temp6], %[temp1] \n\t" - "13: \n\t" - "beqz %[temp17], 14f \n\t" - "xor %[temp8], %[temp8], %[temp8] \n\t" - "movz %[temp8], %[temp6], %[temp15] \n\t" - "14: \n\t" - "beqz %[temp12], 15f \n\t" - "xor %[temp11], %[temp11], %[temp11] \n\t" - "movz %[temp11], %[temp6], %[temp10] \n\t" - "15: \n\t" - "beqz %[temp9], 16f \n\t" - "xor %[temp16], %[temp16], %[temp16] \n\t" - "movz %[temp16], %[temp6], %[temp3] \n\t" - "16: \n\t" - "sb %[temp5], 0+3*" XSTR(BPS) "(%[dst]) \n\t" - "sb %[temp8], 1+3*" XSTR(BPS) "(%[dst]) \n\t" - "sb %[temp11], 2+3*" XSTR(BPS) "(%[dst]) \n\t" - "sb %[temp16], 3+3*" XSTR(BPS) "(%[dst]) \n\t" - - : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [temp2]"=&r"(temp2), - [temp3]"=&r"(temp3), [temp4]"=&r"(temp4), [temp5]"=&r"(temp5), - [temp6]"=&r"(temp6), [temp7]"=&r"(temp7), [temp8]"=&r"(temp8), - [temp9]"=&r"(temp9), [temp10]"=&r"(temp10), [temp11]"=&r"(temp11), - [temp12]"=&r"(temp12), [temp13]"=&r"(temp13), [temp14]"=&r"(temp14), - [temp15]"=&r"(temp15), [temp16]"=&r"(temp16), [temp17]"=&r"(temp17), - [temp18]"=&r"(temp18) - : [in]"r"(p_in), [kC1]"r"(kC1), [kC2]"r"(kC2), [dst]"r"(dst) - : "memory", "hi", "lo" - ); -} - -static void TransformTwo(const int16_t* in, uint8_t* dst, int do_two) { - TransformOne(in, dst); - if (do_two) { - TransformOne(in + 16, dst + 4); - } -} - -//------------------------------------------------------------------------------ -// Entry point - -extern void VP8DspInitMIPS32(void); - -WEBP_TSAN_IGNORE_FUNCTION void VP8DspInitMIPS32(void) { - VP8InitClipTables(); - - VP8Transform = TransformTwo; - - VP8VFilter16 = VFilter16; - VP8HFilter16 = HFilter16; - VP8VFilter8 = VFilter8; - VP8HFilter8 = HFilter8; - VP8VFilter16i = VFilter16i; - VP8HFilter16i = HFilter16i; - VP8VFilter8i = VFilter8i; - VP8HFilter8i = HFilter8i; - - VP8SimpleVFilter16 = SimpleVFilter16; - VP8SimpleHFilter16 = SimpleHFilter16; - VP8SimpleVFilter16i = SimpleVFilter16i; - VP8SimpleHFilter16i = SimpleHFilter16i; -} - -#else // !WEBP_USE_MIPS32 - -WEBP_DSP_INIT_STUB(VP8DspInitMIPS32) - -#endif // WEBP_USE_MIPS32 diff --git a/Extended/libwebp/src/dsp/dec_mips_dsp_r2.c b/Extended/libwebp/src/dsp/dec_mips_dsp_r2.c deleted file mode 100644 index b0936bc..0000000 --- a/Extended/libwebp/src/dsp/dec_mips_dsp_r2.c +++ /dev/null @@ -1,994 +0,0 @@ -// Copyright 2014 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// MIPS version of dsp functions -// -// Author(s): Djordje Pesut (djordje.pesut@imgtec.com) -// Jovan Zelincevic (jovan.zelincevic@imgtec.com) - -#include "src/dsp/dsp.h" - -#if defined(WEBP_USE_MIPS_DSP_R2) - -#include "src/dsp/mips_macro.h" - -static const int kC1 = 20091 + (1 << 16); -static const int kC2 = 35468; - -#define MUL(a, b) (((a) * (b)) >> 16) - -static void TransformDC(const int16_t* in, uint8_t* dst) { - int temp1, temp2, temp3, temp4, temp5, temp6, temp7, temp8, temp9, temp10; - - __asm__ volatile ( - LOAD_WITH_OFFSET_X4(temp1, temp2, temp3, temp4, dst, - 0, 0, 0, 0, - 0, 1, 2, 3, - BPS) - "lh %[temp5], 0(%[in]) \n\t" - "addiu %[temp5], %[temp5], 4 \n\t" - "ins %[temp5], %[temp5], 16, 16 \n\t" - "shra.ph %[temp5], %[temp5], 3 \n\t" - CONVERT_2_BYTES_TO_HALF(temp6, temp7, temp8, temp9, temp10, temp1, temp2, - temp3, temp1, temp2, temp3, temp4) - STORE_SAT_SUM_X2(temp6, temp7, temp8, temp9, temp10, temp1, temp2, temp3, - temp5, temp5, temp5, temp5, temp5, temp5, temp5, temp5, - dst, 0, 1, 2, 3, BPS) - - OUTPUT_EARLY_CLOBBER_REGS_10() - : [in]"r"(in), [dst]"r"(dst) - : "memory" - ); -} - -static void TransformAC3(const int16_t* in, uint8_t* dst) { - const int a = in[0] + 4; - int c4 = MUL(in[4], kC2); - const int d4 = MUL(in[4], kC1); - const int c1 = MUL(in[1], kC2); - const int d1 = MUL(in[1], kC1); - int temp1, temp2, temp3, temp4, temp5, temp6, temp7, temp8, temp9; - int temp10, temp11, temp12, temp13, temp14, temp15, temp16, temp17, temp18; - - __asm__ volatile ( - "ins %[c4], %[d4], 16, 16 \n\t" - "replv.ph %[temp1], %[a] \n\t" - "replv.ph %[temp4], %[d1] \n\t" - ADD_SUB_HALVES(temp2, temp3, temp1, c4) - "replv.ph %[temp5], %[c1] \n\t" - SHIFT_R_SUM_X2(temp1, temp6, temp7, temp8, temp2, temp9, temp10, temp4, - temp2, temp2, temp3, temp3, temp4, temp5, temp4, temp5) - LOAD_WITH_OFFSET_X4(temp3, temp5, temp11, temp12, dst, - 0, 0, 0, 0, - 0, 1, 2, 3, - BPS) - CONVERT_2_BYTES_TO_HALF(temp13, temp14, temp3, temp15, temp5, temp16, - temp11, temp17, temp3, temp5, temp11, temp12) - PACK_2_HALVES_TO_WORD(temp12, temp18, temp7, temp6, temp1, temp8, temp2, - temp4, temp7, temp6, temp10, temp9) - STORE_SAT_SUM_X2(temp13, temp14, temp3, temp15, temp5, temp16, temp11, - temp17, temp12, temp18, temp1, temp8, temp2, temp4, - temp7, temp6, dst, 0, 1, 2, 3, BPS) - - OUTPUT_EARLY_CLOBBER_REGS_18(), - [c4]"+&r"(c4) - : [dst]"r"(dst), [a]"r"(a), [d1]"r"(d1), [d4]"r"(d4), [c1]"r"(c1) - : "memory" - ); -} - -static void TransformOne(const int16_t* in, uint8_t* dst) { - int temp1, temp2, temp3, temp4, temp5, temp6, temp7, temp8, temp9; - int temp10, temp11, temp12, temp13, temp14, temp15, temp16, temp17, temp18; - - __asm__ volatile ( - "ulw %[temp1], 0(%[in]) \n\t" - "ulw %[temp2], 16(%[in]) \n\t" - LOAD_IN_X2(temp5, temp6, 24, 26) - ADD_SUB_HALVES(temp3, temp4, temp1, temp2) - LOAD_IN_X2(temp1, temp2, 8, 10) - MUL_SHIFT_SUM(temp7, temp8, temp9, temp10, temp11, temp12, temp13, temp14, - temp10, temp8, temp9, temp7, temp1, temp2, temp5, temp6, - temp13, temp11, temp14, temp12) - INSERT_HALF_X2(temp8, temp7, temp10, temp9) - "ulw %[temp17], 4(%[in]) \n\t" - "ulw %[temp18], 20(%[in]) \n\t" - ADD_SUB_HALVES(temp1, temp2, temp3, temp8) - ADD_SUB_HALVES(temp5, temp6, temp4, temp7) - ADD_SUB_HALVES(temp7, temp8, temp17, temp18) - LOAD_IN_X2(temp17, temp18, 12, 14) - LOAD_IN_X2(temp9, temp10, 28, 30) - MUL_SHIFT_SUM(temp11, temp12, temp13, temp14, temp15, temp16, temp4, temp17, - temp12, temp14, temp11, temp13, temp17, temp18, temp9, temp10, - temp15, temp4, temp16, temp17) - INSERT_HALF_X2(temp11, temp12, temp13, temp14) - ADD_SUB_HALVES(temp17, temp8, temp8, temp11) - ADD_SUB_HALVES(temp3, temp4, temp7, temp12) - - // horizontal - SRA_16(temp9, temp10, temp11, temp12, temp1, temp2, temp5, temp6) - INSERT_HALF_X2(temp1, temp6, temp5, temp2) - SRA_16(temp13, temp14, temp15, temp16, temp3, temp4, temp17, temp8) - "repl.ph %[temp2], 0x4 \n\t" - INSERT_HALF_X2(temp3, temp8, temp17, temp4) - "addq.ph %[temp1], %[temp1], %[temp2] \n\t" - "addq.ph %[temp6], %[temp6], %[temp2] \n\t" - ADD_SUB_HALVES(temp2, temp4, temp1, temp3) - ADD_SUB_HALVES(temp5, temp7, temp6, temp8) - MUL_SHIFT_SUM(temp1, temp3, temp6, temp8, temp9, temp13, temp17, temp18, - temp3, temp13, temp1, temp9, temp9, temp13, temp11, temp15, - temp6, temp17, temp8, temp18) - MUL_SHIFT_SUM(temp6, temp8, temp18, temp17, temp11, temp15, temp12, temp16, - temp8, temp15, temp6, temp11, temp12, temp16, temp10, temp14, - temp18, temp12, temp17, temp16) - INSERT_HALF_X2(temp1, temp3, temp9, temp13) - INSERT_HALF_X2(temp6, temp8, temp11, temp15) - SHIFT_R_SUM_X2(temp9, temp10, temp11, temp12, temp13, temp14, temp15, - temp16, temp2, temp4, temp5, temp7, temp3, temp1, temp8, - temp6) - PACK_2_HALVES_TO_WORD(temp1, temp2, temp3, temp4, temp9, temp12, temp13, - temp16, temp11, temp10, temp15, temp14) - LOAD_WITH_OFFSET_X4(temp10, temp11, temp14, temp15, dst, - 0, 0, 0, 0, - 0, 1, 2, 3, - BPS) - CONVERT_2_BYTES_TO_HALF(temp5, temp6, temp7, temp8, temp17, temp18, temp10, - temp11, temp10, temp11, temp14, temp15) - STORE_SAT_SUM_X2(temp5, temp6, temp7, temp8, temp17, temp18, temp10, temp11, - temp9, temp12, temp1, temp2, temp13, temp16, temp3, temp4, - dst, 0, 1, 2, 3, BPS) - - OUTPUT_EARLY_CLOBBER_REGS_18() - : [dst]"r"(dst), [in]"r"(in), [kC1]"r"(kC1), [kC2]"r"(kC2) - : "memory", "hi", "lo" - ); -} - -static void TransformTwo(const int16_t* in, uint8_t* dst, int do_two) { - TransformOne(in, dst); - if (do_two) { - TransformOne(in + 16, dst + 4); - } -} - -static WEBP_INLINE void FilterLoop26(uint8_t* p, - int hstride, int vstride, int size, - int thresh, int ithresh, int hev_thresh) { - const int thresh2 = 2 * thresh + 1; - int temp1, temp2, temp3, temp4, temp5, temp6, temp7, temp8, temp9; - int temp10, temp11, temp12, temp13, temp14, temp15; - - __asm__ volatile ( - ".set push \n\t" - ".set noreorder \n\t" - "1: \n\t" - "negu %[temp1], %[hstride] \n\t" - "addiu %[size], %[size], -1 \n\t" - "sll %[temp2], %[hstride], 1 \n\t" - "sll %[temp3], %[temp1], 1 \n\t" - "addu %[temp4], %[temp2], %[hstride] \n\t" - "addu %[temp5], %[temp3], %[temp1] \n\t" - "lbu %[temp7], 0(%[p]) \n\t" - "sll %[temp6], %[temp3], 1 \n\t" - "lbux %[temp8], %[temp5](%[p]) \n\t" - "lbux %[temp9], %[temp3](%[p]) \n\t" - "lbux %[temp10], %[temp1](%[p]) \n\t" - "lbux %[temp11], %[temp6](%[p]) \n\t" - "lbux %[temp12], %[hstride](%[p]) \n\t" - "lbux %[temp13], %[temp2](%[p]) \n\t" - "lbux %[temp14], %[temp4](%[p]) \n\t" - "subu %[temp1], %[temp10], %[temp7] \n\t" - "subu %[temp2], %[temp9], %[temp12] \n\t" - "absq_s.w %[temp3], %[temp1] \n\t" - "absq_s.w %[temp4], %[temp2] \n\t" - "negu %[temp1], %[temp1] \n\t" - "sll %[temp3], %[temp3], 2 \n\t" - "addu %[temp15], %[temp3], %[temp4] \n\t" - "subu %[temp3], %[temp15], %[thresh2] \n\t" - "sll %[temp6], %[temp1], 1 \n\t" - "bgtz %[temp3], 3f \n\t" - " subu %[temp4], %[temp11], %[temp8] \n\t" - "absq_s.w %[temp4], %[temp4] \n\t" - "shll_s.w %[temp2], %[temp2], 24 \n\t" - "subu %[temp4], %[temp4], %[ithresh] \n\t" - "bgtz %[temp4], 3f \n\t" - " subu %[temp3], %[temp8], %[temp9] \n\t" - "absq_s.w %[temp3], %[temp3] \n\t" - "subu %[temp3], %[temp3], %[ithresh] \n\t" - "bgtz %[temp3], 3f \n\t" - " subu %[temp5], %[temp9], %[temp10] \n\t" - "absq_s.w %[temp3], %[temp5] \n\t" - "absq_s.w %[temp5], %[temp5] \n\t" - "subu %[temp3], %[temp3], %[ithresh] \n\t" - "bgtz %[temp3], 3f \n\t" - " subu %[temp3], %[temp14], %[temp13] \n\t" - "absq_s.w %[temp3], %[temp3] \n\t" - "slt %[temp5], %[hev_thresh], %[temp5] \n\t" - "subu %[temp3], %[temp3], %[ithresh] \n\t" - "bgtz %[temp3], 3f \n\t" - " subu %[temp3], %[temp13], %[temp12] \n\t" - "absq_s.w %[temp3], %[temp3] \n\t" - "sra %[temp4], %[temp2], 24 \n\t" - "subu %[temp3], %[temp3], %[ithresh] \n\t" - "bgtz %[temp3], 3f \n\t" - " subu %[temp15], %[temp12], %[temp7] \n\t" - "absq_s.w %[temp3], %[temp15] \n\t" - "absq_s.w %[temp15], %[temp15] \n\t" - "subu %[temp3], %[temp3], %[ithresh] \n\t" - "bgtz %[temp3], 3f \n\t" - " slt %[temp15], %[hev_thresh], %[temp15] \n\t" - "addu %[temp3], %[temp6], %[temp1] \n\t" - "or %[temp2], %[temp5], %[temp15] \n\t" - "addu %[temp5], %[temp4], %[temp3] \n\t" - "beqz %[temp2], 4f \n\t" - " shra_r.w %[temp1], %[temp5], 3 \n\t" - "addiu %[temp2], %[temp5], 3 \n\t" - "sra %[temp2], %[temp2], 3 \n\t" - "shll_s.w %[temp1], %[temp1], 27 \n\t" - "shll_s.w %[temp2], %[temp2], 27 \n\t" - "subu %[temp3], %[p], %[hstride] \n\t" - "sra %[temp1], %[temp1], 27 \n\t" - "sra %[temp2], %[temp2], 27 \n\t" - "subu %[temp1], %[temp7], %[temp1] \n\t" - "addu %[temp2], %[temp10], %[temp2] \n\t" - "lbux %[temp2], %[temp2](%[VP8kclip1]) \n\t" - "lbux %[temp1], %[temp1](%[VP8kclip1]) \n\t" - "sb %[temp2], 0(%[temp3]) \n\t" - "j 3f \n\t" - " sb %[temp1], 0(%[p]) \n\t" - "4: \n\t" - "shll_s.w %[temp5], %[temp5], 24 \n\t" - "subu %[temp14], %[p], %[hstride] \n\t" - "subu %[temp11], %[temp14], %[hstride] \n\t" - "sra %[temp6], %[temp5], 24 \n\t" - "sll %[temp1], %[temp6], 3 \n\t" - "subu %[temp15], %[temp11], %[hstride] \n\t" - "addu %[temp2], %[temp6], %[temp1] \n\t" - "sll %[temp3], %[temp2], 1 \n\t" - "addu %[temp4], %[temp3], %[temp2] \n\t" - "addiu %[temp2], %[temp2], 63 \n\t" - "addiu %[temp3], %[temp3], 63 \n\t" - "addiu %[temp4], %[temp4], 63 \n\t" - "sra %[temp2], %[temp2], 7 \n\t" - "sra %[temp3], %[temp3], 7 \n\t" - "sra %[temp4], %[temp4], 7 \n\t" - "addu %[temp1], %[temp8], %[temp2] \n\t" - "addu %[temp5], %[temp9], %[temp3] \n\t" - "addu %[temp6], %[temp10], %[temp4] \n\t" - "subu %[temp8], %[temp7], %[temp4] \n\t" - "subu %[temp7], %[temp12], %[temp3] \n\t" - "addu %[temp10], %[p], %[hstride] \n\t" - "subu %[temp9], %[temp13], %[temp2] \n\t" - "addu %[temp12], %[temp10], %[hstride] \n\t" - "lbux %[temp2], %[temp1](%[VP8kclip1]) \n\t" - "lbux %[temp3], %[temp5](%[VP8kclip1]) \n\t" - "lbux %[temp4], %[temp6](%[VP8kclip1]) \n\t" - "lbux %[temp5], %[temp8](%[VP8kclip1]) \n\t" - "lbux %[temp6], %[temp7](%[VP8kclip1]) \n\t" - "lbux %[temp8], %[temp9](%[VP8kclip1]) \n\t" - "sb %[temp2], 0(%[temp15]) \n\t" - "sb %[temp3], 0(%[temp11]) \n\t" - "sb %[temp4], 0(%[temp14]) \n\t" - "sb %[temp5], 0(%[p]) \n\t" - "sb %[temp6], 0(%[temp10]) \n\t" - "sb %[temp8], 0(%[temp12]) \n\t" - "3: \n\t" - "bgtz %[size], 1b \n\t" - " addu %[p], %[p], %[vstride] \n\t" - ".set pop \n\t" - : [temp1]"=&r"(temp1), [temp2]"=&r"(temp2),[temp3]"=&r"(temp3), - [temp4]"=&r"(temp4), [temp5]"=&r"(temp5), [temp6]"=&r"(temp6), - [temp7]"=&r"(temp7),[temp8]"=&r"(temp8),[temp9]"=&r"(temp9), - [temp10]"=&r"(temp10),[temp11]"=&r"(temp11),[temp12]"=&r"(temp12), - [temp13]"=&r"(temp13),[temp14]"=&r"(temp14),[temp15]"=&r"(temp15), - [size]"+&r"(size), [p]"+&r"(p) - : [hstride]"r"(hstride), [thresh2]"r"(thresh2), - [ithresh]"r"(ithresh),[vstride]"r"(vstride), [hev_thresh]"r"(hev_thresh), - [VP8kclip1]"r"(VP8kclip1) - : "memory" - ); -} - -static WEBP_INLINE void FilterLoop24(uint8_t* p, - int hstride, int vstride, int size, - int thresh, int ithresh, int hev_thresh) { - int p0, q0, p1, q1, p2, q2, p3, q3; - int step1, step2, temp1, temp2, temp3, temp4; - uint8_t* pTemp0; - uint8_t* pTemp1; - const int thresh2 = 2 * thresh + 1; - - __asm__ volatile ( - ".set push \n\t" - ".set noreorder \n\t" - "bltz %[size], 3f \n\t" - " nop \n\t" - "2: \n\t" - "negu %[step1], %[hstride] \n\t" - "lbu %[q0], 0(%[p]) \n\t" - "lbux %[p0], %[step1](%[p]) \n\t" - "subu %[step1], %[step1], %[hstride] \n\t" - "lbux %[q1], %[hstride](%[p]) \n\t" - "subu %[temp1], %[p0], %[q0] \n\t" - "lbux %[p1], %[step1](%[p]) \n\t" - "addu %[step2], %[hstride], %[hstride] \n\t" - "absq_s.w %[temp2], %[temp1] \n\t" - "subu %[temp3], %[p1], %[q1] \n\t" - "absq_s.w %[temp4], %[temp3] \n\t" - "sll %[temp2], %[temp2], 2 \n\t" - "addu %[temp2], %[temp2], %[temp4] \n\t" - "subu %[temp4], %[temp2], %[thresh2] \n\t" - "subu %[step1], %[step1], %[hstride] \n\t" - "bgtz %[temp4], 0f \n\t" - " lbux %[p2], %[step1](%[p]) \n\t" - "subu %[step1], %[step1], %[hstride] \n\t" - "lbux %[q2], %[step2](%[p]) \n\t" - "lbux %[p3], %[step1](%[p]) \n\t" - "subu %[temp4], %[p2], %[p1] \n\t" - "addu %[step2], %[step2], %[hstride] \n\t" - "subu %[temp2], %[p3], %[p2] \n\t" - "absq_s.w %[temp4], %[temp4] \n\t" - "absq_s.w %[temp2], %[temp2] \n\t" - "lbux %[q3], %[step2](%[p]) \n\t" - "subu %[temp4], %[temp4], %[ithresh] \n\t" - "negu %[temp1], %[temp1] \n\t" - "bgtz %[temp4], 0f \n\t" - " subu %[temp2], %[temp2], %[ithresh] \n\t" - "subu %[p3], %[p1], %[p0] \n\t" - "bgtz %[temp2], 0f \n\t" - " absq_s.w %[p3], %[p3] \n\t" - "subu %[temp4], %[q3], %[q2] \n\t" - "subu %[pTemp0], %[p], %[hstride] \n\t" - "absq_s.w %[temp4], %[temp4] \n\t" - "subu %[temp2], %[p3], %[ithresh] \n\t" - "sll %[step1], %[temp1], 1 \n\t" - "bgtz %[temp2], 0f \n\t" - " subu %[temp4], %[temp4], %[ithresh] \n\t" - "subu %[temp2], %[q2], %[q1] \n\t" - "bgtz %[temp4], 0f \n\t" - " absq_s.w %[temp2], %[temp2] \n\t" - "subu %[q3], %[q1], %[q0] \n\t" - "absq_s.w %[q3], %[q3] \n\t" - "subu %[temp2], %[temp2], %[ithresh] \n\t" - "addu %[temp1], %[temp1], %[step1] \n\t" - "bgtz %[temp2], 0f \n\t" - " subu %[temp4], %[q3], %[ithresh] \n\t" - "slt %[p3], %[hev_thresh], %[p3] \n\t" - "bgtz %[temp4], 0f \n\t" - " slt %[q3], %[hev_thresh], %[q3] \n\t" - "or %[q3], %[q3], %[p3] \n\t" - "bgtz %[q3], 1f \n\t" - " shra_r.w %[temp2], %[temp1], 3 \n\t" - "addiu %[temp1], %[temp1], 3 \n\t" - "sra %[temp1], %[temp1], 3 \n\t" - "shll_s.w %[temp2], %[temp2], 27 \n\t" - "shll_s.w %[temp1], %[temp1], 27 \n\t" - "addu %[pTemp1], %[p], %[hstride] \n\t" - "sra %[temp2], %[temp2], 27 \n\t" - "sra %[temp1], %[temp1], 27 \n\t" - "addiu %[step1], %[temp2], 1 \n\t" - "sra %[step1], %[step1], 1 \n\t" - "addu %[p0], %[p0], %[temp1] \n\t" - "addu %[p1], %[p1], %[step1] \n\t" - "subu %[q0], %[q0], %[temp2] \n\t" - "subu %[q1], %[q1], %[step1] \n\t" - "lbux %[temp2], %[p0](%[VP8kclip1]) \n\t" - "lbux %[temp3], %[q0](%[VP8kclip1]) \n\t" - "lbux %[temp4], %[q1](%[VP8kclip1]) \n\t" - "sb %[temp2], 0(%[pTemp0]) \n\t" - "lbux %[temp1], %[p1](%[VP8kclip1]) \n\t" - "subu %[pTemp0], %[pTemp0], %[hstride] \n\t" - "sb %[temp3], 0(%[p]) \n\t" - "sb %[temp4], 0(%[pTemp1]) \n\t" - "j 0f \n\t" - " sb %[temp1], 0(%[pTemp0]) \n\t" - "1: \n\t" - "shll_s.w %[temp3], %[temp3], 24 \n\t" - "sra %[temp3], %[temp3], 24 \n\t" - "addu %[temp1], %[temp1], %[temp3] \n\t" - "shra_r.w %[temp2], %[temp1], 3 \n\t" - "addiu %[temp1], %[temp1], 3 \n\t" - "shll_s.w %[temp2], %[temp2], 27 \n\t" - "sra %[temp1], %[temp1], 3 \n\t" - "shll_s.w %[temp1], %[temp1], 27 \n\t" - "sra %[temp2], %[temp2], 27 \n\t" - "sra %[temp1], %[temp1], 27 \n\t" - "addu %[p0], %[p0], %[temp1] \n\t" - "subu %[q0], %[q0], %[temp2] \n\t" - "lbux %[temp1], %[p0](%[VP8kclip1]) \n\t" - "lbux %[temp2], %[q0](%[VP8kclip1]) \n\t" - "sb %[temp2], 0(%[p]) \n\t" - "sb %[temp1], 0(%[pTemp0]) \n\t" - "0: \n\t" - "subu %[size], %[size], 1 \n\t" - "bgtz %[size], 2b \n\t" - " addu %[p], %[p], %[vstride] \n\t" - "3: \n\t" - ".set pop \n\t" - : [p0]"=&r"(p0), [q0]"=&r"(q0), [p1]"=&r"(p1), [q1]"=&r"(q1), - [p2]"=&r"(p2), [q2]"=&r"(q2), [p3]"=&r"(p3), [q3]"=&r"(q3), - [step2]"=&r"(step2), [step1]"=&r"(step1), [temp1]"=&r"(temp1), - [temp2]"=&r"(temp2), [temp3]"=&r"(temp3), [temp4]"=&r"(temp4), - [pTemp0]"=&r"(pTemp0), [pTemp1]"=&r"(pTemp1), [p]"+&r"(p), - [size]"+&r"(size) - : [vstride]"r"(vstride), [ithresh]"r"(ithresh), - [hev_thresh]"r"(hev_thresh), [hstride]"r"(hstride), - [VP8kclip1]"r"(VP8kclip1), [thresh2]"r"(thresh2) - : "memory" - ); -} - -// on macroblock edges -static void VFilter16(uint8_t* p, int stride, - int thresh, int ithresh, int hev_thresh) { - FilterLoop26(p, stride, 1, 16, thresh, ithresh, hev_thresh); -} - -static void HFilter16(uint8_t* p, int stride, - int thresh, int ithresh, int hev_thresh) { - FilterLoop26(p, 1, stride, 16, thresh, ithresh, hev_thresh); -} - -// 8-pixels wide variant, for chroma filtering -static void VFilter8(uint8_t* u, uint8_t* v, int stride, - int thresh, int ithresh, int hev_thresh) { - FilterLoop26(u, stride, 1, 8, thresh, ithresh, hev_thresh); - FilterLoop26(v, stride, 1, 8, thresh, ithresh, hev_thresh); -} - -static void HFilter8(uint8_t* u, uint8_t* v, int stride, - int thresh, int ithresh, int hev_thresh) { - FilterLoop26(u, 1, stride, 8, thresh, ithresh, hev_thresh); - FilterLoop26(v, 1, stride, 8, thresh, ithresh, hev_thresh); -} - -// on three inner edges -static void VFilter16i(uint8_t* p, int stride, - int thresh, int ithresh, int hev_thresh) { - int k; - for (k = 3; k > 0; --k) { - p += 4 * stride; - FilterLoop24(p, stride, 1, 16, thresh, ithresh, hev_thresh); - } -} - -static void HFilter16i(uint8_t* p, int stride, - int thresh, int ithresh, int hev_thresh) { - int k; - for (k = 3; k > 0; --k) { - p += 4; - FilterLoop24(p, 1, stride, 16, thresh, ithresh, hev_thresh); - } -} - -static void VFilter8i(uint8_t* u, uint8_t* v, int stride, - int thresh, int ithresh, int hev_thresh) { - FilterLoop24(u + 4 * stride, stride, 1, 8, thresh, ithresh, hev_thresh); - FilterLoop24(v + 4 * stride, stride, 1, 8, thresh, ithresh, hev_thresh); -} - -static void HFilter8i(uint8_t* u, uint8_t* v, int stride, - int thresh, int ithresh, int hev_thresh) { - FilterLoop24(u + 4, 1, stride, 8, thresh, ithresh, hev_thresh); - FilterLoop24(v + 4, 1, stride, 8, thresh, ithresh, hev_thresh); -} - -#undef MUL - -//------------------------------------------------------------------------------ -// Simple In-loop filtering (Paragraph 15.2) - -static void SimpleVFilter16(uint8_t* p, int stride, int thresh) { - int i; - const int thresh2 = 2 * thresh + 1; - int temp0, temp1, temp2, temp3, temp4, temp5, temp6, temp7, temp8; - uint8_t* p1 = p - stride; - __asm__ volatile ( - ".set push \n\t" - ".set noreorder \n\t" - "li %[i], 16 \n\t" - "0: \n\t" - "negu %[temp4], %[stride] \n\t" - "sll %[temp5], %[temp4], 1 \n\t" - "lbu %[temp2], 0(%[p]) \n\t" - "lbux %[temp3], %[stride](%[p]) \n\t" - "lbux %[temp1], %[temp4](%[p]) \n\t" - "lbux %[temp0], %[temp5](%[p]) \n\t" - "subu %[temp7], %[temp1], %[temp2] \n\t" - "subu %[temp6], %[temp0], %[temp3] \n\t" - "absq_s.w %[temp4], %[temp7] \n\t" - "absq_s.w %[temp5], %[temp6] \n\t" - "sll %[temp4], %[temp4], 2 \n\t" - "subu %[temp5], %[temp5], %[thresh2] \n\t" - "addu %[temp5], %[temp4], %[temp5] \n\t" - "negu %[temp8], %[temp7] \n\t" - "bgtz %[temp5], 1f \n\t" - " addiu %[i], %[i], -1 \n\t" - "sll %[temp4], %[temp8], 1 \n\t" - "shll_s.w %[temp5], %[temp6], 24 \n\t" - "addu %[temp3], %[temp4], %[temp8] \n\t" - "sra %[temp5], %[temp5], 24 \n\t" - "addu %[temp3], %[temp3], %[temp5] \n\t" - "addiu %[temp7], %[temp3], 3 \n\t" - "sra %[temp7], %[temp7], 3 \n\t" - "shra_r.w %[temp8], %[temp3], 3 \n\t" - "shll_s.w %[temp0], %[temp7], 27 \n\t" - "shll_s.w %[temp4], %[temp8], 27 \n\t" - "sra %[temp0], %[temp0], 27 \n\t" - "sra %[temp4], %[temp4], 27 \n\t" - "addu %[temp7], %[temp1], %[temp0] \n\t" - "subu %[temp2], %[temp2], %[temp4] \n\t" - "lbux %[temp3], %[temp7](%[VP8kclip1]) \n\t" - "lbux %[temp4], %[temp2](%[VP8kclip1]) \n\t" - "sb %[temp3], 0(%[p1]) \n\t" - "sb %[temp4], 0(%[p]) \n\t" - "1: \n\t" - "addiu %[p1], %[p1], 1 \n\t" - "bgtz %[i], 0b \n\t" - " addiu %[p], %[p], 1 \n\t" - " .set pop \n\t" - : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [temp2]"=&r"(temp2), - [temp3]"=&r"(temp3), [temp4]"=&r"(temp4), [temp5]"=&r"(temp5), - [temp6]"=&r"(temp6), [temp7]"=&r"(temp7), [temp8]"=&r"(temp8), - [p]"+&r"(p), [i]"=&r"(i), [p1]"+&r"(p1) - : [stride]"r"(stride), [VP8kclip1]"r"(VP8kclip1), [thresh2]"r"(thresh2) - : "memory" - ); -} - -// TEMP0 = SRC[A + A1 * BPS] -// TEMP1 = SRC[B + B1 * BPS] -// TEMP2 = SRC[C + C1 * BPS] -// TEMP3 = SRC[D + D1 * BPS] -#define LOAD_4_BYTES(TEMP0, TEMP1, TEMP2, TEMP3, \ - A, A1, B, B1, C, C1, D, D1, SRC) \ - "lbu %[" #TEMP0 "], " #A "+" #A1 "*" XSTR(BPS) "(%[" #SRC "]) \n\t" \ - "lbu %[" #TEMP1 "], " #B "+" #B1 "*" XSTR(BPS) "(%[" #SRC "]) \n\t" \ - "lbu %[" #TEMP2 "], " #C "+" #C1 "*" XSTR(BPS) "(%[" #SRC "]) \n\t" \ - "lbu %[" #TEMP3 "], " #D "+" #D1 "*" XSTR(BPS) "(%[" #SRC "]) \n\t" \ - -static void SimpleHFilter16(uint8_t* p, int stride, int thresh) { - int i; - const int thresh2 = 2 * thresh + 1; - int temp0, temp1, temp2, temp3, temp4, temp5, temp6, temp7, temp8; - __asm__ volatile ( - ".set push \n\t" - ".set noreorder \n\t" - "li %[i], 16 \n\t" - "0: \n\t" - LOAD_4_BYTES(temp0, temp1, temp2, temp3, -2, 0, -1, 0, 0, 0, 1, 0, p) - "subu %[temp7], %[temp1], %[temp2] \n\t" - "subu %[temp6], %[temp0], %[temp3] \n\t" - "absq_s.w %[temp4], %[temp7] \n\t" - "absq_s.w %[temp5], %[temp6] \n\t" - "sll %[temp4], %[temp4], 2 \n\t" - "addu %[temp5], %[temp4], %[temp5] \n\t" - "subu %[temp5], %[temp5], %[thresh2] \n\t" - "negu %[temp8], %[temp7] \n\t" - "bgtz %[temp5], 1f \n\t" - " addiu %[i], %[i], -1 \n\t" - "sll %[temp4], %[temp8], 1 \n\t" - "shll_s.w %[temp5], %[temp6], 24 \n\t" - "addu %[temp3], %[temp4], %[temp8] \n\t" - "sra %[temp5], %[temp5], 24 \n\t" - "addu %[temp3], %[temp3], %[temp5] \n\t" - "addiu %[temp7], %[temp3], 3 \n\t" - "sra %[temp7], %[temp7], 3 \n\t" - "shra_r.w %[temp8], %[temp3], 3 \n\t" - "shll_s.w %[temp0], %[temp7], 27 \n\t" - "shll_s.w %[temp4], %[temp8], 27 \n\t" - "sra %[temp0], %[temp0], 27 \n\t" - "sra %[temp4], %[temp4], 27 \n\t" - "addu %[temp7], %[temp1], %[temp0] \n\t" - "subu %[temp2], %[temp2], %[temp4] \n\t" - "lbux %[temp3], %[temp7](%[VP8kclip1]) \n\t" - "lbux %[temp4], %[temp2](%[VP8kclip1]) \n\t" - "sb %[temp3], -1(%[p]) \n\t" - "sb %[temp4], 0(%[p]) \n\t" - "1: \n\t" - "bgtz %[i], 0b \n\t" - " addu %[p], %[p], %[stride] \n\t" - ".set pop \n\t" - : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [temp2]"=&r"(temp2), - [temp3]"=&r"(temp3), [temp4]"=&r"(temp4), [temp5]"=&r"(temp5), - [temp6]"=&r"(temp6), [temp7]"=&r"(temp7), [temp8]"=&r"(temp8), - [p]"+&r"(p), [i]"=&r"(i) - : [stride]"r"(stride), [VP8kclip1]"r"(VP8kclip1), [thresh2]"r"(thresh2) - : "memory" - ); -} - -static void SimpleVFilter16i(uint8_t* p, int stride, int thresh) { - int k; - for (k = 3; k > 0; --k) { - p += 4 * stride; - SimpleVFilter16(p, stride, thresh); - } -} - -static void SimpleHFilter16i(uint8_t* p, int stride, int thresh) { - int k; - for (k = 3; k > 0; --k) { - p += 4; - SimpleHFilter16(p, stride, thresh); - } -} - -// DST[A * BPS] = TEMP0 -// DST[B + C * BPS] = TEMP1 -#define STORE_8_BYTES(TEMP0, TEMP1, A, B, C, DST) \ - "usw %[" #TEMP0 "], " #A "*" XSTR(BPS) "(%[" #DST "]) \n\t" \ - "usw %[" #TEMP1 "], " #B "+" #C "*" XSTR(BPS) "(%[" #DST "]) \n\t" - -static void VE4(uint8_t* dst) { // vertical - const uint8_t* top = dst - BPS; - int temp0, temp1, temp2, temp3, temp4, temp5, temp6; - __asm__ volatile ( - "ulw %[temp0], -1(%[top]) \n\t" - "ulh %[temp1], 3(%[top]) \n\t" - "preceu.ph.qbr %[temp2], %[temp0] \n\t" - "preceu.ph.qbl %[temp3], %[temp0] \n\t" - "preceu.ph.qbr %[temp4], %[temp1] \n\t" - "packrl.ph %[temp5], %[temp3], %[temp2] \n\t" - "packrl.ph %[temp6], %[temp4], %[temp3] \n\t" - "shll.ph %[temp5], %[temp5], 1 \n\t" - "shll.ph %[temp6], %[temp6], 1 \n\t" - "addq.ph %[temp2], %[temp5], %[temp2] \n\t" - "addq.ph %[temp6], %[temp6], %[temp4] \n\t" - "addq.ph %[temp2], %[temp2], %[temp3] \n\t" - "addq.ph %[temp6], %[temp6], %[temp3] \n\t" - "shra_r.ph %[temp2], %[temp2], 2 \n\t" - "shra_r.ph %[temp6], %[temp6], 2 \n\t" - "precr.qb.ph %[temp4], %[temp6], %[temp2] \n\t" - STORE_8_BYTES(temp4, temp4, 0, 0, 1, dst) - STORE_8_BYTES(temp4, temp4, 2, 0, 3, dst) - : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [temp2]"=&r"(temp2), - [temp3]"=&r"(temp3), [temp4]"=&r"(temp4), [temp5]"=&r"(temp5), - [temp6]"=&r"(temp6) - : [top]"r"(top), [dst]"r"(dst) - : "memory" - ); -} - -static void DC4(uint8_t* dst) { // DC - int temp0, temp1, temp2, temp3, temp4; - __asm__ volatile ( - "ulw %[temp0], -1*" XSTR(BPS) "(%[dst]) \n\t" - LOAD_4_BYTES(temp1, temp2, temp3, temp4, -1, 0, -1, 1, -1, 2, -1, 3, dst) - "ins %[temp1], %[temp2], 8, 8 \n\t" - "ins %[temp1], %[temp3], 16, 8 \n\t" - "ins %[temp1], %[temp4], 24, 8 \n\t" - "raddu.w.qb %[temp0], %[temp0] \n\t" - "raddu.w.qb %[temp1], %[temp1] \n\t" - "addu %[temp0], %[temp0], %[temp1] \n\t" - "shra_r.w %[temp0], %[temp0], 3 \n\t" - "replv.qb %[temp0], %[temp0] \n\t" - STORE_8_BYTES(temp0, temp0, 0, 0, 1, dst) - STORE_8_BYTES(temp0, temp0, 2, 0, 3, dst) - : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [temp2]"=&r"(temp2), - [temp3]"=&r"(temp3), [temp4]"=&r"(temp4) - : [dst]"r"(dst) - : "memory" - ); -} - -static void RD4(uint8_t* dst) { // Down-right - int temp0, temp1, temp2, temp3, temp4; - int temp5, temp6, temp7, temp8; - __asm__ volatile ( - LOAD_4_BYTES(temp0, temp1, temp2, temp3, -1, 0, -1, 1, -1, 2, -1, 3, dst) - "ulw %[temp7], -1-" XSTR(BPS) "(%[dst]) \n\t" - "ins %[temp1], %[temp0], 16, 16 \n\t" - "preceu.ph.qbr %[temp5], %[temp7] \n\t" - "ins %[temp2], %[temp1], 16, 16 \n\t" - "preceu.ph.qbl %[temp4], %[temp7] \n\t" - "ins %[temp3], %[temp2], 16, 16 \n\t" - "shll.ph %[temp2], %[temp2], 1 \n\t" - "addq.ph %[temp3], %[temp3], %[temp1] \n\t" - "packrl.ph %[temp6], %[temp5], %[temp1] \n\t" - "addq.ph %[temp3], %[temp3], %[temp2] \n\t" - "addq.ph %[temp1], %[temp1], %[temp5] \n\t" - "shll.ph %[temp6], %[temp6], 1 \n\t" - "addq.ph %[temp1], %[temp1], %[temp6] \n\t" - "packrl.ph %[temp0], %[temp4], %[temp5] \n\t" - "addq.ph %[temp8], %[temp5], %[temp4] \n\t" - "shra_r.ph %[temp3], %[temp3], 2 \n\t" - "shll.ph %[temp0], %[temp0], 1 \n\t" - "shra_r.ph %[temp1], %[temp1], 2 \n\t" - "addq.ph %[temp8], %[temp0], %[temp8] \n\t" - "lbu %[temp5], 3-" XSTR(BPS) "(%[dst]) \n\t" - "precrq.ph.w %[temp7], %[temp7], %[temp7] \n\t" - "shra_r.ph %[temp8], %[temp8], 2 \n\t" - "ins %[temp7], %[temp5], 0, 8 \n\t" - "precr.qb.ph %[temp2], %[temp1], %[temp3] \n\t" - "raddu.w.qb %[temp4], %[temp7] \n\t" - "precr.qb.ph %[temp6], %[temp8], %[temp1] \n\t" - "shra_r.w %[temp4], %[temp4], 2 \n\t" - STORE_8_BYTES(temp2, temp6, 3, 0, 1, dst) - "prepend %[temp2], %[temp8], 8 \n\t" - "prepend %[temp6], %[temp4], 8 \n\t" - STORE_8_BYTES(temp2, temp6, 2, 0, 0, dst) - : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [temp2]"=&r"(temp2), - [temp3]"=&r"(temp3), [temp4]"=&r"(temp4), [temp5]"=&r"(temp5), - [temp6]"=&r"(temp6), [temp7]"=&r"(temp7), [temp8]"=&r"(temp8) - : [dst]"r"(dst) - : "memory" - ); -} - -// TEMP0 = SRC[A * BPS] -// TEMP1 = SRC[B + C * BPS] -#define LOAD_8_BYTES(TEMP0, TEMP1, A, B, C, SRC) \ - "ulw %[" #TEMP0 "], " #A "*" XSTR(BPS) "(%[" #SRC "]) \n\t" \ - "ulw %[" #TEMP1 "], " #B "+" #C "*" XSTR(BPS) "(%[" #SRC "]) \n\t" - -static void LD4(uint8_t* dst) { // Down-Left - int temp0, temp1, temp2, temp3, temp4; - int temp5, temp6, temp7, temp8, temp9; - __asm__ volatile ( - LOAD_8_BYTES(temp0, temp1, -1, 4, -1, dst) - "preceu.ph.qbl %[temp2], %[temp0] \n\t" - "preceu.ph.qbr %[temp3], %[temp0] \n\t" - "preceu.ph.qbr %[temp4], %[temp1] \n\t" - "preceu.ph.qbl %[temp5], %[temp1] \n\t" - "packrl.ph %[temp6], %[temp2], %[temp3] \n\t" - "packrl.ph %[temp7], %[temp4], %[temp2] \n\t" - "packrl.ph %[temp8], %[temp5], %[temp4] \n\t" - "shll.ph %[temp6], %[temp6], 1 \n\t" - "addq.ph %[temp9], %[temp2], %[temp6] \n\t" - "shll.ph %[temp7], %[temp7], 1 \n\t" - "addq.ph %[temp9], %[temp9], %[temp3] \n\t" - "shll.ph %[temp8], %[temp8], 1 \n\t" - "shra_r.ph %[temp9], %[temp9], 2 \n\t" - "addq.ph %[temp3], %[temp4], %[temp7] \n\t" - "addq.ph %[temp0], %[temp5], %[temp8] \n\t" - "addq.ph %[temp3], %[temp3], %[temp2] \n\t" - "addq.ph %[temp0], %[temp0], %[temp4] \n\t" - "shra_r.ph %[temp3], %[temp3], 2 \n\t" - "shra_r.ph %[temp0], %[temp0], 2 \n\t" - "srl %[temp1], %[temp1], 24 \n\t" - "sll %[temp1], %[temp1], 1 \n\t" - "raddu.w.qb %[temp5], %[temp5] \n\t" - "precr.qb.ph %[temp9], %[temp3], %[temp9] \n\t" - "precr.qb.ph %[temp3], %[temp0], %[temp3] \n\t" - "addu %[temp1], %[temp1], %[temp5] \n\t" - "shra_r.w %[temp1], %[temp1], 2 \n\t" - STORE_8_BYTES(temp9, temp3, 0, 0, 2, dst) - "prepend %[temp9], %[temp0], 8 \n\t" - "prepend %[temp3], %[temp1], 8 \n\t" - STORE_8_BYTES(temp9, temp3, 1, 0, 3, dst) - : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [temp2]"=&r"(temp2), - [temp3]"=&r"(temp3), [temp4]"=&r"(temp4), [temp5]"=&r"(temp5), - [temp6]"=&r"(temp6), [temp7]"=&r"(temp7), [temp8]"=&r"(temp8), - [temp9]"=&r"(temp9) - : [dst]"r"(dst) - : "memory" - ); -} - -//------------------------------------------------------------------------------ -// Chroma - -static void DC8uv(uint8_t* dst) { // DC - int temp0, temp1, temp2, temp3, temp4; - int temp5, temp6, temp7, temp8, temp9; - __asm__ volatile ( - LOAD_8_BYTES(temp0, temp1, -1, 4, -1, dst) - LOAD_4_BYTES(temp2, temp3, temp4, temp5, -1, 0, -1, 1, -1, 2, -1, 3, dst) - LOAD_4_BYTES(temp6, temp7, temp8, temp9, -1, 4, -1, 5, -1, 6, -1, 7, dst) - "raddu.w.qb %[temp0], %[temp0] \n\t" - "raddu.w.qb %[temp1], %[temp1] \n\t" - "addu %[temp2], %[temp2], %[temp3] \n\t" - "addu %[temp4], %[temp4], %[temp5] \n\t" - "addu %[temp6], %[temp6], %[temp7] \n\t" - "addu %[temp8], %[temp8], %[temp9] \n\t" - "addu %[temp0], %[temp0], %[temp1] \n\t" - "addu %[temp2], %[temp2], %[temp4] \n\t" - "addu %[temp6], %[temp6], %[temp8] \n\t" - "addu %[temp0], %[temp0], %[temp2] \n\t" - "addu %[temp0], %[temp0], %[temp6] \n\t" - "shra_r.w %[temp0], %[temp0], 4 \n\t" - "replv.qb %[temp0], %[temp0] \n\t" - STORE_8_BYTES(temp0, temp0, 0, 4, 0, dst) - STORE_8_BYTES(temp0, temp0, 1, 4, 1, dst) - STORE_8_BYTES(temp0, temp0, 2, 4, 2, dst) - STORE_8_BYTES(temp0, temp0, 3, 4, 3, dst) - STORE_8_BYTES(temp0, temp0, 4, 4, 4, dst) - STORE_8_BYTES(temp0, temp0, 5, 4, 5, dst) - STORE_8_BYTES(temp0, temp0, 6, 4, 6, dst) - STORE_8_BYTES(temp0, temp0, 7, 4, 7, dst) - : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [temp2]"=&r"(temp2), - [temp3]"=&r"(temp3), [temp4]"=&r"(temp4), [temp5]"=&r"(temp5), - [temp6]"=&r"(temp6), [temp7]"=&r"(temp7), [temp8]"=&r"(temp8), - [temp9]"=&r"(temp9) - : [dst]"r"(dst) - : "memory" - ); -} - -static void DC8uvNoLeft(uint8_t* dst) { // DC with no left samples - int temp0, temp1; - __asm__ volatile ( - LOAD_8_BYTES(temp0, temp1, -1, 4, -1, dst) - "raddu.w.qb %[temp0], %[temp0] \n\t" - "raddu.w.qb %[temp1], %[temp1] \n\t" - "addu %[temp0], %[temp0], %[temp1] \n\t" - "shra_r.w %[temp0], %[temp0], 3 \n\t" - "replv.qb %[temp0], %[temp0] \n\t" - STORE_8_BYTES(temp0, temp0, 0, 4, 0, dst) - STORE_8_BYTES(temp0, temp0, 1, 4, 1, dst) - STORE_8_BYTES(temp0, temp0, 2, 4, 2, dst) - STORE_8_BYTES(temp0, temp0, 3, 4, 3, dst) - STORE_8_BYTES(temp0, temp0, 4, 4, 4, dst) - STORE_8_BYTES(temp0, temp0, 5, 4, 5, dst) - STORE_8_BYTES(temp0, temp0, 6, 4, 6, dst) - STORE_8_BYTES(temp0, temp0, 7, 4, 7, dst) - : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1) - : [dst]"r"(dst) - : "memory" - ); -} - -static void DC8uvNoTop(uint8_t* dst) { // DC with no top samples - int temp0, temp1, temp2, temp3, temp4; - int temp5, temp6, temp7, temp8; - __asm__ volatile ( - LOAD_4_BYTES(temp2, temp3, temp4, temp5, -1, 0, -1, 1, -1, 2, -1, 3, dst) - LOAD_4_BYTES(temp6, temp7, temp8, temp1, -1, 4, -1, 5, -1, 6, -1, 7, dst) - "addu %[temp2], %[temp2], %[temp3] \n\t" - "addu %[temp4], %[temp4], %[temp5] \n\t" - "addu %[temp6], %[temp6], %[temp7] \n\t" - "addu %[temp8], %[temp8], %[temp1] \n\t" - "addu %[temp2], %[temp2], %[temp4] \n\t" - "addu %[temp6], %[temp6], %[temp8] \n\t" - "addu %[temp0], %[temp6], %[temp2] \n\t" - "shra_r.w %[temp0], %[temp0], 3 \n\t" - "replv.qb %[temp0], %[temp0] \n\t" - STORE_8_BYTES(temp0, temp0, 0, 4, 0, dst) - STORE_8_BYTES(temp0, temp0, 1, 4, 1, dst) - STORE_8_BYTES(temp0, temp0, 2, 4, 2, dst) - STORE_8_BYTES(temp0, temp0, 3, 4, 3, dst) - STORE_8_BYTES(temp0, temp0, 4, 4, 4, dst) - STORE_8_BYTES(temp0, temp0, 5, 4, 5, dst) - STORE_8_BYTES(temp0, temp0, 6, 4, 6, dst) - STORE_8_BYTES(temp0, temp0, 7, 4, 7, dst) - : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [temp2]"=&r"(temp2), - [temp3]"=&r"(temp3), [temp4]"=&r"(temp4), [temp5]"=&r"(temp5), - [temp6]"=&r"(temp6), [temp7]"=&r"(temp7), [temp8]"=&r"(temp8) - : [dst]"r"(dst) - : "memory" - ); -} - -#undef LOAD_8_BYTES -#undef STORE_8_BYTES -#undef LOAD_4_BYTES - -#define CLIPPING(SIZE) \ - "preceu.ph.qbl %[temp2], %[temp0] \n\t" \ - "preceu.ph.qbr %[temp0], %[temp0] \n\t" \ -".if " #SIZE " == 8 \n\t" \ - "preceu.ph.qbl %[temp3], %[temp1] \n\t" \ - "preceu.ph.qbr %[temp1], %[temp1] \n\t" \ -".endif \n\t" \ - "addu.ph %[temp2], %[temp2], %[dst_1] \n\t" \ - "addu.ph %[temp0], %[temp0], %[dst_1] \n\t" \ -".if " #SIZE " == 8 \n\t" \ - "addu.ph %[temp3], %[temp3], %[dst_1] \n\t" \ - "addu.ph %[temp1], %[temp1], %[dst_1] \n\t" \ -".endif \n\t" \ - "shll_s.ph %[temp2], %[temp2], 7 \n\t" \ - "shll_s.ph %[temp0], %[temp0], 7 \n\t" \ -".if " #SIZE " == 8 \n\t" \ - "shll_s.ph %[temp3], %[temp3], 7 \n\t" \ - "shll_s.ph %[temp1], %[temp1], 7 \n\t" \ -".endif \n\t" \ - "precrqu_s.qb.ph %[temp0], %[temp2], %[temp0] \n\t" \ -".if " #SIZE " == 8 \n\t" \ - "precrqu_s.qb.ph %[temp1], %[temp3], %[temp1] \n\t" \ -".endif \n\t" - - -#define CLIP_8B_TO_DST(DST, TOP, SIZE) do { \ - int dst_1 = ((int)(DST)[-1] << 16) + (DST)[-1]; \ - int temp0, temp1, temp2, temp3; \ - __asm__ volatile ( \ - ".if " #SIZE " < 8 \n\t" \ - "ulw %[temp0], 0(%[top]) \n\t" \ - "subu.ph %[dst_1], %[dst_1], %[top_1] \n\t" \ - CLIPPING(4) \ - "usw %[temp0], 0(%[dst]) \n\t" \ - ".else \n\t" \ - "ulw %[temp0], 0(%[top]) \n\t" \ - "ulw %[temp1], 4(%[top]) \n\t" \ - "subu.ph %[dst_1], %[dst_1], %[top_1] \n\t" \ - CLIPPING(8) \ - "usw %[temp0], 0(%[dst]) \n\t" \ - "usw %[temp1], 4(%[dst]) \n\t" \ - ".if " #SIZE " == 16 \n\t" \ - "ulw %[temp0], 8(%[top]) \n\t" \ - "ulw %[temp1], 12(%[top]) \n\t" \ - CLIPPING(8) \ - "usw %[temp0], 8(%[dst]) \n\t" \ - "usw %[temp1], 12(%[dst]) \n\t" \ - ".endif \n\t" \ - ".endif \n\t" \ - : [dst_1]"+&r"(dst_1), [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), \ - [temp2]"=&r"(temp2), [temp3]"=&r"(temp3) \ - : [top_1]"r"(top_1), [top]"r"((TOP)), [dst]"r"((DST)) \ - : "memory" \ - ); \ -} while (0) - -#define CLIP_TO_DST(DST, SIZE) do { \ - int y; \ - const uint8_t* top = (DST) - BPS; \ - const int top_1 = ((int)top[-1] << 16) + top[-1]; \ - for (y = 0; y < (SIZE); ++y) { \ - CLIP_8B_TO_DST((DST), top, (SIZE)); \ - (DST) += BPS; \ - } \ -} while (0) - -#define TRUE_MOTION(DST, SIZE) \ -static void TrueMotion##SIZE(uint8_t* (DST)) { \ - CLIP_TO_DST((DST), (SIZE)); \ -} - -TRUE_MOTION(dst, 4) -TRUE_MOTION(dst, 8) -TRUE_MOTION(dst, 16) - -#undef TRUE_MOTION -#undef CLIP_TO_DST -#undef CLIP_8B_TO_DST -#undef CLIPPING - -//------------------------------------------------------------------------------ -// Entry point - -extern void VP8DspInitMIPSdspR2(void); - -WEBP_TSAN_IGNORE_FUNCTION void VP8DspInitMIPSdspR2(void) { - VP8TransformDC = TransformDC; - VP8TransformAC3 = TransformAC3; - VP8Transform = TransformTwo; - - VP8VFilter16 = VFilter16; - VP8HFilter16 = HFilter16; - VP8VFilter8 = VFilter8; - VP8HFilter8 = HFilter8; - VP8VFilter16i = VFilter16i; - VP8HFilter16i = HFilter16i; - VP8VFilter8i = VFilter8i; - VP8HFilter8i = HFilter8i; - VP8SimpleVFilter16 = SimpleVFilter16; - VP8SimpleHFilter16 = SimpleHFilter16; - VP8SimpleVFilter16i = SimpleVFilter16i; - VP8SimpleHFilter16i = SimpleHFilter16i; - - VP8PredLuma4[0] = DC4; - VP8PredLuma4[1] = TrueMotion4; - VP8PredLuma4[2] = VE4; - VP8PredLuma4[4] = RD4; - VP8PredLuma4[6] = LD4; - - VP8PredChroma8[0] = DC8uv; - VP8PredChroma8[1] = TrueMotion8; - VP8PredChroma8[4] = DC8uvNoTop; - VP8PredChroma8[5] = DC8uvNoLeft; - - VP8PredLuma16[1] = TrueMotion16; -} - -#else // !WEBP_USE_MIPS_DSP_R2 - -WEBP_DSP_INIT_STUB(VP8DspInitMIPSdspR2) - -#endif // WEBP_USE_MIPS_DSP_R2 diff --git a/Extended/libwebp/src/dsp/dec_msa.c b/Extended/libwebp/src/dsp/dec_msa.c deleted file mode 100644 index 8090622..0000000 --- a/Extended/libwebp/src/dsp/dec_msa.c +++ /dev/null @@ -1,1020 +0,0 @@ -// Copyright 2016 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// MSA version of dsp functions -// -// Author(s): Prashant Patil (prashant.patil@imgtec.com) - - -#include "src/dsp/dsp.h" - -#if defined(WEBP_USE_MSA) - -#include "src/dsp/msa_macro.h" - -//------------------------------------------------------------------------------ -// Transforms - -#define IDCT_1D_W(in0, in1, in2, in3, out0, out1, out2, out3) { \ - v4i32 a1_m, b1_m, c1_m, d1_m; \ - v4i32 c_tmp1_m, c_tmp2_m, d_tmp1_m, d_tmp2_m; \ - const v4i32 cospi8sqrt2minus1 = __msa_fill_w(20091); \ - const v4i32 sinpi8sqrt2 = __msa_fill_w(35468); \ - \ - a1_m = in0 + in2; \ - b1_m = in0 - in2; \ - c_tmp1_m = (in1 * sinpi8sqrt2) >> 16; \ - c_tmp2_m = in3 + ((in3 * cospi8sqrt2minus1) >> 16); \ - c1_m = c_tmp1_m - c_tmp2_m; \ - d_tmp1_m = in1 + ((in1 * cospi8sqrt2minus1) >> 16); \ - d_tmp2_m = (in3 * sinpi8sqrt2) >> 16; \ - d1_m = d_tmp1_m + d_tmp2_m; \ - BUTTERFLY_4(a1_m, b1_m, c1_m, d1_m, out0, out1, out2, out3); \ -} -#define MULT1(a) ((((a) * 20091) >> 16) + (a)) -#define MULT2(a) (((a) * 35468) >> 16) - -static void TransformOne(const int16_t* in, uint8_t* dst) { - v8i16 input0, input1; - v4i32 in0, in1, in2, in3, hz0, hz1, hz2, hz3, vt0, vt1, vt2, vt3; - v4i32 res0, res1, res2, res3; - const v16i8 zero = { 0 }; - v16i8 dest0, dest1, dest2, dest3; - - LD_SH2(in, 8, input0, input1); - UNPCK_SH_SW(input0, in0, in1); - UNPCK_SH_SW(input1, in2, in3); - IDCT_1D_W(in0, in1, in2, in3, hz0, hz1, hz2, hz3); - TRANSPOSE4x4_SW_SW(hz0, hz1, hz2, hz3, hz0, hz1, hz2, hz3); - IDCT_1D_W(hz0, hz1, hz2, hz3, vt0, vt1, vt2, vt3); - SRARI_W4_SW(vt0, vt1, vt2, vt3, 3); - TRANSPOSE4x4_SW_SW(vt0, vt1, vt2, vt3, vt0, vt1, vt2, vt3); - LD_SB4(dst, BPS, dest0, dest1, dest2, dest3); - ILVR_B4_SW(zero, dest0, zero, dest1, zero, dest2, zero, dest3, - res0, res1, res2, res3); - ILVR_H4_SW(zero, res0, zero, res1, zero, res2, zero, res3, - res0, res1, res2, res3); - ADD4(res0, vt0, res1, vt1, res2, vt2, res3, vt3, res0, res1, res2, res3); - CLIP_SW4_0_255(res0, res1, res2, res3); - PCKEV_B2_SW(res0, res1, res2, res3, vt0, vt1); - res0 = (v4i32)__msa_pckev_b((v16i8)vt0, (v16i8)vt1); - ST4x4_UB(res0, res0, 3, 2, 1, 0, dst, BPS); -} - -static void TransformTwo(const int16_t* in, uint8_t* dst, int do_two) { - TransformOne(in, dst); - if (do_two) { - TransformOne(in + 16, dst + 4); - } -} - -static void TransformWHT(const int16_t* in, int16_t* out) { - v8i16 input0, input1; - const v8i16 mask0 = { 0, 1, 2, 3, 8, 9, 10, 11 }; - const v8i16 mask1 = { 4, 5, 6, 7, 12, 13, 14, 15 }; - const v8i16 mask2 = { 0, 4, 8, 12, 1, 5, 9, 13 }; - const v8i16 mask3 = { 3, 7, 11, 15, 2, 6, 10, 14 }; - v8i16 tmp0, tmp1, tmp2, tmp3; - v8i16 out0, out1; - - LD_SH2(in, 8, input0, input1); - input1 = SLDI_SH(input1, input1, 8); - tmp0 = input0 + input1; - tmp1 = input0 - input1; - VSHF_H2_SH(tmp0, tmp1, tmp0, tmp1, mask0, mask1, tmp2, tmp3); - out0 = tmp2 + tmp3; - out1 = tmp2 - tmp3; - VSHF_H2_SH(out0, out1, out0, out1, mask2, mask3, input0, input1); - tmp0 = input0 + input1; - tmp1 = input0 - input1; - VSHF_H2_SH(tmp0, tmp1, tmp0, tmp1, mask0, mask1, tmp2, tmp3); - tmp0 = tmp2 + tmp3; - tmp1 = tmp2 - tmp3; - ADDVI_H2_SH(tmp0, 3, tmp1, 3, out0, out1); - SRAI_H2_SH(out0, out1, 3); - out[0] = __msa_copy_s_h(out0, 0); - out[16] = __msa_copy_s_h(out0, 4); - out[32] = __msa_copy_s_h(out1, 0); - out[48] = __msa_copy_s_h(out1, 4); - out[64] = __msa_copy_s_h(out0, 1); - out[80] = __msa_copy_s_h(out0, 5); - out[96] = __msa_copy_s_h(out1, 1); - out[112] = __msa_copy_s_h(out1, 5); - out[128] = __msa_copy_s_h(out0, 2); - out[144] = __msa_copy_s_h(out0, 6); - out[160] = __msa_copy_s_h(out1, 2); - out[176] = __msa_copy_s_h(out1, 6); - out[192] = __msa_copy_s_h(out0, 3); - out[208] = __msa_copy_s_h(out0, 7); - out[224] = __msa_copy_s_h(out1, 3); - out[240] = __msa_copy_s_h(out1, 7); -} - -static void TransformDC(const int16_t* in, uint8_t* dst) { - const int DC = (in[0] + 4) >> 3; - const v8i16 tmp0 = __msa_fill_h(DC); - ADDBLK_ST4x4_UB(tmp0, tmp0, tmp0, tmp0, dst, BPS); -} - -static void TransformAC3(const int16_t* in, uint8_t* dst) { - const int a = in[0] + 4; - const int c4 = MULT2(in[4]); - const int d4 = MULT1(in[4]); - const int in2 = MULT2(in[1]); - const int in3 = MULT1(in[1]); - v4i32 tmp0 = { 0 }; - v4i32 out0 = __msa_fill_w(a + d4); - v4i32 out1 = __msa_fill_w(a + c4); - v4i32 out2 = __msa_fill_w(a - c4); - v4i32 out3 = __msa_fill_w(a - d4); - v4i32 res0, res1, res2, res3; - const v4i32 zero = { 0 }; - v16u8 dest0, dest1, dest2, dest3; - - INSERT_W4_SW(in3, in2, -in2, -in3, tmp0); - ADD4(out0, tmp0, out1, tmp0, out2, tmp0, out3, tmp0, - out0, out1, out2, out3); - SRAI_W4_SW(out0, out1, out2, out3, 3); - LD_UB4(dst, BPS, dest0, dest1, dest2, dest3); - ILVR_B4_SW(zero, dest0, zero, dest1, zero, dest2, zero, dest3, - res0, res1, res2, res3); - ILVR_H4_SW(zero, res0, zero, res1, zero, res2, zero, res3, - res0, res1, res2, res3); - ADD4(res0, out0, res1, out1, res2, out2, res3, out3, res0, res1, res2, res3); - CLIP_SW4_0_255(res0, res1, res2, res3); - PCKEV_B2_SW(res0, res1, res2, res3, out0, out1); - res0 = (v4i32)__msa_pckev_b((v16i8)out0, (v16i8)out1); - ST4x4_UB(res0, res0, 3, 2, 1, 0, dst, BPS); -} - -//------------------------------------------------------------------------------ -// Edge filtering functions - -#define FLIP_SIGN2(in0, in1, out0, out1) { \ - out0 = (v16i8)__msa_xori_b(in0, 0x80); \ - out1 = (v16i8)__msa_xori_b(in1, 0x80); \ -} - -#define FLIP_SIGN4(in0, in1, in2, in3, out0, out1, out2, out3) { \ - FLIP_SIGN2(in0, in1, out0, out1); \ - FLIP_SIGN2(in2, in3, out2, out3); \ -} - -#define FILT_VAL(q0_m, p0_m, mask, filt) do { \ - v16i8 q0_sub_p0; \ - q0_sub_p0 = __msa_subs_s_b(q0_m, p0_m); \ - filt = __msa_adds_s_b(filt, q0_sub_p0); \ - filt = __msa_adds_s_b(filt, q0_sub_p0); \ - filt = __msa_adds_s_b(filt, q0_sub_p0); \ - filt = filt & mask; \ -} while (0) - -#define FILT2(q_m, p_m, q, p) do { \ - u_r = SRAI_H(temp1, 7); \ - u_r = __msa_sat_s_h(u_r, 7); \ - u_l = SRAI_H(temp3, 7); \ - u_l = __msa_sat_s_h(u_l, 7); \ - u = __msa_pckev_b((v16i8)u_l, (v16i8)u_r); \ - q_m = __msa_subs_s_b(q_m, u); \ - p_m = __msa_adds_s_b(p_m, u); \ - q = __msa_xori_b((v16u8)q_m, 0x80); \ - p = __msa_xori_b((v16u8)p_m, 0x80); \ -} while (0) - -#define LPF_FILTER4_4W(p1, p0, q0, q1, mask, hev) do { \ - v16i8 p1_m, p0_m, q0_m, q1_m; \ - v16i8 filt, t1, t2; \ - const v16i8 cnst4b = __msa_ldi_b(4); \ - const v16i8 cnst3b = __msa_ldi_b(3); \ - \ - FLIP_SIGN4(p1, p0, q0, q1, p1_m, p0_m, q0_m, q1_m); \ - filt = __msa_subs_s_b(p1_m, q1_m); \ - filt = filt & hev; \ - FILT_VAL(q0_m, p0_m, mask, filt); \ - t1 = __msa_adds_s_b(filt, cnst4b); \ - t1 = SRAI_B(t1, 3); \ - t2 = __msa_adds_s_b(filt, cnst3b); \ - t2 = SRAI_B(t2, 3); \ - q0_m = __msa_subs_s_b(q0_m, t1); \ - q0 = __msa_xori_b((v16u8)q0_m, 0x80); \ - p0_m = __msa_adds_s_b(p0_m, t2); \ - p0 = __msa_xori_b((v16u8)p0_m, 0x80); \ - filt = __msa_srari_b(t1, 1); \ - hev = __msa_xori_b(hev, 0xff); \ - filt = filt & hev; \ - q1_m = __msa_subs_s_b(q1_m, filt); \ - q1 = __msa_xori_b((v16u8)q1_m, 0x80); \ - p1_m = __msa_adds_s_b(p1_m, filt); \ - p1 = __msa_xori_b((v16u8)p1_m, 0x80); \ -} while (0) - -#define LPF_MBFILTER(p2, p1, p0, q0, q1, q2, mask, hev) do { \ - v16i8 p2_m, p1_m, p0_m, q2_m, q1_m, q0_m; \ - v16i8 u, filt, t1, t2, filt_sign; \ - v8i16 filt_r, filt_l, u_r, u_l; \ - v8i16 temp0, temp1, temp2, temp3; \ - const v16i8 cnst4b = __msa_ldi_b(4); \ - const v16i8 cnst3b = __msa_ldi_b(3); \ - const v8i16 cnst9h = __msa_ldi_h(9); \ - const v8i16 cnst63h = __msa_ldi_h(63); \ - \ - FLIP_SIGN4(p1, p0, q0, q1, p1_m, p0_m, q0_m, q1_m); \ - filt = __msa_subs_s_b(p1_m, q1_m); \ - FILT_VAL(q0_m, p0_m, mask, filt); \ - FLIP_SIGN2(p2, q2, p2_m, q2_m); \ - t2 = filt & hev; \ - /* filt_val &= ~hev */ \ - hev = __msa_xori_b(hev, 0xff); \ - filt = filt & hev; \ - t1 = __msa_adds_s_b(t2, cnst4b); \ - t1 = SRAI_B(t1, 3); \ - t2 = __msa_adds_s_b(t2, cnst3b); \ - t2 = SRAI_B(t2, 3); \ - q0_m = __msa_subs_s_b(q0_m, t1); \ - p0_m = __msa_adds_s_b(p0_m, t2); \ - filt_sign = __msa_clti_s_b(filt, 0); \ - ILVRL_B2_SH(filt_sign, filt, filt_r, filt_l); \ - /* update q2/p2 */ \ - temp0 = filt_r * cnst9h; \ - temp1 = temp0 + cnst63h; \ - temp2 = filt_l * cnst9h; \ - temp3 = temp2 + cnst63h; \ - FILT2(q2_m, p2_m, q2, p2); \ - /* update q1/p1 */ \ - temp1 = temp1 + temp0; \ - temp3 = temp3 + temp2; \ - FILT2(q1_m, p1_m, q1, p1); \ - /* update q0/p0 */ \ - temp1 = temp1 + temp0; \ - temp3 = temp3 + temp2; \ - FILT2(q0_m, p0_m, q0, p0); \ -} while (0) - -#define LPF_MASK_HEV(p3_in, p2_in, p1_in, p0_in, \ - q0_in, q1_in, q2_in, q3_in, \ - limit_in, b_limit_in, thresh_in, \ - hev_out, mask_out) do { \ - v16u8 p3_asub_p2_m, p2_asub_p1_m, p1_asub_p0_m, q1_asub_q0_m; \ - v16u8 p1_asub_q1_m, p0_asub_q0_m, q3_asub_q2_m, q2_asub_q1_m; \ - v16u8 flat_out; \ - \ - /* absolute subtraction of pixel values */ \ - p3_asub_p2_m = __msa_asub_u_b(p3_in, p2_in); \ - p2_asub_p1_m = __msa_asub_u_b(p2_in, p1_in); \ - p1_asub_p0_m = __msa_asub_u_b(p1_in, p0_in); \ - q1_asub_q0_m = __msa_asub_u_b(q1_in, q0_in); \ - q2_asub_q1_m = __msa_asub_u_b(q2_in, q1_in); \ - q3_asub_q2_m = __msa_asub_u_b(q3_in, q2_in); \ - p0_asub_q0_m = __msa_asub_u_b(p0_in, q0_in); \ - p1_asub_q1_m = __msa_asub_u_b(p1_in, q1_in); \ - /* calculation of hev */ \ - flat_out = __msa_max_u_b(p1_asub_p0_m, q1_asub_q0_m); \ - hev_out = (thresh_in < flat_out); \ - /* calculation of mask */ \ - p0_asub_q0_m = __msa_adds_u_b(p0_asub_q0_m, p0_asub_q0_m); \ - p1_asub_q1_m = SRAI_B(p1_asub_q1_m, 1); \ - p0_asub_q0_m = __msa_adds_u_b(p0_asub_q0_m, p1_asub_q1_m); \ - mask_out = (b_limit_in < p0_asub_q0_m); \ - mask_out = __msa_max_u_b(flat_out, mask_out); \ - p3_asub_p2_m = __msa_max_u_b(p3_asub_p2_m, p2_asub_p1_m); \ - mask_out = __msa_max_u_b(p3_asub_p2_m, mask_out); \ - q2_asub_q1_m = __msa_max_u_b(q2_asub_q1_m, q3_asub_q2_m); \ - mask_out = __msa_max_u_b(q2_asub_q1_m, mask_out); \ - mask_out = (limit_in < mask_out); \ - mask_out = __msa_xori_b(mask_out, 0xff); \ -} while (0) - -#define ST6x1_UB(in0, in0_idx, in1, in1_idx, pdst, stride) do { \ - const uint16_t tmp0_h = __msa_copy_s_h((v8i16)in1, in1_idx); \ - const uint32_t tmp0_w = __msa_copy_s_w((v4i32)in0, in0_idx); \ - SW(tmp0_w, pdst); \ - SH(tmp0_h, pdst + stride); \ -} while (0) - -#define ST6x4_UB(in0, start_in0_idx, in1, start_in1_idx, pdst, stride) do { \ - uint8_t* ptmp1 = (uint8_t*)pdst; \ - ST6x1_UB(in0, start_in0_idx, in1, start_in1_idx, ptmp1, 4); \ - ptmp1 += stride; \ - ST6x1_UB(in0, start_in0_idx + 1, in1, start_in1_idx + 1, ptmp1, 4); \ - ptmp1 += stride; \ - ST6x1_UB(in0, start_in0_idx + 2, in1, start_in1_idx + 2, ptmp1, 4); \ - ptmp1 += stride; \ - ST6x1_UB(in0, start_in0_idx + 3, in1, start_in1_idx + 3, ptmp1, 4); \ -} while (0) - -#define LPF_SIMPLE_FILT(p1_in, p0_in, q0_in, q1_in, mask) do { \ - v16i8 p1_m, p0_m, q0_m, q1_m, filt, filt1, filt2; \ - const v16i8 cnst4b = __msa_ldi_b(4); \ - const v16i8 cnst3b = __msa_ldi_b(3); \ - \ - FLIP_SIGN4(p1_in, p0_in, q0_in, q1_in, p1_m, p0_m, q0_m, q1_m); \ - filt = __msa_subs_s_b(p1_m, q1_m); \ - FILT_VAL(q0_m, p0_m, mask, filt); \ - filt1 = __msa_adds_s_b(filt, cnst4b); \ - filt1 = SRAI_B(filt1, 3); \ - filt2 = __msa_adds_s_b(filt, cnst3b); \ - filt2 = SRAI_B(filt2, 3); \ - q0_m = __msa_subs_s_b(q0_m, filt1); \ - p0_m = __msa_adds_s_b(p0_m, filt2); \ - q0_in = __msa_xori_b((v16u8)q0_m, 0x80); \ - p0_in = __msa_xori_b((v16u8)p0_m, 0x80); \ -} while (0) - -#define LPF_SIMPLE_MASK(p1, p0, q0, q1, b_limit, mask) do { \ - v16u8 p1_a_sub_q1, p0_a_sub_q0; \ - \ - p0_a_sub_q0 = __msa_asub_u_b(p0, q0); \ - p1_a_sub_q1 = __msa_asub_u_b(p1, q1); \ - p1_a_sub_q1 = (v16u8)__msa_srli_b((v16i8)p1_a_sub_q1, 1); \ - p0_a_sub_q0 = __msa_adds_u_b(p0_a_sub_q0, p0_a_sub_q0); \ - mask = __msa_adds_u_b(p0_a_sub_q0, p1_a_sub_q1); \ - mask = (mask <= b_limit); \ -} while (0) - -static void VFilter16(uint8_t* src, int stride, - int b_limit_in, int limit_in, int thresh_in) { - uint8_t* ptemp = src - 4 * stride; - v16u8 p3, p2, p1, p0, q3, q2, q1, q0; - v16u8 mask, hev; - const v16u8 thresh = (v16u8)__msa_fill_b(thresh_in); - const v16u8 limit = (v16u8)__msa_fill_b(limit_in); - const v16u8 b_limit = (v16u8)__msa_fill_b(b_limit_in); - - LD_UB8(ptemp, stride, p3, p2, p1, p0, q0, q1, q2, q3); - LPF_MASK_HEV(p3, p2, p1, p0, q0, q1, q2, q3, limit, b_limit, thresh, - hev, mask); - LPF_MBFILTER(p2, p1, p0, q0, q1, q2, mask, hev); - ptemp = src - 3 * stride; - ST_UB4(p2, p1, p0, q0, ptemp, stride); - ptemp += (4 * stride); - ST_UB2(q1, q2, ptemp, stride); -} - -static void HFilter16(uint8_t* src, int stride, - int b_limit_in, int limit_in, int thresh_in) { - uint8_t* ptmp = src - 4; - v16u8 p3, p2, p1, p0, q3, q2, q1, q0; - v16u8 mask, hev; - v16u8 row0, row1, row2, row3, row4, row5, row6, row7, row8; - v16u8 row9, row10, row11, row12, row13, row14, row15; - v8i16 tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7; - const v16u8 b_limit = (v16u8)__msa_fill_b(b_limit_in); - const v16u8 limit = (v16u8)__msa_fill_b(limit_in); - const v16u8 thresh = (v16u8)__msa_fill_b(thresh_in); - - LD_UB8(ptmp, stride, row0, row1, row2, row3, row4, row5, row6, row7); - ptmp += (8 * stride); - LD_UB8(ptmp, stride, row8, row9, row10, row11, row12, row13, row14, row15); - TRANSPOSE16x8_UB_UB(row0, row1, row2, row3, row4, row5, row6, row7, - row8, row9, row10, row11, row12, row13, row14, row15, - p3, p2, p1, p0, q0, q1, q2, q3); - LPF_MASK_HEV(p3, p2, p1, p0, q0, q1, q2, q3, limit, b_limit, thresh, - hev, mask); - LPF_MBFILTER(p2, p1, p0, q0, q1, q2, mask, hev); - ILVR_B2_SH(p1, p2, q0, p0, tmp0, tmp1); - ILVRL_H2_SH(tmp1, tmp0, tmp3, tmp4); - ILVL_B2_SH(p1, p2, q0, p0, tmp0, tmp1); - ILVRL_H2_SH(tmp1, tmp0, tmp6, tmp7); - ILVRL_B2_SH(q2, q1, tmp2, tmp5); - ptmp = src - 3; - ST6x1_UB(tmp3, 0, tmp2, 0, ptmp, 4); - ptmp += stride; - ST6x1_UB(tmp3, 1, tmp2, 1, ptmp, 4); - ptmp += stride; - ST6x1_UB(tmp3, 2, tmp2, 2, ptmp, 4); - ptmp += stride; - ST6x1_UB(tmp3, 3, tmp2, 3, ptmp, 4); - ptmp += stride; - ST6x1_UB(tmp4, 0, tmp2, 4, ptmp, 4); - ptmp += stride; - ST6x1_UB(tmp4, 1, tmp2, 5, ptmp, 4); - ptmp += stride; - ST6x1_UB(tmp4, 2, tmp2, 6, ptmp, 4); - ptmp += stride; - ST6x1_UB(tmp4, 3, tmp2, 7, ptmp, 4); - ptmp += stride; - ST6x1_UB(tmp6, 0, tmp5, 0, ptmp, 4); - ptmp += stride; - ST6x1_UB(tmp6, 1, tmp5, 1, ptmp, 4); - ptmp += stride; - ST6x1_UB(tmp6, 2, tmp5, 2, ptmp, 4); - ptmp += stride; - ST6x1_UB(tmp6, 3, tmp5, 3, ptmp, 4); - ptmp += stride; - ST6x1_UB(tmp7, 0, tmp5, 4, ptmp, 4); - ptmp += stride; - ST6x1_UB(tmp7, 1, tmp5, 5, ptmp, 4); - ptmp += stride; - ST6x1_UB(tmp7, 2, tmp5, 6, ptmp, 4); - ptmp += stride; - ST6x1_UB(tmp7, 3, tmp5, 7, ptmp, 4); -} - -// on three inner edges -static void VFilterHorEdge16i(uint8_t* src, int stride, - int b_limit, int limit, int thresh) { - v16u8 mask, hev; - v16u8 p3, p2, p1, p0, q3, q2, q1, q0; - const v16u8 thresh0 = (v16u8)__msa_fill_b(thresh); - const v16u8 b_limit0 = (v16u8)__msa_fill_b(b_limit); - const v16u8 limit0 = (v16u8)__msa_fill_b(limit); - - LD_UB8((src - 4 * stride), stride, p3, p2, p1, p0, q0, q1, q2, q3); - LPF_MASK_HEV(p3, p2, p1, p0, q0, q1, q2, q3, limit0, b_limit0, thresh0, - hev, mask); - LPF_FILTER4_4W(p1, p0, q0, q1, mask, hev); - ST_UB4(p1, p0, q0, q1, (src - 2 * stride), stride); -} - -static void VFilter16i(uint8_t* src_y, int stride, - int b_limit, int limit, int thresh) { - VFilterHorEdge16i(src_y + 4 * stride, stride, b_limit, limit, thresh); - VFilterHorEdge16i(src_y + 8 * stride, stride, b_limit, limit, thresh); - VFilterHorEdge16i(src_y + 12 * stride, stride, b_limit, limit, thresh); -} - -static void HFilterVertEdge16i(uint8_t* src, int stride, - int b_limit, int limit, int thresh) { - v16u8 mask, hev; - v16u8 p3, p2, p1, p0, q3, q2, q1, q0; - v16u8 row0, row1, row2, row3, row4, row5, row6, row7; - v16u8 row8, row9, row10, row11, row12, row13, row14, row15; - v8i16 tmp0, tmp1, tmp2, tmp3, tmp4, tmp5; - const v16u8 thresh0 = (v16u8)__msa_fill_b(thresh); - const v16u8 b_limit0 = (v16u8)__msa_fill_b(b_limit); - const v16u8 limit0 = (v16u8)__msa_fill_b(limit); - - LD_UB8(src - 4, stride, row0, row1, row2, row3, row4, row5, row6, row7); - LD_UB8(src - 4 + (8 * stride), stride, - row8, row9, row10, row11, row12, row13, row14, row15); - TRANSPOSE16x8_UB_UB(row0, row1, row2, row3, row4, row5, row6, row7, - row8, row9, row10, row11, row12, row13, row14, row15, - p3, p2, p1, p0, q0, q1, q2, q3); - LPF_MASK_HEV(p3, p2, p1, p0, q0, q1, q2, q3, limit0, b_limit0, thresh0, - hev, mask); - LPF_FILTER4_4W(p1, p0, q0, q1, mask, hev); - ILVR_B2_SH(p0, p1, q1, q0, tmp0, tmp1); - ILVRL_H2_SH(tmp1, tmp0, tmp2, tmp3); - ILVL_B2_SH(p0, p1, q1, q0, tmp0, tmp1); - ILVRL_H2_SH(tmp1, tmp0, tmp4, tmp5); - src -= 2; - ST4x8_UB(tmp2, tmp3, src, stride); - src += (8 * stride); - ST4x8_UB(tmp4, tmp5, src, stride); -} - -static void HFilter16i(uint8_t* src_y, int stride, - int b_limit, int limit, int thresh) { - HFilterVertEdge16i(src_y + 4, stride, b_limit, limit, thresh); - HFilterVertEdge16i(src_y + 8, stride, b_limit, limit, thresh); - HFilterVertEdge16i(src_y + 12, stride, b_limit, limit, thresh); -} - -// 8-pixels wide variants, for chroma filtering -static void VFilter8(uint8_t* src_u, uint8_t* src_v, int stride, - int b_limit_in, int limit_in, int thresh_in) { - uint8_t* ptmp_src_u = src_u - 4 * stride; - uint8_t* ptmp_src_v = src_v - 4 * stride; - uint64_t p2_d, p1_d, p0_d, q0_d, q1_d, q2_d; - v16u8 p3, p2, p1, p0, q3, q2, q1, q0, mask, hev; - v16u8 p3_u, p2_u, p1_u, p0_u, q3_u, q2_u, q1_u, q0_u; - v16u8 p3_v, p2_v, p1_v, p0_v, q3_v, q2_v, q1_v, q0_v; - const v16u8 b_limit = (v16u8)__msa_fill_b(b_limit_in); - const v16u8 limit = (v16u8)__msa_fill_b(limit_in); - const v16u8 thresh = (v16u8)__msa_fill_b(thresh_in); - - LD_UB8(ptmp_src_u, stride, p3_u, p2_u, p1_u, p0_u, q0_u, q1_u, q2_u, q3_u); - LD_UB8(ptmp_src_v, stride, p3_v, p2_v, p1_v, p0_v, q0_v, q1_v, q2_v, q3_v); - ILVR_D4_UB(p3_v, p3_u, p2_v, p2_u, p1_v, p1_u, p0_v, p0_u, p3, p2, p1, p0); - ILVR_D4_UB(q0_v, q0_u, q1_v, q1_u, q2_v, q2_u, q3_v, q3_u, q0, q1, q2, q3); - LPF_MASK_HEV(p3, p2, p1, p0, q0, q1, q2, q3, limit, b_limit, thresh, - hev, mask); - LPF_MBFILTER(p2, p1, p0, q0, q1, q2, mask, hev); - p2_d = __msa_copy_s_d((v2i64)p2, 0); - p1_d = __msa_copy_s_d((v2i64)p1, 0); - p0_d = __msa_copy_s_d((v2i64)p0, 0); - q0_d = __msa_copy_s_d((v2i64)q0, 0); - q1_d = __msa_copy_s_d((v2i64)q1, 0); - q2_d = __msa_copy_s_d((v2i64)q2, 0); - ptmp_src_u += stride; - SD4(p2_d, p1_d, p0_d, q0_d, ptmp_src_u, stride); - ptmp_src_u += (4 * stride); - SD(q1_d, ptmp_src_u); - ptmp_src_u += stride; - SD(q2_d, ptmp_src_u); - p2_d = __msa_copy_s_d((v2i64)p2, 1); - p1_d = __msa_copy_s_d((v2i64)p1, 1); - p0_d = __msa_copy_s_d((v2i64)p0, 1); - q0_d = __msa_copy_s_d((v2i64)q0, 1); - q1_d = __msa_copy_s_d((v2i64)q1, 1); - q2_d = __msa_copy_s_d((v2i64)q2, 1); - ptmp_src_v += stride; - SD4(p2_d, p1_d, p0_d, q0_d, ptmp_src_v, stride); - ptmp_src_v += (4 * stride); - SD(q1_d, ptmp_src_v); - ptmp_src_v += stride; - SD(q2_d, ptmp_src_v); -} - -static void HFilter8(uint8_t* src_u, uint8_t* src_v, int stride, - int b_limit_in, int limit_in, int thresh_in) { - uint8_t* ptmp_src_u = src_u - 4; - uint8_t* ptmp_src_v = src_v - 4; - v16u8 p3, p2, p1, p0, q3, q2, q1, q0, mask, hev; - v16u8 row0, row1, row2, row3, row4, row5, row6, row7, row8; - v16u8 row9, row10, row11, row12, row13, row14, row15; - v8i16 tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7; - const v16u8 b_limit = (v16u8)__msa_fill_b(b_limit_in); - const v16u8 limit = (v16u8)__msa_fill_b(limit_in); - const v16u8 thresh = (v16u8)__msa_fill_b(thresh_in); - - LD_UB8(ptmp_src_u, stride, row0, row1, row2, row3, row4, row5, row6, row7); - LD_UB8(ptmp_src_v, stride, - row8, row9, row10, row11, row12, row13, row14, row15); - TRANSPOSE16x8_UB_UB(row0, row1, row2, row3, row4, row5, row6, row7, - row8, row9, row10, row11, row12, row13, row14, row15, - p3, p2, p1, p0, q0, q1, q2, q3); - LPF_MASK_HEV(p3, p2, p1, p0, q0, q1, q2, q3, limit, b_limit, thresh, - hev, mask); - LPF_MBFILTER(p2, p1, p0, q0, q1, q2, mask, hev); - ILVR_B2_SH(p1, p2, q0, p0, tmp0, tmp1); - ILVRL_H2_SH(tmp1, tmp0, tmp3, tmp4); - ILVL_B2_SH(p1, p2, q0, p0, tmp0, tmp1); - ILVRL_H2_SH(tmp1, tmp0, tmp6, tmp7); - ILVRL_B2_SH(q2, q1, tmp2, tmp5); - ptmp_src_u += 1; - ST6x4_UB(tmp3, 0, tmp2, 0, ptmp_src_u, stride); - ptmp_src_u += 4 * stride; - ST6x4_UB(tmp4, 0, tmp2, 4, ptmp_src_u, stride); - ptmp_src_v += 1; - ST6x4_UB(tmp6, 0, tmp5, 0, ptmp_src_v, stride); - ptmp_src_v += 4 * stride; - ST6x4_UB(tmp7, 0, tmp5, 4, ptmp_src_v, stride); -} - -static void VFilter8i(uint8_t* src_u, uint8_t* src_v, int stride, - int b_limit_in, int limit_in, int thresh_in) { - uint64_t p1_d, p0_d, q0_d, q1_d; - v16u8 p3, p2, p1, p0, q3, q2, q1, q0, mask, hev; - v16u8 p3_u, p2_u, p1_u, p0_u, q3_u, q2_u, q1_u, q0_u; - v16u8 p3_v, p2_v, p1_v, p0_v, q3_v, q2_v, q1_v, q0_v; - const v16u8 thresh = (v16u8)__msa_fill_b(thresh_in); - const v16u8 limit = (v16u8)__msa_fill_b(limit_in); - const v16u8 b_limit = (v16u8)__msa_fill_b(b_limit_in); - - LD_UB8(src_u, stride, p3_u, p2_u, p1_u, p0_u, q0_u, q1_u, q2_u, q3_u); - src_u += (5 * stride); - LD_UB8(src_v, stride, p3_v, p2_v, p1_v, p0_v, q0_v, q1_v, q2_v, q3_v); - src_v += (5 * stride); - ILVR_D4_UB(p3_v, p3_u, p2_v, p2_u, p1_v, p1_u, p0_v, p0_u, p3, p2, p1, p0); - ILVR_D4_UB(q0_v, q0_u, q1_v, q1_u, q2_v, q2_u, q3_v, q3_u, q0, q1, q2, q3); - LPF_MASK_HEV(p3, p2, p1, p0, q0, q1, q2, q3, limit, b_limit, thresh, - hev, mask); - LPF_FILTER4_4W(p1, p0, q0, q1, mask, hev); - p1_d = __msa_copy_s_d((v2i64)p1, 0); - p0_d = __msa_copy_s_d((v2i64)p0, 0); - q0_d = __msa_copy_s_d((v2i64)q0, 0); - q1_d = __msa_copy_s_d((v2i64)q1, 0); - SD4(q1_d, q0_d, p0_d, p1_d, src_u, -stride); - p1_d = __msa_copy_s_d((v2i64)p1, 1); - p0_d = __msa_copy_s_d((v2i64)p0, 1); - q0_d = __msa_copy_s_d((v2i64)q0, 1); - q1_d = __msa_copy_s_d((v2i64)q1, 1); - SD4(q1_d, q0_d, p0_d, p1_d, src_v, -stride); -} - -static void HFilter8i(uint8_t* src_u, uint8_t* src_v, int stride, - int b_limit_in, int limit_in, int thresh_in) { - v16u8 p3, p2, p1, p0, q3, q2, q1, q0, mask, hev; - v16u8 row0, row1, row2, row3, row4, row5, row6, row7, row8; - v16u8 row9, row10, row11, row12, row13, row14, row15; - v4i32 tmp0, tmp1, tmp2, tmp3, tmp4, tmp5; - const v16u8 thresh = (v16u8)__msa_fill_b(thresh_in); - const v16u8 limit = (v16u8)__msa_fill_b(limit_in); - const v16u8 b_limit = (v16u8)__msa_fill_b(b_limit_in); - - LD_UB8(src_u, stride, row0, row1, row2, row3, row4, row5, row6, row7); - LD_UB8(src_v, stride, - row8, row9, row10, row11, row12, row13, row14, row15); - TRANSPOSE16x8_UB_UB(row0, row1, row2, row3, row4, row5, row6, row7, - row8, row9, row10, row11, row12, row13, row14, row15, - p3, p2, p1, p0, q0, q1, q2, q3); - LPF_MASK_HEV(p3, p2, p1, p0, q0, q1, q2, q3, limit, b_limit, thresh, - hev, mask); - LPF_FILTER4_4W(p1, p0, q0, q1, mask, hev); - ILVR_B2_SW(p0, p1, q1, q0, tmp0, tmp1); - ILVRL_H2_SW(tmp1, tmp0, tmp2, tmp3); - ILVL_B2_SW(p0, p1, q1, q0, tmp0, tmp1); - ILVRL_H2_SW(tmp1, tmp0, tmp4, tmp5); - src_u += 2; - ST4x4_UB(tmp2, tmp2, 0, 1, 2, 3, src_u, stride); - src_u += 4 * stride; - ST4x4_UB(tmp3, tmp3, 0, 1, 2, 3, src_u, stride); - src_v += 2; - ST4x4_UB(tmp4, tmp4, 0, 1, 2, 3, src_v, stride); - src_v += 4 * stride; - ST4x4_UB(tmp5, tmp5, 0, 1, 2, 3, src_v, stride); -} - -static void SimpleVFilter16(uint8_t* src, int stride, int b_limit_in) { - v16u8 p1, p0, q1, q0, mask; - const v16u8 b_limit = (v16u8)__msa_fill_b(b_limit_in); - - LD_UB4(src - 2 * stride, stride, p1, p0, q0, q1); - LPF_SIMPLE_MASK(p1, p0, q0, q1, b_limit, mask); - LPF_SIMPLE_FILT(p1, p0, q0, q1, mask); - ST_UB2(p0, q0, src - stride, stride); -} - -static void SimpleHFilter16(uint8_t* src, int stride, int b_limit_in) { - v16u8 p1, p0, q1, q0, mask, row0, row1, row2, row3, row4, row5, row6, row7; - v16u8 row8, row9, row10, row11, row12, row13, row14, row15; - v8i16 tmp0, tmp1; - const v16u8 b_limit = (v16u8)__msa_fill_b(b_limit_in); - uint8_t* ptemp_src = src - 2; - - LD_UB8(ptemp_src, stride, row0, row1, row2, row3, row4, row5, row6, row7); - LD_UB8(ptemp_src + 8 * stride, stride, - row8, row9, row10, row11, row12, row13, row14, row15); - TRANSPOSE16x4_UB_UB(row0, row1, row2, row3, row4, row5, row6, row7, - row8, row9, row10, row11, row12, row13, row14, row15, - p1, p0, q0, q1); - LPF_SIMPLE_MASK(p1, p0, q0, q1, b_limit, mask); - LPF_SIMPLE_FILT(p1, p0, q0, q1, mask); - ILVRL_B2_SH(q0, p0, tmp1, tmp0); - ptemp_src += 1; - ST2x4_UB(tmp1, 0, ptemp_src, stride); - ptemp_src += 4 * stride; - ST2x4_UB(tmp1, 4, ptemp_src, stride); - ptemp_src += 4 * stride; - ST2x4_UB(tmp0, 0, ptemp_src, stride); - ptemp_src += 4 * stride; - ST2x4_UB(tmp0, 4, ptemp_src, stride); - ptemp_src += 4 * stride; -} - -static void SimpleVFilter16i(uint8_t* src_y, int stride, int b_limit_in) { - SimpleVFilter16(src_y + 4 * stride, stride, b_limit_in); - SimpleVFilter16(src_y + 8 * stride, stride, b_limit_in); - SimpleVFilter16(src_y + 12 * stride, stride, b_limit_in); -} - -static void SimpleHFilter16i(uint8_t* src_y, int stride, int b_limit_in) { - SimpleHFilter16(src_y + 4, stride, b_limit_in); - SimpleHFilter16(src_y + 8, stride, b_limit_in); - SimpleHFilter16(src_y + 12, stride, b_limit_in); -} - -//------------------------------------------------------------------------------ -// Intra predictions -//------------------------------------------------------------------------------ - -// 4x4 - -static void DC4(uint8_t* dst) { // DC - uint32_t dc = 4; - int i; - for (i = 0; i < 4; ++i) dc += dst[i - BPS] + dst[-1 + i * BPS]; - dc >>= 3; - dc = dc | (dc << 8) | (dc << 16) | (dc << 24); - SW4(dc, dc, dc, dc, dst, BPS); -} - -static void TM4(uint8_t* dst) { - const uint8_t* const ptemp = dst - BPS - 1; - v8i16 T, d, r0, r1, r2, r3; - const v16i8 zero = { 0 }; - const v8i16 TL = (v8i16)__msa_fill_h(ptemp[0 * BPS]); - const v8i16 L0 = (v8i16)__msa_fill_h(ptemp[1 * BPS]); - const v8i16 L1 = (v8i16)__msa_fill_h(ptemp[2 * BPS]); - const v8i16 L2 = (v8i16)__msa_fill_h(ptemp[3 * BPS]); - const v8i16 L3 = (v8i16)__msa_fill_h(ptemp[4 * BPS]); - const v16u8 T1 = LD_UB(ptemp + 1); - - T = (v8i16)__msa_ilvr_b(zero, (v16i8)T1); - d = T - TL; - ADD4(d, L0, d, L1, d, L2, d, L3, r0, r1, r2, r3); - CLIP_SH4_0_255(r0, r1, r2, r3); - PCKEV_ST4x4_UB(r0, r1, r2, r3, dst, BPS); -} - -static void VE4(uint8_t* dst) { // vertical - const uint8_t* const ptop = dst - BPS - 1; - const uint32_t val0 = LW(ptop + 0); - const uint32_t val1 = LW(ptop + 4); - uint32_t out; - v16u8 A = { 0 }, B, C, AC, B2, R; - - INSERT_W2_UB(val0, val1, A); - B = SLDI_UB(A, A, 1); - C = SLDI_UB(A, A, 2); - AC = __msa_ave_u_b(A, C); - B2 = __msa_ave_u_b(B, B); - R = __msa_aver_u_b(AC, B2); - out = __msa_copy_s_w((v4i32)R, 0); - SW4(out, out, out, out, dst, BPS); -} - -static void RD4(uint8_t* dst) { // Down-right - const uint8_t* const ptop = dst - 1 - BPS; - uint32_t val0 = LW(ptop + 0); - uint32_t val1 = LW(ptop + 4); - uint32_t val2, val3; - v16u8 A, B, C, AC, B2, R, A1 = { 0 }; - - INSERT_W2_UB(val0, val1, A1); - A = SLDI_UB(A1, A1, 12); - A = (v16u8)__msa_insert_b((v16i8)A, 3, ptop[1 * BPS]); - A = (v16u8)__msa_insert_b((v16i8)A, 2, ptop[2 * BPS]); - A = (v16u8)__msa_insert_b((v16i8)A, 1, ptop[3 * BPS]); - A = (v16u8)__msa_insert_b((v16i8)A, 0, ptop[4 * BPS]); - B = SLDI_UB(A, A, 1); - C = SLDI_UB(A, A, 2); - AC = __msa_ave_u_b(A, C); - B2 = __msa_ave_u_b(B, B); - R = __msa_aver_u_b(AC, B2); - val3 = __msa_copy_s_w((v4i32)R, 0); - R = SLDI_UB(R, R, 1); - val2 = __msa_copy_s_w((v4i32)R, 0); - R = SLDI_UB(R, R, 1); - val1 = __msa_copy_s_w((v4i32)R, 0); - R = SLDI_UB(R, R, 1); - val0 = __msa_copy_s_w((v4i32)R, 0); - SW4(val0, val1, val2, val3, dst, BPS); -} - -static void LD4(uint8_t* dst) { // Down-Left - const uint8_t* const ptop = dst - BPS; - uint32_t val0 = LW(ptop + 0); - uint32_t val1 = LW(ptop + 4); - uint32_t val2, val3; - v16u8 A = { 0 }, B, C, AC, B2, R; - - INSERT_W2_UB(val0, val1, A); - B = SLDI_UB(A, A, 1); - C = SLDI_UB(A, A, 2); - C = (v16u8)__msa_insert_b((v16i8)C, 6, ptop[7]); - AC = __msa_ave_u_b(A, C); - B2 = __msa_ave_u_b(B, B); - R = __msa_aver_u_b(AC, B2); - val0 = __msa_copy_s_w((v4i32)R, 0); - R = SLDI_UB(R, R, 1); - val1 = __msa_copy_s_w((v4i32)R, 0); - R = SLDI_UB(R, R, 1); - val2 = __msa_copy_s_w((v4i32)R, 0); - R = SLDI_UB(R, R, 1); - val3 = __msa_copy_s_w((v4i32)R, 0); - SW4(val0, val1, val2, val3, dst, BPS); -} - -// 16x16 - -static void DC16(uint8_t* dst) { // DC - uint32_t dc = 16; - int i; - const v16u8 rtop = LD_UB(dst - BPS); - const v8u16 dctop = __msa_hadd_u_h(rtop, rtop); - v16u8 out; - - for (i = 0; i < 16; ++i) { - dc += dst[-1 + i * BPS]; - } - dc += HADD_UH_U32(dctop); - out = (v16u8)__msa_fill_b(dc >> 5); - ST_UB8(out, out, out, out, out, out, out, out, dst, BPS); - ST_UB8(out, out, out, out, out, out, out, out, dst + 8 * BPS, BPS); -} - -static void TM16(uint8_t* dst) { - int j; - v8i16 d1, d2; - const v16i8 zero = { 0 }; - const v8i16 TL = (v8i16)__msa_fill_h(dst[-1 - BPS]); - const v16i8 T = LD_SB(dst - BPS); - - ILVRL_B2_SH(zero, T, d1, d2); - SUB2(d1, TL, d2, TL, d1, d2); - for (j = 0; j < 16; j += 4) { - v16i8 t0, t1, t2, t3; - v8i16 r0, r1, r2, r3, r4, r5, r6, r7; - const v8i16 L0 = (v8i16)__msa_fill_h(dst[-1 + 0 * BPS]); - const v8i16 L1 = (v8i16)__msa_fill_h(dst[-1 + 1 * BPS]); - const v8i16 L2 = (v8i16)__msa_fill_h(dst[-1 + 2 * BPS]); - const v8i16 L3 = (v8i16)__msa_fill_h(dst[-1 + 3 * BPS]); - ADD4(d1, L0, d1, L1, d1, L2, d1, L3, r0, r1, r2, r3); - ADD4(d2, L0, d2, L1, d2, L2, d2, L3, r4, r5, r6, r7); - CLIP_SH4_0_255(r0, r1, r2, r3); - CLIP_SH4_0_255(r4, r5, r6, r7); - PCKEV_B4_SB(r4, r0, r5, r1, r6, r2, r7, r3, t0, t1, t2, t3); - ST_SB4(t0, t1, t2, t3, dst, BPS); - dst += 4 * BPS; - } -} - -static void VE16(uint8_t* dst) { // vertical - const v16u8 rtop = LD_UB(dst - BPS); - ST_UB8(rtop, rtop, rtop, rtop, rtop, rtop, rtop, rtop, dst, BPS); - ST_UB8(rtop, rtop, rtop, rtop, rtop, rtop, rtop, rtop, dst + 8 * BPS, BPS); -} - -static void HE16(uint8_t* dst) { // horizontal - int j; - for (j = 16; j > 0; j -= 4) { - const v16u8 L0 = (v16u8)__msa_fill_b(dst[-1 + 0 * BPS]); - const v16u8 L1 = (v16u8)__msa_fill_b(dst[-1 + 1 * BPS]); - const v16u8 L2 = (v16u8)__msa_fill_b(dst[-1 + 2 * BPS]); - const v16u8 L3 = (v16u8)__msa_fill_b(dst[-1 + 3 * BPS]); - ST_UB4(L0, L1, L2, L3, dst, BPS); - dst += 4 * BPS; - } -} - -static void DC16NoTop(uint8_t* dst) { // DC with top samples not available - int j; - uint32_t dc = 8; - v16u8 out; - - for (j = 0; j < 16; ++j) { - dc += dst[-1 + j * BPS]; - } - out = (v16u8)__msa_fill_b(dc >> 4); - ST_UB8(out, out, out, out, out, out, out, out, dst, BPS); - ST_UB8(out, out, out, out, out, out, out, out, dst + 8 * BPS, BPS); -} - -static void DC16NoLeft(uint8_t* dst) { // DC with left samples not available - uint32_t dc = 8; - const v16u8 rtop = LD_UB(dst - BPS); - const v8u16 dctop = __msa_hadd_u_h(rtop, rtop); - v16u8 out; - - dc += HADD_UH_U32(dctop); - out = (v16u8)__msa_fill_b(dc >> 4); - ST_UB8(out, out, out, out, out, out, out, out, dst, BPS); - ST_UB8(out, out, out, out, out, out, out, out, dst + 8 * BPS, BPS); -} - -static void DC16NoTopLeft(uint8_t* dst) { // DC with nothing - const v16u8 out = (v16u8)__msa_fill_b(0x80); - ST_UB8(out, out, out, out, out, out, out, out, dst, BPS); - ST_UB8(out, out, out, out, out, out, out, out, dst + 8 * BPS, BPS); -} - -// Chroma - -#define STORE8x8(out, dst) do { \ - SD4(out, out, out, out, dst + 0 * BPS, BPS); \ - SD4(out, out, out, out, dst + 4 * BPS, BPS); \ -} while (0) - -static void DC8uv(uint8_t* dst) { // DC - uint32_t dc = 8; - int i; - uint64_t out; - const v16u8 rtop = LD_UB(dst - BPS); - const v8u16 temp0 = __msa_hadd_u_h(rtop, rtop); - const v4u32 temp1 = __msa_hadd_u_w(temp0, temp0); - const v2u64 temp2 = __msa_hadd_u_d(temp1, temp1); - v16u8 dctemp; - - for (i = 0; i < 8; ++i) { - dc += dst[-1 + i * BPS]; - } - dc += __msa_copy_s_w((v4i32)temp2, 0); - dctemp = (v16u8)__msa_fill_b(dc >> 4); - out = __msa_copy_s_d((v2i64)dctemp, 0); - STORE8x8(out, dst); -} - -static void TM8uv(uint8_t* dst) { - int j; - const v16i8 T1 = LD_SB(dst - BPS); - const v16i8 zero = { 0 }; - const v8i16 T = (v8i16)__msa_ilvr_b(zero, T1); - const v8i16 TL = (v8i16)__msa_fill_h(dst[-1 - BPS]); - const v8i16 d = T - TL; - - for (j = 0; j < 8; j += 4) { - v16i8 t0, t1; - v8i16 r0 = (v8i16)__msa_fill_h(dst[-1 + 0 * BPS]); - v8i16 r1 = (v8i16)__msa_fill_h(dst[-1 + 1 * BPS]); - v8i16 r2 = (v8i16)__msa_fill_h(dst[-1 + 2 * BPS]); - v8i16 r3 = (v8i16)__msa_fill_h(dst[-1 + 3 * BPS]); - ADD4(d, r0, d, r1, d, r2, d, r3, r0, r1, r2, r3); - CLIP_SH4_0_255(r0, r1, r2, r3); - PCKEV_B2_SB(r1, r0, r3, r2, t0, t1); - ST4x4_UB(t0, t1, 0, 2, 0, 2, dst, BPS); - ST4x4_UB(t0, t1, 1, 3, 1, 3, dst + 4, BPS); - dst += 4 * BPS; - } -} - -static void VE8uv(uint8_t* dst) { // vertical - const v16u8 rtop = LD_UB(dst - BPS); - const uint64_t out = __msa_copy_s_d((v2i64)rtop, 0); - STORE8x8(out, dst); -} - -static void HE8uv(uint8_t* dst) { // horizontal - int j; - for (j = 0; j < 8; j += 4) { - const v16u8 L0 = (v16u8)__msa_fill_b(dst[-1 + 0 * BPS]); - const v16u8 L1 = (v16u8)__msa_fill_b(dst[-1 + 1 * BPS]); - const v16u8 L2 = (v16u8)__msa_fill_b(dst[-1 + 2 * BPS]); - const v16u8 L3 = (v16u8)__msa_fill_b(dst[-1 + 3 * BPS]); - const uint64_t out0 = __msa_copy_s_d((v2i64)L0, 0); - const uint64_t out1 = __msa_copy_s_d((v2i64)L1, 0); - const uint64_t out2 = __msa_copy_s_d((v2i64)L2, 0); - const uint64_t out3 = __msa_copy_s_d((v2i64)L3, 0); - SD4(out0, out1, out2, out3, dst, BPS); - dst += 4 * BPS; - } -} - -static void DC8uvNoLeft(uint8_t* dst) { // DC with no left samples - const uint32_t dc = 4; - const v16u8 rtop = LD_UB(dst - BPS); - const v8u16 temp0 = __msa_hadd_u_h(rtop, rtop); - const v4u32 temp1 = __msa_hadd_u_w(temp0, temp0); - const v2u64 temp2 = __msa_hadd_u_d(temp1, temp1); - const uint32_t sum_m = __msa_copy_s_w((v4i32)temp2, 0); - const v16u8 dcval = (v16u8)__msa_fill_b((dc + sum_m) >> 3); - const uint64_t out = __msa_copy_s_d((v2i64)dcval, 0); - STORE8x8(out, dst); -} - -static void DC8uvNoTop(uint8_t* dst) { // DC with no top samples - uint32_t dc = 4; - int i; - uint64_t out; - v16u8 dctemp; - - for (i = 0; i < 8; ++i) { - dc += dst[-1 + i * BPS]; - } - dctemp = (v16u8)__msa_fill_b(dc >> 3); - out = __msa_copy_s_d((v2i64)dctemp, 0); - STORE8x8(out, dst); -} - -static void DC8uvNoTopLeft(uint8_t* dst) { // DC with nothing - const uint64_t out = 0x8080808080808080ULL; - STORE8x8(out, dst); -} - -//------------------------------------------------------------------------------ -// Entry point - -extern void VP8DspInitMSA(void); - -WEBP_TSAN_IGNORE_FUNCTION void VP8DspInitMSA(void) { - VP8TransformWHT = TransformWHT; - VP8Transform = TransformTwo; - VP8TransformDC = TransformDC; - VP8TransformAC3 = TransformAC3; - - VP8VFilter16 = VFilter16; - VP8HFilter16 = HFilter16; - VP8VFilter16i = VFilter16i; - VP8HFilter16i = HFilter16i; - VP8VFilter8 = VFilter8; - VP8HFilter8 = HFilter8; - VP8VFilter8i = VFilter8i; - VP8HFilter8i = HFilter8i; - VP8SimpleVFilter16 = SimpleVFilter16; - VP8SimpleHFilter16 = SimpleHFilter16; - VP8SimpleVFilter16i = SimpleVFilter16i; - VP8SimpleHFilter16i = SimpleHFilter16i; - - VP8PredLuma4[0] = DC4; - VP8PredLuma4[1] = TM4; - VP8PredLuma4[2] = VE4; - VP8PredLuma4[4] = RD4; - VP8PredLuma4[6] = LD4; - VP8PredLuma16[0] = DC16; - VP8PredLuma16[1] = TM16; - VP8PredLuma16[2] = VE16; - VP8PredLuma16[3] = HE16; - VP8PredLuma16[4] = DC16NoTop; - VP8PredLuma16[5] = DC16NoLeft; - VP8PredLuma16[6] = DC16NoTopLeft; - VP8PredChroma8[0] = DC8uv; - VP8PredChroma8[1] = TM8uv; - VP8PredChroma8[2] = VE8uv; - VP8PredChroma8[3] = HE8uv; - VP8PredChroma8[4] = DC8uvNoTop; - VP8PredChroma8[5] = DC8uvNoLeft; - VP8PredChroma8[6] = DC8uvNoTopLeft; -} - -#else // !WEBP_USE_MSA - -WEBP_DSP_INIT_STUB(VP8DspInitMSA) - -#endif // WEBP_USE_MSA diff --git a/Extended/libwebp/src/dsp/dec_neon.c b/Extended/libwebp/src/dsp/dec_neon.c deleted file mode 100644 index 239ec41..0000000 --- a/Extended/libwebp/src/dsp/dec_neon.c +++ /dev/null @@ -1,1659 +0,0 @@ -// Copyright 2012 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// ARM NEON version of dsp functions and loop filtering. -// -// Authors: Somnath Banerjee (somnath@google.com) -// Johann Koenig (johannkoenig@google.com) - -#include "src/dsp/dsp.h" - -#if defined(WEBP_USE_NEON) - -#include "src/dsp/neon.h" -#include "src/dec/vp8i_dec.h" - -//------------------------------------------------------------------------------ -// NxM Loading functions - -#if !defined(WORK_AROUND_GCC) - -// This intrinsics version makes gcc-4.6.3 crash during Load4x??() compilation -// (register alloc, probably). The variants somewhat mitigate the problem, but -// not quite. HFilter16i() remains problematic. -static WEBP_INLINE uint8x8x4_t Load4x8_NEON(const uint8_t* const src, - int stride) { - const uint8x8_t zero = vdup_n_u8(0); - uint8x8x4_t out; - INIT_VECTOR4(out, zero, zero, zero, zero); - out = vld4_lane_u8(src + 0 * stride, out, 0); - out = vld4_lane_u8(src + 1 * stride, out, 1); - out = vld4_lane_u8(src + 2 * stride, out, 2); - out = vld4_lane_u8(src + 3 * stride, out, 3); - out = vld4_lane_u8(src + 4 * stride, out, 4); - out = vld4_lane_u8(src + 5 * stride, out, 5); - out = vld4_lane_u8(src + 6 * stride, out, 6); - out = vld4_lane_u8(src + 7 * stride, out, 7); - return out; -} - -static WEBP_INLINE void Load4x16_NEON(const uint8_t* const src, int stride, - uint8x16_t* const p1, - uint8x16_t* const p0, - uint8x16_t* const q0, - uint8x16_t* const q1) { - // row0 = p1[0..7]|p0[0..7]|q0[0..7]|q1[0..7] - // row8 = p1[8..15]|p0[8..15]|q0[8..15]|q1[8..15] - const uint8x8x4_t row0 = Load4x8_NEON(src - 2 + 0 * stride, stride); - const uint8x8x4_t row8 = Load4x8_NEON(src - 2 + 8 * stride, stride); - *p1 = vcombine_u8(row0.val[0], row8.val[0]); - *p0 = vcombine_u8(row0.val[1], row8.val[1]); - *q0 = vcombine_u8(row0.val[2], row8.val[2]); - *q1 = vcombine_u8(row0.val[3], row8.val[3]); -} - -#else // WORK_AROUND_GCC - -#define LOADQ_LANE_32b(VALUE, LANE) do { \ - (VALUE) = vld1q_lane_u32((const uint32_t*)src, (VALUE), (LANE)); \ - src += stride; \ -} while (0) - -static WEBP_INLINE void Load4x16_NEON(const uint8_t* src, int stride, - uint8x16_t* const p1, - uint8x16_t* const p0, - uint8x16_t* const q0, - uint8x16_t* const q1) { - const uint32x4_t zero = vdupq_n_u32(0); - uint32x4x4_t in; - INIT_VECTOR4(in, zero, zero, zero, zero); - src -= 2; - LOADQ_LANE_32b(in.val[0], 0); - LOADQ_LANE_32b(in.val[1], 0); - LOADQ_LANE_32b(in.val[2], 0); - LOADQ_LANE_32b(in.val[3], 0); - LOADQ_LANE_32b(in.val[0], 1); - LOADQ_LANE_32b(in.val[1], 1); - LOADQ_LANE_32b(in.val[2], 1); - LOADQ_LANE_32b(in.val[3], 1); - LOADQ_LANE_32b(in.val[0], 2); - LOADQ_LANE_32b(in.val[1], 2); - LOADQ_LANE_32b(in.val[2], 2); - LOADQ_LANE_32b(in.val[3], 2); - LOADQ_LANE_32b(in.val[0], 3); - LOADQ_LANE_32b(in.val[1], 3); - LOADQ_LANE_32b(in.val[2], 3); - LOADQ_LANE_32b(in.val[3], 3); - // Transpose four 4x4 parts: - { - const uint8x16x2_t row01 = vtrnq_u8(vreinterpretq_u8_u32(in.val[0]), - vreinterpretq_u8_u32(in.val[1])); - const uint8x16x2_t row23 = vtrnq_u8(vreinterpretq_u8_u32(in.val[2]), - vreinterpretq_u8_u32(in.val[3])); - const uint16x8x2_t row02 = vtrnq_u16(vreinterpretq_u16_u8(row01.val[0]), - vreinterpretq_u16_u8(row23.val[0])); - const uint16x8x2_t row13 = vtrnq_u16(vreinterpretq_u16_u8(row01.val[1]), - vreinterpretq_u16_u8(row23.val[1])); - *p1 = vreinterpretq_u8_u16(row02.val[0]); - *p0 = vreinterpretq_u8_u16(row13.val[0]); - *q0 = vreinterpretq_u8_u16(row02.val[1]); - *q1 = vreinterpretq_u8_u16(row13.val[1]); - } -} -#undef LOADQ_LANE_32b - -#endif // !WORK_AROUND_GCC - -static WEBP_INLINE void Load8x16_NEON( - const uint8_t* const src, int stride, - uint8x16_t* const p3, uint8x16_t* const p2, uint8x16_t* const p1, - uint8x16_t* const p0, uint8x16_t* const q0, uint8x16_t* const q1, - uint8x16_t* const q2, uint8x16_t* const q3) { - Load4x16_NEON(src - 2, stride, p3, p2, p1, p0); - Load4x16_NEON(src + 2, stride, q0, q1, q2, q3); -} - -static WEBP_INLINE void Load16x4_NEON(const uint8_t* const src, int stride, - uint8x16_t* const p1, - uint8x16_t* const p0, - uint8x16_t* const q0, - uint8x16_t* const q1) { - *p1 = vld1q_u8(src - 2 * stride); - *p0 = vld1q_u8(src - 1 * stride); - *q0 = vld1q_u8(src + 0 * stride); - *q1 = vld1q_u8(src + 1 * stride); -} - -static WEBP_INLINE void Load16x8_NEON( - const uint8_t* const src, int stride, - uint8x16_t* const p3, uint8x16_t* const p2, uint8x16_t* const p1, - uint8x16_t* const p0, uint8x16_t* const q0, uint8x16_t* const q1, - uint8x16_t* const q2, uint8x16_t* const q3) { - Load16x4_NEON(src - 2 * stride, stride, p3, p2, p1, p0); - Load16x4_NEON(src + 2 * stride, stride, q0, q1, q2, q3); -} - -static WEBP_INLINE void Load8x8x2_NEON( - const uint8_t* const u, const uint8_t* const v, int stride, - uint8x16_t* const p3, uint8x16_t* const p2, uint8x16_t* const p1, - uint8x16_t* const p0, uint8x16_t* const q0, uint8x16_t* const q1, - uint8x16_t* const q2, uint8x16_t* const q3) { - // We pack the 8x8 u-samples in the lower half of the uint8x16_t destination - // and the v-samples on the higher half. - *p3 = vcombine_u8(vld1_u8(u - 4 * stride), vld1_u8(v - 4 * stride)); - *p2 = vcombine_u8(vld1_u8(u - 3 * stride), vld1_u8(v - 3 * stride)); - *p1 = vcombine_u8(vld1_u8(u - 2 * stride), vld1_u8(v - 2 * stride)); - *p0 = vcombine_u8(vld1_u8(u - 1 * stride), vld1_u8(v - 1 * stride)); - *q0 = vcombine_u8(vld1_u8(u + 0 * stride), vld1_u8(v + 0 * stride)); - *q1 = vcombine_u8(vld1_u8(u + 1 * stride), vld1_u8(v + 1 * stride)); - *q2 = vcombine_u8(vld1_u8(u + 2 * stride), vld1_u8(v + 2 * stride)); - *q3 = vcombine_u8(vld1_u8(u + 3 * stride), vld1_u8(v + 3 * stride)); -} - -#if !defined(WORK_AROUND_GCC) - -#define LOAD_UV_8(ROW) \ - vcombine_u8(vld1_u8(u - 4 + (ROW) * stride), vld1_u8(v - 4 + (ROW) * stride)) - -static WEBP_INLINE void Load8x8x2T_NEON( - const uint8_t* const u, const uint8_t* const v, int stride, - uint8x16_t* const p3, uint8x16_t* const p2, uint8x16_t* const p1, - uint8x16_t* const p0, uint8x16_t* const q0, uint8x16_t* const q1, - uint8x16_t* const q2, uint8x16_t* const q3) { - // We pack the 8x8 u-samples in the lower half of the uint8x16_t destination - // and the v-samples on the higher half. - const uint8x16_t row0 = LOAD_UV_8(0); - const uint8x16_t row1 = LOAD_UV_8(1); - const uint8x16_t row2 = LOAD_UV_8(2); - const uint8x16_t row3 = LOAD_UV_8(3); - const uint8x16_t row4 = LOAD_UV_8(4); - const uint8x16_t row5 = LOAD_UV_8(5); - const uint8x16_t row6 = LOAD_UV_8(6); - const uint8x16_t row7 = LOAD_UV_8(7); - // Perform two side-by-side 8x8 transposes - // u00 u01 u02 u03 u04 u05 u06 u07 | v00 v01 v02 v03 v04 v05 v06 v07 - // u10 u11 u12 u13 u14 u15 u16 u17 | v10 v11 v12 ... - // u20 u21 u22 u23 u24 u25 u26 u27 | v20 v21 ... - // u30 u31 u32 u33 u34 u35 u36 u37 | ... - // u40 u41 u42 u43 u44 u45 u46 u47 | ... - // u50 u51 u52 u53 u54 u55 u56 u57 | ... - // u60 u61 u62 u63 u64 u65 u66 u67 | v60 ... - // u70 u71 u72 u73 u74 u75 u76 u77 | v70 v71 v72 ... - const uint8x16x2_t row01 = vtrnq_u8(row0, row1); // u00 u10 u02 u12 ... - // u01 u11 u03 u13 ... - const uint8x16x2_t row23 = vtrnq_u8(row2, row3); // u20 u30 u22 u32 ... - // u21 u31 u23 u33 ... - const uint8x16x2_t row45 = vtrnq_u8(row4, row5); // ... - const uint8x16x2_t row67 = vtrnq_u8(row6, row7); // ... - const uint16x8x2_t row02 = vtrnq_u16(vreinterpretq_u16_u8(row01.val[0]), - vreinterpretq_u16_u8(row23.val[0])); - const uint16x8x2_t row13 = vtrnq_u16(vreinterpretq_u16_u8(row01.val[1]), - vreinterpretq_u16_u8(row23.val[1])); - const uint16x8x2_t row46 = vtrnq_u16(vreinterpretq_u16_u8(row45.val[0]), - vreinterpretq_u16_u8(row67.val[0])); - const uint16x8x2_t row57 = vtrnq_u16(vreinterpretq_u16_u8(row45.val[1]), - vreinterpretq_u16_u8(row67.val[1])); - const uint32x4x2_t row04 = vtrnq_u32(vreinterpretq_u32_u16(row02.val[0]), - vreinterpretq_u32_u16(row46.val[0])); - const uint32x4x2_t row26 = vtrnq_u32(vreinterpretq_u32_u16(row02.val[1]), - vreinterpretq_u32_u16(row46.val[1])); - const uint32x4x2_t row15 = vtrnq_u32(vreinterpretq_u32_u16(row13.val[0]), - vreinterpretq_u32_u16(row57.val[0])); - const uint32x4x2_t row37 = vtrnq_u32(vreinterpretq_u32_u16(row13.val[1]), - vreinterpretq_u32_u16(row57.val[1])); - *p3 = vreinterpretq_u8_u32(row04.val[0]); - *p2 = vreinterpretq_u8_u32(row15.val[0]); - *p1 = vreinterpretq_u8_u32(row26.val[0]); - *p0 = vreinterpretq_u8_u32(row37.val[0]); - *q0 = vreinterpretq_u8_u32(row04.val[1]); - *q1 = vreinterpretq_u8_u32(row15.val[1]); - *q2 = vreinterpretq_u8_u32(row26.val[1]); - *q3 = vreinterpretq_u8_u32(row37.val[1]); -} -#undef LOAD_UV_8 - -#endif // !WORK_AROUND_GCC - -static WEBP_INLINE void Store2x8_NEON(const uint8x8x2_t v, - uint8_t* const dst, int stride) { - vst2_lane_u8(dst + 0 * stride, v, 0); - vst2_lane_u8(dst + 1 * stride, v, 1); - vst2_lane_u8(dst + 2 * stride, v, 2); - vst2_lane_u8(dst + 3 * stride, v, 3); - vst2_lane_u8(dst + 4 * stride, v, 4); - vst2_lane_u8(dst + 5 * stride, v, 5); - vst2_lane_u8(dst + 6 * stride, v, 6); - vst2_lane_u8(dst + 7 * stride, v, 7); -} - -static WEBP_INLINE void Store2x16_NEON(const uint8x16_t p0, const uint8x16_t q0, - uint8_t* const dst, int stride) { - uint8x8x2_t lo, hi; - lo.val[0] = vget_low_u8(p0); - lo.val[1] = vget_low_u8(q0); - hi.val[0] = vget_high_u8(p0); - hi.val[1] = vget_high_u8(q0); - Store2x8_NEON(lo, dst - 1 + 0 * stride, stride); - Store2x8_NEON(hi, dst - 1 + 8 * stride, stride); -} - -#if !defined(WORK_AROUND_GCC) -static WEBP_INLINE void Store4x8_NEON(const uint8x8x4_t v, - uint8_t* const dst, int stride) { - vst4_lane_u8(dst + 0 * stride, v, 0); - vst4_lane_u8(dst + 1 * stride, v, 1); - vst4_lane_u8(dst + 2 * stride, v, 2); - vst4_lane_u8(dst + 3 * stride, v, 3); - vst4_lane_u8(dst + 4 * stride, v, 4); - vst4_lane_u8(dst + 5 * stride, v, 5); - vst4_lane_u8(dst + 6 * stride, v, 6); - vst4_lane_u8(dst + 7 * stride, v, 7); -} - -static WEBP_INLINE void Store4x16_NEON(const uint8x16_t p1, const uint8x16_t p0, - const uint8x16_t q0, const uint8x16_t q1, - uint8_t* const dst, int stride) { - uint8x8x4_t lo, hi; - INIT_VECTOR4(lo, - vget_low_u8(p1), vget_low_u8(p0), - vget_low_u8(q0), vget_low_u8(q1)); - INIT_VECTOR4(hi, - vget_high_u8(p1), vget_high_u8(p0), - vget_high_u8(q0), vget_high_u8(q1)); - Store4x8_NEON(lo, dst - 2 + 0 * stride, stride); - Store4x8_NEON(hi, dst - 2 + 8 * stride, stride); -} -#endif // !WORK_AROUND_GCC - -static WEBP_INLINE void Store16x2_NEON(const uint8x16_t p0, const uint8x16_t q0, - uint8_t* const dst, int stride) { - vst1q_u8(dst - stride, p0); - vst1q_u8(dst, q0); -} - -static WEBP_INLINE void Store16x4_NEON(const uint8x16_t p1, const uint8x16_t p0, - const uint8x16_t q0, const uint8x16_t q1, - uint8_t* const dst, int stride) { - Store16x2_NEON(p1, p0, dst - stride, stride); - Store16x2_NEON(q0, q1, dst + stride, stride); -} - -static WEBP_INLINE void Store8x2x2_NEON(const uint8x16_t p0, - const uint8x16_t q0, - uint8_t* const u, uint8_t* const v, - int stride) { - // p0 and q0 contain the u+v samples packed in low/high halves. - vst1_u8(u - stride, vget_low_u8(p0)); - vst1_u8(u, vget_low_u8(q0)); - vst1_u8(v - stride, vget_high_u8(p0)); - vst1_u8(v, vget_high_u8(q0)); -} - -static WEBP_INLINE void Store8x4x2_NEON(const uint8x16_t p1, - const uint8x16_t p0, - const uint8x16_t q0, - const uint8x16_t q1, - uint8_t* const u, uint8_t* const v, - int stride) { - // The p1...q1 registers contain the u+v samples packed in low/high halves. - Store8x2x2_NEON(p1, p0, u - stride, v - stride, stride); - Store8x2x2_NEON(q0, q1, u + stride, v + stride, stride); -} - -#if !defined(WORK_AROUND_GCC) - -#define STORE6_LANE(DST, VAL0, VAL1, LANE) do { \ - vst3_lane_u8((DST) - 3, (VAL0), (LANE)); \ - vst3_lane_u8((DST) + 0, (VAL1), (LANE)); \ - (DST) += stride; \ -} while (0) - -static WEBP_INLINE void Store6x8x2_NEON( - const uint8x16_t p2, const uint8x16_t p1, const uint8x16_t p0, - const uint8x16_t q0, const uint8x16_t q1, const uint8x16_t q2, - uint8_t* u, uint8_t* v, int stride) { - uint8x8x3_t u0, u1, v0, v1; - INIT_VECTOR3(u0, vget_low_u8(p2), vget_low_u8(p1), vget_low_u8(p0)); - INIT_VECTOR3(u1, vget_low_u8(q0), vget_low_u8(q1), vget_low_u8(q2)); - INIT_VECTOR3(v0, vget_high_u8(p2), vget_high_u8(p1), vget_high_u8(p0)); - INIT_VECTOR3(v1, vget_high_u8(q0), vget_high_u8(q1), vget_high_u8(q2)); - STORE6_LANE(u, u0, u1, 0); - STORE6_LANE(u, u0, u1, 1); - STORE6_LANE(u, u0, u1, 2); - STORE6_LANE(u, u0, u1, 3); - STORE6_LANE(u, u0, u1, 4); - STORE6_LANE(u, u0, u1, 5); - STORE6_LANE(u, u0, u1, 6); - STORE6_LANE(u, u0, u1, 7); - STORE6_LANE(v, v0, v1, 0); - STORE6_LANE(v, v0, v1, 1); - STORE6_LANE(v, v0, v1, 2); - STORE6_LANE(v, v0, v1, 3); - STORE6_LANE(v, v0, v1, 4); - STORE6_LANE(v, v0, v1, 5); - STORE6_LANE(v, v0, v1, 6); - STORE6_LANE(v, v0, v1, 7); -} -#undef STORE6_LANE - -static WEBP_INLINE void Store4x8x2_NEON(const uint8x16_t p1, - const uint8x16_t p0, - const uint8x16_t q0, - const uint8x16_t q1, - uint8_t* const u, uint8_t* const v, - int stride) { - uint8x8x4_t u0, v0; - INIT_VECTOR4(u0, - vget_low_u8(p1), vget_low_u8(p0), - vget_low_u8(q0), vget_low_u8(q1)); - INIT_VECTOR4(v0, - vget_high_u8(p1), vget_high_u8(p0), - vget_high_u8(q0), vget_high_u8(q1)); - vst4_lane_u8(u - 2 + 0 * stride, u0, 0); - vst4_lane_u8(u - 2 + 1 * stride, u0, 1); - vst4_lane_u8(u - 2 + 2 * stride, u0, 2); - vst4_lane_u8(u - 2 + 3 * stride, u0, 3); - vst4_lane_u8(u - 2 + 4 * stride, u0, 4); - vst4_lane_u8(u - 2 + 5 * stride, u0, 5); - vst4_lane_u8(u - 2 + 6 * stride, u0, 6); - vst4_lane_u8(u - 2 + 7 * stride, u0, 7); - vst4_lane_u8(v - 2 + 0 * stride, v0, 0); - vst4_lane_u8(v - 2 + 1 * stride, v0, 1); - vst4_lane_u8(v - 2 + 2 * stride, v0, 2); - vst4_lane_u8(v - 2 + 3 * stride, v0, 3); - vst4_lane_u8(v - 2 + 4 * stride, v0, 4); - vst4_lane_u8(v - 2 + 5 * stride, v0, 5); - vst4_lane_u8(v - 2 + 6 * stride, v0, 6); - vst4_lane_u8(v - 2 + 7 * stride, v0, 7); -} - -#endif // !WORK_AROUND_GCC - -// Zero extend 'v' to an int16x8_t. -static WEBP_INLINE int16x8_t ConvertU8ToS16_NEON(uint8x8_t v) { - return vreinterpretq_s16_u16(vmovl_u8(v)); -} - -// Performs unsigned 8b saturation on 'dst01' and 'dst23' storing the result -// to the corresponding rows of 'dst'. -static WEBP_INLINE void SaturateAndStore4x4_NEON(uint8_t* const dst, - const int16x8_t dst01, - const int16x8_t dst23) { - // Unsigned saturate to 8b. - const uint8x8_t dst01_u8 = vqmovun_s16(dst01); - const uint8x8_t dst23_u8 = vqmovun_s16(dst23); - - // Store the results. - vst1_lane_u32((uint32_t*)(dst + 0 * BPS), vreinterpret_u32_u8(dst01_u8), 0); - vst1_lane_u32((uint32_t*)(dst + 1 * BPS), vreinterpret_u32_u8(dst01_u8), 1); - vst1_lane_u32((uint32_t*)(dst + 2 * BPS), vreinterpret_u32_u8(dst23_u8), 0); - vst1_lane_u32((uint32_t*)(dst + 3 * BPS), vreinterpret_u32_u8(dst23_u8), 1); -} - -static WEBP_INLINE void Add4x4_NEON(const int16x8_t row01, - const int16x8_t row23, - uint8_t* const dst) { - uint32x2_t dst01 = vdup_n_u32(0); - uint32x2_t dst23 = vdup_n_u32(0); - - // Load the source pixels. - dst01 = vld1_lane_u32((uint32_t*)(dst + 0 * BPS), dst01, 0); - dst23 = vld1_lane_u32((uint32_t*)(dst + 2 * BPS), dst23, 0); - dst01 = vld1_lane_u32((uint32_t*)(dst + 1 * BPS), dst01, 1); - dst23 = vld1_lane_u32((uint32_t*)(dst + 3 * BPS), dst23, 1); - - { - // Convert to 16b. - const int16x8_t dst01_s16 = ConvertU8ToS16_NEON(vreinterpret_u8_u32(dst01)); - const int16x8_t dst23_s16 = ConvertU8ToS16_NEON(vreinterpret_u8_u32(dst23)); - - // Descale with rounding. - const int16x8_t out01 = vrsraq_n_s16(dst01_s16, row01, 3); - const int16x8_t out23 = vrsraq_n_s16(dst23_s16, row23, 3); - // Add the inverse transform. - SaturateAndStore4x4_NEON(dst, out01, out23); - } -} - -//----------------------------------------------------------------------------- -// Simple In-loop filtering (Paragraph 15.2) - -static uint8x16_t NeedsFilter_NEON(const uint8x16_t p1, const uint8x16_t p0, - const uint8x16_t q0, const uint8x16_t q1, - int thresh) { - const uint8x16_t thresh_v = vdupq_n_u8((uint8_t)thresh); - const uint8x16_t a_p0_q0 = vabdq_u8(p0, q0); // abs(p0-q0) - const uint8x16_t a_p1_q1 = vabdq_u8(p1, q1); // abs(p1-q1) - const uint8x16_t a_p0_q0_2 = vqaddq_u8(a_p0_q0, a_p0_q0); // 2 * abs(p0-q0) - const uint8x16_t a_p1_q1_2 = vshrq_n_u8(a_p1_q1, 1); // abs(p1-q1) / 2 - const uint8x16_t sum = vqaddq_u8(a_p0_q0_2, a_p1_q1_2); - const uint8x16_t mask = vcgeq_u8(thresh_v, sum); - return mask; -} - -static int8x16_t FlipSign_NEON(const uint8x16_t v) { - const uint8x16_t sign_bit = vdupq_n_u8(0x80); - return vreinterpretq_s8_u8(veorq_u8(v, sign_bit)); -} - -static uint8x16_t FlipSignBack_NEON(const int8x16_t v) { - const int8x16_t sign_bit = vdupq_n_s8(0x80); - return vreinterpretq_u8_s8(veorq_s8(v, sign_bit)); -} - -static int8x16_t GetBaseDelta_NEON(const int8x16_t p1, const int8x16_t p0, - const int8x16_t q0, const int8x16_t q1) { - const int8x16_t q0_p0 = vqsubq_s8(q0, p0); // (q0-p0) - const int8x16_t p1_q1 = vqsubq_s8(p1, q1); // (p1-q1) - const int8x16_t s1 = vqaddq_s8(p1_q1, q0_p0); // (p1-q1) + 1 * (q0 - p0) - const int8x16_t s2 = vqaddq_s8(q0_p0, s1); // (p1-q1) + 2 * (q0 - p0) - const int8x16_t s3 = vqaddq_s8(q0_p0, s2); // (p1-q1) + 3 * (q0 - p0) - return s3; -} - -static int8x16_t GetBaseDelta0_NEON(const int8x16_t p0, const int8x16_t q0) { - const int8x16_t q0_p0 = vqsubq_s8(q0, p0); // (q0-p0) - const int8x16_t s1 = vqaddq_s8(q0_p0, q0_p0); // 2 * (q0 - p0) - const int8x16_t s2 = vqaddq_s8(q0_p0, s1); // 3 * (q0 - p0) - return s2; -} - -//------------------------------------------------------------------------------ - -static void ApplyFilter2NoFlip_NEON(const int8x16_t p0s, const int8x16_t q0s, - const int8x16_t delta, - int8x16_t* const op0, - int8x16_t* const oq0) { - const int8x16_t kCst3 = vdupq_n_s8(0x03); - const int8x16_t kCst4 = vdupq_n_s8(0x04); - const int8x16_t delta_p3 = vqaddq_s8(delta, kCst3); - const int8x16_t delta_p4 = vqaddq_s8(delta, kCst4); - const int8x16_t delta3 = vshrq_n_s8(delta_p3, 3); - const int8x16_t delta4 = vshrq_n_s8(delta_p4, 3); - *op0 = vqaddq_s8(p0s, delta3); - *oq0 = vqsubq_s8(q0s, delta4); -} - -#if defined(WEBP_USE_INTRINSICS) - -static void ApplyFilter2_NEON(const int8x16_t p0s, const int8x16_t q0s, - const int8x16_t delta, - uint8x16_t* const op0, uint8x16_t* const oq0) { - const int8x16_t kCst3 = vdupq_n_s8(0x03); - const int8x16_t kCst4 = vdupq_n_s8(0x04); - const int8x16_t delta_p3 = vqaddq_s8(delta, kCst3); - const int8x16_t delta_p4 = vqaddq_s8(delta, kCst4); - const int8x16_t delta3 = vshrq_n_s8(delta_p3, 3); - const int8x16_t delta4 = vshrq_n_s8(delta_p4, 3); - const int8x16_t sp0 = vqaddq_s8(p0s, delta3); - const int8x16_t sq0 = vqsubq_s8(q0s, delta4); - *op0 = FlipSignBack_NEON(sp0); - *oq0 = FlipSignBack_NEON(sq0); -} - -static void DoFilter2_NEON(const uint8x16_t p1, const uint8x16_t p0, - const uint8x16_t q0, const uint8x16_t q1, - const uint8x16_t mask, - uint8x16_t* const op0, uint8x16_t* const oq0) { - const int8x16_t p1s = FlipSign_NEON(p1); - const int8x16_t p0s = FlipSign_NEON(p0); - const int8x16_t q0s = FlipSign_NEON(q0); - const int8x16_t q1s = FlipSign_NEON(q1); - const int8x16_t delta0 = GetBaseDelta_NEON(p1s, p0s, q0s, q1s); - const int8x16_t delta1 = vandq_s8(delta0, vreinterpretq_s8_u8(mask)); - ApplyFilter2_NEON(p0s, q0s, delta1, op0, oq0); -} - -static void SimpleVFilter16_NEON(uint8_t* p, int stride, int thresh) { - uint8x16_t p1, p0, q0, q1, op0, oq0; - Load16x4_NEON(p, stride, &p1, &p0, &q0, &q1); - { - const uint8x16_t mask = NeedsFilter_NEON(p1, p0, q0, q1, thresh); - DoFilter2_NEON(p1, p0, q0, q1, mask, &op0, &oq0); - } - Store16x2_NEON(op0, oq0, p, stride); -} - -static void SimpleHFilter16_NEON(uint8_t* p, int stride, int thresh) { - uint8x16_t p1, p0, q0, q1, oq0, op0; - Load4x16_NEON(p, stride, &p1, &p0, &q0, &q1); - { - const uint8x16_t mask = NeedsFilter_NEON(p1, p0, q0, q1, thresh); - DoFilter2_NEON(p1, p0, q0, q1, mask, &op0, &oq0); - } - Store2x16_NEON(op0, oq0, p, stride); -} - -#else - -// Load/Store vertical edge -#define LOAD8x4(c1, c2, c3, c4, b1, b2, stride) \ - "vld4.8 {" #c1 "[0]," #c2 "[0]," #c3 "[0]," #c4 "[0]}," #b1 "," #stride "\n" \ - "vld4.8 {" #c1 "[1]," #c2 "[1]," #c3 "[1]," #c4 "[1]}," #b2 "," #stride "\n" \ - "vld4.8 {" #c1 "[2]," #c2 "[2]," #c3 "[2]," #c4 "[2]}," #b1 "," #stride "\n" \ - "vld4.8 {" #c1 "[3]," #c2 "[3]," #c3 "[3]," #c4 "[3]}," #b2 "," #stride "\n" \ - "vld4.8 {" #c1 "[4]," #c2 "[4]," #c3 "[4]," #c4 "[4]}," #b1 "," #stride "\n" \ - "vld4.8 {" #c1 "[5]," #c2 "[5]," #c3 "[5]," #c4 "[5]}," #b2 "," #stride "\n" \ - "vld4.8 {" #c1 "[6]," #c2 "[6]," #c3 "[6]," #c4 "[6]}," #b1 "," #stride "\n" \ - "vld4.8 {" #c1 "[7]," #c2 "[7]," #c3 "[7]," #c4 "[7]}," #b2 "," #stride "\n" - -#define STORE8x2(c1, c2, p, stride) \ - "vst2.8 {" #c1 "[0], " #c2 "[0]}," #p "," #stride " \n" \ - "vst2.8 {" #c1 "[1], " #c2 "[1]}," #p "," #stride " \n" \ - "vst2.8 {" #c1 "[2], " #c2 "[2]}," #p "," #stride " \n" \ - "vst2.8 {" #c1 "[3], " #c2 "[3]}," #p "," #stride " \n" \ - "vst2.8 {" #c1 "[4], " #c2 "[4]}," #p "," #stride " \n" \ - "vst2.8 {" #c1 "[5], " #c2 "[5]}," #p "," #stride " \n" \ - "vst2.8 {" #c1 "[6], " #c2 "[6]}," #p "," #stride " \n" \ - "vst2.8 {" #c1 "[7], " #c2 "[7]}," #p "," #stride " \n" - -#define QRegs "q0", "q1", "q2", "q3", \ - "q8", "q9", "q10", "q11", "q12", "q13", "q14", "q15" - -#define FLIP_SIGN_BIT2(a, b, s) \ - "veor " #a "," #a "," #s " \n" \ - "veor " #b "," #b "," #s " \n" \ - -#define FLIP_SIGN_BIT4(a, b, c, d, s) \ - FLIP_SIGN_BIT2(a, b, s) \ - FLIP_SIGN_BIT2(c, d, s) \ - -#define NEEDS_FILTER(p1, p0, q0, q1, thresh, mask) \ - "vabd.u8 q15," #p0 "," #q0 " \n" /* abs(p0 - q0) */ \ - "vabd.u8 q14," #p1 "," #q1 " \n" /* abs(p1 - q1) */ \ - "vqadd.u8 q15, q15, q15 \n" /* abs(p0 - q0) * 2 */ \ - "vshr.u8 q14, q14, #1 \n" /* abs(p1 - q1) / 2 */ \ - "vqadd.u8 q15, q15, q14 \n" /* abs(p0 - q0) * 2 + abs(p1 - q1) / 2 */ \ - "vdup.8 q14, " #thresh " \n" \ - "vcge.u8 " #mask ", q14, q15 \n" /* mask <= thresh */ - -#define GET_BASE_DELTA(p1, p0, q0, q1, o) \ - "vqsub.s8 q15," #q0 "," #p0 " \n" /* (q0 - p0) */ \ - "vqsub.s8 " #o "," #p1 "," #q1 " \n" /* (p1 - q1) */ \ - "vqadd.s8 " #o "," #o ", q15 \n" /* (p1 - q1) + 1 * (p0 - q0) */ \ - "vqadd.s8 " #o "," #o ", q15 \n" /* (p1 - q1) + 2 * (p0 - q0) */ \ - "vqadd.s8 " #o "," #o ", q15 \n" /* (p1 - q1) + 3 * (p0 - q0) */ - -#define DO_SIMPLE_FILTER(p0, q0, fl) \ - "vmov.i8 q15, #0x03 \n" \ - "vqadd.s8 q15, q15, " #fl " \n" /* filter1 = filter + 3 */ \ - "vshr.s8 q15, q15, #3 \n" /* filter1 >> 3 */ \ - "vqadd.s8 " #p0 "," #p0 ", q15 \n" /* p0 += filter1 */ \ - \ - "vmov.i8 q15, #0x04 \n" \ - "vqadd.s8 q15, q15, " #fl " \n" /* filter1 = filter + 4 */ \ - "vshr.s8 q15, q15, #3 \n" /* filter2 >> 3 */ \ - "vqsub.s8 " #q0 "," #q0 ", q15 \n" /* q0 -= filter2 */ - -// Applies filter on 2 pixels (p0 and q0) -#define DO_FILTER2(p1, p0, q0, q1, thresh) \ - NEEDS_FILTER(p1, p0, q0, q1, thresh, q9) /* filter mask in q9 */ \ - "vmov.i8 q10, #0x80 \n" /* sign bit */ \ - FLIP_SIGN_BIT4(p1, p0, q0, q1, q10) /* convert to signed value */ \ - GET_BASE_DELTA(p1, p0, q0, q1, q11) /* get filter level */ \ - "vand q9, q9, q11 \n" /* apply filter mask */ \ - DO_SIMPLE_FILTER(p0, q0, q9) /* apply filter */ \ - FLIP_SIGN_BIT2(p0, q0, q10) - -static void SimpleVFilter16_NEON(uint8_t* p, int stride, int thresh) { - __asm__ volatile ( - "sub %[p], %[p], %[stride], lsl #1 \n" // p -= 2 * stride - - "vld1.u8 {q1}, [%[p]], %[stride] \n" // p1 - "vld1.u8 {q2}, [%[p]], %[stride] \n" // p0 - "vld1.u8 {q3}, [%[p]], %[stride] \n" // q0 - "vld1.u8 {q12}, [%[p]] \n" // q1 - - DO_FILTER2(q1, q2, q3, q12, %[thresh]) - - "sub %[p], %[p], %[stride], lsl #1 \n" // p -= 2 * stride - - "vst1.u8 {q2}, [%[p]], %[stride] \n" // store op0 - "vst1.u8 {q3}, [%[p]] \n" // store oq0 - : [p] "+r"(p) - : [stride] "r"(stride), [thresh] "r"(thresh) - : "memory", QRegs - ); -} - -static void SimpleHFilter16_NEON(uint8_t* p, int stride, int thresh) { - __asm__ volatile ( - "sub r4, %[p], #2 \n" // base1 = p - 2 - "lsl r6, %[stride], #1 \n" // r6 = 2 * stride - "add r5, r4, %[stride] \n" // base2 = base1 + stride - - LOAD8x4(d2, d3, d4, d5, [r4], [r5], r6) - LOAD8x4(d24, d25, d26, d27, [r4], [r5], r6) - "vswp d3, d24 \n" // p1:q1 p0:q3 - "vswp d5, d26 \n" // q0:q2 q1:q4 - "vswp q2, q12 \n" // p1:q1 p0:q2 q0:q3 q1:q4 - - DO_FILTER2(q1, q2, q12, q13, %[thresh]) - - "sub %[p], %[p], #1 \n" // p - 1 - - "vswp d5, d24 \n" - STORE8x2(d4, d5, [%[p]], %[stride]) - STORE8x2(d24, d25, [%[p]], %[stride]) - - : [p] "+r"(p) - : [stride] "r"(stride), [thresh] "r"(thresh) - : "memory", "r4", "r5", "r6", QRegs - ); -} - -#undef LOAD8x4 -#undef STORE8x2 - -#endif // WEBP_USE_INTRINSICS - -static void SimpleVFilter16i_NEON(uint8_t* p, int stride, int thresh) { - uint32_t k; - for (k = 3; k != 0; --k) { - p += 4 * stride; - SimpleVFilter16_NEON(p, stride, thresh); - } -} - -static void SimpleHFilter16i_NEON(uint8_t* p, int stride, int thresh) { - uint32_t k; - for (k = 3; k != 0; --k) { - p += 4; - SimpleHFilter16_NEON(p, stride, thresh); - } -} - -//------------------------------------------------------------------------------ -// Complex In-loop filtering (Paragraph 15.3) - -static uint8x16_t NeedsHev_NEON(const uint8x16_t p1, const uint8x16_t p0, - const uint8x16_t q0, const uint8x16_t q1, - int hev_thresh) { - const uint8x16_t hev_thresh_v = vdupq_n_u8((uint8_t)hev_thresh); - const uint8x16_t a_p1_p0 = vabdq_u8(p1, p0); // abs(p1 - p0) - const uint8x16_t a_q1_q0 = vabdq_u8(q1, q0); // abs(q1 - q0) - const uint8x16_t a_max = vmaxq_u8(a_p1_p0, a_q1_q0); - const uint8x16_t mask = vcgtq_u8(a_max, hev_thresh_v); - return mask; -} - -static uint8x16_t NeedsFilter2_NEON(const uint8x16_t p3, const uint8x16_t p2, - const uint8x16_t p1, const uint8x16_t p0, - const uint8x16_t q0, const uint8x16_t q1, - const uint8x16_t q2, const uint8x16_t q3, - int ithresh, int thresh) { - const uint8x16_t ithresh_v = vdupq_n_u8((uint8_t)ithresh); - const uint8x16_t a_p3_p2 = vabdq_u8(p3, p2); // abs(p3 - p2) - const uint8x16_t a_p2_p1 = vabdq_u8(p2, p1); // abs(p2 - p1) - const uint8x16_t a_p1_p0 = vabdq_u8(p1, p0); // abs(p1 - p0) - const uint8x16_t a_q3_q2 = vabdq_u8(q3, q2); // abs(q3 - q2) - const uint8x16_t a_q2_q1 = vabdq_u8(q2, q1); // abs(q2 - q1) - const uint8x16_t a_q1_q0 = vabdq_u8(q1, q0); // abs(q1 - q0) - const uint8x16_t max1 = vmaxq_u8(a_p3_p2, a_p2_p1); - const uint8x16_t max2 = vmaxq_u8(a_p1_p0, a_q3_q2); - const uint8x16_t max3 = vmaxq_u8(a_q2_q1, a_q1_q0); - const uint8x16_t max12 = vmaxq_u8(max1, max2); - const uint8x16_t max123 = vmaxq_u8(max12, max3); - const uint8x16_t mask2 = vcgeq_u8(ithresh_v, max123); - const uint8x16_t mask1 = NeedsFilter_NEON(p1, p0, q0, q1, thresh); - const uint8x16_t mask = vandq_u8(mask1, mask2); - return mask; -} - -// 4-points filter - -static void ApplyFilter4_NEON( - const int8x16_t p1, const int8x16_t p0, - const int8x16_t q0, const int8x16_t q1, - const int8x16_t delta0, - uint8x16_t* const op1, uint8x16_t* const op0, - uint8x16_t* const oq0, uint8x16_t* const oq1) { - const int8x16_t kCst3 = vdupq_n_s8(0x03); - const int8x16_t kCst4 = vdupq_n_s8(0x04); - const int8x16_t delta1 = vqaddq_s8(delta0, kCst4); - const int8x16_t delta2 = vqaddq_s8(delta0, kCst3); - const int8x16_t a1 = vshrq_n_s8(delta1, 3); - const int8x16_t a2 = vshrq_n_s8(delta2, 3); - const int8x16_t a3 = vrshrq_n_s8(a1, 1); // a3 = (a1 + 1) >> 1 - *op0 = FlipSignBack_NEON(vqaddq_s8(p0, a2)); // clip(p0 + a2) - *oq0 = FlipSignBack_NEON(vqsubq_s8(q0, a1)); // clip(q0 - a1) - *op1 = FlipSignBack_NEON(vqaddq_s8(p1, a3)); // clip(p1 + a3) - *oq1 = FlipSignBack_NEON(vqsubq_s8(q1, a3)); // clip(q1 - a3) -} - -static void DoFilter4_NEON( - const uint8x16_t p1, const uint8x16_t p0, - const uint8x16_t q0, const uint8x16_t q1, - const uint8x16_t mask, const uint8x16_t hev_mask, - uint8x16_t* const op1, uint8x16_t* const op0, - uint8x16_t* const oq0, uint8x16_t* const oq1) { - // This is a fused version of DoFilter2() calling ApplyFilter2 directly - const int8x16_t p1s = FlipSign_NEON(p1); - int8x16_t p0s = FlipSign_NEON(p0); - int8x16_t q0s = FlipSign_NEON(q0); - const int8x16_t q1s = FlipSign_NEON(q1); - const uint8x16_t simple_lf_mask = vandq_u8(mask, hev_mask); - - // do_filter2 part (simple loopfilter on pixels with hev) - { - const int8x16_t delta = GetBaseDelta_NEON(p1s, p0s, q0s, q1s); - const int8x16_t simple_lf_delta = - vandq_s8(delta, vreinterpretq_s8_u8(simple_lf_mask)); - ApplyFilter2NoFlip_NEON(p0s, q0s, simple_lf_delta, &p0s, &q0s); - } - - // do_filter4 part (complex loopfilter on pixels without hev) - { - const int8x16_t delta0 = GetBaseDelta0_NEON(p0s, q0s); - // we use: (mask & hev_mask) ^ mask = mask & !hev_mask - const uint8x16_t complex_lf_mask = veorq_u8(simple_lf_mask, mask); - const int8x16_t complex_lf_delta = - vandq_s8(delta0, vreinterpretq_s8_u8(complex_lf_mask)); - ApplyFilter4_NEON(p1s, p0s, q0s, q1s, complex_lf_delta, op1, op0, oq0, oq1); - } -} - -// 6-points filter - -static void ApplyFilter6_NEON( - const int8x16_t p2, const int8x16_t p1, const int8x16_t p0, - const int8x16_t q0, const int8x16_t q1, const int8x16_t q2, - const int8x16_t delta, - uint8x16_t* const op2, uint8x16_t* const op1, uint8x16_t* const op0, - uint8x16_t* const oq0, uint8x16_t* const oq1, uint8x16_t* const oq2) { - // We have to compute: X = (9*a+63) >> 7, Y = (18*a+63)>>7, Z = (27*a+63) >> 7 - // Turns out, there's a common sub-expression S=9 * a - 1 that can be used - // with the special vqrshrn_n_s16 rounding-shift-and-narrow instruction: - // X = (S + 64) >> 7, Y = (S + 32) >> 6, Z = (18 * a + S + 64) >> 7 - const int8x8_t delta_lo = vget_low_s8(delta); - const int8x8_t delta_hi = vget_high_s8(delta); - const int8x8_t kCst9 = vdup_n_s8(9); - const int16x8_t kCstm1 = vdupq_n_s16(-1); - const int8x8_t kCst18 = vdup_n_s8(18); - const int16x8_t S_lo = vmlal_s8(kCstm1, kCst9, delta_lo); // S = 9 * a - 1 - const int16x8_t S_hi = vmlal_s8(kCstm1, kCst9, delta_hi); - const int16x8_t Z_lo = vmlal_s8(S_lo, kCst18, delta_lo); // S + 18 * a - const int16x8_t Z_hi = vmlal_s8(S_hi, kCst18, delta_hi); - const int8x8_t a3_lo = vqrshrn_n_s16(S_lo, 7); // (9 * a + 63) >> 7 - const int8x8_t a3_hi = vqrshrn_n_s16(S_hi, 7); - const int8x8_t a2_lo = vqrshrn_n_s16(S_lo, 6); // (9 * a + 31) >> 6 - const int8x8_t a2_hi = vqrshrn_n_s16(S_hi, 6); - const int8x8_t a1_lo = vqrshrn_n_s16(Z_lo, 7); // (27 * a + 63) >> 7 - const int8x8_t a1_hi = vqrshrn_n_s16(Z_hi, 7); - const int8x16_t a1 = vcombine_s8(a1_lo, a1_hi); - const int8x16_t a2 = vcombine_s8(a2_lo, a2_hi); - const int8x16_t a3 = vcombine_s8(a3_lo, a3_hi); - - *op0 = FlipSignBack_NEON(vqaddq_s8(p0, a1)); // clip(p0 + a1) - *oq0 = FlipSignBack_NEON(vqsubq_s8(q0, a1)); // clip(q0 - q1) - *oq1 = FlipSignBack_NEON(vqsubq_s8(q1, a2)); // clip(q1 - a2) - *op1 = FlipSignBack_NEON(vqaddq_s8(p1, a2)); // clip(p1 + a2) - *oq2 = FlipSignBack_NEON(vqsubq_s8(q2, a3)); // clip(q2 - a3) - *op2 = FlipSignBack_NEON(vqaddq_s8(p2, a3)); // clip(p2 + a3) -} - -static void DoFilter6_NEON( - const uint8x16_t p2, const uint8x16_t p1, const uint8x16_t p0, - const uint8x16_t q0, const uint8x16_t q1, const uint8x16_t q2, - const uint8x16_t mask, const uint8x16_t hev_mask, - uint8x16_t* const op2, uint8x16_t* const op1, uint8x16_t* const op0, - uint8x16_t* const oq0, uint8x16_t* const oq1, uint8x16_t* const oq2) { - // This is a fused version of DoFilter2() calling ApplyFilter2 directly - const int8x16_t p2s = FlipSign_NEON(p2); - const int8x16_t p1s = FlipSign_NEON(p1); - int8x16_t p0s = FlipSign_NEON(p0); - int8x16_t q0s = FlipSign_NEON(q0); - const int8x16_t q1s = FlipSign_NEON(q1); - const int8x16_t q2s = FlipSign_NEON(q2); - const uint8x16_t simple_lf_mask = vandq_u8(mask, hev_mask); - const int8x16_t delta0 = GetBaseDelta_NEON(p1s, p0s, q0s, q1s); - - // do_filter2 part (simple loopfilter on pixels with hev) - { - const int8x16_t simple_lf_delta = - vandq_s8(delta0, vreinterpretq_s8_u8(simple_lf_mask)); - ApplyFilter2NoFlip_NEON(p0s, q0s, simple_lf_delta, &p0s, &q0s); - } - - // do_filter6 part (complex loopfilter on pixels without hev) - { - // we use: (mask & hev_mask) ^ mask = mask & !hev_mask - const uint8x16_t complex_lf_mask = veorq_u8(simple_lf_mask, mask); - const int8x16_t complex_lf_delta = - vandq_s8(delta0, vreinterpretq_s8_u8(complex_lf_mask)); - ApplyFilter6_NEON(p2s, p1s, p0s, q0s, q1s, q2s, complex_lf_delta, - op2, op1, op0, oq0, oq1, oq2); - } -} - -// on macroblock edges - -static void VFilter16_NEON(uint8_t* p, int stride, - int thresh, int ithresh, int hev_thresh) { - uint8x16_t p3, p2, p1, p0, q0, q1, q2, q3; - Load16x8_NEON(p, stride, &p3, &p2, &p1, &p0, &q0, &q1, &q2, &q3); - { - const uint8x16_t mask = NeedsFilter2_NEON(p3, p2, p1, p0, q0, q1, q2, q3, - ithresh, thresh); - const uint8x16_t hev_mask = NeedsHev_NEON(p1, p0, q0, q1, hev_thresh); - uint8x16_t op2, op1, op0, oq0, oq1, oq2; - DoFilter6_NEON(p2, p1, p0, q0, q1, q2, mask, hev_mask, - &op2, &op1, &op0, &oq0, &oq1, &oq2); - Store16x2_NEON(op2, op1, p - 2 * stride, stride); - Store16x2_NEON(op0, oq0, p + 0 * stride, stride); - Store16x2_NEON(oq1, oq2, p + 2 * stride, stride); - } -} - -static void HFilter16_NEON(uint8_t* p, int stride, - int thresh, int ithresh, int hev_thresh) { - uint8x16_t p3, p2, p1, p0, q0, q1, q2, q3; - Load8x16_NEON(p, stride, &p3, &p2, &p1, &p0, &q0, &q1, &q2, &q3); - { - const uint8x16_t mask = NeedsFilter2_NEON(p3, p2, p1, p0, q0, q1, q2, q3, - ithresh, thresh); - const uint8x16_t hev_mask = NeedsHev_NEON(p1, p0, q0, q1, hev_thresh); - uint8x16_t op2, op1, op0, oq0, oq1, oq2; - DoFilter6_NEON(p2, p1, p0, q0, q1, q2, mask, hev_mask, - &op2, &op1, &op0, &oq0, &oq1, &oq2); - Store2x16_NEON(op2, op1, p - 2, stride); - Store2x16_NEON(op0, oq0, p + 0, stride); - Store2x16_NEON(oq1, oq2, p + 2, stride); - } -} - -// on three inner edges -static void VFilter16i_NEON(uint8_t* p, int stride, - int thresh, int ithresh, int hev_thresh) { - uint32_t k; - uint8x16_t p3, p2, p1, p0; - Load16x4_NEON(p + 2 * stride, stride, &p3, &p2, &p1, &p0); - for (k = 3; k != 0; --k) { - uint8x16_t q0, q1, q2, q3; - p += 4 * stride; - Load16x4_NEON(p + 2 * stride, stride, &q0, &q1, &q2, &q3); - { - const uint8x16_t mask = - NeedsFilter2_NEON(p3, p2, p1, p0, q0, q1, q2, q3, ithresh, thresh); - const uint8x16_t hev_mask = NeedsHev_NEON(p1, p0, q0, q1, hev_thresh); - // p3 and p2 are not just temporary variables here: they will be - // re-used for next span. And q2/q3 will become p1/p0 accordingly. - DoFilter4_NEON(p1, p0, q0, q1, mask, hev_mask, &p1, &p0, &p3, &p2); - Store16x4_NEON(p1, p0, p3, p2, p, stride); - p1 = q2; - p0 = q3; - } - } -} - -#if !defined(WORK_AROUND_GCC) -static void HFilter16i_NEON(uint8_t* p, int stride, - int thresh, int ithresh, int hev_thresh) { - uint32_t k; - uint8x16_t p3, p2, p1, p0; - Load4x16_NEON(p + 2, stride, &p3, &p2, &p1, &p0); - for (k = 3; k != 0; --k) { - uint8x16_t q0, q1, q2, q3; - p += 4; - Load4x16_NEON(p + 2, stride, &q0, &q1, &q2, &q3); - { - const uint8x16_t mask = - NeedsFilter2_NEON(p3, p2, p1, p0, q0, q1, q2, q3, ithresh, thresh); - const uint8x16_t hev_mask = NeedsHev_NEON(p1, p0, q0, q1, hev_thresh); - DoFilter4_NEON(p1, p0, q0, q1, mask, hev_mask, &p1, &p0, &p3, &p2); - Store4x16_NEON(p1, p0, p3, p2, p, stride); - p1 = q2; - p0 = q3; - } - } -} -#endif // !WORK_AROUND_GCC - -// 8-pixels wide variant, for chroma filtering -static void VFilter8_NEON(uint8_t* u, uint8_t* v, int stride, - int thresh, int ithresh, int hev_thresh) { - uint8x16_t p3, p2, p1, p0, q0, q1, q2, q3; - Load8x8x2_NEON(u, v, stride, &p3, &p2, &p1, &p0, &q0, &q1, &q2, &q3); - { - const uint8x16_t mask = NeedsFilter2_NEON(p3, p2, p1, p0, q0, q1, q2, q3, - ithresh, thresh); - const uint8x16_t hev_mask = NeedsHev_NEON(p1, p0, q0, q1, hev_thresh); - uint8x16_t op2, op1, op0, oq0, oq1, oq2; - DoFilter6_NEON(p2, p1, p0, q0, q1, q2, mask, hev_mask, - &op2, &op1, &op0, &oq0, &oq1, &oq2); - Store8x2x2_NEON(op2, op1, u - 2 * stride, v - 2 * stride, stride); - Store8x2x2_NEON(op0, oq0, u + 0 * stride, v + 0 * stride, stride); - Store8x2x2_NEON(oq1, oq2, u + 2 * stride, v + 2 * stride, stride); - } -} -static void VFilter8i_NEON(uint8_t* u, uint8_t* v, int stride, - int thresh, int ithresh, int hev_thresh) { - uint8x16_t p3, p2, p1, p0, q0, q1, q2, q3; - u += 4 * stride; - v += 4 * stride; - Load8x8x2_NEON(u, v, stride, &p3, &p2, &p1, &p0, &q0, &q1, &q2, &q3); - { - const uint8x16_t mask = NeedsFilter2_NEON(p3, p2, p1, p0, q0, q1, q2, q3, - ithresh, thresh); - const uint8x16_t hev_mask = NeedsHev_NEON(p1, p0, q0, q1, hev_thresh); - uint8x16_t op1, op0, oq0, oq1; - DoFilter4_NEON(p1, p0, q0, q1, mask, hev_mask, &op1, &op0, &oq0, &oq1); - Store8x4x2_NEON(op1, op0, oq0, oq1, u, v, stride); - } -} - -#if !defined(WORK_AROUND_GCC) -static void HFilter8_NEON(uint8_t* u, uint8_t* v, int stride, - int thresh, int ithresh, int hev_thresh) { - uint8x16_t p3, p2, p1, p0, q0, q1, q2, q3; - Load8x8x2T_NEON(u, v, stride, &p3, &p2, &p1, &p0, &q0, &q1, &q2, &q3); - { - const uint8x16_t mask = NeedsFilter2_NEON(p3, p2, p1, p0, q0, q1, q2, q3, - ithresh, thresh); - const uint8x16_t hev_mask = NeedsHev_NEON(p1, p0, q0, q1, hev_thresh); - uint8x16_t op2, op1, op0, oq0, oq1, oq2; - DoFilter6_NEON(p2, p1, p0, q0, q1, q2, mask, hev_mask, - &op2, &op1, &op0, &oq0, &oq1, &oq2); - Store6x8x2_NEON(op2, op1, op0, oq0, oq1, oq2, u, v, stride); - } -} - -static void HFilter8i_NEON(uint8_t* u, uint8_t* v, int stride, - int thresh, int ithresh, int hev_thresh) { - uint8x16_t p3, p2, p1, p0, q0, q1, q2, q3; - u += 4; - v += 4; - Load8x8x2T_NEON(u, v, stride, &p3, &p2, &p1, &p0, &q0, &q1, &q2, &q3); - { - const uint8x16_t mask = NeedsFilter2_NEON(p3, p2, p1, p0, q0, q1, q2, q3, - ithresh, thresh); - const uint8x16_t hev_mask = NeedsHev_NEON(p1, p0, q0, q1, hev_thresh); - uint8x16_t op1, op0, oq0, oq1; - DoFilter4_NEON(p1, p0, q0, q1, mask, hev_mask, &op1, &op0, &oq0, &oq1); - Store4x8x2_NEON(op1, op0, oq0, oq1, u, v, stride); - } -} -#endif // !WORK_AROUND_GCC - -//----------------------------------------------------------------------------- -// Inverse transforms (Paragraph 14.4) - -// Technically these are unsigned but vqdmulh is only available in signed. -// vqdmulh returns high half (effectively >> 16) but also doubles the value, -// changing the >> 16 to >> 15 and requiring an additional >> 1. -// We use this to our advantage with kC2. The canonical value is 35468. -// However, the high bit is set so treating it as signed will give incorrect -// results. We avoid this by down shifting by 1 here to clear the highest bit. -// Combined with the doubling effect of vqdmulh we get >> 16. -// This can not be applied to kC1 because the lowest bit is set. Down shifting -// the constant would reduce precision. - -// libwebp uses a trick to avoid some extra addition that libvpx does. -// Instead of: -// temp2 = ip[12] + ((ip[12] * cospi8sqrt2minus1) >> 16); -// libwebp adds 1 << 16 to cospi8sqrt2minus1 (kC1). However, this causes the -// same issue with kC1 and vqdmulh that we work around by down shifting kC2 - -static const int16_t kC1 = 20091; -static const int16_t kC2 = 17734; // half of kC2, actually. See comment above. - -#if defined(WEBP_USE_INTRINSICS) -static WEBP_INLINE void Transpose8x2_NEON(const int16x8_t in0, - const int16x8_t in1, - int16x8x2_t* const out) { - // a0 a1 a2 a3 | b0 b1 b2 b3 => a0 b0 c0 d0 | a1 b1 c1 d1 - // c0 c1 c2 c3 | d0 d1 d2 d3 a2 b2 c2 d2 | a3 b3 c3 d3 - const int16x8x2_t tmp0 = vzipq_s16(in0, in1); // a0 c0 a1 c1 a2 c2 ... - // b0 d0 b1 d1 b2 d2 ... - *out = vzipq_s16(tmp0.val[0], tmp0.val[1]); -} - -static WEBP_INLINE void TransformPass_NEON(int16x8x2_t* const rows) { - // {rows} = in0 | in4 - // in8 | in12 - // B1 = in4 | in12 - const int16x8_t B1 = - vcombine_s16(vget_high_s16(rows->val[0]), vget_high_s16(rows->val[1])); - // C0 = kC1 * in4 | kC1 * in12 - // C1 = kC2 * in4 | kC2 * in12 - const int16x8_t C0 = vsraq_n_s16(B1, vqdmulhq_n_s16(B1, kC1), 1); - const int16x8_t C1 = vqdmulhq_n_s16(B1, kC2); - const int16x4_t a = vqadd_s16(vget_low_s16(rows->val[0]), - vget_low_s16(rows->val[1])); // in0 + in8 - const int16x4_t b = vqsub_s16(vget_low_s16(rows->val[0]), - vget_low_s16(rows->val[1])); // in0 - in8 - // c = kC2 * in4 - kC1 * in12 - // d = kC1 * in4 + kC2 * in12 - const int16x4_t c = vqsub_s16(vget_low_s16(C1), vget_high_s16(C0)); - const int16x4_t d = vqadd_s16(vget_low_s16(C0), vget_high_s16(C1)); - const int16x8_t D0 = vcombine_s16(a, b); // D0 = a | b - const int16x8_t D1 = vcombine_s16(d, c); // D1 = d | c - const int16x8_t E0 = vqaddq_s16(D0, D1); // a+d | b+c - const int16x8_t E_tmp = vqsubq_s16(D0, D1); // a-d | b-c - const int16x8_t E1 = vcombine_s16(vget_high_s16(E_tmp), vget_low_s16(E_tmp)); - Transpose8x2_NEON(E0, E1, rows); -} - -static void TransformOne_NEON(const int16_t* in, uint8_t* dst) { - int16x8x2_t rows; - INIT_VECTOR2(rows, vld1q_s16(in + 0), vld1q_s16(in + 8)); - TransformPass_NEON(&rows); - TransformPass_NEON(&rows); - Add4x4_NEON(rows.val[0], rows.val[1], dst); -} - -#else - -static void TransformOne_NEON(const int16_t* in, uint8_t* dst) { - const int kBPS = BPS; - // kC1, kC2. Padded because vld1.16 loads 8 bytes - const int16_t constants[4] = { kC1, kC2, 0, 0 }; - /* Adapted from libvpx: vp8/common/arm/neon/shortidct4x4llm_neon.asm */ - __asm__ volatile ( - "vld1.16 {q1, q2}, [%[in]] \n" - "vld1.16 {d0}, [%[constants]] \n" - - /* d2: in[0] - * d3: in[8] - * d4: in[4] - * d5: in[12] - */ - "vswp d3, d4 \n" - - /* q8 = {in[4], in[12]} * kC1 * 2 >> 16 - * q9 = {in[4], in[12]} * kC2 >> 16 - */ - "vqdmulh.s16 q8, q2, d0[0] \n" - "vqdmulh.s16 q9, q2, d0[1] \n" - - /* d22 = a = in[0] + in[8] - * d23 = b = in[0] - in[8] - */ - "vqadd.s16 d22, d2, d3 \n" - "vqsub.s16 d23, d2, d3 \n" - - /* The multiplication should be x * kC1 >> 16 - * However, with vqdmulh we get x * kC1 * 2 >> 16 - * (multiply, double, return high half) - * We avoided this in kC2 by pre-shifting the constant. - * q8 = in[4]/[12] * kC1 >> 16 - */ - "vshr.s16 q8, q8, #1 \n" - - /* Add {in[4], in[12]} back after the multiplication. This is handled by - * adding 1 << 16 to kC1 in the libwebp C code. - */ - "vqadd.s16 q8, q2, q8 \n" - - /* d20 = c = in[4]*kC2 - in[12]*kC1 - * d21 = d = in[4]*kC1 + in[12]*kC2 - */ - "vqsub.s16 d20, d18, d17 \n" - "vqadd.s16 d21, d19, d16 \n" - - /* d2 = tmp[0] = a + d - * d3 = tmp[1] = b + c - * d4 = tmp[2] = b - c - * d5 = tmp[3] = a - d - */ - "vqadd.s16 d2, d22, d21 \n" - "vqadd.s16 d3, d23, d20 \n" - "vqsub.s16 d4, d23, d20 \n" - "vqsub.s16 d5, d22, d21 \n" - - "vzip.16 q1, q2 \n" - "vzip.16 q1, q2 \n" - - "vswp d3, d4 \n" - - /* q8 = {tmp[4], tmp[12]} * kC1 * 2 >> 16 - * q9 = {tmp[4], tmp[12]} * kC2 >> 16 - */ - "vqdmulh.s16 q8, q2, d0[0] \n" - "vqdmulh.s16 q9, q2, d0[1] \n" - - /* d22 = a = tmp[0] + tmp[8] - * d23 = b = tmp[0] - tmp[8] - */ - "vqadd.s16 d22, d2, d3 \n" - "vqsub.s16 d23, d2, d3 \n" - - /* See long winded explanations prior */ - "vshr.s16 q8, q8, #1 \n" - "vqadd.s16 q8, q2, q8 \n" - - /* d20 = c = in[4]*kC2 - in[12]*kC1 - * d21 = d = in[4]*kC1 + in[12]*kC2 - */ - "vqsub.s16 d20, d18, d17 \n" - "vqadd.s16 d21, d19, d16 \n" - - /* d2 = tmp[0] = a + d - * d3 = tmp[1] = b + c - * d4 = tmp[2] = b - c - * d5 = tmp[3] = a - d - */ - "vqadd.s16 d2, d22, d21 \n" - "vqadd.s16 d3, d23, d20 \n" - "vqsub.s16 d4, d23, d20 \n" - "vqsub.s16 d5, d22, d21 \n" - - "vld1.32 d6[0], [%[dst]], %[kBPS] \n" - "vld1.32 d6[1], [%[dst]], %[kBPS] \n" - "vld1.32 d7[0], [%[dst]], %[kBPS] \n" - "vld1.32 d7[1], [%[dst]], %[kBPS] \n" - - "sub %[dst], %[dst], %[kBPS], lsl #2 \n" - - /* (val) + 4 >> 3 */ - "vrshr.s16 d2, d2, #3 \n" - "vrshr.s16 d3, d3, #3 \n" - "vrshr.s16 d4, d4, #3 \n" - "vrshr.s16 d5, d5, #3 \n" - - "vzip.16 q1, q2 \n" - "vzip.16 q1, q2 \n" - - /* Must accumulate before saturating */ - "vmovl.u8 q8, d6 \n" - "vmovl.u8 q9, d7 \n" - - "vqadd.s16 q1, q1, q8 \n" - "vqadd.s16 q2, q2, q9 \n" - - "vqmovun.s16 d0, q1 \n" - "vqmovun.s16 d1, q2 \n" - - "vst1.32 d0[0], [%[dst]], %[kBPS] \n" - "vst1.32 d0[1], [%[dst]], %[kBPS] \n" - "vst1.32 d1[0], [%[dst]], %[kBPS] \n" - "vst1.32 d1[1], [%[dst]] \n" - - : [in] "+r"(in), [dst] "+r"(dst) /* modified registers */ - : [kBPS] "r"(kBPS), [constants] "r"(constants) /* constants */ - : "memory", "q0", "q1", "q2", "q8", "q9", "q10", "q11" /* clobbered */ - ); -} - -#endif // WEBP_USE_INTRINSICS - -static void TransformTwo_NEON(const int16_t* in, uint8_t* dst, int do_two) { - TransformOne_NEON(in, dst); - if (do_two) { - TransformOne_NEON(in + 16, dst + 4); - } -} - -static void TransformDC_NEON(const int16_t* in, uint8_t* dst) { - const int16x8_t DC = vdupq_n_s16(in[0]); - Add4x4_NEON(DC, DC, dst); -} - -//------------------------------------------------------------------------------ - -#define STORE_WHT(dst, col, rows) do { \ - *dst = vgetq_lane_s32(rows.val[0], col); (dst) += 16; \ - *dst = vgetq_lane_s32(rows.val[1], col); (dst) += 16; \ - *dst = vgetq_lane_s32(rows.val[2], col); (dst) += 16; \ - *dst = vgetq_lane_s32(rows.val[3], col); (dst) += 16; \ -} while (0) - -static void TransformWHT_NEON(const int16_t* in, int16_t* out) { - int32x4x4_t tmp; - - { - // Load the source. - const int16x4_t in00_03 = vld1_s16(in + 0); - const int16x4_t in04_07 = vld1_s16(in + 4); - const int16x4_t in08_11 = vld1_s16(in + 8); - const int16x4_t in12_15 = vld1_s16(in + 12); - const int32x4_t a0 = vaddl_s16(in00_03, in12_15); // in[0..3] + in[12..15] - const int32x4_t a1 = vaddl_s16(in04_07, in08_11); // in[4..7] + in[8..11] - const int32x4_t a2 = vsubl_s16(in04_07, in08_11); // in[4..7] - in[8..11] - const int32x4_t a3 = vsubl_s16(in00_03, in12_15); // in[0..3] - in[12..15] - tmp.val[0] = vaddq_s32(a0, a1); - tmp.val[1] = vaddq_s32(a3, a2); - tmp.val[2] = vsubq_s32(a0, a1); - tmp.val[3] = vsubq_s32(a3, a2); - // Arrange the temporary results column-wise. - tmp = Transpose4x4_NEON(tmp); - } - - { - const int32x4_t kCst3 = vdupq_n_s32(3); - const int32x4_t dc = vaddq_s32(tmp.val[0], kCst3); // add rounder - const int32x4_t a0 = vaddq_s32(dc, tmp.val[3]); - const int32x4_t a1 = vaddq_s32(tmp.val[1], tmp.val[2]); - const int32x4_t a2 = vsubq_s32(tmp.val[1], tmp.val[2]); - const int32x4_t a3 = vsubq_s32(dc, tmp.val[3]); - - tmp.val[0] = vaddq_s32(a0, a1); - tmp.val[1] = vaddq_s32(a3, a2); - tmp.val[2] = vsubq_s32(a0, a1); - tmp.val[3] = vsubq_s32(a3, a2); - - // right shift the results by 3. - tmp.val[0] = vshrq_n_s32(tmp.val[0], 3); - tmp.val[1] = vshrq_n_s32(tmp.val[1], 3); - tmp.val[2] = vshrq_n_s32(tmp.val[2], 3); - tmp.val[3] = vshrq_n_s32(tmp.val[3], 3); - - STORE_WHT(out, 0, tmp); - STORE_WHT(out, 1, tmp); - STORE_WHT(out, 2, tmp); - STORE_WHT(out, 3, tmp); - } -} - -#undef STORE_WHT - -//------------------------------------------------------------------------------ - -#define MUL(a, b) (((a) * (b)) >> 16) -static void TransformAC3_NEON(const int16_t* in, uint8_t* dst) { - static const int kC1_full = 20091 + (1 << 16); - static const int kC2_full = 35468; - const int16x4_t A = vld1_dup_s16(in); - const int16x4_t c4 = vdup_n_s16(MUL(in[4], kC2_full)); - const int16x4_t d4 = vdup_n_s16(MUL(in[4], kC1_full)); - const int c1 = MUL(in[1], kC2_full); - const int d1 = MUL(in[1], kC1_full); - const uint64_t cd = (uint64_t)( d1 & 0xffff) << 0 | - (uint64_t)( c1 & 0xffff) << 16 | - (uint64_t)(-c1 & 0xffff) << 32 | - (uint64_t)(-d1 & 0xffff) << 48; - const int16x4_t CD = vcreate_s16(cd); - const int16x4_t B = vqadd_s16(A, CD); - const int16x8_t m0_m1 = vcombine_s16(vqadd_s16(B, d4), vqadd_s16(B, c4)); - const int16x8_t m2_m3 = vcombine_s16(vqsub_s16(B, c4), vqsub_s16(B, d4)); - Add4x4_NEON(m0_m1, m2_m3, dst); -} -#undef MUL - -//------------------------------------------------------------------------------ -// 4x4 - -static void DC4_NEON(uint8_t* dst) { // DC - const uint8x8_t A = vld1_u8(dst - BPS); // top row - const uint16x4_t p0 = vpaddl_u8(A); // cascading summation of the top - const uint16x4_t p1 = vpadd_u16(p0, p0); - const uint16x8_t L0 = vmovl_u8(vld1_u8(dst + 0 * BPS - 1)); - const uint16x8_t L1 = vmovl_u8(vld1_u8(dst + 1 * BPS - 1)); - const uint16x8_t L2 = vmovl_u8(vld1_u8(dst + 2 * BPS - 1)); - const uint16x8_t L3 = vmovl_u8(vld1_u8(dst + 3 * BPS - 1)); - const uint16x8_t s0 = vaddq_u16(L0, L1); - const uint16x8_t s1 = vaddq_u16(L2, L3); - const uint16x8_t s01 = vaddq_u16(s0, s1); - const uint16x8_t sum = vaddq_u16(s01, vcombine_u16(p1, p1)); - const uint8x8_t dc0 = vrshrn_n_u16(sum, 3); // (sum + 4) >> 3 - const uint8x8_t dc = vdup_lane_u8(dc0, 0); - int i; - for (i = 0; i < 4; ++i) { - vst1_lane_u32((uint32_t*)(dst + i * BPS), vreinterpret_u32_u8(dc), 0); - } -} - -// TrueMotion (4x4 + 8x8) -static WEBP_INLINE void TrueMotion_NEON(uint8_t* dst, int size) { - const uint8x8_t TL = vld1_dup_u8(dst - BPS - 1); // top-left pixel 'A[-1]' - const uint8x8_t T = vld1_u8(dst - BPS); // top row 'A[0..3]' - const int16x8_t d = vreinterpretq_s16_u16(vsubl_u8(T, TL)); // A[c] - A[-1] - int y; - for (y = 0; y < size; y += 4) { - // left edge - const int16x8_t L0 = ConvertU8ToS16_NEON(vld1_dup_u8(dst + 0 * BPS - 1)); - const int16x8_t L1 = ConvertU8ToS16_NEON(vld1_dup_u8(dst + 1 * BPS - 1)); - const int16x8_t L2 = ConvertU8ToS16_NEON(vld1_dup_u8(dst + 2 * BPS - 1)); - const int16x8_t L3 = ConvertU8ToS16_NEON(vld1_dup_u8(dst + 3 * BPS - 1)); - const int16x8_t r0 = vaddq_s16(L0, d); // L[r] + A[c] - A[-1] - const int16x8_t r1 = vaddq_s16(L1, d); - const int16x8_t r2 = vaddq_s16(L2, d); - const int16x8_t r3 = vaddq_s16(L3, d); - // Saturate and store the result. - const uint32x2_t r0_u32 = vreinterpret_u32_u8(vqmovun_s16(r0)); - const uint32x2_t r1_u32 = vreinterpret_u32_u8(vqmovun_s16(r1)); - const uint32x2_t r2_u32 = vreinterpret_u32_u8(vqmovun_s16(r2)); - const uint32x2_t r3_u32 = vreinterpret_u32_u8(vqmovun_s16(r3)); - if (size == 4) { - vst1_lane_u32((uint32_t*)(dst + 0 * BPS), r0_u32, 0); - vst1_lane_u32((uint32_t*)(dst + 1 * BPS), r1_u32, 0); - vst1_lane_u32((uint32_t*)(dst + 2 * BPS), r2_u32, 0); - vst1_lane_u32((uint32_t*)(dst + 3 * BPS), r3_u32, 0); - } else { - vst1_u32((uint32_t*)(dst + 0 * BPS), r0_u32); - vst1_u32((uint32_t*)(dst + 1 * BPS), r1_u32); - vst1_u32((uint32_t*)(dst + 2 * BPS), r2_u32); - vst1_u32((uint32_t*)(dst + 3 * BPS), r3_u32); - } - dst += 4 * BPS; - } -} - -static void TM4_NEON(uint8_t* dst) { TrueMotion_NEON(dst, 4); } - -static void VE4_NEON(uint8_t* dst) { // vertical - // NB: avoid vld1_u64 here as an alignment hint may be added -> SIGBUS. - const uint64x1_t A0 = vreinterpret_u64_u8(vld1_u8(dst - BPS - 1)); // top row - const uint64x1_t A1 = vshr_n_u64(A0, 8); - const uint64x1_t A2 = vshr_n_u64(A0, 16); - const uint8x8_t ABCDEFGH = vreinterpret_u8_u64(A0); - const uint8x8_t BCDEFGH0 = vreinterpret_u8_u64(A1); - const uint8x8_t CDEFGH00 = vreinterpret_u8_u64(A2); - const uint8x8_t b = vhadd_u8(ABCDEFGH, CDEFGH00); - const uint8x8_t avg = vrhadd_u8(b, BCDEFGH0); - int i; - for (i = 0; i < 4; ++i) { - vst1_lane_u32((uint32_t*)(dst + i * BPS), vreinterpret_u32_u8(avg), 0); - } -} - -static void RD4_NEON(uint8_t* dst) { // Down-right - const uint8x8_t XABCD_u8 = vld1_u8(dst - BPS - 1); - const uint64x1_t XABCD = vreinterpret_u64_u8(XABCD_u8); - const uint64x1_t ____XABC = vshl_n_u64(XABCD, 32); - const uint32_t I = dst[-1 + 0 * BPS]; - const uint32_t J = dst[-1 + 1 * BPS]; - const uint32_t K = dst[-1 + 2 * BPS]; - const uint32_t L = dst[-1 + 3 * BPS]; - const uint64x1_t LKJI____ = - vcreate_u64((uint64_t)L | (K << 8) | (J << 16) | (I << 24)); - const uint64x1_t LKJIXABC = vorr_u64(LKJI____, ____XABC); - const uint8x8_t KJIXABC_ = vreinterpret_u8_u64(vshr_n_u64(LKJIXABC, 8)); - const uint8x8_t JIXABC__ = vreinterpret_u8_u64(vshr_n_u64(LKJIXABC, 16)); - const uint8_t D = vget_lane_u8(XABCD_u8, 4); - const uint8x8_t JIXABCD_ = vset_lane_u8(D, JIXABC__, 6); - const uint8x8_t LKJIXABC_u8 = vreinterpret_u8_u64(LKJIXABC); - const uint8x8_t avg1 = vhadd_u8(JIXABCD_, LKJIXABC_u8); - const uint8x8_t avg2 = vrhadd_u8(avg1, KJIXABC_); - const uint64x1_t avg2_u64 = vreinterpret_u64_u8(avg2); - const uint32x2_t r3 = vreinterpret_u32_u8(avg2); - const uint32x2_t r2 = vreinterpret_u32_u64(vshr_n_u64(avg2_u64, 8)); - const uint32x2_t r1 = vreinterpret_u32_u64(vshr_n_u64(avg2_u64, 16)); - const uint32x2_t r0 = vreinterpret_u32_u64(vshr_n_u64(avg2_u64, 24)); - vst1_lane_u32((uint32_t*)(dst + 0 * BPS), r0, 0); - vst1_lane_u32((uint32_t*)(dst + 1 * BPS), r1, 0); - vst1_lane_u32((uint32_t*)(dst + 2 * BPS), r2, 0); - vst1_lane_u32((uint32_t*)(dst + 3 * BPS), r3, 0); -} - -static void LD4_NEON(uint8_t* dst) { // Down-left - // Note using the same shift trick as VE4() is slower here. - const uint8x8_t ABCDEFGH = vld1_u8(dst - BPS + 0); - const uint8x8_t BCDEFGH0 = vld1_u8(dst - BPS + 1); - const uint8x8_t CDEFGH00 = vld1_u8(dst - BPS + 2); - const uint8x8_t CDEFGHH0 = vset_lane_u8(dst[-BPS + 7], CDEFGH00, 6); - const uint8x8_t avg1 = vhadd_u8(ABCDEFGH, CDEFGHH0); - const uint8x8_t avg2 = vrhadd_u8(avg1, BCDEFGH0); - const uint64x1_t avg2_u64 = vreinterpret_u64_u8(avg2); - const uint32x2_t r0 = vreinterpret_u32_u8(avg2); - const uint32x2_t r1 = vreinterpret_u32_u64(vshr_n_u64(avg2_u64, 8)); - const uint32x2_t r2 = vreinterpret_u32_u64(vshr_n_u64(avg2_u64, 16)); - const uint32x2_t r3 = vreinterpret_u32_u64(vshr_n_u64(avg2_u64, 24)); - vst1_lane_u32((uint32_t*)(dst + 0 * BPS), r0, 0); - vst1_lane_u32((uint32_t*)(dst + 1 * BPS), r1, 0); - vst1_lane_u32((uint32_t*)(dst + 2 * BPS), r2, 0); - vst1_lane_u32((uint32_t*)(dst + 3 * BPS), r3, 0); -} - -//------------------------------------------------------------------------------ -// Chroma - -static void VE8uv_NEON(uint8_t* dst) { // vertical - const uint8x8_t top = vld1_u8(dst - BPS); - int j; - for (j = 0; j < 8; ++j) { - vst1_u8(dst + j * BPS, top); - } -} - -static void HE8uv_NEON(uint8_t* dst) { // horizontal - int j; - for (j = 0; j < 8; ++j) { - const uint8x8_t left = vld1_dup_u8(dst - 1); - vst1_u8(dst, left); - dst += BPS; - } -} - -static WEBP_INLINE void DC8_NEON(uint8_t* dst, int do_top, int do_left) { - uint16x8_t sum_top; - uint16x8_t sum_left; - uint8x8_t dc0; - - if (do_top) { - const uint8x8_t A = vld1_u8(dst - BPS); // top row -#if defined(__aarch64__) - const uint16x8_t B = vmovl_u8(A); - const uint16_t p2 = vaddvq_u16(B); - sum_top = vdupq_n_u16(p2); -#else - const uint16x4_t p0 = vpaddl_u8(A); // cascading summation of the top - const uint16x4_t p1 = vpadd_u16(p0, p0); - const uint16x4_t p2 = vpadd_u16(p1, p1); - sum_top = vcombine_u16(p2, p2); -#endif - } - - if (do_left) { - const uint16x8_t L0 = vmovl_u8(vld1_u8(dst + 0 * BPS - 1)); - const uint16x8_t L1 = vmovl_u8(vld1_u8(dst + 1 * BPS - 1)); - const uint16x8_t L2 = vmovl_u8(vld1_u8(dst + 2 * BPS - 1)); - const uint16x8_t L3 = vmovl_u8(vld1_u8(dst + 3 * BPS - 1)); - const uint16x8_t L4 = vmovl_u8(vld1_u8(dst + 4 * BPS - 1)); - const uint16x8_t L5 = vmovl_u8(vld1_u8(dst + 5 * BPS - 1)); - const uint16x8_t L6 = vmovl_u8(vld1_u8(dst + 6 * BPS - 1)); - const uint16x8_t L7 = vmovl_u8(vld1_u8(dst + 7 * BPS - 1)); - const uint16x8_t s0 = vaddq_u16(L0, L1); - const uint16x8_t s1 = vaddq_u16(L2, L3); - const uint16x8_t s2 = vaddq_u16(L4, L5); - const uint16x8_t s3 = vaddq_u16(L6, L7); - const uint16x8_t s01 = vaddq_u16(s0, s1); - const uint16x8_t s23 = vaddq_u16(s2, s3); - sum_left = vaddq_u16(s01, s23); - } - - if (do_top && do_left) { - const uint16x8_t sum = vaddq_u16(sum_left, sum_top); - dc0 = vrshrn_n_u16(sum, 4); - } else if (do_top) { - dc0 = vrshrn_n_u16(sum_top, 3); - } else if (do_left) { - dc0 = vrshrn_n_u16(sum_left, 3); - } else { - dc0 = vdup_n_u8(0x80); - } - - { - const uint8x8_t dc = vdup_lane_u8(dc0, 0); - int i; - for (i = 0; i < 8; ++i) { - vst1_u32((uint32_t*)(dst + i * BPS), vreinterpret_u32_u8(dc)); - } - } -} - -static void DC8uv_NEON(uint8_t* dst) { DC8_NEON(dst, 1, 1); } -static void DC8uvNoTop_NEON(uint8_t* dst) { DC8_NEON(dst, 0, 1); } -static void DC8uvNoLeft_NEON(uint8_t* dst) { DC8_NEON(dst, 1, 0); } -static void DC8uvNoTopLeft_NEON(uint8_t* dst) { DC8_NEON(dst, 0, 0); } - -static void TM8uv_NEON(uint8_t* dst) { TrueMotion_NEON(dst, 8); } - -//------------------------------------------------------------------------------ -// 16x16 - -static void VE16_NEON(uint8_t* dst) { // vertical - const uint8x16_t top = vld1q_u8(dst - BPS); - int j; - for (j = 0; j < 16; ++j) { - vst1q_u8(dst + j * BPS, top); - } -} - -static void HE16_NEON(uint8_t* dst) { // horizontal - int j; - for (j = 0; j < 16; ++j) { - const uint8x16_t left = vld1q_dup_u8(dst - 1); - vst1q_u8(dst, left); - dst += BPS; - } -} - -static WEBP_INLINE void DC16_NEON(uint8_t* dst, int do_top, int do_left) { - uint16x8_t sum_top; - uint16x8_t sum_left; - uint8x8_t dc0; - - if (do_top) { - const uint8x16_t A = vld1q_u8(dst - BPS); // top row - const uint16x8_t p0 = vpaddlq_u8(A); // cascading summation of the top - const uint16x4_t p1 = vadd_u16(vget_low_u16(p0), vget_high_u16(p0)); - const uint16x4_t p2 = vpadd_u16(p1, p1); - const uint16x4_t p3 = vpadd_u16(p2, p2); - sum_top = vcombine_u16(p3, p3); - } - - if (do_left) { - int i; - sum_left = vdupq_n_u16(0); - for (i = 0; i < 16; i += 8) { - const uint16x8_t L0 = vmovl_u8(vld1_u8(dst + (i + 0) * BPS - 1)); - const uint16x8_t L1 = vmovl_u8(vld1_u8(dst + (i + 1) * BPS - 1)); - const uint16x8_t L2 = vmovl_u8(vld1_u8(dst + (i + 2) * BPS - 1)); - const uint16x8_t L3 = vmovl_u8(vld1_u8(dst + (i + 3) * BPS - 1)); - const uint16x8_t L4 = vmovl_u8(vld1_u8(dst + (i + 4) * BPS - 1)); - const uint16x8_t L5 = vmovl_u8(vld1_u8(dst + (i + 5) * BPS - 1)); - const uint16x8_t L6 = vmovl_u8(vld1_u8(dst + (i + 6) * BPS - 1)); - const uint16x8_t L7 = vmovl_u8(vld1_u8(dst + (i + 7) * BPS - 1)); - const uint16x8_t s0 = vaddq_u16(L0, L1); - const uint16x8_t s1 = vaddq_u16(L2, L3); - const uint16x8_t s2 = vaddq_u16(L4, L5); - const uint16x8_t s3 = vaddq_u16(L6, L7); - const uint16x8_t s01 = vaddq_u16(s0, s1); - const uint16x8_t s23 = vaddq_u16(s2, s3); - const uint16x8_t sum = vaddq_u16(s01, s23); - sum_left = vaddq_u16(sum_left, sum); - } - } - - if (do_top && do_left) { - const uint16x8_t sum = vaddq_u16(sum_left, sum_top); - dc0 = vrshrn_n_u16(sum, 5); - } else if (do_top) { - dc0 = vrshrn_n_u16(sum_top, 4); - } else if (do_left) { - dc0 = vrshrn_n_u16(sum_left, 4); - } else { - dc0 = vdup_n_u8(0x80); - } - - { - const uint8x16_t dc = vdupq_lane_u8(dc0, 0); - int i; - for (i = 0; i < 16; ++i) { - vst1q_u8(dst + i * BPS, dc); - } - } -} - -static void DC16TopLeft_NEON(uint8_t* dst) { DC16_NEON(dst, 1, 1); } -static void DC16NoTop_NEON(uint8_t* dst) { DC16_NEON(dst, 0, 1); } -static void DC16NoLeft_NEON(uint8_t* dst) { DC16_NEON(dst, 1, 0); } -static void DC16NoTopLeft_NEON(uint8_t* dst) { DC16_NEON(dst, 0, 0); } - -static void TM16_NEON(uint8_t* dst) { - const uint8x8_t TL = vld1_dup_u8(dst - BPS - 1); // top-left pixel 'A[-1]' - const uint8x16_t T = vld1q_u8(dst - BPS); // top row 'A[0..15]' - // A[c] - A[-1] - const int16x8_t d_lo = vreinterpretq_s16_u16(vsubl_u8(vget_low_u8(T), TL)); - const int16x8_t d_hi = vreinterpretq_s16_u16(vsubl_u8(vget_high_u8(T), TL)); - int y; - for (y = 0; y < 16; y += 4) { - // left edge - const int16x8_t L0 = ConvertU8ToS16_NEON(vld1_dup_u8(dst + 0 * BPS - 1)); - const int16x8_t L1 = ConvertU8ToS16_NEON(vld1_dup_u8(dst + 1 * BPS - 1)); - const int16x8_t L2 = ConvertU8ToS16_NEON(vld1_dup_u8(dst + 2 * BPS - 1)); - const int16x8_t L3 = ConvertU8ToS16_NEON(vld1_dup_u8(dst + 3 * BPS - 1)); - const int16x8_t r0_lo = vaddq_s16(L0, d_lo); // L[r] + A[c] - A[-1] - const int16x8_t r1_lo = vaddq_s16(L1, d_lo); - const int16x8_t r2_lo = vaddq_s16(L2, d_lo); - const int16x8_t r3_lo = vaddq_s16(L3, d_lo); - const int16x8_t r0_hi = vaddq_s16(L0, d_hi); - const int16x8_t r1_hi = vaddq_s16(L1, d_hi); - const int16x8_t r2_hi = vaddq_s16(L2, d_hi); - const int16x8_t r3_hi = vaddq_s16(L3, d_hi); - // Saturate and store the result. - const uint8x16_t row0 = vcombine_u8(vqmovun_s16(r0_lo), vqmovun_s16(r0_hi)); - const uint8x16_t row1 = vcombine_u8(vqmovun_s16(r1_lo), vqmovun_s16(r1_hi)); - const uint8x16_t row2 = vcombine_u8(vqmovun_s16(r2_lo), vqmovun_s16(r2_hi)); - const uint8x16_t row3 = vcombine_u8(vqmovun_s16(r3_lo), vqmovun_s16(r3_hi)); - vst1q_u8(dst + 0 * BPS, row0); - vst1q_u8(dst + 1 * BPS, row1); - vst1q_u8(dst + 2 * BPS, row2); - vst1q_u8(dst + 3 * BPS, row3); - dst += 4 * BPS; - } -} - -//------------------------------------------------------------------------------ -// Entry point - -extern void VP8DspInitNEON(void); - -WEBP_TSAN_IGNORE_FUNCTION void VP8DspInitNEON(void) { - VP8Transform = TransformTwo_NEON; - VP8TransformAC3 = TransformAC3_NEON; - VP8TransformDC = TransformDC_NEON; - VP8TransformWHT = TransformWHT_NEON; - - VP8VFilter16 = VFilter16_NEON; - VP8VFilter16i = VFilter16i_NEON; - VP8HFilter16 = HFilter16_NEON; -#if !defined(WORK_AROUND_GCC) - VP8HFilter16i = HFilter16i_NEON; -#endif - VP8VFilter8 = VFilter8_NEON; - VP8VFilter8i = VFilter8i_NEON; -#if !defined(WORK_AROUND_GCC) - VP8HFilter8 = HFilter8_NEON; - VP8HFilter8i = HFilter8i_NEON; -#endif - VP8SimpleVFilter16 = SimpleVFilter16_NEON; - VP8SimpleHFilter16 = SimpleHFilter16_NEON; - VP8SimpleVFilter16i = SimpleVFilter16i_NEON; - VP8SimpleHFilter16i = SimpleHFilter16i_NEON; - - VP8PredLuma4[0] = DC4_NEON; - VP8PredLuma4[1] = TM4_NEON; - VP8PredLuma4[2] = VE4_NEON; - VP8PredLuma4[4] = RD4_NEON; - VP8PredLuma4[6] = LD4_NEON; - - VP8PredLuma16[0] = DC16TopLeft_NEON; - VP8PredLuma16[1] = TM16_NEON; - VP8PredLuma16[2] = VE16_NEON; - VP8PredLuma16[3] = HE16_NEON; - VP8PredLuma16[4] = DC16NoTop_NEON; - VP8PredLuma16[5] = DC16NoLeft_NEON; - VP8PredLuma16[6] = DC16NoTopLeft_NEON; - - VP8PredChroma8[0] = DC8uv_NEON; - VP8PredChroma8[1] = TM8uv_NEON; - VP8PredChroma8[2] = VE8uv_NEON; - VP8PredChroma8[3] = HE8uv_NEON; - VP8PredChroma8[4] = DC8uvNoTop_NEON; - VP8PredChroma8[5] = DC8uvNoLeft_NEON; - VP8PredChroma8[6] = DC8uvNoTopLeft_NEON; -} - -#else // !WEBP_USE_NEON - -WEBP_DSP_INIT_STUB(VP8DspInitNEON) - -#endif // WEBP_USE_NEON diff --git a/Extended/libwebp/src/dsp/dec_sse2.c b/Extended/libwebp/src/dsp/dec_sse2.c deleted file mode 100644 index 873aa59..0000000 --- a/Extended/libwebp/src/dsp/dec_sse2.c +++ /dev/null @@ -1,1227 +0,0 @@ -// Copyright 2011 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// SSE2 version of some decoding functions (idct, loop filtering). -// -// Author: somnath@google.com (Somnath Banerjee) -// cduvivier@google.com (Christian Duvivier) - -#include "src/dsp/dsp.h" - -#if defined(WEBP_USE_SSE2) - -// The 3-coeff sparse transform in SSE2 is not really faster than the plain-C -// one it seems => disable it by default. Uncomment the following to enable: -#if !defined(USE_TRANSFORM_AC3) -#define USE_TRANSFORM_AC3 0 // ALTERNATE_CODE -#endif - -#include -#include "src/dsp/common_sse2.h" -#include "src/dec/vp8i_dec.h" -#include "src/utils/utils.h" - -//------------------------------------------------------------------------------ -// Transforms (Paragraph 14.4) - -static void Transform_SSE2(const int16_t* in, uint8_t* dst, int do_two) { - // This implementation makes use of 16-bit fixed point versions of two - // multiply constants: - // K1 = sqrt(2) * cos (pi/8) ~= 85627 / 2^16 - // K2 = sqrt(2) * sin (pi/8) ~= 35468 / 2^16 - // - // To be able to use signed 16-bit integers, we use the following trick to - // have constants within range: - // - Associated constants are obtained by subtracting the 16-bit fixed point - // version of one: - // k = K - (1 << 16) => K = k + (1 << 16) - // K1 = 85267 => k1 = 20091 - // K2 = 35468 => k2 = -30068 - // - The multiplication of a variable by a constant become the sum of the - // variable and the multiplication of that variable by the associated - // constant: - // (x * K) >> 16 = (x * (k + (1 << 16))) >> 16 = ((x * k ) >> 16) + x - const __m128i k1 = _mm_set1_epi16(20091); - const __m128i k2 = _mm_set1_epi16(-30068); - __m128i T0, T1, T2, T3; - - // Load and concatenate the transform coefficients (we'll do two transforms - // in parallel). In the case of only one transform, the second half of the - // vectors will just contain random value we'll never use nor store. - __m128i in0, in1, in2, in3; - { - in0 = _mm_loadl_epi64((const __m128i*)&in[0]); - in1 = _mm_loadl_epi64((const __m128i*)&in[4]); - in2 = _mm_loadl_epi64((const __m128i*)&in[8]); - in3 = _mm_loadl_epi64((const __m128i*)&in[12]); - // a00 a10 a20 a30 x x x x - // a01 a11 a21 a31 x x x x - // a02 a12 a22 a32 x x x x - // a03 a13 a23 a33 x x x x - if (do_two) { - const __m128i inB0 = _mm_loadl_epi64((const __m128i*)&in[16]); - const __m128i inB1 = _mm_loadl_epi64((const __m128i*)&in[20]); - const __m128i inB2 = _mm_loadl_epi64((const __m128i*)&in[24]); - const __m128i inB3 = _mm_loadl_epi64((const __m128i*)&in[28]); - in0 = _mm_unpacklo_epi64(in0, inB0); - in1 = _mm_unpacklo_epi64(in1, inB1); - in2 = _mm_unpacklo_epi64(in2, inB2); - in3 = _mm_unpacklo_epi64(in3, inB3); - // a00 a10 a20 a30 b00 b10 b20 b30 - // a01 a11 a21 a31 b01 b11 b21 b31 - // a02 a12 a22 a32 b02 b12 b22 b32 - // a03 a13 a23 a33 b03 b13 b23 b33 - } - } - - // Vertical pass and subsequent transpose. - { - // First pass, c and d calculations are longer because of the "trick" - // multiplications. - const __m128i a = _mm_add_epi16(in0, in2); - const __m128i b = _mm_sub_epi16(in0, in2); - // c = MUL(in1, K2) - MUL(in3, K1) = MUL(in1, k2) - MUL(in3, k1) + in1 - in3 - const __m128i c1 = _mm_mulhi_epi16(in1, k2); - const __m128i c2 = _mm_mulhi_epi16(in3, k1); - const __m128i c3 = _mm_sub_epi16(in1, in3); - const __m128i c4 = _mm_sub_epi16(c1, c2); - const __m128i c = _mm_add_epi16(c3, c4); - // d = MUL(in1, K1) + MUL(in3, K2) = MUL(in1, k1) + MUL(in3, k2) + in1 + in3 - const __m128i d1 = _mm_mulhi_epi16(in1, k1); - const __m128i d2 = _mm_mulhi_epi16(in3, k2); - const __m128i d3 = _mm_add_epi16(in1, in3); - const __m128i d4 = _mm_add_epi16(d1, d2); - const __m128i d = _mm_add_epi16(d3, d4); - - // Second pass. - const __m128i tmp0 = _mm_add_epi16(a, d); - const __m128i tmp1 = _mm_add_epi16(b, c); - const __m128i tmp2 = _mm_sub_epi16(b, c); - const __m128i tmp3 = _mm_sub_epi16(a, d); - - // Transpose the two 4x4. - VP8Transpose_2_4x4_16b(&tmp0, &tmp1, &tmp2, &tmp3, &T0, &T1, &T2, &T3); - } - - // Horizontal pass and subsequent transpose. - { - // First pass, c and d calculations are longer because of the "trick" - // multiplications. - const __m128i four = _mm_set1_epi16(4); - const __m128i dc = _mm_add_epi16(T0, four); - const __m128i a = _mm_add_epi16(dc, T2); - const __m128i b = _mm_sub_epi16(dc, T2); - // c = MUL(T1, K2) - MUL(T3, K1) = MUL(T1, k2) - MUL(T3, k1) + T1 - T3 - const __m128i c1 = _mm_mulhi_epi16(T1, k2); - const __m128i c2 = _mm_mulhi_epi16(T3, k1); - const __m128i c3 = _mm_sub_epi16(T1, T3); - const __m128i c4 = _mm_sub_epi16(c1, c2); - const __m128i c = _mm_add_epi16(c3, c4); - // d = MUL(T1, K1) + MUL(T3, K2) = MUL(T1, k1) + MUL(T3, k2) + T1 + T3 - const __m128i d1 = _mm_mulhi_epi16(T1, k1); - const __m128i d2 = _mm_mulhi_epi16(T3, k2); - const __m128i d3 = _mm_add_epi16(T1, T3); - const __m128i d4 = _mm_add_epi16(d1, d2); - const __m128i d = _mm_add_epi16(d3, d4); - - // Second pass. - const __m128i tmp0 = _mm_add_epi16(a, d); - const __m128i tmp1 = _mm_add_epi16(b, c); - const __m128i tmp2 = _mm_sub_epi16(b, c); - const __m128i tmp3 = _mm_sub_epi16(a, d); - const __m128i shifted0 = _mm_srai_epi16(tmp0, 3); - const __m128i shifted1 = _mm_srai_epi16(tmp1, 3); - const __m128i shifted2 = _mm_srai_epi16(tmp2, 3); - const __m128i shifted3 = _mm_srai_epi16(tmp3, 3); - - // Transpose the two 4x4. - VP8Transpose_2_4x4_16b(&shifted0, &shifted1, &shifted2, &shifted3, &T0, &T1, - &T2, &T3); - } - - // Add inverse transform to 'dst' and store. - { - const __m128i zero = _mm_setzero_si128(); - // Load the reference(s). - __m128i dst0, dst1, dst2, dst3; - if (do_two) { - // Load eight bytes/pixels per line. - dst0 = _mm_loadl_epi64((__m128i*)(dst + 0 * BPS)); - dst1 = _mm_loadl_epi64((__m128i*)(dst + 1 * BPS)); - dst2 = _mm_loadl_epi64((__m128i*)(dst + 2 * BPS)); - dst3 = _mm_loadl_epi64((__m128i*)(dst + 3 * BPS)); - } else { - // Load four bytes/pixels per line. - dst0 = _mm_cvtsi32_si128(WebPMemToUint32(dst + 0 * BPS)); - dst1 = _mm_cvtsi32_si128(WebPMemToUint32(dst + 1 * BPS)); - dst2 = _mm_cvtsi32_si128(WebPMemToUint32(dst + 2 * BPS)); - dst3 = _mm_cvtsi32_si128(WebPMemToUint32(dst + 3 * BPS)); - } - // Convert to 16b. - dst0 = _mm_unpacklo_epi8(dst0, zero); - dst1 = _mm_unpacklo_epi8(dst1, zero); - dst2 = _mm_unpacklo_epi8(dst2, zero); - dst3 = _mm_unpacklo_epi8(dst3, zero); - // Add the inverse transform(s). - dst0 = _mm_add_epi16(dst0, T0); - dst1 = _mm_add_epi16(dst1, T1); - dst2 = _mm_add_epi16(dst2, T2); - dst3 = _mm_add_epi16(dst3, T3); - // Unsigned saturate to 8b. - dst0 = _mm_packus_epi16(dst0, dst0); - dst1 = _mm_packus_epi16(dst1, dst1); - dst2 = _mm_packus_epi16(dst2, dst2); - dst3 = _mm_packus_epi16(dst3, dst3); - // Store the results. - if (do_two) { - // Store eight bytes/pixels per line. - _mm_storel_epi64((__m128i*)(dst + 0 * BPS), dst0); - _mm_storel_epi64((__m128i*)(dst + 1 * BPS), dst1); - _mm_storel_epi64((__m128i*)(dst + 2 * BPS), dst2); - _mm_storel_epi64((__m128i*)(dst + 3 * BPS), dst3); - } else { - // Store four bytes/pixels per line. - WebPUint32ToMem(dst + 0 * BPS, _mm_cvtsi128_si32(dst0)); - WebPUint32ToMem(dst + 1 * BPS, _mm_cvtsi128_si32(dst1)); - WebPUint32ToMem(dst + 2 * BPS, _mm_cvtsi128_si32(dst2)); - WebPUint32ToMem(dst + 3 * BPS, _mm_cvtsi128_si32(dst3)); - } - } -} - -#if (USE_TRANSFORM_AC3 == 1) -#define MUL(a, b) (((a) * (b)) >> 16) -static void TransformAC3(const int16_t* in, uint8_t* dst) { - static const int kC1 = 20091 + (1 << 16); - static const int kC2 = 35468; - const __m128i A = _mm_set1_epi16(in[0] + 4); - const __m128i c4 = _mm_set1_epi16(MUL(in[4], kC2)); - const __m128i d4 = _mm_set1_epi16(MUL(in[4], kC1)); - const int c1 = MUL(in[1], kC2); - const int d1 = MUL(in[1], kC1); - const __m128i CD = _mm_set_epi16(0, 0, 0, 0, -d1, -c1, c1, d1); - const __m128i B = _mm_adds_epi16(A, CD); - const __m128i m0 = _mm_adds_epi16(B, d4); - const __m128i m1 = _mm_adds_epi16(B, c4); - const __m128i m2 = _mm_subs_epi16(B, c4); - const __m128i m3 = _mm_subs_epi16(B, d4); - const __m128i zero = _mm_setzero_si128(); - // Load the source pixels. - __m128i dst0 = _mm_cvtsi32_si128(WebPMemToUint32(dst + 0 * BPS)); - __m128i dst1 = _mm_cvtsi32_si128(WebPMemToUint32(dst + 1 * BPS)); - __m128i dst2 = _mm_cvtsi32_si128(WebPMemToUint32(dst + 2 * BPS)); - __m128i dst3 = _mm_cvtsi32_si128(WebPMemToUint32(dst + 3 * BPS)); - // Convert to 16b. - dst0 = _mm_unpacklo_epi8(dst0, zero); - dst1 = _mm_unpacklo_epi8(dst1, zero); - dst2 = _mm_unpacklo_epi8(dst2, zero); - dst3 = _mm_unpacklo_epi8(dst3, zero); - // Add the inverse transform. - dst0 = _mm_adds_epi16(dst0, _mm_srai_epi16(m0, 3)); - dst1 = _mm_adds_epi16(dst1, _mm_srai_epi16(m1, 3)); - dst2 = _mm_adds_epi16(dst2, _mm_srai_epi16(m2, 3)); - dst3 = _mm_adds_epi16(dst3, _mm_srai_epi16(m3, 3)); - // Unsigned saturate to 8b. - dst0 = _mm_packus_epi16(dst0, dst0); - dst1 = _mm_packus_epi16(dst1, dst1); - dst2 = _mm_packus_epi16(dst2, dst2); - dst3 = _mm_packus_epi16(dst3, dst3); - // Store the results. - WebPUint32ToMem(dst + 0 * BPS, _mm_cvtsi128_si32(dst0)); - WebPUint32ToMem(dst + 1 * BPS, _mm_cvtsi128_si32(dst1)); - WebPUint32ToMem(dst + 2 * BPS, _mm_cvtsi128_si32(dst2)); - WebPUint32ToMem(dst + 3 * BPS, _mm_cvtsi128_si32(dst3)); -} -#undef MUL -#endif // USE_TRANSFORM_AC3 - -//------------------------------------------------------------------------------ -// Loop Filter (Paragraph 15) - -// Compute abs(p - q) = subs(p - q) OR subs(q - p) -#define MM_ABS(p, q) _mm_or_si128( \ - _mm_subs_epu8((q), (p)), \ - _mm_subs_epu8((p), (q))) - -// Shift each byte of "x" by 3 bits while preserving by the sign bit. -static WEBP_INLINE void SignedShift8b_SSE2(__m128i* const x) { - const __m128i zero = _mm_setzero_si128(); - const __m128i lo_0 = _mm_unpacklo_epi8(zero, *x); - const __m128i hi_0 = _mm_unpackhi_epi8(zero, *x); - const __m128i lo_1 = _mm_srai_epi16(lo_0, 3 + 8); - const __m128i hi_1 = _mm_srai_epi16(hi_0, 3 + 8); - *x = _mm_packs_epi16(lo_1, hi_1); -} - -#define FLIP_SIGN_BIT2(a, b) { \ - (a) = _mm_xor_si128(a, sign_bit); \ - (b) = _mm_xor_si128(b, sign_bit); \ -} - -#define FLIP_SIGN_BIT4(a, b, c, d) { \ - FLIP_SIGN_BIT2(a, b); \ - FLIP_SIGN_BIT2(c, d); \ -} - -// input/output is uint8_t -static WEBP_INLINE void GetNotHEV_SSE2(const __m128i* const p1, - const __m128i* const p0, - const __m128i* const q0, - const __m128i* const q1, - int hev_thresh, __m128i* const not_hev) { - const __m128i zero = _mm_setzero_si128(); - const __m128i t_1 = MM_ABS(*p1, *p0); - const __m128i t_2 = MM_ABS(*q1, *q0); - - const __m128i h = _mm_set1_epi8(hev_thresh); - const __m128i t_max = _mm_max_epu8(t_1, t_2); - - const __m128i t_max_h = _mm_subs_epu8(t_max, h); - *not_hev = _mm_cmpeq_epi8(t_max_h, zero); // not_hev <= t1 && not_hev <= t2 -} - -// input pixels are int8_t -static WEBP_INLINE void GetBaseDelta_SSE2(const __m128i* const p1, - const __m128i* const p0, - const __m128i* const q0, - const __m128i* const q1, - __m128i* const delta) { - // beware of addition order, for saturation! - const __m128i p1_q1 = _mm_subs_epi8(*p1, *q1); // p1 - q1 - const __m128i q0_p0 = _mm_subs_epi8(*q0, *p0); // q0 - p0 - const __m128i s1 = _mm_adds_epi8(p1_q1, q0_p0); // p1 - q1 + 1 * (q0 - p0) - const __m128i s2 = _mm_adds_epi8(q0_p0, s1); // p1 - q1 + 2 * (q0 - p0) - const __m128i s3 = _mm_adds_epi8(q0_p0, s2); // p1 - q1 + 3 * (q0 - p0) - *delta = s3; -} - -// input and output are int8_t -static WEBP_INLINE void DoSimpleFilter_SSE2(__m128i* const p0, - __m128i* const q0, - const __m128i* const fl) { - const __m128i k3 = _mm_set1_epi8(3); - const __m128i k4 = _mm_set1_epi8(4); - __m128i v3 = _mm_adds_epi8(*fl, k3); - __m128i v4 = _mm_adds_epi8(*fl, k4); - - SignedShift8b_SSE2(&v4); // v4 >> 3 - SignedShift8b_SSE2(&v3); // v3 >> 3 - *q0 = _mm_subs_epi8(*q0, v4); // q0 -= v4 - *p0 = _mm_adds_epi8(*p0, v3); // p0 += v3 -} - -// Updates values of 2 pixels at MB edge during complex filtering. -// Update operations: -// q = q - delta and p = p + delta; where delta = [(a_hi >> 7), (a_lo >> 7)] -// Pixels 'pi' and 'qi' are int8_t on input, uint8_t on output (sign flip). -static WEBP_INLINE void Update2Pixels_SSE2(__m128i* const pi, __m128i* const qi, - const __m128i* const a0_lo, - const __m128i* const a0_hi) { - const __m128i a1_lo = _mm_srai_epi16(*a0_lo, 7); - const __m128i a1_hi = _mm_srai_epi16(*a0_hi, 7); - const __m128i delta = _mm_packs_epi16(a1_lo, a1_hi); - const __m128i sign_bit = _mm_set1_epi8((char)0x80); - *pi = _mm_adds_epi8(*pi, delta); - *qi = _mm_subs_epi8(*qi, delta); - FLIP_SIGN_BIT2(*pi, *qi); -} - -// input pixels are uint8_t -static WEBP_INLINE void NeedsFilter_SSE2(const __m128i* const p1, - const __m128i* const p0, - const __m128i* const q0, - const __m128i* const q1, - int thresh, __m128i* const mask) { - const __m128i m_thresh = _mm_set1_epi8((char)thresh); - const __m128i t1 = MM_ABS(*p1, *q1); // abs(p1 - q1) - const __m128i kFE = _mm_set1_epi8((char)0xFE); - const __m128i t2 = _mm_and_si128(t1, kFE); // set lsb of each byte to zero - const __m128i t3 = _mm_srli_epi16(t2, 1); // abs(p1 - q1) / 2 - - const __m128i t4 = MM_ABS(*p0, *q0); // abs(p0 - q0) - const __m128i t5 = _mm_adds_epu8(t4, t4); // abs(p0 - q0) * 2 - const __m128i t6 = _mm_adds_epu8(t5, t3); // abs(p0-q0)*2 + abs(p1-q1)/2 - - const __m128i t7 = _mm_subs_epu8(t6, m_thresh); // mask <= m_thresh - *mask = _mm_cmpeq_epi8(t7, _mm_setzero_si128()); -} - -//------------------------------------------------------------------------------ -// Edge filtering functions - -// Applies filter on 2 pixels (p0 and q0) -static WEBP_INLINE void DoFilter2_SSE2(__m128i* const p1, __m128i* const p0, - __m128i* const q0, __m128i* const q1, - int thresh) { - __m128i a, mask; - const __m128i sign_bit = _mm_set1_epi8((char)0x80); - // convert p1/q1 to int8_t (for GetBaseDelta_SSE2) - const __m128i p1s = _mm_xor_si128(*p1, sign_bit); - const __m128i q1s = _mm_xor_si128(*q1, sign_bit); - - NeedsFilter_SSE2(p1, p0, q0, q1, thresh, &mask); - - FLIP_SIGN_BIT2(*p0, *q0); - GetBaseDelta_SSE2(&p1s, p0, q0, &q1s, &a); - a = _mm_and_si128(a, mask); // mask filter values we don't care about - DoSimpleFilter_SSE2(p0, q0, &a); - FLIP_SIGN_BIT2(*p0, *q0); -} - -// Applies filter on 4 pixels (p1, p0, q0 and q1) -static WEBP_INLINE void DoFilter4_SSE2(__m128i* const p1, __m128i* const p0, - __m128i* const q0, __m128i* const q1, - const __m128i* const mask, - int hev_thresh) { - const __m128i zero = _mm_setzero_si128(); - const __m128i sign_bit = _mm_set1_epi8((char)0x80); - const __m128i k64 = _mm_set1_epi8(64); - const __m128i k3 = _mm_set1_epi8(3); - const __m128i k4 = _mm_set1_epi8(4); - __m128i not_hev; - __m128i t1, t2, t3; - - // compute hev mask - GetNotHEV_SSE2(p1, p0, q0, q1, hev_thresh, ¬_hev); - - // convert to signed values - FLIP_SIGN_BIT4(*p1, *p0, *q0, *q1); - - t1 = _mm_subs_epi8(*p1, *q1); // p1 - q1 - t1 = _mm_andnot_si128(not_hev, t1); // hev(p1 - q1) - t2 = _mm_subs_epi8(*q0, *p0); // q0 - p0 - t1 = _mm_adds_epi8(t1, t2); // hev(p1 - q1) + 1 * (q0 - p0) - t1 = _mm_adds_epi8(t1, t2); // hev(p1 - q1) + 2 * (q0 - p0) - t1 = _mm_adds_epi8(t1, t2); // hev(p1 - q1) + 3 * (q0 - p0) - t1 = _mm_and_si128(t1, *mask); // mask filter values we don't care about - - t2 = _mm_adds_epi8(t1, k3); // 3 * (q0 - p0) + hev(p1 - q1) + 3 - t3 = _mm_adds_epi8(t1, k4); // 3 * (q0 - p0) + hev(p1 - q1) + 4 - SignedShift8b_SSE2(&t2); // (3 * (q0 - p0) + hev(p1 - q1) + 3) >> 3 - SignedShift8b_SSE2(&t3); // (3 * (q0 - p0) + hev(p1 - q1) + 4) >> 3 - *p0 = _mm_adds_epi8(*p0, t2); // p0 += t2 - *q0 = _mm_subs_epi8(*q0, t3); // q0 -= t3 - FLIP_SIGN_BIT2(*p0, *q0); - - // this is equivalent to signed (a + 1) >> 1 calculation - t2 = _mm_add_epi8(t3, sign_bit); - t3 = _mm_avg_epu8(t2, zero); - t3 = _mm_sub_epi8(t3, k64); - - t3 = _mm_and_si128(not_hev, t3); // if !hev - *q1 = _mm_subs_epi8(*q1, t3); // q1 -= t3 - *p1 = _mm_adds_epi8(*p1, t3); // p1 += t3 - FLIP_SIGN_BIT2(*p1, *q1); -} - -// Applies filter on 6 pixels (p2, p1, p0, q0, q1 and q2) -static WEBP_INLINE void DoFilter6_SSE2(__m128i* const p2, __m128i* const p1, - __m128i* const p0, __m128i* const q0, - __m128i* const q1, __m128i* const q2, - const __m128i* const mask, - int hev_thresh) { - const __m128i zero = _mm_setzero_si128(); - const __m128i sign_bit = _mm_set1_epi8((char)0x80); - __m128i a, not_hev; - - // compute hev mask - GetNotHEV_SSE2(p1, p0, q0, q1, hev_thresh, ¬_hev); - - FLIP_SIGN_BIT4(*p1, *p0, *q0, *q1); - FLIP_SIGN_BIT2(*p2, *q2); - GetBaseDelta_SSE2(p1, p0, q0, q1, &a); - - { // do simple filter on pixels with hev - const __m128i m = _mm_andnot_si128(not_hev, *mask); - const __m128i f = _mm_and_si128(a, m); - DoSimpleFilter_SSE2(p0, q0, &f); - } - - { // do strong filter on pixels with not hev - const __m128i k9 = _mm_set1_epi16(0x0900); - const __m128i k63 = _mm_set1_epi16(63); - - const __m128i m = _mm_and_si128(not_hev, *mask); - const __m128i f = _mm_and_si128(a, m); - - const __m128i f_lo = _mm_unpacklo_epi8(zero, f); - const __m128i f_hi = _mm_unpackhi_epi8(zero, f); - - const __m128i f9_lo = _mm_mulhi_epi16(f_lo, k9); // Filter (lo) * 9 - const __m128i f9_hi = _mm_mulhi_epi16(f_hi, k9); // Filter (hi) * 9 - - const __m128i a2_lo = _mm_add_epi16(f9_lo, k63); // Filter * 9 + 63 - const __m128i a2_hi = _mm_add_epi16(f9_hi, k63); // Filter * 9 + 63 - - const __m128i a1_lo = _mm_add_epi16(a2_lo, f9_lo); // Filter * 18 + 63 - const __m128i a1_hi = _mm_add_epi16(a2_hi, f9_hi); // Filter * 18 + 63 - - const __m128i a0_lo = _mm_add_epi16(a1_lo, f9_lo); // Filter * 27 + 63 - const __m128i a0_hi = _mm_add_epi16(a1_hi, f9_hi); // Filter * 27 + 63 - - Update2Pixels_SSE2(p2, q2, &a2_lo, &a2_hi); - Update2Pixels_SSE2(p1, q1, &a1_lo, &a1_hi); - Update2Pixels_SSE2(p0, q0, &a0_lo, &a0_hi); - } -} - -// reads 8 rows across a vertical edge. -static WEBP_INLINE void Load8x4_SSE2(const uint8_t* const b, int stride, - __m128i* const p, __m128i* const q) { - // A0 = 63 62 61 60 23 22 21 20 43 42 41 40 03 02 01 00 - // A1 = 73 72 71 70 33 32 31 30 53 52 51 50 13 12 11 10 - const __m128i A0 = _mm_set_epi32( - WebPMemToUint32(&b[6 * stride]), WebPMemToUint32(&b[2 * stride]), - WebPMemToUint32(&b[4 * stride]), WebPMemToUint32(&b[0 * stride])); - const __m128i A1 = _mm_set_epi32( - WebPMemToUint32(&b[7 * stride]), WebPMemToUint32(&b[3 * stride]), - WebPMemToUint32(&b[5 * stride]), WebPMemToUint32(&b[1 * stride])); - - // B0 = 53 43 52 42 51 41 50 40 13 03 12 02 11 01 10 00 - // B1 = 73 63 72 62 71 61 70 60 33 23 32 22 31 21 30 20 - const __m128i B0 = _mm_unpacklo_epi8(A0, A1); - const __m128i B1 = _mm_unpackhi_epi8(A0, A1); - - // C0 = 33 23 13 03 32 22 12 02 31 21 11 01 30 20 10 00 - // C1 = 73 63 53 43 72 62 52 42 71 61 51 41 70 60 50 40 - const __m128i C0 = _mm_unpacklo_epi16(B0, B1); - const __m128i C1 = _mm_unpackhi_epi16(B0, B1); - - // *p = 71 61 51 41 31 21 11 01 70 60 50 40 30 20 10 00 - // *q = 73 63 53 43 33 23 13 03 72 62 52 42 32 22 12 02 - *p = _mm_unpacklo_epi32(C0, C1); - *q = _mm_unpackhi_epi32(C0, C1); -} - -static WEBP_INLINE void Load16x4_SSE2(const uint8_t* const r0, - const uint8_t* const r8, - int stride, - __m128i* const p1, __m128i* const p0, - __m128i* const q0, __m128i* const q1) { - // Assume the pixels around the edge (|) are numbered as follows - // 00 01 | 02 03 - // 10 11 | 12 13 - // ... | ... - // e0 e1 | e2 e3 - // f0 f1 | f2 f3 - // - // r0 is pointing to the 0th row (00) - // r8 is pointing to the 8th row (80) - - // Load - // p1 = 71 61 51 41 31 21 11 01 70 60 50 40 30 20 10 00 - // q0 = 73 63 53 43 33 23 13 03 72 62 52 42 32 22 12 02 - // p0 = f1 e1 d1 c1 b1 a1 91 81 f0 e0 d0 c0 b0 a0 90 80 - // q1 = f3 e3 d3 c3 b3 a3 93 83 f2 e2 d2 c2 b2 a2 92 82 - Load8x4_SSE2(r0, stride, p1, q0); - Load8x4_SSE2(r8, stride, p0, q1); - - { - // p1 = f0 e0 d0 c0 b0 a0 90 80 70 60 50 40 30 20 10 00 - // p0 = f1 e1 d1 c1 b1 a1 91 81 71 61 51 41 31 21 11 01 - // q0 = f2 e2 d2 c2 b2 a2 92 82 72 62 52 42 32 22 12 02 - // q1 = f3 e3 d3 c3 b3 a3 93 83 73 63 53 43 33 23 13 03 - const __m128i t1 = *p1; - const __m128i t2 = *q0; - *p1 = _mm_unpacklo_epi64(t1, *p0); - *p0 = _mm_unpackhi_epi64(t1, *p0); - *q0 = _mm_unpacklo_epi64(t2, *q1); - *q1 = _mm_unpackhi_epi64(t2, *q1); - } -} - -static WEBP_INLINE void Store4x4_SSE2(__m128i* const x, - uint8_t* dst, int stride) { - int i; - for (i = 0; i < 4; ++i, dst += stride) { - WebPUint32ToMem(dst, _mm_cvtsi128_si32(*x)); - *x = _mm_srli_si128(*x, 4); - } -} - -// Transpose back and store -static WEBP_INLINE void Store16x4_SSE2(const __m128i* const p1, - const __m128i* const p0, - const __m128i* const q0, - const __m128i* const q1, - uint8_t* r0, uint8_t* r8, - int stride) { - __m128i t1, p1_s, p0_s, q0_s, q1_s; - - // p0 = 71 70 61 60 51 50 41 40 31 30 21 20 11 10 01 00 - // p1 = f1 f0 e1 e0 d1 d0 c1 c0 b1 b0 a1 a0 91 90 81 80 - t1 = *p0; - p0_s = _mm_unpacklo_epi8(*p1, t1); - p1_s = _mm_unpackhi_epi8(*p1, t1); - - // q0 = 73 72 63 62 53 52 43 42 33 32 23 22 13 12 03 02 - // q1 = f3 f2 e3 e2 d3 d2 c3 c2 b3 b2 a3 a2 93 92 83 82 - t1 = *q0; - q0_s = _mm_unpacklo_epi8(t1, *q1); - q1_s = _mm_unpackhi_epi8(t1, *q1); - - // p0 = 33 32 31 30 23 22 21 20 13 12 11 10 03 02 01 00 - // q0 = 73 72 71 70 63 62 61 60 53 52 51 50 43 42 41 40 - t1 = p0_s; - p0_s = _mm_unpacklo_epi16(t1, q0_s); - q0_s = _mm_unpackhi_epi16(t1, q0_s); - - // p1 = b3 b2 b1 b0 a3 a2 a1 a0 93 92 91 90 83 82 81 80 - // q1 = f3 f2 f1 f0 e3 e2 e1 e0 d3 d2 d1 d0 c3 c2 c1 c0 - t1 = p1_s; - p1_s = _mm_unpacklo_epi16(t1, q1_s); - q1_s = _mm_unpackhi_epi16(t1, q1_s); - - Store4x4_SSE2(&p0_s, r0, stride); - r0 += 4 * stride; - Store4x4_SSE2(&q0_s, r0, stride); - - Store4x4_SSE2(&p1_s, r8, stride); - r8 += 4 * stride; - Store4x4_SSE2(&q1_s, r8, stride); -} - -//------------------------------------------------------------------------------ -// Simple In-loop filtering (Paragraph 15.2) - -static void SimpleVFilter16_SSE2(uint8_t* p, int stride, int thresh) { - // Load - __m128i p1 = _mm_loadu_si128((__m128i*)&p[-2 * stride]); - __m128i p0 = _mm_loadu_si128((__m128i*)&p[-stride]); - __m128i q0 = _mm_loadu_si128((__m128i*)&p[0]); - __m128i q1 = _mm_loadu_si128((__m128i*)&p[stride]); - - DoFilter2_SSE2(&p1, &p0, &q0, &q1, thresh); - - // Store - _mm_storeu_si128((__m128i*)&p[-stride], p0); - _mm_storeu_si128((__m128i*)&p[0], q0); -} - -static void SimpleHFilter16_SSE2(uint8_t* p, int stride, int thresh) { - __m128i p1, p0, q0, q1; - - p -= 2; // beginning of p1 - - Load16x4_SSE2(p, p + 8 * stride, stride, &p1, &p0, &q0, &q1); - DoFilter2_SSE2(&p1, &p0, &q0, &q1, thresh); - Store16x4_SSE2(&p1, &p0, &q0, &q1, p, p + 8 * stride, stride); -} - -static void SimpleVFilter16i_SSE2(uint8_t* p, int stride, int thresh) { - int k; - for (k = 3; k > 0; --k) { - p += 4 * stride; - SimpleVFilter16_SSE2(p, stride, thresh); - } -} - -static void SimpleHFilter16i_SSE2(uint8_t* p, int stride, int thresh) { - int k; - for (k = 3; k > 0; --k) { - p += 4; - SimpleHFilter16_SSE2(p, stride, thresh); - } -} - -//------------------------------------------------------------------------------ -// Complex In-loop filtering (Paragraph 15.3) - -#define MAX_DIFF1(p3, p2, p1, p0, m) do { \ - (m) = MM_ABS(p1, p0); \ - (m) = _mm_max_epu8(m, MM_ABS(p3, p2)); \ - (m) = _mm_max_epu8(m, MM_ABS(p2, p1)); \ -} while (0) - -#define MAX_DIFF2(p3, p2, p1, p0, m) do { \ - (m) = _mm_max_epu8(m, MM_ABS(p1, p0)); \ - (m) = _mm_max_epu8(m, MM_ABS(p3, p2)); \ - (m) = _mm_max_epu8(m, MM_ABS(p2, p1)); \ -} while (0) - -#define LOAD_H_EDGES4(p, stride, e1, e2, e3, e4) { \ - (e1) = _mm_loadu_si128((__m128i*)&(p)[0 * (stride)]); \ - (e2) = _mm_loadu_si128((__m128i*)&(p)[1 * (stride)]); \ - (e3) = _mm_loadu_si128((__m128i*)&(p)[2 * (stride)]); \ - (e4) = _mm_loadu_si128((__m128i*)&(p)[3 * (stride)]); \ -} - -#define LOADUV_H_EDGE(p, u, v, stride) do { \ - const __m128i U = _mm_loadl_epi64((__m128i*)&(u)[(stride)]); \ - const __m128i V = _mm_loadl_epi64((__m128i*)&(v)[(stride)]); \ - (p) = _mm_unpacklo_epi64(U, V); \ -} while (0) - -#define LOADUV_H_EDGES4(u, v, stride, e1, e2, e3, e4) { \ - LOADUV_H_EDGE(e1, u, v, 0 * (stride)); \ - LOADUV_H_EDGE(e2, u, v, 1 * (stride)); \ - LOADUV_H_EDGE(e3, u, v, 2 * (stride)); \ - LOADUV_H_EDGE(e4, u, v, 3 * (stride)); \ -} - -#define STOREUV(p, u, v, stride) { \ - _mm_storel_epi64((__m128i*)&(u)[(stride)], p); \ - (p) = _mm_srli_si128(p, 8); \ - _mm_storel_epi64((__m128i*)&(v)[(stride)], p); \ -} - -static WEBP_INLINE void ComplexMask_SSE2(const __m128i* const p1, - const __m128i* const p0, - const __m128i* const q0, - const __m128i* const q1, - int thresh, int ithresh, - __m128i* const mask) { - const __m128i it = _mm_set1_epi8(ithresh); - const __m128i diff = _mm_subs_epu8(*mask, it); - const __m128i thresh_mask = _mm_cmpeq_epi8(diff, _mm_setzero_si128()); - __m128i filter_mask; - NeedsFilter_SSE2(p1, p0, q0, q1, thresh, &filter_mask); - *mask = _mm_and_si128(thresh_mask, filter_mask); -} - -// on macroblock edges -static void VFilter16_SSE2(uint8_t* p, int stride, - int thresh, int ithresh, int hev_thresh) { - __m128i t1; - __m128i mask; - __m128i p2, p1, p0, q0, q1, q2; - - // Load p3, p2, p1, p0 - LOAD_H_EDGES4(p - 4 * stride, stride, t1, p2, p1, p0); - MAX_DIFF1(t1, p2, p1, p0, mask); - - // Load q0, q1, q2, q3 - LOAD_H_EDGES4(p, stride, q0, q1, q2, t1); - MAX_DIFF2(t1, q2, q1, q0, mask); - - ComplexMask_SSE2(&p1, &p0, &q0, &q1, thresh, ithresh, &mask); - DoFilter6_SSE2(&p2, &p1, &p0, &q0, &q1, &q2, &mask, hev_thresh); - - // Store - _mm_storeu_si128((__m128i*)&p[-3 * stride], p2); - _mm_storeu_si128((__m128i*)&p[-2 * stride], p1); - _mm_storeu_si128((__m128i*)&p[-1 * stride], p0); - _mm_storeu_si128((__m128i*)&p[+0 * stride], q0); - _mm_storeu_si128((__m128i*)&p[+1 * stride], q1); - _mm_storeu_si128((__m128i*)&p[+2 * stride], q2); -} - -static void HFilter16_SSE2(uint8_t* p, int stride, - int thresh, int ithresh, int hev_thresh) { - __m128i mask; - __m128i p3, p2, p1, p0, q0, q1, q2, q3; - - uint8_t* const b = p - 4; - Load16x4_SSE2(b, b + 8 * stride, stride, &p3, &p2, &p1, &p0); - MAX_DIFF1(p3, p2, p1, p0, mask); - - Load16x4_SSE2(p, p + 8 * stride, stride, &q0, &q1, &q2, &q3); - MAX_DIFF2(q3, q2, q1, q0, mask); - - ComplexMask_SSE2(&p1, &p0, &q0, &q1, thresh, ithresh, &mask); - DoFilter6_SSE2(&p2, &p1, &p0, &q0, &q1, &q2, &mask, hev_thresh); - - Store16x4_SSE2(&p3, &p2, &p1, &p0, b, b + 8 * stride, stride); - Store16x4_SSE2(&q0, &q1, &q2, &q3, p, p + 8 * stride, stride); -} - -// on three inner edges -static void VFilter16i_SSE2(uint8_t* p, int stride, - int thresh, int ithresh, int hev_thresh) { - int k; - __m128i p3, p2, p1, p0; // loop invariants - - LOAD_H_EDGES4(p, stride, p3, p2, p1, p0); // prologue - - for (k = 3; k > 0; --k) { - __m128i mask, tmp1, tmp2; - uint8_t* const b = p + 2 * stride; // beginning of p1 - p += 4 * stride; - - MAX_DIFF1(p3, p2, p1, p0, mask); // compute partial mask - LOAD_H_EDGES4(p, stride, p3, p2, tmp1, tmp2); - MAX_DIFF2(p3, p2, tmp1, tmp2, mask); - - // p3 and p2 are not just temporary variables here: they will be - // re-used for next span. And q2/q3 will become p1/p0 accordingly. - ComplexMask_SSE2(&p1, &p0, &p3, &p2, thresh, ithresh, &mask); - DoFilter4_SSE2(&p1, &p0, &p3, &p2, &mask, hev_thresh); - - // Store - _mm_storeu_si128((__m128i*)&b[0 * stride], p1); - _mm_storeu_si128((__m128i*)&b[1 * stride], p0); - _mm_storeu_si128((__m128i*)&b[2 * stride], p3); - _mm_storeu_si128((__m128i*)&b[3 * stride], p2); - - // rotate samples - p1 = tmp1; - p0 = tmp2; - } -} - -static void HFilter16i_SSE2(uint8_t* p, int stride, - int thresh, int ithresh, int hev_thresh) { - int k; - __m128i p3, p2, p1, p0; // loop invariants - - Load16x4_SSE2(p, p + 8 * stride, stride, &p3, &p2, &p1, &p0); // prologue - - for (k = 3; k > 0; --k) { - __m128i mask, tmp1, tmp2; - uint8_t* const b = p + 2; // beginning of p1 - - p += 4; // beginning of q0 (and next span) - - MAX_DIFF1(p3, p2, p1, p0, mask); // compute partial mask - Load16x4_SSE2(p, p + 8 * stride, stride, &p3, &p2, &tmp1, &tmp2); - MAX_DIFF2(p3, p2, tmp1, tmp2, mask); - - ComplexMask_SSE2(&p1, &p0, &p3, &p2, thresh, ithresh, &mask); - DoFilter4_SSE2(&p1, &p0, &p3, &p2, &mask, hev_thresh); - - Store16x4_SSE2(&p1, &p0, &p3, &p2, b, b + 8 * stride, stride); - - // rotate samples - p1 = tmp1; - p0 = tmp2; - } -} - -// 8-pixels wide variant, for chroma filtering -static void VFilter8_SSE2(uint8_t* u, uint8_t* v, int stride, - int thresh, int ithresh, int hev_thresh) { - __m128i mask; - __m128i t1, p2, p1, p0, q0, q1, q2; - - // Load p3, p2, p1, p0 - LOADUV_H_EDGES4(u - 4 * stride, v - 4 * stride, stride, t1, p2, p1, p0); - MAX_DIFF1(t1, p2, p1, p0, mask); - - // Load q0, q1, q2, q3 - LOADUV_H_EDGES4(u, v, stride, q0, q1, q2, t1); - MAX_DIFF2(t1, q2, q1, q0, mask); - - ComplexMask_SSE2(&p1, &p0, &q0, &q1, thresh, ithresh, &mask); - DoFilter6_SSE2(&p2, &p1, &p0, &q0, &q1, &q2, &mask, hev_thresh); - - // Store - STOREUV(p2, u, v, -3 * stride); - STOREUV(p1, u, v, -2 * stride); - STOREUV(p0, u, v, -1 * stride); - STOREUV(q0, u, v, 0 * stride); - STOREUV(q1, u, v, 1 * stride); - STOREUV(q2, u, v, 2 * stride); -} - -static void HFilter8_SSE2(uint8_t* u, uint8_t* v, int stride, - int thresh, int ithresh, int hev_thresh) { - __m128i mask; - __m128i p3, p2, p1, p0, q0, q1, q2, q3; - - uint8_t* const tu = u - 4; - uint8_t* const tv = v - 4; - Load16x4_SSE2(tu, tv, stride, &p3, &p2, &p1, &p0); - MAX_DIFF1(p3, p2, p1, p0, mask); - - Load16x4_SSE2(u, v, stride, &q0, &q1, &q2, &q3); - MAX_DIFF2(q3, q2, q1, q0, mask); - - ComplexMask_SSE2(&p1, &p0, &q0, &q1, thresh, ithresh, &mask); - DoFilter6_SSE2(&p2, &p1, &p0, &q0, &q1, &q2, &mask, hev_thresh); - - Store16x4_SSE2(&p3, &p2, &p1, &p0, tu, tv, stride); - Store16x4_SSE2(&q0, &q1, &q2, &q3, u, v, stride); -} - -static void VFilter8i_SSE2(uint8_t* u, uint8_t* v, int stride, - int thresh, int ithresh, int hev_thresh) { - __m128i mask; - __m128i t1, t2, p1, p0, q0, q1; - - // Load p3, p2, p1, p0 - LOADUV_H_EDGES4(u, v, stride, t2, t1, p1, p0); - MAX_DIFF1(t2, t1, p1, p0, mask); - - u += 4 * stride; - v += 4 * stride; - - // Load q0, q1, q2, q3 - LOADUV_H_EDGES4(u, v, stride, q0, q1, t1, t2); - MAX_DIFF2(t2, t1, q1, q0, mask); - - ComplexMask_SSE2(&p1, &p0, &q0, &q1, thresh, ithresh, &mask); - DoFilter4_SSE2(&p1, &p0, &q0, &q1, &mask, hev_thresh); - - // Store - STOREUV(p1, u, v, -2 * stride); - STOREUV(p0, u, v, -1 * stride); - STOREUV(q0, u, v, 0 * stride); - STOREUV(q1, u, v, 1 * stride); -} - -static void HFilter8i_SSE2(uint8_t* u, uint8_t* v, int stride, - int thresh, int ithresh, int hev_thresh) { - __m128i mask; - __m128i t1, t2, p1, p0, q0, q1; - Load16x4_SSE2(u, v, stride, &t2, &t1, &p1, &p0); // p3, p2, p1, p0 - MAX_DIFF1(t2, t1, p1, p0, mask); - - u += 4; // beginning of q0 - v += 4; - Load16x4_SSE2(u, v, stride, &q0, &q1, &t1, &t2); // q0, q1, q2, q3 - MAX_DIFF2(t2, t1, q1, q0, mask); - - ComplexMask_SSE2(&p1, &p0, &q0, &q1, thresh, ithresh, &mask); - DoFilter4_SSE2(&p1, &p0, &q0, &q1, &mask, hev_thresh); - - u -= 2; // beginning of p1 - v -= 2; - Store16x4_SSE2(&p1, &p0, &q0, &q1, u, v, stride); -} - -//------------------------------------------------------------------------------ -// 4x4 predictions - -#define DST(x, y) dst[(x) + (y) * BPS] -#define AVG3(a, b, c) (((a) + 2 * (b) + (c) + 2) >> 2) - -// We use the following 8b-arithmetic tricks: -// (a + 2 * b + c + 2) >> 2 = (AC + b + 1) >> 1 -// where: AC = (a + c) >> 1 = [(a + c + 1) >> 1] - [(a^c) & 1] -// and: -// (a + 2 * b + c + 2) >> 2 = (AB + BC + 1) >> 1 - (ab|bc)&lsb -// where: AC = (a + b + 1) >> 1, BC = (b + c + 1) >> 1 -// and ab = a ^ b, bc = b ^ c, lsb = (AC^BC)&1 - -static void VE4_SSE2(uint8_t* dst) { // vertical - const __m128i one = _mm_set1_epi8(1); - const __m128i ABCDEFGH = _mm_loadl_epi64((__m128i*)(dst - BPS - 1)); - const __m128i BCDEFGH0 = _mm_srli_si128(ABCDEFGH, 1); - const __m128i CDEFGH00 = _mm_srli_si128(ABCDEFGH, 2); - const __m128i a = _mm_avg_epu8(ABCDEFGH, CDEFGH00); - const __m128i lsb = _mm_and_si128(_mm_xor_si128(ABCDEFGH, CDEFGH00), one); - const __m128i b = _mm_subs_epu8(a, lsb); - const __m128i avg = _mm_avg_epu8(b, BCDEFGH0); - const uint32_t vals = _mm_cvtsi128_si32(avg); - int i; - for (i = 0; i < 4; ++i) { - WebPUint32ToMem(dst + i * BPS, vals); - } -} - -static void LD4_SSE2(uint8_t* dst) { // Down-Left - const __m128i one = _mm_set1_epi8(1); - const __m128i ABCDEFGH = _mm_loadl_epi64((__m128i*)(dst - BPS)); - const __m128i BCDEFGH0 = _mm_srli_si128(ABCDEFGH, 1); - const __m128i CDEFGH00 = _mm_srli_si128(ABCDEFGH, 2); - const __m128i CDEFGHH0 = _mm_insert_epi16(CDEFGH00, dst[-BPS + 7], 3); - const __m128i avg1 = _mm_avg_epu8(ABCDEFGH, CDEFGHH0); - const __m128i lsb = _mm_and_si128(_mm_xor_si128(ABCDEFGH, CDEFGHH0), one); - const __m128i avg2 = _mm_subs_epu8(avg1, lsb); - const __m128i abcdefg = _mm_avg_epu8(avg2, BCDEFGH0); - WebPUint32ToMem(dst + 0 * BPS, _mm_cvtsi128_si32( abcdefg )); - WebPUint32ToMem(dst + 1 * BPS, _mm_cvtsi128_si32(_mm_srli_si128(abcdefg, 1))); - WebPUint32ToMem(dst + 2 * BPS, _mm_cvtsi128_si32(_mm_srli_si128(abcdefg, 2))); - WebPUint32ToMem(dst + 3 * BPS, _mm_cvtsi128_si32(_mm_srli_si128(abcdefg, 3))); -} - -static void VR4_SSE2(uint8_t* dst) { // Vertical-Right - const __m128i one = _mm_set1_epi8(1); - const int I = dst[-1 + 0 * BPS]; - const int J = dst[-1 + 1 * BPS]; - const int K = dst[-1 + 2 * BPS]; - const int X = dst[-1 - BPS]; - const __m128i XABCD = _mm_loadl_epi64((__m128i*)(dst - BPS - 1)); - const __m128i ABCD0 = _mm_srli_si128(XABCD, 1); - const __m128i abcd = _mm_avg_epu8(XABCD, ABCD0); - const __m128i _XABCD = _mm_slli_si128(XABCD, 1); - const __m128i IXABCD = _mm_insert_epi16(_XABCD, (short)(I | (X << 8)), 0); - const __m128i avg1 = _mm_avg_epu8(IXABCD, ABCD0); - const __m128i lsb = _mm_and_si128(_mm_xor_si128(IXABCD, ABCD0), one); - const __m128i avg2 = _mm_subs_epu8(avg1, lsb); - const __m128i efgh = _mm_avg_epu8(avg2, XABCD); - WebPUint32ToMem(dst + 0 * BPS, _mm_cvtsi128_si32( abcd )); - WebPUint32ToMem(dst + 1 * BPS, _mm_cvtsi128_si32( efgh )); - WebPUint32ToMem(dst + 2 * BPS, _mm_cvtsi128_si32(_mm_slli_si128(abcd, 1))); - WebPUint32ToMem(dst + 3 * BPS, _mm_cvtsi128_si32(_mm_slli_si128(efgh, 1))); - - // these two are hard to implement in SSE2, so we keep the C-version: - DST(0, 2) = AVG3(J, I, X); - DST(0, 3) = AVG3(K, J, I); -} - -static void VL4_SSE2(uint8_t* dst) { // Vertical-Left - const __m128i one = _mm_set1_epi8(1); - const __m128i ABCDEFGH = _mm_loadl_epi64((__m128i*)(dst - BPS)); - const __m128i BCDEFGH_ = _mm_srli_si128(ABCDEFGH, 1); - const __m128i CDEFGH__ = _mm_srli_si128(ABCDEFGH, 2); - const __m128i avg1 = _mm_avg_epu8(ABCDEFGH, BCDEFGH_); - const __m128i avg2 = _mm_avg_epu8(CDEFGH__, BCDEFGH_); - const __m128i avg3 = _mm_avg_epu8(avg1, avg2); - const __m128i lsb1 = _mm_and_si128(_mm_xor_si128(avg1, avg2), one); - const __m128i ab = _mm_xor_si128(ABCDEFGH, BCDEFGH_); - const __m128i bc = _mm_xor_si128(CDEFGH__, BCDEFGH_); - const __m128i abbc = _mm_or_si128(ab, bc); - const __m128i lsb2 = _mm_and_si128(abbc, lsb1); - const __m128i avg4 = _mm_subs_epu8(avg3, lsb2); - const uint32_t extra_out = _mm_cvtsi128_si32(_mm_srli_si128(avg4, 4)); - WebPUint32ToMem(dst + 0 * BPS, _mm_cvtsi128_si32( avg1 )); - WebPUint32ToMem(dst + 1 * BPS, _mm_cvtsi128_si32( avg4 )); - WebPUint32ToMem(dst + 2 * BPS, _mm_cvtsi128_si32(_mm_srli_si128(avg1, 1))); - WebPUint32ToMem(dst + 3 * BPS, _mm_cvtsi128_si32(_mm_srli_si128(avg4, 1))); - - // these two are hard to get and irregular - DST(3, 2) = (extra_out >> 0) & 0xff; - DST(3, 3) = (extra_out >> 8) & 0xff; -} - -static void RD4_SSE2(uint8_t* dst) { // Down-right - const __m128i one = _mm_set1_epi8(1); - const __m128i XABCD = _mm_loadl_epi64((__m128i*)(dst - BPS - 1)); - const __m128i ____XABCD = _mm_slli_si128(XABCD, 4); - const uint32_t I = dst[-1 + 0 * BPS]; - const uint32_t J = dst[-1 + 1 * BPS]; - const uint32_t K = dst[-1 + 2 * BPS]; - const uint32_t L = dst[-1 + 3 * BPS]; - const __m128i LKJI_____ = - _mm_cvtsi32_si128(L | (K << 8) | (J << 16) | (I << 24)); - const __m128i LKJIXABCD = _mm_or_si128(LKJI_____, ____XABCD); - const __m128i KJIXABCD_ = _mm_srli_si128(LKJIXABCD, 1); - const __m128i JIXABCD__ = _mm_srli_si128(LKJIXABCD, 2); - const __m128i avg1 = _mm_avg_epu8(JIXABCD__, LKJIXABCD); - const __m128i lsb = _mm_and_si128(_mm_xor_si128(JIXABCD__, LKJIXABCD), one); - const __m128i avg2 = _mm_subs_epu8(avg1, lsb); - const __m128i abcdefg = _mm_avg_epu8(avg2, KJIXABCD_); - WebPUint32ToMem(dst + 3 * BPS, _mm_cvtsi128_si32( abcdefg )); - WebPUint32ToMem(dst + 2 * BPS, _mm_cvtsi128_si32(_mm_srli_si128(abcdefg, 1))); - WebPUint32ToMem(dst + 1 * BPS, _mm_cvtsi128_si32(_mm_srli_si128(abcdefg, 2))); - WebPUint32ToMem(dst + 0 * BPS, _mm_cvtsi128_si32(_mm_srli_si128(abcdefg, 3))); -} - -#undef DST -#undef AVG3 - -//------------------------------------------------------------------------------ -// Luma 16x16 - -static WEBP_INLINE void TrueMotion_SSE2(uint8_t* dst, int size) { - const uint8_t* top = dst - BPS; - const __m128i zero = _mm_setzero_si128(); - int y; - if (size == 4) { - const __m128i top_values = _mm_cvtsi32_si128(WebPMemToUint32(top)); - const __m128i top_base = _mm_unpacklo_epi8(top_values, zero); - for (y = 0; y < 4; ++y, dst += BPS) { - const int val = dst[-1] - top[-1]; - const __m128i base = _mm_set1_epi16(val); - const __m128i out = _mm_packus_epi16(_mm_add_epi16(base, top_base), zero); - WebPUint32ToMem(dst, _mm_cvtsi128_si32(out)); - } - } else if (size == 8) { - const __m128i top_values = _mm_loadl_epi64((const __m128i*)top); - const __m128i top_base = _mm_unpacklo_epi8(top_values, zero); - for (y = 0; y < 8; ++y, dst += BPS) { - const int val = dst[-1] - top[-1]; - const __m128i base = _mm_set1_epi16(val); - const __m128i out = _mm_packus_epi16(_mm_add_epi16(base, top_base), zero); - _mm_storel_epi64((__m128i*)dst, out); - } - } else { - const __m128i top_values = _mm_loadu_si128((const __m128i*)top); - const __m128i top_base_0 = _mm_unpacklo_epi8(top_values, zero); - const __m128i top_base_1 = _mm_unpackhi_epi8(top_values, zero); - for (y = 0; y < 16; ++y, dst += BPS) { - const int val = dst[-1] - top[-1]; - const __m128i base = _mm_set1_epi16(val); - const __m128i out_0 = _mm_add_epi16(base, top_base_0); - const __m128i out_1 = _mm_add_epi16(base, top_base_1); - const __m128i out = _mm_packus_epi16(out_0, out_1); - _mm_storeu_si128((__m128i*)dst, out); - } - } -} - -static void TM4_SSE2(uint8_t* dst) { TrueMotion_SSE2(dst, 4); } -static void TM8uv_SSE2(uint8_t* dst) { TrueMotion_SSE2(dst, 8); } -static void TM16_SSE2(uint8_t* dst) { TrueMotion_SSE2(dst, 16); } - -static void VE16_SSE2(uint8_t* dst) { - const __m128i top = _mm_loadu_si128((const __m128i*)(dst - BPS)); - int j; - for (j = 0; j < 16; ++j) { - _mm_storeu_si128((__m128i*)(dst + j * BPS), top); - } -} - -static void HE16_SSE2(uint8_t* dst) { // horizontal - int j; - for (j = 16; j > 0; --j) { - const __m128i values = _mm_set1_epi8(dst[-1]); - _mm_storeu_si128((__m128i*)dst, values); - dst += BPS; - } -} - -static WEBP_INLINE void Put16_SSE2(uint8_t v, uint8_t* dst) { - int j; - const __m128i values = _mm_set1_epi8(v); - for (j = 0; j < 16; ++j) { - _mm_storeu_si128((__m128i*)(dst + j * BPS), values); - } -} - -static void DC16_SSE2(uint8_t* dst) { // DC - const __m128i zero = _mm_setzero_si128(); - const __m128i top = _mm_loadu_si128((const __m128i*)(dst - BPS)); - const __m128i sad8x2 = _mm_sad_epu8(top, zero); - // sum the two sads: sad8x2[0:1] + sad8x2[8:9] - const __m128i sum = _mm_add_epi16(sad8x2, _mm_shuffle_epi32(sad8x2, 2)); - int left = 0; - int j; - for (j = 0; j < 16; ++j) { - left += dst[-1 + j * BPS]; - } - { - const int DC = _mm_cvtsi128_si32(sum) + left + 16; - Put16_SSE2(DC >> 5, dst); - } -} - -static void DC16NoTop_SSE2(uint8_t* dst) { // DC with top samples unavailable - int DC = 8; - int j; - for (j = 0; j < 16; ++j) { - DC += dst[-1 + j * BPS]; - } - Put16_SSE2(DC >> 4, dst); -} - -static void DC16NoLeft_SSE2(uint8_t* dst) { // DC with left samples unavailable - const __m128i zero = _mm_setzero_si128(); - const __m128i top = _mm_loadu_si128((const __m128i*)(dst - BPS)); - const __m128i sad8x2 = _mm_sad_epu8(top, zero); - // sum the two sads: sad8x2[0:1] + sad8x2[8:9] - const __m128i sum = _mm_add_epi16(sad8x2, _mm_shuffle_epi32(sad8x2, 2)); - const int DC = _mm_cvtsi128_si32(sum) + 8; - Put16_SSE2(DC >> 4, dst); -} - -static void DC16NoTopLeft_SSE2(uint8_t* dst) { // DC with no top & left samples - Put16_SSE2(0x80, dst); -} - -//------------------------------------------------------------------------------ -// Chroma - -static void VE8uv_SSE2(uint8_t* dst) { // vertical - int j; - const __m128i top = _mm_loadl_epi64((const __m128i*)(dst - BPS)); - for (j = 0; j < 8; ++j) { - _mm_storel_epi64((__m128i*)(dst + j * BPS), top); - } -} - -// helper for chroma-DC predictions -static WEBP_INLINE void Put8x8uv_SSE2(uint8_t v, uint8_t* dst) { - int j; - const __m128i values = _mm_set1_epi8(v); - for (j = 0; j < 8; ++j) { - _mm_storel_epi64((__m128i*)(dst + j * BPS), values); - } -} - -static void DC8uv_SSE2(uint8_t* dst) { // DC - const __m128i zero = _mm_setzero_si128(); - const __m128i top = _mm_loadl_epi64((const __m128i*)(dst - BPS)); - const __m128i sum = _mm_sad_epu8(top, zero); - int left = 0; - int j; - for (j = 0; j < 8; ++j) { - left += dst[-1 + j * BPS]; - } - { - const int DC = _mm_cvtsi128_si32(sum) + left + 8; - Put8x8uv_SSE2(DC >> 4, dst); - } -} - -static void DC8uvNoLeft_SSE2(uint8_t* dst) { // DC with no left samples - const __m128i zero = _mm_setzero_si128(); - const __m128i top = _mm_loadl_epi64((const __m128i*)(dst - BPS)); - const __m128i sum = _mm_sad_epu8(top, zero); - const int DC = _mm_cvtsi128_si32(sum) + 4; - Put8x8uv_SSE2(DC >> 3, dst); -} - -static void DC8uvNoTop_SSE2(uint8_t* dst) { // DC with no top samples - int dc0 = 4; - int i; - for (i = 0; i < 8; ++i) { - dc0 += dst[-1 + i * BPS]; - } - Put8x8uv_SSE2(dc0 >> 3, dst); -} - -static void DC8uvNoTopLeft_SSE2(uint8_t* dst) { // DC with nothing - Put8x8uv_SSE2(0x80, dst); -} - -//------------------------------------------------------------------------------ -// Entry point - -extern void VP8DspInitSSE2(void); - -WEBP_TSAN_IGNORE_FUNCTION void VP8DspInitSSE2(void) { - VP8Transform = Transform_SSE2; -#if (USE_TRANSFORM_AC3 == 1) - VP8TransformAC3 = TransformAC3_SSE2; -#endif - - VP8VFilter16 = VFilter16_SSE2; - VP8HFilter16 = HFilter16_SSE2; - VP8VFilter8 = VFilter8_SSE2; - VP8HFilter8 = HFilter8_SSE2; - VP8VFilter16i = VFilter16i_SSE2; - VP8HFilter16i = HFilter16i_SSE2; - VP8VFilter8i = VFilter8i_SSE2; - VP8HFilter8i = HFilter8i_SSE2; - - VP8SimpleVFilter16 = SimpleVFilter16_SSE2; - VP8SimpleHFilter16 = SimpleHFilter16_SSE2; - VP8SimpleVFilter16i = SimpleVFilter16i_SSE2; - VP8SimpleHFilter16i = SimpleHFilter16i_SSE2; - - VP8PredLuma4[1] = TM4_SSE2; - VP8PredLuma4[2] = VE4_SSE2; - VP8PredLuma4[4] = RD4_SSE2; - VP8PredLuma4[5] = VR4_SSE2; - VP8PredLuma4[6] = LD4_SSE2; - VP8PredLuma4[7] = VL4_SSE2; - - VP8PredLuma16[0] = DC16_SSE2; - VP8PredLuma16[1] = TM16_SSE2; - VP8PredLuma16[2] = VE16_SSE2; - VP8PredLuma16[3] = HE16_SSE2; - VP8PredLuma16[4] = DC16NoTop_SSE2; - VP8PredLuma16[5] = DC16NoLeft_SSE2; - VP8PredLuma16[6] = DC16NoTopLeft_SSE2; - - VP8PredChroma8[0] = DC8uv_SSE2; - VP8PredChroma8[1] = TM8uv_SSE2; - VP8PredChroma8[2] = VE8uv_SSE2; - VP8PredChroma8[4] = DC8uvNoTop_SSE2; - VP8PredChroma8[5] = DC8uvNoLeft_SSE2; - VP8PredChroma8[6] = DC8uvNoTopLeft_SSE2; -} - -#else // !WEBP_USE_SSE2 - -WEBP_DSP_INIT_STUB(VP8DspInitSSE2) - -#endif // WEBP_USE_SSE2 diff --git a/Extended/libwebp/src/dsp/dec_sse41.c b/Extended/libwebp/src/dsp/dec_sse41.c deleted file mode 100644 index 8f18506..0000000 --- a/Extended/libwebp/src/dsp/dec_sse41.c +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright 2015 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// SSE4 version of some decoding functions. -// -// Author: Skal (pascal.massimino@gmail.com) - -#include "src/dsp/dsp.h" - -#if defined(WEBP_USE_SSE41) - -#include -#include "src/dec/vp8i_dec.h" -#include "src/utils/utils.h" - -static void HE16_SSE41(uint8_t* dst) { // horizontal - int j; - const __m128i kShuffle3 = _mm_set1_epi8(3); - for (j = 16; j > 0; --j) { - const __m128i in = _mm_cvtsi32_si128(WebPMemToUint32(dst - 4)); - const __m128i values = _mm_shuffle_epi8(in, kShuffle3); - _mm_storeu_si128((__m128i*)dst, values); - dst += BPS; - } -} - -//------------------------------------------------------------------------------ -// Entry point - -extern void VP8DspInitSSE41(void); - -WEBP_TSAN_IGNORE_FUNCTION void VP8DspInitSSE41(void) { - VP8PredLuma16[3] = HE16_SSE41; -} - -#else // !WEBP_USE_SSE41 - -WEBP_DSP_INIT_STUB(VP8DspInitSSE41) - -#endif // WEBP_USE_SSE41 diff --git a/Extended/libwebp/src/dsp/dsp.h b/Extended/libwebp/src/dsp/dsp.h deleted file mode 100644 index a784de3..0000000 --- a/Extended/libwebp/src/dsp/dsp.h +++ /dev/null @@ -1,678 +0,0 @@ -// Copyright 2011 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Speed-critical functions. -// -// Author: Skal (pascal.massimino@gmail.com) - -#ifndef WEBP_DSP_DSP_H_ -#define WEBP_DSP_DSP_H_ - -#ifdef HAVE_CONFIG_H -#include "src/webp/config.h" -#endif - -#include "src/webp/types.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#define BPS 32 // this is the common stride for enc/dec - -//------------------------------------------------------------------------------ -// CPU detection - -#if defined(__GNUC__) -# define LOCAL_GCC_VERSION ((__GNUC__ << 8) | __GNUC_MINOR__) -# define LOCAL_GCC_PREREQ(maj, min) \ - (LOCAL_GCC_VERSION >= (((maj) << 8) | (min))) -#else -# define LOCAL_GCC_VERSION 0 -# define LOCAL_GCC_PREREQ(maj, min) 0 -#endif - -#if defined(__clang__) -# define LOCAL_CLANG_VERSION ((__clang_major__ << 8) | __clang_minor__) -# define LOCAL_CLANG_PREREQ(maj, min) \ - (LOCAL_CLANG_VERSION >= (((maj) << 8) | (min))) -#else -# define LOCAL_CLANG_VERSION 0 -# define LOCAL_CLANG_PREREQ(maj, min) 0 -#endif - -#ifndef __has_builtin -# define __has_builtin(x) 0 -#endif - -// for now, none of the optimizations below are available in emscripten -#if !defined(EMSCRIPTEN) - -#if defined(_MSC_VER) && _MSC_VER > 1310 && \ - (defined(_M_X64) || defined(_M_IX86)) -#define WEBP_MSC_SSE2 // Visual C++ SSE2 targets -#endif - -#if defined(_MSC_VER) && _MSC_VER >= 1500 && \ - (defined(_M_X64) || defined(_M_IX86)) -#define WEBP_MSC_SSE41 // Visual C++ SSE4.1 targets -#endif - -// WEBP_HAVE_* are used to indicate the presence of the instruction set in dsp -// files without intrinsics, allowing the corresponding Init() to be called. -// Files containing intrinsics will need to be built targeting the instruction -// set so should succeed on one of the earlier tests. -#if defined(__SSE2__) || defined(WEBP_MSC_SSE2) || defined(WEBP_HAVE_SSE2) -#define WEBP_USE_SSE2 -#endif - -#if defined(__SSE4_1__) || defined(WEBP_MSC_SSE41) || defined(WEBP_HAVE_SSE41) -#define WEBP_USE_SSE41 -#endif - -// The intrinsics currently cause compiler errors with arm-nacl-gcc and the -// inline assembly would need to be modified for use with Native Client. -#if (defined(__ARM_NEON__) || \ - defined(__aarch64__) || defined(WEBP_HAVE_NEON)) && \ - !defined(__native_client__) -#define WEBP_USE_NEON -#endif - -#if !defined(WEBP_USE_NEON) && defined(__ANDROID__) && \ - defined(__ARM_ARCH_7A__) && defined(HAVE_CPU_FEATURES_H) -#define WEBP_ANDROID_NEON // Android targets that may have NEON -#define WEBP_USE_NEON -#endif - -#if defined(_MSC_VER) && _MSC_VER >= 1700 && defined(_M_ARM) -#define WEBP_USE_NEON -#define WEBP_USE_INTRINSICS -#endif - -#if defined(__mips__) && !defined(__mips64) && \ - defined(__mips_isa_rev) && (__mips_isa_rev >= 1) && (__mips_isa_rev < 6) -#define WEBP_USE_MIPS32 -#if (__mips_isa_rev >= 2) -#define WEBP_USE_MIPS32_R2 -#if defined(__mips_dspr2) || (defined(__mips_dsp_rev) && __mips_dsp_rev >= 2) -#define WEBP_USE_MIPS_DSP_R2 -#endif -#endif -#endif - -#if defined(__mips_msa) && defined(__mips_isa_rev) && (__mips_isa_rev >= 5) -#define WEBP_USE_MSA -#endif - -#endif /* EMSCRIPTEN */ - -#ifndef WEBP_DSP_OMIT_C_CODE -#define WEBP_DSP_OMIT_C_CODE 1 -#endif - -#if (defined(__aarch64__) || defined(__ARM_NEON__)) && WEBP_DSP_OMIT_C_CODE -#define WEBP_NEON_OMIT_C_CODE 1 -#else -#define WEBP_NEON_OMIT_C_CODE 0 -#endif - -#if !(LOCAL_CLANG_PREREQ(3,8) || LOCAL_GCC_PREREQ(4,8) || defined(__aarch64__)) -#define WEBP_NEON_WORK_AROUND_GCC 1 -#else -#define WEBP_NEON_WORK_AROUND_GCC 0 -#endif - -// This macro prevents thread_sanitizer from reporting known concurrent writes. -#define WEBP_TSAN_IGNORE_FUNCTION -#if defined(__has_feature) -#if __has_feature(thread_sanitizer) -#undef WEBP_TSAN_IGNORE_FUNCTION -#define WEBP_TSAN_IGNORE_FUNCTION __attribute__((no_sanitize_thread)) -#endif -#endif - -#if defined(WEBP_USE_THREAD) && !defined(_WIN32) -#include // NOLINT - -#define WEBP_DSP_INIT(func) do { \ - static volatile VP8CPUInfo func ## _last_cpuinfo_used = \ - (VP8CPUInfo)&func ## _last_cpuinfo_used; \ - static pthread_mutex_t func ## _lock = PTHREAD_MUTEX_INITIALIZER; \ - if (pthread_mutex_lock(&func ## _lock)) break; \ - if (func ## _last_cpuinfo_used != VP8GetCPUInfo) func(); \ - func ## _last_cpuinfo_used = VP8GetCPUInfo; \ - (void)pthread_mutex_unlock(&func ## _lock); \ -} while (0) -#else // !(defined(WEBP_USE_THREAD) && !defined(_WIN32)) -#define WEBP_DSP_INIT(func) do { \ - static volatile VP8CPUInfo func ## _last_cpuinfo_used = \ - (VP8CPUInfo)&func ## _last_cpuinfo_used; \ - if (func ## _last_cpuinfo_used == VP8GetCPUInfo) break; \ - func(); \ - func ## _last_cpuinfo_used = VP8GetCPUInfo; \ -} while (0) -#endif // defined(WEBP_USE_THREAD) && !defined(_WIN32) - -// Defines an Init + helper function that control multiple initialization of -// function pointers / tables. -/* Usage: - WEBP_DSP_INIT_FUNC(InitFunc) { - ...function body - } -*/ -#define WEBP_DSP_INIT_FUNC(name) \ - static WEBP_TSAN_IGNORE_FUNCTION void name ## _body(void); \ - WEBP_TSAN_IGNORE_FUNCTION void name(void) { \ - WEBP_DSP_INIT(name ## _body); \ - } \ - static WEBP_TSAN_IGNORE_FUNCTION void name ## _body(void) - -#define WEBP_UBSAN_IGNORE_UNDEF -#define WEBP_UBSAN_IGNORE_UNSIGNED_OVERFLOW -#if defined(__clang__) && defined(__has_attribute) -#if __has_attribute(no_sanitize) -// This macro prevents the undefined behavior sanitizer from reporting -// failures. This is only meant to silence unaligned loads on platforms that -// are known to support them. -#undef WEBP_UBSAN_IGNORE_UNDEF -#define WEBP_UBSAN_IGNORE_UNDEF \ - __attribute__((no_sanitize("undefined"))) - -// This macro prevents the undefined behavior sanitizer from reporting -// failures related to unsigned integer overflows. This is only meant to -// silence cases where this well defined behavior is expected. -#undef WEBP_UBSAN_IGNORE_UNSIGNED_OVERFLOW -#define WEBP_UBSAN_IGNORE_UNSIGNED_OVERFLOW \ - __attribute__((no_sanitize("unsigned-integer-overflow"))) -#endif -#endif - -// Regularize the definition of WEBP_SWAP_16BIT_CSP (backward compatibility) -#if !defined(WEBP_SWAP_16BIT_CSP) -#define WEBP_SWAP_16BIT_CSP 0 -#endif - -// some endian fix (e.g.: mips-gcc doesn't define __BIG_ENDIAN__) -#if !defined(WORDS_BIGENDIAN) && \ - (defined(__BIG_ENDIAN__) || defined(_M_PPC) || \ - (defined(__BYTE_ORDER__) && (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__))) -#define WORDS_BIGENDIAN -#endif - -typedef enum { - kSSE2, - kSSE3, - kSlowSSSE3, // special feature for slow SSSE3 architectures - kSSE4_1, - kAVX, - kAVX2, - kNEON, - kMIPS32, - kMIPSdspR2, - kMSA -} CPUFeature; -// returns true if the CPU supports the feature. -typedef int (*VP8CPUInfo)(CPUFeature feature); -WEBP_EXTERN VP8CPUInfo VP8GetCPUInfo; - -//------------------------------------------------------------------------------ -// Init stub generator - -// Defines an init function stub to ensure each module exposes a symbol, -// avoiding a compiler warning. -#define WEBP_DSP_INIT_STUB(func) \ - extern void func(void); \ - void func(void) {} - -//------------------------------------------------------------------------------ -// Encoding - -// Transforms -// VP8Idct: Does one of two inverse transforms. If do_two is set, the transforms -// will be done for (ref, in, dst) and (ref + 4, in + 16, dst + 4). -typedef void (*VP8Idct)(const uint8_t* ref, const int16_t* in, uint8_t* dst, - int do_two); -typedef void (*VP8Fdct)(const uint8_t* src, const uint8_t* ref, int16_t* out); -typedef void (*VP8WHT)(const int16_t* in, int16_t* out); -extern VP8Idct VP8ITransform; -extern VP8Fdct VP8FTransform; -extern VP8Fdct VP8FTransform2; // performs two transforms at a time -extern VP8WHT VP8FTransformWHT; -// Predictions -// *dst is the destination block. *top and *left can be NULL. -typedef void (*VP8IntraPreds)(uint8_t* dst, const uint8_t* left, - const uint8_t* top); -typedef void (*VP8Intra4Preds)(uint8_t* dst, const uint8_t* top); -extern VP8Intra4Preds VP8EncPredLuma4; -extern VP8IntraPreds VP8EncPredLuma16; -extern VP8IntraPreds VP8EncPredChroma8; - -typedef int (*VP8Metric)(const uint8_t* pix, const uint8_t* ref); -extern VP8Metric VP8SSE16x16, VP8SSE16x8, VP8SSE8x8, VP8SSE4x4; -typedef int (*VP8WMetric)(const uint8_t* pix, const uint8_t* ref, - const uint16_t* const weights); -// The weights for VP8TDisto4x4 and VP8TDisto16x16 contain a row-major -// 4 by 4 symmetric matrix. -extern VP8WMetric VP8TDisto4x4, VP8TDisto16x16; - -// Compute the average (DC) of four 4x4 blocks. -// Each sub-4x4 block #i sum is stored in dc[i]. -typedef void (*VP8MeanMetric)(const uint8_t* ref, uint32_t dc[4]); -extern VP8MeanMetric VP8Mean16x4; - -typedef void (*VP8BlockCopy)(const uint8_t* src, uint8_t* dst); -extern VP8BlockCopy VP8Copy4x4; -extern VP8BlockCopy VP8Copy16x8; -// Quantization -struct VP8Matrix; // forward declaration -typedef int (*VP8QuantizeBlock)(int16_t in[16], int16_t out[16], - const struct VP8Matrix* const mtx); -// Same as VP8QuantizeBlock, but quantizes two consecutive blocks. -typedef int (*VP8Quantize2Blocks)(int16_t in[32], int16_t out[32], - const struct VP8Matrix* const mtx); - -extern VP8QuantizeBlock VP8EncQuantizeBlock; -extern VP8Quantize2Blocks VP8EncQuantize2Blocks; - -// specific to 2nd transform: -typedef int (*VP8QuantizeBlockWHT)(int16_t in[16], int16_t out[16], - const struct VP8Matrix* const mtx); -extern VP8QuantizeBlockWHT VP8EncQuantizeBlockWHT; - -extern const int VP8DspScan[16 + 4 + 4]; - -// Collect histogram for susceptibility calculation. -#define MAX_COEFF_THRESH 31 // size of histogram used by CollectHistogram. -typedef struct { - // We only need to store max_value and last_non_zero, not the distribution. - int max_value; - int last_non_zero; -} VP8Histogram; -typedef void (*VP8CHisto)(const uint8_t* ref, const uint8_t* pred, - int start_block, int end_block, - VP8Histogram* const histo); -extern VP8CHisto VP8CollectHistogram; -// General-purpose util function to help VP8CollectHistogram(). -void VP8SetHistogramData(const int distribution[MAX_COEFF_THRESH + 1], - VP8Histogram* const histo); - -// must be called before using any of the above -void VP8EncDspInit(void); - -//------------------------------------------------------------------------------ -// cost functions (encoding) - -extern const uint16_t VP8EntropyCost[256]; // 8bit fixed-point log(p) -// approximate cost per level: -extern const uint16_t VP8LevelFixedCosts[2047 /*MAX_LEVEL*/ + 1]; -extern const uint8_t VP8EncBands[16 + 1]; - -struct VP8Residual; -typedef void (*VP8SetResidualCoeffsFunc)(const int16_t* const coeffs, - struct VP8Residual* const res); -extern VP8SetResidualCoeffsFunc VP8SetResidualCoeffs; - -// Cost calculation function. -typedef int (*VP8GetResidualCostFunc)(int ctx0, - const struct VP8Residual* const res); -extern VP8GetResidualCostFunc VP8GetResidualCost; - -// must be called before anything using the above -void VP8EncDspCostInit(void); - -//------------------------------------------------------------------------------ -// SSIM / PSNR utils - -// struct for accumulating statistical moments -typedef struct { - uint32_t w; // sum(w_i) : sum of weights - uint32_t xm, ym; // sum(w_i * x_i), sum(w_i * y_i) - uint32_t xxm, xym, yym; // sum(w_i * x_i * x_i), etc. -} VP8DistoStats; - -// Compute the final SSIM value -// The non-clipped version assumes stats->w = (2 * VP8_SSIM_KERNEL + 1)^2. -double VP8SSIMFromStats(const VP8DistoStats* const stats); -double VP8SSIMFromStatsClipped(const VP8DistoStats* const stats); - -#define VP8_SSIM_KERNEL 3 // total size of the kernel: 2 * VP8_SSIM_KERNEL + 1 -typedef double (*VP8SSIMGetClippedFunc)(const uint8_t* src1, int stride1, - const uint8_t* src2, int stride2, - int xo, int yo, // center position - int W, int H); // plane dimension - -#if !defined(WEBP_REDUCE_SIZE) -// This version is called with the guarantee that you can load 8 bytes and -// 8 rows at offset src1 and src2 -typedef double (*VP8SSIMGetFunc)(const uint8_t* src1, int stride1, - const uint8_t* src2, int stride2); - -extern VP8SSIMGetFunc VP8SSIMGet; // unclipped / unchecked -extern VP8SSIMGetClippedFunc VP8SSIMGetClipped; // with clipping -#endif - -#if !defined(WEBP_DISABLE_STATS) -typedef uint32_t (*VP8AccumulateSSEFunc)(const uint8_t* src1, - const uint8_t* src2, int len); -extern VP8AccumulateSSEFunc VP8AccumulateSSE; -#endif - -// must be called before using any of the above directly -void VP8SSIMDspInit(void); - -//------------------------------------------------------------------------------ -// Decoding - -typedef void (*VP8DecIdct)(const int16_t* coeffs, uint8_t* dst); -// when doing two transforms, coeffs is actually int16_t[2][16]. -typedef void (*VP8DecIdct2)(const int16_t* coeffs, uint8_t* dst, int do_two); -extern VP8DecIdct2 VP8Transform; -extern VP8DecIdct VP8TransformAC3; -extern VP8DecIdct VP8TransformUV; -extern VP8DecIdct VP8TransformDC; -extern VP8DecIdct VP8TransformDCUV; -extern VP8WHT VP8TransformWHT; - -// *dst is the destination block, with stride BPS. Boundary samples are -// assumed accessible when needed. -typedef void (*VP8PredFunc)(uint8_t* dst); -extern VP8PredFunc VP8PredLuma16[/* NUM_B_DC_MODES */]; -extern VP8PredFunc VP8PredChroma8[/* NUM_B_DC_MODES */]; -extern VP8PredFunc VP8PredLuma4[/* NUM_BMODES */]; - -// clipping tables (for filtering) -extern const int8_t* const VP8ksclip1; // clips [-1020, 1020] to [-128, 127] -extern const int8_t* const VP8ksclip2; // clips [-112, 112] to [-16, 15] -extern const uint8_t* const VP8kclip1; // clips [-255,511] to [0,255] -extern const uint8_t* const VP8kabs0; // abs(x) for x in [-255,255] -// must be called first -void VP8InitClipTables(void); - -// simple filter (only for luma) -typedef void (*VP8SimpleFilterFunc)(uint8_t* p, int stride, int thresh); -extern VP8SimpleFilterFunc VP8SimpleVFilter16; -extern VP8SimpleFilterFunc VP8SimpleHFilter16; -extern VP8SimpleFilterFunc VP8SimpleVFilter16i; // filter 3 inner edges -extern VP8SimpleFilterFunc VP8SimpleHFilter16i; - -// regular filter (on both macroblock edges and inner edges) -typedef void (*VP8LumaFilterFunc)(uint8_t* luma, int stride, - int thresh, int ithresh, int hev_t); -typedef void (*VP8ChromaFilterFunc)(uint8_t* u, uint8_t* v, int stride, - int thresh, int ithresh, int hev_t); -// on outer edge -extern VP8LumaFilterFunc VP8VFilter16; -extern VP8LumaFilterFunc VP8HFilter16; -extern VP8ChromaFilterFunc VP8VFilter8; -extern VP8ChromaFilterFunc VP8HFilter8; - -// on inner edge -extern VP8LumaFilterFunc VP8VFilter16i; // filtering 3 inner edges altogether -extern VP8LumaFilterFunc VP8HFilter16i; -extern VP8ChromaFilterFunc VP8VFilter8i; // filtering u and v altogether -extern VP8ChromaFilterFunc VP8HFilter8i; - -// Dithering. Combines dithering values (centered around 128) with dst[], -// according to: dst[] = clip(dst[] + (((dither[]-128) + 8) >> 4) -#define VP8_DITHER_DESCALE 4 -#define VP8_DITHER_DESCALE_ROUNDER (1 << (VP8_DITHER_DESCALE - 1)) -#define VP8_DITHER_AMP_BITS 7 -#define VP8_DITHER_AMP_CENTER (1 << VP8_DITHER_AMP_BITS) -extern void (*VP8DitherCombine8x8)(const uint8_t* dither, uint8_t* dst, - int dst_stride); - -// must be called before anything using the above -void VP8DspInit(void); - -//------------------------------------------------------------------------------ -// WebP I/O - -#define FANCY_UPSAMPLING // undefined to remove fancy upsampling support - -// Convert a pair of y/u/v lines together to the output rgb/a colorspace. -// bottom_y can be NULL if only one line of output is needed (at top/bottom). -typedef void (*WebPUpsampleLinePairFunc)( - const uint8_t* top_y, const uint8_t* bottom_y, - const uint8_t* top_u, const uint8_t* top_v, - const uint8_t* cur_u, const uint8_t* cur_v, - uint8_t* top_dst, uint8_t* bottom_dst, int len); - -#ifdef FANCY_UPSAMPLING - -// Fancy upsampling functions to convert YUV to RGB(A) modes -extern WebPUpsampleLinePairFunc WebPUpsamplers[/* MODE_LAST */]; - -#endif // FANCY_UPSAMPLING - -// Per-row point-sampling methods. -typedef void (*WebPSamplerRowFunc)(const uint8_t* y, - const uint8_t* u, const uint8_t* v, - uint8_t* dst, int len); -// Generic function to apply 'WebPSamplerRowFunc' to the whole plane: -void WebPSamplerProcessPlane(const uint8_t* y, int y_stride, - const uint8_t* u, const uint8_t* v, int uv_stride, - uint8_t* dst, int dst_stride, - int width, int height, WebPSamplerRowFunc func); - -// Sampling functions to convert rows of YUV to RGB(A) -extern WebPSamplerRowFunc WebPSamplers[/* MODE_LAST */]; - -// General function for converting two lines of ARGB or RGBA. -// 'alpha_is_last' should be true if 0xff000000 is stored in memory as -// as 0x00, 0x00, 0x00, 0xff (little endian). -WebPUpsampleLinePairFunc WebPGetLinePairConverter(int alpha_is_last); - -// YUV444->RGB converters -typedef void (*WebPYUV444Converter)(const uint8_t* y, - const uint8_t* u, const uint8_t* v, - uint8_t* dst, int len); - -extern WebPYUV444Converter WebPYUV444Converters[/* MODE_LAST */]; - -// Must be called before using the WebPUpsamplers[] (and for premultiplied -// colorspaces like rgbA, rgbA4444, etc) -void WebPInitUpsamplers(void); -// Must be called before using WebPSamplers[] -void WebPInitSamplers(void); -// Must be called before using WebPYUV444Converters[] -void WebPInitYUV444Converters(void); - -//------------------------------------------------------------------------------ -// ARGB -> YUV converters - -// Convert ARGB samples to luma Y. -extern void (*WebPConvertARGBToY)(const uint32_t* argb, uint8_t* y, int width); -// Convert ARGB samples to U/V with downsampling. do_store should be '1' for -// even lines and '0' for odd ones. 'src_width' is the original width, not -// the U/V one. -extern void (*WebPConvertARGBToUV)(const uint32_t* argb, uint8_t* u, uint8_t* v, - int src_width, int do_store); - -// Convert a row of accumulated (four-values) of rgba32 toward U/V -extern void (*WebPConvertRGBA32ToUV)(const uint16_t* rgb, - uint8_t* u, uint8_t* v, int width); - -// Convert RGB or BGR to Y -extern void (*WebPConvertRGB24ToY)(const uint8_t* rgb, uint8_t* y, int width); -extern void (*WebPConvertBGR24ToY)(const uint8_t* bgr, uint8_t* y, int width); - -// used for plain-C fallback. -extern void WebPConvertARGBToUV_C(const uint32_t* argb, uint8_t* u, uint8_t* v, - int src_width, int do_store); -extern void WebPConvertRGBA32ToUV_C(const uint16_t* rgb, - uint8_t* u, uint8_t* v, int width); - -// utilities for accurate RGB->YUV conversion -extern uint64_t (*WebPSharpYUVUpdateY)(const uint16_t* src, const uint16_t* ref, - uint16_t* dst, int len); -extern void (*WebPSharpYUVUpdateRGB)(const int16_t* src, const int16_t* ref, - int16_t* dst, int len); -extern void (*WebPSharpYUVFilterRow)(const int16_t* A, const int16_t* B, - int len, - const uint16_t* best_y, uint16_t* out); - -// Must be called before using the above. -void WebPInitConvertARGBToYUV(void); - -//------------------------------------------------------------------------------ -// Rescaler - -struct WebPRescaler; - -// Import a row of data and save its contribution in the rescaler. -// 'channel' denotes the channel number to be imported. 'Expand' corresponds to -// the wrk->x_expand case. Otherwise, 'Shrink' is to be used. -typedef void (*WebPRescalerImportRowFunc)(struct WebPRescaler* const wrk, - const uint8_t* src); - -extern WebPRescalerImportRowFunc WebPRescalerImportRowExpand; -extern WebPRescalerImportRowFunc WebPRescalerImportRowShrink; - -// Export one row (starting at x_out position) from rescaler. -// 'Expand' corresponds to the wrk->y_expand case. -// Otherwise 'Shrink' is to be used -typedef void (*WebPRescalerExportRowFunc)(struct WebPRescaler* const wrk); -extern WebPRescalerExportRowFunc WebPRescalerExportRowExpand; -extern WebPRescalerExportRowFunc WebPRescalerExportRowShrink; - -// Plain-C implementation, as fall-back. -extern void WebPRescalerImportRowExpand_C(struct WebPRescaler* const wrk, - const uint8_t* src); -extern void WebPRescalerImportRowShrink_C(struct WebPRescaler* const wrk, - const uint8_t* src); -extern void WebPRescalerExportRowExpand_C(struct WebPRescaler* const wrk); -extern void WebPRescalerExportRowShrink_C(struct WebPRescaler* const wrk); - -// Main entry calls: -extern void WebPRescalerImportRow(struct WebPRescaler* const wrk, - const uint8_t* src); -// Export one row (starting at x_out position) from rescaler. -extern void WebPRescalerExportRow(struct WebPRescaler* const wrk); - -// Must be called first before using the above. -void WebPRescalerDspInit(void); - -//------------------------------------------------------------------------------ -// Utilities for processing transparent channel. - -// Apply alpha pre-multiply on an rgba, bgra or argb plane of size w * h. -// alpha_first should be 0 for argb, 1 for rgba or bgra (where alpha is last). -extern void (*WebPApplyAlphaMultiply)( - uint8_t* rgba, int alpha_first, int w, int h, int stride); - -// Same, buf specifically for RGBA4444 format -extern void (*WebPApplyAlphaMultiply4444)( - uint8_t* rgba4444, int w, int h, int stride); - -// Dispatch the values from alpha[] plane to the ARGB destination 'dst'. -// Returns true if alpha[] plane has non-trivial values different from 0xff. -extern int (*WebPDispatchAlpha)(const uint8_t* alpha, int alpha_stride, - int width, int height, - uint8_t* dst, int dst_stride); - -// Transfer packed 8b alpha[] values to green channel in dst[], zero'ing the -// A/R/B values. 'dst_stride' is the stride for dst[] in uint32_t units. -extern void (*WebPDispatchAlphaToGreen)(const uint8_t* alpha, int alpha_stride, - int width, int height, - uint32_t* dst, int dst_stride); - -// Extract the alpha values from 32b values in argb[] and pack them into alpha[] -// (this is the opposite of WebPDispatchAlpha). -// Returns true if there's only trivial 0xff alpha values. -extern int (*WebPExtractAlpha)(const uint8_t* argb, int argb_stride, - int width, int height, - uint8_t* alpha, int alpha_stride); - -// Extract the green values from 32b values in argb[] and pack them into alpha[] -// (this is the opposite of WebPDispatchAlphaToGreen). -extern void (*WebPExtractGreen)(const uint32_t* argb, uint8_t* alpha, int size); - -// Pre-Multiply operation transforms x into x * A / 255 (where x=Y,R,G or B). -// Un-Multiply operation transforms x into x * 255 / A. - -// Pre-Multiply or Un-Multiply (if 'inverse' is true) argb values in a row. -extern void (*WebPMultARGBRow)(uint32_t* const ptr, int width, int inverse); - -// Same a WebPMultARGBRow(), but for several rows. -void WebPMultARGBRows(uint8_t* ptr, int stride, int width, int num_rows, - int inverse); - -// Same for a row of single values, with side alpha values. -extern void (*WebPMultRow)(uint8_t* const ptr, const uint8_t* const alpha, - int width, int inverse); - -// Same a WebPMultRow(), but for several 'num_rows' rows. -void WebPMultRows(uint8_t* ptr, int stride, - const uint8_t* alpha, int alpha_stride, - int width, int num_rows, int inverse); - -// Plain-C versions, used as fallback by some implementations. -void WebPMultRow_C(uint8_t* const ptr, const uint8_t* const alpha, - int width, int inverse); -void WebPMultARGBRow_C(uint32_t* const ptr, int width, int inverse); - -#ifdef WORDS_BIGENDIAN -// ARGB packing function: a/r/g/b input is rgba or bgra order. -extern void (*WebPPackARGB)(const uint8_t* a, const uint8_t* r, - const uint8_t* g, const uint8_t* b, int len, - uint32_t* out); -#endif - -// RGB packing function. 'step' can be 3 or 4. r/g/b input is rgb or bgr order. -extern void (*WebPPackRGB)(const uint8_t* r, const uint8_t* g, const uint8_t* b, - int len, int step, uint32_t* out); - -// This function returns true if src[i] contains a value different from 0xff. -extern int (*WebPHasAlpha8b)(const uint8_t* src, int length); -// This function returns true if src[4*i] contains a value different from 0xff. -extern int (*WebPHasAlpha32b)(const uint8_t* src, int length); - -// To be called first before using the above. -void WebPInitAlphaProcessing(void); - -//------------------------------------------------------------------------------ -// Filter functions - -typedef enum { // Filter types. - WEBP_FILTER_NONE = 0, - WEBP_FILTER_HORIZONTAL, - WEBP_FILTER_VERTICAL, - WEBP_FILTER_GRADIENT, - WEBP_FILTER_LAST = WEBP_FILTER_GRADIENT + 1, // end marker - WEBP_FILTER_BEST, // meta-types - WEBP_FILTER_FAST -} WEBP_FILTER_TYPE; - -typedef void (*WebPFilterFunc)(const uint8_t* in, int width, int height, - int stride, uint8_t* out); -// In-place un-filtering. -// Warning! 'prev_line' pointer can be equal to 'cur_line' or 'preds'. -typedef void (*WebPUnfilterFunc)(const uint8_t* prev_line, const uint8_t* preds, - uint8_t* cur_line, int width); - -// Filter the given data using the given predictor. -// 'in' corresponds to a 2-dimensional pixel array of size (stride * height) -// in raster order. -// 'stride' is number of bytes per scan line (with possible padding). -// 'out' should be pre-allocated. -extern WebPFilterFunc WebPFilters[WEBP_FILTER_LAST]; - -// In-place reconstruct the original data from the given filtered data. -// The reconstruction will be done for 'num_rows' rows starting from 'row' -// (assuming rows upto 'row - 1' are already reconstructed). -extern WebPUnfilterFunc WebPUnfilters[WEBP_FILTER_LAST]; - -// To be called first before using the above. -void VP8FiltersInit(void); - -#ifdef __cplusplus -} // extern "C" -#endif - -#endif // WEBP_DSP_DSP_H_ diff --git a/Extended/libwebp/src/dsp/enc.c b/Extended/libwebp/src/dsp/enc.c deleted file mode 100644 index 2fddbc4..0000000 --- a/Extended/libwebp/src/dsp/enc.c +++ /dev/null @@ -1,830 +0,0 @@ -// Copyright 2011 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Speed-critical encoding functions. -// -// Author: Skal (pascal.massimino@gmail.com) - -#include -#include // for abs() - -#include "src/dsp/dsp.h" -#include "src/enc/vp8i_enc.h" - -static WEBP_INLINE uint8_t clip_8b(int v) { - return (!(v & ~0xff)) ? v : (v < 0) ? 0 : 255; -} - -#if !WEBP_NEON_OMIT_C_CODE -static WEBP_INLINE int clip_max(int v, int max) { - return (v > max) ? max : v; -} -#endif // !WEBP_NEON_OMIT_C_CODE - -//------------------------------------------------------------------------------ -// Compute susceptibility based on DCT-coeff histograms: -// the higher, the "easier" the macroblock is to compress. - -const int VP8DspScan[16 + 4 + 4] = { - // Luma - 0 + 0 * BPS, 4 + 0 * BPS, 8 + 0 * BPS, 12 + 0 * BPS, - 0 + 4 * BPS, 4 + 4 * BPS, 8 + 4 * BPS, 12 + 4 * BPS, - 0 + 8 * BPS, 4 + 8 * BPS, 8 + 8 * BPS, 12 + 8 * BPS, - 0 + 12 * BPS, 4 + 12 * BPS, 8 + 12 * BPS, 12 + 12 * BPS, - - 0 + 0 * BPS, 4 + 0 * BPS, 0 + 4 * BPS, 4 + 4 * BPS, // U - 8 + 0 * BPS, 12 + 0 * BPS, 8 + 4 * BPS, 12 + 4 * BPS // V -}; - -// general-purpose util function -void VP8SetHistogramData(const int distribution[MAX_COEFF_THRESH + 1], - VP8Histogram* const histo) { - int max_value = 0, last_non_zero = 1; - int k; - for (k = 0; k <= MAX_COEFF_THRESH; ++k) { - const int value = distribution[k]; - if (value > 0) { - if (value > max_value) max_value = value; - last_non_zero = k; - } - } - histo->max_value = max_value; - histo->last_non_zero = last_non_zero; -} - -#if !WEBP_NEON_OMIT_C_CODE -static void CollectHistogram_C(const uint8_t* ref, const uint8_t* pred, - int start_block, int end_block, - VP8Histogram* const histo) { - int j; - int distribution[MAX_COEFF_THRESH + 1] = { 0 }; - for (j = start_block; j < end_block; ++j) { - int k; - int16_t out[16]; - - VP8FTransform(ref + VP8DspScan[j], pred + VP8DspScan[j], out); - - // Convert coefficients to bin. - for (k = 0; k < 16; ++k) { - const int v = abs(out[k]) >> 3; - const int clipped_value = clip_max(v, MAX_COEFF_THRESH); - ++distribution[clipped_value]; - } - } - VP8SetHistogramData(distribution, histo); -} -#endif // !WEBP_NEON_OMIT_C_CODE - -//------------------------------------------------------------------------------ -// run-time tables (~4k) - -static uint8_t clip1[255 + 510 + 1]; // clips [-255,510] to [0,255] - -// We declare this variable 'volatile' to prevent instruction reordering -// and make sure it's set to true _last_ (so as to be thread-safe) -static volatile int tables_ok = 0; - -static WEBP_TSAN_IGNORE_FUNCTION void InitTables(void) { - if (!tables_ok) { - int i; - for (i = -255; i <= 255 + 255; ++i) { - clip1[255 + i] = clip_8b(i); - } - tables_ok = 1; - } -} - - -//------------------------------------------------------------------------------ -// Transforms (Paragraph 14.4) - -#if !WEBP_NEON_OMIT_C_CODE - -#define STORE(x, y, v) \ - dst[(x) + (y) * BPS] = clip_8b(ref[(x) + (y) * BPS] + ((v) >> 3)) - -static const int kC1 = 20091 + (1 << 16); -static const int kC2 = 35468; -#define MUL(a, b) (((a) * (b)) >> 16) - -static WEBP_INLINE void ITransformOne(const uint8_t* ref, const int16_t* in, - uint8_t* dst) { - int C[4 * 4], *tmp; - int i; - tmp = C; - for (i = 0; i < 4; ++i) { // vertical pass - const int a = in[0] + in[8]; - const int b = in[0] - in[8]; - const int c = MUL(in[4], kC2) - MUL(in[12], kC1); - const int d = MUL(in[4], kC1) + MUL(in[12], kC2); - tmp[0] = a + d; - tmp[1] = b + c; - tmp[2] = b - c; - tmp[3] = a - d; - tmp += 4; - in++; - } - - tmp = C; - for (i = 0; i < 4; ++i) { // horizontal pass - const int dc = tmp[0] + 4; - const int a = dc + tmp[8]; - const int b = dc - tmp[8]; - const int c = MUL(tmp[4], kC2) - MUL(tmp[12], kC1); - const int d = MUL(tmp[4], kC1) + MUL(tmp[12], kC2); - STORE(0, i, a + d); - STORE(1, i, b + c); - STORE(2, i, b - c); - STORE(3, i, a - d); - tmp++; - } -} - -static void ITransform_C(const uint8_t* ref, const int16_t* in, uint8_t* dst, - int do_two) { - ITransformOne(ref, in, dst); - if (do_two) { - ITransformOne(ref + 4, in + 16, dst + 4); - } -} - -static void FTransform_C(const uint8_t* src, const uint8_t* ref, int16_t* out) { - int i; - int tmp[16]; - for (i = 0; i < 4; ++i, src += BPS, ref += BPS) { - const int d0 = src[0] - ref[0]; // 9bit dynamic range ([-255,255]) - const int d1 = src[1] - ref[1]; - const int d2 = src[2] - ref[2]; - const int d3 = src[3] - ref[3]; - const int a0 = (d0 + d3); // 10b [-510,510] - const int a1 = (d1 + d2); - const int a2 = (d1 - d2); - const int a3 = (d0 - d3); - tmp[0 + i * 4] = (a0 + a1) * 8; // 14b [-8160,8160] - tmp[1 + i * 4] = (a2 * 2217 + a3 * 5352 + 1812) >> 9; // [-7536,7542] - tmp[2 + i * 4] = (a0 - a1) * 8; - tmp[3 + i * 4] = (a3 * 2217 - a2 * 5352 + 937) >> 9; - } - for (i = 0; i < 4; ++i) { - const int a0 = (tmp[0 + i] + tmp[12 + i]); // 15b - const int a1 = (tmp[4 + i] + tmp[ 8 + i]); - const int a2 = (tmp[4 + i] - tmp[ 8 + i]); - const int a3 = (tmp[0 + i] - tmp[12 + i]); - out[0 + i] = (a0 + a1 + 7) >> 4; // 12b - out[4 + i] = ((a2 * 2217 + a3 * 5352 + 12000) >> 16) + (a3 != 0); - out[8 + i] = (a0 - a1 + 7) >> 4; - out[12+ i] = ((a3 * 2217 - a2 * 5352 + 51000) >> 16); - } -} -#endif // !WEBP_NEON_OMIT_C_CODE - -static void FTransform2_C(const uint8_t* src, const uint8_t* ref, - int16_t* out) { - VP8FTransform(src, ref, out); - VP8FTransform(src + 4, ref + 4, out + 16); -} - -#if !WEBP_NEON_OMIT_C_CODE -static void FTransformWHT_C(const int16_t* in, int16_t* out) { - // input is 12b signed - int32_t tmp[16]; - int i; - for (i = 0; i < 4; ++i, in += 64) { - const int a0 = (in[0 * 16] + in[2 * 16]); // 13b - const int a1 = (in[1 * 16] + in[3 * 16]); - const int a2 = (in[1 * 16] - in[3 * 16]); - const int a3 = (in[0 * 16] - in[2 * 16]); - tmp[0 + i * 4] = a0 + a1; // 14b - tmp[1 + i * 4] = a3 + a2; - tmp[2 + i * 4] = a3 - a2; - tmp[3 + i * 4] = a0 - a1; - } - for (i = 0; i < 4; ++i) { - const int a0 = (tmp[0 + i] + tmp[8 + i]); // 15b - const int a1 = (tmp[4 + i] + tmp[12+ i]); - const int a2 = (tmp[4 + i] - tmp[12+ i]); - const int a3 = (tmp[0 + i] - tmp[8 + i]); - const int b0 = a0 + a1; // 16b - const int b1 = a3 + a2; - const int b2 = a3 - a2; - const int b3 = a0 - a1; - out[ 0 + i] = b0 >> 1; // 15b - out[ 4 + i] = b1 >> 1; - out[ 8 + i] = b2 >> 1; - out[12 + i] = b3 >> 1; - } -} -#endif // !WEBP_NEON_OMIT_C_CODE - -#undef MUL -#undef STORE - -//------------------------------------------------------------------------------ -// Intra predictions - -static WEBP_INLINE void Fill(uint8_t* dst, int value, int size) { - int j; - for (j = 0; j < size; ++j) { - memset(dst + j * BPS, value, size); - } -} - -static WEBP_INLINE void VerticalPred(uint8_t* dst, - const uint8_t* top, int size) { - int j; - if (top != NULL) { - for (j = 0; j < size; ++j) memcpy(dst + j * BPS, top, size); - } else { - Fill(dst, 127, size); - } -} - -static WEBP_INLINE void HorizontalPred(uint8_t* dst, - const uint8_t* left, int size) { - if (left != NULL) { - int j; - for (j = 0; j < size; ++j) { - memset(dst + j * BPS, left[j], size); - } - } else { - Fill(dst, 129, size); - } -} - -static WEBP_INLINE void TrueMotion(uint8_t* dst, const uint8_t* left, - const uint8_t* top, int size) { - int y; - if (left != NULL) { - if (top != NULL) { - const uint8_t* const clip = clip1 + 255 - left[-1]; - for (y = 0; y < size; ++y) { - const uint8_t* const clip_table = clip + left[y]; - int x; - for (x = 0; x < size; ++x) { - dst[x] = clip_table[top[x]]; - } - dst += BPS; - } - } else { - HorizontalPred(dst, left, size); - } - } else { - // true motion without left samples (hence: with default 129 value) - // is equivalent to VE prediction where you just copy the top samples. - // Note that if top samples are not available, the default value is - // then 129, and not 127 as in the VerticalPred case. - if (top != NULL) { - VerticalPred(dst, top, size); - } else { - Fill(dst, 129, size); - } - } -} - -static WEBP_INLINE void DCMode(uint8_t* dst, const uint8_t* left, - const uint8_t* top, - int size, int round, int shift) { - int DC = 0; - int j; - if (top != NULL) { - for (j = 0; j < size; ++j) DC += top[j]; - if (left != NULL) { // top and left present - for (j = 0; j < size; ++j) DC += left[j]; - } else { // top, but no left - DC += DC; - } - DC = (DC + round) >> shift; - } else if (left != NULL) { // left but no top - for (j = 0; j < size; ++j) DC += left[j]; - DC += DC; - DC = (DC + round) >> shift; - } else { // no top, no left, nothing. - DC = 0x80; - } - Fill(dst, DC, size); -} - -//------------------------------------------------------------------------------ -// Chroma 8x8 prediction (paragraph 12.2) - -static void IntraChromaPreds_C(uint8_t* dst, const uint8_t* left, - const uint8_t* top) { - // U block - DCMode(C8DC8 + dst, left, top, 8, 8, 4); - VerticalPred(C8VE8 + dst, top, 8); - HorizontalPred(C8HE8 + dst, left, 8); - TrueMotion(C8TM8 + dst, left, top, 8); - // V block - dst += 8; - if (top != NULL) top += 8; - if (left != NULL) left += 16; - DCMode(C8DC8 + dst, left, top, 8, 8, 4); - VerticalPred(C8VE8 + dst, top, 8); - HorizontalPred(C8HE8 + dst, left, 8); - TrueMotion(C8TM8 + dst, left, top, 8); -} - -//------------------------------------------------------------------------------ -// luma 16x16 prediction (paragraph 12.3) - -static void Intra16Preds_C(uint8_t* dst, - const uint8_t* left, const uint8_t* top) { - DCMode(I16DC16 + dst, left, top, 16, 16, 5); - VerticalPred(I16VE16 + dst, top, 16); - HorizontalPred(I16HE16 + dst, left, 16); - TrueMotion(I16TM16 + dst, left, top, 16); -} - -//------------------------------------------------------------------------------ -// luma 4x4 prediction - -#define DST(x, y) dst[(x) + (y) * BPS] -#define AVG3(a, b, c) ((uint8_t)(((a) + 2 * (b) + (c) + 2) >> 2)) -#define AVG2(a, b) (((a) + (b) + 1) >> 1) - -static void VE4(uint8_t* dst, const uint8_t* top) { // vertical - const uint8_t vals[4] = { - AVG3(top[-1], top[0], top[1]), - AVG3(top[ 0], top[1], top[2]), - AVG3(top[ 1], top[2], top[3]), - AVG3(top[ 2], top[3], top[4]) - }; - int i; - for (i = 0; i < 4; ++i) { - memcpy(dst + i * BPS, vals, 4); - } -} - -static void HE4(uint8_t* dst, const uint8_t* top) { // horizontal - const int X = top[-1]; - const int I = top[-2]; - const int J = top[-3]; - const int K = top[-4]; - const int L = top[-5]; - WebPUint32ToMem(dst + 0 * BPS, 0x01010101U * AVG3(X, I, J)); - WebPUint32ToMem(dst + 1 * BPS, 0x01010101U * AVG3(I, J, K)); - WebPUint32ToMem(dst + 2 * BPS, 0x01010101U * AVG3(J, K, L)); - WebPUint32ToMem(dst + 3 * BPS, 0x01010101U * AVG3(K, L, L)); -} - -static void DC4(uint8_t* dst, const uint8_t* top) { - uint32_t dc = 4; - int i; - for (i = 0; i < 4; ++i) dc += top[i] + top[-5 + i]; - Fill(dst, dc >> 3, 4); -} - -static void RD4(uint8_t* dst, const uint8_t* top) { - const int X = top[-1]; - const int I = top[-2]; - const int J = top[-3]; - const int K = top[-4]; - const int L = top[-5]; - const int A = top[0]; - const int B = top[1]; - const int C = top[2]; - const int D = top[3]; - DST(0, 3) = AVG3(J, K, L); - DST(0, 2) = DST(1, 3) = AVG3(I, J, K); - DST(0, 1) = DST(1, 2) = DST(2, 3) = AVG3(X, I, J); - DST(0, 0) = DST(1, 1) = DST(2, 2) = DST(3, 3) = AVG3(A, X, I); - DST(1, 0) = DST(2, 1) = DST(3, 2) = AVG3(B, A, X); - DST(2, 0) = DST(3, 1) = AVG3(C, B, A); - DST(3, 0) = AVG3(D, C, B); -} - -static void LD4(uint8_t* dst, const uint8_t* top) { - const int A = top[0]; - const int B = top[1]; - const int C = top[2]; - const int D = top[3]; - const int E = top[4]; - const int F = top[5]; - const int G = top[6]; - const int H = top[7]; - DST(0, 0) = AVG3(A, B, C); - DST(1, 0) = DST(0, 1) = AVG3(B, C, D); - DST(2, 0) = DST(1, 1) = DST(0, 2) = AVG3(C, D, E); - DST(3, 0) = DST(2, 1) = DST(1, 2) = DST(0, 3) = AVG3(D, E, F); - DST(3, 1) = DST(2, 2) = DST(1, 3) = AVG3(E, F, G); - DST(3, 2) = DST(2, 3) = AVG3(F, G, H); - DST(3, 3) = AVG3(G, H, H); -} - -static void VR4(uint8_t* dst, const uint8_t* top) { - const int X = top[-1]; - const int I = top[-2]; - const int J = top[-3]; - const int K = top[-4]; - const int A = top[0]; - const int B = top[1]; - const int C = top[2]; - const int D = top[3]; - DST(0, 0) = DST(1, 2) = AVG2(X, A); - DST(1, 0) = DST(2, 2) = AVG2(A, B); - DST(2, 0) = DST(3, 2) = AVG2(B, C); - DST(3, 0) = AVG2(C, D); - - DST(0, 3) = AVG3(K, J, I); - DST(0, 2) = AVG3(J, I, X); - DST(0, 1) = DST(1, 3) = AVG3(I, X, A); - DST(1, 1) = DST(2, 3) = AVG3(X, A, B); - DST(2, 1) = DST(3, 3) = AVG3(A, B, C); - DST(3, 1) = AVG3(B, C, D); -} - -static void VL4(uint8_t* dst, const uint8_t* top) { - const int A = top[0]; - const int B = top[1]; - const int C = top[2]; - const int D = top[3]; - const int E = top[4]; - const int F = top[5]; - const int G = top[6]; - const int H = top[7]; - DST(0, 0) = AVG2(A, B); - DST(1, 0) = DST(0, 2) = AVG2(B, C); - DST(2, 0) = DST(1, 2) = AVG2(C, D); - DST(3, 0) = DST(2, 2) = AVG2(D, E); - - DST(0, 1) = AVG3(A, B, C); - DST(1, 1) = DST(0, 3) = AVG3(B, C, D); - DST(2, 1) = DST(1, 3) = AVG3(C, D, E); - DST(3, 1) = DST(2, 3) = AVG3(D, E, F); - DST(3, 2) = AVG3(E, F, G); - DST(3, 3) = AVG3(F, G, H); -} - -static void HU4(uint8_t* dst, const uint8_t* top) { - const int I = top[-2]; - const int J = top[-3]; - const int K = top[-4]; - const int L = top[-5]; - DST(0, 0) = AVG2(I, J); - DST(2, 0) = DST(0, 1) = AVG2(J, K); - DST(2, 1) = DST(0, 2) = AVG2(K, L); - DST(1, 0) = AVG3(I, J, K); - DST(3, 0) = DST(1, 1) = AVG3(J, K, L); - DST(3, 1) = DST(1, 2) = AVG3(K, L, L); - DST(3, 2) = DST(2, 2) = - DST(0, 3) = DST(1, 3) = DST(2, 3) = DST(3, 3) = L; -} - -static void HD4(uint8_t* dst, const uint8_t* top) { - const int X = top[-1]; - const int I = top[-2]; - const int J = top[-3]; - const int K = top[-4]; - const int L = top[-5]; - const int A = top[0]; - const int B = top[1]; - const int C = top[2]; - - DST(0, 0) = DST(2, 1) = AVG2(I, X); - DST(0, 1) = DST(2, 2) = AVG2(J, I); - DST(0, 2) = DST(2, 3) = AVG2(K, J); - DST(0, 3) = AVG2(L, K); - - DST(3, 0) = AVG3(A, B, C); - DST(2, 0) = AVG3(X, A, B); - DST(1, 0) = DST(3, 1) = AVG3(I, X, A); - DST(1, 1) = DST(3, 2) = AVG3(J, I, X); - DST(1, 2) = DST(3, 3) = AVG3(K, J, I); - DST(1, 3) = AVG3(L, K, J); -} - -static void TM4(uint8_t* dst, const uint8_t* top) { - int x, y; - const uint8_t* const clip = clip1 + 255 - top[-1]; - for (y = 0; y < 4; ++y) { - const uint8_t* const clip_table = clip + top[-2 - y]; - for (x = 0; x < 4; ++x) { - dst[x] = clip_table[top[x]]; - } - dst += BPS; - } -} - -#undef DST -#undef AVG3 -#undef AVG2 - -// Left samples are top[-5 .. -2], top_left is top[-1], top are -// located at top[0..3], and top right is top[4..7] -static void Intra4Preds_C(uint8_t* dst, const uint8_t* top) { - DC4(I4DC4 + dst, top); - TM4(I4TM4 + dst, top); - VE4(I4VE4 + dst, top); - HE4(I4HE4 + dst, top); - RD4(I4RD4 + dst, top); - VR4(I4VR4 + dst, top); - LD4(I4LD4 + dst, top); - VL4(I4VL4 + dst, top); - HD4(I4HD4 + dst, top); - HU4(I4HU4 + dst, top); -} - -//------------------------------------------------------------------------------ -// Metric - -#if !WEBP_NEON_OMIT_C_CODE -static WEBP_INLINE int GetSSE(const uint8_t* a, const uint8_t* b, - int w, int h) { - int count = 0; - int y, x; - for (y = 0; y < h; ++y) { - for (x = 0; x < w; ++x) { - const int diff = (int)a[x] - b[x]; - count += diff * diff; - } - a += BPS; - b += BPS; - } - return count; -} - -static int SSE16x16_C(const uint8_t* a, const uint8_t* b) { - return GetSSE(a, b, 16, 16); -} -static int SSE16x8_C(const uint8_t* a, const uint8_t* b) { - return GetSSE(a, b, 16, 8); -} -static int SSE8x8_C(const uint8_t* a, const uint8_t* b) { - return GetSSE(a, b, 8, 8); -} -static int SSE4x4_C(const uint8_t* a, const uint8_t* b) { - return GetSSE(a, b, 4, 4); -} -#endif // !WEBP_NEON_OMIT_C_CODE - -static void Mean16x4_C(const uint8_t* ref, uint32_t dc[4]) { - int k, x, y; - for (k = 0; k < 4; ++k) { - uint32_t avg = 0; - for (y = 0; y < 4; ++y) { - for (x = 0; x < 4; ++x) { - avg += ref[x + y * BPS]; - } - } - dc[k] = avg; - ref += 4; // go to next 4x4 block. - } -} - -//------------------------------------------------------------------------------ -// Texture distortion -// -// We try to match the spectral content (weighted) between source and -// reconstructed samples. - -#if !WEBP_NEON_OMIT_C_CODE -// Hadamard transform -// Returns the weighted sum of the absolute value of transformed coefficients. -// w[] contains a row-major 4 by 4 symmetric matrix. -static int TTransform(const uint8_t* in, const uint16_t* w) { - int sum = 0; - int tmp[16]; - int i; - // horizontal pass - for (i = 0; i < 4; ++i, in += BPS) { - const int a0 = in[0] + in[2]; - const int a1 = in[1] + in[3]; - const int a2 = in[1] - in[3]; - const int a3 = in[0] - in[2]; - tmp[0 + i * 4] = a0 + a1; - tmp[1 + i * 4] = a3 + a2; - tmp[2 + i * 4] = a3 - a2; - tmp[3 + i * 4] = a0 - a1; - } - // vertical pass - for (i = 0; i < 4; ++i, ++w) { - const int a0 = tmp[0 + i] + tmp[8 + i]; - const int a1 = tmp[4 + i] + tmp[12+ i]; - const int a2 = tmp[4 + i] - tmp[12+ i]; - const int a3 = tmp[0 + i] - tmp[8 + i]; - const int b0 = a0 + a1; - const int b1 = a3 + a2; - const int b2 = a3 - a2; - const int b3 = a0 - a1; - - sum += w[ 0] * abs(b0); - sum += w[ 4] * abs(b1); - sum += w[ 8] * abs(b2); - sum += w[12] * abs(b3); - } - return sum; -} - -static int Disto4x4_C(const uint8_t* const a, const uint8_t* const b, - const uint16_t* const w) { - const int sum1 = TTransform(a, w); - const int sum2 = TTransform(b, w); - return abs(sum2 - sum1) >> 5; -} - -static int Disto16x16_C(const uint8_t* const a, const uint8_t* const b, - const uint16_t* const w) { - int D = 0; - int x, y; - for (y = 0; y < 16 * BPS; y += 4 * BPS) { - for (x = 0; x < 16; x += 4) { - D += Disto4x4_C(a + x + y, b + x + y, w); - } - } - return D; -} -#endif // !WEBP_NEON_OMIT_C_CODE - -//------------------------------------------------------------------------------ -// Quantization -// - -static const uint8_t kZigzag[16] = { - 0, 1, 4, 8, 5, 2, 3, 6, 9, 12, 13, 10, 7, 11, 14, 15 -}; - -// Simple quantization -static int QuantizeBlock_C(int16_t in[16], int16_t out[16], - const VP8Matrix* const mtx) { - int last = -1; - int n; - for (n = 0; n < 16; ++n) { - const int j = kZigzag[n]; - const int sign = (in[j] < 0); - const uint32_t coeff = (sign ? -in[j] : in[j]) + mtx->sharpen_[j]; - if (coeff > mtx->zthresh_[j]) { - const uint32_t Q = mtx->q_[j]; - const uint32_t iQ = mtx->iq_[j]; - const uint32_t B = mtx->bias_[j]; - int level = QUANTDIV(coeff, iQ, B); - if (level > MAX_LEVEL) level = MAX_LEVEL; - if (sign) level = -level; - in[j] = level * (int)Q; - out[n] = level; - if (level) last = n; - } else { - out[n] = 0; - in[j] = 0; - } - } - return (last >= 0); -} - -#if !WEBP_NEON_OMIT_C_CODE || WEBP_NEON_WORK_AROUND_GCC -static int Quantize2Blocks_C(int16_t in[32], int16_t out[32], - const VP8Matrix* const mtx) { - int nz; - nz = VP8EncQuantizeBlock(in + 0 * 16, out + 0 * 16, mtx) << 0; - nz |= VP8EncQuantizeBlock(in + 1 * 16, out + 1 * 16, mtx) << 1; - return nz; -} -#endif // !WEBP_NEON_OMIT_C_CODE || WEBP_NEON_WORK_AROUND_GCC - -//------------------------------------------------------------------------------ -// Block copy - -static WEBP_INLINE void Copy(const uint8_t* src, uint8_t* dst, int w, int h) { - int y; - for (y = 0; y < h; ++y) { - memcpy(dst, src, w); - src += BPS; - dst += BPS; - } -} - -static void Copy4x4_C(const uint8_t* src, uint8_t* dst) { - Copy(src, dst, 4, 4); -} - -static void Copy16x8_C(const uint8_t* src, uint8_t* dst) { - Copy(src, dst, 16, 8); -} - -//------------------------------------------------------------------------------ -// Initialization - -// Speed-critical function pointers. We have to initialize them to the default -// implementations within VP8EncDspInit(). -VP8CHisto VP8CollectHistogram; -VP8Idct VP8ITransform; -VP8Fdct VP8FTransform; -VP8Fdct VP8FTransform2; -VP8WHT VP8FTransformWHT; -VP8Intra4Preds VP8EncPredLuma4; -VP8IntraPreds VP8EncPredLuma16; -VP8IntraPreds VP8EncPredChroma8; -VP8Metric VP8SSE16x16; -VP8Metric VP8SSE8x8; -VP8Metric VP8SSE16x8; -VP8Metric VP8SSE4x4; -VP8WMetric VP8TDisto4x4; -VP8WMetric VP8TDisto16x16; -VP8MeanMetric VP8Mean16x4; -VP8QuantizeBlock VP8EncQuantizeBlock; -VP8Quantize2Blocks VP8EncQuantize2Blocks; -VP8QuantizeBlockWHT VP8EncQuantizeBlockWHT; -VP8BlockCopy VP8Copy4x4; -VP8BlockCopy VP8Copy16x8; - -extern void VP8EncDspInitSSE2(void); -extern void VP8EncDspInitSSE41(void); -extern void VP8EncDspInitNEON(void); -extern void VP8EncDspInitMIPS32(void); -extern void VP8EncDspInitMIPSdspR2(void); -extern void VP8EncDspInitMSA(void); - -WEBP_DSP_INIT_FUNC(VP8EncDspInit) { - VP8DspInit(); // common inverse transforms - InitTables(); - - // default C implementations -#if !WEBP_NEON_OMIT_C_CODE - VP8ITransform = ITransform_C; - VP8FTransform = FTransform_C; - VP8FTransformWHT = FTransformWHT_C; - VP8TDisto4x4 = Disto4x4_C; - VP8TDisto16x16 = Disto16x16_C; - VP8CollectHistogram = CollectHistogram_C; - VP8SSE16x16 = SSE16x16_C; - VP8SSE16x8 = SSE16x8_C; - VP8SSE8x8 = SSE8x8_C; - VP8SSE4x4 = SSE4x4_C; -#endif - -#if !WEBP_NEON_OMIT_C_CODE || WEBP_NEON_WORK_AROUND_GCC - VP8EncQuantizeBlock = QuantizeBlock_C; - VP8EncQuantize2Blocks = Quantize2Blocks_C; -#endif - - VP8FTransform2 = FTransform2_C; - VP8EncPredLuma4 = Intra4Preds_C; - VP8EncPredLuma16 = Intra16Preds_C; - VP8EncPredChroma8 = IntraChromaPreds_C; - VP8Mean16x4 = Mean16x4_C; - VP8EncQuantizeBlockWHT = QuantizeBlock_C; - VP8Copy4x4 = Copy4x4_C; - VP8Copy16x8 = Copy16x8_C; - - // If defined, use CPUInfo() to overwrite some pointers with faster versions. - if (VP8GetCPUInfo != NULL) { -#if defined(WEBP_USE_SSE2) - if (VP8GetCPUInfo(kSSE2)) { - VP8EncDspInitSSE2(); -#if defined(WEBP_USE_SSE41) - if (VP8GetCPUInfo(kSSE4_1)) { - VP8EncDspInitSSE41(); - } -#endif - } -#endif -#if defined(WEBP_USE_MIPS32) - if (VP8GetCPUInfo(kMIPS32)) { - VP8EncDspInitMIPS32(); - } -#endif -#if defined(WEBP_USE_MIPS_DSP_R2) - if (VP8GetCPUInfo(kMIPSdspR2)) { - VP8EncDspInitMIPSdspR2(); - } -#endif -#if defined(WEBP_USE_MSA) - if (VP8GetCPUInfo(kMSA)) { - VP8EncDspInitMSA(); - } -#endif - } - -#if defined(WEBP_USE_NEON) - if (WEBP_NEON_OMIT_C_CODE || - (VP8GetCPUInfo != NULL && VP8GetCPUInfo(kNEON))) { - VP8EncDspInitNEON(); - } -#endif - - assert(VP8ITransform != NULL); - assert(VP8FTransform != NULL); - assert(VP8FTransformWHT != NULL); - assert(VP8TDisto4x4 != NULL); - assert(VP8TDisto16x16 != NULL); - assert(VP8CollectHistogram != NULL); - assert(VP8SSE16x16 != NULL); - assert(VP8SSE16x8 != NULL); - assert(VP8SSE8x8 != NULL); - assert(VP8SSE4x4 != NULL); - assert(VP8EncQuantizeBlock != NULL); - assert(VP8EncQuantize2Blocks != NULL); - assert(VP8FTransform2 != NULL); - assert(VP8EncPredLuma4 != NULL); - assert(VP8EncPredLuma16 != NULL); - assert(VP8EncPredChroma8 != NULL); - assert(VP8Mean16x4 != NULL); - assert(VP8EncQuantizeBlockWHT != NULL); - assert(VP8Copy4x4 != NULL); - assert(VP8Copy16x8 != NULL); -} diff --git a/Extended/libwebp/src/dsp/enc_mips32.c b/Extended/libwebp/src/dsp/enc_mips32.c deleted file mode 100644 index 618f0fc..0000000 --- a/Extended/libwebp/src/dsp/enc_mips32.c +++ /dev/null @@ -1,677 +0,0 @@ -// Copyright 2014 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// MIPS version of speed-critical encoding functions. -// -// Author(s): Djordje Pesut (djordje.pesut@imgtec.com) -// Jovan Zelincevic (jovan.zelincevic@imgtec.com) -// Slobodan Prijic (slobodan.prijic@imgtec.com) - -#include "src/dsp/dsp.h" - -#if defined(WEBP_USE_MIPS32) - -#include "src/dsp/mips_macro.h" -#include "src/enc/vp8i_enc.h" -#include "src/enc/cost_enc.h" - -static const int kC1 = 20091 + (1 << 16); -static const int kC2 = 35468; - -// macro for one vertical pass in ITransformOne -// MUL macro inlined -// temp0..temp15 holds tmp[0]..tmp[15] -// A..D - offsets in bytes to load from in buffer -// TEMP0..TEMP3 - registers for corresponding tmp elements -// TEMP4..TEMP5 - temporary registers -#define VERTICAL_PASS(A, B, C, D, TEMP4, TEMP0, TEMP1, TEMP2, TEMP3) \ - "lh %[temp16], " #A "(%[temp20]) \n\t" \ - "lh %[temp18], " #B "(%[temp20]) \n\t" \ - "lh %[temp17], " #C "(%[temp20]) \n\t" \ - "lh %[temp19], " #D "(%[temp20]) \n\t" \ - "addu %[" #TEMP4 "], %[temp16], %[temp18] \n\t" \ - "subu %[temp16], %[temp16], %[temp18] \n\t" \ - "mul %[" #TEMP0 "], %[temp17], %[kC2] \n\t" \ - "mul %[temp18], %[temp19], %[kC1] \n\t" \ - "mul %[temp17], %[temp17], %[kC1] \n\t" \ - "mul %[temp19], %[temp19], %[kC2] \n\t" \ - "sra %[" #TEMP0 "], %[" #TEMP0 "], 16 \n\n" \ - "sra %[temp18], %[temp18], 16 \n\n" \ - "sra %[temp17], %[temp17], 16 \n\n" \ - "sra %[temp19], %[temp19], 16 \n\n" \ - "subu %[" #TEMP2 "], %[" #TEMP0 "], %[temp18] \n\t" \ - "addu %[" #TEMP3 "], %[temp17], %[temp19] \n\t" \ - "addu %[" #TEMP0 "], %[" #TEMP4 "], %[" #TEMP3 "] \n\t" \ - "addu %[" #TEMP1 "], %[temp16], %[" #TEMP2 "] \n\t" \ - "subu %[" #TEMP2 "], %[temp16], %[" #TEMP2 "] \n\t" \ - "subu %[" #TEMP3 "], %[" #TEMP4 "], %[" #TEMP3 "] \n\t" - -// macro for one horizontal pass in ITransformOne -// MUL and STORE macros inlined -// a = clip_8b(a) is replaced with: a = max(a, 0); a = min(a, 255) -// temp0..temp15 holds tmp[0]..tmp[15] -// A - offset in bytes to load from ref and store to dst buffer -// TEMP0, TEMP4, TEMP8 and TEMP12 - registers for corresponding tmp elements -#define HORIZONTAL_PASS(A, TEMP0, TEMP4, TEMP8, TEMP12) \ - "addiu %[" #TEMP0 "], %[" #TEMP0 "], 4 \n\t" \ - "addu %[temp16], %[" #TEMP0 "], %[" #TEMP8 "] \n\t" \ - "subu %[temp17], %[" #TEMP0 "], %[" #TEMP8 "] \n\t" \ - "mul %[" #TEMP0 "], %[" #TEMP4 "], %[kC2] \n\t" \ - "mul %[" #TEMP8 "], %[" #TEMP12 "], %[kC1] \n\t" \ - "mul %[" #TEMP4 "], %[" #TEMP4 "], %[kC1] \n\t" \ - "mul %[" #TEMP12 "], %[" #TEMP12 "], %[kC2] \n\t" \ - "sra %[" #TEMP0 "], %[" #TEMP0 "], 16 \n\t" \ - "sra %[" #TEMP8 "], %[" #TEMP8 "], 16 \n\t" \ - "sra %[" #TEMP4 "], %[" #TEMP4 "], 16 \n\t" \ - "sra %[" #TEMP12 "], %[" #TEMP12 "], 16 \n\t" \ - "subu %[temp18], %[" #TEMP0 "], %[" #TEMP8 "] \n\t" \ - "addu %[temp19], %[" #TEMP4 "], %[" #TEMP12 "] \n\t" \ - "addu %[" #TEMP0 "], %[temp16], %[temp19] \n\t" \ - "addu %[" #TEMP4 "], %[temp17], %[temp18] \n\t" \ - "subu %[" #TEMP8 "], %[temp17], %[temp18] \n\t" \ - "subu %[" #TEMP12 "], %[temp16], %[temp19] \n\t" \ - "lw %[temp20], 0(%[args]) \n\t" \ - "sra %[" #TEMP0 "], %[" #TEMP0 "], 3 \n\t" \ - "sra %[" #TEMP4 "], %[" #TEMP4 "], 3 \n\t" \ - "sra %[" #TEMP8 "], %[" #TEMP8 "], 3 \n\t" \ - "sra %[" #TEMP12 "], %[" #TEMP12 "], 3 \n\t" \ - "lbu %[temp16], 0+" XSTR(BPS) "*" #A "(%[temp20]) \n\t" \ - "lbu %[temp17], 1+" XSTR(BPS) "*" #A "(%[temp20]) \n\t" \ - "lbu %[temp18], 2+" XSTR(BPS) "*" #A "(%[temp20]) \n\t" \ - "lbu %[temp19], 3+" XSTR(BPS) "*" #A "(%[temp20]) \n\t" \ - "addu %[" #TEMP0 "], %[temp16], %[" #TEMP0 "] \n\t" \ - "addu %[" #TEMP4 "], %[temp17], %[" #TEMP4 "] \n\t" \ - "addu %[" #TEMP8 "], %[temp18], %[" #TEMP8 "] \n\t" \ - "addu %[" #TEMP12 "], %[temp19], %[" #TEMP12 "] \n\t" \ - "slt %[temp16], %[" #TEMP0 "], $zero \n\t" \ - "slt %[temp17], %[" #TEMP4 "], $zero \n\t" \ - "slt %[temp18], %[" #TEMP8 "], $zero \n\t" \ - "slt %[temp19], %[" #TEMP12 "], $zero \n\t" \ - "movn %[" #TEMP0 "], $zero, %[temp16] \n\t" \ - "movn %[" #TEMP4 "], $zero, %[temp17] \n\t" \ - "movn %[" #TEMP8 "], $zero, %[temp18] \n\t" \ - "movn %[" #TEMP12 "], $zero, %[temp19] \n\t" \ - "addiu %[temp20], $zero, 255 \n\t" \ - "slt %[temp16], %[" #TEMP0 "], %[temp20] \n\t" \ - "slt %[temp17], %[" #TEMP4 "], %[temp20] \n\t" \ - "slt %[temp18], %[" #TEMP8 "], %[temp20] \n\t" \ - "slt %[temp19], %[" #TEMP12 "], %[temp20] \n\t" \ - "movz %[" #TEMP0 "], %[temp20], %[temp16] \n\t" \ - "movz %[" #TEMP4 "], %[temp20], %[temp17] \n\t" \ - "lw %[temp16], 8(%[args]) \n\t" \ - "movz %[" #TEMP8 "], %[temp20], %[temp18] \n\t" \ - "movz %[" #TEMP12 "], %[temp20], %[temp19] \n\t" \ - "sb %[" #TEMP0 "], 0+" XSTR(BPS) "*" #A "(%[temp16]) \n\t" \ - "sb %[" #TEMP4 "], 1+" XSTR(BPS) "*" #A "(%[temp16]) \n\t" \ - "sb %[" #TEMP8 "], 2+" XSTR(BPS) "*" #A "(%[temp16]) \n\t" \ - "sb %[" #TEMP12 "], 3+" XSTR(BPS) "*" #A "(%[temp16]) \n\t" - -// Does one or two inverse transforms. -static WEBP_INLINE void ITransformOne_MIPS32(const uint8_t* ref, - const int16_t* in, - uint8_t* dst) { - int temp0, temp1, temp2, temp3, temp4, temp5, temp6; - int temp7, temp8, temp9, temp10, temp11, temp12, temp13; - int temp14, temp15, temp16, temp17, temp18, temp19, temp20; - const int* args[3] = {(const int*)ref, (const int*)in, (const int*)dst}; - - __asm__ volatile( - "lw %[temp20], 4(%[args]) \n\t" - VERTICAL_PASS(0, 16, 8, 24, temp4, temp0, temp1, temp2, temp3) - VERTICAL_PASS(2, 18, 10, 26, temp8, temp4, temp5, temp6, temp7) - VERTICAL_PASS(4, 20, 12, 28, temp12, temp8, temp9, temp10, temp11) - VERTICAL_PASS(6, 22, 14, 30, temp20, temp12, temp13, temp14, temp15) - - HORIZONTAL_PASS(0, temp0, temp4, temp8, temp12) - HORIZONTAL_PASS(1, temp1, temp5, temp9, temp13) - HORIZONTAL_PASS(2, temp2, temp6, temp10, temp14) - HORIZONTAL_PASS(3, temp3, temp7, temp11, temp15) - - : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [temp2]"=&r"(temp2), - [temp3]"=&r"(temp3), [temp4]"=&r"(temp4), [temp5]"=&r"(temp5), - [temp6]"=&r"(temp6), [temp7]"=&r"(temp7), [temp8]"=&r"(temp8), - [temp9]"=&r"(temp9), [temp10]"=&r"(temp10), [temp11]"=&r"(temp11), - [temp12]"=&r"(temp12), [temp13]"=&r"(temp13), [temp14]"=&r"(temp14), - [temp15]"=&r"(temp15), [temp16]"=&r"(temp16), [temp17]"=&r"(temp17), - [temp18]"=&r"(temp18), [temp19]"=&r"(temp19), [temp20]"=&r"(temp20) - : [args]"r"(args), [kC1]"r"(kC1), [kC2]"r"(kC2) - : "memory", "hi", "lo" - ); -} - -static void ITransform_MIPS32(const uint8_t* ref, const int16_t* in, - uint8_t* dst, int do_two) { - ITransformOne_MIPS32(ref, in, dst); - if (do_two) { - ITransformOne_MIPS32(ref + 4, in + 16, dst + 4); - } -} - -#undef VERTICAL_PASS -#undef HORIZONTAL_PASS - -// macro for one pass through for loop in QuantizeBlock -// QUANTDIV macro inlined -// J - offset in bytes (kZigzag[n] * 2) -// K - offset in bytes (kZigzag[n] * 4) -// N - offset in bytes (n * 2) -#define QUANTIZE_ONE(J, K, N) \ - "lh %[temp0], " #J "(%[ppin]) \n\t" \ - "lhu %[temp1], " #J "(%[ppsharpen]) \n\t" \ - "lw %[temp2], " #K "(%[ppzthresh]) \n\t" \ - "sra %[sign], %[temp0], 15 \n\t" \ - "xor %[coeff], %[temp0], %[sign] \n\t" \ - "subu %[coeff], %[coeff], %[sign] \n\t" \ - "addu %[coeff], %[coeff], %[temp1] \n\t" \ - "slt %[temp4], %[temp2], %[coeff] \n\t" \ - "addiu %[temp5], $zero, 0 \n\t" \ - "addiu %[level], $zero, 0 \n\t" \ - "beqz %[temp4], 2f \n\t" \ - "lhu %[temp1], " #J "(%[ppiq]) \n\t" \ - "lw %[temp2], " #K "(%[ppbias]) \n\t" \ - "lhu %[temp3], " #J "(%[ppq]) \n\t" \ - "mul %[level], %[coeff], %[temp1] \n\t" \ - "addu %[level], %[level], %[temp2] \n\t" \ - "sra %[level], %[level], 17 \n\t" \ - "slt %[temp4], %[max_level], %[level] \n\t" \ - "movn %[level], %[max_level], %[temp4] \n\t" \ - "xor %[level], %[level], %[sign] \n\t" \ - "subu %[level], %[level], %[sign] \n\t" \ - "mul %[temp5], %[level], %[temp3] \n\t" \ -"2: \n\t" \ - "sh %[temp5], " #J "(%[ppin]) \n\t" \ - "sh %[level], " #N "(%[pout]) \n\t" - -static int QuantizeBlock_MIPS32(int16_t in[16], int16_t out[16], - const VP8Matrix* const mtx) { - int temp0, temp1, temp2, temp3, temp4, temp5; - int sign, coeff, level, i; - int max_level = MAX_LEVEL; - - int16_t* ppin = &in[0]; - int16_t* pout = &out[0]; - const uint16_t* ppsharpen = &mtx->sharpen_[0]; - const uint32_t* ppzthresh = &mtx->zthresh_[0]; - const uint16_t* ppq = &mtx->q_[0]; - const uint16_t* ppiq = &mtx->iq_[0]; - const uint32_t* ppbias = &mtx->bias_[0]; - - __asm__ volatile( - QUANTIZE_ONE( 0, 0, 0) - QUANTIZE_ONE( 2, 4, 2) - QUANTIZE_ONE( 8, 16, 4) - QUANTIZE_ONE(16, 32, 6) - QUANTIZE_ONE(10, 20, 8) - QUANTIZE_ONE( 4, 8, 10) - QUANTIZE_ONE( 6, 12, 12) - QUANTIZE_ONE(12, 24, 14) - QUANTIZE_ONE(18, 36, 16) - QUANTIZE_ONE(24, 48, 18) - QUANTIZE_ONE(26, 52, 20) - QUANTIZE_ONE(20, 40, 22) - QUANTIZE_ONE(14, 28, 24) - QUANTIZE_ONE(22, 44, 26) - QUANTIZE_ONE(28, 56, 28) - QUANTIZE_ONE(30, 60, 30) - - : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), - [temp2]"=&r"(temp2), [temp3]"=&r"(temp3), - [temp4]"=&r"(temp4), [temp5]"=&r"(temp5), - [sign]"=&r"(sign), [coeff]"=&r"(coeff), - [level]"=&r"(level) - : [pout]"r"(pout), [ppin]"r"(ppin), - [ppiq]"r"(ppiq), [max_level]"r"(max_level), - [ppbias]"r"(ppbias), [ppzthresh]"r"(ppzthresh), - [ppsharpen]"r"(ppsharpen), [ppq]"r"(ppq) - : "memory", "hi", "lo" - ); - - // moved out from macro to increase possibility for earlier breaking - for (i = 15; i >= 0; i--) { - if (out[i]) return 1; - } - return 0; -} - -static int Quantize2Blocks_MIPS32(int16_t in[32], int16_t out[32], - const VP8Matrix* const mtx) { - int nz; - nz = QuantizeBlock_MIPS32(in + 0 * 16, out + 0 * 16, mtx) << 0; - nz |= QuantizeBlock_MIPS32(in + 1 * 16, out + 1 * 16, mtx) << 1; - return nz; -} - -#undef QUANTIZE_ONE - -// macro for one horizontal pass in Disto4x4 (TTransform) -// two calls of function TTransform are merged into single one -// A - offset in bytes to load from a and b buffers -// E..H - offsets in bytes to store first results to tmp buffer -// E1..H1 - offsets in bytes to store second results to tmp buffer -#define HORIZONTAL_PASS(A, E, F, G, H, E1, F1, G1, H1) \ - "lbu %[temp0], 0+" XSTR(BPS) "*" #A "(%[a]) \n\t" \ - "lbu %[temp1], 1+" XSTR(BPS) "*" #A "(%[a]) \n\t" \ - "lbu %[temp2], 2+" XSTR(BPS) "*" #A "(%[a]) \n\t" \ - "lbu %[temp3], 3+" XSTR(BPS) "*" #A "(%[a]) \n\t" \ - "lbu %[temp4], 0+" XSTR(BPS) "*" #A "(%[b]) \n\t" \ - "lbu %[temp5], 1+" XSTR(BPS) "*" #A "(%[b]) \n\t" \ - "lbu %[temp6], 2+" XSTR(BPS) "*" #A "(%[b]) \n\t" \ - "lbu %[temp7], 3+" XSTR(BPS) "*" #A "(%[b]) \n\t" \ - "addu %[temp8], %[temp0], %[temp2] \n\t" \ - "subu %[temp0], %[temp0], %[temp2] \n\t" \ - "addu %[temp2], %[temp1], %[temp3] \n\t" \ - "subu %[temp1], %[temp1], %[temp3] \n\t" \ - "addu %[temp3], %[temp4], %[temp6] \n\t" \ - "subu %[temp4], %[temp4], %[temp6] \n\t" \ - "addu %[temp6], %[temp5], %[temp7] \n\t" \ - "subu %[temp5], %[temp5], %[temp7] \n\t" \ - "addu %[temp7], %[temp8], %[temp2] \n\t" \ - "subu %[temp2], %[temp8], %[temp2] \n\t" \ - "addu %[temp8], %[temp0], %[temp1] \n\t" \ - "subu %[temp0], %[temp0], %[temp1] \n\t" \ - "addu %[temp1], %[temp3], %[temp6] \n\t" \ - "subu %[temp3], %[temp3], %[temp6] \n\t" \ - "addu %[temp6], %[temp4], %[temp5] \n\t" \ - "subu %[temp4], %[temp4], %[temp5] \n\t" \ - "sw %[temp7], " #E "(%[tmp]) \n\t" \ - "sw %[temp2], " #H "(%[tmp]) \n\t" \ - "sw %[temp8], " #F "(%[tmp]) \n\t" \ - "sw %[temp0], " #G "(%[tmp]) \n\t" \ - "sw %[temp1], " #E1 "(%[tmp]) \n\t" \ - "sw %[temp3], " #H1 "(%[tmp]) \n\t" \ - "sw %[temp6], " #F1 "(%[tmp]) \n\t" \ - "sw %[temp4], " #G1 "(%[tmp]) \n\t" - -// macro for one vertical pass in Disto4x4 (TTransform) -// two calls of function TTransform are merged into single one -// since only one accu is available in mips32r1 instruction set -// first is done second call of function TTransform and after -// that first one. -// const int sum1 = TTransform(a, w); -// const int sum2 = TTransform(b, w); -// return abs(sum2 - sum1) >> 5; -// (sum2 - sum1) is calculated with madds (sub2) and msubs (sub1) -// A..D - offsets in bytes to load first results from tmp buffer -// A1..D1 - offsets in bytes to load second results from tmp buffer -// E..H - offsets in bytes to load from w buffer -#define VERTICAL_PASS(A, B, C, D, A1, B1, C1, D1, E, F, G, H) \ - "lw %[temp0], " #A1 "(%[tmp]) \n\t" \ - "lw %[temp1], " #C1 "(%[tmp]) \n\t" \ - "lw %[temp2], " #B1 "(%[tmp]) \n\t" \ - "lw %[temp3], " #D1 "(%[tmp]) \n\t" \ - "addu %[temp8], %[temp0], %[temp1] \n\t" \ - "subu %[temp0], %[temp0], %[temp1] \n\t" \ - "addu %[temp1], %[temp2], %[temp3] \n\t" \ - "subu %[temp2], %[temp2], %[temp3] \n\t" \ - "addu %[temp3], %[temp8], %[temp1] \n\t" \ - "subu %[temp8], %[temp8], %[temp1] \n\t" \ - "addu %[temp1], %[temp0], %[temp2] \n\t" \ - "subu %[temp0], %[temp0], %[temp2] \n\t" \ - "sra %[temp4], %[temp3], 31 \n\t" \ - "sra %[temp5], %[temp1], 31 \n\t" \ - "sra %[temp6], %[temp0], 31 \n\t" \ - "sra %[temp7], %[temp8], 31 \n\t" \ - "xor %[temp3], %[temp3], %[temp4] \n\t" \ - "xor %[temp1], %[temp1], %[temp5] \n\t" \ - "xor %[temp0], %[temp0], %[temp6] \n\t" \ - "xor %[temp8], %[temp8], %[temp7] \n\t" \ - "subu %[temp3], %[temp3], %[temp4] \n\t" \ - "subu %[temp1], %[temp1], %[temp5] \n\t" \ - "subu %[temp0], %[temp0], %[temp6] \n\t" \ - "subu %[temp8], %[temp8], %[temp7] \n\t" \ - "lhu %[temp4], " #E "(%[w]) \n\t" \ - "lhu %[temp5], " #F "(%[w]) \n\t" \ - "lhu %[temp6], " #G "(%[w]) \n\t" \ - "lhu %[temp7], " #H "(%[w]) \n\t" \ - "madd %[temp4], %[temp3] \n\t" \ - "madd %[temp5], %[temp1] \n\t" \ - "madd %[temp6], %[temp0] \n\t" \ - "madd %[temp7], %[temp8] \n\t" \ - "lw %[temp0], " #A "(%[tmp]) \n\t" \ - "lw %[temp1], " #C "(%[tmp]) \n\t" \ - "lw %[temp2], " #B "(%[tmp]) \n\t" \ - "lw %[temp3], " #D "(%[tmp]) \n\t" \ - "addu %[temp8], %[temp0], %[temp1] \n\t" \ - "subu %[temp0], %[temp0], %[temp1] \n\t" \ - "addu %[temp1], %[temp2], %[temp3] \n\t" \ - "subu %[temp2], %[temp2], %[temp3] \n\t" \ - "addu %[temp3], %[temp8], %[temp1] \n\t" \ - "subu %[temp1], %[temp8], %[temp1] \n\t" \ - "addu %[temp8], %[temp0], %[temp2] \n\t" \ - "subu %[temp0], %[temp0], %[temp2] \n\t" \ - "sra %[temp2], %[temp3], 31 \n\t" \ - "xor %[temp3], %[temp3], %[temp2] \n\t" \ - "subu %[temp3], %[temp3], %[temp2] \n\t" \ - "msub %[temp4], %[temp3] \n\t" \ - "sra %[temp2], %[temp8], 31 \n\t" \ - "sra %[temp3], %[temp0], 31 \n\t" \ - "sra %[temp4], %[temp1], 31 \n\t" \ - "xor %[temp8], %[temp8], %[temp2] \n\t" \ - "xor %[temp0], %[temp0], %[temp3] \n\t" \ - "xor %[temp1], %[temp1], %[temp4] \n\t" \ - "subu %[temp8], %[temp8], %[temp2] \n\t" \ - "subu %[temp0], %[temp0], %[temp3] \n\t" \ - "subu %[temp1], %[temp1], %[temp4] \n\t" \ - "msub %[temp5], %[temp8] \n\t" \ - "msub %[temp6], %[temp0] \n\t" \ - "msub %[temp7], %[temp1] \n\t" - -static int Disto4x4_MIPS32(const uint8_t* const a, const uint8_t* const b, - const uint16_t* const w) { - int tmp[32]; - int temp0, temp1, temp2, temp3, temp4, temp5, temp6, temp7, temp8; - - __asm__ volatile( - HORIZONTAL_PASS(0, 0, 4, 8, 12, 64, 68, 72, 76) - HORIZONTAL_PASS(1, 16, 20, 24, 28, 80, 84, 88, 92) - HORIZONTAL_PASS(2, 32, 36, 40, 44, 96, 100, 104, 108) - HORIZONTAL_PASS(3, 48, 52, 56, 60, 112, 116, 120, 124) - "mthi $zero \n\t" - "mtlo $zero \n\t" - VERTICAL_PASS( 0, 16, 32, 48, 64, 80, 96, 112, 0, 8, 16, 24) - VERTICAL_PASS( 4, 20, 36, 52, 68, 84, 100, 116, 2, 10, 18, 26) - VERTICAL_PASS( 8, 24, 40, 56, 72, 88, 104, 120, 4, 12, 20, 28) - VERTICAL_PASS(12, 28, 44, 60, 76, 92, 108, 124, 6, 14, 22, 30) - "mflo %[temp0] \n\t" - "sra %[temp1], %[temp0], 31 \n\t" - "xor %[temp0], %[temp0], %[temp1] \n\t" - "subu %[temp0], %[temp0], %[temp1] \n\t" - "sra %[temp0], %[temp0], 5 \n\t" - - : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [temp2]"=&r"(temp2), - [temp3]"=&r"(temp3), [temp4]"=&r"(temp4), [temp5]"=&r"(temp5), - [temp6]"=&r"(temp6), [temp7]"=&r"(temp7), [temp8]"=&r"(temp8) - : [a]"r"(a), [b]"r"(b), [w]"r"(w), [tmp]"r"(tmp) - : "memory", "hi", "lo" - ); - - return temp0; -} - -#undef VERTICAL_PASS -#undef HORIZONTAL_PASS - -static int Disto16x16_MIPS32(const uint8_t* const a, const uint8_t* const b, - const uint16_t* const w) { - int D = 0; - int x, y; - for (y = 0; y < 16 * BPS; y += 4 * BPS) { - for (x = 0; x < 16; x += 4) { - D += Disto4x4_MIPS32(a + x + y, b + x + y, w); - } - } - return D; -} - -// macro for one horizontal pass in FTransform -// temp0..temp15 holds tmp[0]..tmp[15] -// A - offset in bytes to load from src and ref buffers -// TEMP0..TEMP3 - registers for corresponding tmp elements -#define HORIZONTAL_PASS(A, TEMP0, TEMP1, TEMP2, TEMP3) \ - "lw %[" #TEMP1 "], 0(%[args]) \n\t" \ - "lw %[" #TEMP2 "], 4(%[args]) \n\t" \ - "lbu %[temp16], 0+" XSTR(BPS) "*" #A "(%[" #TEMP1 "]) \n\t" \ - "lbu %[temp17], 0+" XSTR(BPS) "*" #A "(%[" #TEMP2 "]) \n\t" \ - "lbu %[temp18], 1+" XSTR(BPS) "*" #A "(%[" #TEMP1 "]) \n\t" \ - "lbu %[temp19], 1+" XSTR(BPS) "*" #A "(%[" #TEMP2 "]) \n\t" \ - "subu %[temp20], %[temp16], %[temp17] \n\t" \ - "lbu %[temp16], 2+" XSTR(BPS) "*" #A "(%[" #TEMP1 "]) \n\t" \ - "lbu %[temp17], 2+" XSTR(BPS) "*" #A "(%[" #TEMP2 "]) \n\t" \ - "subu %[" #TEMP0 "], %[temp18], %[temp19] \n\t" \ - "lbu %[temp18], 3+" XSTR(BPS) "*" #A "(%[" #TEMP1 "]) \n\t" \ - "lbu %[temp19], 3+" XSTR(BPS) "*" #A "(%[" #TEMP2 "]) \n\t" \ - "subu %[" #TEMP1 "], %[temp16], %[temp17] \n\t" \ - "subu %[" #TEMP2 "], %[temp18], %[temp19] \n\t" \ - "addu %[" #TEMP3 "], %[temp20], %[" #TEMP2 "] \n\t" \ - "subu %[" #TEMP2 "], %[temp20], %[" #TEMP2 "] \n\t" \ - "addu %[temp20], %[" #TEMP0 "], %[" #TEMP1 "] \n\t" \ - "subu %[" #TEMP0 "], %[" #TEMP0 "], %[" #TEMP1 "] \n\t" \ - "mul %[temp16], %[" #TEMP2 "], %[c5352] \n\t" \ - "mul %[temp17], %[" #TEMP2 "], %[c2217] \n\t" \ - "mul %[temp18], %[" #TEMP0 "], %[c5352] \n\t" \ - "mul %[temp19], %[" #TEMP0 "], %[c2217] \n\t" \ - "addu %[" #TEMP1 "], %[" #TEMP3 "], %[temp20] \n\t" \ - "subu %[temp20], %[" #TEMP3 "], %[temp20] \n\t" \ - "sll %[" #TEMP0 "], %[" #TEMP1 "], 3 \n\t" \ - "sll %[" #TEMP2 "], %[temp20], 3 \n\t" \ - "addiu %[temp16], %[temp16], 1812 \n\t" \ - "addiu %[temp17], %[temp17], 937 \n\t" \ - "addu %[temp16], %[temp16], %[temp19] \n\t" \ - "subu %[temp17], %[temp17], %[temp18] \n\t" \ - "sra %[" #TEMP1 "], %[temp16], 9 \n\t" \ - "sra %[" #TEMP3 "], %[temp17], 9 \n\t" - -// macro for one vertical pass in FTransform -// temp0..temp15 holds tmp[0]..tmp[15] -// A..D - offsets in bytes to store to out buffer -// TEMP0, TEMP4, TEMP8 and TEMP12 - registers for corresponding tmp elements -#define VERTICAL_PASS(A, B, C, D, TEMP0, TEMP4, TEMP8, TEMP12) \ - "addu %[temp16], %[" #TEMP0 "], %[" #TEMP12 "] \n\t" \ - "subu %[temp19], %[" #TEMP0 "], %[" #TEMP12 "] \n\t" \ - "addu %[temp17], %[" #TEMP4 "], %[" #TEMP8 "] \n\t" \ - "subu %[temp18], %[" #TEMP4 "], %[" #TEMP8 "] \n\t" \ - "mul %[" #TEMP8 "], %[temp19], %[c2217] \n\t" \ - "mul %[" #TEMP12 "], %[temp18], %[c2217] \n\t" \ - "mul %[" #TEMP4 "], %[temp19], %[c5352] \n\t" \ - "mul %[temp18], %[temp18], %[c5352] \n\t" \ - "addiu %[temp16], %[temp16], 7 \n\t" \ - "addu %[" #TEMP0 "], %[temp16], %[temp17] \n\t" \ - "sra %[" #TEMP0 "], %[" #TEMP0 "], 4 \n\t" \ - "addu %[" #TEMP12 "], %[" #TEMP12 "], %[" #TEMP4 "] \n\t" \ - "subu %[" #TEMP4 "], %[temp16], %[temp17] \n\t" \ - "sra %[" #TEMP4 "], %[" #TEMP4 "], 4 \n\t" \ - "addiu %[" #TEMP8 "], %[" #TEMP8 "], 30000 \n\t" \ - "addiu %[" #TEMP12 "], %[" #TEMP12 "], 12000 \n\t" \ - "addiu %[" #TEMP8 "], %[" #TEMP8 "], 21000 \n\t" \ - "subu %[" #TEMP8 "], %[" #TEMP8 "], %[temp18] \n\t" \ - "sra %[" #TEMP12 "], %[" #TEMP12 "], 16 \n\t" \ - "sra %[" #TEMP8 "], %[" #TEMP8 "], 16 \n\t" \ - "addiu %[temp16], %[" #TEMP12 "], 1 \n\t" \ - "movn %[" #TEMP12 "], %[temp16], %[temp19] \n\t" \ - "sh %[" #TEMP0 "], " #A "(%[temp20]) \n\t" \ - "sh %[" #TEMP4 "], " #C "(%[temp20]) \n\t" \ - "sh %[" #TEMP8 "], " #D "(%[temp20]) \n\t" \ - "sh %[" #TEMP12 "], " #B "(%[temp20]) \n\t" - -static void FTransform_MIPS32(const uint8_t* src, const uint8_t* ref, - int16_t* out) { - int temp0, temp1, temp2, temp3, temp4, temp5, temp6, temp7, temp8; - int temp9, temp10, temp11, temp12, temp13, temp14, temp15, temp16; - int temp17, temp18, temp19, temp20; - const int c2217 = 2217; - const int c5352 = 5352; - const int* const args[3] = - { (const int*)src, (const int*)ref, (const int*)out }; - - __asm__ volatile( - HORIZONTAL_PASS(0, temp0, temp1, temp2, temp3) - HORIZONTAL_PASS(1, temp4, temp5, temp6, temp7) - HORIZONTAL_PASS(2, temp8, temp9, temp10, temp11) - HORIZONTAL_PASS(3, temp12, temp13, temp14, temp15) - "lw %[temp20], 8(%[args]) \n\t" - VERTICAL_PASS(0, 8, 16, 24, temp0, temp4, temp8, temp12) - VERTICAL_PASS(2, 10, 18, 26, temp1, temp5, temp9, temp13) - VERTICAL_PASS(4, 12, 20, 28, temp2, temp6, temp10, temp14) - VERTICAL_PASS(6, 14, 22, 30, temp3, temp7, temp11, temp15) - - : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [temp2]"=&r"(temp2), - [temp3]"=&r"(temp3), [temp4]"=&r"(temp4), [temp5]"=&r"(temp5), - [temp6]"=&r"(temp6), [temp7]"=&r"(temp7), [temp8]"=&r"(temp8), - [temp9]"=&r"(temp9), [temp10]"=&r"(temp10), [temp11]"=&r"(temp11), - [temp12]"=&r"(temp12), [temp13]"=&r"(temp13), [temp14]"=&r"(temp14), - [temp15]"=&r"(temp15), [temp16]"=&r"(temp16), [temp17]"=&r"(temp17), - [temp18]"=&r"(temp18), [temp19]"=&r"(temp19), [temp20]"=&r"(temp20) - : [args]"r"(args), [c2217]"r"(c2217), [c5352]"r"(c5352) - : "memory", "hi", "lo" - ); -} - -#undef VERTICAL_PASS -#undef HORIZONTAL_PASS - -#if !defined(WORK_AROUND_GCC) - -#define GET_SSE_INNER(A, B, C, D) \ - "lbu %[temp0], " #A "(%[a]) \n\t" \ - "lbu %[temp1], " #A "(%[b]) \n\t" \ - "lbu %[temp2], " #B "(%[a]) \n\t" \ - "lbu %[temp3], " #B "(%[b]) \n\t" \ - "lbu %[temp4], " #C "(%[a]) \n\t" \ - "lbu %[temp5], " #C "(%[b]) \n\t" \ - "lbu %[temp6], " #D "(%[a]) \n\t" \ - "lbu %[temp7], " #D "(%[b]) \n\t" \ - "subu %[temp0], %[temp0], %[temp1] \n\t" \ - "subu %[temp2], %[temp2], %[temp3] \n\t" \ - "subu %[temp4], %[temp4], %[temp5] \n\t" \ - "subu %[temp6], %[temp6], %[temp7] \n\t" \ - "madd %[temp0], %[temp0] \n\t" \ - "madd %[temp2], %[temp2] \n\t" \ - "madd %[temp4], %[temp4] \n\t" \ - "madd %[temp6], %[temp6] \n\t" - -#define GET_SSE(A, B, C, D) \ - GET_SSE_INNER(A, A + 1, A + 2, A + 3) \ - GET_SSE_INNER(B, B + 1, B + 2, B + 3) \ - GET_SSE_INNER(C, C + 1, C + 2, C + 3) \ - GET_SSE_INNER(D, D + 1, D + 2, D + 3) - -static int SSE16x16_MIPS32(const uint8_t* a, const uint8_t* b) { - int count; - int temp0, temp1, temp2, temp3, temp4, temp5, temp6, temp7; - - __asm__ volatile( - "mult $zero, $zero \n\t" - - GET_SSE( 0 * BPS, 4 + 0 * BPS, 8 + 0 * BPS, 12 + 0 * BPS) - GET_SSE( 1 * BPS, 4 + 1 * BPS, 8 + 1 * BPS, 12 + 1 * BPS) - GET_SSE( 2 * BPS, 4 + 2 * BPS, 8 + 2 * BPS, 12 + 2 * BPS) - GET_SSE( 3 * BPS, 4 + 3 * BPS, 8 + 3 * BPS, 12 + 3 * BPS) - GET_SSE( 4 * BPS, 4 + 4 * BPS, 8 + 4 * BPS, 12 + 4 * BPS) - GET_SSE( 5 * BPS, 4 + 5 * BPS, 8 + 5 * BPS, 12 + 5 * BPS) - GET_SSE( 6 * BPS, 4 + 6 * BPS, 8 + 6 * BPS, 12 + 6 * BPS) - GET_SSE( 7 * BPS, 4 + 7 * BPS, 8 + 7 * BPS, 12 + 7 * BPS) - GET_SSE( 8 * BPS, 4 + 8 * BPS, 8 + 8 * BPS, 12 + 8 * BPS) - GET_SSE( 9 * BPS, 4 + 9 * BPS, 8 + 9 * BPS, 12 + 9 * BPS) - GET_SSE(10 * BPS, 4 + 10 * BPS, 8 + 10 * BPS, 12 + 10 * BPS) - GET_SSE(11 * BPS, 4 + 11 * BPS, 8 + 11 * BPS, 12 + 11 * BPS) - GET_SSE(12 * BPS, 4 + 12 * BPS, 8 + 12 * BPS, 12 + 12 * BPS) - GET_SSE(13 * BPS, 4 + 13 * BPS, 8 + 13 * BPS, 12 + 13 * BPS) - GET_SSE(14 * BPS, 4 + 14 * BPS, 8 + 14 * BPS, 12 + 14 * BPS) - GET_SSE(15 * BPS, 4 + 15 * BPS, 8 + 15 * BPS, 12 + 15 * BPS) - - "mflo %[count] \n\t" - : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [temp2]"=&r"(temp2), - [temp3]"=&r"(temp3), [temp4]"=&r"(temp4), [temp5]"=&r"(temp5), - [temp6]"=&r"(temp6), [temp7]"=&r"(temp7), [count]"=&r"(count) - : [a]"r"(a), [b]"r"(b) - : "memory", "hi", "lo" - ); - return count; -} - -static int SSE16x8_MIPS32(const uint8_t* a, const uint8_t* b) { - int count; - int temp0, temp1, temp2, temp3, temp4, temp5, temp6, temp7; - - __asm__ volatile( - "mult $zero, $zero \n\t" - - GET_SSE( 0 * BPS, 4 + 0 * BPS, 8 + 0 * BPS, 12 + 0 * BPS) - GET_SSE( 1 * BPS, 4 + 1 * BPS, 8 + 1 * BPS, 12 + 1 * BPS) - GET_SSE( 2 * BPS, 4 + 2 * BPS, 8 + 2 * BPS, 12 + 2 * BPS) - GET_SSE( 3 * BPS, 4 + 3 * BPS, 8 + 3 * BPS, 12 + 3 * BPS) - GET_SSE( 4 * BPS, 4 + 4 * BPS, 8 + 4 * BPS, 12 + 4 * BPS) - GET_SSE( 5 * BPS, 4 + 5 * BPS, 8 + 5 * BPS, 12 + 5 * BPS) - GET_SSE( 6 * BPS, 4 + 6 * BPS, 8 + 6 * BPS, 12 + 6 * BPS) - GET_SSE( 7 * BPS, 4 + 7 * BPS, 8 + 7 * BPS, 12 + 7 * BPS) - - "mflo %[count] \n\t" - : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [temp2]"=&r"(temp2), - [temp3]"=&r"(temp3), [temp4]"=&r"(temp4), [temp5]"=&r"(temp5), - [temp6]"=&r"(temp6), [temp7]"=&r"(temp7), [count]"=&r"(count) - : [a]"r"(a), [b]"r"(b) - : "memory", "hi", "lo" - ); - return count; -} - -static int SSE8x8_MIPS32(const uint8_t* a, const uint8_t* b) { - int count; - int temp0, temp1, temp2, temp3, temp4, temp5, temp6, temp7; - - __asm__ volatile( - "mult $zero, $zero \n\t" - - GET_SSE(0 * BPS, 4 + 0 * BPS, 1 * BPS, 4 + 1 * BPS) - GET_SSE(2 * BPS, 4 + 2 * BPS, 3 * BPS, 4 + 3 * BPS) - GET_SSE(4 * BPS, 4 + 4 * BPS, 5 * BPS, 4 + 5 * BPS) - GET_SSE(6 * BPS, 4 + 6 * BPS, 7 * BPS, 4 + 7 * BPS) - - "mflo %[count] \n\t" - : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [temp2]"=&r"(temp2), - [temp3]"=&r"(temp3), [temp4]"=&r"(temp4), [temp5]"=&r"(temp5), - [temp6]"=&r"(temp6), [temp7]"=&r"(temp7), [count]"=&r"(count) - : [a]"r"(a), [b]"r"(b) - : "memory", "hi", "lo" - ); - return count; -} - -static int SSE4x4_MIPS32(const uint8_t* a, const uint8_t* b) { - int count; - int temp0, temp1, temp2, temp3, temp4, temp5, temp6, temp7; - - __asm__ volatile( - "mult $zero, $zero \n\t" - - GET_SSE(0 * BPS, 1 * BPS, 2 * BPS, 3 * BPS) - - "mflo %[count] \n\t" - : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [temp2]"=&r"(temp2), - [temp3]"=&r"(temp3), [temp4]"=&r"(temp4), [temp5]"=&r"(temp5), - [temp6]"=&r"(temp6), [temp7]"=&r"(temp7), [count]"=&r"(count) - : [a]"r"(a), [b]"r"(b) - : "memory", "hi", "lo" - ); - return count; -} - -#undef GET_SSE -#undef GET_SSE_INNER - -#endif // !WORK_AROUND_GCC - -//------------------------------------------------------------------------------ -// Entry point - -extern void VP8EncDspInitMIPS32(void); - -WEBP_TSAN_IGNORE_FUNCTION void VP8EncDspInitMIPS32(void) { - VP8ITransform = ITransform_MIPS32; - VP8FTransform = FTransform_MIPS32; - - VP8EncQuantizeBlock = QuantizeBlock_MIPS32; - VP8EncQuantize2Blocks = Quantize2Blocks_MIPS32; - - VP8TDisto4x4 = Disto4x4_MIPS32; - VP8TDisto16x16 = Disto16x16_MIPS32; - -#if !defined(WORK_AROUND_GCC) - VP8SSE16x16 = SSE16x16_MIPS32; - VP8SSE8x8 = SSE8x8_MIPS32; - VP8SSE16x8 = SSE16x8_MIPS32; - VP8SSE4x4 = SSE4x4_MIPS32; -#endif -} - -#else // !WEBP_USE_MIPS32 - -WEBP_DSP_INIT_STUB(VP8EncDspInitMIPS32) - -#endif // WEBP_USE_MIPS32 diff --git a/Extended/libwebp/src/dsp/enc_mips_dsp_r2.c b/Extended/libwebp/src/dsp/enc_mips_dsp_r2.c deleted file mode 100644 index 9ddd895..0000000 --- a/Extended/libwebp/src/dsp/enc_mips_dsp_r2.c +++ /dev/null @@ -1,1517 +0,0 @@ -// Copyright 2014 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// MIPS version of speed-critical encoding functions. -// -// Author(s): Darko Laus (darko.laus@imgtec.com) -// Mirko Raus (mirko.raus@imgtec.com) - -#include "src/dsp/dsp.h" - -#if defined(WEBP_USE_MIPS_DSP_R2) - -#include "src/dsp/mips_macro.h" -#include "src/enc/cost_enc.h" -#include "src/enc/vp8i_enc.h" - -static const int kC1 = 20091 + (1 << 16); -static const int kC2 = 35468; - -// O - output -// I - input (macro doesn't change it) -#define ADD_SUB_HALVES_X4(O0, O1, O2, O3, O4, O5, O6, O7, \ - I0, I1, I2, I3, I4, I5, I6, I7) \ - "addq.ph %[" #O0 "], %[" #I0 "], %[" #I1 "] \n\t" \ - "subq.ph %[" #O1 "], %[" #I0 "], %[" #I1 "] \n\t" \ - "addq.ph %[" #O2 "], %[" #I2 "], %[" #I3 "] \n\t" \ - "subq.ph %[" #O3 "], %[" #I2 "], %[" #I3 "] \n\t" \ - "addq.ph %[" #O4 "], %[" #I4 "], %[" #I5 "] \n\t" \ - "subq.ph %[" #O5 "], %[" #I4 "], %[" #I5 "] \n\t" \ - "addq.ph %[" #O6 "], %[" #I6 "], %[" #I7 "] \n\t" \ - "subq.ph %[" #O7 "], %[" #I6 "], %[" #I7 "] \n\t" - -// IO - input/output -#define ABS_X8(IO0, IO1, IO2, IO3, IO4, IO5, IO6, IO7) \ - "absq_s.ph %[" #IO0 "], %[" #IO0 "] \n\t" \ - "absq_s.ph %[" #IO1 "], %[" #IO1 "] \n\t" \ - "absq_s.ph %[" #IO2 "], %[" #IO2 "] \n\t" \ - "absq_s.ph %[" #IO3 "], %[" #IO3 "] \n\t" \ - "absq_s.ph %[" #IO4 "], %[" #IO4 "] \n\t" \ - "absq_s.ph %[" #IO5 "], %[" #IO5 "] \n\t" \ - "absq_s.ph %[" #IO6 "], %[" #IO6 "] \n\t" \ - "absq_s.ph %[" #IO7 "], %[" #IO7 "] \n\t" - -// dpa.w.ph $ac0 temp0 ,temp1 -// $ac += temp0[31..16] * temp1[31..16] + temp0[15..0] * temp1[15..0] -// dpax.w.ph $ac0 temp0 ,temp1 -// $ac += temp0[31..16] * temp1[15..0] + temp0[15..0] * temp1[31..16] -// O - output -// I - input (macro doesn't change it) -#define MUL_HALF(O0, I0, I1, I2, I3, I4, I5, I6, I7, \ - I8, I9, I10, I11, I12, I13, I14, I15) \ - "mult $ac0, $zero, $zero \n\t" \ - "dpa.w.ph $ac0, %[" #I2 "], %[" #I0 "] \n\t" \ - "dpax.w.ph $ac0, %[" #I5 "], %[" #I6 "] \n\t" \ - "dpa.w.ph $ac0, %[" #I8 "], %[" #I9 "] \n\t" \ - "dpax.w.ph $ac0, %[" #I11 "], %[" #I4 "] \n\t" \ - "dpa.w.ph $ac0, %[" #I12 "], %[" #I7 "] \n\t" \ - "dpax.w.ph $ac0, %[" #I13 "], %[" #I1 "] \n\t" \ - "dpa.w.ph $ac0, %[" #I14 "], %[" #I3 "] \n\t" \ - "dpax.w.ph $ac0, %[" #I15 "], %[" #I10 "] \n\t" \ - "mflo %[" #O0 "], $ac0 \n\t" - -#define OUTPUT_EARLY_CLOBBER_REGS_17() \ - OUTPUT_EARLY_CLOBBER_REGS_10(), \ - [temp11]"=&r"(temp11), [temp12]"=&r"(temp12), [temp13]"=&r"(temp13), \ - [temp14]"=&r"(temp14), [temp15]"=&r"(temp15), [temp16]"=&r"(temp16), \ - [temp17]"=&r"(temp17) - -// macro for one horizontal pass in FTransform -// temp0..temp15 holds tmp[0]..tmp[15] -// A - offset in bytes to load from src and ref buffers -// TEMP0..TEMP3 - registers for corresponding tmp elements -#define HORIZONTAL_PASS(A, TEMP0, TEMP1, TEMP2, TEMP3) \ - "lw %[" #TEMP0 "], 0(%[args]) \n\t" \ - "lw %[" #TEMP1 "], 4(%[args]) \n\t" \ - "lw %[" #TEMP2 "], " XSTR(BPS) "*" #A "(%[" #TEMP0 "]) \n\t" \ - "lw %[" #TEMP3 "], " XSTR(BPS) "*" #A "(%[" #TEMP1 "]) \n\t" \ - "preceu.ph.qbl %[" #TEMP0 "], %[" #TEMP2 "] \n\t" \ - "preceu.ph.qbl %[" #TEMP1 "], %[" #TEMP3 "] \n\t" \ - "preceu.ph.qbr %[" #TEMP2 "], %[" #TEMP2 "] \n\t" \ - "preceu.ph.qbr %[" #TEMP3 "], %[" #TEMP3 "] \n\t" \ - "subq.ph %[" #TEMP0 "], %[" #TEMP0 "], %[" #TEMP1 "] \n\t" \ - "subq.ph %[" #TEMP2 "], %[" #TEMP2 "], %[" #TEMP3 "] \n\t" \ - "rotr %[" #TEMP0 "], %[" #TEMP0 "], 16 \n\t" \ - "addq.ph %[" #TEMP1 "], %[" #TEMP2 "], %[" #TEMP0 "] \n\t" \ - "subq.ph %[" #TEMP3 "], %[" #TEMP2 "], %[" #TEMP0 "] \n\t" \ - "seh %[" #TEMP0 "], %[" #TEMP1 "] \n\t" \ - "sra %[temp16], %[" #TEMP1 "], 16 \n\t" \ - "seh %[temp19], %[" #TEMP3 "] \n\t" \ - "sra %[" #TEMP3 "], %[" #TEMP3 "], 16 \n\t" \ - "subu %[" #TEMP2 "], %[" #TEMP0 "], %[temp16] \n\t" \ - "addu %[" #TEMP0 "], %[" #TEMP0 "], %[temp16] \n\t" \ - "mul %[temp17], %[temp19], %[c2217] \n\t" \ - "mul %[temp18], %[" #TEMP3 "], %[c5352] \n\t" \ - "mul %[" #TEMP1 "], %[temp19], %[c5352] \n\t" \ - "mul %[temp16], %[" #TEMP3 "], %[c2217] \n\t" \ - "sll %[" #TEMP2 "], %[" #TEMP2 "], 3 \n\t" \ - "sll %[" #TEMP0 "], %[" #TEMP0 "], 3 \n\t" \ - "subu %[" #TEMP3 "], %[temp17], %[temp18] \n\t" \ - "addu %[" #TEMP1 "], %[temp16], %[" #TEMP1 "] \n\t" \ - "addiu %[" #TEMP3 "], %[" #TEMP3 "], 937 \n\t" \ - "addiu %[" #TEMP1 "], %[" #TEMP1 "], 1812 \n\t" \ - "sra %[" #TEMP3 "], %[" #TEMP3 "], 9 \n\t" \ - "sra %[" #TEMP1 "], %[" #TEMP1 "], 9 \n\t" - -// macro for one vertical pass in FTransform -// temp0..temp15 holds tmp[0]..tmp[15] -// A..D - offsets in bytes to store to out buffer -// TEMP0, TEMP4, TEMP8 and TEMP12 - registers for corresponding tmp elements -#define VERTICAL_PASS(A, B, C, D, TEMP0, TEMP4, TEMP8, TEMP12) \ - "addu %[temp16], %[" #TEMP0 "], %[" #TEMP12 "] \n\t" \ - "subu %[temp19], %[" #TEMP0 "], %[" #TEMP12 "] \n\t" \ - "addu %[temp17], %[" #TEMP4 "], %[" #TEMP8 "] \n\t" \ - "subu %[temp18], %[" #TEMP4 "], %[" #TEMP8 "] \n\t" \ - "mul %[" #TEMP8 "], %[temp19], %[c2217] \n\t" \ - "mul %[" #TEMP12 "], %[temp18], %[c2217] \n\t" \ - "mul %[" #TEMP4 "], %[temp19], %[c5352] \n\t" \ - "mul %[temp18], %[temp18], %[c5352] \n\t" \ - "addiu %[temp16], %[temp16], 7 \n\t" \ - "addu %[" #TEMP0 "], %[temp16], %[temp17] \n\t" \ - "sra %[" #TEMP0 "], %[" #TEMP0 "], 4 \n\t" \ - "addu %[" #TEMP12 "], %[" #TEMP12 "], %[" #TEMP4 "] \n\t" \ - "subu %[" #TEMP4 "], %[temp16], %[temp17] \n\t" \ - "sra %[" #TEMP4 "], %[" #TEMP4 "], 4 \n\t" \ - "addiu %[" #TEMP8 "], %[" #TEMP8 "], 30000 \n\t" \ - "addiu %[" #TEMP12 "], %[" #TEMP12 "], 12000 \n\t" \ - "addiu %[" #TEMP8 "], %[" #TEMP8 "], 21000 \n\t" \ - "subu %[" #TEMP8 "], %[" #TEMP8 "], %[temp18] \n\t" \ - "sra %[" #TEMP12 "], %[" #TEMP12 "], 16 \n\t" \ - "sra %[" #TEMP8 "], %[" #TEMP8 "], 16 \n\t" \ - "addiu %[temp16], %[" #TEMP12 "], 1 \n\t" \ - "movn %[" #TEMP12 "], %[temp16], %[temp19] \n\t" \ - "sh %[" #TEMP0 "], " #A "(%[temp20]) \n\t" \ - "sh %[" #TEMP4 "], " #C "(%[temp20]) \n\t" \ - "sh %[" #TEMP8 "], " #D "(%[temp20]) \n\t" \ - "sh %[" #TEMP12 "], " #B "(%[temp20]) \n\t" - -static void FTransform_MIPSdspR2(const uint8_t* src, const uint8_t* ref, - int16_t* out) { - const int c2217 = 2217; - const int c5352 = 5352; - int temp0, temp1, temp2, temp3, temp4, temp5, temp6, temp7, temp8; - int temp9, temp10, temp11, temp12, temp13, temp14, temp15, temp16; - int temp17, temp18, temp19, temp20; - const int* const args[3] = - { (const int*)src, (const int*)ref, (const int*)out }; - - __asm__ volatile ( - HORIZONTAL_PASS(0, temp0, temp1, temp2, temp3) - HORIZONTAL_PASS(1, temp4, temp5, temp6, temp7) - HORIZONTAL_PASS(2, temp8, temp9, temp10, temp11) - HORIZONTAL_PASS(3, temp12, temp13, temp14, temp15) - "lw %[temp20], 8(%[args]) \n\t" - VERTICAL_PASS(0, 8, 16, 24, temp0, temp4, temp8, temp12) - VERTICAL_PASS(2, 10, 18, 26, temp1, temp5, temp9, temp13) - VERTICAL_PASS(4, 12, 20, 28, temp2, temp6, temp10, temp14) - VERTICAL_PASS(6, 14, 22, 30, temp3, temp7, temp11, temp15) - OUTPUT_EARLY_CLOBBER_REGS_18(), - [temp0]"=&r"(temp0), [temp19]"=&r"(temp19), [temp20]"=&r"(temp20) - : [args]"r"(args), [c2217]"r"(c2217), [c5352]"r"(c5352) - : "memory", "hi", "lo" - ); -} - -#undef VERTICAL_PASS -#undef HORIZONTAL_PASS - -static WEBP_INLINE void ITransformOne(const uint8_t* ref, const int16_t* in, - uint8_t* dst) { - int temp1, temp2, temp3, temp4, temp5, temp6, temp7, temp8, temp9; - int temp10, temp11, temp12, temp13, temp14, temp15, temp16, temp17, temp18; - - __asm__ volatile ( - "ulw %[temp1], 0(%[in]) \n\t" - "ulw %[temp2], 16(%[in]) \n\t" - LOAD_IN_X2(temp5, temp6, 24, 26) - ADD_SUB_HALVES(temp3, temp4, temp1, temp2) - LOAD_IN_X2(temp1, temp2, 8, 10) - MUL_SHIFT_SUM(temp7, temp8, temp9, temp10, temp11, temp12, temp13, temp14, - temp10, temp8, temp9, temp7, temp1, temp2, temp5, temp6, - temp13, temp11, temp14, temp12) - INSERT_HALF_X2(temp8, temp7, temp10, temp9) - "ulw %[temp17], 4(%[in]) \n\t" - "ulw %[temp18], 20(%[in]) \n\t" - ADD_SUB_HALVES(temp1, temp2, temp3, temp8) - ADD_SUB_HALVES(temp5, temp6, temp4, temp7) - ADD_SUB_HALVES(temp7, temp8, temp17, temp18) - LOAD_IN_X2(temp17, temp18, 12, 14) - LOAD_IN_X2(temp9, temp10, 28, 30) - MUL_SHIFT_SUM(temp11, temp12, temp13, temp14, temp15, temp16, temp4, temp17, - temp12, temp14, temp11, temp13, temp17, temp18, temp9, temp10, - temp15, temp4, temp16, temp17) - INSERT_HALF_X2(temp11, temp12, temp13, temp14) - ADD_SUB_HALVES(temp17, temp8, temp8, temp11) - ADD_SUB_HALVES(temp3, temp4, temp7, temp12) - - // horizontal - SRA_16(temp9, temp10, temp11, temp12, temp1, temp2, temp5, temp6) - INSERT_HALF_X2(temp1, temp6, temp5, temp2) - SRA_16(temp13, temp14, temp15, temp16, temp3, temp4, temp17, temp8) - "repl.ph %[temp2], 0x4 \n\t" - INSERT_HALF_X2(temp3, temp8, temp17, temp4) - "addq.ph %[temp1], %[temp1], %[temp2] \n\t" - "addq.ph %[temp6], %[temp6], %[temp2] \n\t" - ADD_SUB_HALVES(temp2, temp4, temp1, temp3) - ADD_SUB_HALVES(temp5, temp7, temp6, temp8) - MUL_SHIFT_SUM(temp1, temp3, temp6, temp8, temp9, temp13, temp17, temp18, - temp3, temp13, temp1, temp9, temp9, temp13, temp11, temp15, - temp6, temp17, temp8, temp18) - MUL_SHIFT_SUM(temp6, temp8, temp18, temp17, temp11, temp15, temp12, temp16, - temp8, temp15, temp6, temp11, temp12, temp16, temp10, temp14, - temp18, temp12, temp17, temp16) - INSERT_HALF_X2(temp1, temp3, temp9, temp13) - INSERT_HALF_X2(temp6, temp8, temp11, temp15) - SHIFT_R_SUM_X2(temp9, temp10, temp11, temp12, temp13, temp14, temp15, - temp16, temp2, temp4, temp5, temp7, temp3, temp1, temp8, - temp6) - PACK_2_HALVES_TO_WORD(temp1, temp2, temp3, temp4, temp9, temp12, temp13, - temp16, temp11, temp10, temp15, temp14) - LOAD_WITH_OFFSET_X4(temp10, temp11, temp14, temp15, ref, - 0, 0, 0, 0, - 0, 1, 2, 3, - BPS) - CONVERT_2_BYTES_TO_HALF(temp5, temp6, temp7, temp8, temp17, temp18, temp10, - temp11, temp10, temp11, temp14, temp15) - STORE_SAT_SUM_X2(temp5, temp6, temp7, temp8, temp17, temp18, temp10, temp11, - temp9, temp12, temp1, temp2, temp13, temp16, temp3, temp4, - dst, 0, 1, 2, 3, BPS) - - OUTPUT_EARLY_CLOBBER_REGS_18() - : [dst]"r"(dst), [in]"r"(in), [kC1]"r"(kC1), [kC2]"r"(kC2), [ref]"r"(ref) - : "memory", "hi", "lo" - ); -} - -static void ITransform_MIPSdspR2(const uint8_t* ref, const int16_t* in, - uint8_t* dst, int do_two) { - ITransformOne(ref, in, dst); - if (do_two) { - ITransformOne(ref + 4, in + 16, dst + 4); - } -} - -static int Disto4x4_MIPSdspR2(const uint8_t* const a, const uint8_t* const b, - const uint16_t* const w) { - int temp1, temp2, temp3, temp4, temp5, temp6, temp7, temp8, temp9; - int temp10, temp11, temp12, temp13, temp14, temp15, temp16, temp17; - - __asm__ volatile ( - LOAD_WITH_OFFSET_X4(temp1, temp2, temp3, temp4, a, - 0, 0, 0, 0, - 0, 1, 2, 3, - BPS) - CONVERT_2_BYTES_TO_HALF(temp5, temp6, temp7, temp8, temp9,temp10, temp11, - temp12, temp1, temp2, temp3, temp4) - ADD_SUB_HALVES_X4(temp1, temp2, temp3, temp4, temp5, temp6, temp7, temp8, - temp5, temp6, temp7, temp8, temp9, temp10, temp11, temp12) - PACK_2_HALVES_TO_WORD(temp9, temp10, temp11, temp12, temp1, temp3, temp5, - temp7, temp2, temp4, temp6, temp8) - ADD_SUB_HALVES_X4(temp2, temp4, temp6, temp8, temp9, temp1, temp3, temp10, - temp1, temp9, temp3, temp10, temp5, temp11, temp7, temp12) - ADD_SUB_HALVES_X4(temp5, temp11, temp7, temp2, temp9, temp3, temp6, temp12, - temp2, temp9, temp6, temp3, temp4, temp1, temp8, temp10) - ADD_SUB_HALVES_X4(temp1, temp4, temp10, temp8, temp7, temp11, temp5, temp2, - temp5, temp7, temp11, temp2, temp9, temp6, temp3, temp12) - ABS_X8(temp1, temp4, temp10, temp8, temp7, temp11, temp5, temp2) - LOAD_WITH_OFFSET_X4(temp3, temp6, temp9, temp12, w, - 0, 4, 8, 12, - 0, 0, 0, 0, - 0) - LOAD_WITH_OFFSET_X4(temp13, temp14, temp15, temp16, w, - 0, 4, 8, 12, - 1, 1, 1, 1, - 16) - MUL_HALF(temp17, temp1, temp2, temp3, temp4, temp5, temp6, temp7, temp8, - temp9, temp10, temp11, temp12, temp13, temp14, temp15, temp16) - LOAD_WITH_OFFSET_X4(temp1, temp2, temp3, temp4, b, - 0, 0, 0, 0, - 0, 1, 2, 3, - BPS) - CONVERT_2_BYTES_TO_HALF(temp5,temp6, temp7, temp8, temp9,temp10, temp11, - temp12, temp1, temp2, temp3, temp4) - ADD_SUB_HALVES_X4(temp1, temp2, temp3, temp4, temp5, temp6, temp7, temp8, - temp5, temp6, temp7, temp8, temp9, temp10, temp11, temp12) - PACK_2_HALVES_TO_WORD(temp9, temp10, temp11, temp12, temp1, temp3, temp5, - temp7, temp2, temp4, temp6, temp8) - ADD_SUB_HALVES_X4(temp2, temp4, temp6, temp8, temp9, temp1, temp3, temp10, - temp1, temp9, temp3, temp10, temp5, temp11, temp7, temp12) - ADD_SUB_HALVES_X4(temp5, temp11, temp7, temp2, temp9, temp3, temp6, temp12, - temp2, temp9, temp6, temp3, temp4, temp1, temp8, temp10) - ADD_SUB_HALVES_X4(temp1, temp4, temp10, temp8, temp7, temp11, temp5, temp2, - temp5, temp7, temp11, temp2, temp9, temp6, temp3, temp12) - ABS_X8(temp1, temp4, temp10, temp8, temp7, temp11, temp5, temp2) - LOAD_WITH_OFFSET_X4(temp3, temp6, temp9, temp12, w, - 0, 4, 8, 12, - 0, 0, 0, 0, - 0) - LOAD_WITH_OFFSET_X4(temp13, temp14, temp15, temp16, w, - 0, 4, 8, 12, - 1, 1, 1, 1, - 16) - MUL_HALF(temp3, temp1, temp2, temp3, temp4, temp5, temp6, temp7, temp8, - temp9, temp10, temp11, temp12, temp13, temp14, temp15, temp16) - OUTPUT_EARLY_CLOBBER_REGS_17() - : [a]"r"(a), [b]"r"(b), [w]"r"(w) - : "memory", "hi", "lo" - ); - return abs(temp3 - temp17) >> 5; -} - -static int Disto16x16_MIPSdspR2(const uint8_t* const a, - const uint8_t* const b, - const uint16_t* const w) { - int D = 0; - int x, y; - for (y = 0; y < 16 * BPS; y += 4 * BPS) { - for (x = 0; x < 16; x += 4) { - D += Disto4x4_MIPSdspR2(a + x + y, b + x + y, w); - } - } - return D; -} - -//------------------------------------------------------------------------------ -// Intra predictions - -#define FILL_PART(J, SIZE) \ - "usw %[value], 0+" #J "*" XSTR(BPS) "(%[dst]) \n\t" \ - "usw %[value], 4+" #J "*" XSTR(BPS) "(%[dst]) \n\t" \ - ".if " #SIZE " == 16 \n\t" \ - "usw %[value], 8+" #J "*" XSTR(BPS) "(%[dst]) \n\t" \ - "usw %[value], 12+" #J "*" XSTR(BPS) "(%[dst]) \n\t" \ - ".endif \n\t" - -#define FILL_8_OR_16(DST, VALUE, SIZE) do { \ - int value = (VALUE); \ - __asm__ volatile ( \ - "replv.qb %[value], %[value] \n\t" \ - FILL_PART( 0, SIZE) \ - FILL_PART( 1, SIZE) \ - FILL_PART( 2, SIZE) \ - FILL_PART( 3, SIZE) \ - FILL_PART( 4, SIZE) \ - FILL_PART( 5, SIZE) \ - FILL_PART( 6, SIZE) \ - FILL_PART( 7, SIZE) \ - ".if " #SIZE " == 16 \n\t" \ - FILL_PART( 8, 16) \ - FILL_PART( 9, 16) \ - FILL_PART(10, 16) \ - FILL_PART(11, 16) \ - FILL_PART(12, 16) \ - FILL_PART(13, 16) \ - FILL_PART(14, 16) \ - FILL_PART(15, 16) \ - ".endif \n\t" \ - : [value]"+&r"(value) \ - : [dst]"r"((DST)) \ - : "memory" \ - ); \ -} while (0) - -#define VERTICAL_PRED(DST, TOP, SIZE) \ -static WEBP_INLINE void VerticalPred##SIZE(uint8_t* (DST), \ - const uint8_t* (TOP)) { \ - int j; \ - if ((TOP)) { \ - for (j = 0; j < (SIZE); ++j) memcpy((DST) + j * BPS, (TOP), (SIZE)); \ - } else { \ - FILL_8_OR_16((DST), 127, (SIZE)); \ - } \ -} - -VERTICAL_PRED(dst, top, 8) -VERTICAL_PRED(dst, top, 16) - -#undef VERTICAL_PRED - -#define HORIZONTAL_PRED(DST, LEFT, SIZE) \ -static WEBP_INLINE void HorizontalPred##SIZE(uint8_t* (DST), \ - const uint8_t* (LEFT)) { \ - if (LEFT) { \ - int j; \ - for (j = 0; j < (SIZE); ++j) { \ - memset((DST) + j * BPS, (LEFT)[j], (SIZE)); \ - } \ - } else { \ - FILL_8_OR_16((DST), 129, (SIZE)); \ - } \ -} - -HORIZONTAL_PRED(dst, left, 8) -HORIZONTAL_PRED(dst, left, 16) - -#undef HORIZONTAL_PRED - -#define CLIPPING() \ - "preceu.ph.qbl %[temp2], %[temp0] \n\t" \ - "preceu.ph.qbr %[temp0], %[temp0] \n\t" \ - "preceu.ph.qbl %[temp3], %[temp1] \n\t" \ - "preceu.ph.qbr %[temp1], %[temp1] \n\t" \ - "addu.ph %[temp2], %[temp2], %[leftY_1] \n\t" \ - "addu.ph %[temp0], %[temp0], %[leftY_1] \n\t" \ - "addu.ph %[temp3], %[temp3], %[leftY_1] \n\t" \ - "addu.ph %[temp1], %[temp1], %[leftY_1] \n\t" \ - "shll_s.ph %[temp2], %[temp2], 7 \n\t" \ - "shll_s.ph %[temp0], %[temp0], 7 \n\t" \ - "shll_s.ph %[temp3], %[temp3], 7 \n\t" \ - "shll_s.ph %[temp1], %[temp1], 7 \n\t" \ - "precrqu_s.qb.ph %[temp0], %[temp2], %[temp0] \n\t" \ - "precrqu_s.qb.ph %[temp1], %[temp3], %[temp1] \n\t" - -#define CLIP_8B_TO_DST(DST, LEFT, TOP, SIZE) do { \ - int leftY_1 = ((int)(LEFT)[y] << 16) + (LEFT)[y]; \ - int temp0, temp1, temp2, temp3; \ - __asm__ volatile ( \ - "replv.ph %[leftY_1], %[leftY_1] \n\t" \ - "ulw %[temp0], 0(%[top]) \n\t" \ - "ulw %[temp1], 4(%[top]) \n\t" \ - "subu.ph %[leftY_1], %[leftY_1], %[left_1] \n\t" \ - CLIPPING() \ - "usw %[temp0], 0(%[dst]) \n\t" \ - "usw %[temp1], 4(%[dst]) \n\t" \ - ".if " #SIZE " == 16 \n\t" \ - "ulw %[temp0], 8(%[top]) \n\t" \ - "ulw %[temp1], 12(%[top]) \n\t" \ - CLIPPING() \ - "usw %[temp0], 8(%[dst]) \n\t" \ - "usw %[temp1], 12(%[dst]) \n\t" \ - ".endif \n\t" \ - : [leftY_1]"+&r"(leftY_1), [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), \ - [temp2]"=&r"(temp2), [temp3]"=&r"(temp3) \ - : [left_1]"r"(left_1), [top]"r"((TOP)), [dst]"r"((DST)) \ - : "memory" \ - ); \ -} while (0) - -#define CLIP_TO_DST(DST, LEFT, TOP, SIZE) do { \ - int y; \ - const int left_1 = ((int)(LEFT)[-1] << 16) + (LEFT)[-1]; \ - for (y = 0; y < (SIZE); ++y) { \ - CLIP_8B_TO_DST((DST), (LEFT), (TOP), (SIZE)); \ - (DST) += BPS; \ - } \ -} while (0) - -#define TRUE_MOTION(DST, LEFT, TOP, SIZE) \ -static WEBP_INLINE void TrueMotion##SIZE(uint8_t* (DST), const uint8_t* (LEFT),\ - const uint8_t* (TOP)) { \ - if ((LEFT) != NULL) { \ - if ((TOP) != NULL) { \ - CLIP_TO_DST((DST), (LEFT), (TOP), (SIZE)); \ - } else { \ - HorizontalPred##SIZE((DST), (LEFT)); \ - } \ - } else { \ - /* true motion without left samples (hence: with default 129 value) */ \ - /* is equivalent to VE prediction where you just copy the top samples. */ \ - /* Note that if top samples are not available, the default value is */ \ - /* then 129, and not 127 as in the VerticalPred case. */ \ - if ((TOP) != NULL) { \ - VerticalPred##SIZE((DST), (TOP)); \ - } else { \ - FILL_8_OR_16((DST), 129, (SIZE)); \ - } \ - } \ -} - -TRUE_MOTION(dst, left, top, 8) -TRUE_MOTION(dst, left, top, 16) - -#undef TRUE_MOTION -#undef CLIP_TO_DST -#undef CLIP_8B_TO_DST -#undef CLIPPING - -static WEBP_INLINE void DCMode16(uint8_t* dst, const uint8_t* left, - const uint8_t* top) { - int DC, DC1; - int temp0, temp1, temp2, temp3; - - __asm__ volatile( - "beqz %[top], 2f \n\t" - LOAD_WITH_OFFSET_X4(temp0, temp1, temp2, temp3, top, - 0, 4, 8, 12, - 0, 0, 0, 0, - 0) - "raddu.w.qb %[temp0], %[temp0] \n\t" - "raddu.w.qb %[temp1], %[temp1] \n\t" - "raddu.w.qb %[temp2], %[temp2] \n\t" - "raddu.w.qb %[temp3], %[temp3] \n\t" - "addu %[temp0], %[temp0], %[temp1] \n\t" - "addu %[temp2], %[temp2], %[temp3] \n\t" - "addu %[DC], %[temp0], %[temp2] \n\t" - "move %[DC1], %[DC] \n\t" - "beqz %[left], 1f \n\t" - LOAD_WITH_OFFSET_X4(temp0, temp1, temp2, temp3, left, - 0, 4, 8, 12, - 0, 0, 0, 0, - 0) - "raddu.w.qb %[temp0], %[temp0] \n\t" - "raddu.w.qb %[temp1], %[temp1] \n\t" - "raddu.w.qb %[temp2], %[temp2] \n\t" - "raddu.w.qb %[temp3], %[temp3] \n\t" - "addu %[temp0], %[temp0], %[temp1] \n\t" - "addu %[temp2], %[temp2], %[temp3] \n\t" - "addu %[DC1], %[temp0], %[temp2] \n\t" - "1: \n\t" - "addu %[DC], %[DC], %[DC1] \n\t" - "j 3f \n\t" - "2: \n\t" - "beqz %[left], 4f \n\t" - LOAD_WITH_OFFSET_X4(temp0, temp1, temp2, temp3, left, - 0, 4, 8, 12, - 0, 0, 0, 0, - 0) - "raddu.w.qb %[temp0], %[temp0] \n\t" - "raddu.w.qb %[temp1], %[temp1] \n\t" - "raddu.w.qb %[temp2], %[temp2] \n\t" - "raddu.w.qb %[temp3], %[temp3] \n\t" - "addu %[temp0], %[temp0], %[temp1] \n\t" - "addu %[temp2], %[temp2], %[temp3] \n\t" - "addu %[DC], %[temp0], %[temp2] \n\t" - "addu %[DC], %[DC], %[DC] \n\t" - "3: \n\t" - "shra_r.w %[DC], %[DC], 5 \n\t" - "j 5f \n\t" - "4: \n\t" - "li %[DC], 0x80 \n\t" - "5: \n\t" - : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [DC]"=&r"(DC), - [temp2]"=&r"(temp2), [temp3]"=&r"(temp3), [DC1]"=&r"(DC1) - : [left]"r"(left), [top]"r"(top) - : "memory" - ); - - FILL_8_OR_16(dst, DC, 16); -} - -static WEBP_INLINE void DCMode8(uint8_t* dst, const uint8_t* left, - const uint8_t* top) { - int DC, DC1; - int temp0, temp1, temp2, temp3; - - __asm__ volatile( - "beqz %[top], 2f \n\t" - "ulw %[temp0], 0(%[top]) \n\t" - "ulw %[temp1], 4(%[top]) \n\t" - "raddu.w.qb %[temp0], %[temp0] \n\t" - "raddu.w.qb %[temp1], %[temp1] \n\t" - "addu %[DC], %[temp0], %[temp1] \n\t" - "move %[DC1], %[DC] \n\t" - "beqz %[left], 1f \n\t" - "ulw %[temp2], 0(%[left]) \n\t" - "ulw %[temp3], 4(%[left]) \n\t" - "raddu.w.qb %[temp2], %[temp2] \n\t" - "raddu.w.qb %[temp3], %[temp3] \n\t" - "addu %[DC1], %[temp2], %[temp3] \n\t" - "1: \n\t" - "addu %[DC], %[DC], %[DC1] \n\t" - "j 3f \n\t" - "2: \n\t" - "beqz %[left], 4f \n\t" - "ulw %[temp2], 0(%[left]) \n\t" - "ulw %[temp3], 4(%[left]) \n\t" - "raddu.w.qb %[temp2], %[temp2] \n\t" - "raddu.w.qb %[temp3], %[temp3] \n\t" - "addu %[DC], %[temp2], %[temp3] \n\t" - "addu %[DC], %[DC], %[DC] \n\t" - "3: \n\t" - "shra_r.w %[DC], %[DC], 4 \n\t" - "j 5f \n\t" - "4: \n\t" - "li %[DC], 0x80 \n\t" - "5: \n\t" - : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [DC]"=&r"(DC), - [temp2]"=&r"(temp2), [temp3]"=&r"(temp3), [DC1]"=&r"(DC1) - : [left]"r"(left), [top]"r"(top) - : "memory" - ); - - FILL_8_OR_16(dst, DC, 8); -} - -static void DC4(uint8_t* dst, const uint8_t* top) { - int temp0, temp1; - __asm__ volatile( - "ulw %[temp0], 0(%[top]) \n\t" - "ulw %[temp1], -5(%[top]) \n\t" - "raddu.w.qb %[temp0], %[temp0] \n\t" - "raddu.w.qb %[temp1], %[temp1] \n\t" - "addu %[temp0], %[temp0], %[temp1] \n\t" - "addiu %[temp0], %[temp0], 4 \n\t" - "srl %[temp0], %[temp0], 3 \n\t" - "replv.qb %[temp0], %[temp0] \n\t" - "usw %[temp0], 0*" XSTR(BPS) "(%[dst]) \n\t" - "usw %[temp0], 1*" XSTR(BPS) "(%[dst]) \n\t" - "usw %[temp0], 2*" XSTR(BPS) "(%[dst]) \n\t" - "usw %[temp0], 3*" XSTR(BPS) "(%[dst]) \n\t" - : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1) - : [top]"r"(top), [dst]"r"(dst) - : "memory" - ); -} - -static void TM4(uint8_t* dst, const uint8_t* top) { - int a10, a32, temp0, temp1, temp2, temp3, temp4, temp5; - const int c35 = 0xff00ff; - __asm__ volatile ( - "lbu %[temp1], 0(%[top]) \n\t" - "lbu %[a10], 1(%[top]) \n\t" - "lbu %[temp2], 2(%[top]) \n\t" - "lbu %[a32], 3(%[top]) \n\t" - "ulw %[temp0], -5(%[top]) \n\t" - "lbu %[temp4], -1(%[top]) \n\t" - "append %[a10], %[temp1], 16 \n\t" - "append %[a32], %[temp2], 16 \n\t" - "replv.ph %[temp4], %[temp4] \n\t" - "shrl.ph %[temp1], %[temp0], 8 \n\t" - "and %[temp0], %[temp0], %[c35] \n\t" - "subu.ph %[temp1], %[temp1], %[temp4] \n\t" - "subu.ph %[temp0], %[temp0], %[temp4] \n\t" - "srl %[temp2], %[temp1], 16 \n\t" - "srl %[temp3], %[temp0], 16 \n\t" - "replv.ph %[temp2], %[temp2] \n\t" - "replv.ph %[temp3], %[temp3] \n\t" - "replv.ph %[temp4], %[temp1] \n\t" - "replv.ph %[temp5], %[temp0] \n\t" - "addu.ph %[temp0], %[temp3], %[a10] \n\t" - "addu.ph %[temp1], %[temp3], %[a32] \n\t" - "addu.ph %[temp3], %[temp2], %[a10] \n\t" - "addu.ph %[temp2], %[temp2], %[a32] \n\t" - "shll_s.ph %[temp0], %[temp0], 7 \n\t" - "shll_s.ph %[temp1], %[temp1], 7 \n\t" - "shll_s.ph %[temp3], %[temp3], 7 \n\t" - "shll_s.ph %[temp2], %[temp2], 7 \n\t" - "precrqu_s.qb.ph %[temp0], %[temp1], %[temp0] \n\t" - "precrqu_s.qb.ph %[temp1], %[temp2], %[temp3] \n\t" - "addu.ph %[temp2], %[temp5], %[a10] \n\t" - "addu.ph %[temp3], %[temp5], %[a32] \n\t" - "addu.ph %[temp5], %[temp4], %[a10] \n\t" - "addu.ph %[temp4], %[temp4], %[a32] \n\t" - "shll_s.ph %[temp2], %[temp2], 7 \n\t" - "shll_s.ph %[temp3], %[temp3], 7 \n\t" - "shll_s.ph %[temp4], %[temp4], 7 \n\t" - "shll_s.ph %[temp5], %[temp5], 7 \n\t" - "precrqu_s.qb.ph %[temp2], %[temp3], %[temp2] \n\t" - "precrqu_s.qb.ph %[temp3], %[temp4], %[temp5] \n\t" - "usw %[temp1], 0*" XSTR(BPS) "(%[dst]) \n\t" - "usw %[temp0], 1*" XSTR(BPS) "(%[dst]) \n\t" - "usw %[temp3], 2*" XSTR(BPS) "(%[dst]) \n\t" - "usw %[temp2], 3*" XSTR(BPS) "(%[dst]) \n\t" - : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [temp2]"=&r"(temp2), - [temp3]"=&r"(temp3), [temp4]"=&r"(temp4), [temp5]"=&r"(temp5), - [a10]"=&r"(a10), [a32]"=&r"(a32) - : [c35]"r"(c35), [top]"r"(top), [dst]"r"(dst) - : "memory" - ); -} - -static void VE4(uint8_t* dst, const uint8_t* top) { - int temp0, temp1, temp2, temp3, temp4, temp5, temp6; - __asm__ volatile( - "ulw %[temp0], -1(%[top]) \n\t" - "ulh %[temp1], 3(%[top]) \n\t" - "preceu.ph.qbr %[temp2], %[temp0] \n\t" - "preceu.ph.qbl %[temp3], %[temp0] \n\t" - "preceu.ph.qbr %[temp4], %[temp1] \n\t" - "packrl.ph %[temp5], %[temp3], %[temp2] \n\t" - "packrl.ph %[temp6], %[temp4], %[temp3] \n\t" - "shll.ph %[temp5], %[temp5], 1 \n\t" - "shll.ph %[temp6], %[temp6], 1 \n\t" - "addq.ph %[temp2], %[temp5], %[temp2] \n\t" - "addq.ph %[temp6], %[temp6], %[temp4] \n\t" - "addq.ph %[temp2], %[temp2], %[temp3] \n\t" - "addq.ph %[temp6], %[temp6], %[temp3] \n\t" - "shra_r.ph %[temp2], %[temp2], 2 \n\t" - "shra_r.ph %[temp6], %[temp6], 2 \n\t" - "precr.qb.ph %[temp4], %[temp6], %[temp2] \n\t" - "usw %[temp4], 0*" XSTR(BPS) "(%[dst]) \n\t" - "usw %[temp4], 1*" XSTR(BPS) "(%[dst]) \n\t" - "usw %[temp4], 2*" XSTR(BPS) "(%[dst]) \n\t" - "usw %[temp4], 3*" XSTR(BPS) "(%[dst]) \n\t" - : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [temp2]"=&r"(temp2), - [temp3]"=&r"(temp3), [temp4]"=&r"(temp4), [temp5]"=&r"(temp5), - [temp6]"=&r"(temp6) - : [top]"r"(top), [dst]"r"(dst) - : "memory" - ); -} - -static void HE4(uint8_t* dst, const uint8_t* top) { - int temp0, temp1, temp2, temp3, temp4, temp5, temp6; - __asm__ volatile( - "ulw %[temp0], -4(%[top]) \n\t" - "lbu %[temp1], -5(%[top]) \n\t" - "preceu.ph.qbr %[temp2], %[temp0] \n\t" - "preceu.ph.qbl %[temp3], %[temp0] \n\t" - "replv.ph %[temp4], %[temp1] \n\t" - "packrl.ph %[temp5], %[temp3], %[temp2] \n\t" - "packrl.ph %[temp6], %[temp2], %[temp4] \n\t" - "shll.ph %[temp5], %[temp5], 1 \n\t" - "shll.ph %[temp6], %[temp6], 1 \n\t" - "addq.ph %[temp3], %[temp3], %[temp5] \n\t" - "addq.ph %[temp3], %[temp3], %[temp2] \n\t" - "addq.ph %[temp2], %[temp2], %[temp6] \n\t" - "addq.ph %[temp2], %[temp2], %[temp4] \n\t" - "shra_r.ph %[temp3], %[temp3], 2 \n\t" - "shra_r.ph %[temp2], %[temp2], 2 \n\t" - "replv.qb %[temp0], %[temp3] \n\t" - "replv.qb %[temp1], %[temp2] \n\t" - "srl %[temp3], %[temp3], 16 \n\t" - "srl %[temp2], %[temp2], 16 \n\t" - "replv.qb %[temp3], %[temp3] \n\t" - "replv.qb %[temp2], %[temp2] \n\t" - "usw %[temp3], 0*" XSTR(BPS) "(%[dst]) \n\t" - "usw %[temp0], 1*" XSTR(BPS) "(%[dst]) \n\t" - "usw %[temp2], 2*" XSTR(BPS) "(%[dst]) \n\t" - "usw %[temp1], 3*" XSTR(BPS) "(%[dst]) \n\t" - : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [temp2]"=&r"(temp2), - [temp3]"=&r"(temp3), [temp4]"=&r"(temp4), [temp5]"=&r"(temp5), - [temp6]"=&r"(temp6) - : [top]"r"(top), [dst]"r"(dst) - : "memory" - ); -} - -static void RD4(uint8_t* dst, const uint8_t* top) { - int temp0, temp1, temp2, temp3, temp4, temp5; - int temp6, temp7, temp8, temp9, temp10, temp11; - __asm__ volatile( - "ulw %[temp0], -5(%[top]) \n\t" - "ulw %[temp1], -1(%[top]) \n\t" - "preceu.ph.qbl %[temp2], %[temp0] \n\t" - "preceu.ph.qbr %[temp3], %[temp0] \n\t" - "preceu.ph.qbr %[temp4], %[temp1] \n\t" - "preceu.ph.qbl %[temp5], %[temp1] \n\t" - "packrl.ph %[temp6], %[temp2], %[temp3] \n\t" - "packrl.ph %[temp7], %[temp4], %[temp2] \n\t" - "packrl.ph %[temp8], %[temp5], %[temp4] \n\t" - "shll.ph %[temp6], %[temp6], 1 \n\t" - "addq.ph %[temp9], %[temp2], %[temp6] \n\t" - "shll.ph %[temp7], %[temp7], 1 \n\t" - "addq.ph %[temp9], %[temp9], %[temp3] \n\t" - "shll.ph %[temp8], %[temp8], 1 \n\t" - "shra_r.ph %[temp9], %[temp9], 2 \n\t" - "addq.ph %[temp10], %[temp4], %[temp7] \n\t" - "addq.ph %[temp11], %[temp5], %[temp8] \n\t" - "addq.ph %[temp10], %[temp10], %[temp2] \n\t" - "addq.ph %[temp11], %[temp11], %[temp4] \n\t" - "shra_r.ph %[temp10], %[temp10], 2 \n\t" - "shra_r.ph %[temp11], %[temp11], 2 \n\t" - "lbu %[temp0], 3(%[top]) \n\t" - "lbu %[temp1], 2(%[top]) \n\t" - "lbu %[temp2], 1(%[top]) \n\t" - "sll %[temp1], %[temp1], 1 \n\t" - "addu %[temp0], %[temp0], %[temp1] \n\t" - "addu %[temp0], %[temp0], %[temp2] \n\t" - "precr.qb.ph %[temp9], %[temp10], %[temp9] \n\t" - "shra_r.w %[temp0], %[temp0], 2 \n\t" - "precr.qb.ph %[temp10], %[temp11], %[temp10] \n\t" - "usw %[temp9], 3*" XSTR(BPS) "(%[dst]) \n\t" - "usw %[temp10], 1*" XSTR(BPS) "(%[dst]) \n\t" - "prepend %[temp9], %[temp11], 8 \n\t" - "prepend %[temp10], %[temp0], 8 \n\t" - "usw %[temp9], 2*" XSTR(BPS) "(%[dst]) \n\t" - "usw %[temp10], 0*" XSTR(BPS) "(%[dst]) \n\t" - : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [temp2]"=&r"(temp2), - [temp3]"=&r"(temp3), [temp4]"=&r"(temp4), [temp5]"=&r"(temp5), - [temp6]"=&r"(temp6), [temp7]"=&r"(temp7), [temp8]"=&r"(temp8), - [temp9]"=&r"(temp9), [temp10]"=&r"(temp10), [temp11]"=&r"(temp11) - : [top]"r"(top), [dst]"r"(dst) - : "memory" - ); -} - -static void VR4(uint8_t* dst, const uint8_t* top) { - int temp0, temp1, temp2, temp3, temp4; - int temp5, temp6, temp7, temp8, temp9; - __asm__ volatile ( - "ulw %[temp0], -4(%[top]) \n\t" - "ulw %[temp1], 0(%[top]) \n\t" - "preceu.ph.qbl %[temp2], %[temp0] \n\t" - "preceu.ph.qbr %[temp0], %[temp0] \n\t" - "preceu.ph.qbla %[temp3], %[temp1] \n\t" - "preceu.ph.qbra %[temp1], %[temp1] \n\t" - "packrl.ph %[temp7], %[temp3], %[temp2] \n\t" - "addqh_r.ph %[temp4], %[temp1], %[temp3] \n\t" - "move %[temp6], %[temp1] \n\t" - "append %[temp1], %[temp2], 16 \n\t" - "shll.ph %[temp9], %[temp6], 1 \n\t" - "addqh_r.ph %[temp5], %[temp7], %[temp6] \n\t" - "shll.ph %[temp8], %[temp7], 1 \n\t" - "addu.ph %[temp3], %[temp7], %[temp3] \n\t" - "addu.ph %[temp1], %[temp1], %[temp6] \n\t" - "packrl.ph %[temp7], %[temp2], %[temp0] \n\t" - "addu.ph %[temp6], %[temp0], %[temp2] \n\t" - "addu.ph %[temp3], %[temp3], %[temp9] \n\t" - "addu.ph %[temp1], %[temp1], %[temp8] \n\t" - "shll.ph %[temp7], %[temp7], 1 \n\t" - "shra_r.ph %[temp3], %[temp3], 2 \n\t" - "shra_r.ph %[temp1], %[temp1], 2 \n\t" - "addu.ph %[temp6], %[temp6], %[temp7] \n\t" - "shra_r.ph %[temp6], %[temp6], 2 \n\t" - "precrq.ph.w %[temp8], %[temp4], %[temp5] \n\t" - "append %[temp4], %[temp5], 16 \n\t" - "precrq.ph.w %[temp2], %[temp3], %[temp1] \n\t" - "append %[temp3], %[temp1], 16 \n\t" - "precr.qb.ph %[temp8], %[temp8], %[temp4] \n\t" - "precr.qb.ph %[temp3], %[temp2], %[temp3] \n\t" - "usw %[temp8], 0*" XSTR(BPS) "(%[dst]) \n\t" - "usw %[temp3], 1*" XSTR(BPS) "(%[dst]) \n\t" - "append %[temp3], %[temp6], 8 \n\t" - "srl %[temp6], %[temp6], 16 \n\t" - "append %[temp8], %[temp6], 8 \n\t" - "usw %[temp3], 3*" XSTR(BPS) "(%[dst]) \n\t" - "usw %[temp8], 2*" XSTR(BPS) "(%[dst]) \n\t" - : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [temp2]"=&r"(temp2), - [temp3]"=&r"(temp3), [temp4]"=&r"(temp4), [temp5]"=&r"(temp5), - [temp6]"=&r"(temp6), [temp7]"=&r"(temp7), [temp8]"=&r"(temp8), - [temp9]"=&r"(temp9) - : [top]"r"(top), [dst]"r"(dst) - : "memory" - ); -} - -static void LD4(uint8_t* dst, const uint8_t* top) { - int temp0, temp1, temp2, temp3, temp4, temp5; - int temp6, temp7, temp8, temp9, temp10, temp11; - __asm__ volatile( - "ulw %[temp0], 0(%[top]) \n\t" - "ulw %[temp1], 4(%[top]) \n\t" - "preceu.ph.qbl %[temp2], %[temp0] \n\t" - "preceu.ph.qbr %[temp3], %[temp0] \n\t" - "preceu.ph.qbr %[temp4], %[temp1] \n\t" - "preceu.ph.qbl %[temp5], %[temp1] \n\t" - "packrl.ph %[temp6], %[temp2], %[temp3] \n\t" - "packrl.ph %[temp7], %[temp4], %[temp2] \n\t" - "packrl.ph %[temp8], %[temp5], %[temp4] \n\t" - "shll.ph %[temp6], %[temp6], 1 \n\t" - "addq.ph %[temp9], %[temp2], %[temp6] \n\t" - "shll.ph %[temp7], %[temp7], 1 \n\t" - "addq.ph %[temp9], %[temp9], %[temp3] \n\t" - "shll.ph %[temp8], %[temp8], 1 \n\t" - "shra_r.ph %[temp9], %[temp9], 2 \n\t" - "addq.ph %[temp10], %[temp4], %[temp7] \n\t" - "addq.ph %[temp11], %[temp5], %[temp8] \n\t" - "addq.ph %[temp10], %[temp10], %[temp2] \n\t" - "addq.ph %[temp11], %[temp11], %[temp4] \n\t" - "shra_r.ph %[temp10], %[temp10], 2 \n\t" - "shra_r.ph %[temp11], %[temp11], 2 \n\t" - "srl %[temp1], %[temp1], 24 \n\t" - "sll %[temp1], %[temp1], 1 \n\t" - "raddu.w.qb %[temp5], %[temp5] \n\t" - "precr.qb.ph %[temp9], %[temp10], %[temp9] \n\t" - "precr.qb.ph %[temp10], %[temp11], %[temp10] \n\t" - "addu %[temp1], %[temp1], %[temp5] \n\t" - "shra_r.w %[temp1], %[temp1], 2 \n\t" - "usw %[temp9], 0*" XSTR(BPS) "(%[dst]) \n\t" - "usw %[temp10], 2*" XSTR(BPS) "(%[dst]) \n\t" - "prepend %[temp9], %[temp11], 8 \n\t" - "prepend %[temp10], %[temp1], 8 \n\t" - "usw %[temp9], 1*" XSTR(BPS) "(%[dst]) \n\t" - "usw %[temp10], 3*" XSTR(BPS) "(%[dst]) \n\t" - : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [temp2]"=&r"(temp2), - [temp3]"=&r"(temp3), [temp4]"=&r"(temp4), [temp5]"=&r"(temp5), - [temp6]"=&r"(temp6), [temp7]"=&r"(temp7), [temp8]"=&r"(temp8), - [temp9]"=&r"(temp9), [temp10]"=&r"(temp10), [temp11]"=&r"(temp11) - : [top]"r"(top), [dst]"r"(dst) - : "memory" - ); -} - -static void VL4(uint8_t* dst, const uint8_t* top) { - int temp0, temp1, temp2, temp3, temp4; - int temp5, temp6, temp7, temp8, temp9; - __asm__ volatile ( - "ulw %[temp0], 0(%[top]) \n\t" - "ulw %[temp1], 4(%[top]) \n\t" - "preceu.ph.qbla %[temp2], %[temp0] \n\t" - "preceu.ph.qbra %[temp0], %[temp0] \n\t" - "preceu.ph.qbl %[temp3], %[temp1] \n\t" - "preceu.ph.qbr %[temp1], %[temp1] \n\t" - "addqh_r.ph %[temp4], %[temp0], %[temp2] \n\t" - "packrl.ph %[temp7], %[temp1], %[temp0] \n\t" - "precrq.ph.w %[temp6], %[temp1], %[temp2] \n\t" - "shll.ph %[temp9], %[temp2], 1 \n\t" - "addqh_r.ph %[temp5], %[temp7], %[temp2] \n\t" - "shll.ph %[temp8], %[temp7], 1 \n\t" - "addu.ph %[temp2], %[temp2], %[temp6] \n\t" - "addu.ph %[temp0], %[temp0], %[temp7] \n\t" - "packrl.ph %[temp7], %[temp3], %[temp1] \n\t" - "addu.ph %[temp6], %[temp1], %[temp3] \n\t" - "addu.ph %[temp2], %[temp2], %[temp8] \n\t" - "addu.ph %[temp0], %[temp0], %[temp9] \n\t" - "shll.ph %[temp7], %[temp7], 1 \n\t" - "shra_r.ph %[temp2], %[temp2], 2 \n\t" - "shra_r.ph %[temp0], %[temp0], 2 \n\t" - "addu.ph %[temp6], %[temp6], %[temp7] \n\t" - "shra_r.ph %[temp6], %[temp6], 2 \n\t" - "precrq.ph.w %[temp8], %[temp5], %[temp4] \n\t" - "append %[temp5], %[temp4], 16 \n\t" - "precrq.ph.w %[temp3], %[temp2], %[temp0] \n\t" - "append %[temp2], %[temp0], 16 \n\t" - "precr.qb.ph %[temp8], %[temp8], %[temp5] \n\t" - "precr.qb.ph %[temp3], %[temp3], %[temp2] \n\t" - "usw %[temp8], 0*" XSTR(BPS) "(%[dst]) \n\t" - "prepend %[temp8], %[temp6], 8 \n\t" - "usw %[temp3], 1*" XSTR(BPS) "(%[dst]) \n\t" - "srl %[temp6], %[temp6], 16 \n\t" - "prepend %[temp3], %[temp6], 8 \n\t" - "usw %[temp8], 2*" XSTR(BPS) "(%[dst]) \n\t" - "usw %[temp3], 3*" XSTR(BPS) "(%[dst]) \n\t" - : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [temp2]"=&r"(temp2), - [temp3]"=&r"(temp3), [temp4]"=&r"(temp4), [temp5]"=&r"(temp5), - [temp6]"=&r"(temp6), [temp7]"=&r"(temp7), [temp8]"=&r"(temp8), - [temp9]"=&r"(temp9) - : [top]"r"(top), [dst]"r"(dst) - : "memory" - ); -} - -static void HD4(uint8_t* dst, const uint8_t* top) { - int temp0, temp1, temp2, temp3, temp4; - int temp5, temp6, temp7, temp8, temp9; - __asm__ volatile ( - "ulw %[temp0], -5(%[top]) \n\t" - "ulw %[temp1], -1(%[top]) \n\t" - "preceu.ph.qbla %[temp2], %[temp0] \n\t" - "preceu.ph.qbra %[temp0], %[temp0] \n\t" - "preceu.ph.qbl %[temp3], %[temp1] \n\t" - "preceu.ph.qbr %[temp1], %[temp1] \n\t" - "addqh_r.ph %[temp4], %[temp0], %[temp2] \n\t" - "packrl.ph %[temp7], %[temp1], %[temp0] \n\t" - "precrq.ph.w %[temp6], %[temp1], %[temp2] \n\t" - "shll.ph %[temp9], %[temp2], 1 \n\t" - "addqh_r.ph %[temp5], %[temp7], %[temp2] \n\t" - "shll.ph %[temp8], %[temp7], 1 \n\t" - "addu.ph %[temp2], %[temp2], %[temp6] \n\t" - "addu.ph %[temp0], %[temp0], %[temp7] \n\t" - "packrl.ph %[temp7], %[temp3], %[temp1] \n\t" - "addu.ph %[temp6], %[temp1], %[temp3] \n\t" - "addu.ph %[temp2], %[temp2], %[temp8] \n\t" - "addu.ph %[temp0], %[temp0], %[temp9] \n\t" - "shll.ph %[temp7], %[temp7], 1 \n\t" - "shra_r.ph %[temp2], %[temp2], 2 \n\t" - "shra_r.ph %[temp0], %[temp0], 2 \n\t" - "addu.ph %[temp6], %[temp6], %[temp7] \n\t" - "shra_r.ph %[temp6], %[temp6], 2 \n\t" - "precrq.ph.w %[temp1], %[temp2], %[temp5] \n\t" - "precrq.ph.w %[temp3], %[temp0], %[temp4] \n\t" - "precr.qb.ph %[temp7], %[temp6], %[temp1] \n\t" - "precr.qb.ph %[temp6], %[temp1], %[temp3] \n\t" - "usw %[temp7], 0*" XSTR(BPS) "(%[dst]) \n\t" - "usw %[temp6], 1*" XSTR(BPS) "(%[dst]) \n\t" - "append %[temp2], %[temp5], 16 \n\t" - "append %[temp0], %[temp4], 16 \n\t" - "precr.qb.ph %[temp5], %[temp3], %[temp2] \n\t" - "precr.qb.ph %[temp4], %[temp2], %[temp0] \n\t" - "usw %[temp5], 2*" XSTR(BPS) "(%[dst]) \n\t" - "usw %[temp4], 3*" XSTR(BPS) "(%[dst]) \n\t" - : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [temp2]"=&r"(temp2), - [temp3]"=&r"(temp3), [temp4]"=&r"(temp4), [temp5]"=&r"(temp5), - [temp6]"=&r"(temp6), [temp7]"=&r"(temp7), [temp8]"=&r"(temp8), - [temp9]"=&r"(temp9) - : [top]"r"(top), [dst]"r"(dst) - : "memory" - ); -} - -static void HU4(uint8_t* dst, const uint8_t* top) { - int temp0, temp1, temp2, temp3, temp4, temp5, temp6, temp7; - __asm__ volatile ( - "ulw %[temp0], -5(%[top]) \n\t" - "preceu.ph.qbl %[temp1], %[temp0] \n\t" - "preceu.ph.qbr %[temp2], %[temp0] \n\t" - "packrl.ph %[temp3], %[temp1], %[temp2] \n\t" - "replv.qb %[temp7], %[temp2] \n\t" - "addqh_r.ph %[temp4], %[temp1], %[temp3] \n\t" - "addqh_r.ph %[temp5], %[temp3], %[temp2] \n\t" - "shll.ph %[temp6], %[temp3], 1 \n\t" - "addu.ph %[temp3], %[temp2], %[temp3] \n\t" - "addu.ph %[temp6], %[temp1], %[temp6] \n\t" - "shll.ph %[temp0], %[temp2], 1 \n\t" - "addu.ph %[temp6], %[temp6], %[temp2] \n\t" - "addu.ph %[temp0], %[temp3], %[temp0] \n\t" - "shra_r.ph %[temp6], %[temp6], 2 \n\t" - "shra_r.ph %[temp0], %[temp0], 2 \n\t" - "packrl.ph %[temp3], %[temp6], %[temp5] \n\t" - "precrq.ph.w %[temp2], %[temp6], %[temp4] \n\t" - "append %[temp0], %[temp5], 16 \n\t" - "precr.qb.ph %[temp3], %[temp3], %[temp2] \n\t" - "usw %[temp3], 0*" XSTR(BPS) "(%[dst]) \n\t" - "precr.qb.ph %[temp1], %[temp7], %[temp0] \n\t" - "usw %[temp7], 3*" XSTR(BPS) "(%[dst]) \n\t" - "packrl.ph %[temp2], %[temp1], %[temp3] \n\t" - "usw %[temp1], 2*" XSTR(BPS) "(%[dst]) \n\t" - "usw %[temp2], 1*" XSTR(BPS) "(%[dst]) \n\t" - : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [temp2]"=&r"(temp2), - [temp3]"=&r"(temp3), [temp4]"=&r"(temp4), [temp5]"=&r"(temp5), - [temp6]"=&r"(temp6), [temp7]"=&r"(temp7) - : [top]"r"(top), [dst]"r"(dst) - : "memory" - ); -} - -//------------------------------------------------------------------------------ -// Chroma 8x8 prediction (paragraph 12.2) - -static void IntraChromaPreds_MIPSdspR2(uint8_t* dst, const uint8_t* left, - const uint8_t* top) { - // U block - DCMode8(C8DC8 + dst, left, top); - VerticalPred8(C8VE8 + dst, top); - HorizontalPred8(C8HE8 + dst, left); - TrueMotion8(C8TM8 + dst, left, top); - // V block - dst += 8; - if (top) top += 8; - if (left) left += 16; - DCMode8(C8DC8 + dst, left, top); - VerticalPred8(C8VE8 + dst, top); - HorizontalPred8(C8HE8 + dst, left); - TrueMotion8(C8TM8 + dst, left, top); -} - -//------------------------------------------------------------------------------ -// luma 16x16 prediction (paragraph 12.3) - -static void Intra16Preds_MIPSdspR2(uint8_t* dst, - const uint8_t* left, const uint8_t* top) { - DCMode16(I16DC16 + dst, left, top); - VerticalPred16(I16VE16 + dst, top); - HorizontalPred16(I16HE16 + dst, left); - TrueMotion16(I16TM16 + dst, left, top); -} - -// Left samples are top[-5 .. -2], top_left is top[-1], top are -// located at top[0..3], and top right is top[4..7] -static void Intra4Preds_MIPSdspR2(uint8_t* dst, const uint8_t* top) { - DC4(I4DC4 + dst, top); - TM4(I4TM4 + dst, top); - VE4(I4VE4 + dst, top); - HE4(I4HE4 + dst, top); - RD4(I4RD4 + dst, top); - VR4(I4VR4 + dst, top); - LD4(I4LD4 + dst, top); - VL4(I4VL4 + dst, top); - HD4(I4HD4 + dst, top); - HU4(I4HU4 + dst, top); -} - -//------------------------------------------------------------------------------ -// Metric - -#if !defined(WORK_AROUND_GCC) - -#define GET_SSE_INNER(A) \ - "lw %[temp0], " #A "(%[a]) \n\t" \ - "lw %[temp1], " #A "(%[b]) \n\t" \ - "preceu.ph.qbr %[temp2], %[temp0] \n\t" \ - "preceu.ph.qbl %[temp0], %[temp0] \n\t" \ - "preceu.ph.qbr %[temp3], %[temp1] \n\t" \ - "preceu.ph.qbl %[temp1], %[temp1] \n\t" \ - "subq.ph %[temp2], %[temp2], %[temp3] \n\t" \ - "subq.ph %[temp0], %[temp0], %[temp1] \n\t" \ - "dpa.w.ph $ac0, %[temp2], %[temp2] \n\t" \ - "dpa.w.ph $ac0, %[temp0], %[temp0] \n\t" - -#define GET_SSE(A, B, C, D) \ - GET_SSE_INNER(A) \ - GET_SSE_INNER(B) \ - GET_SSE_INNER(C) \ - GET_SSE_INNER(D) - -static int SSE16x16_MIPSdspR2(const uint8_t* a, const uint8_t* b) { - int count; - int temp0, temp1, temp2, temp3; - __asm__ volatile ( - "mult $zero, $zero \n\t" - GET_SSE( 0 * BPS, 4 + 0 * BPS, 8 + 0 * BPS, 12 + 0 * BPS) - GET_SSE( 1 * BPS, 4 + 1 * BPS, 8 + 1 * BPS, 12 + 1 * BPS) - GET_SSE( 2 * BPS, 4 + 2 * BPS, 8 + 2 * BPS, 12 + 2 * BPS) - GET_SSE( 3 * BPS, 4 + 3 * BPS, 8 + 3 * BPS, 12 + 3 * BPS) - GET_SSE( 4 * BPS, 4 + 4 * BPS, 8 + 4 * BPS, 12 + 4 * BPS) - GET_SSE( 5 * BPS, 4 + 5 * BPS, 8 + 5 * BPS, 12 + 5 * BPS) - GET_SSE( 6 * BPS, 4 + 6 * BPS, 8 + 6 * BPS, 12 + 6 * BPS) - GET_SSE( 7 * BPS, 4 + 7 * BPS, 8 + 7 * BPS, 12 + 7 * BPS) - GET_SSE( 8 * BPS, 4 + 8 * BPS, 8 + 8 * BPS, 12 + 8 * BPS) - GET_SSE( 9 * BPS, 4 + 9 * BPS, 8 + 9 * BPS, 12 + 9 * BPS) - GET_SSE(10 * BPS, 4 + 10 * BPS, 8 + 10 * BPS, 12 + 10 * BPS) - GET_SSE(11 * BPS, 4 + 11 * BPS, 8 + 11 * BPS, 12 + 11 * BPS) - GET_SSE(12 * BPS, 4 + 12 * BPS, 8 + 12 * BPS, 12 + 12 * BPS) - GET_SSE(13 * BPS, 4 + 13 * BPS, 8 + 13 * BPS, 12 + 13 * BPS) - GET_SSE(14 * BPS, 4 + 14 * BPS, 8 + 14 * BPS, 12 + 14 * BPS) - GET_SSE(15 * BPS, 4 + 15 * BPS, 8 + 15 * BPS, 12 + 15 * BPS) - "mflo %[count] \n\t" - : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [temp2]"=&r"(temp2), - [temp3]"=&r"(temp3), [count]"=&r"(count) - : [a]"r"(a), [b]"r"(b) - : "memory", "hi", "lo" - ); - return count; -} - -static int SSE16x8_MIPSdspR2(const uint8_t* a, const uint8_t* b) { - int count; - int temp0, temp1, temp2, temp3; - __asm__ volatile ( - "mult $zero, $zero \n\t" - GET_SSE( 0 * BPS, 4 + 0 * BPS, 8 + 0 * BPS, 12 + 0 * BPS) - GET_SSE( 1 * BPS, 4 + 1 * BPS, 8 + 1 * BPS, 12 + 1 * BPS) - GET_SSE( 2 * BPS, 4 + 2 * BPS, 8 + 2 * BPS, 12 + 2 * BPS) - GET_SSE( 3 * BPS, 4 + 3 * BPS, 8 + 3 * BPS, 12 + 3 * BPS) - GET_SSE( 4 * BPS, 4 + 4 * BPS, 8 + 4 * BPS, 12 + 4 * BPS) - GET_SSE( 5 * BPS, 4 + 5 * BPS, 8 + 5 * BPS, 12 + 5 * BPS) - GET_SSE( 6 * BPS, 4 + 6 * BPS, 8 + 6 * BPS, 12 + 6 * BPS) - GET_SSE( 7 * BPS, 4 + 7 * BPS, 8 + 7 * BPS, 12 + 7 * BPS) - "mflo %[count] \n\t" - : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [temp2]"=&r"(temp2), - [temp3]"=&r"(temp3), [count]"=&r"(count) - : [a]"r"(a), [b]"r"(b) - : "memory", "hi", "lo" - ); - return count; -} - -static int SSE8x8_MIPSdspR2(const uint8_t* a, const uint8_t* b) { - int count; - int temp0, temp1, temp2, temp3; - __asm__ volatile ( - "mult $zero, $zero \n\t" - GET_SSE(0 * BPS, 4 + 0 * BPS, 1 * BPS, 4 + 1 * BPS) - GET_SSE(2 * BPS, 4 + 2 * BPS, 3 * BPS, 4 + 3 * BPS) - GET_SSE(4 * BPS, 4 + 4 * BPS, 5 * BPS, 4 + 5 * BPS) - GET_SSE(6 * BPS, 4 + 6 * BPS, 7 * BPS, 4 + 7 * BPS) - "mflo %[count] \n\t" - : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [temp2]"=&r"(temp2), - [temp3]"=&r"(temp3), [count]"=&r"(count) - : [a]"r"(a), [b]"r"(b) - : "memory", "hi", "lo" - ); - return count; -} - -static int SSE4x4_MIPSdspR2(const uint8_t* a, const uint8_t* b) { - int count; - int temp0, temp1, temp2, temp3; - __asm__ volatile ( - "mult $zero, $zero \n\t" - GET_SSE(0 * BPS, 1 * BPS, 2 * BPS, 3 * BPS) - "mflo %[count] \n\t" - : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [temp2]"=&r"(temp2), - [temp3]"=&r"(temp3), [count]"=&r"(count) - : [a]"r"(a), [b]"r"(b) - : "memory", "hi", "lo" - ); - return count; -} - -#undef GET_SSE -#undef GET_SSE_INNER - -#endif // !WORK_AROUND_GCC - -#undef FILL_8_OR_16 -#undef FILL_PART -#undef OUTPUT_EARLY_CLOBBER_REGS_17 -#undef MUL_HALF -#undef ABS_X8 -#undef ADD_SUB_HALVES_X4 - -//------------------------------------------------------------------------------ -// Quantization -// - -// macro for one pass through for loop in QuantizeBlock reading 2 values at time -// QUANTDIV macro inlined -// J - offset in bytes (kZigzag[n] * 2) -// K - offset in bytes (kZigzag[n] * 4) -// N - offset in bytes (n * 2) -// N1 - offset in bytes ((n + 1) * 2) -#define QUANTIZE_ONE(J, K, N, N1) \ - "ulw %[temp1], " #J "(%[ppin]) \n\t" \ - "ulw %[temp2], " #J "(%[ppsharpen]) \n\t" \ - "lhu %[temp3], " #K "(%[ppzthresh]) \n\t" \ - "lhu %[temp6], " #K "+4(%[ppzthresh]) \n\t" \ - "absq_s.ph %[temp4], %[temp1] \n\t" \ - "ins %[temp3], %[temp6], 16, 16 \n\t" \ - "addu.ph %[coeff], %[temp4], %[temp2] \n\t" \ - "shra.ph %[sign], %[temp1], 15 \n\t" \ - "li %[level], 0x10001 \n\t" \ - "cmp.lt.ph %[temp3], %[coeff] \n\t" \ - "lhu %[temp1], " #J "(%[ppiq]) \n\t" \ - "pick.ph %[temp5], %[level], $0 \n\t" \ - "lw %[temp2], " #K "(%[ppbias]) \n\t" \ - "beqz %[temp5], 0f \n\t" \ - "lhu %[temp3], " #J "(%[ppq]) \n\t" \ - "beq %[temp5], %[level], 1f \n\t" \ - "andi %[temp5], %[temp5], 0x1 \n\t" \ - "andi %[temp4], %[coeff], 0xffff \n\t" \ - "beqz %[temp5], 2f \n\t" \ - "mul %[level], %[temp4], %[temp1] \n\t" \ - "sh $0, " #J "+2(%[ppin]) \n\t" \ - "sh $0, " #N1 "(%[pout]) \n\t" \ - "addu %[level], %[level], %[temp2] \n\t" \ - "sra %[level], %[level], 17 \n\t" \ - "slt %[temp4], %[max_level], %[level] \n\t" \ - "movn %[level], %[max_level], %[temp4] \n\t" \ - "andi %[temp6], %[sign], 0xffff \n\t" \ - "xor %[level], %[level], %[temp6] \n\t" \ - "subu %[level], %[level], %[temp6] \n\t" \ - "mul %[temp5], %[level], %[temp3] \n\t" \ - "or %[ret], %[ret], %[level] \n\t" \ - "sh %[level], " #N "(%[pout]) \n\t" \ - "sh %[temp5], " #J "(%[ppin]) \n\t" \ - "j 3f \n\t" \ -"2: \n\t" \ - "lhu %[temp1], " #J "+2(%[ppiq]) \n\t" \ - "srl %[temp5], %[coeff], 16 \n\t" \ - "mul %[level], %[temp5], %[temp1] \n\t" \ - "lw %[temp2], " #K "+4(%[ppbias]) \n\t" \ - "lhu %[temp3], " #J "+2(%[ppq]) \n\t" \ - "addu %[level], %[level], %[temp2] \n\t" \ - "sra %[level], %[level], 17 \n\t" \ - "srl %[temp6], %[sign], 16 \n\t" \ - "slt %[temp4], %[max_level], %[level] \n\t" \ - "movn %[level], %[max_level], %[temp4] \n\t" \ - "xor %[level], %[level], %[temp6] \n\t" \ - "subu %[level], %[level], %[temp6] \n\t" \ - "mul %[temp5], %[level], %[temp3] \n\t" \ - "sh $0, " #J "(%[ppin]) \n\t" \ - "sh $0, " #N "(%[pout]) \n\t" \ - "or %[ret], %[ret], %[level] \n\t" \ - "sh %[temp5], " #J "+2(%[ppin]) \n\t" \ - "sh %[level], " #N1 "(%[pout]) \n\t" \ - "j 3f \n\t" \ -"1: \n\t" \ - "lhu %[temp1], " #J "(%[ppiq]) \n\t" \ - "lw %[temp2], " #K "(%[ppbias]) \n\t" \ - "ulw %[temp3], " #J "(%[ppq]) \n\t" \ - "andi %[temp5], %[coeff], 0xffff \n\t" \ - "srl %[temp0], %[coeff], 16 \n\t" \ - "lhu %[temp6], " #J "+2(%[ppiq]) \n\t" \ - "lw %[coeff], " #K "+4(%[ppbias]) \n\t" \ - "mul %[level], %[temp5], %[temp1] \n\t" \ - "mul %[temp4], %[temp0], %[temp6] \n\t" \ - "addu %[level], %[level], %[temp2] \n\t" \ - "addu %[temp4], %[temp4], %[coeff] \n\t" \ - "precrq.ph.w %[level], %[temp4], %[level] \n\t" \ - "shra.ph %[level], %[level], 1 \n\t" \ - "cmp.lt.ph %[max_level1],%[level] \n\t" \ - "pick.ph %[level], %[max_level], %[level] \n\t" \ - "xor %[level], %[level], %[sign] \n\t" \ - "subu.ph %[level], %[level], %[sign] \n\t" \ - "mul.ph %[temp3], %[level], %[temp3] \n\t" \ - "or %[ret], %[ret], %[level] \n\t" \ - "sh %[level], " #N "(%[pout]) \n\t" \ - "srl %[level], %[level], 16 \n\t" \ - "sh %[level], " #N1 "(%[pout]) \n\t" \ - "usw %[temp3], " #J "(%[ppin]) \n\t" \ - "j 3f \n\t" \ -"0: \n\t" \ - "sh $0, " #N "(%[pout]) \n\t" \ - "sh $0, " #N1 "(%[pout]) \n\t" \ - "usw $0, " #J "(%[ppin]) \n\t" \ -"3: \n\t" - -static int QuantizeBlock_MIPSdspR2(int16_t in[16], int16_t out[16], - const VP8Matrix* const mtx) { - int temp0, temp1, temp2, temp3, temp4, temp5,temp6; - int sign, coeff, level; - int max_level = MAX_LEVEL; - int max_level1 = max_level << 16 | max_level; - int ret = 0; - - int16_t* ppin = &in[0]; - int16_t* pout = &out[0]; - const uint16_t* ppsharpen = &mtx->sharpen_[0]; - const uint32_t* ppzthresh = &mtx->zthresh_[0]; - const uint16_t* ppq = &mtx->q_[0]; - const uint16_t* ppiq = &mtx->iq_[0]; - const uint32_t* ppbias = &mtx->bias_[0]; - - __asm__ volatile ( - QUANTIZE_ONE( 0, 0, 0, 2) - QUANTIZE_ONE( 4, 8, 10, 12) - QUANTIZE_ONE( 8, 16, 4, 8) - QUANTIZE_ONE(12, 24, 14, 24) - QUANTIZE_ONE(16, 32, 6, 16) - QUANTIZE_ONE(20, 40, 22, 26) - QUANTIZE_ONE(24, 48, 18, 20) - QUANTIZE_ONE(28, 56, 28, 30) - - : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), - [temp2]"=&r"(temp2), [temp3]"=&r"(temp3), - [temp4]"=&r"(temp4), [temp5]"=&r"(temp5), - [sign]"=&r"(sign), [coeff]"=&r"(coeff), - [level]"=&r"(level), [temp6]"=&r"(temp6), [ret]"+&r"(ret) - : [ppin]"r"(ppin), [pout]"r"(pout), [max_level1]"r"(max_level1), - [ppiq]"r"(ppiq), [max_level]"r"(max_level), - [ppbias]"r"(ppbias), [ppzthresh]"r"(ppzthresh), - [ppsharpen]"r"(ppsharpen), [ppq]"r"(ppq) - : "memory", "hi", "lo" - ); - - return (ret != 0); -} - -static int Quantize2Blocks_MIPSdspR2(int16_t in[32], int16_t out[32], - const VP8Matrix* const mtx) { - int nz; - nz = QuantizeBlock_MIPSdspR2(in + 0 * 16, out + 0 * 16, mtx) << 0; - nz |= QuantizeBlock_MIPSdspR2(in + 1 * 16, out + 1 * 16, mtx) << 1; - return nz; -} - -#undef QUANTIZE_ONE - -// macro for one horizontal pass in FTransformWHT -// temp0..temp7 holds tmp[0]..tmp[15] -// A, B, C, D - offset in bytes to load from in buffer -// TEMP0, TEMP1 - registers for corresponding tmp elements -#define HORIZONTAL_PASS_WHT(A, B, C, D, TEMP0, TEMP1) \ - "lh %[" #TEMP0 "], " #A "(%[in]) \n\t" \ - "lh %[" #TEMP1 "], " #B "(%[in]) \n\t" \ - "lh %[temp8], " #C "(%[in]) \n\t" \ - "lh %[temp9], " #D "(%[in]) \n\t" \ - "ins %[" #TEMP1 "], %[" #TEMP0 "], 16, 16 \n\t" \ - "ins %[temp9], %[temp8], 16, 16 \n\t" \ - "subq.ph %[temp8], %[" #TEMP1 "], %[temp9] \n\t" \ - "addq.ph %[temp9], %[" #TEMP1 "], %[temp9] \n\t" \ - "precrq.ph.w %[" #TEMP0 "], %[temp8], %[temp9] \n\t" \ - "append %[temp8], %[temp9], 16 \n\t" \ - "subq.ph %[" #TEMP1 "], %[" #TEMP0 "], %[temp8] \n\t" \ - "addq.ph %[" #TEMP0 "], %[" #TEMP0 "], %[temp8] \n\t" \ - "rotr %[" #TEMP1 "], %[" #TEMP1 "], 16 \n\t" - -// macro for one vertical pass in FTransformWHT -// temp0..temp7 holds tmp[0]..tmp[15] -// A, B, C, D - offsets in bytes to store to out buffer -// TEMP0, TEMP2, TEMP4 and TEMP6 - registers for corresponding tmp elements -#define VERTICAL_PASS_WHT(A, B, C, D, TEMP0, TEMP2, TEMP4, TEMP6) \ - "addq.ph %[temp8], %[" #TEMP0 "], %[" #TEMP4 "] \n\t" \ - "addq.ph %[temp9], %[" #TEMP2 "], %[" #TEMP6 "] \n\t" \ - "subq.ph %[" #TEMP2 "], %[" #TEMP2 "], %[" #TEMP6 "] \n\t" \ - "subq.ph %[" #TEMP6 "], %[" #TEMP0 "], %[" #TEMP4 "] \n\t" \ - "addqh.ph %[" #TEMP0 "], %[temp8], %[temp9] \n\t" \ - "subqh.ph %[" #TEMP4 "], %[" #TEMP6 "], %[" #TEMP2 "] \n\t" \ - "addqh.ph %[" #TEMP2 "], %[" #TEMP2 "], %[" #TEMP6 "] \n\t" \ - "subqh.ph %[" #TEMP6 "], %[temp8], %[temp9] \n\t" \ - "usw %[" #TEMP0 "], " #A "(%[out]) \n\t" \ - "usw %[" #TEMP2 "], " #B "(%[out]) \n\t" \ - "usw %[" #TEMP4 "], " #C "(%[out]) \n\t" \ - "usw %[" #TEMP6 "], " #D "(%[out]) \n\t" - -static void FTransformWHT_MIPSdspR2(const int16_t* in, int16_t* out) { - int temp0, temp1, temp2, temp3, temp4; - int temp5, temp6, temp7, temp8, temp9; - - __asm__ volatile ( - HORIZONTAL_PASS_WHT( 0, 32, 64, 96, temp0, temp1) - HORIZONTAL_PASS_WHT(128, 160, 192, 224, temp2, temp3) - HORIZONTAL_PASS_WHT(256, 288, 320, 352, temp4, temp5) - HORIZONTAL_PASS_WHT(384, 416, 448, 480, temp6, temp7) - VERTICAL_PASS_WHT(0, 8, 16, 24, temp0, temp2, temp4, temp6) - VERTICAL_PASS_WHT(4, 12, 20, 28, temp1, temp3, temp5, temp7) - : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [temp2]"=&r"(temp2), - [temp3]"=&r"(temp3), [temp4]"=&r"(temp4), [temp5]"=&r"(temp5), - [temp6]"=&r"(temp6), [temp7]"=&r"(temp7), [temp8]"=&r"(temp8), - [temp9]"=&r"(temp9) - : [in]"r"(in), [out]"r"(out) - : "memory" - ); -} - -#undef VERTICAL_PASS_WHT -#undef HORIZONTAL_PASS_WHT - -// macro for converting coefficients to bin -// convert 8 coeffs at time -// A, B, C, D - offsets in bytes to load from out buffer -#define CONVERT_COEFFS_TO_BIN(A, B, C, D) \ - "ulw %[temp0], " #A "(%[out]) \n\t" \ - "ulw %[temp1], " #B "(%[out]) \n\t" \ - "ulw %[temp2], " #C "(%[out]) \n\t" \ - "ulw %[temp3], " #D "(%[out]) \n\t" \ - "absq_s.ph %[temp0], %[temp0] \n\t" \ - "absq_s.ph %[temp1], %[temp1] \n\t" \ - "absq_s.ph %[temp2], %[temp2] \n\t" \ - "absq_s.ph %[temp3], %[temp3] \n\t" \ - "shra.ph %[temp0], %[temp0], 3 \n\t" \ - "shra.ph %[temp1], %[temp1], 3 \n\t" \ - "shra.ph %[temp2], %[temp2], 3 \n\t" \ - "shra.ph %[temp3], %[temp3], 3 \n\t" \ - "shll_s.ph %[temp0], %[temp0], 10 \n\t" \ - "shll_s.ph %[temp1], %[temp1], 10 \n\t" \ - "shll_s.ph %[temp2], %[temp2], 10 \n\t" \ - "shll_s.ph %[temp3], %[temp3], 10 \n\t" \ - "shrl.ph %[temp0], %[temp0], 10 \n\t" \ - "shrl.ph %[temp1], %[temp1], 10 \n\t" \ - "shrl.ph %[temp2], %[temp2], 10 \n\t" \ - "shrl.ph %[temp3], %[temp3], 10 \n\t" \ - "shll.ph %[temp0], %[temp0], 2 \n\t" \ - "shll.ph %[temp1], %[temp1], 2 \n\t" \ - "shll.ph %[temp2], %[temp2], 2 \n\t" \ - "shll.ph %[temp3], %[temp3], 2 \n\t" \ - "ext %[temp4], %[temp0], 0, 16 \n\t" \ - "ext %[temp0], %[temp0], 16, 16 \n\t" \ - "addu %[temp4], %[temp4], %[dist] \n\t" \ - "addu %[temp0], %[temp0], %[dist] \n\t" \ - "ext %[temp5], %[temp1], 0, 16 \n\t" \ - "lw %[temp8], 0(%[temp4]) \n\t" \ - "ext %[temp1], %[temp1], 16, 16 \n\t" \ - "addu %[temp5], %[temp5], %[dist] \n\t" \ - "addiu %[temp8], %[temp8], 1 \n\t" \ - "sw %[temp8], 0(%[temp4]) \n\t" \ - "lw %[temp8], 0(%[temp0]) \n\t" \ - "addu %[temp1], %[temp1], %[dist] \n\t" \ - "ext %[temp6], %[temp2], 0, 16 \n\t" \ - "addiu %[temp8], %[temp8], 1 \n\t" \ - "sw %[temp8], 0(%[temp0]) \n\t" \ - "lw %[temp8], 0(%[temp5]) \n\t" \ - "ext %[temp2], %[temp2], 16, 16 \n\t" \ - "addu %[temp6], %[temp6], %[dist] \n\t" \ - "addiu %[temp8], %[temp8], 1 \n\t" \ - "sw %[temp8], 0(%[temp5]) \n\t" \ - "lw %[temp8], 0(%[temp1]) \n\t" \ - "addu %[temp2], %[temp2], %[dist] \n\t" \ - "ext %[temp7], %[temp3], 0, 16 \n\t" \ - "addiu %[temp8], %[temp8], 1 \n\t" \ - "sw %[temp8], 0(%[temp1]) \n\t" \ - "lw %[temp8], 0(%[temp6]) \n\t" \ - "ext %[temp3], %[temp3], 16, 16 \n\t" \ - "addu %[temp7], %[temp7], %[dist] \n\t" \ - "addiu %[temp8], %[temp8], 1 \n\t" \ - "sw %[temp8], 0(%[temp6]) \n\t" \ - "lw %[temp8], 0(%[temp2]) \n\t" \ - "addu %[temp3], %[temp3], %[dist] \n\t" \ - "addiu %[temp8], %[temp8], 1 \n\t" \ - "sw %[temp8], 0(%[temp2]) \n\t" \ - "lw %[temp8], 0(%[temp7]) \n\t" \ - "addiu %[temp8], %[temp8], 1 \n\t" \ - "sw %[temp8], 0(%[temp7]) \n\t" \ - "lw %[temp8], 0(%[temp3]) \n\t" \ - "addiu %[temp8], %[temp8], 1 \n\t" \ - "sw %[temp8], 0(%[temp3]) \n\t" - -static void CollectHistogram_MIPSdspR2(const uint8_t* ref, const uint8_t* pred, - int start_block, int end_block, - VP8Histogram* const histo) { - int j; - int distribution[MAX_COEFF_THRESH + 1] = { 0 }; - const int max_coeff = (MAX_COEFF_THRESH << 16) + MAX_COEFF_THRESH; - for (j = start_block; j < end_block; ++j) { - int16_t out[16]; - int temp0, temp1, temp2, temp3, temp4, temp5, temp6, temp7, temp8; - - VP8FTransform(ref + VP8DspScan[j], pred + VP8DspScan[j], out); - - // Convert coefficients to bin. - __asm__ volatile ( - CONVERT_COEFFS_TO_BIN( 0, 4, 8, 12) - CONVERT_COEFFS_TO_BIN(16, 20, 24, 28) - : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [temp2]"=&r"(temp2), - [temp3]"=&r"(temp3), [temp4]"=&r"(temp4), [temp5]"=&r"(temp5), - [temp6]"=&r"(temp6), [temp7]"=&r"(temp7), [temp8]"=&r"(temp8) - : [dist]"r"(distribution), [out]"r"(out), [max_coeff]"r"(max_coeff) - : "memory" - ); - } - VP8SetHistogramData(distribution, histo); -} - -#undef CONVERT_COEFFS_TO_BIN - -//------------------------------------------------------------------------------ -// Entry point - -extern void VP8EncDspInitMIPSdspR2(void); - -WEBP_TSAN_IGNORE_FUNCTION void VP8EncDspInitMIPSdspR2(void) { - VP8FTransform = FTransform_MIPSdspR2; - VP8FTransformWHT = FTransformWHT_MIPSdspR2; - VP8ITransform = ITransform_MIPSdspR2; - - VP8TDisto4x4 = Disto4x4_MIPSdspR2; - VP8TDisto16x16 = Disto16x16_MIPSdspR2; - - VP8EncPredLuma16 = Intra16Preds_MIPSdspR2; - VP8EncPredChroma8 = IntraChromaPreds_MIPSdspR2; - VP8EncPredLuma4 = Intra4Preds_MIPSdspR2; - -#if !defined(WORK_AROUND_GCC) - VP8SSE16x16 = SSE16x16_MIPSdspR2; - VP8SSE8x8 = SSE8x8_MIPSdspR2; - VP8SSE16x8 = SSE16x8_MIPSdspR2; - VP8SSE4x4 = SSE4x4_MIPSdspR2; -#endif - - VP8EncQuantizeBlock = QuantizeBlock_MIPSdspR2; - VP8EncQuantize2Blocks = Quantize2Blocks_MIPSdspR2; - - VP8CollectHistogram = CollectHistogram_MIPSdspR2; -} - -#else // !WEBP_USE_MIPS_DSP_R2 - -WEBP_DSP_INIT_STUB(VP8EncDspInitMIPSdspR2) - -#endif // WEBP_USE_MIPS_DSP_R2 diff --git a/Extended/libwebp/src/dsp/enc_msa.c b/Extended/libwebp/src/dsp/enc_msa.c deleted file mode 100644 index 6f85add..0000000 --- a/Extended/libwebp/src/dsp/enc_msa.c +++ /dev/null @@ -1,896 +0,0 @@ -// Copyright 2016 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// MSA version of encoder dsp functions. -// -// Author: Prashant Patil (prashant.patil@imgtec.com) - -#include "src/dsp/dsp.h" - -#if defined(WEBP_USE_MSA) - -#include -#include "src/dsp/msa_macro.h" -#include "src/enc/vp8i_enc.h" - -//------------------------------------------------------------------------------ -// Transforms - -#define IDCT_1D_W(in0, in1, in2, in3, out0, out1, out2, out3) do { \ - v4i32 a1_m, b1_m, c1_m, d1_m; \ - const v4i32 cospi8sqrt2minus1 = __msa_fill_w(20091); \ - const v4i32 sinpi8sqrt2 = __msa_fill_w(35468); \ - v4i32 c_tmp1_m = in1 * sinpi8sqrt2; \ - v4i32 c_tmp2_m = in3 * cospi8sqrt2minus1; \ - v4i32 d_tmp1_m = in1 * cospi8sqrt2minus1; \ - v4i32 d_tmp2_m = in3 * sinpi8sqrt2; \ - \ - ADDSUB2(in0, in2, a1_m, b1_m); \ - SRAI_W2_SW(c_tmp1_m, c_tmp2_m, 16); \ - c_tmp2_m = c_tmp2_m + in3; \ - c1_m = c_tmp1_m - c_tmp2_m; \ - SRAI_W2_SW(d_tmp1_m, d_tmp2_m, 16); \ - d_tmp1_m = d_tmp1_m + in1; \ - d1_m = d_tmp1_m + d_tmp2_m; \ - BUTTERFLY_4(a1_m, b1_m, c1_m, d1_m, out0, out1, out2, out3); \ -} while (0) - -static WEBP_INLINE void ITransformOne(const uint8_t* ref, const int16_t* in, - uint8_t* dst) { - v8i16 input0, input1; - v4i32 in0, in1, in2, in3, hz0, hz1, hz2, hz3, vt0, vt1, vt2, vt3; - v4i32 res0, res1, res2, res3; - v16i8 dest0, dest1, dest2, dest3; - const v16i8 zero = { 0 }; - - LD_SH2(in, 8, input0, input1); - UNPCK_SH_SW(input0, in0, in1); - UNPCK_SH_SW(input1, in2, in3); - IDCT_1D_W(in0, in1, in2, in3, hz0, hz1, hz2, hz3); - TRANSPOSE4x4_SW_SW(hz0, hz1, hz2, hz3, hz0, hz1, hz2, hz3); - IDCT_1D_W(hz0, hz1, hz2, hz3, vt0, vt1, vt2, vt3); - SRARI_W4_SW(vt0, vt1, vt2, vt3, 3); - TRANSPOSE4x4_SW_SW(vt0, vt1, vt2, vt3, vt0, vt1, vt2, vt3); - LD_SB4(ref, BPS, dest0, dest1, dest2, dest3); - ILVR_B4_SW(zero, dest0, zero, dest1, zero, dest2, zero, dest3, - res0, res1, res2, res3); - ILVR_H4_SW(zero, res0, zero, res1, zero, res2, zero, res3, - res0, res1, res2, res3); - ADD4(res0, vt0, res1, vt1, res2, vt2, res3, vt3, res0, res1, res2, res3); - CLIP_SW4_0_255(res0, res1, res2, res3); - PCKEV_B2_SW(res0, res1, res2, res3, vt0, vt1); - res0 = (v4i32)__msa_pckev_b((v16i8)vt0, (v16i8)vt1); - ST4x4_UB(res0, res0, 3, 2, 1, 0, dst, BPS); -} - -static void ITransform_MSA(const uint8_t* ref, const int16_t* in, uint8_t* dst, - int do_two) { - ITransformOne(ref, in, dst); - if (do_two) { - ITransformOne(ref + 4, in + 16, dst + 4); - } -} - -static void FTransform_MSA(const uint8_t* src, const uint8_t* ref, - int16_t* out) { - uint64_t out0, out1, out2, out3; - uint32_t in0, in1, in2, in3; - v4i32 tmp0, tmp1, tmp2, tmp3, tmp4, tmp5; - v8i16 t0, t1, t2, t3; - v16u8 srcl0, srcl1, src0 = { 0 }, src1 = { 0 }; - const v8i16 mask0 = { 0, 4, 8, 12, 1, 5, 9, 13 }; - const v8i16 mask1 = { 3, 7, 11, 15, 2, 6, 10, 14 }; - const v8i16 mask2 = { 4, 0, 5, 1, 6, 2, 7, 3 }; - const v8i16 mask3 = { 0, 4, 1, 5, 2, 6, 3, 7 }; - const v8i16 cnst0 = { 2217, -5352, 2217, -5352, 2217, -5352, 2217, -5352 }; - const v8i16 cnst1 = { 5352, 2217, 5352, 2217, 5352, 2217, 5352, 2217 }; - - LW4(src, BPS, in0, in1, in2, in3); - INSERT_W4_UB(in0, in1, in2, in3, src0); - LW4(ref, BPS, in0, in1, in2, in3); - INSERT_W4_UB(in0, in1, in2, in3, src1); - ILVRL_B2_UB(src0, src1, srcl0, srcl1); - HSUB_UB2_SH(srcl0, srcl1, t0, t1); - VSHF_H2_SH(t0, t1, t0, t1, mask0, mask1, t2, t3); - ADDSUB2(t2, t3, t0, t1); - t0 = SRLI_H(t0, 3); - VSHF_H2_SH(t0, t0, t1, t1, mask2, mask3, t3, t2); - tmp0 = __msa_hadd_s_w(t3, t3); - tmp2 = __msa_hsub_s_w(t3, t3); - FILL_W2_SW(1812, 937, tmp1, tmp3); - DPADD_SH2_SW(t2, t2, cnst0, cnst1, tmp3, tmp1); - SRAI_W2_SW(tmp1, tmp3, 9); - PCKEV_H2_SH(tmp1, tmp0, tmp3, tmp2, t0, t1); - VSHF_H2_SH(t0, t1, t0, t1, mask0, mask1, t2, t3); - ADDSUB2(t2, t3, t0, t1); - VSHF_H2_SH(t0, t0, t1, t1, mask2, mask3, t3, t2); - tmp0 = __msa_hadd_s_w(t3, t3); - tmp2 = __msa_hsub_s_w(t3, t3); - ADDVI_W2_SW(tmp0, 7, tmp2, 7, tmp0, tmp2); - SRAI_W2_SW(tmp0, tmp2, 4); - FILL_W2_SW(12000, 51000, tmp1, tmp3); - DPADD_SH2_SW(t2, t2, cnst0, cnst1, tmp3, tmp1); - SRAI_W2_SW(tmp1, tmp3, 16); - UNPCK_R_SH_SW(t1, tmp4); - tmp5 = __msa_ceqi_w(tmp4, 0); - tmp4 = (v4i32)__msa_nor_v((v16u8)tmp5, (v16u8)tmp5); - tmp5 = __msa_fill_w(1); - tmp5 = (v4i32)__msa_and_v((v16u8)tmp5, (v16u8)tmp4); - tmp1 += tmp5; - PCKEV_H2_SH(tmp1, tmp0, tmp3, tmp2, t0, t1); - out0 = __msa_copy_s_d((v2i64)t0, 0); - out1 = __msa_copy_s_d((v2i64)t0, 1); - out2 = __msa_copy_s_d((v2i64)t1, 0); - out3 = __msa_copy_s_d((v2i64)t1, 1); - SD4(out0, out1, out2, out3, out, 8); -} - -static void FTransformWHT_MSA(const int16_t* in, int16_t* out) { - v8i16 in0 = { 0 }; - v8i16 in1 = { 0 }; - v8i16 tmp0, tmp1, tmp2, tmp3; - v8i16 out0, out1; - const v8i16 mask0 = { 0, 1, 2, 3, 8, 9, 10, 11 }; - const v8i16 mask1 = { 4, 5, 6, 7, 12, 13, 14, 15 }; - const v8i16 mask2 = { 0, 4, 8, 12, 1, 5, 9, 13 }; - const v8i16 mask3 = { 3, 7, 11, 15, 2, 6, 10, 14 }; - - in0 = __msa_insert_h(in0, 0, in[ 0]); - in0 = __msa_insert_h(in0, 1, in[ 64]); - in0 = __msa_insert_h(in0, 2, in[128]); - in0 = __msa_insert_h(in0, 3, in[192]); - in0 = __msa_insert_h(in0, 4, in[ 16]); - in0 = __msa_insert_h(in0, 5, in[ 80]); - in0 = __msa_insert_h(in0, 6, in[144]); - in0 = __msa_insert_h(in0, 7, in[208]); - in1 = __msa_insert_h(in1, 0, in[ 48]); - in1 = __msa_insert_h(in1, 1, in[112]); - in1 = __msa_insert_h(in1, 2, in[176]); - in1 = __msa_insert_h(in1, 3, in[240]); - in1 = __msa_insert_h(in1, 4, in[ 32]); - in1 = __msa_insert_h(in1, 5, in[ 96]); - in1 = __msa_insert_h(in1, 6, in[160]); - in1 = __msa_insert_h(in1, 7, in[224]); - ADDSUB2(in0, in1, tmp0, tmp1); - VSHF_H2_SH(tmp0, tmp1, tmp0, tmp1, mask0, mask1, tmp2, tmp3); - ADDSUB2(tmp2, tmp3, tmp0, tmp1); - VSHF_H2_SH(tmp0, tmp1, tmp0, tmp1, mask2, mask3, in0, in1); - ADDSUB2(in0, in1, tmp0, tmp1); - VSHF_H2_SH(tmp0, tmp1, tmp0, tmp1, mask0, mask1, tmp2, tmp3); - ADDSUB2(tmp2, tmp3, out0, out1); - SRAI_H2_SH(out0, out1, 1); - ST_SH2(out0, out1, out, 8); -} - -static int TTransform_MSA(const uint8_t* in, const uint16_t* w) { - int sum; - uint32_t in0_m, in1_m, in2_m, in3_m; - v16i8 src0 = { 0 }; - v8i16 in0, in1, tmp0, tmp1, tmp2, tmp3; - v4i32 dst0, dst1; - const v16i8 zero = { 0 }; - const v8i16 mask0 = { 0, 1, 2, 3, 8, 9, 10, 11 }; - const v8i16 mask1 = { 4, 5, 6, 7, 12, 13, 14, 15 }; - const v8i16 mask2 = { 0, 4, 8, 12, 1, 5, 9, 13 }; - const v8i16 mask3 = { 3, 7, 11, 15, 2, 6, 10, 14 }; - - LW4(in, BPS, in0_m, in1_m, in2_m, in3_m); - INSERT_W4_SB(in0_m, in1_m, in2_m, in3_m, src0); - ILVRL_B2_SH(zero, src0, tmp0, tmp1); - VSHF_H2_SH(tmp0, tmp1, tmp0, tmp1, mask2, mask3, in0, in1); - ADDSUB2(in0, in1, tmp0, tmp1); - VSHF_H2_SH(tmp0, tmp1, tmp0, tmp1, mask0, mask1, tmp2, tmp3); - ADDSUB2(tmp2, tmp3, tmp0, tmp1); - VSHF_H2_SH(tmp0, tmp1, tmp0, tmp1, mask2, mask3, in0, in1); - ADDSUB2(in0, in1, tmp0, tmp1); - VSHF_H2_SH(tmp0, tmp1, tmp0, tmp1, mask0, mask1, tmp2, tmp3); - ADDSUB2(tmp2, tmp3, tmp0, tmp1); - tmp0 = __msa_add_a_h(tmp0, (v8i16)zero); - tmp1 = __msa_add_a_h(tmp1, (v8i16)zero); - LD_SH2(w, 8, tmp2, tmp3); - DOTP_SH2_SW(tmp0, tmp1, tmp2, tmp3, dst0, dst1); - dst0 = dst0 + dst1; - sum = HADD_SW_S32(dst0); - return sum; -} - -static int Disto4x4_MSA(const uint8_t* const a, const uint8_t* const b, - const uint16_t* const w) { - const int sum1 = TTransform_MSA(a, w); - const int sum2 = TTransform_MSA(b, w); - return abs(sum2 - sum1) >> 5; -} - -static int Disto16x16_MSA(const uint8_t* const a, const uint8_t* const b, - const uint16_t* const w) { - int D = 0; - int x, y; - for (y = 0; y < 16 * BPS; y += 4 * BPS) { - for (x = 0; x < 16; x += 4) { - D += Disto4x4_MSA(a + x + y, b + x + y, w); - } - } - return D; -} - -//------------------------------------------------------------------------------ -// Histogram - -static void CollectHistogram_MSA(const uint8_t* ref, const uint8_t* pred, - int start_block, int end_block, - VP8Histogram* const histo) { - int j; - int distribution[MAX_COEFF_THRESH + 1] = { 0 }; - for (j = start_block; j < end_block; ++j) { - int16_t out[16]; - VP8FTransform(ref + VP8DspScan[j], pred + VP8DspScan[j], out); - { - int k; - v8i16 coeff0, coeff1; - const v8i16 zero = { 0 }; - const v8i16 max_coeff_thr = __msa_ldi_h(MAX_COEFF_THRESH); - LD_SH2(&out[0], 8, coeff0, coeff1); - coeff0 = __msa_add_a_h(coeff0, zero); - coeff1 = __msa_add_a_h(coeff1, zero); - SRAI_H2_SH(coeff0, coeff1, 3); - coeff0 = __msa_min_s_h(coeff0, max_coeff_thr); - coeff1 = __msa_min_s_h(coeff1, max_coeff_thr); - ST_SH2(coeff0, coeff1, &out[0], 8); - for (k = 0; k < 16; ++k) { - ++distribution[out[k]]; - } - } - } - VP8SetHistogramData(distribution, histo); -} - -//------------------------------------------------------------------------------ -// Intra predictions - -// luma 4x4 prediction - -#define DST(x, y) dst[(x) + (y) * BPS] -#define AVG3(a, b, c) (((a) + 2 * (b) + (c) + 2) >> 2) -#define AVG2(a, b) (((a) + (b) + 1) >> 1) - -static WEBP_INLINE void VE4(uint8_t* dst, const uint8_t* top) { // vertical - const v16u8 A1 = { 0 }; - const uint64_t val_m = LD(top - 1); - const v16u8 A = (v16u8)__msa_insert_d((v2i64)A1, 0, val_m); - const v16u8 B = SLDI_UB(A, A, 1); - const v16u8 C = SLDI_UB(A, A, 2); - const v16u8 AC = __msa_ave_u_b(A, C); - const v16u8 B2 = __msa_ave_u_b(B, B); - const v16u8 R = __msa_aver_u_b(AC, B2); - const uint32_t out = __msa_copy_s_w((v4i32)R, 0); - SW4(out, out, out, out, dst, BPS); -} - -static WEBP_INLINE void HE4(uint8_t* dst, const uint8_t* top) { // horizontal - const int X = top[-1]; - const int I = top[-2]; - const int J = top[-3]; - const int K = top[-4]; - const int L = top[-5]; - WebPUint32ToMem(dst + 0 * BPS, 0x01010101U * AVG3(X, I, J)); - WebPUint32ToMem(dst + 1 * BPS, 0x01010101U * AVG3(I, J, K)); - WebPUint32ToMem(dst + 2 * BPS, 0x01010101U * AVG3(J, K, L)); - WebPUint32ToMem(dst + 3 * BPS, 0x01010101U * AVG3(K, L, L)); -} - -static WEBP_INLINE void DC4(uint8_t* dst, const uint8_t* top) { - uint32_t dc = 4; - int i; - for (i = 0; i < 4; ++i) dc += top[i] + top[-5 + i]; - dc >>= 3; - dc = dc | (dc << 8) | (dc << 16) | (dc << 24); - SW4(dc, dc, dc, dc, dst, BPS); -} - -static WEBP_INLINE void RD4(uint8_t* dst, const uint8_t* top) { - const v16u8 A2 = { 0 }; - const uint64_t val_m = LD(top - 5); - const v16u8 A1 = (v16u8)__msa_insert_d((v2i64)A2, 0, val_m); - const v16u8 A = (v16u8)__msa_insert_b((v16i8)A1, 8, top[3]); - const v16u8 B = SLDI_UB(A, A, 1); - const v16u8 C = SLDI_UB(A, A, 2); - const v16u8 AC = __msa_ave_u_b(A, C); - const v16u8 B2 = __msa_ave_u_b(B, B); - const v16u8 R0 = __msa_aver_u_b(AC, B2); - const v16u8 R1 = SLDI_UB(R0, R0, 1); - const v16u8 R2 = SLDI_UB(R1, R1, 1); - const v16u8 R3 = SLDI_UB(R2, R2, 1); - const uint32_t val0 = __msa_copy_s_w((v4i32)R0, 0); - const uint32_t val1 = __msa_copy_s_w((v4i32)R1, 0); - const uint32_t val2 = __msa_copy_s_w((v4i32)R2, 0); - const uint32_t val3 = __msa_copy_s_w((v4i32)R3, 0); - SW4(val3, val2, val1, val0, dst, BPS); -} - -static WEBP_INLINE void LD4(uint8_t* dst, const uint8_t* top) { - const v16u8 A1 = { 0 }; - const uint64_t val_m = LD(top); - const v16u8 A = (v16u8)__msa_insert_d((v2i64)A1, 0, val_m); - const v16u8 B = SLDI_UB(A, A, 1); - const v16u8 C1 = SLDI_UB(A, A, 2); - const v16u8 C = (v16u8)__msa_insert_b((v16i8)C1, 6, top[7]); - const v16u8 AC = __msa_ave_u_b(A, C); - const v16u8 B2 = __msa_ave_u_b(B, B); - const v16u8 R0 = __msa_aver_u_b(AC, B2); - const v16u8 R1 = SLDI_UB(R0, R0, 1); - const v16u8 R2 = SLDI_UB(R1, R1, 1); - const v16u8 R3 = SLDI_UB(R2, R2, 1); - const uint32_t val0 = __msa_copy_s_w((v4i32)R0, 0); - const uint32_t val1 = __msa_copy_s_w((v4i32)R1, 0); - const uint32_t val2 = __msa_copy_s_w((v4i32)R2, 0); - const uint32_t val3 = __msa_copy_s_w((v4i32)R3, 0); - SW4(val0, val1, val2, val3, dst, BPS); -} - -static WEBP_INLINE void VR4(uint8_t* dst, const uint8_t* top) { - const int X = top[-1]; - const int I = top[-2]; - const int J = top[-3]; - const int K = top[-4]; - const int A = top[0]; - const int B = top[1]; - const int C = top[2]; - const int D = top[3]; - DST(0, 0) = DST(1, 2) = AVG2(X, A); - DST(1, 0) = DST(2, 2) = AVG2(A, B); - DST(2, 0) = DST(3, 2) = AVG2(B, C); - DST(3, 0) = AVG2(C, D); - DST(0, 3) = AVG3(K, J, I); - DST(0, 2) = AVG3(J, I, X); - DST(0, 1) = DST(1, 3) = AVG3(I, X, A); - DST(1, 1) = DST(2, 3) = AVG3(X, A, B); - DST(2, 1) = DST(3, 3) = AVG3(A, B, C); - DST(3, 1) = AVG3(B, C, D); -} - -static WEBP_INLINE void VL4(uint8_t* dst, const uint8_t* top) { - const int A = top[0]; - const int B = top[1]; - const int C = top[2]; - const int D = top[3]; - const int E = top[4]; - const int F = top[5]; - const int G = top[6]; - const int H = top[7]; - DST(0, 0) = AVG2(A, B); - DST(1, 0) = DST(0, 2) = AVG2(B, C); - DST(2, 0) = DST(1, 2) = AVG2(C, D); - DST(3, 0) = DST(2, 2) = AVG2(D, E); - DST(0, 1) = AVG3(A, B, C); - DST(1, 1) = DST(0, 3) = AVG3(B, C, D); - DST(2, 1) = DST(1, 3) = AVG3(C, D, E); - DST(3, 1) = DST(2, 3) = AVG3(D, E, F); - DST(3, 2) = AVG3(E, F, G); - DST(3, 3) = AVG3(F, G, H); -} - -static WEBP_INLINE void HU4(uint8_t* dst, const uint8_t* top) { - const int I = top[-2]; - const int J = top[-3]; - const int K = top[-4]; - const int L = top[-5]; - DST(0, 0) = AVG2(I, J); - DST(2, 0) = DST(0, 1) = AVG2(J, K); - DST(2, 1) = DST(0, 2) = AVG2(K, L); - DST(1, 0) = AVG3(I, J, K); - DST(3, 0) = DST(1, 1) = AVG3(J, K, L); - DST(3, 1) = DST(1, 2) = AVG3(K, L, L); - DST(3, 2) = DST(2, 2) = - DST(0, 3) = DST(1, 3) = DST(2, 3) = DST(3, 3) = L; -} - -static WEBP_INLINE void HD4(uint8_t* dst, const uint8_t* top) { - const int X = top[-1]; - const int I = top[-2]; - const int J = top[-3]; - const int K = top[-4]; - const int L = top[-5]; - const int A = top[0]; - const int B = top[1]; - const int C = top[2]; - DST(0, 0) = DST(2, 1) = AVG2(I, X); - DST(0, 1) = DST(2, 2) = AVG2(J, I); - DST(0, 2) = DST(2, 3) = AVG2(K, J); - DST(0, 3) = AVG2(L, K); - DST(3, 0) = AVG3(A, B, C); - DST(2, 0) = AVG3(X, A, B); - DST(1, 0) = DST(3, 1) = AVG3(I, X, A); - DST(1, 1) = DST(3, 2) = AVG3(J, I, X); - DST(1, 2) = DST(3, 3) = AVG3(K, J, I); - DST(1, 3) = AVG3(L, K, J); -} - -static WEBP_INLINE void TM4(uint8_t* dst, const uint8_t* top) { - const v16i8 zero = { 0 }; - const v8i16 TL = (v8i16)__msa_fill_h(top[-1]); - const v8i16 L0 = (v8i16)__msa_fill_h(top[-2]); - const v8i16 L1 = (v8i16)__msa_fill_h(top[-3]); - const v8i16 L2 = (v8i16)__msa_fill_h(top[-4]); - const v8i16 L3 = (v8i16)__msa_fill_h(top[-5]); - const v16u8 T1 = LD_UB(top); - const v8i16 T = (v8i16)__msa_ilvr_b(zero, (v16i8)T1); - const v8i16 d = T - TL; - v8i16 r0, r1, r2, r3; - ADD4(d, L0, d, L1, d, L2, d, L3, r0, r1, r2, r3); - CLIP_SH4_0_255(r0, r1, r2, r3); - PCKEV_ST4x4_UB(r0, r1, r2, r3, dst, BPS); -} - -#undef DST -#undef AVG3 -#undef AVG2 - -static void Intra4Preds_MSA(uint8_t* dst, const uint8_t* top) { - DC4(I4DC4 + dst, top); - TM4(I4TM4 + dst, top); - VE4(I4VE4 + dst, top); - HE4(I4HE4 + dst, top); - RD4(I4RD4 + dst, top); - VR4(I4VR4 + dst, top); - LD4(I4LD4 + dst, top); - VL4(I4VL4 + dst, top); - HD4(I4HD4 + dst, top); - HU4(I4HU4 + dst, top); -} - -// luma 16x16 prediction - -#define STORE16x16(out, dst) do { \ - ST_UB8(out, out, out, out, out, out, out, out, dst + 0 * BPS, BPS); \ - ST_UB8(out, out, out, out, out, out, out, out, dst + 8 * BPS, BPS); \ -} while (0) - -static WEBP_INLINE void VerticalPred16x16(uint8_t* dst, const uint8_t* top) { - if (top != NULL) { - const v16u8 out = LD_UB(top); - STORE16x16(out, dst); - } else { - const v16u8 out = (v16u8)__msa_fill_b(0x7f); - STORE16x16(out, dst); - } -} - -static WEBP_INLINE void HorizontalPred16x16(uint8_t* dst, - const uint8_t* left) { - if (left != NULL) { - int j; - for (j = 0; j < 16; j += 4) { - const v16u8 L0 = (v16u8)__msa_fill_b(left[0]); - const v16u8 L1 = (v16u8)__msa_fill_b(left[1]); - const v16u8 L2 = (v16u8)__msa_fill_b(left[2]); - const v16u8 L3 = (v16u8)__msa_fill_b(left[3]); - ST_UB4(L0, L1, L2, L3, dst, BPS); - dst += 4 * BPS; - left += 4; - } - } else { - const v16u8 out = (v16u8)__msa_fill_b(0x81); - STORE16x16(out, dst); - } -} - -static WEBP_INLINE void TrueMotion16x16(uint8_t* dst, const uint8_t* left, - const uint8_t* top) { - if (left != NULL) { - if (top != NULL) { - int j; - v8i16 d1, d2; - const v16i8 zero = { 0 }; - const v8i16 TL = (v8i16)__msa_fill_h(left[-1]); - const v16u8 T = LD_UB(top); - ILVRL_B2_SH(zero, T, d1, d2); - SUB2(d1, TL, d2, TL, d1, d2); - for (j = 0; j < 16; j += 4) { - v16i8 t0, t1, t2, t3; - v8i16 r0, r1, r2, r3, r4, r5, r6, r7; - const v8i16 L0 = (v8i16)__msa_fill_h(left[j + 0]); - const v8i16 L1 = (v8i16)__msa_fill_h(left[j + 1]); - const v8i16 L2 = (v8i16)__msa_fill_h(left[j + 2]); - const v8i16 L3 = (v8i16)__msa_fill_h(left[j + 3]); - ADD4(d1, L0, d1, L1, d1, L2, d1, L3, r0, r1, r2, r3); - ADD4(d2, L0, d2, L1, d2, L2, d2, L3, r4, r5, r6, r7); - CLIP_SH4_0_255(r0, r1, r2, r3); - CLIP_SH4_0_255(r4, r5, r6, r7); - PCKEV_B4_SB(r4, r0, r5, r1, r6, r2, r7, r3, t0, t1, t2, t3); - ST_SB4(t0, t1, t2, t3, dst, BPS); - dst += 4 * BPS; - } - } else { - HorizontalPred16x16(dst, left); - } - } else { - if (top != NULL) { - VerticalPred16x16(dst, top); - } else { - const v16u8 out = (v16u8)__msa_fill_b(0x81); - STORE16x16(out, dst); - } - } -} - -static WEBP_INLINE void DCMode16x16(uint8_t* dst, const uint8_t* left, - const uint8_t* top) { - int DC; - v16u8 out; - if (top != NULL && left != NULL) { - const v16u8 rtop = LD_UB(top); - const v8u16 dctop = __msa_hadd_u_h(rtop, rtop); - const v16u8 rleft = LD_UB(left); - const v8u16 dcleft = __msa_hadd_u_h(rleft, rleft); - const v8u16 dctemp = dctop + dcleft; - DC = HADD_UH_U32(dctemp); - DC = (DC + 16) >> 5; - } else if (left != NULL) { // left but no top - const v16u8 rleft = LD_UB(left); - const v8u16 dcleft = __msa_hadd_u_h(rleft, rleft); - DC = HADD_UH_U32(dcleft); - DC = (DC + DC + 16) >> 5; - } else if (top != NULL) { // top but no left - const v16u8 rtop = LD_UB(top); - const v8u16 dctop = __msa_hadd_u_h(rtop, rtop); - DC = HADD_UH_U32(dctop); - DC = (DC + DC + 16) >> 5; - } else { // no top, no left, nothing. - DC = 0x80; - } - out = (v16u8)__msa_fill_b(DC); - STORE16x16(out, dst); -} - -static void Intra16Preds_MSA(uint8_t* dst, - const uint8_t* left, const uint8_t* top) { - DCMode16x16(I16DC16 + dst, left, top); - VerticalPred16x16(I16VE16 + dst, top); - HorizontalPred16x16(I16HE16 + dst, left); - TrueMotion16x16(I16TM16 + dst, left, top); -} - -// Chroma 8x8 prediction - -#define CALC_DC8(in, out) do { \ - const v8u16 temp0 = __msa_hadd_u_h(in, in); \ - const v4u32 temp1 = __msa_hadd_u_w(temp0, temp0); \ - const v2i64 temp2 = (v2i64)__msa_hadd_u_d(temp1, temp1); \ - const v2i64 temp3 = __msa_splati_d(temp2, 1); \ - const v2i64 temp4 = temp3 + temp2; \ - const v16i8 temp5 = (v16i8)__msa_srari_d(temp4, 4); \ - const v2i64 temp6 = (v2i64)__msa_splati_b(temp5, 0); \ - out = __msa_copy_s_d(temp6, 0); \ -} while (0) - -#define STORE8x8(out, dst) do { \ - SD4(out, out, out, out, dst + 0 * BPS, BPS); \ - SD4(out, out, out, out, dst + 4 * BPS, BPS); \ -} while (0) - -static WEBP_INLINE void VerticalPred8x8(uint8_t* dst, const uint8_t* top) { - if (top != NULL) { - const uint64_t out = LD(top); - STORE8x8(out, dst); - } else { - const uint64_t out = 0x7f7f7f7f7f7f7f7fULL; - STORE8x8(out, dst); - } -} - -static WEBP_INLINE void HorizontalPred8x8(uint8_t* dst, const uint8_t* left) { - if (left != NULL) { - int j; - for (j = 0; j < 8; j += 4) { - const v16u8 L0 = (v16u8)__msa_fill_b(left[0]); - const v16u8 L1 = (v16u8)__msa_fill_b(left[1]); - const v16u8 L2 = (v16u8)__msa_fill_b(left[2]); - const v16u8 L3 = (v16u8)__msa_fill_b(left[3]); - const uint64_t out0 = __msa_copy_s_d((v2i64)L0, 0); - const uint64_t out1 = __msa_copy_s_d((v2i64)L1, 0); - const uint64_t out2 = __msa_copy_s_d((v2i64)L2, 0); - const uint64_t out3 = __msa_copy_s_d((v2i64)L3, 0); - SD4(out0, out1, out2, out3, dst, BPS); - dst += 4 * BPS; - left += 4; - } - } else { - const uint64_t out = 0x8181818181818181ULL; - STORE8x8(out, dst); - } -} - -static WEBP_INLINE void TrueMotion8x8(uint8_t* dst, const uint8_t* left, - const uint8_t* top) { - if (left != NULL) { - if (top != NULL) { - int j; - const v8i16 TL = (v8i16)__msa_fill_h(left[-1]); - const v16u8 T1 = LD_UB(top); - const v16i8 zero = { 0 }; - const v8i16 T = (v8i16)__msa_ilvr_b(zero, (v16i8)T1); - const v8i16 d = T - TL; - for (j = 0; j < 8; j += 4) { - uint64_t out0, out1, out2, out3; - v16i8 t0, t1; - v8i16 r0 = (v8i16)__msa_fill_h(left[j + 0]); - v8i16 r1 = (v8i16)__msa_fill_h(left[j + 1]); - v8i16 r2 = (v8i16)__msa_fill_h(left[j + 2]); - v8i16 r3 = (v8i16)__msa_fill_h(left[j + 3]); - ADD4(d, r0, d, r1, d, r2, d, r3, r0, r1, r2, r3); - CLIP_SH4_0_255(r0, r1, r2, r3); - PCKEV_B2_SB(r1, r0, r3, r2, t0, t1); - out0 = __msa_copy_s_d((v2i64)t0, 0); - out1 = __msa_copy_s_d((v2i64)t0, 1); - out2 = __msa_copy_s_d((v2i64)t1, 0); - out3 = __msa_copy_s_d((v2i64)t1, 1); - SD4(out0, out1, out2, out3, dst, BPS); - dst += 4 * BPS; - } - } else { - HorizontalPred8x8(dst, left); - } - } else { - if (top != NULL) { - VerticalPred8x8(dst, top); - } else { - const uint64_t out = 0x8181818181818181ULL; - STORE8x8(out, dst); - } - } -} - -static WEBP_INLINE void DCMode8x8(uint8_t* dst, const uint8_t* left, - const uint8_t* top) { - uint64_t out; - v16u8 src = { 0 }; - if (top != NULL && left != NULL) { - const uint64_t left_m = LD(left); - const uint64_t top_m = LD(top); - INSERT_D2_UB(left_m, top_m, src); - CALC_DC8(src, out); - } else if (left != NULL) { // left but no top - const uint64_t left_m = LD(left); - INSERT_D2_UB(left_m, left_m, src); - CALC_DC8(src, out); - } else if (top != NULL) { // top but no left - const uint64_t top_m = LD(top); - INSERT_D2_UB(top_m, top_m, src); - CALC_DC8(src, out); - } else { // no top, no left, nothing. - src = (v16u8)__msa_fill_b(0x80); - out = __msa_copy_s_d((v2i64)src, 0); - } - STORE8x8(out, dst); -} - -static void IntraChromaPreds_MSA(uint8_t* dst, const uint8_t* left, - const uint8_t* top) { - // U block - DCMode8x8(C8DC8 + dst, left, top); - VerticalPred8x8(C8VE8 + dst, top); - HorizontalPred8x8(C8HE8 + dst, left); - TrueMotion8x8(C8TM8 + dst, left, top); - // V block - dst += 8; - if (top != NULL) top += 8; - if (left != NULL) left += 16; - DCMode8x8(C8DC8 + dst, left, top); - VerticalPred8x8(C8VE8 + dst, top); - HorizontalPred8x8(C8HE8 + dst, left); - TrueMotion8x8(C8TM8 + dst, left, top); -} - -//------------------------------------------------------------------------------ -// Metric - -#define PACK_DOTP_UB4_SW(in0, in1, in2, in3, out0, out1, out2, out3) do { \ - v16u8 tmp0, tmp1; \ - v8i16 tmp2, tmp3; \ - ILVRL_B2_UB(in0, in1, tmp0, tmp1); \ - HSUB_UB2_SH(tmp0, tmp1, tmp2, tmp3); \ - DOTP_SH2_SW(tmp2, tmp3, tmp2, tmp3, out0, out1); \ - ILVRL_B2_UB(in2, in3, tmp0, tmp1); \ - HSUB_UB2_SH(tmp0, tmp1, tmp2, tmp3); \ - DOTP_SH2_SW(tmp2, tmp3, tmp2, tmp3, out2, out3); \ -} while (0) - -#define PACK_DPADD_UB4_SW(in0, in1, in2, in3, out0, out1, out2, out3) do { \ - v16u8 tmp0, tmp1; \ - v8i16 tmp2, tmp3; \ - ILVRL_B2_UB(in0, in1, tmp0, tmp1); \ - HSUB_UB2_SH(tmp0, tmp1, tmp2, tmp3); \ - DPADD_SH2_SW(tmp2, tmp3, tmp2, tmp3, out0, out1); \ - ILVRL_B2_UB(in2, in3, tmp0, tmp1); \ - HSUB_UB2_SH(tmp0, tmp1, tmp2, tmp3); \ - DPADD_SH2_SW(tmp2, tmp3, tmp2, tmp3, out2, out3); \ -} while (0) - -static int SSE16x16_MSA(const uint8_t* a, const uint8_t* b) { - uint32_t sum; - v16u8 src0, src1, src2, src3, src4, src5, src6, src7; - v16u8 ref0, ref1, ref2, ref3, ref4, ref5, ref6, ref7; - v4i32 out0, out1, out2, out3; - - LD_UB8(a, BPS, src0, src1, src2, src3, src4, src5, src6, src7); - LD_UB8(b, BPS, ref0, ref1, ref2, ref3, ref4, ref5, ref6, ref7); - PACK_DOTP_UB4_SW(src0, ref0, src1, ref1, out0, out1, out2, out3); - PACK_DPADD_UB4_SW(src2, ref2, src3, ref3, out0, out1, out2, out3); - PACK_DPADD_UB4_SW(src4, ref4, src5, ref5, out0, out1, out2, out3); - PACK_DPADD_UB4_SW(src6, ref6, src7, ref7, out0, out1, out2, out3); - a += 8 * BPS; - b += 8 * BPS; - LD_UB8(a, BPS, src0, src1, src2, src3, src4, src5, src6, src7); - LD_UB8(b, BPS, ref0, ref1, ref2, ref3, ref4, ref5, ref6, ref7); - PACK_DPADD_UB4_SW(src0, ref0, src1, ref1, out0, out1, out2, out3); - PACK_DPADD_UB4_SW(src2, ref2, src3, ref3, out0, out1, out2, out3); - PACK_DPADD_UB4_SW(src4, ref4, src5, ref5, out0, out1, out2, out3); - PACK_DPADD_UB4_SW(src6, ref6, src7, ref7, out0, out1, out2, out3); - out0 += out1; - out2 += out3; - out0 += out2; - sum = HADD_SW_S32(out0); - return sum; -} - -static int SSE16x8_MSA(const uint8_t* a, const uint8_t* b) { - uint32_t sum; - v16u8 src0, src1, src2, src3, src4, src5, src6, src7; - v16u8 ref0, ref1, ref2, ref3, ref4, ref5, ref6, ref7; - v4i32 out0, out1, out2, out3; - - LD_UB8(a, BPS, src0, src1, src2, src3, src4, src5, src6, src7); - LD_UB8(b, BPS, ref0, ref1, ref2, ref3, ref4, ref5, ref6, ref7); - PACK_DOTP_UB4_SW(src0, ref0, src1, ref1, out0, out1, out2, out3); - PACK_DPADD_UB4_SW(src2, ref2, src3, ref3, out0, out1, out2, out3); - PACK_DPADD_UB4_SW(src4, ref4, src5, ref5, out0, out1, out2, out3); - PACK_DPADD_UB4_SW(src6, ref6, src7, ref7, out0, out1, out2, out3); - out0 += out1; - out2 += out3; - out0 += out2; - sum = HADD_SW_S32(out0); - return sum; -} - -static int SSE8x8_MSA(const uint8_t* a, const uint8_t* b) { - uint32_t sum; - v16u8 src0, src1, src2, src3, src4, src5, src6, src7; - v16u8 ref0, ref1, ref2, ref3, ref4, ref5, ref6, ref7; - v16u8 t0, t1, t2, t3; - v4i32 out0, out1, out2, out3; - - LD_UB8(a, BPS, src0, src1, src2, src3, src4, src5, src6, src7); - LD_UB8(b, BPS, ref0, ref1, ref2, ref3, ref4, ref5, ref6, ref7); - ILVR_B4_UB(src0, src1, src2, src3, ref0, ref1, ref2, ref3, t0, t1, t2, t3); - PACK_DOTP_UB4_SW(t0, t2, t1, t3, out0, out1, out2, out3); - ILVR_B4_UB(src4, src5, src6, src7, ref4, ref5, ref6, ref7, t0, t1, t2, t3); - PACK_DPADD_UB4_SW(t0, t2, t1, t3, out0, out1, out2, out3); - out0 += out1; - out2 += out3; - out0 += out2; - sum = HADD_SW_S32(out0); - return sum; -} - -static int SSE4x4_MSA(const uint8_t* a, const uint8_t* b) { - uint32_t sum = 0; - uint32_t src0, src1, src2, src3, ref0, ref1, ref2, ref3; - v16u8 src = { 0 }, ref = { 0 }, tmp0, tmp1; - v8i16 diff0, diff1; - v4i32 out0, out1; - - LW4(a, BPS, src0, src1, src2, src3); - LW4(b, BPS, ref0, ref1, ref2, ref3); - INSERT_W4_UB(src0, src1, src2, src3, src); - INSERT_W4_UB(ref0, ref1, ref2, ref3, ref); - ILVRL_B2_UB(src, ref, tmp0, tmp1); - HSUB_UB2_SH(tmp0, tmp1, diff0, diff1); - DOTP_SH2_SW(diff0, diff1, diff0, diff1, out0, out1); - out0 += out1; - sum = HADD_SW_S32(out0); - return sum; -} - -//------------------------------------------------------------------------------ -// Quantization - -static int QuantizeBlock_MSA(int16_t in[16], int16_t out[16], - const VP8Matrix* const mtx) { - int sum; - v8i16 in0, in1, sh0, sh1, out0, out1; - v8i16 tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, sign0, sign1; - v4i32 s0, s1, s2, s3, b0, b1, b2, b3, t0, t1, t2, t3; - const v8i16 zero = { 0 }; - const v8i16 zigzag0 = { 0, 1, 4, 8, 5, 2, 3, 6 }; - const v8i16 zigzag1 = { 9, 12, 13, 10, 7, 11, 14, 15 }; - const v8i16 maxlevel = __msa_fill_h(MAX_LEVEL); - - LD_SH2(&in[0], 8, in0, in1); - LD_SH2(&mtx->sharpen_[0], 8, sh0, sh1); - tmp4 = __msa_add_a_h(in0, zero); - tmp5 = __msa_add_a_h(in1, zero); - ILVRL_H2_SH(sh0, tmp4, tmp0, tmp1); - ILVRL_H2_SH(sh1, tmp5, tmp2, tmp3); - HADD_SH4_SW(tmp0, tmp1, tmp2, tmp3, s0, s1, s2, s3); - sign0 = (in0 < zero); - sign1 = (in1 < zero); // sign - LD_SH2(&mtx->iq_[0], 8, tmp0, tmp1); // iq - ILVRL_H2_SW(zero, tmp0, t0, t1); - ILVRL_H2_SW(zero, tmp1, t2, t3); - LD_SW4(&mtx->bias_[0], 4, b0, b1, b2, b3); // bias - MUL4(t0, s0, t1, s1, t2, s2, t3, s3, t0, t1, t2, t3); - ADD4(b0, t0, b1, t1, b2, t2, b3, t3, b0, b1, b2, b3); - SRAI_W4_SW(b0, b1, b2, b3, 17); - PCKEV_H2_SH(b1, b0, b3, b2, tmp2, tmp3); - tmp0 = (tmp2 > maxlevel); - tmp1 = (tmp3 > maxlevel); - tmp2 = (v8i16)__msa_bmnz_v((v16u8)tmp2, (v16u8)maxlevel, (v16u8)tmp0); - tmp3 = (v8i16)__msa_bmnz_v((v16u8)tmp3, (v16u8)maxlevel, (v16u8)tmp1); - SUB2(zero, tmp2, zero, tmp3, tmp0, tmp1); - tmp2 = (v8i16)__msa_bmnz_v((v16u8)tmp2, (v16u8)tmp0, (v16u8)sign0); - tmp3 = (v8i16)__msa_bmnz_v((v16u8)tmp3, (v16u8)tmp1, (v16u8)sign1); - LD_SW4(&mtx->zthresh_[0], 4, t0, t1, t2, t3); // zthresh - t0 = (s0 > t0); - t1 = (s1 > t1); - t2 = (s2 > t2); - t3 = (s3 > t3); - PCKEV_H2_SH(t1, t0, t3, t2, tmp0, tmp1); - tmp4 = (v8i16)__msa_bmnz_v((v16u8)zero, (v16u8)tmp2, (v16u8)tmp0); - tmp5 = (v8i16)__msa_bmnz_v((v16u8)zero, (v16u8)tmp3, (v16u8)tmp1); - LD_SH2(&mtx->q_[0], 8, tmp0, tmp1); - MUL2(tmp4, tmp0, tmp5, tmp1, in0, in1); - VSHF_H2_SH(tmp4, tmp5, tmp4, tmp5, zigzag0, zigzag1, out0, out1); - ST_SH2(in0, in1, &in[0], 8); - ST_SH2(out0, out1, &out[0], 8); - out0 = __msa_add_a_h(out0, out1); - sum = HADD_SH_S32(out0); - return (sum > 0); -} - -static int Quantize2Blocks_MSA(int16_t in[32], int16_t out[32], - const VP8Matrix* const mtx) { - int nz; - nz = VP8EncQuantizeBlock(in + 0 * 16, out + 0 * 16, mtx) << 0; - nz |= VP8EncQuantizeBlock(in + 1 * 16, out + 1 * 16, mtx) << 1; - return nz; -} - -//------------------------------------------------------------------------------ -// Entry point - -extern void VP8EncDspInitMSA(void); - -WEBP_TSAN_IGNORE_FUNCTION void VP8EncDspInitMSA(void) { - VP8ITransform = ITransform_MSA; - VP8FTransform = FTransform_MSA; - VP8FTransformWHT = FTransformWHT_MSA; - - VP8TDisto4x4 = Disto4x4_MSA; - VP8TDisto16x16 = Disto16x16_MSA; - VP8CollectHistogram = CollectHistogram_MSA; - - VP8EncPredLuma4 = Intra4Preds_MSA; - VP8EncPredLuma16 = Intra16Preds_MSA; - VP8EncPredChroma8 = IntraChromaPreds_MSA; - - VP8SSE16x16 = SSE16x16_MSA; - VP8SSE16x8 = SSE16x8_MSA; - VP8SSE8x8 = SSE8x8_MSA; - VP8SSE4x4 = SSE4x4_MSA; - - VP8EncQuantizeBlock = QuantizeBlock_MSA; - VP8EncQuantize2Blocks = Quantize2Blocks_MSA; - VP8EncQuantizeBlockWHT = QuantizeBlock_MSA; -} - -#else // !WEBP_USE_MSA - -WEBP_DSP_INIT_STUB(VP8EncDspInitMSA) - -#endif // WEBP_USE_MSA diff --git a/Extended/libwebp/src/dsp/enc_neon.c b/Extended/libwebp/src/dsp/enc_neon.c deleted file mode 100644 index 43bf124..0000000 --- a/Extended/libwebp/src/dsp/enc_neon.c +++ /dev/null @@ -1,938 +0,0 @@ -// Copyright 2012 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// ARM NEON version of speed-critical encoding functions. -// -// adapted from libvpx (http://www.webmproject.org/code/) - -#include "src/dsp/dsp.h" - -#if defined(WEBP_USE_NEON) - -#include - -#include "src/dsp/neon.h" -#include "src/enc/vp8i_enc.h" - -//------------------------------------------------------------------------------ -// Transforms (Paragraph 14.4) - -// Inverse transform. -// This code is pretty much the same as TransformOne in the dec_neon.c, except -// for subtraction to *ref. See the comments there for algorithmic explanations. - -static const int16_t kC1 = 20091; -static const int16_t kC2 = 17734; // half of kC2, actually. See comment above. - -// This code works but is *slower* than the inlined-asm version below -// (with gcc-4.6). So we disable it for now. Later, it'll be conditional to -// WEBP_USE_INTRINSICS define. -// With gcc-4.8, it's a little faster speed than inlined-assembly. -#if defined(WEBP_USE_INTRINSICS) - -// Treats 'v' as an uint8x8_t and zero extends to an int16x8_t. -static WEBP_INLINE int16x8_t ConvertU8ToS16_NEON(uint32x2_t v) { - return vreinterpretq_s16_u16(vmovl_u8(vreinterpret_u8_u32(v))); -} - -// Performs unsigned 8b saturation on 'dst01' and 'dst23' storing the result -// to the corresponding rows of 'dst'. -static WEBP_INLINE void SaturateAndStore4x4_NEON(uint8_t* const dst, - const int16x8_t dst01, - const int16x8_t dst23) { - // Unsigned saturate to 8b. - const uint8x8_t dst01_u8 = vqmovun_s16(dst01); - const uint8x8_t dst23_u8 = vqmovun_s16(dst23); - - // Store the results. - vst1_lane_u32((uint32_t*)(dst + 0 * BPS), vreinterpret_u32_u8(dst01_u8), 0); - vst1_lane_u32((uint32_t*)(dst + 1 * BPS), vreinterpret_u32_u8(dst01_u8), 1); - vst1_lane_u32((uint32_t*)(dst + 2 * BPS), vreinterpret_u32_u8(dst23_u8), 0); - vst1_lane_u32((uint32_t*)(dst + 3 * BPS), vreinterpret_u32_u8(dst23_u8), 1); -} - -static WEBP_INLINE void Add4x4_NEON(const int16x8_t row01, - const int16x8_t row23, - const uint8_t* const ref, - uint8_t* const dst) { - uint32x2_t dst01 = vdup_n_u32(0); - uint32x2_t dst23 = vdup_n_u32(0); - - // Load the source pixels. - dst01 = vld1_lane_u32((uint32_t*)(ref + 0 * BPS), dst01, 0); - dst23 = vld1_lane_u32((uint32_t*)(ref + 2 * BPS), dst23, 0); - dst01 = vld1_lane_u32((uint32_t*)(ref + 1 * BPS), dst01, 1); - dst23 = vld1_lane_u32((uint32_t*)(ref + 3 * BPS), dst23, 1); - - { - // Convert to 16b. - const int16x8_t dst01_s16 = ConvertU8ToS16_NEON(dst01); - const int16x8_t dst23_s16 = ConvertU8ToS16_NEON(dst23); - - // Descale with rounding. - const int16x8_t out01 = vrsraq_n_s16(dst01_s16, row01, 3); - const int16x8_t out23 = vrsraq_n_s16(dst23_s16, row23, 3); - // Add the inverse transform. - SaturateAndStore4x4_NEON(dst, out01, out23); - } -} - -static WEBP_INLINE void Transpose8x2_NEON(const int16x8_t in0, - const int16x8_t in1, - int16x8x2_t* const out) { - // a0 a1 a2 a3 | b0 b1 b2 b3 => a0 b0 c0 d0 | a1 b1 c1 d1 - // c0 c1 c2 c3 | d0 d1 d2 d3 a2 b2 c2 d2 | a3 b3 c3 d3 - const int16x8x2_t tmp0 = vzipq_s16(in0, in1); // a0 c0 a1 c1 a2 c2 ... - // b0 d0 b1 d1 b2 d2 ... - *out = vzipq_s16(tmp0.val[0], tmp0.val[1]); -} - -static WEBP_INLINE void TransformPass_NEON(int16x8x2_t* const rows) { - // {rows} = in0 | in4 - // in8 | in12 - // B1 = in4 | in12 - const int16x8_t B1 = - vcombine_s16(vget_high_s16(rows->val[0]), vget_high_s16(rows->val[1])); - // C0 = kC1 * in4 | kC1 * in12 - // C1 = kC2 * in4 | kC2 * in12 - const int16x8_t C0 = vsraq_n_s16(B1, vqdmulhq_n_s16(B1, kC1), 1); - const int16x8_t C1 = vqdmulhq_n_s16(B1, kC2); - const int16x4_t a = vqadd_s16(vget_low_s16(rows->val[0]), - vget_low_s16(rows->val[1])); // in0 + in8 - const int16x4_t b = vqsub_s16(vget_low_s16(rows->val[0]), - vget_low_s16(rows->val[1])); // in0 - in8 - // c = kC2 * in4 - kC1 * in12 - // d = kC1 * in4 + kC2 * in12 - const int16x4_t c = vqsub_s16(vget_low_s16(C1), vget_high_s16(C0)); - const int16x4_t d = vqadd_s16(vget_low_s16(C0), vget_high_s16(C1)); - const int16x8_t D0 = vcombine_s16(a, b); // D0 = a | b - const int16x8_t D1 = vcombine_s16(d, c); // D1 = d | c - const int16x8_t E0 = vqaddq_s16(D0, D1); // a+d | b+c - const int16x8_t E_tmp = vqsubq_s16(D0, D1); // a-d | b-c - const int16x8_t E1 = vcombine_s16(vget_high_s16(E_tmp), vget_low_s16(E_tmp)); - Transpose8x2_NEON(E0, E1, rows); -} - -static void ITransformOne_NEON(const uint8_t* ref, - const int16_t* in, uint8_t* dst) { - int16x8x2_t rows; - INIT_VECTOR2(rows, vld1q_s16(in + 0), vld1q_s16(in + 8)); - TransformPass_NEON(&rows); - TransformPass_NEON(&rows); - Add4x4_NEON(rows.val[0], rows.val[1], ref, dst); -} - -#else - -static void ITransformOne_NEON(const uint8_t* ref, - const int16_t* in, uint8_t* dst) { - const int kBPS = BPS; - const int16_t kC1C2[] = { kC1, kC2, 0, 0 }; - - __asm__ volatile ( - "vld1.16 {q1, q2}, [%[in]] \n" - "vld1.16 {d0}, [%[kC1C2]] \n" - - // d2: in[0] - // d3: in[8] - // d4: in[4] - // d5: in[12] - "vswp d3, d4 \n" - - // q8 = {in[4], in[12]} * kC1 * 2 >> 16 - // q9 = {in[4], in[12]} * kC2 >> 16 - "vqdmulh.s16 q8, q2, d0[0] \n" - "vqdmulh.s16 q9, q2, d0[1] \n" - - // d22 = a = in[0] + in[8] - // d23 = b = in[0] - in[8] - "vqadd.s16 d22, d2, d3 \n" - "vqsub.s16 d23, d2, d3 \n" - - // q8 = in[4]/[12] * kC1 >> 16 - "vshr.s16 q8, q8, #1 \n" - - // Add {in[4], in[12]} back after the multiplication. - "vqadd.s16 q8, q2, q8 \n" - - // d20 = c = in[4]*kC2 - in[12]*kC1 - // d21 = d = in[4]*kC1 + in[12]*kC2 - "vqsub.s16 d20, d18, d17 \n" - "vqadd.s16 d21, d19, d16 \n" - - // d2 = tmp[0] = a + d - // d3 = tmp[1] = b + c - // d4 = tmp[2] = b - c - // d5 = tmp[3] = a - d - "vqadd.s16 d2, d22, d21 \n" - "vqadd.s16 d3, d23, d20 \n" - "vqsub.s16 d4, d23, d20 \n" - "vqsub.s16 d5, d22, d21 \n" - - "vzip.16 q1, q2 \n" - "vzip.16 q1, q2 \n" - - "vswp d3, d4 \n" - - // q8 = {tmp[4], tmp[12]} * kC1 * 2 >> 16 - // q9 = {tmp[4], tmp[12]} * kC2 >> 16 - "vqdmulh.s16 q8, q2, d0[0] \n" - "vqdmulh.s16 q9, q2, d0[1] \n" - - // d22 = a = tmp[0] + tmp[8] - // d23 = b = tmp[0] - tmp[8] - "vqadd.s16 d22, d2, d3 \n" - "vqsub.s16 d23, d2, d3 \n" - - "vshr.s16 q8, q8, #1 \n" - "vqadd.s16 q8, q2, q8 \n" - - // d20 = c = in[4]*kC2 - in[12]*kC1 - // d21 = d = in[4]*kC1 + in[12]*kC2 - "vqsub.s16 d20, d18, d17 \n" - "vqadd.s16 d21, d19, d16 \n" - - // d2 = tmp[0] = a + d - // d3 = tmp[1] = b + c - // d4 = tmp[2] = b - c - // d5 = tmp[3] = a - d - "vqadd.s16 d2, d22, d21 \n" - "vqadd.s16 d3, d23, d20 \n" - "vqsub.s16 d4, d23, d20 \n" - "vqsub.s16 d5, d22, d21 \n" - - "vld1.32 d6[0], [%[ref]], %[kBPS] \n" - "vld1.32 d6[1], [%[ref]], %[kBPS] \n" - "vld1.32 d7[0], [%[ref]], %[kBPS] \n" - "vld1.32 d7[1], [%[ref]], %[kBPS] \n" - - "sub %[ref], %[ref], %[kBPS], lsl #2 \n" - - // (val) + 4 >> 3 - "vrshr.s16 d2, d2, #3 \n" - "vrshr.s16 d3, d3, #3 \n" - "vrshr.s16 d4, d4, #3 \n" - "vrshr.s16 d5, d5, #3 \n" - - "vzip.16 q1, q2 \n" - "vzip.16 q1, q2 \n" - - // Must accumulate before saturating - "vmovl.u8 q8, d6 \n" - "vmovl.u8 q9, d7 \n" - - "vqadd.s16 q1, q1, q8 \n" - "vqadd.s16 q2, q2, q9 \n" - - "vqmovun.s16 d0, q1 \n" - "vqmovun.s16 d1, q2 \n" - - "vst1.32 d0[0], [%[dst]], %[kBPS] \n" - "vst1.32 d0[1], [%[dst]], %[kBPS] \n" - "vst1.32 d1[0], [%[dst]], %[kBPS] \n" - "vst1.32 d1[1], [%[dst]] \n" - - : [in] "+r"(in), [dst] "+r"(dst) // modified registers - : [kBPS] "r"(kBPS), [kC1C2] "r"(kC1C2), [ref] "r"(ref) // constants - : "memory", "q0", "q1", "q2", "q8", "q9", "q10", "q11" // clobbered - ); -} - -#endif // WEBP_USE_INTRINSICS - -static void ITransform_NEON(const uint8_t* ref, - const int16_t* in, uint8_t* dst, int do_two) { - ITransformOne_NEON(ref, in, dst); - if (do_two) { - ITransformOne_NEON(ref + 4, in + 16, dst + 4); - } -} - -// Load all 4x4 pixels into a single uint8x16_t variable. -static uint8x16_t Load4x4_NEON(const uint8_t* src) { - uint32x4_t out = vdupq_n_u32(0); - out = vld1q_lane_u32((const uint32_t*)(src + 0 * BPS), out, 0); - out = vld1q_lane_u32((const uint32_t*)(src + 1 * BPS), out, 1); - out = vld1q_lane_u32((const uint32_t*)(src + 2 * BPS), out, 2); - out = vld1q_lane_u32((const uint32_t*)(src + 3 * BPS), out, 3); - return vreinterpretq_u8_u32(out); -} - -// Forward transform. - -#if defined(WEBP_USE_INTRINSICS) - -static WEBP_INLINE void Transpose4x4_S16_NEON(const int16x4_t A, - const int16x4_t B, - const int16x4_t C, - const int16x4_t D, - int16x8_t* const out01, - int16x8_t* const out32) { - const int16x4x2_t AB = vtrn_s16(A, B); - const int16x4x2_t CD = vtrn_s16(C, D); - const int32x2x2_t tmp02 = vtrn_s32(vreinterpret_s32_s16(AB.val[0]), - vreinterpret_s32_s16(CD.val[0])); - const int32x2x2_t tmp13 = vtrn_s32(vreinterpret_s32_s16(AB.val[1]), - vreinterpret_s32_s16(CD.val[1])); - *out01 = vreinterpretq_s16_s64( - vcombine_s64(vreinterpret_s64_s32(tmp02.val[0]), - vreinterpret_s64_s32(tmp13.val[0]))); - *out32 = vreinterpretq_s16_s64( - vcombine_s64(vreinterpret_s64_s32(tmp13.val[1]), - vreinterpret_s64_s32(tmp02.val[1]))); -} - -static WEBP_INLINE int16x8_t DiffU8ToS16_NEON(const uint8x8_t a, - const uint8x8_t b) { - return vreinterpretq_s16_u16(vsubl_u8(a, b)); -} - -static void FTransform_NEON(const uint8_t* src, const uint8_t* ref, - int16_t* out) { - int16x8_t d0d1, d3d2; // working 4x4 int16 variables - { - const uint8x16_t S0 = Load4x4_NEON(src); - const uint8x16_t R0 = Load4x4_NEON(ref); - const int16x8_t D0D1 = DiffU8ToS16_NEON(vget_low_u8(S0), vget_low_u8(R0)); - const int16x8_t D2D3 = DiffU8ToS16_NEON(vget_high_u8(S0), vget_high_u8(R0)); - const int16x4_t D0 = vget_low_s16(D0D1); - const int16x4_t D1 = vget_high_s16(D0D1); - const int16x4_t D2 = vget_low_s16(D2D3); - const int16x4_t D3 = vget_high_s16(D2D3); - Transpose4x4_S16_NEON(D0, D1, D2, D3, &d0d1, &d3d2); - } - { // 1rst pass - const int32x4_t kCst937 = vdupq_n_s32(937); - const int32x4_t kCst1812 = vdupq_n_s32(1812); - const int16x8_t a0a1 = vaddq_s16(d0d1, d3d2); // d0+d3 | d1+d2 (=a0|a1) - const int16x8_t a3a2 = vsubq_s16(d0d1, d3d2); // d0-d3 | d1-d2 (=a3|a2) - const int16x8_t a0a1_2 = vshlq_n_s16(a0a1, 3); - const int16x4_t tmp0 = vadd_s16(vget_low_s16(a0a1_2), - vget_high_s16(a0a1_2)); - const int16x4_t tmp2 = vsub_s16(vget_low_s16(a0a1_2), - vget_high_s16(a0a1_2)); - const int32x4_t a3_2217 = vmull_n_s16(vget_low_s16(a3a2), 2217); - const int32x4_t a2_2217 = vmull_n_s16(vget_high_s16(a3a2), 2217); - const int32x4_t a2_p_a3 = vmlal_n_s16(a2_2217, vget_low_s16(a3a2), 5352); - const int32x4_t a3_m_a2 = vmlsl_n_s16(a3_2217, vget_high_s16(a3a2), 5352); - const int16x4_t tmp1 = vshrn_n_s32(vaddq_s32(a2_p_a3, kCst1812), 9); - const int16x4_t tmp3 = vshrn_n_s32(vaddq_s32(a3_m_a2, kCst937), 9); - Transpose4x4_S16_NEON(tmp0, tmp1, tmp2, tmp3, &d0d1, &d3d2); - } - { // 2nd pass - // the (1<<16) addition is for the replacement: a3!=0 <-> 1-(a3==0) - const int32x4_t kCst12000 = vdupq_n_s32(12000 + (1 << 16)); - const int32x4_t kCst51000 = vdupq_n_s32(51000); - const int16x8_t a0a1 = vaddq_s16(d0d1, d3d2); // d0+d3 | d1+d2 (=a0|a1) - const int16x8_t a3a2 = vsubq_s16(d0d1, d3d2); // d0-d3 | d1-d2 (=a3|a2) - const int16x4_t a0_k7 = vadd_s16(vget_low_s16(a0a1), vdup_n_s16(7)); - const int16x4_t out0 = vshr_n_s16(vadd_s16(a0_k7, vget_high_s16(a0a1)), 4); - const int16x4_t out2 = vshr_n_s16(vsub_s16(a0_k7, vget_high_s16(a0a1)), 4); - const int32x4_t a3_2217 = vmull_n_s16(vget_low_s16(a3a2), 2217); - const int32x4_t a2_2217 = vmull_n_s16(vget_high_s16(a3a2), 2217); - const int32x4_t a2_p_a3 = vmlal_n_s16(a2_2217, vget_low_s16(a3a2), 5352); - const int32x4_t a3_m_a2 = vmlsl_n_s16(a3_2217, vget_high_s16(a3a2), 5352); - const int16x4_t tmp1 = vaddhn_s32(a2_p_a3, kCst12000); - const int16x4_t out3 = vaddhn_s32(a3_m_a2, kCst51000); - const int16x4_t a3_eq_0 = - vreinterpret_s16_u16(vceq_s16(vget_low_s16(a3a2), vdup_n_s16(0))); - const int16x4_t out1 = vadd_s16(tmp1, a3_eq_0); - vst1_s16(out + 0, out0); - vst1_s16(out + 4, out1); - vst1_s16(out + 8, out2); - vst1_s16(out + 12, out3); - } -} - -#else - -// adapted from vp8/encoder/arm/neon/shortfdct_neon.asm -static const int16_t kCoeff16[] = { - 5352, 5352, 5352, 5352, 2217, 2217, 2217, 2217 -}; -static const int32_t kCoeff32[] = { - 1812, 1812, 1812, 1812, - 937, 937, 937, 937, - 12000, 12000, 12000, 12000, - 51000, 51000, 51000, 51000 -}; - -static void FTransform_NEON(const uint8_t* src, const uint8_t* ref, - int16_t* out) { - const int kBPS = BPS; - const uint8_t* src_ptr = src; - const uint8_t* ref_ptr = ref; - const int16_t* coeff16 = kCoeff16; - const int32_t* coeff32 = kCoeff32; - - __asm__ volatile ( - // load src into q4, q5 in high half - "vld1.8 {d8}, [%[src_ptr]], %[kBPS] \n" - "vld1.8 {d10}, [%[src_ptr]], %[kBPS] \n" - "vld1.8 {d9}, [%[src_ptr]], %[kBPS] \n" - "vld1.8 {d11}, [%[src_ptr]] \n" - - // load ref into q6, q7 in high half - "vld1.8 {d12}, [%[ref_ptr]], %[kBPS] \n" - "vld1.8 {d14}, [%[ref_ptr]], %[kBPS] \n" - "vld1.8 {d13}, [%[ref_ptr]], %[kBPS] \n" - "vld1.8 {d15}, [%[ref_ptr]] \n" - - // Pack the high values in to q4 and q6 - "vtrn.32 q4, q5 \n" - "vtrn.32 q6, q7 \n" - - // d[0-3] = src - ref - "vsubl.u8 q0, d8, d12 \n" - "vsubl.u8 q1, d9, d13 \n" - - // load coeff16 into q8(d16=5352, d17=2217) - "vld1.16 {q8}, [%[coeff16]] \n" - - // load coeff32 high half into q9 = 1812, q10 = 937 - "vld1.32 {q9, q10}, [%[coeff32]]! \n" - - // load coeff32 low half into q11=12000, q12=51000 - "vld1.32 {q11,q12}, [%[coeff32]] \n" - - // part 1 - // Transpose. Register dN is the same as dN in C - "vtrn.32 d0, d2 \n" - "vtrn.32 d1, d3 \n" - "vtrn.16 d0, d1 \n" - "vtrn.16 d2, d3 \n" - - "vadd.s16 d4, d0, d3 \n" // a0 = d0 + d3 - "vadd.s16 d5, d1, d2 \n" // a1 = d1 + d2 - "vsub.s16 d6, d1, d2 \n" // a2 = d1 - d2 - "vsub.s16 d7, d0, d3 \n" // a3 = d0 - d3 - - "vadd.s16 d0, d4, d5 \n" // a0 + a1 - "vshl.s16 d0, d0, #3 \n" // temp[0+i*4] = (a0+a1) << 3 - "vsub.s16 d2, d4, d5 \n" // a0 - a1 - "vshl.s16 d2, d2, #3 \n" // (temp[2+i*4] = (a0-a1) << 3 - - "vmlal.s16 q9, d7, d16 \n" // a3*5352 + 1812 - "vmlal.s16 q10, d7, d17 \n" // a3*2217 + 937 - "vmlal.s16 q9, d6, d17 \n" // a2*2217 + a3*5352 + 1812 - "vmlsl.s16 q10, d6, d16 \n" // a3*2217 + 937 - a2*5352 - - // temp[1+i*4] = (d2*2217 + d3*5352 + 1812) >> 9 - // temp[3+i*4] = (d3*2217 + 937 - d2*5352) >> 9 - "vshrn.s32 d1, q9, #9 \n" - "vshrn.s32 d3, q10, #9 \n" - - // part 2 - // transpose d0=ip[0], d1=ip[4], d2=ip[8], d3=ip[12] - "vtrn.32 d0, d2 \n" - "vtrn.32 d1, d3 \n" - "vtrn.16 d0, d1 \n" - "vtrn.16 d2, d3 \n" - - "vmov.s16 d26, #7 \n" - - "vadd.s16 d4, d0, d3 \n" // a1 = ip[0] + ip[12] - "vadd.s16 d5, d1, d2 \n" // b1 = ip[4] + ip[8] - "vsub.s16 d6, d1, d2 \n" // c1 = ip[4] - ip[8] - "vadd.s16 d4, d4, d26 \n" // a1 + 7 - "vsub.s16 d7, d0, d3 \n" // d1 = ip[0] - ip[12] - - "vadd.s16 d0, d4, d5 \n" // op[0] = a1 + b1 + 7 - "vsub.s16 d2, d4, d5 \n" // op[8] = a1 - b1 + 7 - - "vmlal.s16 q11, d7, d16 \n" // d1*5352 + 12000 - "vmlal.s16 q12, d7, d17 \n" // d1*2217 + 51000 - - "vceq.s16 d4, d7, #0 \n" - - "vshr.s16 d0, d0, #4 \n" - "vshr.s16 d2, d2, #4 \n" - - "vmlal.s16 q11, d6, d17 \n" // c1*2217 + d1*5352 + 12000 - "vmlsl.s16 q12, d6, d16 \n" // d1*2217 - c1*5352 + 51000 - - "vmvn d4, d4 \n" // !(d1 == 0) - // op[4] = (c1*2217 + d1*5352 + 12000)>>16 - "vshrn.s32 d1, q11, #16 \n" - // op[4] += (d1!=0) - "vsub.s16 d1, d1, d4 \n" - // op[12]= (d1*2217 - c1*5352 + 51000)>>16 - "vshrn.s32 d3, q12, #16 \n" - - // set result to out array - "vst1.16 {q0, q1}, [%[out]] \n" - : [src_ptr] "+r"(src_ptr), [ref_ptr] "+r"(ref_ptr), - [coeff32] "+r"(coeff32) // modified registers - : [kBPS] "r"(kBPS), [coeff16] "r"(coeff16), - [out] "r"(out) // constants - : "memory", "q0", "q1", "q2", "q3", "q4", "q5", "q6", "q7", "q8", "q9", - "q10", "q11", "q12", "q13" // clobbered - ); -} - -#endif - -#define LOAD_LANE_16b(VALUE, LANE) do { \ - (VALUE) = vld1_lane_s16(src, (VALUE), (LANE)); \ - src += stride; \ -} while (0) - -static void FTransformWHT_NEON(const int16_t* src, int16_t* out) { - const int stride = 16; - const int16x4_t zero = vdup_n_s16(0); - int32x4x4_t tmp0; - int16x4x4_t in; - INIT_VECTOR4(in, zero, zero, zero, zero); - LOAD_LANE_16b(in.val[0], 0); - LOAD_LANE_16b(in.val[1], 0); - LOAD_LANE_16b(in.val[2], 0); - LOAD_LANE_16b(in.val[3], 0); - LOAD_LANE_16b(in.val[0], 1); - LOAD_LANE_16b(in.val[1], 1); - LOAD_LANE_16b(in.val[2], 1); - LOAD_LANE_16b(in.val[3], 1); - LOAD_LANE_16b(in.val[0], 2); - LOAD_LANE_16b(in.val[1], 2); - LOAD_LANE_16b(in.val[2], 2); - LOAD_LANE_16b(in.val[3], 2); - LOAD_LANE_16b(in.val[0], 3); - LOAD_LANE_16b(in.val[1], 3); - LOAD_LANE_16b(in.val[2], 3); - LOAD_LANE_16b(in.val[3], 3); - - { - // a0 = in[0 * 16] + in[2 * 16] - // a1 = in[1 * 16] + in[3 * 16] - // a2 = in[1 * 16] - in[3 * 16] - // a3 = in[0 * 16] - in[2 * 16] - const int32x4_t a0 = vaddl_s16(in.val[0], in.val[2]); - const int32x4_t a1 = vaddl_s16(in.val[1], in.val[3]); - const int32x4_t a2 = vsubl_s16(in.val[1], in.val[3]); - const int32x4_t a3 = vsubl_s16(in.val[0], in.val[2]); - tmp0.val[0] = vaddq_s32(a0, a1); - tmp0.val[1] = vaddq_s32(a3, a2); - tmp0.val[2] = vsubq_s32(a3, a2); - tmp0.val[3] = vsubq_s32(a0, a1); - } - { - const int32x4x4_t tmp1 = Transpose4x4_NEON(tmp0); - // a0 = tmp[0 + i] + tmp[ 8 + i] - // a1 = tmp[4 + i] + tmp[12 + i] - // a2 = tmp[4 + i] - tmp[12 + i] - // a3 = tmp[0 + i] - tmp[ 8 + i] - const int32x4_t a0 = vaddq_s32(tmp1.val[0], tmp1.val[2]); - const int32x4_t a1 = vaddq_s32(tmp1.val[1], tmp1.val[3]); - const int32x4_t a2 = vsubq_s32(tmp1.val[1], tmp1.val[3]); - const int32x4_t a3 = vsubq_s32(tmp1.val[0], tmp1.val[2]); - const int32x4_t b0 = vhaddq_s32(a0, a1); // (a0 + a1) >> 1 - const int32x4_t b1 = vhaddq_s32(a3, a2); // (a3 + a2) >> 1 - const int32x4_t b2 = vhsubq_s32(a3, a2); // (a3 - a2) >> 1 - const int32x4_t b3 = vhsubq_s32(a0, a1); // (a0 - a1) >> 1 - const int16x4_t out0 = vmovn_s32(b0); - const int16x4_t out1 = vmovn_s32(b1); - const int16x4_t out2 = vmovn_s32(b2); - const int16x4_t out3 = vmovn_s32(b3); - - vst1_s16(out + 0, out0); - vst1_s16(out + 4, out1); - vst1_s16(out + 8, out2); - vst1_s16(out + 12, out3); - } -} -#undef LOAD_LANE_16b - -//------------------------------------------------------------------------------ -// Texture distortion -// -// We try to match the spectral content (weighted) between source and -// reconstructed samples. - -// a 0123, b 0123 -// a 4567, b 4567 -// a 89ab, b 89ab -// a cdef, b cdef -// -// transpose -// -// a 048c, b 048c -// a 159d, b 159d -// a 26ae, b 26ae -// a 37bf, b 37bf -// -static WEBP_INLINE int16x8x4_t DistoTranspose4x4S16_NEON(int16x8x4_t q4_in) { - const int16x8x2_t q2_tmp0 = vtrnq_s16(q4_in.val[0], q4_in.val[1]); - const int16x8x2_t q2_tmp1 = vtrnq_s16(q4_in.val[2], q4_in.val[3]); - const int32x4x2_t q2_tmp2 = vtrnq_s32(vreinterpretq_s32_s16(q2_tmp0.val[0]), - vreinterpretq_s32_s16(q2_tmp1.val[0])); - const int32x4x2_t q2_tmp3 = vtrnq_s32(vreinterpretq_s32_s16(q2_tmp0.val[1]), - vreinterpretq_s32_s16(q2_tmp1.val[1])); - q4_in.val[0] = vreinterpretq_s16_s32(q2_tmp2.val[0]); - q4_in.val[2] = vreinterpretq_s16_s32(q2_tmp2.val[1]); - q4_in.val[1] = vreinterpretq_s16_s32(q2_tmp3.val[0]); - q4_in.val[3] = vreinterpretq_s16_s32(q2_tmp3.val[1]); - return q4_in; -} - -static WEBP_INLINE int16x8x4_t DistoHorizontalPass_NEON( - const int16x8x4_t q4_in) { - // {a0, a1} = {in[0] + in[2], in[1] + in[3]} - // {a3, a2} = {in[0] - in[2], in[1] - in[3]} - const int16x8_t q_a0 = vaddq_s16(q4_in.val[0], q4_in.val[2]); - const int16x8_t q_a1 = vaddq_s16(q4_in.val[1], q4_in.val[3]); - const int16x8_t q_a3 = vsubq_s16(q4_in.val[0], q4_in.val[2]); - const int16x8_t q_a2 = vsubq_s16(q4_in.val[1], q4_in.val[3]); - int16x8x4_t q4_out; - // tmp[0] = a0 + a1 - // tmp[1] = a3 + a2 - // tmp[2] = a3 - a2 - // tmp[3] = a0 - a1 - INIT_VECTOR4(q4_out, - vabsq_s16(vaddq_s16(q_a0, q_a1)), - vabsq_s16(vaddq_s16(q_a3, q_a2)), - vabdq_s16(q_a3, q_a2), vabdq_s16(q_a0, q_a1)); - return q4_out; -} - -static WEBP_INLINE int16x8x4_t DistoVerticalPass_NEON(const uint8x8x4_t q4_in) { - const int16x8_t q_a0 = vreinterpretq_s16_u16(vaddl_u8(q4_in.val[0], - q4_in.val[2])); - const int16x8_t q_a1 = vreinterpretq_s16_u16(vaddl_u8(q4_in.val[1], - q4_in.val[3])); - const int16x8_t q_a2 = vreinterpretq_s16_u16(vsubl_u8(q4_in.val[1], - q4_in.val[3])); - const int16x8_t q_a3 = vreinterpretq_s16_u16(vsubl_u8(q4_in.val[0], - q4_in.val[2])); - int16x8x4_t q4_out; - - INIT_VECTOR4(q4_out, - vaddq_s16(q_a0, q_a1), vaddq_s16(q_a3, q_a2), - vsubq_s16(q_a3, q_a2), vsubq_s16(q_a0, q_a1)); - return q4_out; -} - -static WEBP_INLINE int16x4x4_t DistoLoadW_NEON(const uint16_t* w) { - const uint16x8_t q_w07 = vld1q_u16(&w[0]); - const uint16x8_t q_w8f = vld1q_u16(&w[8]); - int16x4x4_t d4_w; - INIT_VECTOR4(d4_w, - vget_low_s16(vreinterpretq_s16_u16(q_w07)), - vget_high_s16(vreinterpretq_s16_u16(q_w07)), - vget_low_s16(vreinterpretq_s16_u16(q_w8f)), - vget_high_s16(vreinterpretq_s16_u16(q_w8f))); - return d4_w; -} - -static WEBP_INLINE int32x2_t DistoSum_NEON(const int16x8x4_t q4_in, - const int16x4x4_t d4_w) { - int32x2_t d_sum; - // sum += w[ 0] * abs(b0); - // sum += w[ 4] * abs(b1); - // sum += w[ 8] * abs(b2); - // sum += w[12] * abs(b3); - int32x4_t q_sum0 = vmull_s16(d4_w.val[0], vget_low_s16(q4_in.val[0])); - int32x4_t q_sum1 = vmull_s16(d4_w.val[1], vget_low_s16(q4_in.val[1])); - int32x4_t q_sum2 = vmull_s16(d4_w.val[2], vget_low_s16(q4_in.val[2])); - int32x4_t q_sum3 = vmull_s16(d4_w.val[3], vget_low_s16(q4_in.val[3])); - q_sum0 = vmlsl_s16(q_sum0, d4_w.val[0], vget_high_s16(q4_in.val[0])); - q_sum1 = vmlsl_s16(q_sum1, d4_w.val[1], vget_high_s16(q4_in.val[1])); - q_sum2 = vmlsl_s16(q_sum2, d4_w.val[2], vget_high_s16(q4_in.val[2])); - q_sum3 = vmlsl_s16(q_sum3, d4_w.val[3], vget_high_s16(q4_in.val[3])); - - q_sum0 = vaddq_s32(q_sum0, q_sum1); - q_sum2 = vaddq_s32(q_sum2, q_sum3); - q_sum2 = vaddq_s32(q_sum0, q_sum2); - d_sum = vpadd_s32(vget_low_s32(q_sum2), vget_high_s32(q_sum2)); - d_sum = vpadd_s32(d_sum, d_sum); - return d_sum; -} - -#define LOAD_LANE_32b(src, VALUE, LANE) \ - (VALUE) = vld1_lane_u32((const uint32_t*)(src), (VALUE), (LANE)) - -// Hadamard transform -// Returns the weighted sum of the absolute value of transformed coefficients. -// w[] contains a row-major 4 by 4 symmetric matrix. -static int Disto4x4_NEON(const uint8_t* const a, const uint8_t* const b, - const uint16_t* const w) { - uint32x2_t d_in_ab_0123 = vdup_n_u32(0); - uint32x2_t d_in_ab_4567 = vdup_n_u32(0); - uint32x2_t d_in_ab_89ab = vdup_n_u32(0); - uint32x2_t d_in_ab_cdef = vdup_n_u32(0); - uint8x8x4_t d4_in; - - // load data a, b - LOAD_LANE_32b(a + 0 * BPS, d_in_ab_0123, 0); - LOAD_LANE_32b(a + 1 * BPS, d_in_ab_4567, 0); - LOAD_LANE_32b(a + 2 * BPS, d_in_ab_89ab, 0); - LOAD_LANE_32b(a + 3 * BPS, d_in_ab_cdef, 0); - LOAD_LANE_32b(b + 0 * BPS, d_in_ab_0123, 1); - LOAD_LANE_32b(b + 1 * BPS, d_in_ab_4567, 1); - LOAD_LANE_32b(b + 2 * BPS, d_in_ab_89ab, 1); - LOAD_LANE_32b(b + 3 * BPS, d_in_ab_cdef, 1); - INIT_VECTOR4(d4_in, - vreinterpret_u8_u32(d_in_ab_0123), - vreinterpret_u8_u32(d_in_ab_4567), - vreinterpret_u8_u32(d_in_ab_89ab), - vreinterpret_u8_u32(d_in_ab_cdef)); - - { - // Vertical pass first to avoid a transpose (vertical and horizontal passes - // are commutative because w/kWeightY is symmetric) and subsequent - // transpose. - const int16x8x4_t q4_v = DistoVerticalPass_NEON(d4_in); - const int16x4x4_t d4_w = DistoLoadW_NEON(w); - // horizontal pass - const int16x8x4_t q4_t = DistoTranspose4x4S16_NEON(q4_v); - const int16x8x4_t q4_h = DistoHorizontalPass_NEON(q4_t); - int32x2_t d_sum = DistoSum_NEON(q4_h, d4_w); - - // abs(sum2 - sum1) >> 5 - d_sum = vabs_s32(d_sum); - d_sum = vshr_n_s32(d_sum, 5); - return vget_lane_s32(d_sum, 0); - } -} -#undef LOAD_LANE_32b - -static int Disto16x16_NEON(const uint8_t* const a, const uint8_t* const b, - const uint16_t* const w) { - int D = 0; - int x, y; - for (y = 0; y < 16 * BPS; y += 4 * BPS) { - for (x = 0; x < 16; x += 4) { - D += Disto4x4_NEON(a + x + y, b + x + y, w); - } - } - return D; -} - -//------------------------------------------------------------------------------ - -static void CollectHistogram_NEON(const uint8_t* ref, const uint8_t* pred, - int start_block, int end_block, - VP8Histogram* const histo) { - const uint16x8_t max_coeff_thresh = vdupq_n_u16(MAX_COEFF_THRESH); - int j; - int distribution[MAX_COEFF_THRESH + 1] = { 0 }; - for (j = start_block; j < end_block; ++j) { - int16_t out[16]; - FTransform_NEON(ref + VP8DspScan[j], pred + VP8DspScan[j], out); - { - int k; - const int16x8_t a0 = vld1q_s16(out + 0); - const int16x8_t b0 = vld1q_s16(out + 8); - const uint16x8_t a1 = vreinterpretq_u16_s16(vabsq_s16(a0)); - const uint16x8_t b1 = vreinterpretq_u16_s16(vabsq_s16(b0)); - const uint16x8_t a2 = vshrq_n_u16(a1, 3); - const uint16x8_t b2 = vshrq_n_u16(b1, 3); - const uint16x8_t a3 = vminq_u16(a2, max_coeff_thresh); - const uint16x8_t b3 = vminq_u16(b2, max_coeff_thresh); - vst1q_s16(out + 0, vreinterpretq_s16_u16(a3)); - vst1q_s16(out + 8, vreinterpretq_s16_u16(b3)); - // Convert coefficients to bin. - for (k = 0; k < 16; ++k) { - ++distribution[out[k]]; - } - } - } - VP8SetHistogramData(distribution, histo); -} - -//------------------------------------------------------------------------------ - -static WEBP_INLINE void AccumulateSSE16_NEON(const uint8_t* const a, - const uint8_t* const b, - uint32x4_t* const sum) { - const uint8x16_t a0 = vld1q_u8(a); - const uint8x16_t b0 = vld1q_u8(b); - const uint8x16_t abs_diff = vabdq_u8(a0, b0); - const uint16x8_t prod1 = vmull_u8(vget_low_u8(abs_diff), - vget_low_u8(abs_diff)); - const uint16x8_t prod2 = vmull_u8(vget_high_u8(abs_diff), - vget_high_u8(abs_diff)); - /* pair-wise adds and widen */ - const uint32x4_t sum1 = vpaddlq_u16(prod1); - const uint32x4_t sum2 = vpaddlq_u16(prod2); - *sum = vaddq_u32(*sum, vaddq_u32(sum1, sum2)); -} - -// Horizontal sum of all four uint32_t values in 'sum'. -static int SumToInt_NEON(uint32x4_t sum) { - const uint64x2_t sum2 = vpaddlq_u32(sum); - const uint64_t sum3 = vgetq_lane_u64(sum2, 0) + vgetq_lane_u64(sum2, 1); - return (int)sum3; -} - -static int SSE16x16_NEON(const uint8_t* a, const uint8_t* b) { - uint32x4_t sum = vdupq_n_u32(0); - int y; - for (y = 0; y < 16; ++y) { - AccumulateSSE16_NEON(a + y * BPS, b + y * BPS, &sum); - } - return SumToInt_NEON(sum); -} - -static int SSE16x8_NEON(const uint8_t* a, const uint8_t* b) { - uint32x4_t sum = vdupq_n_u32(0); - int y; - for (y = 0; y < 8; ++y) { - AccumulateSSE16_NEON(a + y * BPS, b + y * BPS, &sum); - } - return SumToInt_NEON(sum); -} - -static int SSE8x8_NEON(const uint8_t* a, const uint8_t* b) { - uint32x4_t sum = vdupq_n_u32(0); - int y; - for (y = 0; y < 8; ++y) { - const uint8x8_t a0 = vld1_u8(a + y * BPS); - const uint8x8_t b0 = vld1_u8(b + y * BPS); - const uint8x8_t abs_diff = vabd_u8(a0, b0); - const uint16x8_t prod = vmull_u8(abs_diff, abs_diff); - sum = vpadalq_u16(sum, prod); - } - return SumToInt_NEON(sum); -} - -static int SSE4x4_NEON(const uint8_t* a, const uint8_t* b) { - const uint8x16_t a0 = Load4x4_NEON(a); - const uint8x16_t b0 = Load4x4_NEON(b); - const uint8x16_t abs_diff = vabdq_u8(a0, b0); - const uint16x8_t prod1 = vmull_u8(vget_low_u8(abs_diff), - vget_low_u8(abs_diff)); - const uint16x8_t prod2 = vmull_u8(vget_high_u8(abs_diff), - vget_high_u8(abs_diff)); - /* pair-wise adds and widen */ - const uint32x4_t sum1 = vpaddlq_u16(prod1); - const uint32x4_t sum2 = vpaddlq_u16(prod2); - return SumToInt_NEON(vaddq_u32(sum1, sum2)); -} - -//------------------------------------------------------------------------------ - -// Compilation with gcc-4.6.x is problematic for now. -#if !defined(WORK_AROUND_GCC) - -static int16x8_t Quantize_NEON(int16_t* const in, - const VP8Matrix* const mtx, int offset) { - const uint16x8_t sharp = vld1q_u16(&mtx->sharpen_[offset]); - const uint16x8_t q = vld1q_u16(&mtx->q_[offset]); - const uint16x8_t iq = vld1q_u16(&mtx->iq_[offset]); - const uint32x4_t bias0 = vld1q_u32(&mtx->bias_[offset + 0]); - const uint32x4_t bias1 = vld1q_u32(&mtx->bias_[offset + 4]); - - const int16x8_t a = vld1q_s16(in + offset); // in - const uint16x8_t b = vreinterpretq_u16_s16(vabsq_s16(a)); // coeff = abs(in) - const int16x8_t sign = vshrq_n_s16(a, 15); // sign - const uint16x8_t c = vaddq_u16(b, sharp); // + sharpen - const uint32x4_t m0 = vmull_u16(vget_low_u16(c), vget_low_u16(iq)); - const uint32x4_t m1 = vmull_u16(vget_high_u16(c), vget_high_u16(iq)); - const uint32x4_t m2 = vhaddq_u32(m0, bias0); - const uint32x4_t m3 = vhaddq_u32(m1, bias1); // (coeff * iQ + bias) >> 1 - const uint16x8_t c0 = vcombine_u16(vshrn_n_u32(m2, 16), - vshrn_n_u32(m3, 16)); // QFIX=17 = 16+1 - const uint16x8_t c1 = vminq_u16(c0, vdupq_n_u16(MAX_LEVEL)); - const int16x8_t c2 = veorq_s16(vreinterpretq_s16_u16(c1), sign); - const int16x8_t c3 = vsubq_s16(c2, sign); // restore sign - const int16x8_t c4 = vmulq_s16(c3, vreinterpretq_s16_u16(q)); - vst1q_s16(in + offset, c4); - assert(QFIX == 17); // this function can't work as is if QFIX != 16+1 - return c3; -} - -static const uint8_t kShuffles[4][8] = { - { 0, 1, 2, 3, 8, 9, 16, 17 }, - { 10, 11, 4, 5, 6, 7, 12, 13 }, - { 18, 19, 24, 25, 26, 27, 20, 21 }, - { 14, 15, 22, 23, 28, 29, 30, 31 } -}; - -static int QuantizeBlock_NEON(int16_t in[16], int16_t out[16], - const VP8Matrix* const mtx) { - const int16x8_t out0 = Quantize_NEON(in, mtx, 0); - const int16x8_t out1 = Quantize_NEON(in, mtx, 8); - uint8x8x4_t shuffles; - // vtbl?_u8 are marked unavailable for iOS arm64 with Xcode < 6.3, use - // non-standard versions there. -#if defined(__APPLE__) && defined(__aarch64__) && \ - defined(__apple_build_version__) && (__apple_build_version__< 6020037) - uint8x16x2_t all_out; - INIT_VECTOR2(all_out, vreinterpretq_u8_s16(out0), vreinterpretq_u8_s16(out1)); - INIT_VECTOR4(shuffles, - vtbl2q_u8(all_out, vld1_u8(kShuffles[0])), - vtbl2q_u8(all_out, vld1_u8(kShuffles[1])), - vtbl2q_u8(all_out, vld1_u8(kShuffles[2])), - vtbl2q_u8(all_out, vld1_u8(kShuffles[3]))); -#else - uint8x8x4_t all_out; - INIT_VECTOR4(all_out, - vreinterpret_u8_s16(vget_low_s16(out0)), - vreinterpret_u8_s16(vget_high_s16(out0)), - vreinterpret_u8_s16(vget_low_s16(out1)), - vreinterpret_u8_s16(vget_high_s16(out1))); - INIT_VECTOR4(shuffles, - vtbl4_u8(all_out, vld1_u8(kShuffles[0])), - vtbl4_u8(all_out, vld1_u8(kShuffles[1])), - vtbl4_u8(all_out, vld1_u8(kShuffles[2])), - vtbl4_u8(all_out, vld1_u8(kShuffles[3]))); -#endif - // Zigzag reordering - vst1_u8((uint8_t*)(out + 0), shuffles.val[0]); - vst1_u8((uint8_t*)(out + 4), shuffles.val[1]); - vst1_u8((uint8_t*)(out + 8), shuffles.val[2]); - vst1_u8((uint8_t*)(out + 12), shuffles.val[3]); - // test zeros - if (*(uint64_t*)(out + 0) != 0) return 1; - if (*(uint64_t*)(out + 4) != 0) return 1; - if (*(uint64_t*)(out + 8) != 0) return 1; - if (*(uint64_t*)(out + 12) != 0) return 1; - return 0; -} - -static int Quantize2Blocks_NEON(int16_t in[32], int16_t out[32], - const VP8Matrix* const mtx) { - int nz; - nz = QuantizeBlock_NEON(in + 0 * 16, out + 0 * 16, mtx) << 0; - nz |= QuantizeBlock_NEON(in + 1 * 16, out + 1 * 16, mtx) << 1; - return nz; -} - -#endif // !WORK_AROUND_GCC - -//------------------------------------------------------------------------------ -// Entry point - -extern void VP8EncDspInitNEON(void); - -WEBP_TSAN_IGNORE_FUNCTION void VP8EncDspInitNEON(void) { - VP8ITransform = ITransform_NEON; - VP8FTransform = FTransform_NEON; - - VP8FTransformWHT = FTransformWHT_NEON; - - VP8TDisto4x4 = Disto4x4_NEON; - VP8TDisto16x16 = Disto16x16_NEON; - VP8CollectHistogram = CollectHistogram_NEON; - - VP8SSE16x16 = SSE16x16_NEON; - VP8SSE16x8 = SSE16x8_NEON; - VP8SSE8x8 = SSE8x8_NEON; - VP8SSE4x4 = SSE4x4_NEON; - -#if !defined(WORK_AROUND_GCC) - VP8EncQuantizeBlock = QuantizeBlock_NEON; - VP8EncQuantize2Blocks = Quantize2Blocks_NEON; -#endif -} - -#else // !WEBP_USE_NEON - -WEBP_DSP_INIT_STUB(VP8EncDspInitNEON) - -#endif // WEBP_USE_NEON diff --git a/Extended/libwebp/src/dsp/enc_sse2.c b/Extended/libwebp/src/dsp/enc_sse2.c deleted file mode 100644 index b2e78ed..0000000 --- a/Extended/libwebp/src/dsp/enc_sse2.c +++ /dev/null @@ -1,1381 +0,0 @@ -// Copyright 2011 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// SSE2 version of speed-critical encoding functions. -// -// Author: Christian Duvivier (cduvivier@google.com) - -#include "src/dsp/dsp.h" - -#if defined(WEBP_USE_SSE2) -#include -#include // for abs() -#include - -#include "src/dsp/common_sse2.h" -#include "src/enc/cost_enc.h" -#include "src/enc/vp8i_enc.h" - -//------------------------------------------------------------------------------ -// Transforms (Paragraph 14.4) - -// Does one or two inverse transforms. -static void ITransform_SSE2(const uint8_t* ref, const int16_t* in, uint8_t* dst, - int do_two) { - // This implementation makes use of 16-bit fixed point versions of two - // multiply constants: - // K1 = sqrt(2) * cos (pi/8) ~= 85627 / 2^16 - // K2 = sqrt(2) * sin (pi/8) ~= 35468 / 2^16 - // - // To be able to use signed 16-bit integers, we use the following trick to - // have constants within range: - // - Associated constants are obtained by subtracting the 16-bit fixed point - // version of one: - // k = K - (1 << 16) => K = k + (1 << 16) - // K1 = 85267 => k1 = 20091 - // K2 = 35468 => k2 = -30068 - // - The multiplication of a variable by a constant become the sum of the - // variable and the multiplication of that variable by the associated - // constant: - // (x * K) >> 16 = (x * (k + (1 << 16))) >> 16 = ((x * k ) >> 16) + x - const __m128i k1 = _mm_set1_epi16(20091); - const __m128i k2 = _mm_set1_epi16(-30068); - __m128i T0, T1, T2, T3; - - // Load and concatenate the transform coefficients (we'll do two inverse - // transforms in parallel). In the case of only one inverse transform, the - // second half of the vectors will just contain random value we'll never - // use nor store. - __m128i in0, in1, in2, in3; - { - in0 = _mm_loadl_epi64((const __m128i*)&in[0]); - in1 = _mm_loadl_epi64((const __m128i*)&in[4]); - in2 = _mm_loadl_epi64((const __m128i*)&in[8]); - in3 = _mm_loadl_epi64((const __m128i*)&in[12]); - // a00 a10 a20 a30 x x x x - // a01 a11 a21 a31 x x x x - // a02 a12 a22 a32 x x x x - // a03 a13 a23 a33 x x x x - if (do_two) { - const __m128i inB0 = _mm_loadl_epi64((const __m128i*)&in[16]); - const __m128i inB1 = _mm_loadl_epi64((const __m128i*)&in[20]); - const __m128i inB2 = _mm_loadl_epi64((const __m128i*)&in[24]); - const __m128i inB3 = _mm_loadl_epi64((const __m128i*)&in[28]); - in0 = _mm_unpacklo_epi64(in0, inB0); - in1 = _mm_unpacklo_epi64(in1, inB1); - in2 = _mm_unpacklo_epi64(in2, inB2); - in3 = _mm_unpacklo_epi64(in3, inB3); - // a00 a10 a20 a30 b00 b10 b20 b30 - // a01 a11 a21 a31 b01 b11 b21 b31 - // a02 a12 a22 a32 b02 b12 b22 b32 - // a03 a13 a23 a33 b03 b13 b23 b33 - } - } - - // Vertical pass and subsequent transpose. - { - // First pass, c and d calculations are longer because of the "trick" - // multiplications. - const __m128i a = _mm_add_epi16(in0, in2); - const __m128i b = _mm_sub_epi16(in0, in2); - // c = MUL(in1, K2) - MUL(in3, K1) = MUL(in1, k2) - MUL(in3, k1) + in1 - in3 - const __m128i c1 = _mm_mulhi_epi16(in1, k2); - const __m128i c2 = _mm_mulhi_epi16(in3, k1); - const __m128i c3 = _mm_sub_epi16(in1, in3); - const __m128i c4 = _mm_sub_epi16(c1, c2); - const __m128i c = _mm_add_epi16(c3, c4); - // d = MUL(in1, K1) + MUL(in3, K2) = MUL(in1, k1) + MUL(in3, k2) + in1 + in3 - const __m128i d1 = _mm_mulhi_epi16(in1, k1); - const __m128i d2 = _mm_mulhi_epi16(in3, k2); - const __m128i d3 = _mm_add_epi16(in1, in3); - const __m128i d4 = _mm_add_epi16(d1, d2); - const __m128i d = _mm_add_epi16(d3, d4); - - // Second pass. - const __m128i tmp0 = _mm_add_epi16(a, d); - const __m128i tmp1 = _mm_add_epi16(b, c); - const __m128i tmp2 = _mm_sub_epi16(b, c); - const __m128i tmp3 = _mm_sub_epi16(a, d); - - // Transpose the two 4x4. - VP8Transpose_2_4x4_16b(&tmp0, &tmp1, &tmp2, &tmp3, &T0, &T1, &T2, &T3); - } - - // Horizontal pass and subsequent transpose. - { - // First pass, c and d calculations are longer because of the "trick" - // multiplications. - const __m128i four = _mm_set1_epi16(4); - const __m128i dc = _mm_add_epi16(T0, four); - const __m128i a = _mm_add_epi16(dc, T2); - const __m128i b = _mm_sub_epi16(dc, T2); - // c = MUL(T1, K2) - MUL(T3, K1) = MUL(T1, k2) - MUL(T3, k1) + T1 - T3 - const __m128i c1 = _mm_mulhi_epi16(T1, k2); - const __m128i c2 = _mm_mulhi_epi16(T3, k1); - const __m128i c3 = _mm_sub_epi16(T1, T3); - const __m128i c4 = _mm_sub_epi16(c1, c2); - const __m128i c = _mm_add_epi16(c3, c4); - // d = MUL(T1, K1) + MUL(T3, K2) = MUL(T1, k1) + MUL(T3, k2) + T1 + T3 - const __m128i d1 = _mm_mulhi_epi16(T1, k1); - const __m128i d2 = _mm_mulhi_epi16(T3, k2); - const __m128i d3 = _mm_add_epi16(T1, T3); - const __m128i d4 = _mm_add_epi16(d1, d2); - const __m128i d = _mm_add_epi16(d3, d4); - - // Second pass. - const __m128i tmp0 = _mm_add_epi16(a, d); - const __m128i tmp1 = _mm_add_epi16(b, c); - const __m128i tmp2 = _mm_sub_epi16(b, c); - const __m128i tmp3 = _mm_sub_epi16(a, d); - const __m128i shifted0 = _mm_srai_epi16(tmp0, 3); - const __m128i shifted1 = _mm_srai_epi16(tmp1, 3); - const __m128i shifted2 = _mm_srai_epi16(tmp2, 3); - const __m128i shifted3 = _mm_srai_epi16(tmp3, 3); - - // Transpose the two 4x4. - VP8Transpose_2_4x4_16b(&shifted0, &shifted1, &shifted2, &shifted3, &T0, &T1, - &T2, &T3); - } - - // Add inverse transform to 'ref' and store. - { - const __m128i zero = _mm_setzero_si128(); - // Load the reference(s). - __m128i ref0, ref1, ref2, ref3; - if (do_two) { - // Load eight bytes/pixels per line. - ref0 = _mm_loadl_epi64((const __m128i*)&ref[0 * BPS]); - ref1 = _mm_loadl_epi64((const __m128i*)&ref[1 * BPS]); - ref2 = _mm_loadl_epi64((const __m128i*)&ref[2 * BPS]); - ref3 = _mm_loadl_epi64((const __m128i*)&ref[3 * BPS]); - } else { - // Load four bytes/pixels per line. - ref0 = _mm_cvtsi32_si128(WebPMemToUint32(&ref[0 * BPS])); - ref1 = _mm_cvtsi32_si128(WebPMemToUint32(&ref[1 * BPS])); - ref2 = _mm_cvtsi32_si128(WebPMemToUint32(&ref[2 * BPS])); - ref3 = _mm_cvtsi32_si128(WebPMemToUint32(&ref[3 * BPS])); - } - // Convert to 16b. - ref0 = _mm_unpacklo_epi8(ref0, zero); - ref1 = _mm_unpacklo_epi8(ref1, zero); - ref2 = _mm_unpacklo_epi8(ref2, zero); - ref3 = _mm_unpacklo_epi8(ref3, zero); - // Add the inverse transform(s). - ref0 = _mm_add_epi16(ref0, T0); - ref1 = _mm_add_epi16(ref1, T1); - ref2 = _mm_add_epi16(ref2, T2); - ref3 = _mm_add_epi16(ref3, T3); - // Unsigned saturate to 8b. - ref0 = _mm_packus_epi16(ref0, ref0); - ref1 = _mm_packus_epi16(ref1, ref1); - ref2 = _mm_packus_epi16(ref2, ref2); - ref3 = _mm_packus_epi16(ref3, ref3); - // Store the results. - if (do_two) { - // Store eight bytes/pixels per line. - _mm_storel_epi64((__m128i*)&dst[0 * BPS], ref0); - _mm_storel_epi64((__m128i*)&dst[1 * BPS], ref1); - _mm_storel_epi64((__m128i*)&dst[2 * BPS], ref2); - _mm_storel_epi64((__m128i*)&dst[3 * BPS], ref3); - } else { - // Store four bytes/pixels per line. - WebPUint32ToMem(&dst[0 * BPS], _mm_cvtsi128_si32(ref0)); - WebPUint32ToMem(&dst[1 * BPS], _mm_cvtsi128_si32(ref1)); - WebPUint32ToMem(&dst[2 * BPS], _mm_cvtsi128_si32(ref2)); - WebPUint32ToMem(&dst[3 * BPS], _mm_cvtsi128_si32(ref3)); - } - } -} - -static void FTransformPass1_SSE2(const __m128i* const in01, - const __m128i* const in23, - __m128i* const out01, - __m128i* const out32) { - const __m128i k937 = _mm_set1_epi32(937); - const __m128i k1812 = _mm_set1_epi32(1812); - - const __m128i k88p = _mm_set_epi16(8, 8, 8, 8, 8, 8, 8, 8); - const __m128i k88m = _mm_set_epi16(-8, 8, -8, 8, -8, 8, -8, 8); - const __m128i k5352_2217p = _mm_set_epi16(2217, 5352, 2217, 5352, - 2217, 5352, 2217, 5352); - const __m128i k5352_2217m = _mm_set_epi16(-5352, 2217, -5352, 2217, - -5352, 2217, -5352, 2217); - - // *in01 = 00 01 10 11 02 03 12 13 - // *in23 = 20 21 30 31 22 23 32 33 - const __m128i shuf01_p = _mm_shufflehi_epi16(*in01, _MM_SHUFFLE(2, 3, 0, 1)); - const __m128i shuf23_p = _mm_shufflehi_epi16(*in23, _MM_SHUFFLE(2, 3, 0, 1)); - // 00 01 10 11 03 02 13 12 - // 20 21 30 31 23 22 33 32 - const __m128i s01 = _mm_unpacklo_epi64(shuf01_p, shuf23_p); - const __m128i s32 = _mm_unpackhi_epi64(shuf01_p, shuf23_p); - // 00 01 10 11 20 21 30 31 - // 03 02 13 12 23 22 33 32 - const __m128i a01 = _mm_add_epi16(s01, s32); - const __m128i a32 = _mm_sub_epi16(s01, s32); - // [d0 + d3 | d1 + d2 | ...] = [a0 a1 | a0' a1' | ... ] - // [d0 - d3 | d1 - d2 | ...] = [a3 a2 | a3' a2' | ... ] - - const __m128i tmp0 = _mm_madd_epi16(a01, k88p); // [ (a0 + a1) << 3, ... ] - const __m128i tmp2 = _mm_madd_epi16(a01, k88m); // [ (a0 - a1) << 3, ... ] - const __m128i tmp1_1 = _mm_madd_epi16(a32, k5352_2217p); - const __m128i tmp3_1 = _mm_madd_epi16(a32, k5352_2217m); - const __m128i tmp1_2 = _mm_add_epi32(tmp1_1, k1812); - const __m128i tmp3_2 = _mm_add_epi32(tmp3_1, k937); - const __m128i tmp1 = _mm_srai_epi32(tmp1_2, 9); - const __m128i tmp3 = _mm_srai_epi32(tmp3_2, 9); - const __m128i s03 = _mm_packs_epi32(tmp0, tmp2); - const __m128i s12 = _mm_packs_epi32(tmp1, tmp3); - const __m128i s_lo = _mm_unpacklo_epi16(s03, s12); // 0 1 0 1 0 1... - const __m128i s_hi = _mm_unpackhi_epi16(s03, s12); // 2 3 2 3 2 3 - const __m128i v23 = _mm_unpackhi_epi32(s_lo, s_hi); - *out01 = _mm_unpacklo_epi32(s_lo, s_hi); - *out32 = _mm_shuffle_epi32(v23, _MM_SHUFFLE(1, 0, 3, 2)); // 3 2 3 2 3 2.. -} - -static void FTransformPass2_SSE2(const __m128i* const v01, - const __m128i* const v32, - int16_t* out) { - const __m128i zero = _mm_setzero_si128(); - const __m128i seven = _mm_set1_epi16(7); - const __m128i k5352_2217 = _mm_set_epi16(5352, 2217, 5352, 2217, - 5352, 2217, 5352, 2217); - const __m128i k2217_5352 = _mm_set_epi16(2217, -5352, 2217, -5352, - 2217, -5352, 2217, -5352); - const __m128i k12000_plus_one = _mm_set1_epi32(12000 + (1 << 16)); - const __m128i k51000 = _mm_set1_epi32(51000); - - // Same operations are done on the (0,3) and (1,2) pairs. - // a3 = v0 - v3 - // a2 = v1 - v2 - const __m128i a32 = _mm_sub_epi16(*v01, *v32); - const __m128i a22 = _mm_unpackhi_epi64(a32, a32); - - const __m128i b23 = _mm_unpacklo_epi16(a22, a32); - const __m128i c1 = _mm_madd_epi16(b23, k5352_2217); - const __m128i c3 = _mm_madd_epi16(b23, k2217_5352); - const __m128i d1 = _mm_add_epi32(c1, k12000_plus_one); - const __m128i d3 = _mm_add_epi32(c3, k51000); - const __m128i e1 = _mm_srai_epi32(d1, 16); - const __m128i e3 = _mm_srai_epi32(d3, 16); - // f1 = ((b3 * 5352 + b2 * 2217 + 12000) >> 16) - // f3 = ((b3 * 2217 - b2 * 5352 + 51000) >> 16) - const __m128i f1 = _mm_packs_epi32(e1, e1); - const __m128i f3 = _mm_packs_epi32(e3, e3); - // g1 = f1 + (a3 != 0); - // The compare will return (0xffff, 0) for (==0, !=0). To turn that into the - // desired (0, 1), we add one earlier through k12000_plus_one. - // -> g1 = f1 + 1 - (a3 == 0) - const __m128i g1 = _mm_add_epi16(f1, _mm_cmpeq_epi16(a32, zero)); - - // a0 = v0 + v3 - // a1 = v1 + v2 - const __m128i a01 = _mm_add_epi16(*v01, *v32); - const __m128i a01_plus_7 = _mm_add_epi16(a01, seven); - const __m128i a11 = _mm_unpackhi_epi64(a01, a01); - const __m128i c0 = _mm_add_epi16(a01_plus_7, a11); - const __m128i c2 = _mm_sub_epi16(a01_plus_7, a11); - // d0 = (a0 + a1 + 7) >> 4; - // d2 = (a0 - a1 + 7) >> 4; - const __m128i d0 = _mm_srai_epi16(c0, 4); - const __m128i d2 = _mm_srai_epi16(c2, 4); - - const __m128i d0_g1 = _mm_unpacklo_epi64(d0, g1); - const __m128i d2_f3 = _mm_unpacklo_epi64(d2, f3); - _mm_storeu_si128((__m128i*)&out[0], d0_g1); - _mm_storeu_si128((__m128i*)&out[8], d2_f3); -} - -static void FTransform_SSE2(const uint8_t* src, const uint8_t* ref, - int16_t* out) { - const __m128i zero = _mm_setzero_si128(); - // Load src. - const __m128i src0 = _mm_loadl_epi64((const __m128i*)&src[0 * BPS]); - const __m128i src1 = _mm_loadl_epi64((const __m128i*)&src[1 * BPS]); - const __m128i src2 = _mm_loadl_epi64((const __m128i*)&src[2 * BPS]); - const __m128i src3 = _mm_loadl_epi64((const __m128i*)&src[3 * BPS]); - // 00 01 02 03 * - // 10 11 12 13 * - // 20 21 22 23 * - // 30 31 32 33 * - // Shuffle. - const __m128i src_0 = _mm_unpacklo_epi16(src0, src1); - const __m128i src_1 = _mm_unpacklo_epi16(src2, src3); - // 00 01 10 11 02 03 12 13 * * ... - // 20 21 30 31 22 22 32 33 * * ... - - // Load ref. - const __m128i ref0 = _mm_loadl_epi64((const __m128i*)&ref[0 * BPS]); - const __m128i ref1 = _mm_loadl_epi64((const __m128i*)&ref[1 * BPS]); - const __m128i ref2 = _mm_loadl_epi64((const __m128i*)&ref[2 * BPS]); - const __m128i ref3 = _mm_loadl_epi64((const __m128i*)&ref[3 * BPS]); - const __m128i ref_0 = _mm_unpacklo_epi16(ref0, ref1); - const __m128i ref_1 = _mm_unpacklo_epi16(ref2, ref3); - - // Convert both to 16 bit. - const __m128i src_0_16b = _mm_unpacklo_epi8(src_0, zero); - const __m128i src_1_16b = _mm_unpacklo_epi8(src_1, zero); - const __m128i ref_0_16b = _mm_unpacklo_epi8(ref_0, zero); - const __m128i ref_1_16b = _mm_unpacklo_epi8(ref_1, zero); - - // Compute the difference. - const __m128i row01 = _mm_sub_epi16(src_0_16b, ref_0_16b); - const __m128i row23 = _mm_sub_epi16(src_1_16b, ref_1_16b); - __m128i v01, v32; - - // First pass - FTransformPass1_SSE2(&row01, &row23, &v01, &v32); - - // Second pass - FTransformPass2_SSE2(&v01, &v32, out); -} - -static void FTransform2_SSE2(const uint8_t* src, const uint8_t* ref, - int16_t* out) { - const __m128i zero = _mm_setzero_si128(); - - // Load src and convert to 16b. - const __m128i src0 = _mm_loadl_epi64((const __m128i*)&src[0 * BPS]); - const __m128i src1 = _mm_loadl_epi64((const __m128i*)&src[1 * BPS]); - const __m128i src2 = _mm_loadl_epi64((const __m128i*)&src[2 * BPS]); - const __m128i src3 = _mm_loadl_epi64((const __m128i*)&src[3 * BPS]); - const __m128i src_0 = _mm_unpacklo_epi8(src0, zero); - const __m128i src_1 = _mm_unpacklo_epi8(src1, zero); - const __m128i src_2 = _mm_unpacklo_epi8(src2, zero); - const __m128i src_3 = _mm_unpacklo_epi8(src3, zero); - // Load ref and convert to 16b. - const __m128i ref0 = _mm_loadl_epi64((const __m128i*)&ref[0 * BPS]); - const __m128i ref1 = _mm_loadl_epi64((const __m128i*)&ref[1 * BPS]); - const __m128i ref2 = _mm_loadl_epi64((const __m128i*)&ref[2 * BPS]); - const __m128i ref3 = _mm_loadl_epi64((const __m128i*)&ref[3 * BPS]); - const __m128i ref_0 = _mm_unpacklo_epi8(ref0, zero); - const __m128i ref_1 = _mm_unpacklo_epi8(ref1, zero); - const __m128i ref_2 = _mm_unpacklo_epi8(ref2, zero); - const __m128i ref_3 = _mm_unpacklo_epi8(ref3, zero); - // Compute difference. -> 00 01 02 03 00' 01' 02' 03' - const __m128i diff0 = _mm_sub_epi16(src_0, ref_0); - const __m128i diff1 = _mm_sub_epi16(src_1, ref_1); - const __m128i diff2 = _mm_sub_epi16(src_2, ref_2); - const __m128i diff3 = _mm_sub_epi16(src_3, ref_3); - - // Unpack and shuffle - // 00 01 02 03 0 0 0 0 - // 10 11 12 13 0 0 0 0 - // 20 21 22 23 0 0 0 0 - // 30 31 32 33 0 0 0 0 - const __m128i shuf01l = _mm_unpacklo_epi32(diff0, diff1); - const __m128i shuf23l = _mm_unpacklo_epi32(diff2, diff3); - const __m128i shuf01h = _mm_unpackhi_epi32(diff0, diff1); - const __m128i shuf23h = _mm_unpackhi_epi32(diff2, diff3); - __m128i v01l, v32l; - __m128i v01h, v32h; - - // First pass - FTransformPass1_SSE2(&shuf01l, &shuf23l, &v01l, &v32l); - FTransformPass1_SSE2(&shuf01h, &shuf23h, &v01h, &v32h); - - // Second pass - FTransformPass2_SSE2(&v01l, &v32l, out + 0); - FTransformPass2_SSE2(&v01h, &v32h, out + 16); -} - -static void FTransformWHTRow_SSE2(const int16_t* const in, __m128i* const out) { - const __m128i kMult = _mm_set_epi16(-1, 1, -1, 1, 1, 1, 1, 1); - const __m128i src0 = _mm_loadl_epi64((__m128i*)&in[0 * 16]); - const __m128i src1 = _mm_loadl_epi64((__m128i*)&in[1 * 16]); - const __m128i src2 = _mm_loadl_epi64((__m128i*)&in[2 * 16]); - const __m128i src3 = _mm_loadl_epi64((__m128i*)&in[3 * 16]); - const __m128i A01 = _mm_unpacklo_epi16(src0, src1); // A0 A1 | ... - const __m128i A23 = _mm_unpacklo_epi16(src2, src3); // A2 A3 | ... - const __m128i B0 = _mm_adds_epi16(A01, A23); // a0 | a1 | ... - const __m128i B1 = _mm_subs_epi16(A01, A23); // a3 | a2 | ... - const __m128i C0 = _mm_unpacklo_epi32(B0, B1); // a0 | a1 | a3 | a2 | ... - const __m128i C1 = _mm_unpacklo_epi32(B1, B0); // a3 | a2 | a0 | a1 | ... - const __m128i D = _mm_unpacklo_epi64(C0, C1); // a0 a1 a3 a2 a3 a2 a0 a1 - *out = _mm_madd_epi16(D, kMult); -} - -static void FTransformWHT_SSE2(const int16_t* in, int16_t* out) { - // Input is 12b signed. - __m128i row0, row1, row2, row3; - // Rows are 14b signed. - FTransformWHTRow_SSE2(in + 0 * 64, &row0); - FTransformWHTRow_SSE2(in + 1 * 64, &row1); - FTransformWHTRow_SSE2(in + 2 * 64, &row2); - FTransformWHTRow_SSE2(in + 3 * 64, &row3); - - { - // The a* are 15b signed. - const __m128i a0 = _mm_add_epi32(row0, row2); - const __m128i a1 = _mm_add_epi32(row1, row3); - const __m128i a2 = _mm_sub_epi32(row1, row3); - const __m128i a3 = _mm_sub_epi32(row0, row2); - const __m128i a0a3 = _mm_packs_epi32(a0, a3); - const __m128i a1a2 = _mm_packs_epi32(a1, a2); - - // The b* are 16b signed. - const __m128i b0b1 = _mm_add_epi16(a0a3, a1a2); - const __m128i b3b2 = _mm_sub_epi16(a0a3, a1a2); - const __m128i tmp_b2b3 = _mm_unpackhi_epi64(b3b2, b3b2); - const __m128i b2b3 = _mm_unpacklo_epi64(tmp_b2b3, b3b2); - - _mm_storeu_si128((__m128i*)&out[0], _mm_srai_epi16(b0b1, 1)); - _mm_storeu_si128((__m128i*)&out[8], _mm_srai_epi16(b2b3, 1)); - } -} - -//------------------------------------------------------------------------------ -// Compute susceptibility based on DCT-coeff histograms: -// the higher, the "easier" the macroblock is to compress. - -static void CollectHistogram_SSE2(const uint8_t* ref, const uint8_t* pred, - int start_block, int end_block, - VP8Histogram* const histo) { - const __m128i zero = _mm_setzero_si128(); - const __m128i max_coeff_thresh = _mm_set1_epi16(MAX_COEFF_THRESH); - int j; - int distribution[MAX_COEFF_THRESH + 1] = { 0 }; - for (j = start_block; j < end_block; ++j) { - int16_t out[16]; - int k; - - FTransform_SSE2(ref + VP8DspScan[j], pred + VP8DspScan[j], out); - - // Convert coefficients to bin (within out[]). - { - // Load. - const __m128i out0 = _mm_loadu_si128((__m128i*)&out[0]); - const __m128i out1 = _mm_loadu_si128((__m128i*)&out[8]); - const __m128i d0 = _mm_sub_epi16(zero, out0); - const __m128i d1 = _mm_sub_epi16(zero, out1); - const __m128i abs0 = _mm_max_epi16(out0, d0); // abs(v), 16b - const __m128i abs1 = _mm_max_epi16(out1, d1); - // v = abs(out) >> 3 - const __m128i v0 = _mm_srai_epi16(abs0, 3); - const __m128i v1 = _mm_srai_epi16(abs1, 3); - // bin = min(v, MAX_COEFF_THRESH) - const __m128i bin0 = _mm_min_epi16(v0, max_coeff_thresh); - const __m128i bin1 = _mm_min_epi16(v1, max_coeff_thresh); - // Store. - _mm_storeu_si128((__m128i*)&out[0], bin0); - _mm_storeu_si128((__m128i*)&out[8], bin1); - } - - // Convert coefficients to bin. - for (k = 0; k < 16; ++k) { - ++distribution[out[k]]; - } - } - VP8SetHistogramData(distribution, histo); -} - -//------------------------------------------------------------------------------ -// Intra predictions - -// helper for chroma-DC predictions -static WEBP_INLINE void Put8x8uv_SSE2(uint8_t v, uint8_t* dst) { - int j; - const __m128i values = _mm_set1_epi8(v); - for (j = 0; j < 8; ++j) { - _mm_storel_epi64((__m128i*)(dst + j * BPS), values); - } -} - -static WEBP_INLINE void Put16_SSE2(uint8_t v, uint8_t* dst) { - int j; - const __m128i values = _mm_set1_epi8(v); - for (j = 0; j < 16; ++j) { - _mm_store_si128((__m128i*)(dst + j * BPS), values); - } -} - -static WEBP_INLINE void Fill_SSE2(uint8_t* dst, int value, int size) { - if (size == 4) { - int j; - for (j = 0; j < 4; ++j) { - memset(dst + j * BPS, value, 4); - } - } else if (size == 8) { - Put8x8uv_SSE2(value, dst); - } else { - Put16_SSE2(value, dst); - } -} - -static WEBP_INLINE void VE8uv_SSE2(uint8_t* dst, const uint8_t* top) { - int j; - const __m128i top_values = _mm_loadl_epi64((const __m128i*)top); - for (j = 0; j < 8; ++j) { - _mm_storel_epi64((__m128i*)(dst + j * BPS), top_values); - } -} - -static WEBP_INLINE void VE16_SSE2(uint8_t* dst, const uint8_t* top) { - const __m128i top_values = _mm_load_si128((const __m128i*)top); - int j; - for (j = 0; j < 16; ++j) { - _mm_store_si128((__m128i*)(dst + j * BPS), top_values); - } -} - -static WEBP_INLINE void VerticalPred_SSE2(uint8_t* dst, - const uint8_t* top, int size) { - if (top != NULL) { - if (size == 8) { - VE8uv_SSE2(dst, top); - } else { - VE16_SSE2(dst, top); - } - } else { - Fill_SSE2(dst, 127, size); - } -} - -static WEBP_INLINE void HE8uv_SSE2(uint8_t* dst, const uint8_t* left) { - int j; - for (j = 0; j < 8; ++j) { - const __m128i values = _mm_set1_epi8(left[j]); - _mm_storel_epi64((__m128i*)dst, values); - dst += BPS; - } -} - -static WEBP_INLINE void HE16_SSE2(uint8_t* dst, const uint8_t* left) { - int j; - for (j = 0; j < 16; ++j) { - const __m128i values = _mm_set1_epi8(left[j]); - _mm_store_si128((__m128i*)dst, values); - dst += BPS; - } -} - -static WEBP_INLINE void HorizontalPred_SSE2(uint8_t* dst, - const uint8_t* left, int size) { - if (left != NULL) { - if (size == 8) { - HE8uv_SSE2(dst, left); - } else { - HE16_SSE2(dst, left); - } - } else { - Fill_SSE2(dst, 129, size); - } -} - -static WEBP_INLINE void TM_SSE2(uint8_t* dst, const uint8_t* left, - const uint8_t* top, int size) { - const __m128i zero = _mm_setzero_si128(); - int y; - if (size == 8) { - const __m128i top_values = _mm_loadl_epi64((const __m128i*)top); - const __m128i top_base = _mm_unpacklo_epi8(top_values, zero); - for (y = 0; y < 8; ++y, dst += BPS) { - const int val = left[y] - left[-1]; - const __m128i base = _mm_set1_epi16(val); - const __m128i out = _mm_packus_epi16(_mm_add_epi16(base, top_base), zero); - _mm_storel_epi64((__m128i*)dst, out); - } - } else { - const __m128i top_values = _mm_load_si128((const __m128i*)top); - const __m128i top_base_0 = _mm_unpacklo_epi8(top_values, zero); - const __m128i top_base_1 = _mm_unpackhi_epi8(top_values, zero); - for (y = 0; y < 16; ++y, dst += BPS) { - const int val = left[y] - left[-1]; - const __m128i base = _mm_set1_epi16(val); - const __m128i out_0 = _mm_add_epi16(base, top_base_0); - const __m128i out_1 = _mm_add_epi16(base, top_base_1); - const __m128i out = _mm_packus_epi16(out_0, out_1); - _mm_store_si128((__m128i*)dst, out); - } - } -} - -static WEBP_INLINE void TrueMotion_SSE2(uint8_t* dst, const uint8_t* left, - const uint8_t* top, int size) { - if (left != NULL) { - if (top != NULL) { - TM_SSE2(dst, left, top, size); - } else { - HorizontalPred_SSE2(dst, left, size); - } - } else { - // true motion without left samples (hence: with default 129 value) - // is equivalent to VE prediction where you just copy the top samples. - // Note that if top samples are not available, the default value is - // then 129, and not 127 as in the VerticalPred case. - if (top != NULL) { - VerticalPred_SSE2(dst, top, size); - } else { - Fill_SSE2(dst, 129, size); - } - } -} - -static WEBP_INLINE void DC8uv_SSE2(uint8_t* dst, const uint8_t* left, - const uint8_t* top) { - const __m128i top_values = _mm_loadl_epi64((const __m128i*)top); - const __m128i left_values = _mm_loadl_epi64((const __m128i*)left); - const __m128i combined = _mm_unpacklo_epi64(top_values, left_values); - const int DC = VP8HorizontalAdd8b(&combined) + 8; - Put8x8uv_SSE2(DC >> 4, dst); -} - -static WEBP_INLINE void DC8uvNoLeft_SSE2(uint8_t* dst, const uint8_t* top) { - const __m128i zero = _mm_setzero_si128(); - const __m128i top_values = _mm_loadl_epi64((const __m128i*)top); - const __m128i sum = _mm_sad_epu8(top_values, zero); - const int DC = _mm_cvtsi128_si32(sum) + 4; - Put8x8uv_SSE2(DC >> 3, dst); -} - -static WEBP_INLINE void DC8uvNoTop_SSE2(uint8_t* dst, const uint8_t* left) { - // 'left' is contiguous so we can reuse the top summation. - DC8uvNoLeft_SSE2(dst, left); -} - -static WEBP_INLINE void DC8uvNoTopLeft_SSE2(uint8_t* dst) { - Put8x8uv_SSE2(0x80, dst); -} - -static WEBP_INLINE void DC8uvMode_SSE2(uint8_t* dst, const uint8_t* left, - const uint8_t* top) { - if (top != NULL) { - if (left != NULL) { // top and left present - DC8uv_SSE2(dst, left, top); - } else { // top, but no left - DC8uvNoLeft_SSE2(dst, top); - } - } else if (left != NULL) { // left but no top - DC8uvNoTop_SSE2(dst, left); - } else { // no top, no left, nothing. - DC8uvNoTopLeft_SSE2(dst); - } -} - -static WEBP_INLINE void DC16_SSE2(uint8_t* dst, const uint8_t* left, - const uint8_t* top) { - const __m128i top_row = _mm_load_si128((const __m128i*)top); - const __m128i left_row = _mm_load_si128((const __m128i*)left); - const int DC = - VP8HorizontalAdd8b(&top_row) + VP8HorizontalAdd8b(&left_row) + 16; - Put16_SSE2(DC >> 5, dst); -} - -static WEBP_INLINE void DC16NoLeft_SSE2(uint8_t* dst, const uint8_t* top) { - const __m128i top_row = _mm_load_si128((const __m128i*)top); - const int DC = VP8HorizontalAdd8b(&top_row) + 8; - Put16_SSE2(DC >> 4, dst); -} - -static WEBP_INLINE void DC16NoTop_SSE2(uint8_t* dst, const uint8_t* left) { - // 'left' is contiguous so we can reuse the top summation. - DC16NoLeft_SSE2(dst, left); -} - -static WEBP_INLINE void DC16NoTopLeft_SSE2(uint8_t* dst) { - Put16_SSE2(0x80, dst); -} - -static WEBP_INLINE void DC16Mode_SSE2(uint8_t* dst, const uint8_t* left, - const uint8_t* top) { - if (top != NULL) { - if (left != NULL) { // top and left present - DC16_SSE2(dst, left, top); - } else { // top, but no left - DC16NoLeft_SSE2(dst, top); - } - } else if (left != NULL) { // left but no top - DC16NoTop_SSE2(dst, left); - } else { // no top, no left, nothing. - DC16NoTopLeft_SSE2(dst); - } -} - -//------------------------------------------------------------------------------ -// 4x4 predictions - -#define DST(x, y) dst[(x) + (y) * BPS] -#define AVG3(a, b, c) (((a) + 2 * (b) + (c) + 2) >> 2) -#define AVG2(a, b) (((a) + (b) + 1) >> 1) - -// We use the following 8b-arithmetic tricks: -// (a + 2 * b + c + 2) >> 2 = (AC + b + 1) >> 1 -// where: AC = (a + c) >> 1 = [(a + c + 1) >> 1] - [(a^c) & 1] -// and: -// (a + 2 * b + c + 2) >> 2 = (AB + BC + 1) >> 1 - (ab|bc)&lsb -// where: AC = (a + b + 1) >> 1, BC = (b + c + 1) >> 1 -// and ab = a ^ b, bc = b ^ c, lsb = (AC^BC)&1 - -static WEBP_INLINE void VE4_SSE2(uint8_t* dst, - const uint8_t* top) { // vertical - const __m128i one = _mm_set1_epi8(1); - const __m128i ABCDEFGH = _mm_loadl_epi64((__m128i*)(top - 1)); - const __m128i BCDEFGH0 = _mm_srli_si128(ABCDEFGH, 1); - const __m128i CDEFGH00 = _mm_srli_si128(ABCDEFGH, 2); - const __m128i a = _mm_avg_epu8(ABCDEFGH, CDEFGH00); - const __m128i lsb = _mm_and_si128(_mm_xor_si128(ABCDEFGH, CDEFGH00), one); - const __m128i b = _mm_subs_epu8(a, lsb); - const __m128i avg = _mm_avg_epu8(b, BCDEFGH0); - const uint32_t vals = _mm_cvtsi128_si32(avg); - int i; - for (i = 0; i < 4; ++i) { - WebPUint32ToMem(dst + i * BPS, vals); - } -} - -static WEBP_INLINE void HE4_SSE2(uint8_t* dst, - const uint8_t* top) { // horizontal - const int X = top[-1]; - const int I = top[-2]; - const int J = top[-3]; - const int K = top[-4]; - const int L = top[-5]; - WebPUint32ToMem(dst + 0 * BPS, 0x01010101U * AVG3(X, I, J)); - WebPUint32ToMem(dst + 1 * BPS, 0x01010101U * AVG3(I, J, K)); - WebPUint32ToMem(dst + 2 * BPS, 0x01010101U * AVG3(J, K, L)); - WebPUint32ToMem(dst + 3 * BPS, 0x01010101U * AVG3(K, L, L)); -} - -static WEBP_INLINE void DC4_SSE2(uint8_t* dst, const uint8_t* top) { - uint32_t dc = 4; - int i; - for (i = 0; i < 4; ++i) dc += top[i] + top[-5 + i]; - Fill_SSE2(dst, dc >> 3, 4); -} - -static WEBP_INLINE void LD4_SSE2(uint8_t* dst, - const uint8_t* top) { // Down-Left - const __m128i one = _mm_set1_epi8(1); - const __m128i ABCDEFGH = _mm_loadl_epi64((const __m128i*)top); - const __m128i BCDEFGH0 = _mm_srli_si128(ABCDEFGH, 1); - const __m128i CDEFGH00 = _mm_srli_si128(ABCDEFGH, 2); - const __m128i CDEFGHH0 = _mm_insert_epi16(CDEFGH00, top[7], 3); - const __m128i avg1 = _mm_avg_epu8(ABCDEFGH, CDEFGHH0); - const __m128i lsb = _mm_and_si128(_mm_xor_si128(ABCDEFGH, CDEFGHH0), one); - const __m128i avg2 = _mm_subs_epu8(avg1, lsb); - const __m128i abcdefg = _mm_avg_epu8(avg2, BCDEFGH0); - WebPUint32ToMem(dst + 0 * BPS, _mm_cvtsi128_si32( abcdefg )); - WebPUint32ToMem(dst + 1 * BPS, _mm_cvtsi128_si32(_mm_srli_si128(abcdefg, 1))); - WebPUint32ToMem(dst + 2 * BPS, _mm_cvtsi128_si32(_mm_srli_si128(abcdefg, 2))); - WebPUint32ToMem(dst + 3 * BPS, _mm_cvtsi128_si32(_mm_srli_si128(abcdefg, 3))); -} - -static WEBP_INLINE void VR4_SSE2(uint8_t* dst, - const uint8_t* top) { // Vertical-Right - const __m128i one = _mm_set1_epi8(1); - const int I = top[-2]; - const int J = top[-3]; - const int K = top[-4]; - const int X = top[-1]; - const __m128i XABCD = _mm_loadl_epi64((const __m128i*)(top - 1)); - const __m128i ABCD0 = _mm_srli_si128(XABCD, 1); - const __m128i abcd = _mm_avg_epu8(XABCD, ABCD0); - const __m128i _XABCD = _mm_slli_si128(XABCD, 1); - const __m128i IXABCD = _mm_insert_epi16(_XABCD, (short)(I | (X << 8)), 0); - const __m128i avg1 = _mm_avg_epu8(IXABCD, ABCD0); - const __m128i lsb = _mm_and_si128(_mm_xor_si128(IXABCD, ABCD0), one); - const __m128i avg2 = _mm_subs_epu8(avg1, lsb); - const __m128i efgh = _mm_avg_epu8(avg2, XABCD); - WebPUint32ToMem(dst + 0 * BPS, _mm_cvtsi128_si32( abcd )); - WebPUint32ToMem(dst + 1 * BPS, _mm_cvtsi128_si32( efgh )); - WebPUint32ToMem(dst + 2 * BPS, _mm_cvtsi128_si32(_mm_slli_si128(abcd, 1))); - WebPUint32ToMem(dst + 3 * BPS, _mm_cvtsi128_si32(_mm_slli_si128(efgh, 1))); - - // these two are hard to implement in SSE2, so we keep the C-version: - DST(0, 2) = AVG3(J, I, X); - DST(0, 3) = AVG3(K, J, I); -} - -static WEBP_INLINE void VL4_SSE2(uint8_t* dst, - const uint8_t* top) { // Vertical-Left - const __m128i one = _mm_set1_epi8(1); - const __m128i ABCDEFGH = _mm_loadl_epi64((const __m128i*)top); - const __m128i BCDEFGH_ = _mm_srli_si128(ABCDEFGH, 1); - const __m128i CDEFGH__ = _mm_srli_si128(ABCDEFGH, 2); - const __m128i avg1 = _mm_avg_epu8(ABCDEFGH, BCDEFGH_); - const __m128i avg2 = _mm_avg_epu8(CDEFGH__, BCDEFGH_); - const __m128i avg3 = _mm_avg_epu8(avg1, avg2); - const __m128i lsb1 = _mm_and_si128(_mm_xor_si128(avg1, avg2), one); - const __m128i ab = _mm_xor_si128(ABCDEFGH, BCDEFGH_); - const __m128i bc = _mm_xor_si128(CDEFGH__, BCDEFGH_); - const __m128i abbc = _mm_or_si128(ab, bc); - const __m128i lsb2 = _mm_and_si128(abbc, lsb1); - const __m128i avg4 = _mm_subs_epu8(avg3, lsb2); - const uint32_t extra_out = _mm_cvtsi128_si32(_mm_srli_si128(avg4, 4)); - WebPUint32ToMem(dst + 0 * BPS, _mm_cvtsi128_si32( avg1 )); - WebPUint32ToMem(dst + 1 * BPS, _mm_cvtsi128_si32( avg4 )); - WebPUint32ToMem(dst + 2 * BPS, _mm_cvtsi128_si32(_mm_srli_si128(avg1, 1))); - WebPUint32ToMem(dst + 3 * BPS, _mm_cvtsi128_si32(_mm_srli_si128(avg4, 1))); - - // these two are hard to get and irregular - DST(3, 2) = (extra_out >> 0) & 0xff; - DST(3, 3) = (extra_out >> 8) & 0xff; -} - -static WEBP_INLINE void RD4_SSE2(uint8_t* dst, - const uint8_t* top) { // Down-right - const __m128i one = _mm_set1_epi8(1); - const __m128i LKJIXABC = _mm_loadl_epi64((const __m128i*)(top - 5)); - const __m128i LKJIXABCD = _mm_insert_epi16(LKJIXABC, top[3], 4); - const __m128i KJIXABCD_ = _mm_srli_si128(LKJIXABCD, 1); - const __m128i JIXABCD__ = _mm_srli_si128(LKJIXABCD, 2); - const __m128i avg1 = _mm_avg_epu8(JIXABCD__, LKJIXABCD); - const __m128i lsb = _mm_and_si128(_mm_xor_si128(JIXABCD__, LKJIXABCD), one); - const __m128i avg2 = _mm_subs_epu8(avg1, lsb); - const __m128i abcdefg = _mm_avg_epu8(avg2, KJIXABCD_); - WebPUint32ToMem(dst + 3 * BPS, _mm_cvtsi128_si32( abcdefg )); - WebPUint32ToMem(dst + 2 * BPS, _mm_cvtsi128_si32(_mm_srli_si128(abcdefg, 1))); - WebPUint32ToMem(dst + 1 * BPS, _mm_cvtsi128_si32(_mm_srli_si128(abcdefg, 2))); - WebPUint32ToMem(dst + 0 * BPS, _mm_cvtsi128_si32(_mm_srli_si128(abcdefg, 3))); -} - -static WEBP_INLINE void HU4_SSE2(uint8_t* dst, const uint8_t* top) { - const int I = top[-2]; - const int J = top[-3]; - const int K = top[-4]; - const int L = top[-5]; - DST(0, 0) = AVG2(I, J); - DST(2, 0) = DST(0, 1) = AVG2(J, K); - DST(2, 1) = DST(0, 2) = AVG2(K, L); - DST(1, 0) = AVG3(I, J, K); - DST(3, 0) = DST(1, 1) = AVG3(J, K, L); - DST(3, 1) = DST(1, 2) = AVG3(K, L, L); - DST(3, 2) = DST(2, 2) = - DST(0, 3) = DST(1, 3) = DST(2, 3) = DST(3, 3) = L; -} - -static WEBP_INLINE void HD4_SSE2(uint8_t* dst, const uint8_t* top) { - const int X = top[-1]; - const int I = top[-2]; - const int J = top[-3]; - const int K = top[-4]; - const int L = top[-5]; - const int A = top[0]; - const int B = top[1]; - const int C = top[2]; - - DST(0, 0) = DST(2, 1) = AVG2(I, X); - DST(0, 1) = DST(2, 2) = AVG2(J, I); - DST(0, 2) = DST(2, 3) = AVG2(K, J); - DST(0, 3) = AVG2(L, K); - - DST(3, 0) = AVG3(A, B, C); - DST(2, 0) = AVG3(X, A, B); - DST(1, 0) = DST(3, 1) = AVG3(I, X, A); - DST(1, 1) = DST(3, 2) = AVG3(J, I, X); - DST(1, 2) = DST(3, 3) = AVG3(K, J, I); - DST(1, 3) = AVG3(L, K, J); -} - -static WEBP_INLINE void TM4_SSE2(uint8_t* dst, const uint8_t* top) { - const __m128i zero = _mm_setzero_si128(); - const __m128i top_values = _mm_cvtsi32_si128(WebPMemToUint32(top)); - const __m128i top_base = _mm_unpacklo_epi8(top_values, zero); - int y; - for (y = 0; y < 4; ++y, dst += BPS) { - const int val = top[-2 - y] - top[-1]; - const __m128i base = _mm_set1_epi16(val); - const __m128i out = _mm_packus_epi16(_mm_add_epi16(base, top_base), zero); - WebPUint32ToMem(dst, _mm_cvtsi128_si32(out)); - } -} - -#undef DST -#undef AVG3 -#undef AVG2 - -//------------------------------------------------------------------------------ -// luma 4x4 prediction - -// Left samples are top[-5 .. -2], top_left is top[-1], top are -// located at top[0..3], and top right is top[4..7] -static void Intra4Preds_SSE2(uint8_t* dst, const uint8_t* top) { - DC4_SSE2(I4DC4 + dst, top); - TM4_SSE2(I4TM4 + dst, top); - VE4_SSE2(I4VE4 + dst, top); - HE4_SSE2(I4HE4 + dst, top); - RD4_SSE2(I4RD4 + dst, top); - VR4_SSE2(I4VR4 + dst, top); - LD4_SSE2(I4LD4 + dst, top); - VL4_SSE2(I4VL4 + dst, top); - HD4_SSE2(I4HD4 + dst, top); - HU4_SSE2(I4HU4 + dst, top); -} - -//------------------------------------------------------------------------------ -// Chroma 8x8 prediction (paragraph 12.2) - -static void IntraChromaPreds_SSE2(uint8_t* dst, const uint8_t* left, - const uint8_t* top) { - // U block - DC8uvMode_SSE2(C8DC8 + dst, left, top); - VerticalPred_SSE2(C8VE8 + dst, top, 8); - HorizontalPred_SSE2(C8HE8 + dst, left, 8); - TrueMotion_SSE2(C8TM8 + dst, left, top, 8); - // V block - dst += 8; - if (top != NULL) top += 8; - if (left != NULL) left += 16; - DC8uvMode_SSE2(C8DC8 + dst, left, top); - VerticalPred_SSE2(C8VE8 + dst, top, 8); - HorizontalPred_SSE2(C8HE8 + dst, left, 8); - TrueMotion_SSE2(C8TM8 + dst, left, top, 8); -} - -//------------------------------------------------------------------------------ -// luma 16x16 prediction (paragraph 12.3) - -static void Intra16Preds_SSE2(uint8_t* dst, - const uint8_t* left, const uint8_t* top) { - DC16Mode_SSE2(I16DC16 + dst, left, top); - VerticalPred_SSE2(I16VE16 + dst, top, 16); - HorizontalPred_SSE2(I16HE16 + dst, left, 16); - TrueMotion_SSE2(I16TM16 + dst, left, top, 16); -} - -//------------------------------------------------------------------------------ -// Metric - -static WEBP_INLINE void SubtractAndAccumulate_SSE2(const __m128i a, - const __m128i b, - __m128i* const sum) { - // take abs(a-b) in 8b - const __m128i a_b = _mm_subs_epu8(a, b); - const __m128i b_a = _mm_subs_epu8(b, a); - const __m128i abs_a_b = _mm_or_si128(a_b, b_a); - // zero-extend to 16b - const __m128i zero = _mm_setzero_si128(); - const __m128i C0 = _mm_unpacklo_epi8(abs_a_b, zero); - const __m128i C1 = _mm_unpackhi_epi8(abs_a_b, zero); - // multiply with self - const __m128i sum1 = _mm_madd_epi16(C0, C0); - const __m128i sum2 = _mm_madd_epi16(C1, C1); - *sum = _mm_add_epi32(sum1, sum2); -} - -static WEBP_INLINE int SSE_16xN_SSE2(const uint8_t* a, const uint8_t* b, - int num_pairs) { - __m128i sum = _mm_setzero_si128(); - int32_t tmp[4]; - int i; - - for (i = 0; i < num_pairs; ++i) { - const __m128i a0 = _mm_loadu_si128((const __m128i*)&a[BPS * 0]); - const __m128i b0 = _mm_loadu_si128((const __m128i*)&b[BPS * 0]); - const __m128i a1 = _mm_loadu_si128((const __m128i*)&a[BPS * 1]); - const __m128i b1 = _mm_loadu_si128((const __m128i*)&b[BPS * 1]); - __m128i sum1, sum2; - SubtractAndAccumulate_SSE2(a0, b0, &sum1); - SubtractAndAccumulate_SSE2(a1, b1, &sum2); - sum = _mm_add_epi32(sum, _mm_add_epi32(sum1, sum2)); - a += 2 * BPS; - b += 2 * BPS; - } - _mm_storeu_si128((__m128i*)tmp, sum); - return (tmp[3] + tmp[2] + tmp[1] + tmp[0]); -} - -static int SSE16x16_SSE2(const uint8_t* a, const uint8_t* b) { - return SSE_16xN_SSE2(a, b, 8); -} - -static int SSE16x8_SSE2(const uint8_t* a, const uint8_t* b) { - return SSE_16xN_SSE2(a, b, 4); -} - -#define LOAD_8x16b(ptr) \ - _mm_unpacklo_epi8(_mm_loadl_epi64((const __m128i*)(ptr)), zero) - -static int SSE8x8_SSE2(const uint8_t* a, const uint8_t* b) { - const __m128i zero = _mm_setzero_si128(); - int num_pairs = 4; - __m128i sum = zero; - int32_t tmp[4]; - while (num_pairs-- > 0) { - const __m128i a0 = LOAD_8x16b(&a[BPS * 0]); - const __m128i a1 = LOAD_8x16b(&a[BPS * 1]); - const __m128i b0 = LOAD_8x16b(&b[BPS * 0]); - const __m128i b1 = LOAD_8x16b(&b[BPS * 1]); - // subtract - const __m128i c0 = _mm_subs_epi16(a0, b0); - const __m128i c1 = _mm_subs_epi16(a1, b1); - // multiply/accumulate with self - const __m128i d0 = _mm_madd_epi16(c0, c0); - const __m128i d1 = _mm_madd_epi16(c1, c1); - // collect - const __m128i sum01 = _mm_add_epi32(d0, d1); - sum = _mm_add_epi32(sum, sum01); - a += 2 * BPS; - b += 2 * BPS; - } - _mm_storeu_si128((__m128i*)tmp, sum); - return (tmp[3] + tmp[2] + tmp[1] + tmp[0]); -} -#undef LOAD_8x16b - -static int SSE4x4_SSE2(const uint8_t* a, const uint8_t* b) { - const __m128i zero = _mm_setzero_si128(); - - // Load values. Note that we read 8 pixels instead of 4, - // but the a/b buffers are over-allocated to that effect. - const __m128i a0 = _mm_loadl_epi64((const __m128i*)&a[BPS * 0]); - const __m128i a1 = _mm_loadl_epi64((const __m128i*)&a[BPS * 1]); - const __m128i a2 = _mm_loadl_epi64((const __m128i*)&a[BPS * 2]); - const __m128i a3 = _mm_loadl_epi64((const __m128i*)&a[BPS * 3]); - const __m128i b0 = _mm_loadl_epi64((const __m128i*)&b[BPS * 0]); - const __m128i b1 = _mm_loadl_epi64((const __m128i*)&b[BPS * 1]); - const __m128i b2 = _mm_loadl_epi64((const __m128i*)&b[BPS * 2]); - const __m128i b3 = _mm_loadl_epi64((const __m128i*)&b[BPS * 3]); - // Combine pair of lines. - const __m128i a01 = _mm_unpacklo_epi32(a0, a1); - const __m128i a23 = _mm_unpacklo_epi32(a2, a3); - const __m128i b01 = _mm_unpacklo_epi32(b0, b1); - const __m128i b23 = _mm_unpacklo_epi32(b2, b3); - // Convert to 16b. - const __m128i a01s = _mm_unpacklo_epi8(a01, zero); - const __m128i a23s = _mm_unpacklo_epi8(a23, zero); - const __m128i b01s = _mm_unpacklo_epi8(b01, zero); - const __m128i b23s = _mm_unpacklo_epi8(b23, zero); - // subtract, square and accumulate - const __m128i d0 = _mm_subs_epi16(a01s, b01s); - const __m128i d1 = _mm_subs_epi16(a23s, b23s); - const __m128i e0 = _mm_madd_epi16(d0, d0); - const __m128i e1 = _mm_madd_epi16(d1, d1); - const __m128i sum = _mm_add_epi32(e0, e1); - - int32_t tmp[4]; - _mm_storeu_si128((__m128i*)tmp, sum); - return (tmp[3] + tmp[2] + tmp[1] + tmp[0]); -} - -//------------------------------------------------------------------------------ - -static void Mean16x4_SSE2(const uint8_t* ref, uint32_t dc[4]) { - const __m128i mask = _mm_set1_epi16(0x00ff); - const __m128i a0 = _mm_loadu_si128((const __m128i*)&ref[BPS * 0]); - const __m128i a1 = _mm_loadu_si128((const __m128i*)&ref[BPS * 1]); - const __m128i a2 = _mm_loadu_si128((const __m128i*)&ref[BPS * 2]); - const __m128i a3 = _mm_loadu_si128((const __m128i*)&ref[BPS * 3]); - const __m128i b0 = _mm_srli_epi16(a0, 8); // hi byte - const __m128i b1 = _mm_srli_epi16(a1, 8); - const __m128i b2 = _mm_srli_epi16(a2, 8); - const __m128i b3 = _mm_srli_epi16(a3, 8); - const __m128i c0 = _mm_and_si128(a0, mask); // lo byte - const __m128i c1 = _mm_and_si128(a1, mask); - const __m128i c2 = _mm_and_si128(a2, mask); - const __m128i c3 = _mm_and_si128(a3, mask); - const __m128i d0 = _mm_add_epi32(b0, c0); - const __m128i d1 = _mm_add_epi32(b1, c1); - const __m128i d2 = _mm_add_epi32(b2, c2); - const __m128i d3 = _mm_add_epi32(b3, c3); - const __m128i e0 = _mm_add_epi32(d0, d1); - const __m128i e1 = _mm_add_epi32(d2, d3); - const __m128i f0 = _mm_add_epi32(e0, e1); - uint16_t tmp[8]; - _mm_storeu_si128((__m128i*)tmp, f0); - dc[0] = tmp[0] + tmp[1]; - dc[1] = tmp[2] + tmp[3]; - dc[2] = tmp[4] + tmp[5]; - dc[3] = tmp[6] + tmp[7]; -} - -//------------------------------------------------------------------------------ -// Texture distortion -// -// We try to match the spectral content (weighted) between source and -// reconstructed samples. - -// Hadamard transform -// Returns the weighted sum of the absolute value of transformed coefficients. -// w[] contains a row-major 4 by 4 symmetric matrix. -static int TTransform_SSE2(const uint8_t* inA, const uint8_t* inB, - const uint16_t* const w) { - int32_t sum[4]; - __m128i tmp_0, tmp_1, tmp_2, tmp_3; - const __m128i zero = _mm_setzero_si128(); - - // Load and combine inputs. - { - const __m128i inA_0 = _mm_loadl_epi64((const __m128i*)&inA[BPS * 0]); - const __m128i inA_1 = _mm_loadl_epi64((const __m128i*)&inA[BPS * 1]); - const __m128i inA_2 = _mm_loadl_epi64((const __m128i*)&inA[BPS * 2]); - const __m128i inA_3 = _mm_loadl_epi64((const __m128i*)&inA[BPS * 3]); - const __m128i inB_0 = _mm_loadl_epi64((const __m128i*)&inB[BPS * 0]); - const __m128i inB_1 = _mm_loadl_epi64((const __m128i*)&inB[BPS * 1]); - const __m128i inB_2 = _mm_loadl_epi64((const __m128i*)&inB[BPS * 2]); - const __m128i inB_3 = _mm_loadl_epi64((const __m128i*)&inB[BPS * 3]); - - // Combine inA and inB (we'll do two transforms in parallel). - const __m128i inAB_0 = _mm_unpacklo_epi32(inA_0, inB_0); - const __m128i inAB_1 = _mm_unpacklo_epi32(inA_1, inB_1); - const __m128i inAB_2 = _mm_unpacklo_epi32(inA_2, inB_2); - const __m128i inAB_3 = _mm_unpacklo_epi32(inA_3, inB_3); - tmp_0 = _mm_unpacklo_epi8(inAB_0, zero); - tmp_1 = _mm_unpacklo_epi8(inAB_1, zero); - tmp_2 = _mm_unpacklo_epi8(inAB_2, zero); - tmp_3 = _mm_unpacklo_epi8(inAB_3, zero); - // a00 a01 a02 a03 b00 b01 b02 b03 - // a10 a11 a12 a13 b10 b11 b12 b13 - // a20 a21 a22 a23 b20 b21 b22 b23 - // a30 a31 a32 a33 b30 b31 b32 b33 - } - - // Vertical pass first to avoid a transpose (vertical and horizontal passes - // are commutative because w/kWeightY is symmetric) and subsequent transpose. - { - // Calculate a and b (two 4x4 at once). - const __m128i a0 = _mm_add_epi16(tmp_0, tmp_2); - const __m128i a1 = _mm_add_epi16(tmp_1, tmp_3); - const __m128i a2 = _mm_sub_epi16(tmp_1, tmp_3); - const __m128i a3 = _mm_sub_epi16(tmp_0, tmp_2); - const __m128i b0 = _mm_add_epi16(a0, a1); - const __m128i b1 = _mm_add_epi16(a3, a2); - const __m128i b2 = _mm_sub_epi16(a3, a2); - const __m128i b3 = _mm_sub_epi16(a0, a1); - // a00 a01 a02 a03 b00 b01 b02 b03 - // a10 a11 a12 a13 b10 b11 b12 b13 - // a20 a21 a22 a23 b20 b21 b22 b23 - // a30 a31 a32 a33 b30 b31 b32 b33 - - // Transpose the two 4x4. - VP8Transpose_2_4x4_16b(&b0, &b1, &b2, &b3, &tmp_0, &tmp_1, &tmp_2, &tmp_3); - } - - // Horizontal pass and difference of weighted sums. - { - // Load all inputs. - const __m128i w_0 = _mm_loadu_si128((const __m128i*)&w[0]); - const __m128i w_8 = _mm_loadu_si128((const __m128i*)&w[8]); - - // Calculate a and b (two 4x4 at once). - const __m128i a0 = _mm_add_epi16(tmp_0, tmp_2); - const __m128i a1 = _mm_add_epi16(tmp_1, tmp_3); - const __m128i a2 = _mm_sub_epi16(tmp_1, tmp_3); - const __m128i a3 = _mm_sub_epi16(tmp_0, tmp_2); - const __m128i b0 = _mm_add_epi16(a0, a1); - const __m128i b1 = _mm_add_epi16(a3, a2); - const __m128i b2 = _mm_sub_epi16(a3, a2); - const __m128i b3 = _mm_sub_epi16(a0, a1); - - // Separate the transforms of inA and inB. - __m128i A_b0 = _mm_unpacklo_epi64(b0, b1); - __m128i A_b2 = _mm_unpacklo_epi64(b2, b3); - __m128i B_b0 = _mm_unpackhi_epi64(b0, b1); - __m128i B_b2 = _mm_unpackhi_epi64(b2, b3); - - { - const __m128i d0 = _mm_sub_epi16(zero, A_b0); - const __m128i d1 = _mm_sub_epi16(zero, A_b2); - const __m128i d2 = _mm_sub_epi16(zero, B_b0); - const __m128i d3 = _mm_sub_epi16(zero, B_b2); - A_b0 = _mm_max_epi16(A_b0, d0); // abs(v), 16b - A_b2 = _mm_max_epi16(A_b2, d1); - B_b0 = _mm_max_epi16(B_b0, d2); - B_b2 = _mm_max_epi16(B_b2, d3); - } - - // weighted sums - A_b0 = _mm_madd_epi16(A_b0, w_0); - A_b2 = _mm_madd_epi16(A_b2, w_8); - B_b0 = _mm_madd_epi16(B_b0, w_0); - B_b2 = _mm_madd_epi16(B_b2, w_8); - A_b0 = _mm_add_epi32(A_b0, A_b2); - B_b0 = _mm_add_epi32(B_b0, B_b2); - - // difference of weighted sums - A_b0 = _mm_sub_epi32(A_b0, B_b0); - _mm_storeu_si128((__m128i*)&sum[0], A_b0); - } - return sum[0] + sum[1] + sum[2] + sum[3]; -} - -static int Disto4x4_SSE2(const uint8_t* const a, const uint8_t* const b, - const uint16_t* const w) { - const int diff_sum = TTransform_SSE2(a, b, w); - return abs(diff_sum) >> 5; -} - -static int Disto16x16_SSE2(const uint8_t* const a, const uint8_t* const b, - const uint16_t* const w) { - int D = 0; - int x, y; - for (y = 0; y < 16 * BPS; y += 4 * BPS) { - for (x = 0; x < 16; x += 4) { - D += Disto4x4_SSE2(a + x + y, b + x + y, w); - } - } - return D; -} - -//------------------------------------------------------------------------------ -// Quantization -// - -static WEBP_INLINE int DoQuantizeBlock_SSE2(int16_t in[16], int16_t out[16], - const uint16_t* const sharpen, - const VP8Matrix* const mtx) { - const __m128i max_coeff_2047 = _mm_set1_epi16(MAX_LEVEL); - const __m128i zero = _mm_setzero_si128(); - __m128i coeff0, coeff8; - __m128i out0, out8; - __m128i packed_out; - - // Load all inputs. - __m128i in0 = _mm_loadu_si128((__m128i*)&in[0]); - __m128i in8 = _mm_loadu_si128((__m128i*)&in[8]); - const __m128i iq0 = _mm_loadu_si128((const __m128i*)&mtx->iq_[0]); - const __m128i iq8 = _mm_loadu_si128((const __m128i*)&mtx->iq_[8]); - const __m128i q0 = _mm_loadu_si128((const __m128i*)&mtx->q_[0]); - const __m128i q8 = _mm_loadu_si128((const __m128i*)&mtx->q_[8]); - - // extract sign(in) (0x0000 if positive, 0xffff if negative) - const __m128i sign0 = _mm_cmpgt_epi16(zero, in0); - const __m128i sign8 = _mm_cmpgt_epi16(zero, in8); - - // coeff = abs(in) = (in ^ sign) - sign - coeff0 = _mm_xor_si128(in0, sign0); - coeff8 = _mm_xor_si128(in8, sign8); - coeff0 = _mm_sub_epi16(coeff0, sign0); - coeff8 = _mm_sub_epi16(coeff8, sign8); - - // coeff = abs(in) + sharpen - if (sharpen != NULL) { - const __m128i sharpen0 = _mm_loadu_si128((const __m128i*)&sharpen[0]); - const __m128i sharpen8 = _mm_loadu_si128((const __m128i*)&sharpen[8]); - coeff0 = _mm_add_epi16(coeff0, sharpen0); - coeff8 = _mm_add_epi16(coeff8, sharpen8); - } - - // out = (coeff * iQ + B) >> QFIX - { - // doing calculations with 32b precision (QFIX=17) - // out = (coeff * iQ) - const __m128i coeff_iQ0H = _mm_mulhi_epu16(coeff0, iq0); - const __m128i coeff_iQ0L = _mm_mullo_epi16(coeff0, iq0); - const __m128i coeff_iQ8H = _mm_mulhi_epu16(coeff8, iq8); - const __m128i coeff_iQ8L = _mm_mullo_epi16(coeff8, iq8); - __m128i out_00 = _mm_unpacklo_epi16(coeff_iQ0L, coeff_iQ0H); - __m128i out_04 = _mm_unpackhi_epi16(coeff_iQ0L, coeff_iQ0H); - __m128i out_08 = _mm_unpacklo_epi16(coeff_iQ8L, coeff_iQ8H); - __m128i out_12 = _mm_unpackhi_epi16(coeff_iQ8L, coeff_iQ8H); - // out = (coeff * iQ + B) - const __m128i bias_00 = _mm_loadu_si128((const __m128i*)&mtx->bias_[0]); - const __m128i bias_04 = _mm_loadu_si128((const __m128i*)&mtx->bias_[4]); - const __m128i bias_08 = _mm_loadu_si128((const __m128i*)&mtx->bias_[8]); - const __m128i bias_12 = _mm_loadu_si128((const __m128i*)&mtx->bias_[12]); - out_00 = _mm_add_epi32(out_00, bias_00); - out_04 = _mm_add_epi32(out_04, bias_04); - out_08 = _mm_add_epi32(out_08, bias_08); - out_12 = _mm_add_epi32(out_12, bias_12); - // out = QUANTDIV(coeff, iQ, B, QFIX) - out_00 = _mm_srai_epi32(out_00, QFIX); - out_04 = _mm_srai_epi32(out_04, QFIX); - out_08 = _mm_srai_epi32(out_08, QFIX); - out_12 = _mm_srai_epi32(out_12, QFIX); - - // pack result as 16b - out0 = _mm_packs_epi32(out_00, out_04); - out8 = _mm_packs_epi32(out_08, out_12); - - // if (coeff > 2047) coeff = 2047 - out0 = _mm_min_epi16(out0, max_coeff_2047); - out8 = _mm_min_epi16(out8, max_coeff_2047); - } - - // get sign back (if (sign[j]) out_n = -out_n) - out0 = _mm_xor_si128(out0, sign0); - out8 = _mm_xor_si128(out8, sign8); - out0 = _mm_sub_epi16(out0, sign0); - out8 = _mm_sub_epi16(out8, sign8); - - // in = out * Q - in0 = _mm_mullo_epi16(out0, q0); - in8 = _mm_mullo_epi16(out8, q8); - - _mm_storeu_si128((__m128i*)&in[0], in0); - _mm_storeu_si128((__m128i*)&in[8], in8); - - // zigzag the output before storing it. - // - // The zigzag pattern can almost be reproduced with a small sequence of - // shuffles. After it, we only need to swap the 7th (ending up in third - // position instead of twelfth) and 8th values. - { - __m128i outZ0, outZ8; - outZ0 = _mm_shufflehi_epi16(out0, _MM_SHUFFLE(2, 1, 3, 0)); - outZ0 = _mm_shuffle_epi32 (outZ0, _MM_SHUFFLE(3, 1, 2, 0)); - outZ0 = _mm_shufflehi_epi16(outZ0, _MM_SHUFFLE(3, 1, 0, 2)); - outZ8 = _mm_shufflelo_epi16(out8, _MM_SHUFFLE(3, 0, 2, 1)); - outZ8 = _mm_shuffle_epi32 (outZ8, _MM_SHUFFLE(3, 1, 2, 0)); - outZ8 = _mm_shufflelo_epi16(outZ8, _MM_SHUFFLE(1, 3, 2, 0)); - _mm_storeu_si128((__m128i*)&out[0], outZ0); - _mm_storeu_si128((__m128i*)&out[8], outZ8); - packed_out = _mm_packs_epi16(outZ0, outZ8); - } - { - const int16_t outZ_12 = out[12]; - const int16_t outZ_3 = out[3]; - out[3] = outZ_12; - out[12] = outZ_3; - } - - // detect if all 'out' values are zeroes or not - return (_mm_movemask_epi8(_mm_cmpeq_epi8(packed_out, zero)) != 0xffff); -} - -static int QuantizeBlock_SSE2(int16_t in[16], int16_t out[16], - const VP8Matrix* const mtx) { - return DoQuantizeBlock_SSE2(in, out, &mtx->sharpen_[0], mtx); -} - -static int QuantizeBlockWHT_SSE2(int16_t in[16], int16_t out[16], - const VP8Matrix* const mtx) { - return DoQuantizeBlock_SSE2(in, out, NULL, mtx); -} - -static int Quantize2Blocks_SSE2(int16_t in[32], int16_t out[32], - const VP8Matrix* const mtx) { - int nz; - const uint16_t* const sharpen = &mtx->sharpen_[0]; - nz = DoQuantizeBlock_SSE2(in + 0 * 16, out + 0 * 16, sharpen, mtx) << 0; - nz |= DoQuantizeBlock_SSE2(in + 1 * 16, out + 1 * 16, sharpen, mtx) << 1; - return nz; -} - -//------------------------------------------------------------------------------ -// Entry point - -extern void VP8EncDspInitSSE2(void); - -WEBP_TSAN_IGNORE_FUNCTION void VP8EncDspInitSSE2(void) { - VP8CollectHistogram = CollectHistogram_SSE2; - VP8EncPredLuma16 = Intra16Preds_SSE2; - VP8EncPredChroma8 = IntraChromaPreds_SSE2; - VP8EncPredLuma4 = Intra4Preds_SSE2; - VP8EncQuantizeBlock = QuantizeBlock_SSE2; - VP8EncQuantize2Blocks = Quantize2Blocks_SSE2; - VP8EncQuantizeBlockWHT = QuantizeBlockWHT_SSE2; - VP8ITransform = ITransform_SSE2; - VP8FTransform = FTransform_SSE2; - VP8FTransform2 = FTransform2_SSE2; - VP8FTransformWHT = FTransformWHT_SSE2; - VP8SSE16x16 = SSE16x16_SSE2; - VP8SSE16x8 = SSE16x8_SSE2; - VP8SSE8x8 = SSE8x8_SSE2; - VP8SSE4x4 = SSE4x4_SSE2; - VP8TDisto4x4 = Disto4x4_SSE2; - VP8TDisto16x16 = Disto16x16_SSE2; - VP8Mean16x4 = Mean16x4_SSE2; -} - -#else // !WEBP_USE_SSE2 - -WEBP_DSP_INIT_STUB(VP8EncDspInitSSE2) - -#endif // WEBP_USE_SSE2 diff --git a/Extended/libwebp/src/dsp/enc_sse41.c b/Extended/libwebp/src/dsp/enc_sse41.c deleted file mode 100644 index 924035a..0000000 --- a/Extended/libwebp/src/dsp/enc_sse41.c +++ /dev/null @@ -1,339 +0,0 @@ -// Copyright 2015 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// SSE4 version of some encoding functions. -// -// Author: Skal (pascal.massimino@gmail.com) - -#include "src/dsp/dsp.h" - -#if defined(WEBP_USE_SSE41) -#include -#include // for abs() - -#include "src/dsp/common_sse2.h" -#include "src/enc/vp8i_enc.h" - -//------------------------------------------------------------------------------ -// Compute susceptibility based on DCT-coeff histograms. - -static void CollectHistogram_SSE41(const uint8_t* ref, const uint8_t* pred, - int start_block, int end_block, - VP8Histogram* const histo) { - const __m128i max_coeff_thresh = _mm_set1_epi16(MAX_COEFF_THRESH); - int j; - int distribution[MAX_COEFF_THRESH + 1] = { 0 }; - for (j = start_block; j < end_block; ++j) { - int16_t out[16]; - int k; - - VP8FTransform(ref + VP8DspScan[j], pred + VP8DspScan[j], out); - - // Convert coefficients to bin (within out[]). - { - // Load. - const __m128i out0 = _mm_loadu_si128((__m128i*)&out[0]); - const __m128i out1 = _mm_loadu_si128((__m128i*)&out[8]); - // v = abs(out) >> 3 - const __m128i abs0 = _mm_abs_epi16(out0); - const __m128i abs1 = _mm_abs_epi16(out1); - const __m128i v0 = _mm_srai_epi16(abs0, 3); - const __m128i v1 = _mm_srai_epi16(abs1, 3); - // bin = min(v, MAX_COEFF_THRESH) - const __m128i bin0 = _mm_min_epi16(v0, max_coeff_thresh); - const __m128i bin1 = _mm_min_epi16(v1, max_coeff_thresh); - // Store. - _mm_storeu_si128((__m128i*)&out[0], bin0); - _mm_storeu_si128((__m128i*)&out[8], bin1); - } - - // Convert coefficients to bin. - for (k = 0; k < 16; ++k) { - ++distribution[out[k]]; - } - } - VP8SetHistogramData(distribution, histo); -} - -//------------------------------------------------------------------------------ -// Texture distortion -// -// We try to match the spectral content (weighted) between source and -// reconstructed samples. - -// Hadamard transform -// Returns the weighted sum of the absolute value of transformed coefficients. -// w[] contains a row-major 4 by 4 symmetric matrix. -static int TTransform_SSE41(const uint8_t* inA, const uint8_t* inB, - const uint16_t* const w) { - int32_t sum[4]; - __m128i tmp_0, tmp_1, tmp_2, tmp_3; - - // Load and combine inputs. - { - const __m128i inA_0 = _mm_loadu_si128((const __m128i*)&inA[BPS * 0]); - const __m128i inA_1 = _mm_loadu_si128((const __m128i*)&inA[BPS * 1]); - const __m128i inA_2 = _mm_loadu_si128((const __m128i*)&inA[BPS * 2]); - // In SSE4.1, with gcc 4.8 at least (maybe other versions), - // _mm_loadu_si128 is faster than _mm_loadl_epi64. But for the last lump - // of inA and inB, _mm_loadl_epi64 is still used not to have an out of - // bound read. - const __m128i inA_3 = _mm_loadl_epi64((const __m128i*)&inA[BPS * 3]); - const __m128i inB_0 = _mm_loadu_si128((const __m128i*)&inB[BPS * 0]); - const __m128i inB_1 = _mm_loadu_si128((const __m128i*)&inB[BPS * 1]); - const __m128i inB_2 = _mm_loadu_si128((const __m128i*)&inB[BPS * 2]); - const __m128i inB_3 = _mm_loadl_epi64((const __m128i*)&inB[BPS * 3]); - - // Combine inA and inB (we'll do two transforms in parallel). - const __m128i inAB_0 = _mm_unpacklo_epi32(inA_0, inB_0); - const __m128i inAB_1 = _mm_unpacklo_epi32(inA_1, inB_1); - const __m128i inAB_2 = _mm_unpacklo_epi32(inA_2, inB_2); - const __m128i inAB_3 = _mm_unpacklo_epi32(inA_3, inB_3); - tmp_0 = _mm_cvtepu8_epi16(inAB_0); - tmp_1 = _mm_cvtepu8_epi16(inAB_1); - tmp_2 = _mm_cvtepu8_epi16(inAB_2); - tmp_3 = _mm_cvtepu8_epi16(inAB_3); - // a00 a01 a02 a03 b00 b01 b02 b03 - // a10 a11 a12 a13 b10 b11 b12 b13 - // a20 a21 a22 a23 b20 b21 b22 b23 - // a30 a31 a32 a33 b30 b31 b32 b33 - } - - // Vertical pass first to avoid a transpose (vertical and horizontal passes - // are commutative because w/kWeightY is symmetric) and subsequent transpose. - { - // Calculate a and b (two 4x4 at once). - const __m128i a0 = _mm_add_epi16(tmp_0, tmp_2); - const __m128i a1 = _mm_add_epi16(tmp_1, tmp_3); - const __m128i a2 = _mm_sub_epi16(tmp_1, tmp_3); - const __m128i a3 = _mm_sub_epi16(tmp_0, tmp_2); - const __m128i b0 = _mm_add_epi16(a0, a1); - const __m128i b1 = _mm_add_epi16(a3, a2); - const __m128i b2 = _mm_sub_epi16(a3, a2); - const __m128i b3 = _mm_sub_epi16(a0, a1); - // a00 a01 a02 a03 b00 b01 b02 b03 - // a10 a11 a12 a13 b10 b11 b12 b13 - // a20 a21 a22 a23 b20 b21 b22 b23 - // a30 a31 a32 a33 b30 b31 b32 b33 - - // Transpose the two 4x4. - VP8Transpose_2_4x4_16b(&b0, &b1, &b2, &b3, &tmp_0, &tmp_1, &tmp_2, &tmp_3); - } - - // Horizontal pass and difference of weighted sums. - { - // Load all inputs. - const __m128i w_0 = _mm_loadu_si128((const __m128i*)&w[0]); - const __m128i w_8 = _mm_loadu_si128((const __m128i*)&w[8]); - - // Calculate a and b (two 4x4 at once). - const __m128i a0 = _mm_add_epi16(tmp_0, tmp_2); - const __m128i a1 = _mm_add_epi16(tmp_1, tmp_3); - const __m128i a2 = _mm_sub_epi16(tmp_1, tmp_3); - const __m128i a3 = _mm_sub_epi16(tmp_0, tmp_2); - const __m128i b0 = _mm_add_epi16(a0, a1); - const __m128i b1 = _mm_add_epi16(a3, a2); - const __m128i b2 = _mm_sub_epi16(a3, a2); - const __m128i b3 = _mm_sub_epi16(a0, a1); - - // Separate the transforms of inA and inB. - __m128i A_b0 = _mm_unpacklo_epi64(b0, b1); - __m128i A_b2 = _mm_unpacklo_epi64(b2, b3); - __m128i B_b0 = _mm_unpackhi_epi64(b0, b1); - __m128i B_b2 = _mm_unpackhi_epi64(b2, b3); - - A_b0 = _mm_abs_epi16(A_b0); - A_b2 = _mm_abs_epi16(A_b2); - B_b0 = _mm_abs_epi16(B_b0); - B_b2 = _mm_abs_epi16(B_b2); - - // weighted sums - A_b0 = _mm_madd_epi16(A_b0, w_0); - A_b2 = _mm_madd_epi16(A_b2, w_8); - B_b0 = _mm_madd_epi16(B_b0, w_0); - B_b2 = _mm_madd_epi16(B_b2, w_8); - A_b0 = _mm_add_epi32(A_b0, A_b2); - B_b0 = _mm_add_epi32(B_b0, B_b2); - - // difference of weighted sums - A_b2 = _mm_sub_epi32(A_b0, B_b0); - _mm_storeu_si128((__m128i*)&sum[0], A_b2); - } - return sum[0] + sum[1] + sum[2] + sum[3]; -} - -static int Disto4x4_SSE41(const uint8_t* const a, const uint8_t* const b, - const uint16_t* const w) { - const int diff_sum = TTransform_SSE41(a, b, w); - return abs(diff_sum) >> 5; -} - -static int Disto16x16_SSE41(const uint8_t* const a, const uint8_t* const b, - const uint16_t* const w) { - int D = 0; - int x, y; - for (y = 0; y < 16 * BPS; y += 4 * BPS) { - for (x = 0; x < 16; x += 4) { - D += Disto4x4_SSE41(a + x + y, b + x + y, w); - } - } - return D; -} - -//------------------------------------------------------------------------------ -// Quantization -// - -// Generates a pshufb constant for shuffling 16b words. -#define PSHUFB_CST(A,B,C,D,E,F,G,H) \ - _mm_set_epi8(2 * (H) + 1, 2 * (H) + 0, 2 * (G) + 1, 2 * (G) + 0, \ - 2 * (F) + 1, 2 * (F) + 0, 2 * (E) + 1, 2 * (E) + 0, \ - 2 * (D) + 1, 2 * (D) + 0, 2 * (C) + 1, 2 * (C) + 0, \ - 2 * (B) + 1, 2 * (B) + 0, 2 * (A) + 1, 2 * (A) + 0) - -static WEBP_INLINE int DoQuantizeBlock_SSE41(int16_t in[16], int16_t out[16], - const uint16_t* const sharpen, - const VP8Matrix* const mtx) { - const __m128i max_coeff_2047 = _mm_set1_epi16(MAX_LEVEL); - const __m128i zero = _mm_setzero_si128(); - __m128i out0, out8; - __m128i packed_out; - - // Load all inputs. - __m128i in0 = _mm_loadu_si128((__m128i*)&in[0]); - __m128i in8 = _mm_loadu_si128((__m128i*)&in[8]); - const __m128i iq0 = _mm_loadu_si128((const __m128i*)&mtx->iq_[0]); - const __m128i iq8 = _mm_loadu_si128((const __m128i*)&mtx->iq_[8]); - const __m128i q0 = _mm_loadu_si128((const __m128i*)&mtx->q_[0]); - const __m128i q8 = _mm_loadu_si128((const __m128i*)&mtx->q_[8]); - - // coeff = abs(in) - __m128i coeff0 = _mm_abs_epi16(in0); - __m128i coeff8 = _mm_abs_epi16(in8); - - // coeff = abs(in) + sharpen - if (sharpen != NULL) { - const __m128i sharpen0 = _mm_loadu_si128((const __m128i*)&sharpen[0]); - const __m128i sharpen8 = _mm_loadu_si128((const __m128i*)&sharpen[8]); - coeff0 = _mm_add_epi16(coeff0, sharpen0); - coeff8 = _mm_add_epi16(coeff8, sharpen8); - } - - // out = (coeff * iQ + B) >> QFIX - { - // doing calculations with 32b precision (QFIX=17) - // out = (coeff * iQ) - const __m128i coeff_iQ0H = _mm_mulhi_epu16(coeff0, iq0); - const __m128i coeff_iQ0L = _mm_mullo_epi16(coeff0, iq0); - const __m128i coeff_iQ8H = _mm_mulhi_epu16(coeff8, iq8); - const __m128i coeff_iQ8L = _mm_mullo_epi16(coeff8, iq8); - __m128i out_00 = _mm_unpacklo_epi16(coeff_iQ0L, coeff_iQ0H); - __m128i out_04 = _mm_unpackhi_epi16(coeff_iQ0L, coeff_iQ0H); - __m128i out_08 = _mm_unpacklo_epi16(coeff_iQ8L, coeff_iQ8H); - __m128i out_12 = _mm_unpackhi_epi16(coeff_iQ8L, coeff_iQ8H); - // out = (coeff * iQ + B) - const __m128i bias_00 = _mm_loadu_si128((const __m128i*)&mtx->bias_[0]); - const __m128i bias_04 = _mm_loadu_si128((const __m128i*)&mtx->bias_[4]); - const __m128i bias_08 = _mm_loadu_si128((const __m128i*)&mtx->bias_[8]); - const __m128i bias_12 = _mm_loadu_si128((const __m128i*)&mtx->bias_[12]); - out_00 = _mm_add_epi32(out_00, bias_00); - out_04 = _mm_add_epi32(out_04, bias_04); - out_08 = _mm_add_epi32(out_08, bias_08); - out_12 = _mm_add_epi32(out_12, bias_12); - // out = QUANTDIV(coeff, iQ, B, QFIX) - out_00 = _mm_srai_epi32(out_00, QFIX); - out_04 = _mm_srai_epi32(out_04, QFIX); - out_08 = _mm_srai_epi32(out_08, QFIX); - out_12 = _mm_srai_epi32(out_12, QFIX); - - // pack result as 16b - out0 = _mm_packs_epi32(out_00, out_04); - out8 = _mm_packs_epi32(out_08, out_12); - - // if (coeff > 2047) coeff = 2047 - out0 = _mm_min_epi16(out0, max_coeff_2047); - out8 = _mm_min_epi16(out8, max_coeff_2047); - } - - // put sign back - out0 = _mm_sign_epi16(out0, in0); - out8 = _mm_sign_epi16(out8, in8); - - // in = out * Q - in0 = _mm_mullo_epi16(out0, q0); - in8 = _mm_mullo_epi16(out8, q8); - - _mm_storeu_si128((__m128i*)&in[0], in0); - _mm_storeu_si128((__m128i*)&in[8], in8); - - // zigzag the output before storing it. The re-ordering is: - // 0 1 2 3 4 5 6 7 | 8 9 10 11 12 13 14 15 - // -> 0 1 4[8]5 2 3 6 | 9 12 13 10 [7]11 14 15 - // There's only two misplaced entries ([8] and [7]) that are crossing the - // reg's boundaries. - // We use pshufb instead of pshuflo/pshufhi. - { - const __m128i kCst_lo = PSHUFB_CST(0, 1, 4, -1, 5, 2, 3, 6); - const __m128i kCst_7 = PSHUFB_CST(-1, -1, -1, -1, 7, -1, -1, -1); - const __m128i tmp_lo = _mm_shuffle_epi8(out0, kCst_lo); - const __m128i tmp_7 = _mm_shuffle_epi8(out0, kCst_7); // extract #7 - const __m128i kCst_hi = PSHUFB_CST(1, 4, 5, 2, -1, 3, 6, 7); - const __m128i kCst_8 = PSHUFB_CST(-1, -1, -1, 0, -1, -1, -1, -1); - const __m128i tmp_hi = _mm_shuffle_epi8(out8, kCst_hi); - const __m128i tmp_8 = _mm_shuffle_epi8(out8, kCst_8); // extract #8 - const __m128i out_z0 = _mm_or_si128(tmp_lo, tmp_8); - const __m128i out_z8 = _mm_or_si128(tmp_hi, tmp_7); - _mm_storeu_si128((__m128i*)&out[0], out_z0); - _mm_storeu_si128((__m128i*)&out[8], out_z8); - packed_out = _mm_packs_epi16(out_z0, out_z8); - } - - // detect if all 'out' values are zeroes or not - return (_mm_movemask_epi8(_mm_cmpeq_epi8(packed_out, zero)) != 0xffff); -} - -#undef PSHUFB_CST - -static int QuantizeBlock_SSE41(int16_t in[16], int16_t out[16], - const VP8Matrix* const mtx) { - return DoQuantizeBlock_SSE41(in, out, &mtx->sharpen_[0], mtx); -} - -static int QuantizeBlockWHT_SSE41(int16_t in[16], int16_t out[16], - const VP8Matrix* const mtx) { - return DoQuantizeBlock_SSE41(in, out, NULL, mtx); -} - -static int Quantize2Blocks_SSE41(int16_t in[32], int16_t out[32], - const VP8Matrix* const mtx) { - int nz; - const uint16_t* const sharpen = &mtx->sharpen_[0]; - nz = DoQuantizeBlock_SSE41(in + 0 * 16, out + 0 * 16, sharpen, mtx) << 0; - nz |= DoQuantizeBlock_SSE41(in + 1 * 16, out + 1 * 16, sharpen, mtx) << 1; - return nz; -} - -//------------------------------------------------------------------------------ -// Entry point - -extern void VP8EncDspInitSSE41(void); -WEBP_TSAN_IGNORE_FUNCTION void VP8EncDspInitSSE41(void) { - VP8CollectHistogram = CollectHistogram_SSE41; - VP8EncQuantizeBlock = QuantizeBlock_SSE41; - VP8EncQuantize2Blocks = Quantize2Blocks_SSE41; - VP8EncQuantizeBlockWHT = QuantizeBlockWHT_SSE41; - VP8TDisto4x4 = Disto4x4_SSE41; - VP8TDisto16x16 = Disto16x16_SSE41; -} - -#else // !WEBP_USE_SSE41 - -WEBP_DSP_INIT_STUB(VP8EncDspInitSSE41) - -#endif // WEBP_USE_SSE41 diff --git a/Extended/libwebp/src/dsp/filters.c b/Extended/libwebp/src/dsp/filters.c deleted file mode 100644 index 9e910d9..0000000 --- a/Extended/libwebp/src/dsp/filters.c +++ /dev/null @@ -1,287 +0,0 @@ -// Copyright 2011 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Spatial prediction using various filters -// -// Author: Urvang (urvang@google.com) - -#include "src/dsp/dsp.h" -#include -#include -#include - -//------------------------------------------------------------------------------ -// Helpful macro. - -# define SANITY_CHECK(in, out) \ - assert((in) != NULL); \ - assert((out) != NULL); \ - assert(width > 0); \ - assert(height > 0); \ - assert(stride >= width); \ - assert(row >= 0 && num_rows > 0 && row + num_rows <= height); \ - (void)height; // Silence unused warning. - -#if !WEBP_NEON_OMIT_C_CODE -static WEBP_INLINE void PredictLine_C(const uint8_t* src, const uint8_t* pred, - uint8_t* dst, int length, int inverse) { - int i; - if (inverse) { - for (i = 0; i < length; ++i) dst[i] = (uint8_t)(src[i] + pred[i]); - } else { - for (i = 0; i < length; ++i) dst[i] = (uint8_t)(src[i] - pred[i]); - } -} - -//------------------------------------------------------------------------------ -// Horizontal filter. - -static WEBP_INLINE void DoHorizontalFilter_C(const uint8_t* in, - int width, int height, int stride, - int row, int num_rows, - int inverse, uint8_t* out) { - const uint8_t* preds; - const size_t start_offset = row * stride; - const int last_row = row + num_rows; - SANITY_CHECK(in, out); - in += start_offset; - out += start_offset; - preds = inverse ? out : in; - - if (row == 0) { - // Leftmost pixel is the same as input for topmost scanline. - out[0] = in[0]; - PredictLine_C(in + 1, preds, out + 1, width - 1, inverse); - row = 1; - preds += stride; - in += stride; - out += stride; - } - - // Filter line-by-line. - while (row < last_row) { - // Leftmost pixel is predicted from above. - PredictLine_C(in, preds - stride, out, 1, inverse); - PredictLine_C(in + 1, preds, out + 1, width - 1, inverse); - ++row; - preds += stride; - in += stride; - out += stride; - } -} - -//------------------------------------------------------------------------------ -// Vertical filter. - -static WEBP_INLINE void DoVerticalFilter_C(const uint8_t* in, - int width, int height, int stride, - int row, int num_rows, - int inverse, uint8_t* out) { - const uint8_t* preds; - const size_t start_offset = row * stride; - const int last_row = row + num_rows; - SANITY_CHECK(in, out); - in += start_offset; - out += start_offset; - preds = inverse ? out : in; - - if (row == 0) { - // Very first top-left pixel is copied. - out[0] = in[0]; - // Rest of top scan-line is left-predicted. - PredictLine_C(in + 1, preds, out + 1, width - 1, inverse); - row = 1; - in += stride; - out += stride; - } else { - // We are starting from in-between. Make sure 'preds' points to prev row. - preds -= stride; - } - - // Filter line-by-line. - while (row < last_row) { - PredictLine_C(in, preds, out, width, inverse); - ++row; - preds += stride; - in += stride; - out += stride; - } -} -#endif // !WEBP_NEON_OMIT_C_CODE - -//------------------------------------------------------------------------------ -// Gradient filter. - -static WEBP_INLINE int GradientPredictor_C(uint8_t a, uint8_t b, uint8_t c) { - const int g = a + b - c; - return ((g & ~0xff) == 0) ? g : (g < 0) ? 0 : 255; // clip to 8bit -} - -#if !WEBP_NEON_OMIT_C_CODE -static WEBP_INLINE void DoGradientFilter_C(const uint8_t* in, - int width, int height, int stride, - int row, int num_rows, - int inverse, uint8_t* out) { - const uint8_t* preds; - const size_t start_offset = row * stride; - const int last_row = row + num_rows; - SANITY_CHECK(in, out); - in += start_offset; - out += start_offset; - preds = inverse ? out : in; - - // left prediction for top scan-line - if (row == 0) { - out[0] = in[0]; - PredictLine_C(in + 1, preds, out + 1, width - 1, inverse); - row = 1; - preds += stride; - in += stride; - out += stride; - } - - // Filter line-by-line. - while (row < last_row) { - int w; - // leftmost pixel: predict from above. - PredictLine_C(in, preds - stride, out, 1, inverse); - for (w = 1; w < width; ++w) { - const int pred = GradientPredictor_C(preds[w - 1], - preds[w - stride], - preds[w - stride - 1]); - out[w] = (uint8_t)(in[w] + (inverse ? pred : -pred)); - } - ++row; - preds += stride; - in += stride; - out += stride; - } -} -#endif // !WEBP_NEON_OMIT_C_CODE - -#undef SANITY_CHECK - -//------------------------------------------------------------------------------ - -#if !WEBP_NEON_OMIT_C_CODE -static void HorizontalFilter_C(const uint8_t* data, int width, int height, - int stride, uint8_t* filtered_data) { - DoHorizontalFilter_C(data, width, height, stride, 0, height, 0, - filtered_data); -} - -static void VerticalFilter_C(const uint8_t* data, int width, int height, - int stride, uint8_t* filtered_data) { - DoVerticalFilter_C(data, width, height, stride, 0, height, 0, filtered_data); -} - -static void GradientFilter_C(const uint8_t* data, int width, int height, - int stride, uint8_t* filtered_data) { - DoGradientFilter_C(data, width, height, stride, 0, height, 0, filtered_data); -} -#endif // !WEBP_NEON_OMIT_C_CODE - -//------------------------------------------------------------------------------ - -static void HorizontalUnfilter_C(const uint8_t* prev, const uint8_t* in, - uint8_t* out, int width) { - uint8_t pred = (prev == NULL) ? 0 : prev[0]; - int i; - for (i = 0; i < width; ++i) { - out[i] = (uint8_t)(pred + in[i]); - pred = out[i]; - } -} - -#if !WEBP_NEON_OMIT_C_CODE -static void VerticalUnfilter_C(const uint8_t* prev, const uint8_t* in, - uint8_t* out, int width) { - if (prev == NULL) { - HorizontalUnfilter_C(NULL, in, out, width); - } else { - int i; - for (i = 0; i < width; ++i) out[i] = (uint8_t)(prev[i] + in[i]); - } -} -#endif // !WEBP_NEON_OMIT_C_CODE - -static void GradientUnfilter_C(const uint8_t* prev, const uint8_t* in, - uint8_t* out, int width) { - if (prev == NULL) { - HorizontalUnfilter_C(NULL, in, out, width); - } else { - uint8_t top = prev[0], top_left = top, left = top; - int i; - for (i = 0; i < width; ++i) { - top = prev[i]; // need to read this first, in case prev==out - left = (uint8_t)(in[i] + GradientPredictor_C(left, top, top_left)); - top_left = top; - out[i] = left; - } - } -} - -//------------------------------------------------------------------------------ -// Init function - -WebPFilterFunc WebPFilters[WEBP_FILTER_LAST]; -WebPUnfilterFunc WebPUnfilters[WEBP_FILTER_LAST]; - -extern void VP8FiltersInitMIPSdspR2(void); -extern void VP8FiltersInitMSA(void); -extern void VP8FiltersInitNEON(void); -extern void VP8FiltersInitSSE2(void); - -WEBP_DSP_INIT_FUNC(VP8FiltersInit) { - WebPUnfilters[WEBP_FILTER_NONE] = NULL; -#if !WEBP_NEON_OMIT_C_CODE - WebPUnfilters[WEBP_FILTER_HORIZONTAL] = HorizontalUnfilter_C; - WebPUnfilters[WEBP_FILTER_VERTICAL] = VerticalUnfilter_C; -#endif - WebPUnfilters[WEBP_FILTER_GRADIENT] = GradientUnfilter_C; - - WebPFilters[WEBP_FILTER_NONE] = NULL; -#if !WEBP_NEON_OMIT_C_CODE - WebPFilters[WEBP_FILTER_HORIZONTAL] = HorizontalFilter_C; - WebPFilters[WEBP_FILTER_VERTICAL] = VerticalFilter_C; - WebPFilters[WEBP_FILTER_GRADIENT] = GradientFilter_C; -#endif - - if (VP8GetCPUInfo != NULL) { -#if defined(WEBP_USE_SSE2) - if (VP8GetCPUInfo(kSSE2)) { - VP8FiltersInitSSE2(); - } -#endif -#if defined(WEBP_USE_MIPS_DSP_R2) - if (VP8GetCPUInfo(kMIPSdspR2)) { - VP8FiltersInitMIPSdspR2(); - } -#endif -#if defined(WEBP_USE_MSA) - if (VP8GetCPUInfo(kMSA)) { - VP8FiltersInitMSA(); - } -#endif - } - -#if defined(WEBP_USE_NEON) - if (WEBP_NEON_OMIT_C_CODE || - (VP8GetCPUInfo != NULL && VP8GetCPUInfo(kNEON))) { - VP8FiltersInitNEON(); - } -#endif - - assert(WebPUnfilters[WEBP_FILTER_HORIZONTAL] != NULL); - assert(WebPUnfilters[WEBP_FILTER_VERTICAL] != NULL); - assert(WebPUnfilters[WEBP_FILTER_GRADIENT] != NULL); - assert(WebPFilters[WEBP_FILTER_HORIZONTAL] != NULL); - assert(WebPFilters[WEBP_FILTER_VERTICAL] != NULL); - assert(WebPFilters[WEBP_FILTER_GRADIENT] != NULL); -} diff --git a/Extended/libwebp/src/dsp/filters_mips_dsp_r2.c b/Extended/libwebp/src/dsp/filters_mips_dsp_r2.c deleted file mode 100644 index 9382b12..0000000 --- a/Extended/libwebp/src/dsp/filters_mips_dsp_r2.c +++ /dev/null @@ -1,402 +0,0 @@ -// Copyright 2014 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Spatial prediction using various filters -// -// Author(s): Branimir Vasic (branimir.vasic@imgtec.com) -// Djordje Pesut (djordje.pesut@imgtec.com) - -#include "src/dsp/dsp.h" - -#if defined(WEBP_USE_MIPS_DSP_R2) - -#include "src/dsp/dsp.h" -#include -#include -#include - -//------------------------------------------------------------------------------ -// Helpful macro. - -# define SANITY_CHECK(in, out) \ - assert(in != NULL); \ - assert(out != NULL); \ - assert(width > 0); \ - assert(height > 0); \ - assert(stride >= width); \ - assert(row >= 0 && num_rows > 0 && row + num_rows <= height); \ - (void)height; // Silence unused warning. - -#define DO_PREDICT_LINE(SRC, DST, LENGTH, INVERSE) do { \ - const uint8_t* psrc = (uint8_t*)(SRC); \ - uint8_t* pdst = (uint8_t*)(DST); \ - const int ilength = (int)(LENGTH); \ - int temp0, temp1, temp2, temp3, temp4, temp5, temp6; \ - __asm__ volatile ( \ - ".set push \n\t" \ - ".set noreorder \n\t" \ - "srl %[temp0], %[length], 2 \n\t" \ - "beqz %[temp0], 4f \n\t" \ - " andi %[temp6], %[length], 3 \n\t" \ - ".if " #INVERSE " \n\t" \ - "1: \n\t" \ - "lbu %[temp1], -1(%[dst]) \n\t" \ - "lbu %[temp2], 0(%[src]) \n\t" \ - "lbu %[temp3], 1(%[src]) \n\t" \ - "lbu %[temp4], 2(%[src]) \n\t" \ - "lbu %[temp5], 3(%[src]) \n\t" \ - "addu %[temp1], %[temp1], %[temp2] \n\t" \ - "addu %[temp2], %[temp1], %[temp3] \n\t" \ - "addu %[temp3], %[temp2], %[temp4] \n\t" \ - "addu %[temp4], %[temp3], %[temp5] \n\t" \ - "sb %[temp1], 0(%[dst]) \n\t" \ - "sb %[temp2], 1(%[dst]) \n\t" \ - "sb %[temp3], 2(%[dst]) \n\t" \ - "sb %[temp4], 3(%[dst]) \n\t" \ - "addiu %[src], %[src], 4 \n\t" \ - "addiu %[temp0], %[temp0], -1 \n\t" \ - "bnez %[temp0], 1b \n\t" \ - " addiu %[dst], %[dst], 4 \n\t" \ - ".else \n\t" \ - "1: \n\t" \ - "ulw %[temp1], -1(%[src]) \n\t" \ - "ulw %[temp2], 0(%[src]) \n\t" \ - "addiu %[src], %[src], 4 \n\t" \ - "addiu %[temp0], %[temp0], -1 \n\t" \ - "subu.qb %[temp3], %[temp2], %[temp1] \n\t" \ - "usw %[temp3], 0(%[dst]) \n\t" \ - "bnez %[temp0], 1b \n\t" \ - " addiu %[dst], %[dst], 4 \n\t" \ - ".endif \n\t" \ - "4: \n\t" \ - "beqz %[temp6], 3f \n\t" \ - " nop \n\t" \ - "2: \n\t" \ - "lbu %[temp2], 0(%[src]) \n\t" \ - ".if " #INVERSE " \n\t" \ - "lbu %[temp1], -1(%[dst]) \n\t" \ - "addu %[temp3], %[temp1], %[temp2] \n\t" \ - ".else \n\t" \ - "lbu %[temp1], -1(%[src]) \n\t" \ - "subu %[temp3], %[temp1], %[temp2] \n\t" \ - ".endif \n\t" \ - "addiu %[src], %[src], 1 \n\t" \ - "sb %[temp3], 0(%[dst]) \n\t" \ - "addiu %[temp6], %[temp6], -1 \n\t" \ - "bnez %[temp6], 2b \n\t" \ - " addiu %[dst], %[dst], 1 \n\t" \ - "3: \n\t" \ - ".set pop \n\t" \ - : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [temp2]"=&r"(temp2), \ - [temp3]"=&r"(temp3), [temp4]"=&r"(temp4), [temp5]"=&r"(temp5), \ - [temp6]"=&r"(temp6), [dst]"+&r"(pdst), [src]"+&r"(psrc) \ - : [length]"r"(ilength) \ - : "memory" \ - ); \ - } while (0) - -static WEBP_INLINE void PredictLine_MIPSdspR2(const uint8_t* src, uint8_t* dst, - int length) { - DO_PREDICT_LINE(src, dst, length, 0); -} - -#define DO_PREDICT_LINE_VERTICAL(SRC, PRED, DST, LENGTH, INVERSE) do { \ - const uint8_t* psrc = (uint8_t*)(SRC); \ - const uint8_t* ppred = (uint8_t*)(PRED); \ - uint8_t* pdst = (uint8_t*)(DST); \ - const int ilength = (int)(LENGTH); \ - int temp0, temp1, temp2, temp3, temp4, temp5, temp6, temp7; \ - __asm__ volatile ( \ - ".set push \n\t" \ - ".set noreorder \n\t" \ - "srl %[temp0], %[length], 0x3 \n\t" \ - "beqz %[temp0], 4f \n\t" \ - " andi %[temp7], %[length], 0x7 \n\t" \ - "1: \n\t" \ - "ulw %[temp1], 0(%[src]) \n\t" \ - "ulw %[temp2], 0(%[pred]) \n\t" \ - "ulw %[temp3], 4(%[src]) \n\t" \ - "ulw %[temp4], 4(%[pred]) \n\t" \ - "addiu %[src], %[src], 8 \n\t" \ - ".if " #INVERSE " \n\t" \ - "addu.qb %[temp5], %[temp1], %[temp2] \n\t" \ - "addu.qb %[temp6], %[temp3], %[temp4] \n\t" \ - ".else \n\t" \ - "subu.qb %[temp5], %[temp1], %[temp2] \n\t" \ - "subu.qb %[temp6], %[temp3], %[temp4] \n\t" \ - ".endif \n\t" \ - "addiu %[pred], %[pred], 8 \n\t" \ - "usw %[temp5], 0(%[dst]) \n\t" \ - "usw %[temp6], 4(%[dst]) \n\t" \ - "addiu %[temp0], %[temp0], -1 \n\t" \ - "bnez %[temp0], 1b \n\t" \ - " addiu %[dst], %[dst], 8 \n\t" \ - "4: \n\t" \ - "beqz %[temp7], 3f \n\t" \ - " nop \n\t" \ - "2: \n\t" \ - "lbu %[temp1], 0(%[src]) \n\t" \ - "lbu %[temp2], 0(%[pred]) \n\t" \ - "addiu %[src], %[src], 1 \n\t" \ - "addiu %[pred], %[pred], 1 \n\t" \ - ".if " #INVERSE " \n\t" \ - "addu %[temp3], %[temp1], %[temp2] \n\t" \ - ".else \n\t" \ - "subu %[temp3], %[temp1], %[temp2] \n\t" \ - ".endif \n\t" \ - "sb %[temp3], 0(%[dst]) \n\t" \ - "addiu %[temp7], %[temp7], -1 \n\t" \ - "bnez %[temp7], 2b \n\t" \ - " addiu %[dst], %[dst], 1 \n\t" \ - "3: \n\t" \ - ".set pop \n\t" \ - : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [temp2]"=&r"(temp2), \ - [temp3]"=&r"(temp3), [temp4]"=&r"(temp4), [temp5]"=&r"(temp5), \ - [temp6]"=&r"(temp6), [temp7]"=&r"(temp7), [pred]"+&r"(ppred), \ - [dst]"+&r"(pdst), [src]"+&r"(psrc) \ - : [length]"r"(ilength) \ - : "memory" \ - ); \ - } while (0) - -#define PREDICT_LINE_ONE_PASS(SRC, PRED, DST) do { \ - int temp1, temp2, temp3; \ - __asm__ volatile ( \ - "lbu %[temp1], 0(%[src]) \n\t" \ - "lbu %[temp2], 0(%[pred]) \n\t" \ - "subu %[temp3], %[temp1], %[temp2] \n\t" \ - "sb %[temp3], 0(%[dst]) \n\t" \ - : [temp1]"=&r"(temp1), [temp2]"=&r"(temp2), [temp3]"=&r"(temp3) \ - : [pred]"r"((PRED)), [dst]"r"((DST)), [src]"r"((SRC)) \ - : "memory" \ - ); \ - } while (0) - -//------------------------------------------------------------------------------ -// Horizontal filter. - -#define FILTER_LINE_BY_LINE do { \ - while (row < last_row) { \ - PREDICT_LINE_ONE_PASS(in, preds - stride, out); \ - DO_PREDICT_LINE(in + 1, out + 1, width - 1, 0); \ - ++row; \ - preds += stride; \ - in += stride; \ - out += stride; \ - } \ - } while (0) - -static WEBP_INLINE void DoHorizontalFilter_MIPSdspR2(const uint8_t* in, - int width, int height, - int stride, - int row, int num_rows, - uint8_t* out) { - const uint8_t* preds; - const size_t start_offset = row * stride; - const int last_row = row + num_rows; - SANITY_CHECK(in, out); - in += start_offset; - out += start_offset; - preds = in; - - if (row == 0) { - // Leftmost pixel is the same as input for topmost scanline. - out[0] = in[0]; - PredictLine_MIPSdspR2(in + 1, out + 1, width - 1); - row = 1; - preds += stride; - in += stride; - out += stride; - } - - // Filter line-by-line. - FILTER_LINE_BY_LINE; -} -#undef FILTER_LINE_BY_LINE - -static void HorizontalFilter_MIPSdspR2(const uint8_t* data, - int width, int height, - int stride, uint8_t* filtered_data) { - DoHorizontalFilter_MIPSdspR2(data, width, height, stride, 0, height, - filtered_data); -} - -//------------------------------------------------------------------------------ -// Vertical filter. - -#define FILTER_LINE_BY_LINE do { \ - while (row < last_row) { \ - DO_PREDICT_LINE_VERTICAL(in, preds, out, width, 0); \ - ++row; \ - preds += stride; \ - in += stride; \ - out += stride; \ - } \ - } while (0) - -static WEBP_INLINE void DoVerticalFilter_MIPSdspR2(const uint8_t* in, - int width, int height, - int stride, - int row, int num_rows, - uint8_t* out) { - const uint8_t* preds; - const size_t start_offset = row * stride; - const int last_row = row + num_rows; - SANITY_CHECK(in, out); - in += start_offset; - out += start_offset; - preds = in; - - if (row == 0) { - // Very first top-left pixel is copied. - out[0] = in[0]; - // Rest of top scan-line is left-predicted. - PredictLine_MIPSdspR2(in + 1, out + 1, width - 1); - row = 1; - in += stride; - out += stride; - } else { - // We are starting from in-between. Make sure 'preds' points to prev row. - preds -= stride; - } - - // Filter line-by-line. - FILTER_LINE_BY_LINE; -} -#undef FILTER_LINE_BY_LINE - -static void VerticalFilter_MIPSdspR2(const uint8_t* data, int width, int height, - int stride, uint8_t* filtered_data) { - DoVerticalFilter_MIPSdspR2(data, width, height, stride, 0, height, - filtered_data); -} - -//------------------------------------------------------------------------------ -// Gradient filter. - -static int GradientPredictor_MIPSdspR2(uint8_t a, uint8_t b, uint8_t c) { - int temp0; - __asm__ volatile ( - "addu %[temp0], %[a], %[b] \n\t" - "subu %[temp0], %[temp0], %[c] \n\t" - "shll_s.w %[temp0], %[temp0], 23 \n\t" - "precrqu_s.qb.ph %[temp0], %[temp0], $zero \n\t" - "srl %[temp0], %[temp0], 24 \n\t" - : [temp0]"=&r"(temp0) - : [a]"r"(a),[b]"r"(b),[c]"r"(c) - ); - return temp0; -} - -#define FILTER_LINE_BY_LINE(PREDS, OPERATION) do { \ - while (row < last_row) { \ - int w; \ - PREDICT_LINE_ONE_PASS(in, PREDS - stride, out); \ - for (w = 1; w < width; ++w) { \ - const int pred = GradientPredictor_MIPSdspR2(PREDS[w - 1], \ - PREDS[w - stride], \ - PREDS[w - stride - 1]); \ - out[w] = in[w] OPERATION pred; \ - } \ - ++row; \ - in += stride; \ - out += stride; \ - } \ - } while (0) - -static void DoGradientFilter_MIPSdspR2(const uint8_t* in, - int width, int height, int stride, - int row, int num_rows, uint8_t* out) { - const uint8_t* preds; - const size_t start_offset = row * stride; - const int last_row = row + num_rows; - SANITY_CHECK(in, out); - in += start_offset; - out += start_offset; - preds = in; - - // left prediction for top scan-line - if (row == 0) { - out[0] = in[0]; - PredictLine_MIPSdspR2(in + 1, out + 1, width - 1); - row = 1; - preds += stride; - in += stride; - out += stride; - } - - // Filter line-by-line. - FILTER_LINE_BY_LINE(in, -); -} -#undef FILTER_LINE_BY_LINE - -static void GradientFilter_MIPSdspR2(const uint8_t* data, int width, int height, - int stride, uint8_t* filtered_data) { - DoGradientFilter_MIPSdspR2(data, width, height, stride, 0, height, - filtered_data); -} - -//------------------------------------------------------------------------------ - -static void HorizontalUnfilter_MIPSdspR2(const uint8_t* prev, const uint8_t* in, - uint8_t* out, int width) { - out[0] = in[0] + (prev == NULL ? 0 : prev[0]); - DO_PREDICT_LINE(in + 1, out + 1, width - 1, 1); -} - -static void VerticalUnfilter_MIPSdspR2(const uint8_t* prev, const uint8_t* in, - uint8_t* out, int width) { - if (prev == NULL) { - HorizontalUnfilter_MIPSdspR2(NULL, in, out, width); - } else { - DO_PREDICT_LINE_VERTICAL(in, prev, out, width, 1); - } -} - -static void GradientUnfilter_MIPSdspR2(const uint8_t* prev, const uint8_t* in, - uint8_t* out, int width) { - if (prev == NULL) { - HorizontalUnfilter_MIPSdspR2(NULL, in, out, width); - } else { - uint8_t top = prev[0], top_left = top, left = top; - int i; - for (i = 0; i < width; ++i) { - top = prev[i]; // need to read this first, in case prev==dst - left = in[i] + GradientPredictor_MIPSdspR2(left, top, top_left); - top_left = top; - out[i] = left; - } - } -} - -#undef DO_PREDICT_LINE_VERTICAL -#undef PREDICT_LINE_ONE_PASS -#undef DO_PREDICT_LINE -#undef SANITY_CHECK - -//------------------------------------------------------------------------------ -// Entry point - -extern void VP8FiltersInitMIPSdspR2(void); - -WEBP_TSAN_IGNORE_FUNCTION void VP8FiltersInitMIPSdspR2(void) { - WebPUnfilters[WEBP_FILTER_HORIZONTAL] = HorizontalUnfilter_MIPSdspR2; - WebPUnfilters[WEBP_FILTER_VERTICAL] = VerticalUnfilter_MIPSdspR2; - WebPUnfilters[WEBP_FILTER_GRADIENT] = GradientUnfilter_MIPSdspR2; - - WebPFilters[WEBP_FILTER_HORIZONTAL] = HorizontalFilter_MIPSdspR2; - WebPFilters[WEBP_FILTER_VERTICAL] = VerticalFilter_MIPSdspR2; - WebPFilters[WEBP_FILTER_GRADIENT] = GradientFilter_MIPSdspR2; -} - -#else // !WEBP_USE_MIPS_DSP_R2 - -WEBP_DSP_INIT_STUB(VP8FiltersInitMIPSdspR2) - -#endif // WEBP_USE_MIPS_DSP_R2 diff --git a/Extended/libwebp/src/dsp/filters_msa.c b/Extended/libwebp/src/dsp/filters_msa.c deleted file mode 100644 index 14c437d..0000000 --- a/Extended/libwebp/src/dsp/filters_msa.c +++ /dev/null @@ -1,202 +0,0 @@ -// Copyright 2016 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// MSA variant of alpha filters -// -// Author: Prashant Patil (prashant.patil@imgtec.com) - -#include "src/dsp/dsp.h" - -#if defined(WEBP_USE_MSA) - -#include "src/dsp/msa_macro.h" - -#include - -static WEBP_INLINE void PredictLineInverse0(const uint8_t* src, - const uint8_t* pred, - uint8_t* dst, int length) { - v16u8 src0, pred0, dst0; - assert(length >= 0); - while (length >= 32) { - v16u8 src1, pred1, dst1; - LD_UB2(src, 16, src0, src1); - LD_UB2(pred, 16, pred0, pred1); - SUB2(src0, pred0, src1, pred1, dst0, dst1); - ST_UB2(dst0, dst1, dst, 16); - src += 32; - pred += 32; - dst += 32; - length -= 32; - } - if (length > 0) { - int i; - if (length >= 16) { - src0 = LD_UB(src); - pred0 = LD_UB(pred); - dst0 = src0 - pred0; - ST_UB(dst0, dst); - src += 16; - pred += 16; - dst += 16; - length -= 16; - } - for (i = 0; i < length; i++) { - dst[i] = src[i] - pred[i]; - } - } -} - -//------------------------------------------------------------------------------ -// Helpful macro. - -#define SANITY_CHECK(in, out) \ - assert(in != NULL); \ - assert(out != NULL); \ - assert(width > 0); \ - assert(height > 0); \ - assert(stride >= width); - -//------------------------------------------------------------------------------ -// Horrizontal filter - -static void HorizontalFilter_MSA(const uint8_t* data, int width, int height, - int stride, uint8_t* filtered_data) { - const uint8_t* preds = data; - const uint8_t* in = data; - uint8_t* out = filtered_data; - int row = 1; - SANITY_CHECK(in, out); - - // Leftmost pixel is the same as input for topmost scanline. - out[0] = in[0]; - PredictLineInverse0(in + 1, preds, out + 1, width - 1); - preds += stride; - in += stride; - out += stride; - // Filter line-by-line. - while (row < height) { - // Leftmost pixel is predicted from above. - PredictLineInverse0(in, preds - stride, out, 1); - PredictLineInverse0(in + 1, preds, out + 1, width - 1); - ++row; - preds += stride; - in += stride; - out += stride; - } -} - -//------------------------------------------------------------------------------ -// Gradient filter - -static WEBP_INLINE void PredictLineGradient(const uint8_t* pinput, - const uint8_t* ppred, - uint8_t* poutput, int stride, - int size) { - int w; - const v16i8 zero = { 0 }; - while (size >= 16) { - v16u8 pred0, dst0; - v8i16 a0, a1, b0, b1, c0, c1; - const v16u8 tmp0 = LD_UB(ppred - 1); - const v16u8 tmp1 = LD_UB(ppred - stride); - const v16u8 tmp2 = LD_UB(ppred - stride - 1); - const v16u8 src0 = LD_UB(pinput); - ILVRL_B2_SH(zero, tmp0, a0, a1); - ILVRL_B2_SH(zero, tmp1, b0, b1); - ILVRL_B2_SH(zero, tmp2, c0, c1); - ADD2(a0, b0, a1, b1, a0, a1); - SUB2(a0, c0, a1, c1, a0, a1); - CLIP_SH2_0_255(a0, a1); - pred0 = (v16u8)__msa_pckev_b((v16i8)a1, (v16i8)a0); - dst0 = src0 - pred0; - ST_UB(dst0, poutput); - ppred += 16; - pinput += 16; - poutput += 16; - size -= 16; - } - for (w = 0; w < size; ++w) { - const int pred = ppred[w - 1] + ppred[w - stride] - ppred[w - stride - 1]; - poutput[w] = pinput[w] - (pred < 0 ? 0 : pred > 255 ? 255 : pred); - } -} - - -static void GradientFilter_MSA(const uint8_t* data, int width, int height, - int stride, uint8_t* filtered_data) { - const uint8_t* in = data; - const uint8_t* preds = data; - uint8_t* out = filtered_data; - int row = 1; - SANITY_CHECK(in, out); - - // left prediction for top scan-line - out[0] = in[0]; - PredictLineInverse0(in + 1, preds, out + 1, width - 1); - preds += stride; - in += stride; - out += stride; - // Filter line-by-line. - while (row < height) { - out[0] = in[0] - preds[- stride]; - PredictLineGradient(preds + 1, in + 1, out + 1, stride, width - 1); - ++row; - preds += stride; - in += stride; - out += stride; - } -} - -//------------------------------------------------------------------------------ -// Vertical filter - -static void VerticalFilter_MSA(const uint8_t* data, int width, int height, - int stride, uint8_t* filtered_data) { - const uint8_t* in = data; - const uint8_t* preds = data; - uint8_t* out = filtered_data; - int row = 1; - SANITY_CHECK(in, out); - - // Very first top-left pixel is copied. - out[0] = in[0]; - // Rest of top scan-line is left-predicted. - PredictLineInverse0(in + 1, preds, out + 1, width - 1); - in += stride; - out += stride; - - // Filter line-by-line. - while (row < height) { - PredictLineInverse0(in, preds, out, width); - ++row; - preds += stride; - in += stride; - out += stride; - } -} - -#undef SANITY_CHECK - -//------------------------------------------------------------------------------ -// Entry point - -extern void VP8FiltersInitMSA(void); - -WEBP_TSAN_IGNORE_FUNCTION void VP8FiltersInitMSA(void) { - WebPFilters[WEBP_FILTER_HORIZONTAL] = HorizontalFilter_MSA; - WebPFilters[WEBP_FILTER_VERTICAL] = VerticalFilter_MSA; - WebPFilters[WEBP_FILTER_GRADIENT] = GradientFilter_MSA; -} - -#else // !WEBP_USE_MSA - -WEBP_DSP_INIT_STUB(VP8FiltersInitMSA) - -#endif // WEBP_USE_MSA diff --git a/Extended/libwebp/src/dsp/filters_neon.c b/Extended/libwebp/src/dsp/filters_neon.c deleted file mode 100644 index 3e6a578..0000000 --- a/Extended/libwebp/src/dsp/filters_neon.c +++ /dev/null @@ -1,329 +0,0 @@ -// Copyright 2017 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// NEON variant of alpha filters -// -// Author: Skal (pascal.massimino@gmail.com) - -#include "src/dsp/dsp.h" - -#if defined(WEBP_USE_NEON) - -#include -#include "src/dsp/neon.h" - -//------------------------------------------------------------------------------ -// Helpful macros. - -# define SANITY_CHECK(in, out) \ - assert(in != NULL); \ - assert(out != NULL); \ - assert(width > 0); \ - assert(height > 0); \ - assert(stride >= width); \ - assert(row >= 0 && num_rows > 0 && row + num_rows <= height); \ - (void)height; // Silence unused warning. - -// load eight u8 and widen to s16 -#define U8_TO_S16(A) vreinterpretq_s16_u16(vmovl_u8(A)) -#define LOAD_U8_TO_S16(A) U8_TO_S16(vld1_u8(A)) - -// shift left or right by N byte, inserting zeros -#define SHIFT_RIGHT_N_Q(A, N) vextq_u8((A), zero, (N)) -#define SHIFT_LEFT_N_Q(A, N) vextq_u8(zero, (A), (16 - (N)) % 16) - -// rotate left by N bytes -#define ROTATE_LEFT_N(A, N) vext_u8((A), (A), (N)) -// rotate right by N bytes -#define ROTATE_RIGHT_N(A, N) vext_u8((A), (A), (8 - (N)) % 8) - -static void PredictLine_NEON(const uint8_t* src, const uint8_t* pred, - uint8_t* dst, int length) { - int i; - assert(length >= 0); - for (i = 0; i + 16 <= length; i += 16) { - const uint8x16_t A = vld1q_u8(&src[i]); - const uint8x16_t B = vld1q_u8(&pred[i]); - const uint8x16_t C = vsubq_u8(A, B); - vst1q_u8(&dst[i], C); - } - for (; i < length; ++i) dst[i] = src[i] - pred[i]; -} - -// Special case for left-based prediction (when preds==dst-1 or preds==src-1). -static void PredictLineLeft_NEON(const uint8_t* src, uint8_t* dst, int length) { - PredictLine_NEON(src, src - 1, dst, length); -} - -//------------------------------------------------------------------------------ -// Horizontal filter. - -static WEBP_INLINE void DoHorizontalFilter_NEON(const uint8_t* in, - int width, int height, - int stride, - int row, int num_rows, - uint8_t* out) { - const size_t start_offset = row * stride; - const int last_row = row + num_rows; - SANITY_CHECK(in, out); - in += start_offset; - out += start_offset; - - if (row == 0) { - // Leftmost pixel is the same as input for topmost scanline. - out[0] = in[0]; - PredictLineLeft_NEON(in + 1, out + 1, width - 1); - row = 1; - in += stride; - out += stride; - } - - // Filter line-by-line. - while (row < last_row) { - // Leftmost pixel is predicted from above. - out[0] = in[0] - in[-stride]; - PredictLineLeft_NEON(in + 1, out + 1, width - 1); - ++row; - in += stride; - out += stride; - } -} - -static void HorizontalFilter_NEON(const uint8_t* data, int width, int height, - int stride, uint8_t* filtered_data) { - DoHorizontalFilter_NEON(data, width, height, stride, 0, height, - filtered_data); -} - -//------------------------------------------------------------------------------ -// Vertical filter. - -static WEBP_INLINE void DoVerticalFilter_NEON(const uint8_t* in, - int width, int height, int stride, - int row, int num_rows, - uint8_t* out) { - const size_t start_offset = row * stride; - const int last_row = row + num_rows; - SANITY_CHECK(in, out); - in += start_offset; - out += start_offset; - - if (row == 0) { - // Very first top-left pixel is copied. - out[0] = in[0]; - // Rest of top scan-line is left-predicted. - PredictLineLeft_NEON(in + 1, out + 1, width - 1); - row = 1; - in += stride; - out += stride; - } - - // Filter line-by-line. - while (row < last_row) { - PredictLine_NEON(in, in - stride, out, width); - ++row; - in += stride; - out += stride; - } -} - -static void VerticalFilter_NEON(const uint8_t* data, int width, int height, - int stride, uint8_t* filtered_data) { - DoVerticalFilter_NEON(data, width, height, stride, 0, height, - filtered_data); -} - -//------------------------------------------------------------------------------ -// Gradient filter. - -static WEBP_INLINE int GradientPredictor_C(uint8_t a, uint8_t b, uint8_t c) { - const int g = a + b - c; - return ((g & ~0xff) == 0) ? g : (g < 0) ? 0 : 255; // clip to 8bit -} - -static void GradientPredictDirect_NEON(const uint8_t* const row, - const uint8_t* const top, - uint8_t* const out, int length) { - int i; - for (i = 0; i + 8 <= length; i += 8) { - const uint8x8_t A = vld1_u8(&row[i - 1]); - const uint8x8_t B = vld1_u8(&top[i + 0]); - const int16x8_t C = vreinterpretq_s16_u16(vaddl_u8(A, B)); - const int16x8_t D = LOAD_U8_TO_S16(&top[i - 1]); - const uint8x8_t E = vqmovun_s16(vsubq_s16(C, D)); - const uint8x8_t F = vld1_u8(&row[i + 0]); - vst1_u8(&out[i], vsub_u8(F, E)); - } - for (; i < length; ++i) { - out[i] = row[i] - GradientPredictor_C(row[i - 1], top[i], top[i - 1]); - } -} - -static WEBP_INLINE void DoGradientFilter_NEON(const uint8_t* in, - int width, int height, - int stride, - int row, int num_rows, - uint8_t* out) { - const size_t start_offset = row * stride; - const int last_row = row + num_rows; - SANITY_CHECK(in, out); - in += start_offset; - out += start_offset; - - // left prediction for top scan-line - if (row == 0) { - out[0] = in[0]; - PredictLineLeft_NEON(in + 1, out + 1, width - 1); - row = 1; - in += stride; - out += stride; - } - - // Filter line-by-line. - while (row < last_row) { - out[0] = in[0] - in[-stride]; - GradientPredictDirect_NEON(in + 1, in + 1 - stride, out + 1, width - 1); - ++row; - in += stride; - out += stride; - } -} - -static void GradientFilter_NEON(const uint8_t* data, int width, int height, - int stride, uint8_t* filtered_data) { - DoGradientFilter_NEON(data, width, height, stride, 0, height, - filtered_data); -} - -#undef SANITY_CHECK - -//------------------------------------------------------------------------------ -// Inverse transforms - -static void HorizontalUnfilter_NEON(const uint8_t* prev, const uint8_t* in, - uint8_t* out, int width) { - int i; - const uint8x16_t zero = vdupq_n_u8(0); - uint8x16_t last; - out[0] = in[0] + (prev == NULL ? 0 : prev[0]); - if (width <= 1) return; - last = vsetq_lane_u8(out[0], zero, 0); - for (i = 1; i + 16 <= width; i += 16) { - const uint8x16_t A0 = vld1q_u8(&in[i]); - const uint8x16_t A1 = vaddq_u8(A0, last); - const uint8x16_t A2 = SHIFT_LEFT_N_Q(A1, 1); - const uint8x16_t A3 = vaddq_u8(A1, A2); - const uint8x16_t A4 = SHIFT_LEFT_N_Q(A3, 2); - const uint8x16_t A5 = vaddq_u8(A3, A4); - const uint8x16_t A6 = SHIFT_LEFT_N_Q(A5, 4); - const uint8x16_t A7 = vaddq_u8(A5, A6); - const uint8x16_t A8 = SHIFT_LEFT_N_Q(A7, 8); - const uint8x16_t A9 = vaddq_u8(A7, A8); - vst1q_u8(&out[i], A9); - last = SHIFT_RIGHT_N_Q(A9, 15); - } - for (; i < width; ++i) out[i] = in[i] + out[i - 1]; -} - -static void VerticalUnfilter_NEON(const uint8_t* prev, const uint8_t* in, - uint8_t* out, int width) { - if (prev == NULL) { - HorizontalUnfilter_NEON(NULL, in, out, width); - } else { - int i; - assert(width >= 0); - for (i = 0; i + 16 <= width; i += 16) { - const uint8x16_t A = vld1q_u8(&in[i]); - const uint8x16_t B = vld1q_u8(&prev[i]); - const uint8x16_t C = vaddq_u8(A, B); - vst1q_u8(&out[i], C); - } - for (; i < width; ++i) out[i] = in[i] + prev[i]; - } -} - -// GradientUnfilter_NEON is correct but slower than the C-version, -// at least on ARM64. For armv7, it's a wash. -// So best is to disable it for now, but keep the idea around... -#if !defined(USE_GRADIENT_UNFILTER) -#define USE_GRADIENT_UNFILTER 0 // ALTERNATE_CODE -#endif - -#if (USE_GRADIENT_UNFILTER == 1) -#define GRAD_PROCESS_LANE(L) do { \ - const uint8x8_t tmp1 = ROTATE_RIGHT_N(pred, 1); /* rotate predictor in */ \ - const int16x8_t tmp2 = vaddq_s16(BC, U8_TO_S16(tmp1)); \ - const uint8x8_t delta = vqmovun_s16(tmp2); \ - pred = vadd_u8(D, delta); \ - out = vext_u8(out, ROTATE_LEFT_N(pred, (L)), 1); \ -} while (0) - -static void GradientPredictInverse_NEON(const uint8_t* const in, - const uint8_t* const top, - uint8_t* const row, int length) { - if (length > 0) { - int i; - uint8x8_t pred = vdup_n_u8(row[-1]); // left sample - uint8x8_t out = vdup_n_u8(0); - for (i = 0; i + 8 <= length; i += 8) { - const int16x8_t B = LOAD_U8_TO_S16(&top[i + 0]); - const int16x8_t C = LOAD_U8_TO_S16(&top[i - 1]); - const int16x8_t BC = vsubq_s16(B, C); // unclipped gradient basis B - C - const uint8x8_t D = vld1_u8(&in[i]); // base input - GRAD_PROCESS_LANE(0); - GRAD_PROCESS_LANE(1); - GRAD_PROCESS_LANE(2); - GRAD_PROCESS_LANE(3); - GRAD_PROCESS_LANE(4); - GRAD_PROCESS_LANE(5); - GRAD_PROCESS_LANE(6); - GRAD_PROCESS_LANE(7); - vst1_u8(&row[i], out); - } - for (; i < length; ++i) { - row[i] = in[i] + GradientPredictor_C(row[i - 1], top[i], top[i - 1]); - } - } -} -#undef GRAD_PROCESS_LANE - -static void GradientUnfilter_NEON(const uint8_t* prev, const uint8_t* in, - uint8_t* out, int width) { - if (prev == NULL) { - HorizontalUnfilter_NEON(NULL, in, out, width); - } else { - out[0] = in[0] + prev[0]; // predict from above - GradientPredictInverse_NEON(in + 1, prev + 1, out + 1, width - 1); - } -} - -#endif // USE_GRADIENT_UNFILTER - -//------------------------------------------------------------------------------ -// Entry point - -extern void VP8FiltersInitNEON(void); - -WEBP_TSAN_IGNORE_FUNCTION void VP8FiltersInitNEON(void) { - WebPUnfilters[WEBP_FILTER_HORIZONTAL] = HorizontalUnfilter_NEON; - WebPUnfilters[WEBP_FILTER_VERTICAL] = VerticalUnfilter_NEON; -#if (USE_GRADIENT_UNFILTER == 1) - WebPUnfilters[WEBP_FILTER_GRADIENT] = GradientUnfilter_NEON; -#endif - - WebPFilters[WEBP_FILTER_HORIZONTAL] = HorizontalFilter_NEON; - WebPFilters[WEBP_FILTER_VERTICAL] = VerticalFilter_NEON; - WebPFilters[WEBP_FILTER_GRADIENT] = GradientFilter_NEON; -} - -#else // !WEBP_USE_NEON - -WEBP_DSP_INIT_STUB(VP8FiltersInitNEON) - -#endif // WEBP_USE_NEON diff --git a/Extended/libwebp/src/dsp/filters_sse2.c b/Extended/libwebp/src/dsp/filters_sse2.c deleted file mode 100644 index 4b3f2d0..0000000 --- a/Extended/libwebp/src/dsp/filters_sse2.c +++ /dev/null @@ -1,335 +0,0 @@ -// Copyright 2015 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// SSE2 variant of alpha filters -// -// Author: Skal (pascal.massimino@gmail.com) - -#include "src/dsp/dsp.h" - -#if defined(WEBP_USE_SSE2) - -#include -#include -#include -#include - -//------------------------------------------------------------------------------ -// Helpful macro. - -# define SANITY_CHECK(in, out) \ - assert((in) != NULL); \ - assert((out) != NULL); \ - assert(width > 0); \ - assert(height > 0); \ - assert(stride >= width); \ - assert(row >= 0 && num_rows > 0 && row + num_rows <= height); \ - (void)height; // Silence unused warning. - -static void PredictLineTop_SSE2(const uint8_t* src, const uint8_t* pred, - uint8_t* dst, int length) { - int i; - const int max_pos = length & ~31; - assert(length >= 0); - for (i = 0; i < max_pos; i += 32) { - const __m128i A0 = _mm_loadu_si128((const __m128i*)&src[i + 0]); - const __m128i A1 = _mm_loadu_si128((const __m128i*)&src[i + 16]); - const __m128i B0 = _mm_loadu_si128((const __m128i*)&pred[i + 0]); - const __m128i B1 = _mm_loadu_si128((const __m128i*)&pred[i + 16]); - const __m128i C0 = _mm_sub_epi8(A0, B0); - const __m128i C1 = _mm_sub_epi8(A1, B1); - _mm_storeu_si128((__m128i*)&dst[i + 0], C0); - _mm_storeu_si128((__m128i*)&dst[i + 16], C1); - } - for (; i < length; ++i) dst[i] = src[i] - pred[i]; -} - -// Special case for left-based prediction (when preds==dst-1 or preds==src-1). -static void PredictLineLeft_SSE2(const uint8_t* src, uint8_t* dst, int length) { - int i; - const int max_pos = length & ~31; - assert(length >= 0); - for (i = 0; i < max_pos; i += 32) { - const __m128i A0 = _mm_loadu_si128((const __m128i*)(src + i + 0 )); - const __m128i B0 = _mm_loadu_si128((const __m128i*)(src + i + 0 - 1)); - const __m128i A1 = _mm_loadu_si128((const __m128i*)(src + i + 16 )); - const __m128i B1 = _mm_loadu_si128((const __m128i*)(src + i + 16 - 1)); - const __m128i C0 = _mm_sub_epi8(A0, B0); - const __m128i C1 = _mm_sub_epi8(A1, B1); - _mm_storeu_si128((__m128i*)(dst + i + 0), C0); - _mm_storeu_si128((__m128i*)(dst + i + 16), C1); - } - for (; i < length; ++i) dst[i] = src[i] - src[i - 1]; -} - -//------------------------------------------------------------------------------ -// Horizontal filter. - -static WEBP_INLINE void DoHorizontalFilter_SSE2(const uint8_t* in, - int width, int height, - int stride, - int row, int num_rows, - uint8_t* out) { - const size_t start_offset = row * stride; - const int last_row = row + num_rows; - SANITY_CHECK(in, out); - in += start_offset; - out += start_offset; - - if (row == 0) { - // Leftmost pixel is the same as input for topmost scanline. - out[0] = in[0]; - PredictLineLeft_SSE2(in + 1, out + 1, width - 1); - row = 1; - in += stride; - out += stride; - } - - // Filter line-by-line. - while (row < last_row) { - // Leftmost pixel is predicted from above. - out[0] = in[0] - in[-stride]; - PredictLineLeft_SSE2(in + 1, out + 1, width - 1); - ++row; - in += stride; - out += stride; - } -} - -//------------------------------------------------------------------------------ -// Vertical filter. - -static WEBP_INLINE void DoVerticalFilter_SSE2(const uint8_t* in, - int width, int height, int stride, - int row, int num_rows, - uint8_t* out) { - const size_t start_offset = row * stride; - const int last_row = row + num_rows; - SANITY_CHECK(in, out); - in += start_offset; - out += start_offset; - - if (row == 0) { - // Very first top-left pixel is copied. - out[0] = in[0]; - // Rest of top scan-line is left-predicted. - PredictLineLeft_SSE2(in + 1, out + 1, width - 1); - row = 1; - in += stride; - out += stride; - } - - // Filter line-by-line. - while (row < last_row) { - PredictLineTop_SSE2(in, in - stride, out, width); - ++row; - in += stride; - out += stride; - } -} - -//------------------------------------------------------------------------------ -// Gradient filter. - -static WEBP_INLINE int GradientPredictor_SSE2(uint8_t a, uint8_t b, uint8_t c) { - const int g = a + b - c; - return ((g & ~0xff) == 0) ? g : (g < 0) ? 0 : 255; // clip to 8bit -} - -static void GradientPredictDirect_SSE2(const uint8_t* const row, - const uint8_t* const top, - uint8_t* const out, int length) { - const int max_pos = length & ~7; - int i; - const __m128i zero = _mm_setzero_si128(); - for (i = 0; i < max_pos; i += 8) { - const __m128i A0 = _mm_loadl_epi64((const __m128i*)&row[i - 1]); - const __m128i B0 = _mm_loadl_epi64((const __m128i*)&top[i]); - const __m128i C0 = _mm_loadl_epi64((const __m128i*)&top[i - 1]); - const __m128i D = _mm_loadl_epi64((const __m128i*)&row[i]); - const __m128i A1 = _mm_unpacklo_epi8(A0, zero); - const __m128i B1 = _mm_unpacklo_epi8(B0, zero); - const __m128i C1 = _mm_unpacklo_epi8(C0, zero); - const __m128i E = _mm_add_epi16(A1, B1); - const __m128i F = _mm_sub_epi16(E, C1); - const __m128i G = _mm_packus_epi16(F, zero); - const __m128i H = _mm_sub_epi8(D, G); - _mm_storel_epi64((__m128i*)(out + i), H); - } - for (; i < length; ++i) { - const int delta = GradientPredictor_SSE2(row[i - 1], top[i], top[i - 1]); - out[i] = (uint8_t)(row[i] - delta); - } -} - -static WEBP_INLINE void DoGradientFilter_SSE2(const uint8_t* in, - int width, int height, int stride, - int row, int num_rows, - uint8_t* out) { - const size_t start_offset = row * stride; - const int last_row = row + num_rows; - SANITY_CHECK(in, out); - in += start_offset; - out += start_offset; - - // left prediction for top scan-line - if (row == 0) { - out[0] = in[0]; - PredictLineLeft_SSE2(in + 1, out + 1, width - 1); - row = 1; - in += stride; - out += stride; - } - - // Filter line-by-line. - while (row < last_row) { - out[0] = (uint8_t)(in[0] - in[-stride]); - GradientPredictDirect_SSE2(in + 1, in + 1 - stride, out + 1, width - 1); - ++row; - in += stride; - out += stride; - } -} - -#undef SANITY_CHECK - -//------------------------------------------------------------------------------ - -static void HorizontalFilter_SSE2(const uint8_t* data, int width, int height, - int stride, uint8_t* filtered_data) { - DoHorizontalFilter_SSE2(data, width, height, stride, 0, height, - filtered_data); -} - -static void VerticalFilter_SSE2(const uint8_t* data, int width, int height, - int stride, uint8_t* filtered_data) { - DoVerticalFilter_SSE2(data, width, height, stride, 0, height, filtered_data); -} - -static void GradientFilter_SSE2(const uint8_t* data, int width, int height, - int stride, uint8_t* filtered_data) { - DoGradientFilter_SSE2(data, width, height, stride, 0, height, filtered_data); -} - -//------------------------------------------------------------------------------ -// Inverse transforms - -static void HorizontalUnfilter_SSE2(const uint8_t* prev, const uint8_t* in, - uint8_t* out, int width) { - int i; - __m128i last; - out[0] = (uint8_t)(in[0] + (prev == NULL ? 0 : prev[0])); - if (width <= 1) return; - last = _mm_set_epi32(0, 0, 0, out[0]); - for (i = 1; i + 8 <= width; i += 8) { - const __m128i A0 = _mm_loadl_epi64((const __m128i*)(in + i)); - const __m128i A1 = _mm_add_epi8(A0, last); - const __m128i A2 = _mm_slli_si128(A1, 1); - const __m128i A3 = _mm_add_epi8(A1, A2); - const __m128i A4 = _mm_slli_si128(A3, 2); - const __m128i A5 = _mm_add_epi8(A3, A4); - const __m128i A6 = _mm_slli_si128(A5, 4); - const __m128i A7 = _mm_add_epi8(A5, A6); - _mm_storel_epi64((__m128i*)(out + i), A7); - last = _mm_srli_epi64(A7, 56); - } - for (; i < width; ++i) out[i] = (uint8_t)(in[i] + out[i - 1]); -} - -static void VerticalUnfilter_SSE2(const uint8_t* prev, const uint8_t* in, - uint8_t* out, int width) { - if (prev == NULL) { - HorizontalUnfilter_SSE2(NULL, in, out, width); - } else { - int i; - const int max_pos = width & ~31; - assert(width >= 0); - for (i = 0; i < max_pos; i += 32) { - const __m128i A0 = _mm_loadu_si128((const __m128i*)&in[i + 0]); - const __m128i A1 = _mm_loadu_si128((const __m128i*)&in[i + 16]); - const __m128i B0 = _mm_loadu_si128((const __m128i*)&prev[i + 0]); - const __m128i B1 = _mm_loadu_si128((const __m128i*)&prev[i + 16]); - const __m128i C0 = _mm_add_epi8(A0, B0); - const __m128i C1 = _mm_add_epi8(A1, B1); - _mm_storeu_si128((__m128i*)&out[i + 0], C0); - _mm_storeu_si128((__m128i*)&out[i + 16], C1); - } - for (; i < width; ++i) out[i] = (uint8_t)(in[i] + prev[i]); - } -} - -static void GradientPredictInverse_SSE2(const uint8_t* const in, - const uint8_t* const top, - uint8_t* const row, int length) { - if (length > 0) { - int i; - const int max_pos = length & ~7; - const __m128i zero = _mm_setzero_si128(); - __m128i A = _mm_set_epi32(0, 0, 0, row[-1]); // left sample - for (i = 0; i < max_pos; i += 8) { - const __m128i tmp0 = _mm_loadl_epi64((const __m128i*)&top[i]); - const __m128i tmp1 = _mm_loadl_epi64((const __m128i*)&top[i - 1]); - const __m128i B = _mm_unpacklo_epi8(tmp0, zero); - const __m128i C = _mm_unpacklo_epi8(tmp1, zero); - const __m128i D = _mm_loadl_epi64((const __m128i*)&in[i]); // base input - const __m128i E = _mm_sub_epi16(B, C); // unclipped gradient basis B - C - __m128i out = zero; // accumulator for output - __m128i mask_hi = _mm_set_epi32(0, 0, 0, 0xff); - int k = 8; - while (1) { - const __m128i tmp3 = _mm_add_epi16(A, E); // delta = A + B - C - const __m128i tmp4 = _mm_packus_epi16(tmp3, zero); // saturate delta - const __m128i tmp5 = _mm_add_epi8(tmp4, D); // add to in[] - A = _mm_and_si128(tmp5, mask_hi); // 1-complement clip - out = _mm_or_si128(out, A); // accumulate output - if (--k == 0) break; - A = _mm_slli_si128(A, 1); // rotate left sample - mask_hi = _mm_slli_si128(mask_hi, 1); // rotate mask - A = _mm_unpacklo_epi8(A, zero); // convert 8b->16b - } - A = _mm_srli_si128(A, 7); // prepare left sample for next iteration - _mm_storel_epi64((__m128i*)&row[i], out); - } - for (; i < length; ++i) { - const int delta = GradientPredictor_SSE2(row[i - 1], top[i], top[i - 1]); - row[i] = (uint8_t)(in[i] + delta); - } - } -} - -static void GradientUnfilter_SSE2(const uint8_t* prev, const uint8_t* in, - uint8_t* out, int width) { - if (prev == NULL) { - HorizontalUnfilter_SSE2(NULL, in, out, width); - } else { - out[0] = (uint8_t)(in[0] + prev[0]); // predict from above - GradientPredictInverse_SSE2(in + 1, prev + 1, out + 1, width - 1); - } -} - -//------------------------------------------------------------------------------ -// Entry point - -extern void VP8FiltersInitSSE2(void); - -WEBP_TSAN_IGNORE_FUNCTION void VP8FiltersInitSSE2(void) { - WebPUnfilters[WEBP_FILTER_HORIZONTAL] = HorizontalUnfilter_SSE2; - WebPUnfilters[WEBP_FILTER_VERTICAL] = VerticalUnfilter_SSE2; - WebPUnfilters[WEBP_FILTER_GRADIENT] = GradientUnfilter_SSE2; - - WebPFilters[WEBP_FILTER_HORIZONTAL] = HorizontalFilter_SSE2; - WebPFilters[WEBP_FILTER_VERTICAL] = VerticalFilter_SSE2; - WebPFilters[WEBP_FILTER_GRADIENT] = GradientFilter_SSE2; -} - -#else // !WEBP_USE_SSE2 - -WEBP_DSP_INIT_STUB(VP8FiltersInitSSE2) - -#endif // WEBP_USE_SSE2 diff --git a/Extended/libwebp/src/dsp/lossless.c b/Extended/libwebp/src/dsp/lossless.c deleted file mode 100644 index aad5f43..0000000 --- a/Extended/libwebp/src/dsp/lossless.c +++ /dev/null @@ -1,662 +0,0 @@ -// Copyright 2012 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Image transforms and color space conversion methods for lossless decoder. -// -// Authors: Vikas Arora (vikaas.arora@gmail.com) -// Jyrki Alakuijala (jyrki@google.com) -// Urvang Joshi (urvang@google.com) - -#include "src/dsp/dsp.h" - -#include -#include -#include -#include "src/dec/vp8li_dec.h" -#include "src/utils/endian_inl_utils.h" -#include "src/dsp/lossless.h" -#include "src/dsp/lossless_common.h" - -//------------------------------------------------------------------------------ -// Image transforms. - -static WEBP_INLINE uint32_t Average2(uint32_t a0, uint32_t a1) { - return (((a0 ^ a1) & 0xfefefefeu) >> 1) + (a0 & a1); -} - -static WEBP_INLINE uint32_t Average3(uint32_t a0, uint32_t a1, uint32_t a2) { - return Average2(Average2(a0, a2), a1); -} - -static WEBP_INLINE uint32_t Average4(uint32_t a0, uint32_t a1, - uint32_t a2, uint32_t a3) { - return Average2(Average2(a0, a1), Average2(a2, a3)); -} - -static WEBP_INLINE uint32_t Clip255(uint32_t a) { - if (a < 256) { - return a; - } - // return 0, when a is a negative integer. - // return 255, when a is positive. - return ~a >> 24; -} - -static WEBP_INLINE int AddSubtractComponentFull(int a, int b, int c) { - return Clip255(a + b - c); -} - -static WEBP_INLINE uint32_t ClampedAddSubtractFull(uint32_t c0, uint32_t c1, - uint32_t c2) { - const int a = AddSubtractComponentFull(c0 >> 24, c1 >> 24, c2 >> 24); - const int r = AddSubtractComponentFull((c0 >> 16) & 0xff, - (c1 >> 16) & 0xff, - (c2 >> 16) & 0xff); - const int g = AddSubtractComponentFull((c0 >> 8) & 0xff, - (c1 >> 8) & 0xff, - (c2 >> 8) & 0xff); - const int b = AddSubtractComponentFull(c0 & 0xff, c1 & 0xff, c2 & 0xff); - return ((uint32_t)a << 24) | (r << 16) | (g << 8) | b; -} - -static WEBP_INLINE int AddSubtractComponentHalf(int a, int b) { - return Clip255(a + (a - b) / 2); -} - -static WEBP_INLINE uint32_t ClampedAddSubtractHalf(uint32_t c0, uint32_t c1, - uint32_t c2) { - const uint32_t ave = Average2(c0, c1); - const int a = AddSubtractComponentHalf(ave >> 24, c2 >> 24); - const int r = AddSubtractComponentHalf((ave >> 16) & 0xff, (c2 >> 16) & 0xff); - const int g = AddSubtractComponentHalf((ave >> 8) & 0xff, (c2 >> 8) & 0xff); - const int b = AddSubtractComponentHalf((ave >> 0) & 0xff, (c2 >> 0) & 0xff); - return ((uint32_t)a << 24) | (r << 16) | (g << 8) | b; -} - -// gcc <= 4.9 on ARM generates incorrect code in Select() when Sub3() is -// inlined. -#if defined(__arm__) && defined(__GNUC__) && LOCAL_GCC_VERSION <= 0x409 -# define LOCAL_INLINE __attribute__ ((noinline)) -#else -# define LOCAL_INLINE WEBP_INLINE -#endif - -static LOCAL_INLINE int Sub3(int a, int b, int c) { - const int pb = b - c; - const int pa = a - c; - return abs(pb) - abs(pa); -} - -#undef LOCAL_INLINE - -static WEBP_INLINE uint32_t Select(uint32_t a, uint32_t b, uint32_t c) { - const int pa_minus_pb = - Sub3((a >> 24) , (b >> 24) , (c >> 24) ) + - Sub3((a >> 16) & 0xff, (b >> 16) & 0xff, (c >> 16) & 0xff) + - Sub3((a >> 8) & 0xff, (b >> 8) & 0xff, (c >> 8) & 0xff) + - Sub3((a ) & 0xff, (b ) & 0xff, (c ) & 0xff); - return (pa_minus_pb <= 0) ? a : b; -} - -//------------------------------------------------------------------------------ -// Predictors - -static uint32_t Predictor0_C(uint32_t left, const uint32_t* const top) { - (void)top; - (void)left; - return ARGB_BLACK; -} -static uint32_t Predictor1_C(uint32_t left, const uint32_t* const top) { - (void)top; - return left; -} -static uint32_t Predictor2_C(uint32_t left, const uint32_t* const top) { - (void)left; - return top[0]; -} -static uint32_t Predictor3_C(uint32_t left, const uint32_t* const top) { - (void)left; - return top[1]; -} -static uint32_t Predictor4_C(uint32_t left, const uint32_t* const top) { - (void)left; - return top[-1]; -} -static uint32_t Predictor5_C(uint32_t left, const uint32_t* const top) { - const uint32_t pred = Average3(left, top[0], top[1]); - return pred; -} -static uint32_t Predictor6_C(uint32_t left, const uint32_t* const top) { - const uint32_t pred = Average2(left, top[-1]); - return pred; -} -static uint32_t Predictor7_C(uint32_t left, const uint32_t* const top) { - const uint32_t pred = Average2(left, top[0]); - return pred; -} -static uint32_t Predictor8_C(uint32_t left, const uint32_t* const top) { - const uint32_t pred = Average2(top[-1], top[0]); - (void)left; - return pred; -} -static uint32_t Predictor9_C(uint32_t left, const uint32_t* const top) { - const uint32_t pred = Average2(top[0], top[1]); - (void)left; - return pred; -} -static uint32_t Predictor10_C(uint32_t left, const uint32_t* const top) { - const uint32_t pred = Average4(left, top[-1], top[0], top[1]); - return pred; -} -static uint32_t Predictor11_C(uint32_t left, const uint32_t* const top) { - const uint32_t pred = Select(top[0], left, top[-1]); - return pred; -} -static uint32_t Predictor12_C(uint32_t left, const uint32_t* const top) { - const uint32_t pred = ClampedAddSubtractFull(left, top[0], top[-1]); - return pred; -} -static uint32_t Predictor13_C(uint32_t left, const uint32_t* const top) { - const uint32_t pred = ClampedAddSubtractHalf(left, top[0], top[-1]); - return pred; -} - -static void PredictorAdd0_C(const uint32_t* in, const uint32_t* upper, - int num_pixels, uint32_t* out) { - int x; - (void)upper; - for (x = 0; x < num_pixels; ++x) out[x] = VP8LAddPixels(in[x], ARGB_BLACK); -} -static void PredictorAdd1_C(const uint32_t* in, const uint32_t* upper, - int num_pixels, uint32_t* out) { - int i; - uint32_t left = out[-1]; - (void)upper; - for (i = 0; i < num_pixels; ++i) { - out[i] = left = VP8LAddPixels(in[i], left); - } -} -GENERATE_PREDICTOR_ADD(Predictor2_C, PredictorAdd2_C) -GENERATE_PREDICTOR_ADD(Predictor3_C, PredictorAdd3_C) -GENERATE_PREDICTOR_ADD(Predictor4_C, PredictorAdd4_C) -GENERATE_PREDICTOR_ADD(Predictor5_C, PredictorAdd5_C) -GENERATE_PREDICTOR_ADD(Predictor6_C, PredictorAdd6_C) -GENERATE_PREDICTOR_ADD(Predictor7_C, PredictorAdd7_C) -GENERATE_PREDICTOR_ADD(Predictor8_C, PredictorAdd8_C) -GENERATE_PREDICTOR_ADD(Predictor9_C, PredictorAdd9_C) -GENERATE_PREDICTOR_ADD(Predictor10_C, PredictorAdd10_C) -GENERATE_PREDICTOR_ADD(Predictor11_C, PredictorAdd11_C) -GENERATE_PREDICTOR_ADD(Predictor12_C, PredictorAdd12_C) -GENERATE_PREDICTOR_ADD(Predictor13_C, PredictorAdd13_C) - -//------------------------------------------------------------------------------ - -// Inverse prediction. -static void PredictorInverseTransform_C(const VP8LTransform* const transform, - int y_start, int y_end, - const uint32_t* in, uint32_t* out) { - const int width = transform->xsize_; - if (y_start == 0) { // First Row follows the L (mode=1) mode. - PredictorAdd0_C(in, NULL, 1, out); - PredictorAdd1_C(in + 1, NULL, width - 1, out + 1); - in += width; - out += width; - ++y_start; - } - - { - int y = y_start; - const int tile_width = 1 << transform->bits_; - const int mask = tile_width - 1; - const int tiles_per_row = VP8LSubSampleSize(width, transform->bits_); - const uint32_t* pred_mode_base = - transform->data_ + (y >> transform->bits_) * tiles_per_row; - - while (y < y_end) { - const uint32_t* pred_mode_src = pred_mode_base; - int x = 1; - // First pixel follows the T (mode=2) mode. - PredictorAdd2_C(in, out - width, 1, out); - // .. the rest: - while (x < width) { - const VP8LPredictorAddSubFunc pred_func = - VP8LPredictorsAdd[((*pred_mode_src++) >> 8) & 0xf]; - int x_end = (x & ~mask) + tile_width; - if (x_end > width) x_end = width; - pred_func(in + x, out + x - width, x_end - x, out + x); - x = x_end; - } - in += width; - out += width; - ++y; - if ((y & mask) == 0) { // Use the same mask, since tiles are squares. - pred_mode_base += tiles_per_row; - } - } - } -} - -// Add green to blue and red channels (i.e. perform the inverse transform of -// 'subtract green'). -void VP8LAddGreenToBlueAndRed_C(const uint32_t* src, int num_pixels, - uint32_t* dst) { - int i; - for (i = 0; i < num_pixels; ++i) { - const uint32_t argb = src[i]; - const uint32_t green = ((argb >> 8) & 0xff); - uint32_t red_blue = (argb & 0x00ff00ffu); - red_blue += (green << 16) | green; - red_blue &= 0x00ff00ffu; - dst[i] = (argb & 0xff00ff00u) | red_blue; - } -} - -static WEBP_INLINE int ColorTransformDelta(int8_t color_pred, - int8_t color) { - return ((int)color_pred * color) >> 5; -} - -static WEBP_INLINE void ColorCodeToMultipliers(uint32_t color_code, - VP8LMultipliers* const m) { - m->green_to_red_ = (color_code >> 0) & 0xff; - m->green_to_blue_ = (color_code >> 8) & 0xff; - m->red_to_blue_ = (color_code >> 16) & 0xff; -} - -void VP8LTransformColorInverse_C(const VP8LMultipliers* const m, - const uint32_t* src, int num_pixels, - uint32_t* dst) { - int i; - for (i = 0; i < num_pixels; ++i) { - const uint32_t argb = src[i]; - const int8_t green = (int8_t)(argb >> 8); - const uint32_t red = argb >> 16; - int new_red = red & 0xff; - int new_blue = argb & 0xff; - new_red += ColorTransformDelta(m->green_to_red_, green); - new_red &= 0xff; - new_blue += ColorTransformDelta(m->green_to_blue_, green); - new_blue += ColorTransformDelta(m->red_to_blue_, (int8_t)new_red); - new_blue &= 0xff; - dst[i] = (argb & 0xff00ff00u) | (new_red << 16) | (new_blue); - } -} - -// Color space inverse transform. -static void ColorSpaceInverseTransform_C(const VP8LTransform* const transform, - int y_start, int y_end, - const uint32_t* src, uint32_t* dst) { - const int width = transform->xsize_; - const int tile_width = 1 << transform->bits_; - const int mask = tile_width - 1; - const int safe_width = width & ~mask; - const int remaining_width = width - safe_width; - const int tiles_per_row = VP8LSubSampleSize(width, transform->bits_); - int y = y_start; - const uint32_t* pred_row = - transform->data_ + (y >> transform->bits_) * tiles_per_row; - - while (y < y_end) { - const uint32_t* pred = pred_row; - VP8LMultipliers m = { 0, 0, 0 }; - const uint32_t* const src_safe_end = src + safe_width; - const uint32_t* const src_end = src + width; - while (src < src_safe_end) { - ColorCodeToMultipliers(*pred++, &m); - VP8LTransformColorInverse(&m, src, tile_width, dst); - src += tile_width; - dst += tile_width; - } - if (src < src_end) { // Left-overs using C-version. - ColorCodeToMultipliers(*pred++, &m); - VP8LTransformColorInverse(&m, src, remaining_width, dst); - src += remaining_width; - dst += remaining_width; - } - ++y; - if ((y & mask) == 0) pred_row += tiles_per_row; - } -} - -// Separate out pixels packed together using pixel-bundling. -// We define two methods for ARGB data (uint32_t) and alpha-only data (uint8_t). -#define COLOR_INDEX_INVERSE(FUNC_NAME, F_NAME, STATIC_DECL, TYPE, BIT_SUFFIX, \ - GET_INDEX, GET_VALUE) \ -static void F_NAME(const TYPE* src, const uint32_t* const color_map, \ - TYPE* dst, int y_start, int y_end, int width) { \ - int y; \ - for (y = y_start; y < y_end; ++y) { \ - int x; \ - for (x = 0; x < width; ++x) { \ - *dst++ = GET_VALUE(color_map[GET_INDEX(*src++)]); \ - } \ - } \ -} \ -STATIC_DECL void FUNC_NAME(const VP8LTransform* const transform, \ - int y_start, int y_end, const TYPE* src, \ - TYPE* dst) { \ - int y; \ - const int bits_per_pixel = 8 >> transform->bits_; \ - const int width = transform->xsize_; \ - const uint32_t* const color_map = transform->data_; \ - if (bits_per_pixel < 8) { \ - const int pixels_per_byte = 1 << transform->bits_; \ - const int count_mask = pixels_per_byte - 1; \ - const uint32_t bit_mask = (1 << bits_per_pixel) - 1; \ - for (y = y_start; y < y_end; ++y) { \ - uint32_t packed_pixels = 0; \ - int x; \ - for (x = 0; x < width; ++x) { \ - /* We need to load fresh 'packed_pixels' once every */ \ - /* 'pixels_per_byte' increments of x. Fortunately, pixels_per_byte */ \ - /* is a power of 2, so can just use a mask for that, instead of */ \ - /* decrementing a counter. */ \ - if ((x & count_mask) == 0) packed_pixels = GET_INDEX(*src++); \ - *dst++ = GET_VALUE(color_map[packed_pixels & bit_mask]); \ - packed_pixels >>= bits_per_pixel; \ - } \ - } \ - } else { \ - VP8LMapColor##BIT_SUFFIX(src, color_map, dst, y_start, y_end, width); \ - } \ -} - -COLOR_INDEX_INVERSE(ColorIndexInverseTransform_C, MapARGB_C, static, - uint32_t, 32b, VP8GetARGBIndex, VP8GetARGBValue) -COLOR_INDEX_INVERSE(VP8LColorIndexInverseTransformAlpha, MapAlpha_C, , - uint8_t, 8b, VP8GetAlphaIndex, VP8GetAlphaValue) - -#undef COLOR_INDEX_INVERSE - -void VP8LInverseTransform(const VP8LTransform* const transform, - int row_start, int row_end, - const uint32_t* const in, uint32_t* const out) { - const int width = transform->xsize_; - assert(row_start < row_end); - assert(row_end <= transform->ysize_); - switch (transform->type_) { - case SUBTRACT_GREEN: - VP8LAddGreenToBlueAndRed(in, (row_end - row_start) * width, out); - break; - case PREDICTOR_TRANSFORM: - PredictorInverseTransform_C(transform, row_start, row_end, in, out); - if (row_end != transform->ysize_) { - // The last predicted row in this iteration will be the top-pred row - // for the first row in next iteration. - memcpy(out - width, out + (row_end - row_start - 1) * width, - width * sizeof(*out)); - } - break; - case CROSS_COLOR_TRANSFORM: - ColorSpaceInverseTransform_C(transform, row_start, row_end, in, out); - break; - case COLOR_INDEXING_TRANSFORM: - if (in == out && transform->bits_ > 0) { - // Move packed pixels to the end of unpacked region, so that unpacking - // can occur seamlessly. - // Also, note that this is the only transform that applies on - // the effective width of VP8LSubSampleSize(xsize_, bits_). All other - // transforms work on effective width of xsize_. - const int out_stride = (row_end - row_start) * width; - const int in_stride = (row_end - row_start) * - VP8LSubSampleSize(transform->xsize_, transform->bits_); - uint32_t* const src = out + out_stride - in_stride; - memmove(src, out, in_stride * sizeof(*src)); - ColorIndexInverseTransform_C(transform, row_start, row_end, src, out); - } else { - ColorIndexInverseTransform_C(transform, row_start, row_end, in, out); - } - break; - } -} - -//------------------------------------------------------------------------------ -// Color space conversion. - -static int is_big_endian(void) { - static const union { - uint16_t w; - uint8_t b[2]; - } tmp = { 1 }; - return (tmp.b[0] != 1); -} - -void VP8LConvertBGRAToRGB_C(const uint32_t* src, - int num_pixels, uint8_t* dst) { - const uint32_t* const src_end = src + num_pixels; - while (src < src_end) { - const uint32_t argb = *src++; - *dst++ = (argb >> 16) & 0xff; - *dst++ = (argb >> 8) & 0xff; - *dst++ = (argb >> 0) & 0xff; - } -} - -void VP8LConvertBGRAToRGBA_C(const uint32_t* src, - int num_pixels, uint8_t* dst) { - const uint32_t* const src_end = src + num_pixels; - while (src < src_end) { - const uint32_t argb = *src++; - *dst++ = (argb >> 16) & 0xff; - *dst++ = (argb >> 8) & 0xff; - *dst++ = (argb >> 0) & 0xff; - *dst++ = (argb >> 24) & 0xff; - } -} - -void VP8LConvertBGRAToRGBA4444_C(const uint32_t* src, - int num_pixels, uint8_t* dst) { - const uint32_t* const src_end = src + num_pixels; - while (src < src_end) { - const uint32_t argb = *src++; - const uint8_t rg = ((argb >> 16) & 0xf0) | ((argb >> 12) & 0xf); - const uint8_t ba = ((argb >> 0) & 0xf0) | ((argb >> 28) & 0xf); -#if (WEBP_SWAP_16BIT_CSP == 1) - *dst++ = ba; - *dst++ = rg; -#else - *dst++ = rg; - *dst++ = ba; -#endif - } -} - -void VP8LConvertBGRAToRGB565_C(const uint32_t* src, - int num_pixels, uint8_t* dst) { - const uint32_t* const src_end = src + num_pixels; - while (src < src_end) { - const uint32_t argb = *src++; - const uint8_t rg = ((argb >> 16) & 0xf8) | ((argb >> 13) & 0x7); - const uint8_t gb = ((argb >> 5) & 0xe0) | ((argb >> 3) & 0x1f); -#if (WEBP_SWAP_16BIT_CSP == 1) - *dst++ = gb; - *dst++ = rg; -#else - *dst++ = rg; - *dst++ = gb; -#endif - } -} - -void VP8LConvertBGRAToBGR_C(const uint32_t* src, - int num_pixels, uint8_t* dst) { - const uint32_t* const src_end = src + num_pixels; - while (src < src_end) { - const uint32_t argb = *src++; - *dst++ = (argb >> 0) & 0xff; - *dst++ = (argb >> 8) & 0xff; - *dst++ = (argb >> 16) & 0xff; - } -} - -static void CopyOrSwap(const uint32_t* src, int num_pixels, uint8_t* dst, - int swap_on_big_endian) { - if (is_big_endian() == swap_on_big_endian) { - const uint32_t* const src_end = src + num_pixels; - while (src < src_end) { - const uint32_t argb = *src++; - WebPUint32ToMem(dst, BSwap32(argb)); - dst += sizeof(argb); - } - } else { - memcpy(dst, src, num_pixels * sizeof(*src)); - } -} - -void VP8LConvertFromBGRA(const uint32_t* const in_data, int num_pixels, - WEBP_CSP_MODE out_colorspace, uint8_t* const rgba) { - switch (out_colorspace) { - case MODE_RGB: - VP8LConvertBGRAToRGB(in_data, num_pixels, rgba); - break; - case MODE_RGBA: - VP8LConvertBGRAToRGBA(in_data, num_pixels, rgba); - break; - case MODE_rgbA: - VP8LConvertBGRAToRGBA(in_data, num_pixels, rgba); - WebPApplyAlphaMultiply(rgba, 0, num_pixels, 1, 0); - break; - case MODE_BGR: - VP8LConvertBGRAToBGR(in_data, num_pixels, rgba); - break; - case MODE_BGRA: - CopyOrSwap(in_data, num_pixels, rgba, 1); - break; - case MODE_bgrA: - CopyOrSwap(in_data, num_pixels, rgba, 1); - WebPApplyAlphaMultiply(rgba, 0, num_pixels, 1, 0); - break; - case MODE_ARGB: - CopyOrSwap(in_data, num_pixels, rgba, 0); - break; - case MODE_Argb: - CopyOrSwap(in_data, num_pixels, rgba, 0); - WebPApplyAlphaMultiply(rgba, 1, num_pixels, 1, 0); - break; - case MODE_RGBA_4444: - VP8LConvertBGRAToRGBA4444(in_data, num_pixels, rgba); - break; - case MODE_rgbA_4444: - VP8LConvertBGRAToRGBA4444(in_data, num_pixels, rgba); - WebPApplyAlphaMultiply4444(rgba, num_pixels, 1, 0); - break; - case MODE_RGB_565: - VP8LConvertBGRAToRGB565(in_data, num_pixels, rgba); - break; - default: - assert(0); // Code flow should not reach here. - } -} - -//------------------------------------------------------------------------------ - -VP8LProcessDecBlueAndRedFunc VP8LAddGreenToBlueAndRed; -VP8LPredictorAddSubFunc VP8LPredictorsAdd[16]; -VP8LPredictorFunc VP8LPredictors[16]; - -// exposed plain-C implementations -VP8LPredictorAddSubFunc VP8LPredictorsAdd_C[16]; -VP8LPredictorFunc VP8LPredictors_C[16]; - -VP8LTransformColorInverseFunc VP8LTransformColorInverse; - -VP8LConvertFunc VP8LConvertBGRAToRGB; -VP8LConvertFunc VP8LConvertBGRAToRGBA; -VP8LConvertFunc VP8LConvertBGRAToRGBA4444; -VP8LConvertFunc VP8LConvertBGRAToRGB565; -VP8LConvertFunc VP8LConvertBGRAToBGR; - -VP8LMapARGBFunc VP8LMapColor32b; -VP8LMapAlphaFunc VP8LMapColor8b; - -extern void VP8LDspInitSSE2(void); -extern void VP8LDspInitNEON(void); -extern void VP8LDspInitMIPSdspR2(void); -extern void VP8LDspInitMSA(void); - -#define COPY_PREDICTOR_ARRAY(IN, OUT) do { \ - (OUT)[0] = IN##0_C; \ - (OUT)[1] = IN##1_C; \ - (OUT)[2] = IN##2_C; \ - (OUT)[3] = IN##3_C; \ - (OUT)[4] = IN##4_C; \ - (OUT)[5] = IN##5_C; \ - (OUT)[6] = IN##6_C; \ - (OUT)[7] = IN##7_C; \ - (OUT)[8] = IN##8_C; \ - (OUT)[9] = IN##9_C; \ - (OUT)[10] = IN##10_C; \ - (OUT)[11] = IN##11_C; \ - (OUT)[12] = IN##12_C; \ - (OUT)[13] = IN##13_C; \ - (OUT)[14] = IN##0_C; /* <- padding security sentinels*/ \ - (OUT)[15] = IN##0_C; \ -} while (0); - -WEBP_DSP_INIT_FUNC(VP8LDspInit) { - COPY_PREDICTOR_ARRAY(Predictor, VP8LPredictors) - COPY_PREDICTOR_ARRAY(Predictor, VP8LPredictors_C) - COPY_PREDICTOR_ARRAY(PredictorAdd, VP8LPredictorsAdd) - COPY_PREDICTOR_ARRAY(PredictorAdd, VP8LPredictorsAdd_C) - -#if !WEBP_NEON_OMIT_C_CODE - VP8LAddGreenToBlueAndRed = VP8LAddGreenToBlueAndRed_C; - - VP8LTransformColorInverse = VP8LTransformColorInverse_C; - - VP8LConvertBGRAToRGBA = VP8LConvertBGRAToRGBA_C; - VP8LConvertBGRAToRGB = VP8LConvertBGRAToRGB_C; - VP8LConvertBGRAToBGR = VP8LConvertBGRAToBGR_C; -#endif - - VP8LConvertBGRAToRGBA4444 = VP8LConvertBGRAToRGBA4444_C; - VP8LConvertBGRAToRGB565 = VP8LConvertBGRAToRGB565_C; - - VP8LMapColor32b = MapARGB_C; - VP8LMapColor8b = MapAlpha_C; - - // If defined, use CPUInfo() to overwrite some pointers with faster versions. - if (VP8GetCPUInfo != NULL) { -#if defined(WEBP_USE_SSE2) - if (VP8GetCPUInfo(kSSE2)) { - VP8LDspInitSSE2(); - } -#endif -#if defined(WEBP_USE_MIPS_DSP_R2) - if (VP8GetCPUInfo(kMIPSdspR2)) { - VP8LDspInitMIPSdspR2(); - } -#endif -#if defined(WEBP_USE_MSA) - if (VP8GetCPUInfo(kMSA)) { - VP8LDspInitMSA(); - } -#endif - } - -#if defined(WEBP_USE_NEON) - if (WEBP_NEON_OMIT_C_CODE || - (VP8GetCPUInfo != NULL && VP8GetCPUInfo(kNEON))) { - VP8LDspInitNEON(); - } -#endif - - assert(VP8LAddGreenToBlueAndRed != NULL); - assert(VP8LTransformColorInverse != NULL); - assert(VP8LConvertBGRAToRGBA != NULL); - assert(VP8LConvertBGRAToRGB != NULL); - assert(VP8LConvertBGRAToBGR != NULL); - assert(VP8LConvertBGRAToRGBA4444 != NULL); - assert(VP8LConvertBGRAToRGB565 != NULL); - assert(VP8LMapColor32b != NULL); - assert(VP8LMapColor8b != NULL); -} -#undef COPY_PREDICTOR_ARRAY - -//------------------------------------------------------------------------------ diff --git a/Extended/libwebp/src/dsp/lossless.h b/Extended/libwebp/src/dsp/lossless.h deleted file mode 100644 index f709cc8..0000000 --- a/Extended/libwebp/src/dsp/lossless.h +++ /dev/null @@ -1,229 +0,0 @@ -// Copyright 2012 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Image transforms and color space conversion methods for lossless decoder. -// -// Authors: Vikas Arora (vikaas.arora@gmail.com) -// Jyrki Alakuijala (jyrki@google.com) - -#ifndef WEBP_DSP_LOSSLESS_H_ -#define WEBP_DSP_LOSSLESS_H_ - -#include "src/webp/types.h" -#include "src/webp/decode.h" - -#include "src/enc/histogram_enc.h" -#include "src/utils/utils.h" - -#ifdef __cplusplus -extern "C" { -#endif - -//------------------------------------------------------------------------------ -// Decoding - -typedef uint32_t (*VP8LPredictorFunc)(uint32_t left, const uint32_t* const top); -extern VP8LPredictorFunc VP8LPredictors[16]; -extern VP8LPredictorFunc VP8LPredictors_C[16]; -// These Add/Sub function expects upper[-1] and out[-1] to be readable. -typedef void (*VP8LPredictorAddSubFunc)(const uint32_t* in, - const uint32_t* upper, int num_pixels, - uint32_t* out); -extern VP8LPredictorAddSubFunc VP8LPredictorsAdd[16]; -extern VP8LPredictorAddSubFunc VP8LPredictorsAdd_C[16]; - -typedef void (*VP8LProcessDecBlueAndRedFunc)(const uint32_t* src, - int num_pixels, uint32_t* dst); -extern VP8LProcessDecBlueAndRedFunc VP8LAddGreenToBlueAndRed; - -typedef struct { - // Note: the members are uint8_t, so that any negative values are - // automatically converted to "mod 256" values. - uint8_t green_to_red_; - uint8_t green_to_blue_; - uint8_t red_to_blue_; -} VP8LMultipliers; -typedef void (*VP8LTransformColorInverseFunc)(const VP8LMultipliers* const m, - const uint32_t* src, - int num_pixels, uint32_t* dst); -extern VP8LTransformColorInverseFunc VP8LTransformColorInverse; - -struct VP8LTransform; // Defined in dec/vp8li.h. - -// Performs inverse transform of data given transform information, start and end -// rows. Transform will be applied to rows [row_start, row_end[. -// The *in and *out pointers refer to source and destination data respectively -// corresponding to the intermediate row (row_start). -void VP8LInverseTransform(const struct VP8LTransform* const transform, - int row_start, int row_end, - const uint32_t* const in, uint32_t* const out); - -// Color space conversion. -typedef void (*VP8LConvertFunc)(const uint32_t* src, int num_pixels, - uint8_t* dst); -extern VP8LConvertFunc VP8LConvertBGRAToRGB; -extern VP8LConvertFunc VP8LConvertBGRAToRGBA; -extern VP8LConvertFunc VP8LConvertBGRAToRGBA4444; -extern VP8LConvertFunc VP8LConvertBGRAToRGB565; -extern VP8LConvertFunc VP8LConvertBGRAToBGR; - -// Converts from BGRA to other color spaces. -void VP8LConvertFromBGRA(const uint32_t* const in_data, int num_pixels, - WEBP_CSP_MODE out_colorspace, uint8_t* const rgba); - -typedef void (*VP8LMapARGBFunc)(const uint32_t* src, - const uint32_t* const color_map, - uint32_t* dst, int y_start, - int y_end, int width); -typedef void (*VP8LMapAlphaFunc)(const uint8_t* src, - const uint32_t* const color_map, - uint8_t* dst, int y_start, - int y_end, int width); - -extern VP8LMapARGBFunc VP8LMapColor32b; -extern VP8LMapAlphaFunc VP8LMapColor8b; - -// Similar to the static method ColorIndexInverseTransform() that is part of -// lossless.c, but used only for alpha decoding. It takes uint8_t (rather than -// uint32_t) arguments for 'src' and 'dst'. -void VP8LColorIndexInverseTransformAlpha( - const struct VP8LTransform* const transform, int y_start, int y_end, - const uint8_t* src, uint8_t* dst); - -// Expose some C-only fallback functions -void VP8LTransformColorInverse_C(const VP8LMultipliers* const m, - const uint32_t* src, int num_pixels, - uint32_t* dst); - -void VP8LConvertBGRAToRGB_C(const uint32_t* src, int num_pixels, uint8_t* dst); -void VP8LConvertBGRAToRGBA_C(const uint32_t* src, int num_pixels, uint8_t* dst); -void VP8LConvertBGRAToRGBA4444_C(const uint32_t* src, - int num_pixels, uint8_t* dst); -void VP8LConvertBGRAToRGB565_C(const uint32_t* src, - int num_pixels, uint8_t* dst); -void VP8LConvertBGRAToBGR_C(const uint32_t* src, int num_pixels, uint8_t* dst); -void VP8LAddGreenToBlueAndRed_C(const uint32_t* src, int num_pixels, - uint32_t* dst); - -// Must be called before calling any of the above methods. -void VP8LDspInit(void); - -//------------------------------------------------------------------------------ -// Encoding - -typedef void (*VP8LProcessEncBlueAndRedFunc)(uint32_t* dst, int num_pixels); -extern VP8LProcessEncBlueAndRedFunc VP8LSubtractGreenFromBlueAndRed; -typedef void (*VP8LTransformColorFunc)(const VP8LMultipliers* const m, - uint32_t* dst, int num_pixels); -extern VP8LTransformColorFunc VP8LTransformColor; -typedef void (*VP8LCollectColorBlueTransformsFunc)( - const uint32_t* argb, int stride, - int tile_width, int tile_height, - int green_to_blue, int red_to_blue, int histo[]); -extern VP8LCollectColorBlueTransformsFunc VP8LCollectColorBlueTransforms; - -typedef void (*VP8LCollectColorRedTransformsFunc)( - const uint32_t* argb, int stride, - int tile_width, int tile_height, - int green_to_red, int histo[]); -extern VP8LCollectColorRedTransformsFunc VP8LCollectColorRedTransforms; - -// Expose some C-only fallback functions -void VP8LTransformColor_C(const VP8LMultipliers* const m, - uint32_t* data, int num_pixels); -void VP8LSubtractGreenFromBlueAndRed_C(uint32_t* argb_data, int num_pixels); -void VP8LCollectColorRedTransforms_C(const uint32_t* argb, int stride, - int tile_width, int tile_height, - int green_to_red, int histo[]); -void VP8LCollectColorBlueTransforms_C(const uint32_t* argb, int stride, - int tile_width, int tile_height, - int green_to_blue, int red_to_blue, - int histo[]); - -extern VP8LPredictorAddSubFunc VP8LPredictorsSub[16]; -extern VP8LPredictorAddSubFunc VP8LPredictorsSub_C[16]; - -// ----------------------------------------------------------------------------- -// Huffman-cost related functions. - -typedef double (*VP8LCostFunc)(const uint32_t* population, int length); -typedef double (*VP8LCostCombinedFunc)(const uint32_t* X, const uint32_t* Y, - int length); -typedef float (*VP8LCombinedShannonEntropyFunc)(const int X[256], - const int Y[256]); - -extern VP8LCostFunc VP8LExtraCost; -extern VP8LCostCombinedFunc VP8LExtraCostCombined; -extern VP8LCombinedShannonEntropyFunc VP8LCombinedShannonEntropy; - -typedef struct { // small struct to hold counters - int counts[2]; // index: 0=zero streak, 1=non-zero streak - int streaks[2][2]; // [zero/non-zero][streak<3 / streak>=3] -} VP8LStreaks; - -typedef struct { // small struct to hold bit entropy results - double entropy; // entropy - uint32_t sum; // sum of the population - int nonzeros; // number of non-zero elements in the population - uint32_t max_val; // maximum value in the population - uint32_t nonzero_code; // index of the last non-zero in the population -} VP8LBitEntropy; - -void VP8LBitEntropyInit(VP8LBitEntropy* const entropy); - -// Get the combined symbol bit entropy and Huffman cost stats for the -// distributions 'X' and 'Y'. Those results can then be refined according to -// codec specific heuristics. -typedef void (*VP8LGetCombinedEntropyUnrefinedFunc)( - const uint32_t X[], const uint32_t Y[], int length, - VP8LBitEntropy* const bit_entropy, VP8LStreaks* const stats); -extern VP8LGetCombinedEntropyUnrefinedFunc VP8LGetCombinedEntropyUnrefined; - -// Get the entropy for the distribution 'X'. -typedef void (*VP8LGetEntropyUnrefinedFunc)(const uint32_t X[], int length, - VP8LBitEntropy* const bit_entropy, - VP8LStreaks* const stats); -extern VP8LGetEntropyUnrefinedFunc VP8LGetEntropyUnrefined; - -void VP8LBitsEntropyUnrefined(const uint32_t* const array, int n, - VP8LBitEntropy* const entropy); - -typedef void (*VP8LAddVectorFunc)(const uint32_t* a, const uint32_t* b, - uint32_t* out, int size); -extern VP8LAddVectorFunc VP8LAddVector; -typedef void (*VP8LAddVectorEqFunc)(const uint32_t* a, uint32_t* out, int size); -extern VP8LAddVectorEqFunc VP8LAddVectorEq; -void VP8LHistogramAdd(const VP8LHistogram* const a, - const VP8LHistogram* const b, - VP8LHistogram* const out); - -// ----------------------------------------------------------------------------- -// PrefixEncode() - -typedef int (*VP8LVectorMismatchFunc)(const uint32_t* const array1, - const uint32_t* const array2, int length); -// Returns the first index where array1 and array2 are different. -extern VP8LVectorMismatchFunc VP8LVectorMismatch; - -typedef void (*VP8LBundleColorMapFunc)(const uint8_t* const row, int width, - int xbits, uint32_t* dst); -extern VP8LBundleColorMapFunc VP8LBundleColorMap; -void VP8LBundleColorMap_C(const uint8_t* const row, int width, int xbits, - uint32_t* dst); - -// Must be called before calling any of the above methods. -void VP8LEncDspInit(void); - -//------------------------------------------------------------------------------ - -#ifdef __cplusplus -} // extern "C" -#endif - -#endif // WEBP_DSP_LOSSLESS_H_ diff --git a/Extended/libwebp/src/dsp/lossless_common.h b/Extended/libwebp/src/dsp/lossless_common.h deleted file mode 100644 index 9c2ebe6..0000000 --- a/Extended/libwebp/src/dsp/lossless_common.h +++ /dev/null @@ -1,204 +0,0 @@ -// Copyright 2012 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Image transforms and color space conversion methods for lossless decoder. -// -// Authors: Vikas Arora (vikaas.arora@gmail.com) -// Jyrki Alakuijala (jyrki@google.com) -// Vincent Rabaud (vrabaud@google.com) - -#ifndef WEBP_DSP_LOSSLESS_COMMON_H_ -#define WEBP_DSP_LOSSLESS_COMMON_H_ - -#include "src/webp/types.h" - -#include "src/utils/utils.h" - -#ifdef __cplusplus -extern "C" { -#endif - -//------------------------------------------------------------------------------ -// Decoding - -// color mapping related functions. -static WEBP_INLINE uint32_t VP8GetARGBIndex(uint32_t idx) { - return (idx >> 8) & 0xff; -} - -static WEBP_INLINE uint8_t VP8GetAlphaIndex(uint8_t idx) { - return idx; -} - -static WEBP_INLINE uint32_t VP8GetARGBValue(uint32_t val) { - return val; -} - -static WEBP_INLINE uint8_t VP8GetAlphaValue(uint32_t val) { - return (val >> 8) & 0xff; -} - -//------------------------------------------------------------------------------ -// Misc methods. - -// Computes sampled size of 'size' when sampling using 'sampling bits'. -static WEBP_INLINE uint32_t VP8LSubSampleSize(uint32_t size, - uint32_t sampling_bits) { - return (size + (1 << sampling_bits) - 1) >> sampling_bits; -} - -// Converts near lossless quality into max number of bits shaved off. -static WEBP_INLINE int VP8LNearLosslessBits(int near_lossless_quality) { - // 100 -> 0 - // 80..99 -> 1 - // 60..79 -> 2 - // 40..59 -> 3 - // 20..39 -> 4 - // 0..19 -> 5 - return 5 - near_lossless_quality / 20; -} - -// ----------------------------------------------------------------------------- -// Faster logarithm for integers. Small values use a look-up table. - -// The threshold till approximate version of log_2 can be used. -// Practically, we can get rid of the call to log() as the two values match to -// very high degree (the ratio of these two is 0.99999x). -// Keeping a high threshold for now. -#define APPROX_LOG_WITH_CORRECTION_MAX 65536 -#define APPROX_LOG_MAX 4096 -#define LOG_2_RECIPROCAL 1.44269504088896338700465094007086 -#define LOG_LOOKUP_IDX_MAX 256 -extern const float kLog2Table[LOG_LOOKUP_IDX_MAX]; -extern const float kSLog2Table[LOG_LOOKUP_IDX_MAX]; -typedef float (*VP8LFastLog2SlowFunc)(uint32_t v); - -extern VP8LFastLog2SlowFunc VP8LFastLog2Slow; -extern VP8LFastLog2SlowFunc VP8LFastSLog2Slow; - -static WEBP_INLINE float VP8LFastLog2(uint32_t v) { - return (v < LOG_LOOKUP_IDX_MAX) ? kLog2Table[v] : VP8LFastLog2Slow(v); -} -// Fast calculation of v * log2(v) for integer input. -static WEBP_INLINE float VP8LFastSLog2(uint32_t v) { - return (v < LOG_LOOKUP_IDX_MAX) ? kSLog2Table[v] : VP8LFastSLog2Slow(v); -} - -// ----------------------------------------------------------------------------- -// PrefixEncode() - -// Splitting of distance and length codes into prefixes and -// extra bits. The prefixes are encoded with an entropy code -// while the extra bits are stored just as normal bits. -static WEBP_INLINE void VP8LPrefixEncodeBitsNoLUT(int distance, int* const code, - int* const extra_bits) { - const int highest_bit = BitsLog2Floor(--distance); - const int second_highest_bit = (distance >> (highest_bit - 1)) & 1; - *extra_bits = highest_bit - 1; - *code = 2 * highest_bit + second_highest_bit; -} - -static WEBP_INLINE void VP8LPrefixEncodeNoLUT(int distance, int* const code, - int* const extra_bits, - int* const extra_bits_value) { - const int highest_bit = BitsLog2Floor(--distance); - const int second_highest_bit = (distance >> (highest_bit - 1)) & 1; - *extra_bits = highest_bit - 1; - *extra_bits_value = distance & ((1 << *extra_bits) - 1); - *code = 2 * highest_bit + second_highest_bit; -} - -#define PREFIX_LOOKUP_IDX_MAX 512 -typedef struct { - int8_t code_; - int8_t extra_bits_; -} VP8LPrefixCode; - -// These tables are derived using VP8LPrefixEncodeNoLUT. -extern const VP8LPrefixCode kPrefixEncodeCode[PREFIX_LOOKUP_IDX_MAX]; -extern const uint8_t kPrefixEncodeExtraBitsValue[PREFIX_LOOKUP_IDX_MAX]; -static WEBP_INLINE void VP8LPrefixEncodeBits(int distance, int* const code, - int* const extra_bits) { - if (distance < PREFIX_LOOKUP_IDX_MAX) { - const VP8LPrefixCode prefix_code = kPrefixEncodeCode[distance]; - *code = prefix_code.code_; - *extra_bits = prefix_code.extra_bits_; - } else { - VP8LPrefixEncodeBitsNoLUT(distance, code, extra_bits); - } -} - -static WEBP_INLINE void VP8LPrefixEncode(int distance, int* const code, - int* const extra_bits, - int* const extra_bits_value) { - if (distance < PREFIX_LOOKUP_IDX_MAX) { - const VP8LPrefixCode prefix_code = kPrefixEncodeCode[distance]; - *code = prefix_code.code_; - *extra_bits = prefix_code.extra_bits_; - *extra_bits_value = kPrefixEncodeExtraBitsValue[distance]; - } else { - VP8LPrefixEncodeNoLUT(distance, code, extra_bits, extra_bits_value); - } -} - -// Sum of each component, mod 256. -static WEBP_UBSAN_IGNORE_UNSIGNED_OVERFLOW WEBP_INLINE -uint32_t VP8LAddPixels(uint32_t a, uint32_t b) { - const uint32_t alpha_and_green = (a & 0xff00ff00u) + (b & 0xff00ff00u); - const uint32_t red_and_blue = (a & 0x00ff00ffu) + (b & 0x00ff00ffu); - return (alpha_and_green & 0xff00ff00u) | (red_and_blue & 0x00ff00ffu); -} - -// Difference of each component, mod 256. -static WEBP_UBSAN_IGNORE_UNSIGNED_OVERFLOW WEBP_INLINE -uint32_t VP8LSubPixels(uint32_t a, uint32_t b) { - const uint32_t alpha_and_green = - 0x00ff00ffu + (a & 0xff00ff00u) - (b & 0xff00ff00u); - const uint32_t red_and_blue = - 0xff00ff00u + (a & 0x00ff00ffu) - (b & 0x00ff00ffu); - return (alpha_and_green & 0xff00ff00u) | (red_and_blue & 0x00ff00ffu); -} - -//------------------------------------------------------------------------------ -// Transform-related functions use din both encoding and decoding. - -// Macros used to create a batch predictor that iteratively uses a -// one-pixel predictor. - -// The predictor is added to the output pixel (which -// is therefore considered as a residual) to get the final prediction. -#define GENERATE_PREDICTOR_ADD(PREDICTOR, PREDICTOR_ADD) \ -static void PREDICTOR_ADD(const uint32_t* in, const uint32_t* upper, \ - int num_pixels, uint32_t* out) { \ - int x; \ - assert(upper != NULL); \ - for (x = 0; x < num_pixels; ++x) { \ - const uint32_t pred = (PREDICTOR)(out[x - 1], upper + x); \ - out[x] = VP8LAddPixels(in[x], pred); \ - } \ -} - -// It subtracts the prediction from the input pixel and stores the residual -// in the output pixel. -#define GENERATE_PREDICTOR_SUB(PREDICTOR, PREDICTOR_SUB) \ -static void PREDICTOR_SUB(const uint32_t* in, const uint32_t* upper, \ - int num_pixels, uint32_t* out) { \ - int x; \ - assert(upper != NULL); \ - for (x = 0; x < num_pixels; ++x) { \ - const uint32_t pred = (PREDICTOR)(in[x - 1], upper + x); \ - out[x] = VP8LSubPixels(in[x], pred); \ - } \ -} - -#ifdef __cplusplus -} // extern "C" -#endif - -#endif // WEBP_DSP_LOSSLESS_COMMON_H_ diff --git a/Extended/libwebp/src/dsp/lossless_enc.c b/Extended/libwebp/src/dsp/lossless_enc.c deleted file mode 100644 index 9c36055..0000000 --- a/Extended/libwebp/src/dsp/lossless_enc.c +++ /dev/null @@ -1,1048 +0,0 @@ -// Copyright 2015 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Image transform methods for lossless encoder. -// -// Authors: Vikas Arora (vikaas.arora@gmail.com) -// Jyrki Alakuijala (jyrki@google.com) -// Urvang Joshi (urvang@google.com) - -#include "src/dsp/dsp.h" - -#include -#include -#include -#include "src/dec/vp8li_dec.h" -#include "src/utils/endian_inl_utils.h" -#include "src/dsp/lossless.h" -#include "src/dsp/lossless_common.h" -#include "src/dsp/yuv.h" - -// lookup table for small values of log2(int) -const float kLog2Table[LOG_LOOKUP_IDX_MAX] = { - 0.0000000000000000f, 0.0000000000000000f, - 1.0000000000000000f, 1.5849625007211560f, - 2.0000000000000000f, 2.3219280948873621f, - 2.5849625007211560f, 2.8073549220576041f, - 3.0000000000000000f, 3.1699250014423121f, - 3.3219280948873621f, 3.4594316186372973f, - 3.5849625007211560f, 3.7004397181410921f, - 3.8073549220576041f, 3.9068905956085187f, - 4.0000000000000000f, 4.0874628412503390f, - 4.1699250014423121f, 4.2479275134435852f, - 4.3219280948873626f, 4.3923174227787606f, - 4.4594316186372973f, 4.5235619560570130f, - 4.5849625007211560f, 4.6438561897747243f, - 4.7004397181410917f, 4.7548875021634682f, - 4.8073549220576037f, 4.8579809951275718f, - 4.9068905956085187f, 4.9541963103868749f, - 5.0000000000000000f, 5.0443941193584533f, - 5.0874628412503390f, 5.1292830169449663f, - 5.1699250014423121f, 5.2094533656289501f, - 5.2479275134435852f, 5.2854022188622487f, - 5.3219280948873626f, 5.3575520046180837f, - 5.3923174227787606f, 5.4262647547020979f, - 5.4594316186372973f, 5.4918530963296747f, - 5.5235619560570130f, 5.5545888516776376f, - 5.5849625007211560f, 5.6147098441152083f, - 5.6438561897747243f, 5.6724253419714951f, - 5.7004397181410917f, 5.7279204545631987f, - 5.7548875021634682f, 5.7813597135246599f, - 5.8073549220576037f, 5.8328900141647412f, - 5.8579809951275718f, 5.8826430493618415f, - 5.9068905956085187f, 5.9307373375628866f, - 5.9541963103868749f, 5.9772799234999167f, - 6.0000000000000000f, 6.0223678130284543f, - 6.0443941193584533f, 6.0660891904577720f, - 6.0874628412503390f, 6.1085244567781691f, - 6.1292830169449663f, 6.1497471195046822f, - 6.1699250014423121f, 6.1898245588800175f, - 6.2094533656289501f, 6.2288186904958804f, - 6.2479275134435852f, 6.2667865406949010f, - 6.2854022188622487f, 6.3037807481771030f, - 6.3219280948873626f, 6.3398500028846243f, - 6.3575520046180837f, 6.3750394313469245f, - 6.3923174227787606f, 6.4093909361377017f, - 6.4262647547020979f, 6.4429434958487279f, - 6.4594316186372973f, 6.4757334309663976f, - 6.4918530963296747f, 6.5077946401986963f, - 6.5235619560570130f, 6.5391588111080309f, - 6.5545888516776376f, 6.5698556083309478f, - 6.5849625007211560f, 6.5999128421871278f, - 6.6147098441152083f, 6.6293566200796094f, - 6.6438561897747243f, 6.6582114827517946f, - 6.6724253419714951f, 6.6865005271832185f, - 6.7004397181410917f, 6.7142455176661224f, - 6.7279204545631987f, 6.7414669864011464f, - 6.7548875021634682f, 6.7681843247769259f, - 6.7813597135246599f, 6.7944158663501061f, - 6.8073549220576037f, 6.8201789624151878f, - 6.8328900141647412f, 6.8454900509443747f, - 6.8579809951275718f, 6.8703647195834047f, - 6.8826430493618415f, 6.8948177633079437f, - 6.9068905956085187f, 6.9188632372745946f, - 6.9307373375628866f, 6.9425145053392398f, - 6.9541963103868749f, 6.9657842846620869f, - 6.9772799234999167f, 6.9886846867721654f, - 7.0000000000000000f, 7.0112272554232539f, - 7.0223678130284543f, 7.0334230015374501f, - 7.0443941193584533f, 7.0552824355011898f, - 7.0660891904577720f, 7.0768155970508308f, - 7.0874628412503390f, 7.0980320829605263f, - 7.1085244567781691f, 7.1189410727235076f, - 7.1292830169449663f, 7.1395513523987936f, - 7.1497471195046822f, 7.1598713367783890f, - 7.1699250014423121f, 7.1799090900149344f, - 7.1898245588800175f, 7.1996723448363644f, - 7.2094533656289501f, 7.2191685204621611f, - 7.2288186904958804f, 7.2384047393250785f, - 7.2479275134435852f, 7.2573878426926521f, - 7.2667865406949010f, 7.2761244052742375f, - 7.2854022188622487f, 7.2946207488916270f, - 7.3037807481771030f, 7.3128829552843557f, - 7.3219280948873626f, 7.3309168781146167f, - 7.3398500028846243f, 7.3487281542310771f, - 7.3575520046180837f, 7.3663222142458160f, - 7.3750394313469245f, 7.3837042924740519f, - 7.3923174227787606f, 7.4008794362821843f, - 7.4093909361377017f, 7.4178525148858982f, - 7.4262647547020979f, 7.4346282276367245f, - 7.4429434958487279f, 7.4512111118323289f, - 7.4594316186372973f, 7.4676055500829976f, - 7.4757334309663976f, 7.4838157772642563f, - 7.4918530963296747f, 7.4998458870832056f, - 7.5077946401986963f, 7.5156998382840427f, - 7.5235619560570130f, 7.5313814605163118f, - 7.5391588111080309f, 7.5468944598876364f, - 7.5545888516776376f, 7.5622424242210728f, - 7.5698556083309478f, 7.5774288280357486f, - 7.5849625007211560f, 7.5924570372680806f, - 7.5999128421871278f, 7.6073303137496104f, - 7.6147098441152083f, 7.6220518194563764f, - 7.6293566200796094f, 7.6366246205436487f, - 7.6438561897747243f, 7.6510516911789281f, - 7.6582114827517946f, 7.6653359171851764f, - 7.6724253419714951f, 7.6794800995054464f, - 7.6865005271832185f, 7.6934869574993252f, - 7.7004397181410917f, 7.7073591320808825f, - 7.7142455176661224f, 7.7210991887071855f, - 7.7279204545631987f, 7.7347096202258383f, - 7.7414669864011464f, 7.7481928495894605f, - 7.7548875021634682f, 7.7615512324444795f, - 7.7681843247769259f, 7.7747870596011736f, - 7.7813597135246599f, 7.7879025593914317f, - 7.7944158663501061f, 7.8008998999203047f, - 7.8073549220576037f, 7.8137811912170374f, - 7.8201789624151878f, 7.8265484872909150f, - 7.8328900141647412f, 7.8392037880969436f, - 7.8454900509443747f, 7.8517490414160571f, - 7.8579809951275718f, 7.8641861446542797f, - 7.8703647195834047f, 7.8765169465649993f, - 7.8826430493618415f, 7.8887432488982591f, - 7.8948177633079437f, 7.9008668079807486f, - 7.9068905956085187f, 7.9128893362299619f, - 7.9188632372745946f, 7.9248125036057812f, - 7.9307373375628866f, 7.9366379390025709f, - 7.9425145053392398f, 7.9483672315846778f, - 7.9541963103868749f, 7.9600019320680805f, - 7.9657842846620869f, 7.9715435539507719f, - 7.9772799234999167f, 7.9829935746943103f, - 7.9886846867721654f, 7.9943534368588577f -}; - -const float kSLog2Table[LOG_LOOKUP_IDX_MAX] = { - 0.00000000f, 0.00000000f, 2.00000000f, 4.75488750f, - 8.00000000f, 11.60964047f, 15.50977500f, 19.65148445f, - 24.00000000f, 28.52932501f, 33.21928095f, 38.05374781f, - 43.01955001f, 48.10571634f, 53.30296891f, 58.60335893f, - 64.00000000f, 69.48686830f, 75.05865003f, 80.71062276f, - 86.43856190f, 92.23866588f, 98.10749561f, 104.04192499f, - 110.03910002f, 116.09640474f, 122.21143267f, 128.38196256f, - 134.60593782f, 140.88144886f, 147.20671787f, 153.58008562f, - 160.00000000f, 166.46500594f, 172.97373660f, 179.52490559f, - 186.11730005f, 192.74977453f, 199.42124551f, 206.13068654f, - 212.87712380f, 219.65963219f, 226.47733176f, 233.32938445f, - 240.21499122f, 247.13338933f, 254.08384998f, 261.06567603f, - 268.07820003f, 275.12078236f, 282.19280949f, 289.29369244f, - 296.42286534f, 303.57978409f, 310.76392512f, 317.97478424f, - 325.21187564f, 332.47473081f, 339.76289772f, 347.07593991f, - 354.41343574f, 361.77497759f, 369.16017124f, 376.56863518f, - 384.00000000f, 391.45390785f, 398.93001188f, 406.42797576f, - 413.94747321f, 421.48818752f, 429.04981119f, 436.63204548f, - 444.23460010f, 451.85719280f, 459.49954906f, 467.16140179f, - 474.84249102f, 482.54256363f, 490.26137307f, 497.99867911f, - 505.75424759f, 513.52785023f, 521.31926438f, 529.12827280f, - 536.95466351f, 544.79822957f, 552.65876890f, 560.53608414f, - 568.42998244f, 576.34027536f, 584.26677867f, 592.20931226f, - 600.16769996f, 608.14176943f, 616.13135206f, 624.13628279f, - 632.15640007f, 640.19154569f, 648.24156472f, 656.30630539f, - 664.38561898f, 672.47935976f, 680.58738488f, 688.70955430f, - 696.84573069f, 704.99577935f, 713.15956818f, 721.33696754f, - 729.52785023f, 737.73209140f, 745.94956849f, 754.18016116f, - 762.42375127f, 770.68022275f, 778.94946161f, 787.23135586f, - 795.52579543f, 803.83267219f, 812.15187982f, 820.48331383f, - 828.82687147f, 837.18245171f, 845.54995518f, 853.92928416f, - 862.32034249f, 870.72303558f, 879.13727036f, 887.56295522f, - 896.00000000f, 904.44831595f, 912.90781569f, 921.37841320f, - 929.86002376f, 938.35256392f, 946.85595152f, 955.37010560f, - 963.89494641f, 972.43039537f, 980.97637504f, 989.53280911f, - 998.09962237f, 1006.67674069f, 1015.26409097f, 1023.86160116f, - 1032.46920021f, 1041.08681805f, 1049.71438560f, 1058.35183469f, - 1066.99909811f, 1075.65610955f, 1084.32280357f, 1092.99911564f, - 1101.68498204f, 1110.38033993f, 1119.08512727f, 1127.79928282f, - 1136.52274614f, 1145.25545758f, 1153.99735821f, 1162.74838989f, - 1171.50849518f, 1180.27761738f, 1189.05570047f, 1197.84268914f, - 1206.63852876f, 1215.44316535f, 1224.25654560f, 1233.07861684f, - 1241.90932703f, 1250.74862473f, 1259.59645914f, 1268.45278005f, - 1277.31753781f, 1286.19068338f, 1295.07216828f, 1303.96194457f, - 1312.85996488f, 1321.76618236f, 1330.68055071f, 1339.60302413f, - 1348.53355734f, 1357.47210556f, 1366.41862452f, 1375.37307041f, - 1384.33539991f, 1393.30557020f, 1402.28353887f, 1411.26926400f, - 1420.26270412f, 1429.26381818f, 1438.27256558f, 1447.28890615f, - 1456.31280014f, 1465.34420819f, 1474.38309138f, 1483.42941118f, - 1492.48312945f, 1501.54420843f, 1510.61261078f, 1519.68829949f, - 1528.77123795f, 1537.86138993f, 1546.95871952f, 1556.06319119f, - 1565.17476976f, 1574.29342040f, 1583.41910860f, 1592.55180020f, - 1601.69146137f, 1610.83805860f, 1619.99155871f, 1629.15192882f, - 1638.31913637f, 1647.49314911f, 1656.67393509f, 1665.86146266f, - 1675.05570047f, 1684.25661744f, 1693.46418280f, 1702.67836605f, - 1711.89913698f, 1721.12646563f, 1730.36032233f, 1739.60067768f, - 1748.84750254f, 1758.10076802f, 1767.36044551f, 1776.62650662f, - 1785.89892323f, 1795.17766747f, 1804.46271172f, 1813.75402857f, - 1823.05159087f, 1832.35537170f, 1841.66534438f, 1850.98148244f, - 1860.30375965f, 1869.63214999f, 1878.96662767f, 1888.30716711f, - 1897.65374295f, 1907.00633003f, 1916.36490342f, 1925.72943838f, - 1935.09991037f, 1944.47629506f, 1953.85856831f, 1963.24670620f, - 1972.64068498f, 1982.04048108f, 1991.44607117f, 2000.85743204f, - 2010.27454072f, 2019.69737440f, 2029.12591044f, 2038.56012640f -}; - -const VP8LPrefixCode kPrefixEncodeCode[PREFIX_LOOKUP_IDX_MAX] = { - { 0, 0}, { 0, 0}, { 1, 0}, { 2, 0}, { 3, 0}, { 4, 1}, { 4, 1}, { 5, 1}, - { 5, 1}, { 6, 2}, { 6, 2}, { 6, 2}, { 6, 2}, { 7, 2}, { 7, 2}, { 7, 2}, - { 7, 2}, { 8, 3}, { 8, 3}, { 8, 3}, { 8, 3}, { 8, 3}, { 8, 3}, { 8, 3}, - { 8, 3}, { 9, 3}, { 9, 3}, { 9, 3}, { 9, 3}, { 9, 3}, { 9, 3}, { 9, 3}, - { 9, 3}, {10, 4}, {10, 4}, {10, 4}, {10, 4}, {10, 4}, {10, 4}, {10, 4}, - {10, 4}, {10, 4}, {10, 4}, {10, 4}, {10, 4}, {10, 4}, {10, 4}, {10, 4}, - {10, 4}, {11, 4}, {11, 4}, {11, 4}, {11, 4}, {11, 4}, {11, 4}, {11, 4}, - {11, 4}, {11, 4}, {11, 4}, {11, 4}, {11, 4}, {11, 4}, {11, 4}, {11, 4}, - {11, 4}, {12, 5}, {12, 5}, {12, 5}, {12, 5}, {12, 5}, {12, 5}, {12, 5}, - {12, 5}, {12, 5}, {12, 5}, {12, 5}, {12, 5}, {12, 5}, {12, 5}, {12, 5}, - {12, 5}, {12, 5}, {12, 5}, {12, 5}, {12, 5}, {12, 5}, {12, 5}, {12, 5}, - {12, 5}, {12, 5}, {12, 5}, {12, 5}, {12, 5}, {12, 5}, {12, 5}, {12, 5}, - {12, 5}, {13, 5}, {13, 5}, {13, 5}, {13, 5}, {13, 5}, {13, 5}, {13, 5}, - {13, 5}, {13, 5}, {13, 5}, {13, 5}, {13, 5}, {13, 5}, {13, 5}, {13, 5}, - {13, 5}, {13, 5}, {13, 5}, {13, 5}, {13, 5}, {13, 5}, {13, 5}, {13, 5}, - {13, 5}, {13, 5}, {13, 5}, {13, 5}, {13, 5}, {13, 5}, {13, 5}, {13, 5}, - {13, 5}, {14, 6}, {14, 6}, {14, 6}, {14, 6}, {14, 6}, {14, 6}, {14, 6}, - {14, 6}, {14, 6}, {14, 6}, {14, 6}, {14, 6}, {14, 6}, {14, 6}, {14, 6}, - {14, 6}, {14, 6}, {14, 6}, {14, 6}, {14, 6}, {14, 6}, {14, 6}, {14, 6}, - {14, 6}, {14, 6}, {14, 6}, {14, 6}, {14, 6}, {14, 6}, {14, 6}, {14, 6}, - {14, 6}, {14, 6}, {14, 6}, {14, 6}, {14, 6}, {14, 6}, {14, 6}, {14, 6}, - {14, 6}, {14, 6}, {14, 6}, {14, 6}, {14, 6}, {14, 6}, {14, 6}, {14, 6}, - {14, 6}, {14, 6}, {14, 6}, {14, 6}, {14, 6}, {14, 6}, {14, 6}, {14, 6}, - {14, 6}, {14, 6}, {14, 6}, {14, 6}, {14, 6}, {14, 6}, {14, 6}, {14, 6}, - {14, 6}, {15, 6}, {15, 6}, {15, 6}, {15, 6}, {15, 6}, {15, 6}, {15, 6}, - {15, 6}, {15, 6}, {15, 6}, {15, 6}, {15, 6}, {15, 6}, {15, 6}, {15, 6}, - {15, 6}, {15, 6}, {15, 6}, {15, 6}, {15, 6}, {15, 6}, {15, 6}, {15, 6}, - {15, 6}, {15, 6}, {15, 6}, {15, 6}, {15, 6}, {15, 6}, {15, 6}, {15, 6}, - {15, 6}, {15, 6}, {15, 6}, {15, 6}, {15, 6}, {15, 6}, {15, 6}, {15, 6}, - {15, 6}, {15, 6}, {15, 6}, {15, 6}, {15, 6}, {15, 6}, {15, 6}, {15, 6}, - {15, 6}, {15, 6}, {15, 6}, {15, 6}, {15, 6}, {15, 6}, {15, 6}, {15, 6}, - {15, 6}, {15, 6}, {15, 6}, {15, 6}, {15, 6}, {15, 6}, {15, 6}, {15, 6}, - {15, 6}, {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7}, - {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7}, - {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7}, - {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7}, - {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7}, - {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7}, - {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7}, - {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7}, - {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7}, - {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7}, - {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7}, - {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7}, - {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7}, - {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7}, - {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7}, - {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7}, - {16, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7}, - {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7}, - {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7}, - {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7}, - {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7}, - {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7}, - {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7}, - {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7}, - {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7}, - {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7}, - {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7}, - {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7}, - {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7}, - {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7}, - {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7}, - {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7}, -}; - -const uint8_t kPrefixEncodeExtraBitsValue[PREFIX_LOOKUP_IDX_MAX] = { - 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 2, 3, 0, 1, 2, 3, - 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, - 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, - 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, - 127, - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, - 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, - 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126 -}; - -static float FastSLog2Slow_C(uint32_t v) { - assert(v >= LOG_LOOKUP_IDX_MAX); - if (v < APPROX_LOG_WITH_CORRECTION_MAX) { - int log_cnt = 0; - uint32_t y = 1; - int correction = 0; - const float v_f = (float)v; - const uint32_t orig_v = v; - do { - ++log_cnt; - v = v >> 1; - y = y << 1; - } while (v >= LOG_LOOKUP_IDX_MAX); - // vf = (2^log_cnt) * Xf; where y = 2^log_cnt and Xf < 256 - // Xf = floor(Xf) * (1 + (v % y) / v) - // log2(Xf) = log2(floor(Xf)) + log2(1 + (v % y) / v) - // The correction factor: log(1 + d) ~ d; for very small d values, so - // log2(1 + (v % y) / v) ~ LOG_2_RECIPROCAL * (v % y)/v - // LOG_2_RECIPROCAL ~ 23/16 - correction = (23 * (orig_v & (y - 1))) >> 4; - return v_f * (kLog2Table[v] + log_cnt) + correction; - } else { - return (float)(LOG_2_RECIPROCAL * v * log((double)v)); - } -} - -static float FastLog2Slow_C(uint32_t v) { - assert(v >= LOG_LOOKUP_IDX_MAX); - if (v < APPROX_LOG_WITH_CORRECTION_MAX) { - int log_cnt = 0; - uint32_t y = 1; - const uint32_t orig_v = v; - double log_2; - do { - ++log_cnt; - v = v >> 1; - y = y << 1; - } while (v >= LOG_LOOKUP_IDX_MAX); - log_2 = kLog2Table[v] + log_cnt; - if (orig_v >= APPROX_LOG_MAX) { - // Since the division is still expensive, add this correction factor only - // for large values of 'v'. - const int correction = (23 * (orig_v & (y - 1))) >> 4; - log_2 += (double)correction / orig_v; - } - return (float)log_2; - } else { - return (float)(LOG_2_RECIPROCAL * log((double)v)); - } -} - -//------------------------------------------------------------------------------ -// Methods to calculate Entropy (Shannon). - -// Compute the combined Shanon's entropy for distribution {X} and {X+Y} -static float CombinedShannonEntropy_C(const int X[256], const int Y[256]) { - int i; - double retval = 0.; - int sumX = 0, sumXY = 0; - for (i = 0; i < 256; ++i) { - const int x = X[i]; - if (x != 0) { - const int xy = x + Y[i]; - sumX += x; - retval -= VP8LFastSLog2(x); - sumXY += xy; - retval -= VP8LFastSLog2(xy); - } else if (Y[i] != 0) { - sumXY += Y[i]; - retval -= VP8LFastSLog2(Y[i]); - } - } - retval += VP8LFastSLog2(sumX) + VP8LFastSLog2(sumXY); - return (float)retval; -} - -void VP8LBitEntropyInit(VP8LBitEntropy* const entropy) { - entropy->entropy = 0.; - entropy->sum = 0; - entropy->nonzeros = 0; - entropy->max_val = 0; - entropy->nonzero_code = VP8L_NON_TRIVIAL_SYM; -} - -void VP8LBitsEntropyUnrefined(const uint32_t* const array, int n, - VP8LBitEntropy* const entropy) { - int i; - - VP8LBitEntropyInit(entropy); - - for (i = 0; i < n; ++i) { - if (array[i] != 0) { - entropy->sum += array[i]; - entropy->nonzero_code = i; - ++entropy->nonzeros; - entropy->entropy -= VP8LFastSLog2(array[i]); - if (entropy->max_val < array[i]) { - entropy->max_val = array[i]; - } - } - } - entropy->entropy += VP8LFastSLog2(entropy->sum); -} - -static WEBP_INLINE void GetEntropyUnrefinedHelper( - uint32_t val, int i, uint32_t* const val_prev, int* const i_prev, - VP8LBitEntropy* const bit_entropy, VP8LStreaks* const stats) { - const int streak = i - *i_prev; - - // Gather info for the bit entropy. - if (*val_prev != 0) { - bit_entropy->sum += (*val_prev) * streak; - bit_entropy->nonzeros += streak; - bit_entropy->nonzero_code = *i_prev; - bit_entropy->entropy -= VP8LFastSLog2(*val_prev) * streak; - if (bit_entropy->max_val < *val_prev) { - bit_entropy->max_val = *val_prev; - } - } - - // Gather info for the Huffman cost. - stats->counts[*val_prev != 0] += (streak > 3); - stats->streaks[*val_prev != 0][(streak > 3)] += streak; - - *val_prev = val; - *i_prev = i; -} - -static void GetEntropyUnrefined_C(const uint32_t X[], int length, - VP8LBitEntropy* const bit_entropy, - VP8LStreaks* const stats) { - int i; - int i_prev = 0; - uint32_t x_prev = X[0]; - - memset(stats, 0, sizeof(*stats)); - VP8LBitEntropyInit(bit_entropy); - - for (i = 1; i < length; ++i) { - const uint32_t x = X[i]; - if (x != x_prev) { - GetEntropyUnrefinedHelper(x, i, &x_prev, &i_prev, bit_entropy, stats); - } - } - GetEntropyUnrefinedHelper(0, i, &x_prev, &i_prev, bit_entropy, stats); - - bit_entropy->entropy += VP8LFastSLog2(bit_entropy->sum); -} - -static void GetCombinedEntropyUnrefined_C(const uint32_t X[], - const uint32_t Y[], - int length, - VP8LBitEntropy* const bit_entropy, - VP8LStreaks* const stats) { - int i = 1; - int i_prev = 0; - uint32_t xy_prev = X[0] + Y[0]; - - memset(stats, 0, sizeof(*stats)); - VP8LBitEntropyInit(bit_entropy); - - for (i = 1; i < length; ++i) { - const uint32_t xy = X[i] + Y[i]; - if (xy != xy_prev) { - GetEntropyUnrefinedHelper(xy, i, &xy_prev, &i_prev, bit_entropy, stats); - } - } - GetEntropyUnrefinedHelper(0, i, &xy_prev, &i_prev, bit_entropy, stats); - - bit_entropy->entropy += VP8LFastSLog2(bit_entropy->sum); -} - -//------------------------------------------------------------------------------ - -void VP8LSubtractGreenFromBlueAndRed_C(uint32_t* argb_data, int num_pixels) { - int i; - for (i = 0; i < num_pixels; ++i) { - const int argb = argb_data[i]; - const int green = (argb >> 8) & 0xff; - const uint32_t new_r = (((argb >> 16) & 0xff) - green) & 0xff; - const uint32_t new_b = (((argb >> 0) & 0xff) - green) & 0xff; - argb_data[i] = (argb & 0xff00ff00u) | (new_r << 16) | new_b; - } -} - -static WEBP_INLINE int ColorTransformDelta(int8_t color_pred, int8_t color) { - return ((int)color_pred * color) >> 5; -} - -static WEBP_INLINE int8_t U32ToS8(uint32_t v) { - return (int8_t)(v & 0xff); -} - -void VP8LTransformColor_C(const VP8LMultipliers* const m, uint32_t* data, - int num_pixels) { - int i; - for (i = 0; i < num_pixels; ++i) { - const uint32_t argb = data[i]; - const int8_t green = U32ToS8(argb >> 8); - const int8_t red = U32ToS8(argb >> 16); - int new_red = red & 0xff; - int new_blue = argb & 0xff; - new_red -= ColorTransformDelta(m->green_to_red_, green); - new_red &= 0xff; - new_blue -= ColorTransformDelta(m->green_to_blue_, green); - new_blue -= ColorTransformDelta(m->red_to_blue_, red); - new_blue &= 0xff; - data[i] = (argb & 0xff00ff00u) | (new_red << 16) | (new_blue); - } -} - -static WEBP_INLINE uint8_t TransformColorRed(uint8_t green_to_red, - uint32_t argb) { - const int8_t green = U32ToS8(argb >> 8); - int new_red = argb >> 16; - new_red -= ColorTransformDelta(green_to_red, green); - return (new_red & 0xff); -} - -static WEBP_INLINE uint8_t TransformColorBlue(uint8_t green_to_blue, - uint8_t red_to_blue, - uint32_t argb) { - const int8_t green = U32ToS8(argb >> 8); - const int8_t red = U32ToS8(argb >> 16); - uint8_t new_blue = argb & 0xff; - new_blue -= ColorTransformDelta(green_to_blue, green); - new_blue -= ColorTransformDelta(red_to_blue, red); - return (new_blue & 0xff); -} - -void VP8LCollectColorRedTransforms_C(const uint32_t* argb, int stride, - int tile_width, int tile_height, - int green_to_red, int histo[]) { - while (tile_height-- > 0) { - int x; - for (x = 0; x < tile_width; ++x) { - ++histo[TransformColorRed((uint8_t)green_to_red, argb[x])]; - } - argb += stride; - } -} - -void VP8LCollectColorBlueTransforms_C(const uint32_t* argb, int stride, - int tile_width, int tile_height, - int green_to_blue, int red_to_blue, - int histo[]) { - while (tile_height-- > 0) { - int x; - for (x = 0; x < tile_width; ++x) { - ++histo[TransformColorBlue((uint8_t)green_to_blue, (uint8_t)red_to_blue, - argb[x])]; - } - argb += stride; - } -} - -//------------------------------------------------------------------------------ - -static int VectorMismatch_C(const uint32_t* const array1, - const uint32_t* const array2, int length) { - int match_len = 0; - - while (match_len < length && array1[match_len] == array2[match_len]) { - ++match_len; - } - return match_len; -} - -// Bundles multiple (1, 2, 4 or 8) pixels into a single pixel. -void VP8LBundleColorMap_C(const uint8_t* const row, int width, int xbits, - uint32_t* dst) { - int x; - if (xbits > 0) { - const int bit_depth = 1 << (3 - xbits); - const int mask = (1 << xbits) - 1; - uint32_t code = 0xff000000; - for (x = 0; x < width; ++x) { - const int xsub = x & mask; - if (xsub == 0) { - code = 0xff000000; - } - code |= row[x] << (8 + bit_depth * xsub); - dst[x >> xbits] = code; - } - } else { - for (x = 0; x < width; ++x) dst[x] = 0xff000000 | (row[x] << 8); - } -} - -//------------------------------------------------------------------------------ - -static double ExtraCost_C(const uint32_t* population, int length) { - int i; - double cost = 0.; - for (i = 2; i < length - 2; ++i) cost += (i >> 1) * population[i + 2]; - return cost; -} - -static double ExtraCostCombined_C(const uint32_t* X, const uint32_t* Y, - int length) { - int i; - double cost = 0.; - for (i = 2; i < length - 2; ++i) { - const int xy = X[i + 2] + Y[i + 2]; - cost += (i >> 1) * xy; - } - return cost; -} - -//------------------------------------------------------------------------------ - -static void AddVector_C(const uint32_t* a, const uint32_t* b, uint32_t* out, - int size) { - int i; - for (i = 0; i < size; ++i) out[i] = a[i] + b[i]; -} - -static void AddVectorEq_C(const uint32_t* a, uint32_t* out, int size) { - int i; - for (i = 0; i < size; ++i) out[i] += a[i]; -} - -#define ADD(X, ARG, LEN) do { \ - if (a->is_used_[X]) { \ - if (b->is_used_[X]) { \ - VP8LAddVector(a->ARG, b->ARG, out->ARG, (LEN)); \ - } else { \ - memcpy(&out->ARG[0], &a->ARG[0], (LEN) * sizeof(out->ARG[0])); \ - } \ - } else if (b->is_used_[X]) { \ - memcpy(&out->ARG[0], &b->ARG[0], (LEN) * sizeof(out->ARG[0])); \ - } else { \ - memset(&out->ARG[0], 0, (LEN) * sizeof(out->ARG[0])); \ - } \ -} while (0) - -#define ADD_EQ(X, ARG, LEN) do { \ - if (a->is_used_[X]) { \ - if (out->is_used_[X]) { \ - VP8LAddVectorEq(a->ARG, out->ARG, (LEN)); \ - } else { \ - memcpy(&out->ARG[0], &a->ARG[0], (LEN) * sizeof(out->ARG[0])); \ - } \ - } \ -} while (0) - -void VP8LHistogramAdd(const VP8LHistogram* const a, - const VP8LHistogram* const b, VP8LHistogram* const out) { - int i; - const int literal_size = VP8LHistogramNumCodes(a->palette_code_bits_); - assert(a->palette_code_bits_ == b->palette_code_bits_); - - if (b != out) { - ADD(0, literal_, literal_size); - ADD(1, red_, NUM_LITERAL_CODES); - ADD(2, blue_, NUM_LITERAL_CODES); - ADD(3, alpha_, NUM_LITERAL_CODES); - ADD(4, distance_, NUM_DISTANCE_CODES); - for (i = 0; i < 5; ++i) { - out->is_used_[i] = (a->is_used_[i] | b->is_used_[i]); - } - } else { - ADD_EQ(0, literal_, literal_size); - ADD_EQ(1, red_, NUM_LITERAL_CODES); - ADD_EQ(2, blue_, NUM_LITERAL_CODES); - ADD_EQ(3, alpha_, NUM_LITERAL_CODES); - ADD_EQ(4, distance_, NUM_DISTANCE_CODES); - for (i = 0; i < 5; ++i) out->is_used_[i] |= a->is_used_[i]; - } -} -#undef ADD -#undef ADD_EQ - -//------------------------------------------------------------------------------ -// Image transforms. - -static WEBP_INLINE uint32_t Average2(uint32_t a0, uint32_t a1) { - return (((a0 ^ a1) & 0xfefefefeu) >> 1) + (a0 & a1); -} - -static WEBP_INLINE uint32_t Average3(uint32_t a0, uint32_t a1, uint32_t a2) { - return Average2(Average2(a0, a2), a1); -} - -static WEBP_INLINE uint32_t Average4(uint32_t a0, uint32_t a1, - uint32_t a2, uint32_t a3) { - return Average2(Average2(a0, a1), Average2(a2, a3)); -} - -static WEBP_INLINE uint32_t Clip255(uint32_t a) { - if (a < 256) { - return a; - } - // return 0, when a is a negative integer. - // return 255, when a is positive. - return ~a >> 24; -} - -static WEBP_INLINE int AddSubtractComponentFull(int a, int b, int c) { - return Clip255(a + b - c); -} - -static WEBP_INLINE uint32_t ClampedAddSubtractFull(uint32_t c0, uint32_t c1, - uint32_t c2) { - const int a = AddSubtractComponentFull(c0 >> 24, c1 >> 24, c2 >> 24); - const int r = AddSubtractComponentFull((c0 >> 16) & 0xff, - (c1 >> 16) & 0xff, - (c2 >> 16) & 0xff); - const int g = AddSubtractComponentFull((c0 >> 8) & 0xff, - (c1 >> 8) & 0xff, - (c2 >> 8) & 0xff); - const int b = AddSubtractComponentFull(c0 & 0xff, c1 & 0xff, c2 & 0xff); - return ((uint32_t)a << 24) | (r << 16) | (g << 8) | b; -} - -static WEBP_INLINE int AddSubtractComponentHalf(int a, int b) { - return Clip255(a + (a - b) / 2); -} - -static WEBP_INLINE uint32_t ClampedAddSubtractHalf(uint32_t c0, uint32_t c1, - uint32_t c2) { - const uint32_t ave = Average2(c0, c1); - const int a = AddSubtractComponentHalf(ave >> 24, c2 >> 24); - const int r = AddSubtractComponentHalf((ave >> 16) & 0xff, (c2 >> 16) & 0xff); - const int g = AddSubtractComponentHalf((ave >> 8) & 0xff, (c2 >> 8) & 0xff); - const int b = AddSubtractComponentHalf((ave >> 0) & 0xff, (c2 >> 0) & 0xff); - return ((uint32_t)a << 24) | (r << 16) | (g << 8) | b; -} - -// gcc-4.9 on ARM generates incorrect code in Select() when Sub3() is inlined. -#if defined(__arm__) && \ - (LOCAL_GCC_VERSION == 0x409 || LOCAL_GCC_VERSION == 0x408) -# define LOCAL_INLINE __attribute__ ((noinline)) -#else -# define LOCAL_INLINE WEBP_INLINE -#endif - -static LOCAL_INLINE int Sub3(int a, int b, int c) { - const int pb = b - c; - const int pa = a - c; - return abs(pb) - abs(pa); -} - -#undef LOCAL_INLINE - -static WEBP_INLINE uint32_t Select(uint32_t a, uint32_t b, uint32_t c) { - const int pa_minus_pb = - Sub3((a >> 24) , (b >> 24) , (c >> 24) ) + - Sub3((a >> 16) & 0xff, (b >> 16) & 0xff, (c >> 16) & 0xff) + - Sub3((a >> 8) & 0xff, (b >> 8) & 0xff, (c >> 8) & 0xff) + - Sub3((a ) & 0xff, (b ) & 0xff, (c ) & 0xff); - return (pa_minus_pb <= 0) ? a : b; -} - -//------------------------------------------------------------------------------ -// Predictors - -static uint32_t Predictor2(uint32_t left, const uint32_t* const top) { - (void)left; - return top[0]; -} -static uint32_t Predictor3(uint32_t left, const uint32_t* const top) { - (void)left; - return top[1]; -} -static uint32_t Predictor4(uint32_t left, const uint32_t* const top) { - (void)left; - return top[-1]; -} -static uint32_t Predictor5(uint32_t left, const uint32_t* const top) { - const uint32_t pred = Average3(left, top[0], top[1]); - return pred; -} -static uint32_t Predictor6(uint32_t left, const uint32_t* const top) { - const uint32_t pred = Average2(left, top[-1]); - return pred; -} -static uint32_t Predictor7(uint32_t left, const uint32_t* const top) { - const uint32_t pred = Average2(left, top[0]); - return pred; -} -static uint32_t Predictor8(uint32_t left, const uint32_t* const top) { - const uint32_t pred = Average2(top[-1], top[0]); - (void)left; - return pred; -} -static uint32_t Predictor9(uint32_t left, const uint32_t* const top) { - const uint32_t pred = Average2(top[0], top[1]); - (void)left; - return pred; -} -static uint32_t Predictor10(uint32_t left, const uint32_t* const top) { - const uint32_t pred = Average4(left, top[-1], top[0], top[1]); - return pred; -} -static uint32_t Predictor11(uint32_t left, const uint32_t* const top) { - const uint32_t pred = Select(top[0], left, top[-1]); - return pred; -} -static uint32_t Predictor12(uint32_t left, const uint32_t* const top) { - const uint32_t pred = ClampedAddSubtractFull(left, top[0], top[-1]); - return pred; -} -static uint32_t Predictor13(uint32_t left, const uint32_t* const top) { - const uint32_t pred = ClampedAddSubtractHalf(left, top[0], top[-1]); - return pred; -} - -//------------------------------------------------------------------------------ - -static void PredictorSub0_C(const uint32_t* in, const uint32_t* upper, - int num_pixels, uint32_t* out) { - int i; - for (i = 0; i < num_pixels; ++i) out[i] = VP8LSubPixels(in[i], ARGB_BLACK); - (void)upper; -} - -static void PredictorSub1_C(const uint32_t* in, const uint32_t* upper, - int num_pixels, uint32_t* out) { - int i; - for (i = 0; i < num_pixels; ++i) out[i] = VP8LSubPixels(in[i], in[i - 1]); - (void)upper; -} - -GENERATE_PREDICTOR_SUB(Predictor2, PredictorSub2_C) -GENERATE_PREDICTOR_SUB(Predictor3, PredictorSub3_C) -GENERATE_PREDICTOR_SUB(Predictor4, PredictorSub4_C) -GENERATE_PREDICTOR_SUB(Predictor5, PredictorSub5_C) -GENERATE_PREDICTOR_SUB(Predictor6, PredictorSub6_C) -GENERATE_PREDICTOR_SUB(Predictor7, PredictorSub7_C) -GENERATE_PREDICTOR_SUB(Predictor8, PredictorSub8_C) -GENERATE_PREDICTOR_SUB(Predictor9, PredictorSub9_C) -GENERATE_PREDICTOR_SUB(Predictor10, PredictorSub10_C) -GENERATE_PREDICTOR_SUB(Predictor11, PredictorSub11_C) -GENERATE_PREDICTOR_SUB(Predictor12, PredictorSub12_C) -GENERATE_PREDICTOR_SUB(Predictor13, PredictorSub13_C) - -//------------------------------------------------------------------------------ - -VP8LProcessEncBlueAndRedFunc VP8LSubtractGreenFromBlueAndRed; - -VP8LTransformColorFunc VP8LTransformColor; - -VP8LCollectColorBlueTransformsFunc VP8LCollectColorBlueTransforms; -VP8LCollectColorRedTransformsFunc VP8LCollectColorRedTransforms; - -VP8LFastLog2SlowFunc VP8LFastLog2Slow; -VP8LFastLog2SlowFunc VP8LFastSLog2Slow; - -VP8LCostFunc VP8LExtraCost; -VP8LCostCombinedFunc VP8LExtraCostCombined; -VP8LCombinedShannonEntropyFunc VP8LCombinedShannonEntropy; - -VP8LGetEntropyUnrefinedFunc VP8LGetEntropyUnrefined; -VP8LGetCombinedEntropyUnrefinedFunc VP8LGetCombinedEntropyUnrefined; - -VP8LAddVectorFunc VP8LAddVector; -VP8LAddVectorEqFunc VP8LAddVectorEq; - -VP8LVectorMismatchFunc VP8LVectorMismatch; -VP8LBundleColorMapFunc VP8LBundleColorMap; - -VP8LPredictorAddSubFunc VP8LPredictorsSub[16]; -VP8LPredictorAddSubFunc VP8LPredictorsSub_C[16]; - -extern void VP8LEncDspInitSSE2(void); -extern void VP8LEncDspInitSSE41(void); -extern void VP8LEncDspInitNEON(void); -extern void VP8LEncDspInitMIPS32(void); -extern void VP8LEncDspInitMIPSdspR2(void); -extern void VP8LEncDspInitMSA(void); - -WEBP_DSP_INIT_FUNC(VP8LEncDspInit) { - VP8LDspInit(); - -#if !WEBP_NEON_OMIT_C_CODE - VP8LSubtractGreenFromBlueAndRed = VP8LSubtractGreenFromBlueAndRed_C; - - VP8LTransformColor = VP8LTransformColor_C; -#endif - - VP8LCollectColorBlueTransforms = VP8LCollectColorBlueTransforms_C; - VP8LCollectColorRedTransforms = VP8LCollectColorRedTransforms_C; - - VP8LFastLog2Slow = FastLog2Slow_C; - VP8LFastSLog2Slow = FastSLog2Slow_C; - - VP8LExtraCost = ExtraCost_C; - VP8LExtraCostCombined = ExtraCostCombined_C; - VP8LCombinedShannonEntropy = CombinedShannonEntropy_C; - - VP8LGetEntropyUnrefined = GetEntropyUnrefined_C; - VP8LGetCombinedEntropyUnrefined = GetCombinedEntropyUnrefined_C; - - VP8LAddVector = AddVector_C; - VP8LAddVectorEq = AddVectorEq_C; - - VP8LVectorMismatch = VectorMismatch_C; - VP8LBundleColorMap = VP8LBundleColorMap_C; - - VP8LPredictorsSub[0] = PredictorSub0_C; - VP8LPredictorsSub[1] = PredictorSub1_C; - VP8LPredictorsSub[2] = PredictorSub2_C; - VP8LPredictorsSub[3] = PredictorSub3_C; - VP8LPredictorsSub[4] = PredictorSub4_C; - VP8LPredictorsSub[5] = PredictorSub5_C; - VP8LPredictorsSub[6] = PredictorSub6_C; - VP8LPredictorsSub[7] = PredictorSub7_C; - VP8LPredictorsSub[8] = PredictorSub8_C; - VP8LPredictorsSub[9] = PredictorSub9_C; - VP8LPredictorsSub[10] = PredictorSub10_C; - VP8LPredictorsSub[11] = PredictorSub11_C; - VP8LPredictorsSub[12] = PredictorSub12_C; - VP8LPredictorsSub[13] = PredictorSub13_C; - VP8LPredictorsSub[14] = PredictorSub0_C; // <- padding security sentinels - VP8LPredictorsSub[15] = PredictorSub0_C; - - VP8LPredictorsSub_C[0] = PredictorSub0_C; - VP8LPredictorsSub_C[1] = PredictorSub1_C; - VP8LPredictorsSub_C[2] = PredictorSub2_C; - VP8LPredictorsSub_C[3] = PredictorSub3_C; - VP8LPredictorsSub_C[4] = PredictorSub4_C; - VP8LPredictorsSub_C[5] = PredictorSub5_C; - VP8LPredictorsSub_C[6] = PredictorSub6_C; - VP8LPredictorsSub_C[7] = PredictorSub7_C; - VP8LPredictorsSub_C[8] = PredictorSub8_C; - VP8LPredictorsSub_C[9] = PredictorSub9_C; - VP8LPredictorsSub_C[10] = PredictorSub10_C; - VP8LPredictorsSub_C[11] = PredictorSub11_C; - VP8LPredictorsSub_C[12] = PredictorSub12_C; - VP8LPredictorsSub_C[13] = PredictorSub13_C; - VP8LPredictorsSub_C[14] = PredictorSub0_C; // <- padding security sentinels - VP8LPredictorsSub_C[15] = PredictorSub0_C; - - // If defined, use CPUInfo() to overwrite some pointers with faster versions. - if (VP8GetCPUInfo != NULL) { -#if defined(WEBP_USE_SSE2) - if (VP8GetCPUInfo(kSSE2)) { - VP8LEncDspInitSSE2(); -#if defined(WEBP_USE_SSE41) - if (VP8GetCPUInfo(kSSE4_1)) { - VP8LEncDspInitSSE41(); - } -#endif - } -#endif -#if defined(WEBP_USE_MIPS32) - if (VP8GetCPUInfo(kMIPS32)) { - VP8LEncDspInitMIPS32(); - } -#endif -#if defined(WEBP_USE_MIPS_DSP_R2) - if (VP8GetCPUInfo(kMIPSdspR2)) { - VP8LEncDspInitMIPSdspR2(); - } -#endif -#if defined(WEBP_USE_MSA) - if (VP8GetCPUInfo(kMSA)) { - VP8LEncDspInitMSA(); - } -#endif - } - -#if defined(WEBP_USE_NEON) - if (WEBP_NEON_OMIT_C_CODE || - (VP8GetCPUInfo != NULL && VP8GetCPUInfo(kNEON))) { - VP8LEncDspInitNEON(); - } -#endif - - assert(VP8LSubtractGreenFromBlueAndRed != NULL); - assert(VP8LTransformColor != NULL); - assert(VP8LCollectColorBlueTransforms != NULL); - assert(VP8LCollectColorRedTransforms != NULL); - assert(VP8LFastLog2Slow != NULL); - assert(VP8LFastSLog2Slow != NULL); - assert(VP8LExtraCost != NULL); - assert(VP8LExtraCostCombined != NULL); - assert(VP8LCombinedShannonEntropy != NULL); - assert(VP8LGetEntropyUnrefined != NULL); - assert(VP8LGetCombinedEntropyUnrefined != NULL); - assert(VP8LAddVector != NULL); - assert(VP8LAddVectorEq != NULL); - assert(VP8LVectorMismatch != NULL); - assert(VP8LBundleColorMap != NULL); - assert(VP8LPredictorsSub[0] != NULL); - assert(VP8LPredictorsSub[1] != NULL); - assert(VP8LPredictorsSub[2] != NULL); - assert(VP8LPredictorsSub[3] != NULL); - assert(VP8LPredictorsSub[4] != NULL); - assert(VP8LPredictorsSub[5] != NULL); - assert(VP8LPredictorsSub[6] != NULL); - assert(VP8LPredictorsSub[7] != NULL); - assert(VP8LPredictorsSub[8] != NULL); - assert(VP8LPredictorsSub[9] != NULL); - assert(VP8LPredictorsSub[10] != NULL); - assert(VP8LPredictorsSub[11] != NULL); - assert(VP8LPredictorsSub[12] != NULL); - assert(VP8LPredictorsSub[13] != NULL); - assert(VP8LPredictorsSub[14] != NULL); - assert(VP8LPredictorsSub[15] != NULL); - assert(VP8LPredictorsSub_C[0] != NULL); - assert(VP8LPredictorsSub_C[1] != NULL); - assert(VP8LPredictorsSub_C[2] != NULL); - assert(VP8LPredictorsSub_C[3] != NULL); - assert(VP8LPredictorsSub_C[4] != NULL); - assert(VP8LPredictorsSub_C[5] != NULL); - assert(VP8LPredictorsSub_C[6] != NULL); - assert(VP8LPredictorsSub_C[7] != NULL); - assert(VP8LPredictorsSub_C[8] != NULL); - assert(VP8LPredictorsSub_C[9] != NULL); - assert(VP8LPredictorsSub_C[10] != NULL); - assert(VP8LPredictorsSub_C[11] != NULL); - assert(VP8LPredictorsSub_C[12] != NULL); - assert(VP8LPredictorsSub_C[13] != NULL); - assert(VP8LPredictorsSub_C[14] != NULL); - assert(VP8LPredictorsSub_C[15] != NULL); -} - -//------------------------------------------------------------------------------ diff --git a/Extended/libwebp/src/dsp/lossless_enc_mips32.c b/Extended/libwebp/src/dsp/lossless_enc_mips32.c deleted file mode 100644 index 0412a09..0000000 --- a/Extended/libwebp/src/dsp/lossless_enc_mips32.c +++ /dev/null @@ -1,397 +0,0 @@ -// Copyright 2015 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// MIPS version of lossless functions -// -// Author(s): Djordje Pesut (djordje.pesut@imgtec.com) -// Jovan Zelincevic (jovan.zelincevic@imgtec.com) - -#include "src/dsp/dsp.h" -#include "src/dsp/lossless.h" -#include "src/dsp/lossless_common.h" - -#if defined(WEBP_USE_MIPS32) - -#include -#include -#include -#include - -static float FastSLog2Slow_MIPS32(uint32_t v) { - assert(v >= LOG_LOOKUP_IDX_MAX); - if (v < APPROX_LOG_WITH_CORRECTION_MAX) { - uint32_t log_cnt, y, correction; - const int c24 = 24; - const float v_f = (float)v; - uint32_t temp; - - // Xf = 256 = 2^8 - // log_cnt is index of leading one in upper 24 bits - __asm__ volatile( - "clz %[log_cnt], %[v] \n\t" - "addiu %[y], $zero, 1 \n\t" - "subu %[log_cnt], %[c24], %[log_cnt] \n\t" - "sllv %[y], %[y], %[log_cnt] \n\t" - "srlv %[temp], %[v], %[log_cnt] \n\t" - : [log_cnt]"=&r"(log_cnt), [y]"=&r"(y), - [temp]"=r"(temp) - : [c24]"r"(c24), [v]"r"(v) - ); - - // vf = (2^log_cnt) * Xf; where y = 2^log_cnt and Xf < 256 - // Xf = floor(Xf) * (1 + (v % y) / v) - // log2(Xf) = log2(floor(Xf)) + log2(1 + (v % y) / v) - // The correction factor: log(1 + d) ~ d; for very small d values, so - // log2(1 + (v % y) / v) ~ LOG_2_RECIPROCAL * (v % y)/v - // LOG_2_RECIPROCAL ~ 23/16 - - // (v % y) = (v % 2^log_cnt) = v & (2^log_cnt - 1) - correction = (23 * (v & (y - 1))) >> 4; - return v_f * (kLog2Table[temp] + log_cnt) + correction; - } else { - return (float)(LOG_2_RECIPROCAL * v * log((double)v)); - } -} - -static float FastLog2Slow_MIPS32(uint32_t v) { - assert(v >= LOG_LOOKUP_IDX_MAX); - if (v < APPROX_LOG_WITH_CORRECTION_MAX) { - uint32_t log_cnt, y; - const int c24 = 24; - double log_2; - uint32_t temp; - - __asm__ volatile( - "clz %[log_cnt], %[v] \n\t" - "addiu %[y], $zero, 1 \n\t" - "subu %[log_cnt], %[c24], %[log_cnt] \n\t" - "sllv %[y], %[y], %[log_cnt] \n\t" - "srlv %[temp], %[v], %[log_cnt] \n\t" - : [log_cnt]"=&r"(log_cnt), [y]"=&r"(y), - [temp]"=r"(temp) - : [c24]"r"(c24), [v]"r"(v) - ); - - log_2 = kLog2Table[temp] + log_cnt; - if (v >= APPROX_LOG_MAX) { - // Since the division is still expensive, add this correction factor only - // for large values of 'v'. - - const uint32_t correction = (23 * (v & (y - 1))) >> 4; - log_2 += (double)correction / v; - } - return (float)log_2; - } else { - return (float)(LOG_2_RECIPROCAL * log((double)v)); - } -} - -// C version of this function: -// int i = 0; -// int64_t cost = 0; -// const uint32_t* pop = &population[4]; -// const uint32_t* LoopEnd = &population[length]; -// while (pop != LoopEnd) { -// ++i; -// cost += i * *pop; -// cost += i * *(pop + 1); -// pop += 2; -// } -// return (double)cost; -static double ExtraCost_MIPS32(const uint32_t* const population, int length) { - int i, temp0, temp1; - const uint32_t* pop = &population[4]; - const uint32_t* const LoopEnd = &population[length]; - - __asm__ volatile( - "mult $zero, $zero \n\t" - "xor %[i], %[i], %[i] \n\t" - "beq %[pop], %[LoopEnd], 2f \n\t" - "1: \n\t" - "lw %[temp0], 0(%[pop]) \n\t" - "lw %[temp1], 4(%[pop]) \n\t" - "addiu %[i], %[i], 1 \n\t" - "addiu %[pop], %[pop], 8 \n\t" - "madd %[i], %[temp0] \n\t" - "madd %[i], %[temp1] \n\t" - "bne %[pop], %[LoopEnd], 1b \n\t" - "2: \n\t" - "mfhi %[temp0] \n\t" - "mflo %[temp1] \n\t" - : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), - [i]"=&r"(i), [pop]"+r"(pop) - : [LoopEnd]"r"(LoopEnd) - : "memory", "hi", "lo" - ); - - return (double)((int64_t)temp0 << 32 | temp1); -} - -// C version of this function: -// int i = 0; -// int64_t cost = 0; -// const uint32_t* pX = &X[4]; -// const uint32_t* pY = &Y[4]; -// const uint32_t* LoopEnd = &X[length]; -// while (pX != LoopEnd) { -// const uint32_t xy0 = *pX + *pY; -// const uint32_t xy1 = *(pX + 1) + *(pY + 1); -// ++i; -// cost += i * xy0; -// cost += i * xy1; -// pX += 2; -// pY += 2; -// } -// return (double)cost; -static double ExtraCostCombined_MIPS32(const uint32_t* const X, - const uint32_t* const Y, int length) { - int i, temp0, temp1, temp2, temp3; - const uint32_t* pX = &X[4]; - const uint32_t* pY = &Y[4]; - const uint32_t* const LoopEnd = &X[length]; - - __asm__ volatile( - "mult $zero, $zero \n\t" - "xor %[i], %[i], %[i] \n\t" - "beq %[pX], %[LoopEnd], 2f \n\t" - "1: \n\t" - "lw %[temp0], 0(%[pX]) \n\t" - "lw %[temp1], 0(%[pY]) \n\t" - "lw %[temp2], 4(%[pX]) \n\t" - "lw %[temp3], 4(%[pY]) \n\t" - "addiu %[i], %[i], 1 \n\t" - "addu %[temp0], %[temp0], %[temp1] \n\t" - "addu %[temp2], %[temp2], %[temp3] \n\t" - "addiu %[pX], %[pX], 8 \n\t" - "addiu %[pY], %[pY], 8 \n\t" - "madd %[i], %[temp0] \n\t" - "madd %[i], %[temp2] \n\t" - "bne %[pX], %[LoopEnd], 1b \n\t" - "2: \n\t" - "mfhi %[temp0] \n\t" - "mflo %[temp1] \n\t" - : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), - [temp2]"=&r"(temp2), [temp3]"=&r"(temp3), - [i]"=&r"(i), [pX]"+r"(pX), [pY]"+r"(pY) - : [LoopEnd]"r"(LoopEnd) - : "memory", "hi", "lo" - ); - - return (double)((int64_t)temp0 << 32 | temp1); -} - -#define HUFFMAN_COST_PASS \ - __asm__ volatile( \ - "sll %[temp1], %[temp0], 3 \n\t" \ - "addiu %[temp3], %[streak], -3 \n\t" \ - "addu %[temp2], %[pstreaks], %[temp1] \n\t" \ - "blez %[temp3], 1f \n\t" \ - "srl %[temp1], %[temp1], 1 \n\t" \ - "addu %[temp3], %[pcnts], %[temp1] \n\t" \ - "lw %[temp0], 4(%[temp2]) \n\t" \ - "lw %[temp1], 0(%[temp3]) \n\t" \ - "addu %[temp0], %[temp0], %[streak] \n\t" \ - "addiu %[temp1], %[temp1], 1 \n\t" \ - "sw %[temp0], 4(%[temp2]) \n\t" \ - "sw %[temp1], 0(%[temp3]) \n\t" \ - "b 2f \n\t" \ - "1: \n\t" \ - "lw %[temp0], 0(%[temp2]) \n\t" \ - "addu %[temp0], %[temp0], %[streak] \n\t" \ - "sw %[temp0], 0(%[temp2]) \n\t" \ - "2: \n\t" \ - : [temp1]"=&r"(temp1), [temp2]"=&r"(temp2), \ - [temp3]"=&r"(temp3), [temp0]"+r"(temp0) \ - : [pstreaks]"r"(pstreaks), [pcnts]"r"(pcnts), \ - [streak]"r"(streak) \ - : "memory" \ - ); - -// Returns the various RLE counts -static WEBP_INLINE void GetEntropyUnrefinedHelper( - uint32_t val, int i, uint32_t* const val_prev, int* const i_prev, - VP8LBitEntropy* const bit_entropy, VP8LStreaks* const stats) { - int* const pstreaks = &stats->streaks[0][0]; - int* const pcnts = &stats->counts[0]; - int temp0, temp1, temp2, temp3; - const int streak = i - *i_prev; - - // Gather info for the bit entropy. - if (*val_prev != 0) { - bit_entropy->sum += (*val_prev) * streak; - bit_entropy->nonzeros += streak; - bit_entropy->nonzero_code = *i_prev; - bit_entropy->entropy -= VP8LFastSLog2(*val_prev) * streak; - if (bit_entropy->max_val < *val_prev) { - bit_entropy->max_val = *val_prev; - } - } - - // Gather info for the Huffman cost. - temp0 = (*val_prev != 0); - HUFFMAN_COST_PASS - - *val_prev = val; - *i_prev = i; -} - -static void GetEntropyUnrefined_MIPS32(const uint32_t X[], int length, - VP8LBitEntropy* const bit_entropy, - VP8LStreaks* const stats) { - int i; - int i_prev = 0; - uint32_t x_prev = X[0]; - - memset(stats, 0, sizeof(*stats)); - VP8LBitEntropyInit(bit_entropy); - - for (i = 1; i < length; ++i) { - const uint32_t x = X[i]; - if (x != x_prev) { - GetEntropyUnrefinedHelper(x, i, &x_prev, &i_prev, bit_entropy, stats); - } - } - GetEntropyUnrefinedHelper(0, i, &x_prev, &i_prev, bit_entropy, stats); - - bit_entropy->entropy += VP8LFastSLog2(bit_entropy->sum); -} - -static void GetCombinedEntropyUnrefined_MIPS32(const uint32_t X[], - const uint32_t Y[], - int length, - VP8LBitEntropy* const entropy, - VP8LStreaks* const stats) { - int i = 1; - int i_prev = 0; - uint32_t xy_prev = X[0] + Y[0]; - - memset(stats, 0, sizeof(*stats)); - VP8LBitEntropyInit(entropy); - - for (i = 1; i < length; ++i) { - const uint32_t xy = X[i] + Y[i]; - if (xy != xy_prev) { - GetEntropyUnrefinedHelper(xy, i, &xy_prev, &i_prev, entropy, stats); - } - } - GetEntropyUnrefinedHelper(0, i, &xy_prev, &i_prev, entropy, stats); - - entropy->entropy += VP8LFastSLog2(entropy->sum); -} - -#define ASM_START \ - __asm__ volatile( \ - ".set push \n\t" \ - ".set at \n\t" \ - ".set macro \n\t" \ - "1: \n\t" - -// P2 = P0 + P1 -// A..D - offsets -// E - temp variable to tell macro -// if pointer should be incremented -// literal_ and successive histograms could be unaligned -// so we must use ulw and usw -#define ADD_TO_OUT(A, B, C, D, E, P0, P1, P2) \ - "ulw %[temp0], " #A "(%[" #P0 "]) \n\t" \ - "ulw %[temp1], " #B "(%[" #P0 "]) \n\t" \ - "ulw %[temp2], " #C "(%[" #P0 "]) \n\t" \ - "ulw %[temp3], " #D "(%[" #P0 "]) \n\t" \ - "ulw %[temp4], " #A "(%[" #P1 "]) \n\t" \ - "ulw %[temp5], " #B "(%[" #P1 "]) \n\t" \ - "ulw %[temp6], " #C "(%[" #P1 "]) \n\t" \ - "ulw %[temp7], " #D "(%[" #P1 "]) \n\t" \ - "addu %[temp4], %[temp4], %[temp0] \n\t" \ - "addu %[temp5], %[temp5], %[temp1] \n\t" \ - "addu %[temp6], %[temp6], %[temp2] \n\t" \ - "addu %[temp7], %[temp7], %[temp3] \n\t" \ - "addiu %[" #P0 "], %[" #P0 "], 16 \n\t" \ - ".if " #E " == 1 \n\t" \ - "addiu %[" #P1 "], %[" #P1 "], 16 \n\t" \ - ".endif \n\t" \ - "usw %[temp4], " #A "(%[" #P2 "]) \n\t" \ - "usw %[temp5], " #B "(%[" #P2 "]) \n\t" \ - "usw %[temp6], " #C "(%[" #P2 "]) \n\t" \ - "usw %[temp7], " #D "(%[" #P2 "]) \n\t" \ - "addiu %[" #P2 "], %[" #P2 "], 16 \n\t" \ - "bne %[" #P0 "], %[LoopEnd], 1b \n\t" \ - ".set pop \n\t" \ - -#define ASM_END_COMMON_0 \ - : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), \ - [temp2]"=&r"(temp2), [temp3]"=&r"(temp3), \ - [temp4]"=&r"(temp4), [temp5]"=&r"(temp5), \ - [temp6]"=&r"(temp6), [temp7]"=&r"(temp7), \ - [pa]"+r"(pa), [pout]"+r"(pout) - -#define ASM_END_COMMON_1 \ - : [LoopEnd]"r"(LoopEnd) \ - : "memory", "at" \ - ); - -#define ASM_END_0 \ - ASM_END_COMMON_0 \ - , [pb]"+r"(pb) \ - ASM_END_COMMON_1 - -#define ASM_END_1 \ - ASM_END_COMMON_0 \ - ASM_END_COMMON_1 - -static void AddVector_MIPS32(const uint32_t* pa, const uint32_t* pb, - uint32_t* pout, int size) { - uint32_t temp0, temp1, temp2, temp3, temp4, temp5, temp6, temp7; - const uint32_t end = ((size) / 4) * 4; - const uint32_t* const LoopEnd = pa + end; - int i; - ASM_START - ADD_TO_OUT(0, 4, 8, 12, 1, pa, pb, pout) - ASM_END_0 - for (i = end; i < size; ++i) pout[i] = pa[i] + pb[i]; -} - -static void AddVectorEq_MIPS32(const uint32_t* pa, uint32_t* pout, int size) { - uint32_t temp0, temp1, temp2, temp3, temp4, temp5, temp6, temp7; - const uint32_t end = ((size) / 4) * 4; - const uint32_t* const LoopEnd = pa + end; - int i; - ASM_START - ADD_TO_OUT(0, 4, 8, 12, 0, pa, pout, pout) - ASM_END_1 - for (i = end; i < size; ++i) pout[i] += pa[i]; -} - -#undef ASM_END_1 -#undef ASM_END_0 -#undef ASM_END_COMMON_1 -#undef ASM_END_COMMON_0 -#undef ADD_TO_OUT -#undef ASM_START - -//------------------------------------------------------------------------------ -// Entry point - -extern void VP8LEncDspInitMIPS32(void); - -WEBP_TSAN_IGNORE_FUNCTION void VP8LEncDspInitMIPS32(void) { - VP8LFastSLog2Slow = FastSLog2Slow_MIPS32; - VP8LFastLog2Slow = FastLog2Slow_MIPS32; - VP8LExtraCost = ExtraCost_MIPS32; - VP8LExtraCostCombined = ExtraCostCombined_MIPS32; - VP8LGetEntropyUnrefined = GetEntropyUnrefined_MIPS32; - VP8LGetCombinedEntropyUnrefined = GetCombinedEntropyUnrefined_MIPS32; - VP8LAddVector = AddVector_MIPS32; - VP8LAddVectorEq = AddVectorEq_MIPS32; -} - -#else // !WEBP_USE_MIPS32 - -WEBP_DSP_INIT_STUB(VP8LEncDspInitMIPS32) - -#endif // WEBP_USE_MIPS32 diff --git a/Extended/libwebp/src/dsp/lossless_enc_mips_dsp_r2.c b/Extended/libwebp/src/dsp/lossless_enc_mips_dsp_r2.c deleted file mode 100644 index 5855e6a..0000000 --- a/Extended/libwebp/src/dsp/lossless_enc_mips_dsp_r2.c +++ /dev/null @@ -1,281 +0,0 @@ -// Copyright 2015 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Image transform methods for lossless encoder. -// -// Author(s): Djordje Pesut (djordje.pesut@imgtec.com) -// Jovan Zelincevic (jovan.zelincevic@imgtec.com) - -#include "src/dsp/dsp.h" - -#if defined(WEBP_USE_MIPS_DSP_R2) - -#include "src/dsp/lossless.h" - -static void SubtractGreenFromBlueAndRed_MIPSdspR2(uint32_t* argb_data, - int num_pixels) { - uint32_t temp0, temp1, temp2, temp3, temp4, temp5, temp6, temp7; - uint32_t* const p_loop1_end = argb_data + (num_pixels & ~3); - uint32_t* const p_loop2_end = p_loop1_end + (num_pixels & 3); - __asm__ volatile ( - ".set push \n\t" - ".set noreorder \n\t" - "beq %[argb_data], %[p_loop1_end], 3f \n\t" - " nop \n\t" - "0: \n\t" - "lw %[temp0], 0(%[argb_data]) \n\t" - "lw %[temp1], 4(%[argb_data]) \n\t" - "lw %[temp2], 8(%[argb_data]) \n\t" - "lw %[temp3], 12(%[argb_data]) \n\t" - "ext %[temp4], %[temp0], 8, 8 \n\t" - "ext %[temp5], %[temp1], 8, 8 \n\t" - "ext %[temp6], %[temp2], 8, 8 \n\t" - "ext %[temp7], %[temp3], 8, 8 \n\t" - "addiu %[argb_data], %[argb_data], 16 \n\t" - "replv.ph %[temp4], %[temp4] \n\t" - "replv.ph %[temp5], %[temp5] \n\t" - "replv.ph %[temp6], %[temp6] \n\t" - "replv.ph %[temp7], %[temp7] \n\t" - "subu.qb %[temp0], %[temp0], %[temp4] \n\t" - "subu.qb %[temp1], %[temp1], %[temp5] \n\t" - "subu.qb %[temp2], %[temp2], %[temp6] \n\t" - "subu.qb %[temp3], %[temp3], %[temp7] \n\t" - "sw %[temp0], -16(%[argb_data]) \n\t" - "sw %[temp1], -12(%[argb_data]) \n\t" - "sw %[temp2], -8(%[argb_data]) \n\t" - "bne %[argb_data], %[p_loop1_end], 0b \n\t" - " sw %[temp3], -4(%[argb_data]) \n\t" - "3: \n\t" - "beq %[argb_data], %[p_loop2_end], 2f \n\t" - " nop \n\t" - "1: \n\t" - "lw %[temp0], 0(%[argb_data]) \n\t" - "addiu %[argb_data], %[argb_data], 4 \n\t" - "ext %[temp4], %[temp0], 8, 8 \n\t" - "replv.ph %[temp4], %[temp4] \n\t" - "subu.qb %[temp0], %[temp0], %[temp4] \n\t" - "bne %[argb_data], %[p_loop2_end], 1b \n\t" - " sw %[temp0], -4(%[argb_data]) \n\t" - "2: \n\t" - ".set pop \n\t" - : [argb_data]"+&r"(argb_data), [temp0]"=&r"(temp0), - [temp1]"=&r"(temp1), [temp2]"=&r"(temp2), [temp3]"=&r"(temp3), - [temp4]"=&r"(temp4), [temp5]"=&r"(temp5), [temp6]"=&r"(temp6), - [temp7]"=&r"(temp7) - : [p_loop1_end]"r"(p_loop1_end), [p_loop2_end]"r"(p_loop2_end) - : "memory" - ); -} - -static WEBP_INLINE uint32_t ColorTransformDelta(int8_t color_pred, - int8_t color) { - return (uint32_t)((int)(color_pred) * color) >> 5; -} - -static void TransformColor_MIPSdspR2(const VP8LMultipliers* const m, - uint32_t* data, int num_pixels) { - int temp0, temp1, temp2, temp3, temp4, temp5; - uint32_t argb, argb1, new_red, new_red1; - const uint32_t G_to_R = m->green_to_red_; - const uint32_t G_to_B = m->green_to_blue_; - const uint32_t R_to_B = m->red_to_blue_; - uint32_t* const p_loop_end = data + (num_pixels & ~1); - __asm__ volatile ( - ".set push \n\t" - ".set noreorder \n\t" - "beq %[data], %[p_loop_end], 1f \n\t" - " nop \n\t" - "replv.ph %[temp0], %[G_to_R] \n\t" - "replv.ph %[temp1], %[G_to_B] \n\t" - "replv.ph %[temp2], %[R_to_B] \n\t" - "shll.ph %[temp0], %[temp0], 8 \n\t" - "shll.ph %[temp1], %[temp1], 8 \n\t" - "shll.ph %[temp2], %[temp2], 8 \n\t" - "shra.ph %[temp0], %[temp0], 8 \n\t" - "shra.ph %[temp1], %[temp1], 8 \n\t" - "shra.ph %[temp2], %[temp2], 8 \n\t" - "0: \n\t" - "lw %[argb], 0(%[data]) \n\t" - "lw %[argb1], 4(%[data]) \n\t" - "lhu %[new_red], 2(%[data]) \n\t" - "lhu %[new_red1], 6(%[data]) \n\t" - "precrq.qb.ph %[temp3], %[argb], %[argb1] \n\t" - "precr.qb.ph %[temp4], %[argb], %[argb1] \n\t" - "preceu.ph.qbra %[temp3], %[temp3] \n\t" - "preceu.ph.qbla %[temp4], %[temp4] \n\t" - "shll.ph %[temp3], %[temp3], 8 \n\t" - "shll.ph %[temp4], %[temp4], 8 \n\t" - "shra.ph %[temp3], %[temp3], 8 \n\t" - "shra.ph %[temp4], %[temp4], 8 \n\t" - "mul.ph %[temp5], %[temp3], %[temp0] \n\t" - "mul.ph %[temp3], %[temp3], %[temp1] \n\t" - "mul.ph %[temp4], %[temp4], %[temp2] \n\t" - "addiu %[data], %[data], 8 \n\t" - "ins %[new_red1], %[new_red], 16, 16 \n\t" - "ins %[argb1], %[argb], 16, 16 \n\t" - "shra.ph %[temp5], %[temp5], 5 \n\t" - "shra.ph %[temp3], %[temp3], 5 \n\t" - "shra.ph %[temp4], %[temp4], 5 \n\t" - "subu.ph %[new_red1], %[new_red1], %[temp5] \n\t" - "subu.ph %[argb1], %[argb1], %[temp3] \n\t" - "preceu.ph.qbra %[temp5], %[new_red1] \n\t" - "subu.ph %[argb1], %[argb1], %[temp4] \n\t" - "preceu.ph.qbra %[temp3], %[argb1] \n\t" - "sb %[temp5], -2(%[data]) \n\t" - "sb %[temp3], -4(%[data]) \n\t" - "sra %[temp5], %[temp5], 16 \n\t" - "sra %[temp3], %[temp3], 16 \n\t" - "sb %[temp5], -6(%[data]) \n\t" - "bne %[data], %[p_loop_end], 0b \n\t" - " sb %[temp3], -8(%[data]) \n\t" - "1: \n\t" - ".set pop \n\t" - : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [temp2]"=&r"(temp2), - [temp3]"=&r"(temp3), [temp4]"=&r"(temp4), [temp5]"=&r"(temp5), - [new_red1]"=&r"(new_red1), [new_red]"=&r"(new_red), - [argb]"=&r"(argb), [argb1]"=&r"(argb1), [data]"+&r"(data) - : [G_to_R]"r"(G_to_R), [R_to_B]"r"(R_to_B), - [G_to_B]"r"(G_to_B), [p_loop_end]"r"(p_loop_end) - : "memory", "hi", "lo" - ); - - if (num_pixels & 1) { - const uint32_t argb_ = data[0]; - const uint32_t green = argb_ >> 8; - const uint32_t red = argb_ >> 16; - uint32_t new_blue = argb_; - new_red = red; - new_red -= ColorTransformDelta(m->green_to_red_, green); - new_red &= 0xff; - new_blue -= ColorTransformDelta(m->green_to_blue_, green); - new_blue -= ColorTransformDelta(m->red_to_blue_, red); - new_blue &= 0xff; - data[0] = (argb_ & 0xff00ff00u) | (new_red << 16) | (new_blue); - } -} - -static WEBP_INLINE uint8_t TransformColorBlue(uint8_t green_to_blue, - uint8_t red_to_blue, - uint32_t argb) { - const uint32_t green = argb >> 8; - const uint32_t red = argb >> 16; - uint8_t new_blue = argb; - new_blue -= ColorTransformDelta(green_to_blue, green); - new_blue -= ColorTransformDelta(red_to_blue, red); - return (new_blue & 0xff); -} - -static void CollectColorBlueTransforms_MIPSdspR2(const uint32_t* argb, - int stride, - int tile_width, - int tile_height, - int green_to_blue, - int red_to_blue, - int histo[]) { - const int rtb = (red_to_blue << 16) | (red_to_blue & 0xffff); - const int gtb = (green_to_blue << 16) | (green_to_blue & 0xffff); - const uint32_t mask = 0xff00ffu; - while (tile_height-- > 0) { - int x; - const uint32_t* p_argb = argb; - argb += stride; - for (x = 0; x < (tile_width >> 1); ++x) { - int temp0, temp1, temp2, temp3, temp4, temp5, temp6; - __asm__ volatile ( - "lw %[temp0], 0(%[p_argb]) \n\t" - "lw %[temp1], 4(%[p_argb]) \n\t" - "precr.qb.ph %[temp2], %[temp0], %[temp1] \n\t" - "ins %[temp1], %[temp0], 16, 16 \n\t" - "shra.ph %[temp2], %[temp2], 8 \n\t" - "shra.ph %[temp3], %[temp1], 8 \n\t" - "mul.ph %[temp5], %[temp2], %[rtb] \n\t" - "mul.ph %[temp6], %[temp3], %[gtb] \n\t" - "and %[temp4], %[temp1], %[mask] \n\t" - "addiu %[p_argb], %[p_argb], 8 \n\t" - "shra.ph %[temp5], %[temp5], 5 \n\t" - "shra.ph %[temp6], %[temp6], 5 \n\t" - "subu.qb %[temp2], %[temp4], %[temp5] \n\t" - "subu.qb %[temp2], %[temp2], %[temp6] \n\t" - : [p_argb]"+&r"(p_argb), [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), - [temp2]"=&r"(temp2), [temp3]"=&r"(temp3), [temp4]"=&r"(temp4), - [temp5]"=&r"(temp5), [temp6]"=&r"(temp6) - : [rtb]"r"(rtb), [gtb]"r"(gtb), [mask]"r"(mask) - : "memory", "hi", "lo" - ); - ++histo[(uint8_t)(temp2 >> 16)]; - ++histo[(uint8_t)temp2]; - } - if (tile_width & 1) { - ++histo[TransformColorBlue(green_to_blue, red_to_blue, *p_argb)]; - } - } -} - -static WEBP_INLINE uint8_t TransformColorRed(uint8_t green_to_red, - uint32_t argb) { - const uint32_t green = argb >> 8; - uint32_t new_red = argb >> 16; - new_red -= ColorTransformDelta(green_to_red, green); - return (new_red & 0xff); -} - -static void CollectColorRedTransforms_MIPSdspR2(const uint32_t* argb, - int stride, - int tile_width, - int tile_height, - int green_to_red, - int histo[]) { - const int gtr = (green_to_red << 16) | (green_to_red & 0xffff); - while (tile_height-- > 0) { - int x; - const uint32_t* p_argb = argb; - argb += stride; - for (x = 0; x < (tile_width >> 1); ++x) { - int temp0, temp1, temp2, temp3, temp4; - __asm__ volatile ( - "lw %[temp0], 0(%[p_argb]) \n\t" - "lw %[temp1], 4(%[p_argb]) \n\t" - "precrq.ph.w %[temp4], %[temp0], %[temp1] \n\t" - "ins %[temp1], %[temp0], 16, 16 \n\t" - "shra.ph %[temp3], %[temp1], 8 \n\t" - "mul.ph %[temp2], %[temp3], %[gtr] \n\t" - "addiu %[p_argb], %[p_argb], 8 \n\t" - "shra.ph %[temp2], %[temp2], 5 \n\t" - "subu.qb %[temp2], %[temp4], %[temp2] \n\t" - : [p_argb]"+&r"(p_argb), [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), - [temp2]"=&r"(temp2), [temp3]"=&r"(temp3), [temp4]"=&r"(temp4) - : [gtr]"r"(gtr) - : "memory", "hi", "lo" - ); - ++histo[(uint8_t)(temp2 >> 16)]; - ++histo[(uint8_t)temp2]; - } - if (tile_width & 1) { - ++histo[TransformColorRed(green_to_red, *p_argb)]; - } - } -} - -//------------------------------------------------------------------------------ -// Entry point - -extern void VP8LEncDspInitMIPSdspR2(void); - -WEBP_TSAN_IGNORE_FUNCTION void VP8LEncDspInitMIPSdspR2(void) { - VP8LSubtractGreenFromBlueAndRed = SubtractGreenFromBlueAndRed_MIPSdspR2; - VP8LTransformColor = TransformColor_MIPSdspR2; - VP8LCollectColorBlueTransforms = CollectColorBlueTransforms_MIPSdspR2; - VP8LCollectColorRedTransforms = CollectColorRedTransforms_MIPSdspR2; -} - -#else // !WEBP_USE_MIPS_DSP_R2 - -WEBP_DSP_INIT_STUB(VP8LEncDspInitMIPSdspR2) - -#endif // WEBP_USE_MIPS_DSP_R2 diff --git a/Extended/libwebp/src/dsp/lossless_enc_msa.c b/Extended/libwebp/src/dsp/lossless_enc_msa.c deleted file mode 100644 index 600dddf..0000000 --- a/Extended/libwebp/src/dsp/lossless_enc_msa.c +++ /dev/null @@ -1,148 +0,0 @@ -// Copyright 2016 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// MSA variant of Image transform methods for lossless encoder. -// -// Authors: Prashant Patil (Prashant.Patil@imgtec.com) - -#include "src/dsp/dsp.h" - -#if defined(WEBP_USE_MSA) - -#include "src/dsp/lossless.h" -#include "src/dsp/msa_macro.h" - -#define TRANSFORM_COLOR_8(src0, src1, dst0, dst1, c0, c1, mask0, mask1) do { \ - v8i16 g0, g1, t0, t1, t2, t3; \ - v4i32 t4, t5; \ - VSHF_B2_SH(src0, src0, src1, src1, mask0, mask0, g0, g1); \ - DOTP_SB2_SH(g0, g1, c0, c0, t0, t1); \ - SRAI_H2_SH(t0, t1, 5); \ - t0 = __msa_subv_h((v8i16)src0, t0); \ - t1 = __msa_subv_h((v8i16)src1, t1); \ - t4 = __msa_srli_w((v4i32)src0, 16); \ - t5 = __msa_srli_w((v4i32)src1, 16); \ - DOTP_SB2_SH(t4, t5, c1, c1, t2, t3); \ - SRAI_H2_SH(t2, t3, 5); \ - SUB2(t0, t2, t1, t3, t0, t1); \ - VSHF_B2_UB(src0, t0, src1, t1, mask1, mask1, dst0, dst1); \ -} while (0) - -#define TRANSFORM_COLOR_4(src, dst, c0, c1, mask0, mask1) do { \ - const v16i8 g0 = VSHF_SB(src, src, mask0); \ - v8i16 t0 = __msa_dotp_s_h(c0, g0); \ - v8i16 t1; \ - v4i32 t2; \ - t0 = SRAI_H(t0, 5); \ - t0 = __msa_subv_h((v8i16)src, t0); \ - t2 = __msa_srli_w((v4i32)src, 16); \ - t1 = __msa_dotp_s_h(c1, (v16i8)t2); \ - t1 = SRAI_H(t1, 5); \ - t0 = t0 - t1; \ - dst = VSHF_UB(src, t0, mask1); \ -} while (0) - -static void TransformColor_MSA(const VP8LMultipliers* const m, uint32_t* data, - int num_pixels) { - v16u8 src0, dst0; - const v16i8 g2br = (v16i8)__msa_fill_w(m->green_to_blue_ | - (m->green_to_red_ << 16)); - const v16i8 r2b = (v16i8)__msa_fill_w(m->red_to_blue_); - const v16u8 mask0 = { 1, 255, 1, 255, 5, 255, 5, 255, 9, 255, 9, 255, - 13, 255, 13, 255 }; - const v16u8 mask1 = { 16, 1, 18, 3, 20, 5, 22, 7, 24, 9, 26, 11, - 28, 13, 30, 15 }; - - while (num_pixels >= 8) { - v16u8 src1, dst1; - LD_UB2(data, 4, src0, src1); - TRANSFORM_COLOR_8(src0, src1, dst0, dst1, g2br, r2b, mask0, mask1); - ST_UB2(dst0, dst1, data, 4); - data += 8; - num_pixels -= 8; - } - if (num_pixels > 0) { - if (num_pixels >= 4) { - src0 = LD_UB(data); - TRANSFORM_COLOR_4(src0, dst0, g2br, r2b, mask0, mask1); - ST_UB(dst0, data); - data += 4; - num_pixels -= 4; - } - if (num_pixels > 0) { - src0 = LD_UB(data); - TRANSFORM_COLOR_4(src0, dst0, g2br, r2b, mask0, mask1); - if (num_pixels == 3) { - const uint64_t pix_d = __msa_copy_s_d((v2i64)dst0, 0); - const uint32_t pix_w = __msa_copy_s_w((v4i32)dst0, 2); - SD(pix_d, data + 0); - SW(pix_w, data + 2); - } else if (num_pixels == 2) { - const uint64_t pix_d = __msa_copy_s_d((v2i64)dst0, 0); - SD(pix_d, data); - } else { - const uint32_t pix_w = __msa_copy_s_w((v4i32)dst0, 0); - SW(pix_w, data); - } - } - } -} - -static void SubtractGreenFromBlueAndRed_MSA(uint32_t* argb_data, - int num_pixels) { - int i; - uint8_t* ptemp_data = (uint8_t*)argb_data; - v16u8 src0, dst0, tmp0; - const v16u8 mask = { 1, 255, 1, 255, 5, 255, 5, 255, 9, 255, 9, 255, - 13, 255, 13, 255 }; - - while (num_pixels >= 8) { - v16u8 src1, dst1, tmp1; - LD_UB2(ptemp_data, 16, src0, src1); - VSHF_B2_UB(src0, src1, src1, src0, mask, mask, tmp0, tmp1); - SUB2(src0, tmp0, src1, tmp1, dst0, dst1); - ST_UB2(dst0, dst1, ptemp_data, 16); - ptemp_data += 8 * 4; - num_pixels -= 8; - } - if (num_pixels > 0) { - if (num_pixels >= 4) { - src0 = LD_UB(ptemp_data); - tmp0 = VSHF_UB(src0, src0, mask); - dst0 = src0 - tmp0; - ST_UB(dst0, ptemp_data); - ptemp_data += 4 * 4; - num_pixels -= 4; - } - for (i = 0; i < num_pixels; i++) { - const uint8_t b = ptemp_data[0]; - const uint8_t g = ptemp_data[1]; - const uint8_t r = ptemp_data[2]; - ptemp_data[0] = (b - g) & 0xff; - ptemp_data[2] = (r - g) & 0xff; - ptemp_data += 4; - } - } -} - -//------------------------------------------------------------------------------ -// Entry point - -extern void VP8LEncDspInitMSA(void); - -WEBP_TSAN_IGNORE_FUNCTION void VP8LEncDspInitMSA(void) { - VP8LSubtractGreenFromBlueAndRed = SubtractGreenFromBlueAndRed_MSA; - VP8LTransformColor = TransformColor_MSA; -} - -#else // !WEBP_USE_MSA - -WEBP_DSP_INIT_STUB(VP8LEncDspInitMSA) - -#endif // WEBP_USE_MSA diff --git a/Extended/libwebp/src/dsp/lossless_enc_neon.c b/Extended/libwebp/src/dsp/lossless_enc_neon.c deleted file mode 100644 index 7c7b73f..0000000 --- a/Extended/libwebp/src/dsp/lossless_enc_neon.c +++ /dev/null @@ -1,144 +0,0 @@ -// Copyright 2015 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// NEON variant of methods for lossless encoder -// -// Author: Skal (pascal.massimino@gmail.com) - -#include "src/dsp/dsp.h" - -#if defined(WEBP_USE_NEON) - -#include - -#include "src/dsp/lossless.h" -#include "src/dsp/neon.h" - -//------------------------------------------------------------------------------ -// Subtract-Green Transform - -// vtbl?_u8 are marked unavailable for iOS arm64 with Xcode < 6.3, use -// non-standard versions there. -#if defined(__APPLE__) && defined(__aarch64__) && \ - defined(__apple_build_version__) && (__apple_build_version__< 6020037) -#define USE_VTBLQ -#endif - -#ifdef USE_VTBLQ -// 255 = byte will be zeroed -static const uint8_t kGreenShuffle[16] = { - 1, 255, 1, 255, 5, 255, 5, 255, 9, 255, 9, 255, 13, 255, 13, 255 -}; - -static WEBP_INLINE uint8x16_t DoGreenShuffle_NEON(const uint8x16_t argb, - const uint8x16_t shuffle) { - return vcombine_u8(vtbl1q_u8(argb, vget_low_u8(shuffle)), - vtbl1q_u8(argb, vget_high_u8(shuffle))); -} -#else // !USE_VTBLQ -// 255 = byte will be zeroed -static const uint8_t kGreenShuffle[8] = { 1, 255, 1, 255, 5, 255, 5, 255 }; - -static WEBP_INLINE uint8x16_t DoGreenShuffle_NEON(const uint8x16_t argb, - const uint8x8_t shuffle) { - return vcombine_u8(vtbl1_u8(vget_low_u8(argb), shuffle), - vtbl1_u8(vget_high_u8(argb), shuffle)); -} -#endif // USE_VTBLQ - -static void SubtractGreenFromBlueAndRed_NEON(uint32_t* argb_data, - int num_pixels) { - const uint32_t* const end = argb_data + (num_pixels & ~3); -#ifdef USE_VTBLQ - const uint8x16_t shuffle = vld1q_u8(kGreenShuffle); -#else - const uint8x8_t shuffle = vld1_u8(kGreenShuffle); -#endif - for (; argb_data < end; argb_data += 4) { - const uint8x16_t argb = vld1q_u8((uint8_t*)argb_data); - const uint8x16_t greens = DoGreenShuffle_NEON(argb, shuffle); - vst1q_u8((uint8_t*)argb_data, vsubq_u8(argb, greens)); - } - // fallthrough and finish off with plain-C - VP8LSubtractGreenFromBlueAndRed_C(argb_data, num_pixels & 3); -} - -//------------------------------------------------------------------------------ -// Color Transform - -static void TransformColor_NEON(const VP8LMultipliers* const m, - uint32_t* argb_data, int num_pixels) { - // sign-extended multiplying constants, pre-shifted by 6. -#define CST(X) (((int16_t)(m->X << 8)) >> 6) - const int16_t rb[8] = { - CST(green_to_blue_), CST(green_to_red_), - CST(green_to_blue_), CST(green_to_red_), - CST(green_to_blue_), CST(green_to_red_), - CST(green_to_blue_), CST(green_to_red_) - }; - const int16x8_t mults_rb = vld1q_s16(rb); - const int16_t b2[8] = { - 0, CST(red_to_blue_), 0, CST(red_to_blue_), - 0, CST(red_to_blue_), 0, CST(red_to_blue_), - }; - const int16x8_t mults_b2 = vld1q_s16(b2); -#undef CST -#ifdef USE_VTBLQ - static const uint8_t kg0g0[16] = { - 255, 1, 255, 1, 255, 5, 255, 5, 255, 9, 255, 9, 255, 13, 255, 13 - }; - const uint8x16_t shuffle = vld1q_u8(kg0g0); -#else - static const uint8_t k0g0g[8] = { 255, 1, 255, 1, 255, 5, 255, 5 }; - const uint8x8_t shuffle = vld1_u8(k0g0g); -#endif - const uint32x4_t mask_rb = vdupq_n_u32(0x00ff00ffu); // red-blue masks - int i; - for (i = 0; i + 4 <= num_pixels; i += 4) { - const uint8x16_t in = vld1q_u8((uint8_t*)(argb_data + i)); - // 0 g 0 g - const uint8x16_t greens = DoGreenShuffle_NEON(in, shuffle); - // x dr x db1 - const int16x8_t A = vqdmulhq_s16(vreinterpretq_s16_u8(greens), mults_rb); - // r 0 b 0 - const int16x8_t B = vshlq_n_s16(vreinterpretq_s16_u8(in), 8); - // x db2 0 0 - const int16x8_t C = vqdmulhq_s16(B, mults_b2); - // 0 0 x db2 - const uint32x4_t D = vshrq_n_u32(vreinterpretq_u32_s16(C), 16); - // x dr x db - const int8x16_t E = vaddq_s8(vreinterpretq_s8_u32(D), - vreinterpretq_s8_s16(A)); - // 0 dr 0 db - const uint32x4_t F = vandq_u32(vreinterpretq_u32_s8(E), mask_rb); - const int8x16_t out = vsubq_s8(vreinterpretq_s8_u8(in), - vreinterpretq_s8_u32(F)); - vst1q_s8((int8_t*)(argb_data + i), out); - } - // fallthrough and finish off with plain-C - VP8LTransformColor_C(m, argb_data + i, num_pixels - i); -} - -#undef USE_VTBLQ - -//------------------------------------------------------------------------------ -// Entry point - -extern void VP8LEncDspInitNEON(void); - -WEBP_TSAN_IGNORE_FUNCTION void VP8LEncDspInitNEON(void) { - VP8LSubtractGreenFromBlueAndRed = SubtractGreenFromBlueAndRed_NEON; - VP8LTransformColor = TransformColor_NEON; -} - -#else // !WEBP_USE_NEON - -WEBP_DSP_INIT_STUB(VP8LEncDspInitNEON) - -#endif // WEBP_USE_NEON diff --git a/Extended/libwebp/src/dsp/lossless_enc_sse2.c b/Extended/libwebp/src/dsp/lossless_enc_sse2.c deleted file mode 100644 index e676f6f..0000000 --- a/Extended/libwebp/src/dsp/lossless_enc_sse2.c +++ /dev/null @@ -1,686 +0,0 @@ -// Copyright 2015 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// SSE2 variant of methods for lossless encoder -// -// Author: Skal (pascal.massimino@gmail.com) - -#include "src/dsp/dsp.h" - -#if defined(WEBP_USE_SSE2) -#include -#include -#include "src/dsp/lossless.h" -#include "src/dsp/common_sse2.h" -#include "src/dsp/lossless_common.h" - -// For sign-extended multiplying constants, pre-shifted by 5: -#define CST_5b(X) (((int16_t)((uint16_t)(X) << 8)) >> 5) - -//------------------------------------------------------------------------------ -// Subtract-Green Transform - -static void SubtractGreenFromBlueAndRed_SSE2(uint32_t* argb_data, - int num_pixels) { - int i; - for (i = 0; i + 4 <= num_pixels; i += 4) { - const __m128i in = _mm_loadu_si128((__m128i*)&argb_data[i]); // argb - const __m128i A = _mm_srli_epi16(in, 8); // 0 a 0 g - const __m128i B = _mm_shufflelo_epi16(A, _MM_SHUFFLE(2, 2, 0, 0)); - const __m128i C = _mm_shufflehi_epi16(B, _MM_SHUFFLE(2, 2, 0, 0)); // 0g0g - const __m128i out = _mm_sub_epi8(in, C); - _mm_storeu_si128((__m128i*)&argb_data[i], out); - } - // fallthrough and finish off with plain-C - if (i != num_pixels) { - VP8LSubtractGreenFromBlueAndRed_C(argb_data + i, num_pixels - i); - } -} - -//------------------------------------------------------------------------------ -// Color Transform - -#define MK_CST_16(HI, LO) \ - _mm_set1_epi32((int)(((uint32_t)(HI) << 16) | ((LO) & 0xffff))) - -static void TransformColor_SSE2(const VP8LMultipliers* const m, - uint32_t* argb_data, int num_pixels) { - const __m128i mults_rb = MK_CST_16(CST_5b(m->green_to_red_), - CST_5b(m->green_to_blue_)); - const __m128i mults_b2 = MK_CST_16(CST_5b(m->red_to_blue_), 0); - const __m128i mask_ag = _mm_set1_epi32(0xff00ff00); // alpha-green masks - const __m128i mask_rb = _mm_set1_epi32(0x00ff00ff); // red-blue masks - int i; - for (i = 0; i + 4 <= num_pixels; i += 4) { - const __m128i in = _mm_loadu_si128((__m128i*)&argb_data[i]); // argb - const __m128i A = _mm_and_si128(in, mask_ag); // a 0 g 0 - const __m128i B = _mm_shufflelo_epi16(A, _MM_SHUFFLE(2, 2, 0, 0)); - const __m128i C = _mm_shufflehi_epi16(B, _MM_SHUFFLE(2, 2, 0, 0)); // g0g0 - const __m128i D = _mm_mulhi_epi16(C, mults_rb); // x dr x db1 - const __m128i E = _mm_slli_epi16(in, 8); // r 0 b 0 - const __m128i F = _mm_mulhi_epi16(E, mults_b2); // x db2 0 0 - const __m128i G = _mm_srli_epi32(F, 16); // 0 0 x db2 - const __m128i H = _mm_add_epi8(G, D); // x dr x db - const __m128i I = _mm_and_si128(H, mask_rb); // 0 dr 0 db - const __m128i out = _mm_sub_epi8(in, I); - _mm_storeu_si128((__m128i*)&argb_data[i], out); - } - // fallthrough and finish off with plain-C - if (i != num_pixels) { - VP8LTransformColor_C(m, argb_data + i, num_pixels - i); - } -} - -//------------------------------------------------------------------------------ -#define SPAN 8 -static void CollectColorBlueTransforms_SSE2(const uint32_t* argb, int stride, - int tile_width, int tile_height, - int green_to_blue, int red_to_blue, - int histo[]) { - const __m128i mults_r = MK_CST_16(CST_5b(red_to_blue), 0); - const __m128i mults_g = MK_CST_16(0, CST_5b(green_to_blue)); - const __m128i mask_g = _mm_set1_epi32(0x00ff00); // green mask - const __m128i mask_b = _mm_set1_epi32(0x0000ff); // blue mask - int y; - for (y = 0; y < tile_height; ++y) { - const uint32_t* const src = argb + y * stride; - int i, x; - for (x = 0; x + SPAN <= tile_width; x += SPAN) { - uint16_t values[SPAN]; - const __m128i in0 = _mm_loadu_si128((__m128i*)&src[x + 0]); - const __m128i in1 = _mm_loadu_si128((__m128i*)&src[x + SPAN / 2]); - const __m128i A0 = _mm_slli_epi16(in0, 8); // r 0 | b 0 - const __m128i A1 = _mm_slli_epi16(in1, 8); - const __m128i B0 = _mm_and_si128(in0, mask_g); // 0 0 | g 0 - const __m128i B1 = _mm_and_si128(in1, mask_g); - const __m128i C0 = _mm_mulhi_epi16(A0, mults_r); // x db | 0 0 - const __m128i C1 = _mm_mulhi_epi16(A1, mults_r); - const __m128i D0 = _mm_mulhi_epi16(B0, mults_g); // 0 0 | x db - const __m128i D1 = _mm_mulhi_epi16(B1, mults_g); - const __m128i E0 = _mm_sub_epi8(in0, D0); // x x | x b' - const __m128i E1 = _mm_sub_epi8(in1, D1); - const __m128i F0 = _mm_srli_epi32(C0, 16); // 0 0 | x db - const __m128i F1 = _mm_srli_epi32(C1, 16); - const __m128i G0 = _mm_sub_epi8(E0, F0); // 0 0 | x b' - const __m128i G1 = _mm_sub_epi8(E1, F1); - const __m128i H0 = _mm_and_si128(G0, mask_b); // 0 0 | 0 b - const __m128i H1 = _mm_and_si128(G1, mask_b); - const __m128i I = _mm_packs_epi32(H0, H1); // 0 b' | 0 b' - _mm_storeu_si128((__m128i*)values, I); - for (i = 0; i < SPAN; ++i) ++histo[values[i]]; - } - } - { - const int left_over = tile_width & (SPAN - 1); - if (left_over > 0) { - VP8LCollectColorBlueTransforms_C(argb + tile_width - left_over, stride, - left_over, tile_height, - green_to_blue, red_to_blue, histo); - } - } -} - -static void CollectColorRedTransforms_SSE2(const uint32_t* argb, int stride, - int tile_width, int tile_height, - int green_to_red, int histo[]) { - const __m128i mults_g = MK_CST_16(0, CST_5b(green_to_red)); - const __m128i mask_g = _mm_set1_epi32(0x00ff00); // green mask - const __m128i mask = _mm_set1_epi32(0xff); - - int y; - for (y = 0; y < tile_height; ++y) { - const uint32_t* const src = argb + y * stride; - int i, x; - for (x = 0; x + SPAN <= tile_width; x += SPAN) { - uint16_t values[SPAN]; - const __m128i in0 = _mm_loadu_si128((__m128i*)&src[x + 0]); - const __m128i in1 = _mm_loadu_si128((__m128i*)&src[x + SPAN / 2]); - const __m128i A0 = _mm_and_si128(in0, mask_g); // 0 0 | g 0 - const __m128i A1 = _mm_and_si128(in1, mask_g); - const __m128i B0 = _mm_srli_epi32(in0, 16); // 0 0 | x r - const __m128i B1 = _mm_srli_epi32(in1, 16); - const __m128i C0 = _mm_mulhi_epi16(A0, mults_g); // 0 0 | x dr - const __m128i C1 = _mm_mulhi_epi16(A1, mults_g); - const __m128i E0 = _mm_sub_epi8(B0, C0); // x x | x r' - const __m128i E1 = _mm_sub_epi8(B1, C1); - const __m128i F0 = _mm_and_si128(E0, mask); // 0 0 | 0 r' - const __m128i F1 = _mm_and_si128(E1, mask); - const __m128i I = _mm_packs_epi32(F0, F1); - _mm_storeu_si128((__m128i*)values, I); - for (i = 0; i < SPAN; ++i) ++histo[values[i]]; - } - } - { - const int left_over = tile_width & (SPAN - 1); - if (left_over > 0) { - VP8LCollectColorRedTransforms_C(argb + tile_width - left_over, stride, - left_over, tile_height, - green_to_red, histo); - } - } -} -#undef SPAN -#undef MK_CST_16 - -//------------------------------------------------------------------------------ - -// Note we are adding uint32_t's as *signed* int32's (using _mm_add_epi32). But -// that's ok since the histogram values are less than 1<<28 (max picture size). -#define LINE_SIZE 16 // 8 or 16 -static void AddVector_SSE2(const uint32_t* a, const uint32_t* b, uint32_t* out, - int size) { - int i; - for (i = 0; i + LINE_SIZE <= size; i += LINE_SIZE) { - const __m128i a0 = _mm_loadu_si128((const __m128i*)&a[i + 0]); - const __m128i a1 = _mm_loadu_si128((const __m128i*)&a[i + 4]); -#if (LINE_SIZE == 16) - const __m128i a2 = _mm_loadu_si128((const __m128i*)&a[i + 8]); - const __m128i a3 = _mm_loadu_si128((const __m128i*)&a[i + 12]); -#endif - const __m128i b0 = _mm_loadu_si128((const __m128i*)&b[i + 0]); - const __m128i b1 = _mm_loadu_si128((const __m128i*)&b[i + 4]); -#if (LINE_SIZE == 16) - const __m128i b2 = _mm_loadu_si128((const __m128i*)&b[i + 8]); - const __m128i b3 = _mm_loadu_si128((const __m128i*)&b[i + 12]); -#endif - _mm_storeu_si128((__m128i*)&out[i + 0], _mm_add_epi32(a0, b0)); - _mm_storeu_si128((__m128i*)&out[i + 4], _mm_add_epi32(a1, b1)); -#if (LINE_SIZE == 16) - _mm_storeu_si128((__m128i*)&out[i + 8], _mm_add_epi32(a2, b2)); - _mm_storeu_si128((__m128i*)&out[i + 12], _mm_add_epi32(a3, b3)); -#endif - } - for (; i < size; ++i) { - out[i] = a[i] + b[i]; - } -} - -static void AddVectorEq_SSE2(const uint32_t* a, uint32_t* out, int size) { - int i; - for (i = 0; i + LINE_SIZE <= size; i += LINE_SIZE) { - const __m128i a0 = _mm_loadu_si128((const __m128i*)&a[i + 0]); - const __m128i a1 = _mm_loadu_si128((const __m128i*)&a[i + 4]); -#if (LINE_SIZE == 16) - const __m128i a2 = _mm_loadu_si128((const __m128i*)&a[i + 8]); - const __m128i a3 = _mm_loadu_si128((const __m128i*)&a[i + 12]); -#endif - const __m128i b0 = _mm_loadu_si128((const __m128i*)&out[i + 0]); - const __m128i b1 = _mm_loadu_si128((const __m128i*)&out[i + 4]); -#if (LINE_SIZE == 16) - const __m128i b2 = _mm_loadu_si128((const __m128i*)&out[i + 8]); - const __m128i b3 = _mm_loadu_si128((const __m128i*)&out[i + 12]); -#endif - _mm_storeu_si128((__m128i*)&out[i + 0], _mm_add_epi32(a0, b0)); - _mm_storeu_si128((__m128i*)&out[i + 4], _mm_add_epi32(a1, b1)); -#if (LINE_SIZE == 16) - _mm_storeu_si128((__m128i*)&out[i + 8], _mm_add_epi32(a2, b2)); - _mm_storeu_si128((__m128i*)&out[i + 12], _mm_add_epi32(a3, b3)); -#endif - } - for (; i < size; ++i) { - out[i] += a[i]; - } -} -#undef LINE_SIZE - -//------------------------------------------------------------------------------ -// Entropy - -// Checks whether the X or Y contribution is worth computing and adding. -// Used in loop unrolling. -#define ANALYZE_X_OR_Y(x_or_y, j) \ - do { \ - if ((x_or_y)[i + (j)] != 0) retval -= VP8LFastSLog2((x_or_y)[i + (j)]); \ - } while (0) - -// Checks whether the X + Y contribution is worth computing and adding. -// Used in loop unrolling. -#define ANALYZE_XY(j) \ - do { \ - if (tmp[j] != 0) { \ - retval -= VP8LFastSLog2(tmp[j]); \ - ANALYZE_X_OR_Y(X, j); \ - } \ - } while (0) - -static float CombinedShannonEntropy_SSE2(const int X[256], const int Y[256]) { - int i; - double retval = 0.; - int sumX, sumXY; - int32_t tmp[4]; - __m128i zero = _mm_setzero_si128(); - // Sums up X + Y, 4 ints at a time (and will merge it at the end for sumXY). - __m128i sumXY_128 = zero; - __m128i sumX_128 = zero; - - for (i = 0; i < 256; i += 4) { - const __m128i x = _mm_loadu_si128((const __m128i*)(X + i)); - const __m128i y = _mm_loadu_si128((const __m128i*)(Y + i)); - - // Check if any X is non-zero: this actually provides a speedup as X is - // usually sparse. - if (_mm_movemask_epi8(_mm_cmpeq_epi32(x, zero)) != 0xFFFF) { - const __m128i xy_128 = _mm_add_epi32(x, y); - sumXY_128 = _mm_add_epi32(sumXY_128, xy_128); - - sumX_128 = _mm_add_epi32(sumX_128, x); - - // Analyze the different X + Y. - _mm_storeu_si128((__m128i*)tmp, xy_128); - - ANALYZE_XY(0); - ANALYZE_XY(1); - ANALYZE_XY(2); - ANALYZE_XY(3); - } else { - // X is fully 0, so only deal with Y. - sumXY_128 = _mm_add_epi32(sumXY_128, y); - - ANALYZE_X_OR_Y(Y, 0); - ANALYZE_X_OR_Y(Y, 1); - ANALYZE_X_OR_Y(Y, 2); - ANALYZE_X_OR_Y(Y, 3); - } - } - - // Sum up sumX_128 to get sumX. - _mm_storeu_si128((__m128i*)tmp, sumX_128); - sumX = tmp[3] + tmp[2] + tmp[1] + tmp[0]; - - // Sum up sumXY_128 to get sumXY. - _mm_storeu_si128((__m128i*)tmp, sumXY_128); - sumXY = tmp[3] + tmp[2] + tmp[1] + tmp[0]; - - retval += VP8LFastSLog2(sumX) + VP8LFastSLog2(sumXY); - return (float)retval; -} -#undef ANALYZE_X_OR_Y -#undef ANALYZE_XY - -//------------------------------------------------------------------------------ - -static int VectorMismatch_SSE2(const uint32_t* const array1, - const uint32_t* const array2, int length) { - int match_len; - - if (length >= 12) { - __m128i A0 = _mm_loadu_si128((const __m128i*)&array1[0]); - __m128i A1 = _mm_loadu_si128((const __m128i*)&array2[0]); - match_len = 0; - do { - // Loop unrolling and early load both provide a speedup of 10% for the - // current function. Also, max_limit can be MAX_LENGTH=4096 at most. - const __m128i cmpA = _mm_cmpeq_epi32(A0, A1); - const __m128i B0 = - _mm_loadu_si128((const __m128i*)&array1[match_len + 4]); - const __m128i B1 = - _mm_loadu_si128((const __m128i*)&array2[match_len + 4]); - if (_mm_movemask_epi8(cmpA) != 0xffff) break; - match_len += 4; - - { - const __m128i cmpB = _mm_cmpeq_epi32(B0, B1); - A0 = _mm_loadu_si128((const __m128i*)&array1[match_len + 4]); - A1 = _mm_loadu_si128((const __m128i*)&array2[match_len + 4]); - if (_mm_movemask_epi8(cmpB) != 0xffff) break; - match_len += 4; - } - } while (match_len + 12 < length); - } else { - match_len = 0; - // Unroll the potential first two loops. - if (length >= 4 && - _mm_movemask_epi8(_mm_cmpeq_epi32( - _mm_loadu_si128((const __m128i*)&array1[0]), - _mm_loadu_si128((const __m128i*)&array2[0]))) == 0xffff) { - match_len = 4; - if (length >= 8 && - _mm_movemask_epi8(_mm_cmpeq_epi32( - _mm_loadu_si128((const __m128i*)&array1[4]), - _mm_loadu_si128((const __m128i*)&array2[4]))) == 0xffff) { - match_len = 8; - } - } - } - - while (match_len < length && array1[match_len] == array2[match_len]) { - ++match_len; - } - return match_len; -} - -// Bundles multiple (1, 2, 4 or 8) pixels into a single pixel. -static void BundleColorMap_SSE2(const uint8_t* const row, int width, int xbits, - uint32_t* dst) { - int x; - assert(xbits >= 0); - assert(xbits <= 3); - switch (xbits) { - case 0: { - const __m128i ff = _mm_set1_epi16((short)0xff00); - const __m128i zero = _mm_setzero_si128(); - // Store 0xff000000 | (row[x] << 8). - for (x = 0; x + 16 <= width; x += 16, dst += 16) { - const __m128i in = _mm_loadu_si128((const __m128i*)&row[x]); - const __m128i in_lo = _mm_unpacklo_epi8(zero, in); - const __m128i dst0 = _mm_unpacklo_epi16(in_lo, ff); - const __m128i dst1 = _mm_unpackhi_epi16(in_lo, ff); - const __m128i in_hi = _mm_unpackhi_epi8(zero, in); - const __m128i dst2 = _mm_unpacklo_epi16(in_hi, ff); - const __m128i dst3 = _mm_unpackhi_epi16(in_hi, ff); - _mm_storeu_si128((__m128i*)&dst[0], dst0); - _mm_storeu_si128((__m128i*)&dst[4], dst1); - _mm_storeu_si128((__m128i*)&dst[8], dst2); - _mm_storeu_si128((__m128i*)&dst[12], dst3); - } - break; - } - case 1: { - const __m128i ff = _mm_set1_epi16((short)0xff00); - const __m128i mul = _mm_set1_epi16(0x110); - for (x = 0; x + 16 <= width; x += 16, dst += 8) { - // 0a0b | (where a/b are 4 bits). - const __m128i in = _mm_loadu_si128((const __m128i*)&row[x]); - const __m128i tmp = _mm_mullo_epi16(in, mul); // aba0 - const __m128i pack = _mm_and_si128(tmp, ff); // ab00 - const __m128i dst0 = _mm_unpacklo_epi16(pack, ff); - const __m128i dst1 = _mm_unpackhi_epi16(pack, ff); - _mm_storeu_si128((__m128i*)&dst[0], dst0); - _mm_storeu_si128((__m128i*)&dst[4], dst1); - } - break; - } - case 2: { - const __m128i mask_or = _mm_set1_epi32(0xff000000); - const __m128i mul_cst = _mm_set1_epi16(0x0104); - const __m128i mask_mul = _mm_set1_epi16(0x0f00); - for (x = 0; x + 16 <= width; x += 16, dst += 4) { - // 000a000b000c000d | (where a/b/c/d are 2 bits). - const __m128i in = _mm_loadu_si128((const __m128i*)&row[x]); - const __m128i mul = _mm_mullo_epi16(in, mul_cst); // 00ab00b000cd00d0 - const __m128i tmp = _mm_and_si128(mul, mask_mul); // 00ab000000cd0000 - const __m128i shift = _mm_srli_epi32(tmp, 12); // 00000000ab000000 - const __m128i pack = _mm_or_si128(shift, tmp); // 00000000abcd0000 - // Convert to 0xff00**00. - const __m128i res = _mm_or_si128(pack, mask_or); - _mm_storeu_si128((__m128i*)dst, res); - } - break; - } - default: { - assert(xbits == 3); - for (x = 0; x + 16 <= width; x += 16, dst += 2) { - // 0000000a00000000b... | (where a/b are 1 bit). - const __m128i in = _mm_loadu_si128((const __m128i*)&row[x]); - const __m128i shift = _mm_slli_epi64(in, 7); - const uint32_t move = _mm_movemask_epi8(shift); - dst[0] = 0xff000000 | ((move & 0xff) << 8); - dst[1] = 0xff000000 | (move & 0xff00); - } - break; - } - } - if (x != width) { - VP8LBundleColorMap_C(row + x, width - x, xbits, dst); - } -} - -//------------------------------------------------------------------------------ -// Batch version of Predictor Transform subtraction - -static WEBP_INLINE void Average2_m128i(const __m128i* const a0, - const __m128i* const a1, - __m128i* const avg) { - // (a + b) >> 1 = ((a + b + 1) >> 1) - ((a ^ b) & 1) - const __m128i ones = _mm_set1_epi8(1); - const __m128i avg1 = _mm_avg_epu8(*a0, *a1); - const __m128i one = _mm_and_si128(_mm_xor_si128(*a0, *a1), ones); - *avg = _mm_sub_epi8(avg1, one); -} - -// Predictor0: ARGB_BLACK. -static void PredictorSub0_SSE2(const uint32_t* in, const uint32_t* upper, - int num_pixels, uint32_t* out) { - int i; - const __m128i black = _mm_set1_epi32(ARGB_BLACK); - for (i = 0; i + 4 <= num_pixels; i += 4) { - const __m128i src = _mm_loadu_si128((const __m128i*)&in[i]); - const __m128i res = _mm_sub_epi8(src, black); - _mm_storeu_si128((__m128i*)&out[i], res); - } - if (i != num_pixels) { - VP8LPredictorsSub_C[0](in + i, NULL, num_pixels - i, out + i); - } - (void)upper; -} - -#define GENERATE_PREDICTOR_1(X, IN) \ -static void PredictorSub##X##_SSE2(const uint32_t* in, const uint32_t* upper, \ - int num_pixels, uint32_t* out) { \ - int i; \ - for (i = 0; i + 4 <= num_pixels; i += 4) { \ - const __m128i src = _mm_loadu_si128((const __m128i*)&in[i]); \ - const __m128i pred = _mm_loadu_si128((const __m128i*)&(IN)); \ - const __m128i res = _mm_sub_epi8(src, pred); \ - _mm_storeu_si128((__m128i*)&out[i], res); \ - } \ - if (i != num_pixels) { \ - VP8LPredictorsSub_C[(X)](in + i, upper + i, num_pixels - i, out + i); \ - } \ -} - -GENERATE_PREDICTOR_1(1, in[i - 1]) // Predictor1: L -GENERATE_PREDICTOR_1(2, upper[i]) // Predictor2: T -GENERATE_PREDICTOR_1(3, upper[i + 1]) // Predictor3: TR -GENERATE_PREDICTOR_1(4, upper[i - 1]) // Predictor4: TL -#undef GENERATE_PREDICTOR_1 - -// Predictor5: avg2(avg2(L, TR), T) -static void PredictorSub5_SSE2(const uint32_t* in, const uint32_t* upper, - int num_pixels, uint32_t* out) { - int i; - for (i = 0; i + 4 <= num_pixels; i += 4) { - const __m128i L = _mm_loadu_si128((const __m128i*)&in[i - 1]); - const __m128i T = _mm_loadu_si128((const __m128i*)&upper[i]); - const __m128i TR = _mm_loadu_si128((const __m128i*)&upper[i + 1]); - const __m128i src = _mm_loadu_si128((const __m128i*)&in[i]); - __m128i avg, pred, res; - Average2_m128i(&L, &TR, &avg); - Average2_m128i(&avg, &T, &pred); - res = _mm_sub_epi8(src, pred); - _mm_storeu_si128((__m128i*)&out[i], res); - } - if (i != num_pixels) { - VP8LPredictorsSub_C[5](in + i, upper + i, num_pixels - i, out + i); - } -} - -#define GENERATE_PREDICTOR_2(X, A, B) \ -static void PredictorSub##X##_SSE2(const uint32_t* in, const uint32_t* upper, \ - int num_pixels, uint32_t* out) { \ - int i; \ - for (i = 0; i + 4 <= num_pixels; i += 4) { \ - const __m128i tA = _mm_loadu_si128((const __m128i*)&(A)); \ - const __m128i tB = _mm_loadu_si128((const __m128i*)&(B)); \ - const __m128i src = _mm_loadu_si128((const __m128i*)&in[i]); \ - __m128i pred, res; \ - Average2_m128i(&tA, &tB, &pred); \ - res = _mm_sub_epi8(src, pred); \ - _mm_storeu_si128((__m128i*)&out[i], res); \ - } \ - if (i != num_pixels) { \ - VP8LPredictorsSub_C[(X)](in + i, upper + i, num_pixels - i, out + i); \ - } \ -} - -GENERATE_PREDICTOR_2(6, in[i - 1], upper[i - 1]) // Predictor6: avg(L, TL) -GENERATE_PREDICTOR_2(7, in[i - 1], upper[i]) // Predictor7: avg(L, T) -GENERATE_PREDICTOR_2(8, upper[i - 1], upper[i]) // Predictor8: avg(TL, T) -GENERATE_PREDICTOR_2(9, upper[i], upper[i + 1]) // Predictor9: average(T, TR) -#undef GENERATE_PREDICTOR_2 - -// Predictor10: avg(avg(L,TL), avg(T, TR)). -static void PredictorSub10_SSE2(const uint32_t* in, const uint32_t* upper, - int num_pixels, uint32_t* out) { - int i; - for (i = 0; i + 4 <= num_pixels; i += 4) { - const __m128i L = _mm_loadu_si128((const __m128i*)&in[i - 1]); - const __m128i src = _mm_loadu_si128((const __m128i*)&in[i]); - const __m128i TL = _mm_loadu_si128((const __m128i*)&upper[i - 1]); - const __m128i T = _mm_loadu_si128((const __m128i*)&upper[i]); - const __m128i TR = _mm_loadu_si128((const __m128i*)&upper[i + 1]); - __m128i avgTTR, avgLTL, avg, res; - Average2_m128i(&T, &TR, &avgTTR); - Average2_m128i(&L, &TL, &avgLTL); - Average2_m128i(&avgTTR, &avgLTL, &avg); - res = _mm_sub_epi8(src, avg); - _mm_storeu_si128((__m128i*)&out[i], res); - } - if (i != num_pixels) { - VP8LPredictorsSub_C[10](in + i, upper + i, num_pixels - i, out + i); - } -} - -// Predictor11: select. -static void GetSumAbsDiff32_SSE2(const __m128i* const A, const __m128i* const B, - __m128i* const out) { - // We can unpack with any value on the upper 32 bits, provided it's the same - // on both operands (to that their sum of abs diff is zero). Here we use *A. - const __m128i A_lo = _mm_unpacklo_epi32(*A, *A); - const __m128i B_lo = _mm_unpacklo_epi32(*B, *A); - const __m128i A_hi = _mm_unpackhi_epi32(*A, *A); - const __m128i B_hi = _mm_unpackhi_epi32(*B, *A); - const __m128i s_lo = _mm_sad_epu8(A_lo, B_lo); - const __m128i s_hi = _mm_sad_epu8(A_hi, B_hi); - *out = _mm_packs_epi32(s_lo, s_hi); -} - -static void PredictorSub11_SSE2(const uint32_t* in, const uint32_t* upper, - int num_pixels, uint32_t* out) { - int i; - for (i = 0; i + 4 <= num_pixels; i += 4) { - const __m128i L = _mm_loadu_si128((const __m128i*)&in[i - 1]); - const __m128i T = _mm_loadu_si128((const __m128i*)&upper[i]); - const __m128i TL = _mm_loadu_si128((const __m128i*)&upper[i - 1]); - const __m128i src = _mm_loadu_si128((const __m128i*)&in[i]); - __m128i pa, pb; - GetSumAbsDiff32_SSE2(&T, &TL, &pa); // pa = sum |T-TL| - GetSumAbsDiff32_SSE2(&L, &TL, &pb); // pb = sum |L-TL| - { - const __m128i mask = _mm_cmpgt_epi32(pb, pa); - const __m128i A = _mm_and_si128(mask, L); - const __m128i B = _mm_andnot_si128(mask, T); - const __m128i pred = _mm_or_si128(A, B); // pred = (L > T)? L : T - const __m128i res = _mm_sub_epi8(src, pred); - _mm_storeu_si128((__m128i*)&out[i], res); - } - } - if (i != num_pixels) { - VP8LPredictorsSub_C[11](in + i, upper + i, num_pixels - i, out + i); - } -} - -// Predictor12: ClampedSubSubtractFull. -static void PredictorSub12_SSE2(const uint32_t* in, const uint32_t* upper, - int num_pixels, uint32_t* out) { - int i; - const __m128i zero = _mm_setzero_si128(); - for (i = 0; i + 4 <= num_pixels; i += 4) { - const __m128i src = _mm_loadu_si128((const __m128i*)&in[i]); - const __m128i L = _mm_loadu_si128((const __m128i*)&in[i - 1]); - const __m128i L_lo = _mm_unpacklo_epi8(L, zero); - const __m128i L_hi = _mm_unpackhi_epi8(L, zero); - const __m128i T = _mm_loadu_si128((const __m128i*)&upper[i]); - const __m128i T_lo = _mm_unpacklo_epi8(T, zero); - const __m128i T_hi = _mm_unpackhi_epi8(T, zero); - const __m128i TL = _mm_loadu_si128((const __m128i*)&upper[i - 1]); - const __m128i TL_lo = _mm_unpacklo_epi8(TL, zero); - const __m128i TL_hi = _mm_unpackhi_epi8(TL, zero); - const __m128i diff_lo = _mm_sub_epi16(T_lo, TL_lo); - const __m128i diff_hi = _mm_sub_epi16(T_hi, TL_hi); - const __m128i pred_lo = _mm_add_epi16(L_lo, diff_lo); - const __m128i pred_hi = _mm_add_epi16(L_hi, diff_hi); - const __m128i pred = _mm_packus_epi16(pred_lo, pred_hi); - const __m128i res = _mm_sub_epi8(src, pred); - _mm_storeu_si128((__m128i*)&out[i], res); - } - if (i != num_pixels) { - VP8LPredictorsSub_C[12](in + i, upper + i, num_pixels - i, out + i); - } -} - -// Predictors13: ClampedAddSubtractHalf -static void PredictorSub13_SSE2(const uint32_t* in, const uint32_t* upper, - int num_pixels, uint32_t* out) { - int i; - const __m128i zero = _mm_setzero_si128(); - for (i = 0; i + 2 <= num_pixels; i += 2) { - // we can only process two pixels at a time - const __m128i L = _mm_loadl_epi64((const __m128i*)&in[i - 1]); - const __m128i src = _mm_loadl_epi64((const __m128i*)&in[i]); - const __m128i T = _mm_loadl_epi64((const __m128i*)&upper[i]); - const __m128i TL = _mm_loadl_epi64((const __m128i*)&upper[i - 1]); - const __m128i L_lo = _mm_unpacklo_epi8(L, zero); - const __m128i T_lo = _mm_unpacklo_epi8(T, zero); - const __m128i TL_lo = _mm_unpacklo_epi8(TL, zero); - const __m128i sum = _mm_add_epi16(T_lo, L_lo); - const __m128i avg = _mm_srli_epi16(sum, 1); - const __m128i A1 = _mm_sub_epi16(avg, TL_lo); - const __m128i bit_fix = _mm_cmpgt_epi16(TL_lo, avg); - const __m128i A2 = _mm_sub_epi16(A1, bit_fix); - const __m128i A3 = _mm_srai_epi16(A2, 1); - const __m128i A4 = _mm_add_epi16(avg, A3); - const __m128i pred = _mm_packus_epi16(A4, A4); - const __m128i res = _mm_sub_epi8(src, pred); - _mm_storel_epi64((__m128i*)&out[i], res); - } - if (i != num_pixels) { - VP8LPredictorsSub_C[13](in + i, upper + i, num_pixels - i, out + i); - } -} - -//------------------------------------------------------------------------------ -// Entry point - -extern void VP8LEncDspInitSSE2(void); - -WEBP_TSAN_IGNORE_FUNCTION void VP8LEncDspInitSSE2(void) { - VP8LSubtractGreenFromBlueAndRed = SubtractGreenFromBlueAndRed_SSE2; - VP8LTransformColor = TransformColor_SSE2; - VP8LCollectColorBlueTransforms = CollectColorBlueTransforms_SSE2; - VP8LCollectColorRedTransforms = CollectColorRedTransforms_SSE2; - VP8LAddVector = AddVector_SSE2; - VP8LAddVectorEq = AddVectorEq_SSE2; - VP8LCombinedShannonEntropy = CombinedShannonEntropy_SSE2; - VP8LVectorMismatch = VectorMismatch_SSE2; - VP8LBundleColorMap = BundleColorMap_SSE2; - - VP8LPredictorsSub[0] = PredictorSub0_SSE2; - VP8LPredictorsSub[1] = PredictorSub1_SSE2; - VP8LPredictorsSub[2] = PredictorSub2_SSE2; - VP8LPredictorsSub[3] = PredictorSub3_SSE2; - VP8LPredictorsSub[4] = PredictorSub4_SSE2; - VP8LPredictorsSub[5] = PredictorSub5_SSE2; - VP8LPredictorsSub[6] = PredictorSub6_SSE2; - VP8LPredictorsSub[7] = PredictorSub7_SSE2; - VP8LPredictorsSub[8] = PredictorSub8_SSE2; - VP8LPredictorsSub[9] = PredictorSub9_SSE2; - VP8LPredictorsSub[10] = PredictorSub10_SSE2; - VP8LPredictorsSub[11] = PredictorSub11_SSE2; - VP8LPredictorsSub[12] = PredictorSub12_SSE2; - VP8LPredictorsSub[13] = PredictorSub13_SSE2; - VP8LPredictorsSub[14] = PredictorSub0_SSE2; // <- padding security sentinels - VP8LPredictorsSub[15] = PredictorSub0_SSE2; -} - -#else // !WEBP_USE_SSE2 - -WEBP_DSP_INIT_STUB(VP8LEncDspInitSSE2) - -#endif // WEBP_USE_SSE2 diff --git a/Extended/libwebp/src/dsp/lossless_enc_sse41.c b/Extended/libwebp/src/dsp/lossless_enc_sse41.c deleted file mode 100644 index 719d8ed..0000000 --- a/Extended/libwebp/src/dsp/lossless_enc_sse41.c +++ /dev/null @@ -1,148 +0,0 @@ -// Copyright 2015 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// SSE4.1 variant of methods for lossless encoder -// -// Author: Skal (pascal.massimino@gmail.com) - -#include "src/dsp/dsp.h" - -#if defined(WEBP_USE_SSE41) -#include -#include -#include "src/dsp/lossless.h" - -// For sign-extended multiplying constants, pre-shifted by 5: -#define CST_5b(X) (((int16_t)((uint16_t)(X) << 8)) >> 5) - -//------------------------------------------------------------------------------ -// Subtract-Green Transform - -static void SubtractGreenFromBlueAndRed_SSE41(uint32_t* argb_data, - int num_pixels) { - int i; - const __m128i kCstShuffle = _mm_set_epi8(-1, 13, -1, 13, -1, 9, -1, 9, - -1, 5, -1, 5, -1, 1, -1, 1); - for (i = 0; i + 4 <= num_pixels; i += 4) { - const __m128i in = _mm_loadu_si128((__m128i*)&argb_data[i]); - const __m128i in_0g0g = _mm_shuffle_epi8(in, kCstShuffle); - const __m128i out = _mm_sub_epi8(in, in_0g0g); - _mm_storeu_si128((__m128i*)&argb_data[i], out); - } - // fallthrough and finish off with plain-C - if (i != num_pixels) { - VP8LSubtractGreenFromBlueAndRed_C(argb_data + i, num_pixels - i); - } -} - -//------------------------------------------------------------------------------ -// Color Transform - -#define SPAN 8 -static void CollectColorBlueTransforms_SSE41(const uint32_t* argb, int stride, - int tile_width, int tile_height, - int green_to_blue, int red_to_blue, - int histo[]) { - const __m128i mults_r = _mm_set1_epi16(CST_5b(red_to_blue)); - const __m128i mults_g = _mm_set1_epi16(CST_5b(green_to_blue)); - const __m128i mask_g = _mm_set1_epi16((short)0xff00); // green mask - const __m128i mask_gb = _mm_set1_epi32(0xffff); // green/blue mask - const __m128i mask_b = _mm_set1_epi16(0x00ff); // blue mask - const __m128i shuffler_lo = _mm_setr_epi8(-1, 2, -1, 6, -1, 10, -1, 14, -1, - -1, -1, -1, -1, -1, -1, -1); - const __m128i shuffler_hi = _mm_setr_epi8(-1, -1, -1, -1, -1, -1, -1, -1, -1, - 2, -1, 6, -1, 10, -1, 14); - int y; - for (y = 0; y < tile_height; ++y) { - const uint32_t* const src = argb + y * stride; - int i, x; - for (x = 0; x + SPAN <= tile_width; x += SPAN) { - uint16_t values[SPAN]; - const __m128i in0 = _mm_loadu_si128((__m128i*)&src[x + 0]); - const __m128i in1 = _mm_loadu_si128((__m128i*)&src[x + SPAN / 2]); - const __m128i r0 = _mm_shuffle_epi8(in0, shuffler_lo); - const __m128i r1 = _mm_shuffle_epi8(in1, shuffler_hi); - const __m128i r = _mm_or_si128(r0, r1); // r 0 - const __m128i gb0 = _mm_and_si128(in0, mask_gb); - const __m128i gb1 = _mm_and_si128(in1, mask_gb); - const __m128i gb = _mm_packus_epi32(gb0, gb1); // g b - const __m128i g = _mm_and_si128(gb, mask_g); // g 0 - const __m128i A = _mm_mulhi_epi16(r, mults_r); // x dbr - const __m128i B = _mm_mulhi_epi16(g, mults_g); // x dbg - const __m128i C = _mm_sub_epi8(gb, B); // x b' - const __m128i D = _mm_sub_epi8(C, A); // x b'' - const __m128i E = _mm_and_si128(D, mask_b); // 0 b'' - _mm_storeu_si128((__m128i*)values, E); - for (i = 0; i < SPAN; ++i) ++histo[values[i]]; - } - } - { - const int left_over = tile_width & (SPAN - 1); - if (left_over > 0) { - VP8LCollectColorBlueTransforms_C(argb + tile_width - left_over, stride, - left_over, tile_height, - green_to_blue, red_to_blue, histo); - } - } -} - -static void CollectColorRedTransforms_SSE41(const uint32_t* argb, int stride, - int tile_width, int tile_height, - int green_to_red, int histo[]) { - const __m128i mults_g = _mm_set1_epi16(CST_5b(green_to_red)); - const __m128i mask_g = _mm_set1_epi32(0x00ff00); // green mask - const __m128i mask = _mm_set1_epi16(0xff); - - int y; - for (y = 0; y < tile_height; ++y) { - const uint32_t* const src = argb + y * stride; - int i, x; - for (x = 0; x + SPAN <= tile_width; x += SPAN) { - uint16_t values[SPAN]; - const __m128i in0 = _mm_loadu_si128((__m128i*)&src[x + 0]); - const __m128i in1 = _mm_loadu_si128((__m128i*)&src[x + SPAN / 2]); - const __m128i g0 = _mm_and_si128(in0, mask_g); // 0 0 | g 0 - const __m128i g1 = _mm_and_si128(in1, mask_g); - const __m128i g = _mm_packus_epi32(g0, g1); // g 0 - const __m128i A0 = _mm_srli_epi32(in0, 16); // 0 0 | x r - const __m128i A1 = _mm_srli_epi32(in1, 16); - const __m128i A = _mm_packus_epi32(A0, A1); // x r - const __m128i B = _mm_mulhi_epi16(g, mults_g); // x dr - const __m128i C = _mm_sub_epi8(A, B); // x r' - const __m128i D = _mm_and_si128(C, mask); // 0 r' - _mm_storeu_si128((__m128i*)values, D); - for (i = 0; i < SPAN; ++i) ++histo[values[i]]; - } - } - { - const int left_over = tile_width & (SPAN - 1); - if (left_over > 0) { - VP8LCollectColorRedTransforms_C(argb + tile_width - left_over, stride, - left_over, tile_height, green_to_red, - histo); - } - } -} - -//------------------------------------------------------------------------------ -// Entry point - -extern void VP8LEncDspInitSSE41(void); - -WEBP_TSAN_IGNORE_FUNCTION void VP8LEncDspInitSSE41(void) { - VP8LSubtractGreenFromBlueAndRed = SubtractGreenFromBlueAndRed_SSE41; - VP8LCollectColorBlueTransforms = CollectColorBlueTransforms_SSE41; - VP8LCollectColorRedTransforms = CollectColorRedTransforms_SSE41; -} - -#else // !WEBP_USE_SSE41 - -WEBP_DSP_INIT_STUB(VP8LEncDspInitSSE41) - -#endif // WEBP_USE_SSE41 diff --git a/Extended/libwebp/src/dsp/lossless_mips_dsp_r2.c b/Extended/libwebp/src/dsp/lossless_mips_dsp_r2.c deleted file mode 100644 index 9888854..0000000 --- a/Extended/libwebp/src/dsp/lossless_mips_dsp_r2.c +++ /dev/null @@ -1,696 +0,0 @@ -// Copyright 2014 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Image transforms and color space conversion methods for lossless decoder. -// -// Author(s): Djordje Pesut (djordje.pesut@imgtec.com) -// Jovan Zelincevic (jovan.zelincevic@imgtec.com) - -#include "src/dsp/dsp.h" - -#if defined(WEBP_USE_MIPS_DSP_R2) - -#include "src/dsp/lossless.h" -#include "src/dsp/lossless_common.h" - -#define MAP_COLOR_FUNCS(FUNC_NAME, TYPE, GET_INDEX, GET_VALUE) \ -static void FUNC_NAME(const TYPE* src, \ - const uint32_t* const color_map, \ - TYPE* dst, int y_start, int y_end, \ - int width) { \ - int y; \ - for (y = y_start; y < y_end; ++y) { \ - int x; \ - for (x = 0; x < (width >> 2); ++x) { \ - int tmp1, tmp2, tmp3, tmp4; \ - __asm__ volatile ( \ - ".ifc " #TYPE ", uint8_t \n\t" \ - "lbu %[tmp1], 0(%[src]) \n\t" \ - "lbu %[tmp2], 1(%[src]) \n\t" \ - "lbu %[tmp3], 2(%[src]) \n\t" \ - "lbu %[tmp4], 3(%[src]) \n\t" \ - "addiu %[src], %[src], 4 \n\t" \ - ".endif \n\t" \ - ".ifc " #TYPE ", uint32_t \n\t" \ - "lw %[tmp1], 0(%[src]) \n\t" \ - "lw %[tmp2], 4(%[src]) \n\t" \ - "lw %[tmp3], 8(%[src]) \n\t" \ - "lw %[tmp4], 12(%[src]) \n\t" \ - "ext %[tmp1], %[tmp1], 8, 8 \n\t" \ - "ext %[tmp2], %[tmp2], 8, 8 \n\t" \ - "ext %[tmp3], %[tmp3], 8, 8 \n\t" \ - "ext %[tmp4], %[tmp4], 8, 8 \n\t" \ - "addiu %[src], %[src], 16 \n\t" \ - ".endif \n\t" \ - "sll %[tmp1], %[tmp1], 2 \n\t" \ - "sll %[tmp2], %[tmp2], 2 \n\t" \ - "sll %[tmp3], %[tmp3], 2 \n\t" \ - "sll %[tmp4], %[tmp4], 2 \n\t" \ - "lwx %[tmp1], %[tmp1](%[color_map]) \n\t" \ - "lwx %[tmp2], %[tmp2](%[color_map]) \n\t" \ - "lwx %[tmp3], %[tmp3](%[color_map]) \n\t" \ - "lwx %[tmp4], %[tmp4](%[color_map]) \n\t" \ - ".ifc " #TYPE ", uint8_t \n\t" \ - "ext %[tmp1], %[tmp1], 8, 8 \n\t" \ - "ext %[tmp2], %[tmp2], 8, 8 \n\t" \ - "ext %[tmp3], %[tmp3], 8, 8 \n\t" \ - "ext %[tmp4], %[tmp4], 8, 8 \n\t" \ - "sb %[tmp1], 0(%[dst]) \n\t" \ - "sb %[tmp2], 1(%[dst]) \n\t" \ - "sb %[tmp3], 2(%[dst]) \n\t" \ - "sb %[tmp4], 3(%[dst]) \n\t" \ - "addiu %[dst], %[dst], 4 \n\t" \ - ".endif \n\t" \ - ".ifc " #TYPE ", uint32_t \n\t" \ - "sw %[tmp1], 0(%[dst]) \n\t" \ - "sw %[tmp2], 4(%[dst]) \n\t" \ - "sw %[tmp3], 8(%[dst]) \n\t" \ - "sw %[tmp4], 12(%[dst]) \n\t" \ - "addiu %[dst], %[dst], 16 \n\t" \ - ".endif \n\t" \ - : [tmp1]"=&r"(tmp1), [tmp2]"=&r"(tmp2), [tmp3]"=&r"(tmp3), \ - [tmp4]"=&r"(tmp4), [src]"+&r"(src), [dst]"+r"(dst) \ - : [color_map]"r"(color_map) \ - : "memory" \ - ); \ - } \ - for (x = 0; x < (width & 3); ++x) { \ - *dst++ = GET_VALUE(color_map[GET_INDEX(*src++)]); \ - } \ - } \ -} - -MAP_COLOR_FUNCS(MapARGB_MIPSdspR2, uint32_t, VP8GetARGBIndex, VP8GetARGBValue) -MAP_COLOR_FUNCS(MapAlpha_MIPSdspR2, uint8_t, VP8GetAlphaIndex, VP8GetAlphaValue) - -#undef MAP_COLOR_FUNCS - -static WEBP_INLINE uint32_t ClampedAddSubtractFull(uint32_t c0, uint32_t c1, - uint32_t c2) { - int temp0, temp1, temp2, temp3, temp4, temp5; - __asm__ volatile ( - "preceu.ph.qbr %[temp1], %[c0] \n\t" - "preceu.ph.qbl %[temp2], %[c0] \n\t" - "preceu.ph.qbr %[temp3], %[c1] \n\t" - "preceu.ph.qbl %[temp4], %[c1] \n\t" - "preceu.ph.qbr %[temp5], %[c2] \n\t" - "preceu.ph.qbl %[temp0], %[c2] \n\t" - "subq.ph %[temp3], %[temp3], %[temp5] \n\t" - "subq.ph %[temp4], %[temp4], %[temp0] \n\t" - "addq.ph %[temp1], %[temp1], %[temp3] \n\t" - "addq.ph %[temp2], %[temp2], %[temp4] \n\t" - "shll_s.ph %[temp1], %[temp1], 7 \n\t" - "shll_s.ph %[temp2], %[temp2], 7 \n\t" - "precrqu_s.qb.ph %[temp2], %[temp2], %[temp1] \n\t" - : [temp0]"=r"(temp0), [temp1]"=&r"(temp1), [temp2]"=&r"(temp2), - [temp3]"=&r"(temp3), [temp4]"=&r"(temp4), [temp5]"=&r"(temp5) - : [c0]"r"(c0), [c1]"r"(c1), [c2]"r"(c2) - : "memory" - ); - return temp2; -} - -static WEBP_INLINE uint32_t ClampedAddSubtractHalf(uint32_t c0, uint32_t c1, - uint32_t c2) { - int temp0, temp1, temp2, temp3, temp4, temp5; - __asm__ volatile ( - "adduh.qb %[temp5], %[c0], %[c1] \n\t" - "preceu.ph.qbr %[temp3], %[c2] \n\t" - "preceu.ph.qbr %[temp1], %[temp5] \n\t" - "preceu.ph.qbl %[temp2], %[temp5] \n\t" - "preceu.ph.qbl %[temp4], %[c2] \n\t" - "subq.ph %[temp3], %[temp1], %[temp3] \n\t" - "subq.ph %[temp4], %[temp2], %[temp4] \n\t" - "shrl.ph %[temp5], %[temp3], 15 \n\t" - "shrl.ph %[temp0], %[temp4], 15 \n\t" - "addq.ph %[temp3], %[temp3], %[temp5] \n\t" - "addq.ph %[temp4], %[temp0], %[temp4] \n\t" - "shra.ph %[temp3], %[temp3], 1 \n\t" - "shra.ph %[temp4], %[temp4], 1 \n\t" - "addq.ph %[temp1], %[temp1], %[temp3] \n\t" - "addq.ph %[temp2], %[temp2], %[temp4] \n\t" - "shll_s.ph %[temp1], %[temp1], 7 \n\t" - "shll_s.ph %[temp2], %[temp2], 7 \n\t" - "precrqu_s.qb.ph %[temp1], %[temp2], %[temp1] \n\t" - : [temp0]"=r"(temp0), [temp1]"=&r"(temp1), [temp2]"=&r"(temp2), - [temp3]"=&r"(temp3), [temp4]"=r"(temp4), [temp5]"=&r"(temp5) - : [c0]"r"(c0), [c1]"r"(c1), [c2]"r"(c2) - : "memory" - ); - return temp1; -} - -static WEBP_INLINE uint32_t Select(uint32_t a, uint32_t b, uint32_t c) { - int temp0, temp1, temp2, temp3, temp4, temp5; - __asm__ volatile ( - "cmpgdu.lt.qb %[temp1], %[c], %[b] \n\t" - "pick.qb %[temp1], %[b], %[c] \n\t" - "pick.qb %[temp2], %[c], %[b] \n\t" - "cmpgdu.lt.qb %[temp4], %[c], %[a] \n\t" - "pick.qb %[temp4], %[a], %[c] \n\t" - "pick.qb %[temp5], %[c], %[a] \n\t" - "subu.qb %[temp3], %[temp1], %[temp2] \n\t" - "subu.qb %[temp0], %[temp4], %[temp5] \n\t" - "raddu.w.qb %[temp3], %[temp3] \n\t" - "raddu.w.qb %[temp0], %[temp0] \n\t" - "subu %[temp3], %[temp3], %[temp0] \n\t" - "slti %[temp0], %[temp3], 0x1 \n\t" - "movz %[a], %[b], %[temp0] \n\t" - : [temp1]"=&r"(temp1), [temp2]"=&r"(temp2), [temp3]"=&r"(temp3), - [temp4]"=&r"(temp4), [temp5]"=&r"(temp5), [temp0]"=&r"(temp0), - [a]"+&r"(a) - : [b]"r"(b), [c]"r"(c) - ); - return a; -} - -static WEBP_INLINE uint32_t Average2(uint32_t a0, uint32_t a1) { - __asm__ volatile ( - "adduh.qb %[a0], %[a0], %[a1] \n\t" - : [a0]"+r"(a0) - : [a1]"r"(a1) - ); - return a0; -} - -static WEBP_INLINE uint32_t Average3(uint32_t a0, uint32_t a1, uint32_t a2) { - return Average2(Average2(a0, a2), a1); -} - -static WEBP_INLINE uint32_t Average4(uint32_t a0, uint32_t a1, - uint32_t a2, uint32_t a3) { - return Average2(Average2(a0, a1), Average2(a2, a3)); -} - -static uint32_t Predictor5_MIPSdspR2(uint32_t left, const uint32_t* const top) { - return Average3(left, top[0], top[1]); -} - -static uint32_t Predictor6_MIPSdspR2(uint32_t left, const uint32_t* const top) { - return Average2(left, top[-1]); -} - -static uint32_t Predictor7_MIPSdspR2(uint32_t left, const uint32_t* const top) { - return Average2(left, top[0]); -} - -static uint32_t Predictor8_MIPSdspR2(uint32_t left, const uint32_t* const top) { - (void)left; - return Average2(top[-1], top[0]); -} - -static uint32_t Predictor9_MIPSdspR2(uint32_t left, const uint32_t* const top) { - (void)left; - return Average2(top[0], top[1]); -} - -static uint32_t Predictor10_MIPSdspR2(uint32_t left, - const uint32_t* const top) { - return Average4(left, top[-1], top[0], top[1]); -} - -static uint32_t Predictor11_MIPSdspR2(uint32_t left, - const uint32_t* const top) { - return Select(top[0], left, top[-1]); -} - -static uint32_t Predictor12_MIPSdspR2(uint32_t left, - const uint32_t* const top) { - return ClampedAddSubtractFull(left, top[0], top[-1]); -} - -static uint32_t Predictor13_MIPSdspR2(uint32_t left, - const uint32_t* const top) { - return ClampedAddSubtractHalf(left, top[0], top[-1]); -} - -// Add green to blue and red channels (i.e. perform the inverse transform of -// 'subtract green'). -static void AddGreenToBlueAndRed_MIPSdspR2(const uint32_t* src, int num_pixels, - uint32_t* dst) { - uint32_t temp0, temp1, temp2, temp3, temp4, temp5, temp6, temp7; - const uint32_t* const p_loop1_end = src + (num_pixels & ~3); - const uint32_t* const p_loop2_end = src + num_pixels; - __asm__ volatile ( - ".set push \n\t" - ".set noreorder \n\t" - "beq %[src], %[p_loop1_end], 3f \n\t" - " nop \n\t" - "0: \n\t" - "lw %[temp0], 0(%[src]) \n\t" - "lw %[temp1], 4(%[src]) \n\t" - "lw %[temp2], 8(%[src]) \n\t" - "lw %[temp3], 12(%[src]) \n\t" - "ext %[temp4], %[temp0], 8, 8 \n\t" - "ext %[temp5], %[temp1], 8, 8 \n\t" - "ext %[temp6], %[temp2], 8, 8 \n\t" - "ext %[temp7], %[temp3], 8, 8 \n\t" - "addiu %[src], %[src], 16 \n\t" - "addiu %[dst], %[dst], 16 \n\t" - "replv.ph %[temp4], %[temp4] \n\t" - "replv.ph %[temp5], %[temp5] \n\t" - "replv.ph %[temp6], %[temp6] \n\t" - "replv.ph %[temp7], %[temp7] \n\t" - "addu.qb %[temp0], %[temp0], %[temp4] \n\t" - "addu.qb %[temp1], %[temp1], %[temp5] \n\t" - "addu.qb %[temp2], %[temp2], %[temp6] \n\t" - "addu.qb %[temp3], %[temp3], %[temp7] \n\t" - "sw %[temp0], -16(%[dst]) \n\t" - "sw %[temp1], -12(%[dst]) \n\t" - "sw %[temp2], -8(%[dst]) \n\t" - "bne %[src], %[p_loop1_end], 0b \n\t" - " sw %[temp3], -4(%[dst]) \n\t" - "3: \n\t" - "beq %[src], %[p_loop2_end], 2f \n\t" - " nop \n\t" - "1: \n\t" - "lw %[temp0], 0(%[src]) \n\t" - "addiu %[src], %[src], 4 \n\t" - "addiu %[dst], %[dst], 4 \n\t" - "ext %[temp4], %[temp0], 8, 8 \n\t" - "replv.ph %[temp4], %[temp4] \n\t" - "addu.qb %[temp0], %[temp0], %[temp4] \n\t" - "bne %[src], %[p_loop2_end], 1b \n\t" - " sw %[temp0], -4(%[dst]) \n\t" - "2: \n\t" - ".set pop \n\t" - : [dst]"+&r"(dst), [src]"+&r"(src), [temp0]"=&r"(temp0), - [temp1]"=&r"(temp1), [temp2]"=&r"(temp2), [temp3]"=&r"(temp3), - [temp4]"=&r"(temp4), [temp5]"=&r"(temp5), [temp6]"=&r"(temp6), - [temp7]"=&r"(temp7) - : [p_loop1_end]"r"(p_loop1_end), [p_loop2_end]"r"(p_loop2_end) - : "memory" - ); -} - -static void TransformColorInverse_MIPSdspR2(const VP8LMultipliers* const m, - const uint32_t* src, int num_pixels, - uint32_t* dst) { - int temp0, temp1, temp2, temp3, temp4, temp5; - uint32_t argb, argb1, new_red; - const uint32_t G_to_R = m->green_to_red_; - const uint32_t G_to_B = m->green_to_blue_; - const uint32_t R_to_B = m->red_to_blue_; - const uint32_t* const p_loop_end = src + (num_pixels & ~1); - __asm__ volatile ( - ".set push \n\t" - ".set noreorder \n\t" - "beq %[src], %[p_loop_end], 1f \n\t" - " nop \n\t" - "replv.ph %[temp0], %[G_to_R] \n\t" - "replv.ph %[temp1], %[G_to_B] \n\t" - "replv.ph %[temp2], %[R_to_B] \n\t" - "shll.ph %[temp0], %[temp0], 8 \n\t" - "shll.ph %[temp1], %[temp1], 8 \n\t" - "shll.ph %[temp2], %[temp2], 8 \n\t" - "shra.ph %[temp0], %[temp0], 8 \n\t" - "shra.ph %[temp1], %[temp1], 8 \n\t" - "shra.ph %[temp2], %[temp2], 8 \n\t" - "0: \n\t" - "lw %[argb], 0(%[src]) \n\t" - "lw %[argb1], 4(%[src]) \n\t" - "sw %[argb], 0(%[dst]) \n\t" - "sw %[argb1], 4(%[dst]) \n\t" - "addiu %[src], %[src], 8 \n\t" - "addiu %[dst], %[dst], 8 \n\t" - "precrq.qb.ph %[temp3], %[argb], %[argb1] \n\t" - "preceu.ph.qbra %[temp3], %[temp3] \n\t" - "shll.ph %[temp3], %[temp3], 8 \n\t" - "shra.ph %[temp3], %[temp3], 8 \n\t" - "mul.ph %[temp5], %[temp3], %[temp0] \n\t" - "mul.ph %[temp3], %[temp3], %[temp1] \n\t" - "precrq.ph.w %[new_red], %[argb], %[argb1] \n\t" - "ins %[argb1], %[argb], 16, 16 \n\t" - "shra.ph %[temp5], %[temp5], 5 \n\t" - "shra.ph %[temp3], %[temp3], 5 \n\t" - "addu.ph %[new_red], %[new_red], %[temp5] \n\t" - "addu.ph %[argb1], %[argb1], %[temp3] \n\t" - "preceu.ph.qbra %[temp5], %[new_red] \n\t" - "shll.ph %[temp4], %[temp5], 8 \n\t" - "shra.ph %[temp4], %[temp4], 8 \n\t" - "mul.ph %[temp4], %[temp4], %[temp2] \n\t" - "sb %[temp5], -2(%[dst]) \n\t" - "sra %[temp5], %[temp5], 16 \n\t" - "shra.ph %[temp4], %[temp4], 5 \n\t" - "addu.ph %[argb1], %[argb1], %[temp4] \n\t" - "preceu.ph.qbra %[temp3], %[argb1] \n\t" - "sb %[temp5], -6(%[dst]) \n\t" - "sb %[temp3], -4(%[dst]) \n\t" - "sra %[temp3], %[temp3], 16 \n\t" - "bne %[src], %[p_loop_end], 0b \n\t" - " sb %[temp3], -8(%[dst]) \n\t" - "1: \n\t" - ".set pop \n\t" - : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [temp2]"=&r"(temp2), - [temp3]"=&r"(temp3), [temp4]"=&r"(temp4), [temp5]"=&r"(temp5), - [new_red]"=&r"(new_red), [argb]"=&r"(argb), - [argb1]"=&r"(argb1), [dst]"+&r"(dst), [src]"+&r"(src) - : [G_to_R]"r"(G_to_R), [R_to_B]"r"(R_to_B), - [G_to_B]"r"(G_to_B), [p_loop_end]"r"(p_loop_end) - : "memory", "hi", "lo" - ); - - // Fall-back to C-version for left-overs. - if (num_pixels & 1) VP8LTransformColorInverse_C(m, src, 1, dst); -} - -static void ConvertBGRAToRGB_MIPSdspR2(const uint32_t* src, - int num_pixels, uint8_t* dst) { - int temp0, temp1, temp2, temp3; - const uint32_t* const p_loop1_end = src + (num_pixels & ~3); - const uint32_t* const p_loop2_end = src + num_pixels; - __asm__ volatile ( - ".set push \n\t" - ".set noreorder \n\t" - "beq %[src], %[p_loop1_end], 3f \n\t" - " nop \n\t" - "0: \n\t" - "lw %[temp3], 12(%[src]) \n\t" - "lw %[temp2], 8(%[src]) \n\t" - "lw %[temp1], 4(%[src]) \n\t" - "lw %[temp0], 0(%[src]) \n\t" - "ins %[temp3], %[temp2], 24, 8 \n\t" - "sll %[temp2], %[temp2], 8 \n\t" - "rotr %[temp3], %[temp3], 16 \n\t" - "ins %[temp2], %[temp1], 0, 16 \n\t" - "sll %[temp1], %[temp1], 8 \n\t" - "wsbh %[temp3], %[temp3] \n\t" - "balign %[temp0], %[temp1], 1 \n\t" - "wsbh %[temp2], %[temp2] \n\t" - "wsbh %[temp0], %[temp0] \n\t" - "usw %[temp3], 8(%[dst]) \n\t" - "rotr %[temp0], %[temp0], 16 \n\t" - "usw %[temp2], 4(%[dst]) \n\t" - "addiu %[src], %[src], 16 \n\t" - "usw %[temp0], 0(%[dst]) \n\t" - "bne %[src], %[p_loop1_end], 0b \n\t" - " addiu %[dst], %[dst], 12 \n\t" - "3: \n\t" - "beq %[src], %[p_loop2_end], 2f \n\t" - " nop \n\t" - "1: \n\t" - "lw %[temp0], 0(%[src]) \n\t" - "addiu %[src], %[src], 4 \n\t" - "wsbh %[temp1], %[temp0] \n\t" - "addiu %[dst], %[dst], 3 \n\t" - "ush %[temp1], -2(%[dst]) \n\t" - "sra %[temp0], %[temp0], 16 \n\t" - "bne %[src], %[p_loop2_end], 1b \n\t" - " sb %[temp0], -3(%[dst]) \n\t" - "2: \n\t" - ".set pop \n\t" - : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [temp2]"=&r"(temp2), - [temp3]"=&r"(temp3), [dst]"+&r"(dst), [src]"+&r"(src) - : [p_loop1_end]"r"(p_loop1_end), [p_loop2_end]"r"(p_loop2_end) - : "memory" - ); -} - -static void ConvertBGRAToRGBA_MIPSdspR2(const uint32_t* src, - int num_pixels, uint8_t* dst) { - int temp0, temp1, temp2, temp3; - const uint32_t* const p_loop1_end = src + (num_pixels & ~3); - const uint32_t* const p_loop2_end = src + num_pixels; - __asm__ volatile ( - ".set push \n\t" - ".set noreorder \n\t" - "beq %[src], %[p_loop1_end], 3f \n\t" - " nop \n\t" - "0: \n\t" - "lw %[temp0], 0(%[src]) \n\t" - "lw %[temp1], 4(%[src]) \n\t" - "lw %[temp2], 8(%[src]) \n\t" - "lw %[temp3], 12(%[src]) \n\t" - "wsbh %[temp0], %[temp0] \n\t" - "wsbh %[temp1], %[temp1] \n\t" - "wsbh %[temp2], %[temp2] \n\t" - "wsbh %[temp3], %[temp3] \n\t" - "addiu %[src], %[src], 16 \n\t" - "balign %[temp0], %[temp0], 1 \n\t" - "balign %[temp1], %[temp1], 1 \n\t" - "balign %[temp2], %[temp2], 1 \n\t" - "balign %[temp3], %[temp3], 1 \n\t" - "usw %[temp0], 0(%[dst]) \n\t" - "usw %[temp1], 4(%[dst]) \n\t" - "usw %[temp2], 8(%[dst]) \n\t" - "usw %[temp3], 12(%[dst]) \n\t" - "bne %[src], %[p_loop1_end], 0b \n\t" - " addiu %[dst], %[dst], 16 \n\t" - "3: \n\t" - "beq %[src], %[p_loop2_end], 2f \n\t" - " nop \n\t" - "1: \n\t" - "lw %[temp0], 0(%[src]) \n\t" - "wsbh %[temp0], %[temp0] \n\t" - "addiu %[src], %[src], 4 \n\t" - "balign %[temp0], %[temp0], 1 \n\t" - "usw %[temp0], 0(%[dst]) \n\t" - "bne %[src], %[p_loop2_end], 1b \n\t" - " addiu %[dst], %[dst], 4 \n\t" - "2: \n\t" - ".set pop \n\t" - : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [temp2]"=&r"(temp2), - [temp3]"=&r"(temp3), [dst]"+&r"(dst), [src]"+&r"(src) - : [p_loop1_end]"r"(p_loop1_end), [p_loop2_end]"r"(p_loop2_end) - : "memory" - ); -} - -static void ConvertBGRAToRGBA4444_MIPSdspR2(const uint32_t* src, - int num_pixels, uint8_t* dst) { - int temp0, temp1, temp2, temp3, temp4, temp5; - const uint32_t* const p_loop1_end = src + (num_pixels & ~3); - const uint32_t* const p_loop2_end = src + num_pixels; - __asm__ volatile ( - ".set push \n\t" - ".set noreorder \n\t" - "beq %[src], %[p_loop1_end], 3f \n\t" - " nop \n\t" - "0: \n\t" - "lw %[temp0], 0(%[src]) \n\t" - "lw %[temp1], 4(%[src]) \n\t" - "lw %[temp2], 8(%[src]) \n\t" - "lw %[temp3], 12(%[src]) \n\t" - "ext %[temp4], %[temp0], 28, 4 \n\t" - "ext %[temp5], %[temp0], 12, 4 \n\t" - "ins %[temp0], %[temp4], 0, 4 \n\t" - "ext %[temp4], %[temp1], 28, 4 \n\t" - "ins %[temp0], %[temp5], 16, 4 \n\t" - "ext %[temp5], %[temp1], 12, 4 \n\t" - "ins %[temp1], %[temp4], 0, 4 \n\t" - "ext %[temp4], %[temp2], 28, 4 \n\t" - "ins %[temp1], %[temp5], 16, 4 \n\t" - "ext %[temp5], %[temp2], 12, 4 \n\t" - "ins %[temp2], %[temp4], 0, 4 \n\t" - "ext %[temp4], %[temp3], 28, 4 \n\t" - "ins %[temp2], %[temp5], 16, 4 \n\t" - "ext %[temp5], %[temp3], 12, 4 \n\t" - "ins %[temp3], %[temp4], 0, 4 \n\t" - "precr.qb.ph %[temp1], %[temp1], %[temp0] \n\t" - "ins %[temp3], %[temp5], 16, 4 \n\t" - "addiu %[src], %[src], 16 \n\t" - "precr.qb.ph %[temp3], %[temp3], %[temp2] \n\t" -#if (WEBP_SWAP_16BIT_CSP == 1) - "usw %[temp1], 0(%[dst]) \n\t" - "usw %[temp3], 4(%[dst]) \n\t" -#else - "wsbh %[temp1], %[temp1] \n\t" - "wsbh %[temp3], %[temp3] \n\t" - "usw %[temp1], 0(%[dst]) \n\t" - "usw %[temp3], 4(%[dst]) \n\t" -#endif - "bne %[src], %[p_loop1_end], 0b \n\t" - " addiu %[dst], %[dst], 8 \n\t" - "3: \n\t" - "beq %[src], %[p_loop2_end], 2f \n\t" - " nop \n\t" - "1: \n\t" - "lw %[temp0], 0(%[src]) \n\t" - "ext %[temp4], %[temp0], 28, 4 \n\t" - "ext %[temp5], %[temp0], 12, 4 \n\t" - "ins %[temp0], %[temp4], 0, 4 \n\t" - "ins %[temp0], %[temp5], 16, 4 \n\t" - "addiu %[src], %[src], 4 \n\t" - "precr.qb.ph %[temp0], %[temp0], %[temp0] \n\t" -#if (WEBP_SWAP_16BIT_CSP == 1) - "ush %[temp0], 0(%[dst]) \n\t" -#else - "wsbh %[temp0], %[temp0] \n\t" - "ush %[temp0], 0(%[dst]) \n\t" -#endif - "bne %[src], %[p_loop2_end], 1b \n\t" - " addiu %[dst], %[dst], 2 \n\t" - "2: \n\t" - ".set pop \n\t" - : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [temp2]"=&r"(temp2), - [temp3]"=&r"(temp3), [temp4]"=&r"(temp4), [temp5]"=&r"(temp5), - [dst]"+&r"(dst), [src]"+&r"(src) - : [p_loop1_end]"r"(p_loop1_end), [p_loop2_end]"r"(p_loop2_end) - : "memory" - ); -} - -static void ConvertBGRAToRGB565_MIPSdspR2(const uint32_t* src, - int num_pixels, uint8_t* dst) { - int temp0, temp1, temp2, temp3, temp4, temp5; - const uint32_t* const p_loop1_end = src + (num_pixels & ~3); - const uint32_t* const p_loop2_end = src + num_pixels; - __asm__ volatile ( - ".set push \n\t" - ".set noreorder \n\t" - "beq %[src], %[p_loop1_end], 3f \n\t" - " nop \n\t" - "0: \n\t" - "lw %[temp0], 0(%[src]) \n\t" - "lw %[temp1], 4(%[src]) \n\t" - "lw %[temp2], 8(%[src]) \n\t" - "lw %[temp3], 12(%[src]) \n\t" - "ext %[temp4], %[temp0], 8, 16 \n\t" - "ext %[temp5], %[temp0], 5, 11 \n\t" - "ext %[temp0], %[temp0], 3, 5 \n\t" - "ins %[temp4], %[temp5], 0, 11 \n\t" - "ext %[temp5], %[temp1], 5, 11 \n\t" - "ins %[temp4], %[temp0], 0, 5 \n\t" - "ext %[temp0], %[temp1], 8, 16 \n\t" - "ext %[temp1], %[temp1], 3, 5 \n\t" - "ins %[temp0], %[temp5], 0, 11 \n\t" - "ext %[temp5], %[temp2], 5, 11 \n\t" - "ins %[temp0], %[temp1], 0, 5 \n\t" - "ext %[temp1], %[temp2], 8, 16 \n\t" - "ext %[temp2], %[temp2], 3, 5 \n\t" - "ins %[temp1], %[temp5], 0, 11 \n\t" - "ext %[temp5], %[temp3], 5, 11 \n\t" - "ins %[temp1], %[temp2], 0, 5 \n\t" - "ext %[temp2], %[temp3], 8, 16 \n\t" - "ext %[temp3], %[temp3], 3, 5 \n\t" - "ins %[temp2], %[temp5], 0, 11 \n\t" - "append %[temp0], %[temp4], 16 \n\t" - "ins %[temp2], %[temp3], 0, 5 \n\t" - "addiu %[src], %[src], 16 \n\t" - "append %[temp2], %[temp1], 16 \n\t" -#if (WEBP_SWAP_16BIT_CSP == 1) - "usw %[temp0], 0(%[dst]) \n\t" - "usw %[temp2], 4(%[dst]) \n\t" -#else - "wsbh %[temp0], %[temp0] \n\t" - "wsbh %[temp2], %[temp2] \n\t" - "usw %[temp0], 0(%[dst]) \n\t" - "usw %[temp2], 4(%[dst]) \n\t" -#endif - "bne %[src], %[p_loop1_end], 0b \n\t" - " addiu %[dst], %[dst], 8 \n\t" - "3: \n\t" - "beq %[src], %[p_loop2_end], 2f \n\t" - " nop \n\t" - "1: \n\t" - "lw %[temp0], 0(%[src]) \n\t" - "ext %[temp4], %[temp0], 8, 16 \n\t" - "ext %[temp5], %[temp0], 5, 11 \n\t" - "ext %[temp0], %[temp0], 3, 5 \n\t" - "ins %[temp4], %[temp5], 0, 11 \n\t" - "addiu %[src], %[src], 4 \n\t" - "ins %[temp4], %[temp0], 0, 5 \n\t" -#if (WEBP_SWAP_16BIT_CSP == 1) - "ush %[temp4], 0(%[dst]) \n\t" -#else - "wsbh %[temp4], %[temp4] \n\t" - "ush %[temp4], 0(%[dst]) \n\t" -#endif - "bne %[src], %[p_loop2_end], 1b \n\t" - " addiu %[dst], %[dst], 2 \n\t" - "2: \n\t" - ".set pop \n\t" - : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [temp2]"=&r"(temp2), - [temp3]"=&r"(temp3), [temp4]"=&r"(temp4), [temp5]"=&r"(temp5), - [dst]"+&r"(dst), [src]"+&r"(src) - : [p_loop1_end]"r"(p_loop1_end), [p_loop2_end]"r"(p_loop2_end) - : "memory" - ); -} - -static void ConvertBGRAToBGR_MIPSdspR2(const uint32_t* src, - int num_pixels, uint8_t* dst) { - int temp0, temp1, temp2, temp3; - const uint32_t* const p_loop1_end = src + (num_pixels & ~3); - const uint32_t* const p_loop2_end = src + num_pixels; - __asm__ volatile ( - ".set push \n\t" - ".set noreorder \n\t" - "beq %[src], %[p_loop1_end], 3f \n\t" - " nop \n\t" - "0: \n\t" - "lw %[temp0], 0(%[src]) \n\t" - "lw %[temp1], 4(%[src]) \n\t" - "lw %[temp2], 8(%[src]) \n\t" - "lw %[temp3], 12(%[src]) \n\t" - "ins %[temp0], %[temp1], 24, 8 \n\t" - "sra %[temp1], %[temp1], 8 \n\t" - "ins %[temp1], %[temp2], 16, 16 \n\t" - "sll %[temp2], %[temp2], 8 \n\t" - "balign %[temp3], %[temp2], 1 \n\t" - "addiu %[src], %[src], 16 \n\t" - "usw %[temp0], 0(%[dst]) \n\t" - "usw %[temp1], 4(%[dst]) \n\t" - "usw %[temp3], 8(%[dst]) \n\t" - "bne %[src], %[p_loop1_end], 0b \n\t" - " addiu %[dst], %[dst], 12 \n\t" - "3: \n\t" - "beq %[src], %[p_loop2_end], 2f \n\t" - " nop \n\t" - "1: \n\t" - "lw %[temp0], 0(%[src]) \n\t" - "addiu %[src], %[src], 4 \n\t" - "addiu %[dst], %[dst], 3 \n\t" - "ush %[temp0], -3(%[dst]) \n\t" - "sra %[temp0], %[temp0], 16 \n\t" - "bne %[src], %[p_loop2_end], 1b \n\t" - " sb %[temp0], -1(%[dst]) \n\t" - "2: \n\t" - ".set pop \n\t" - : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [temp2]"=&r"(temp2), - [temp3]"=&r"(temp3), [dst]"+&r"(dst), [src]"+&r"(src) - : [p_loop1_end]"r"(p_loop1_end), [p_loop2_end]"r"(p_loop2_end) - : "memory" - ); -} - -//------------------------------------------------------------------------------ -// Entry point - -extern void VP8LDspInitMIPSdspR2(void); - -WEBP_TSAN_IGNORE_FUNCTION void VP8LDspInitMIPSdspR2(void) { - VP8LMapColor32b = MapARGB_MIPSdspR2; - VP8LMapColor8b = MapAlpha_MIPSdspR2; - - VP8LPredictors[5] = Predictor5_MIPSdspR2; - VP8LPredictors[6] = Predictor6_MIPSdspR2; - VP8LPredictors[7] = Predictor7_MIPSdspR2; - VP8LPredictors[8] = Predictor8_MIPSdspR2; - VP8LPredictors[9] = Predictor9_MIPSdspR2; - VP8LPredictors[10] = Predictor10_MIPSdspR2; - VP8LPredictors[11] = Predictor11_MIPSdspR2; - VP8LPredictors[12] = Predictor12_MIPSdspR2; - VP8LPredictors[13] = Predictor13_MIPSdspR2; - - VP8LAddGreenToBlueAndRed = AddGreenToBlueAndRed_MIPSdspR2; - VP8LTransformColorInverse = TransformColorInverse_MIPSdspR2; - - VP8LConvertBGRAToRGB = ConvertBGRAToRGB_MIPSdspR2; - VP8LConvertBGRAToRGBA = ConvertBGRAToRGBA_MIPSdspR2; - VP8LConvertBGRAToRGBA4444 = ConvertBGRAToRGBA4444_MIPSdspR2; - VP8LConvertBGRAToRGB565 = ConvertBGRAToRGB565_MIPSdspR2; - VP8LConvertBGRAToBGR = ConvertBGRAToBGR_MIPSdspR2; -} - -#else // !WEBP_USE_MIPS_DSP_R2 - -WEBP_DSP_INIT_STUB(VP8LDspInitMIPSdspR2) - -#endif // WEBP_USE_MIPS_DSP_R2 diff --git a/Extended/libwebp/src/dsp/lossless_msa.c b/Extended/libwebp/src/dsp/lossless_msa.c deleted file mode 100644 index 9f54720..0000000 --- a/Extended/libwebp/src/dsp/lossless_msa.c +++ /dev/null @@ -1,356 +0,0 @@ -// Copyright 2016 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// MSA variant of methods for lossless decoder -// -// Author: Prashant Patil (prashant.patil@imgtec.com) - -#include "src/dsp/dsp.h" - -#if defined(WEBP_USE_MSA) - -#include "src/dsp/lossless.h" -#include "src/dsp/msa_macro.h" - -//------------------------------------------------------------------------------ -// Colorspace conversion functions - -#define CONVERT16_BGRA_XXX(psrc, pdst, m0, m1, m2) do { \ - v16u8 src0, src1, src2, src3, dst0, dst1, dst2; \ - LD_UB4(psrc, 16, src0, src1, src2, src3); \ - VSHF_B2_UB(src0, src1, src1, src2, m0, m1, dst0, dst1); \ - dst2 = VSHF_UB(src2, src3, m2); \ - ST_UB2(dst0, dst1, pdst, 16); \ - ST_UB(dst2, pdst + 32); \ -} while (0) - -#define CONVERT12_BGRA_XXX(psrc, pdst, m0, m1, m2) do { \ - uint32_t pix_w; \ - v16u8 src0, src1, src2, dst0, dst1, dst2; \ - LD_UB3(psrc, 16, src0, src1, src2); \ - VSHF_B2_UB(src0, src1, src1, src2, m0, m1, dst0, dst1); \ - dst2 = VSHF_UB(src2, src2, m2); \ - ST_UB2(dst0, dst1, pdst, 16); \ - pix_w = __msa_copy_s_w((v4i32)dst2, 0); \ - SW(pix_w, pdst + 32); \ -} while (0) - -#define CONVERT8_BGRA_XXX(psrc, pdst, m0, m1) do { \ - uint64_t pix_d; \ - v16u8 src0, src1, src2 = { 0 }, dst0, dst1; \ - LD_UB2(psrc, 16, src0, src1); \ - VSHF_B2_UB(src0, src1, src1, src2, m0, m1, dst0, dst1); \ - ST_UB(dst0, pdst); \ - pix_d = __msa_copy_s_d((v2i64)dst1, 0); \ - SD(pix_d, pdst + 16); \ -} while (0) - -#define CONVERT4_BGRA_XXX(psrc, pdst, m) do { \ - const v16u8 src0 = LD_UB(psrc); \ - const v16u8 dst0 = VSHF_UB(src0, src0, m); \ - uint64_t pix_d = __msa_copy_s_d((v2i64)dst0, 0); \ - uint32_t pix_w = __msa_copy_s_w((v4i32)dst0, 2); \ - SD(pix_d, pdst + 0); \ - SW(pix_w, pdst + 8); \ -} while (0) - -#define CONVERT1_BGRA_BGR(psrc, pdst) do { \ - const int32_t b = (psrc)[0]; \ - const int32_t g = (psrc)[1]; \ - const int32_t r = (psrc)[2]; \ - (pdst)[0] = b; \ - (pdst)[1] = g; \ - (pdst)[2] = r; \ -} while (0) - -#define CONVERT1_BGRA_RGB(psrc, pdst) do { \ - const int32_t b = (psrc)[0]; \ - const int32_t g = (psrc)[1]; \ - const int32_t r = (psrc)[2]; \ - (pdst)[0] = r; \ - (pdst)[1] = g; \ - (pdst)[2] = b; \ -} while (0) - -#define TRANSFORM_COLOR_INVERSE_8(src0, src1, dst0, dst1, \ - c0, c1, mask0, mask1) do { \ - v8i16 g0, g1, t0, t1, t2, t3; \ - v4i32 t4, t5; \ - VSHF_B2_SH(src0, src0, src1, src1, mask0, mask0, g0, g1); \ - DOTP_SB2_SH(g0, g1, c0, c0, t0, t1); \ - SRAI_H2_SH(t0, t1, 5); \ - t0 = __msa_addv_h(t0, (v8i16)src0); \ - t1 = __msa_addv_h(t1, (v8i16)src1); \ - t4 = __msa_srli_w((v4i32)t0, 16); \ - t5 = __msa_srli_w((v4i32)t1, 16); \ - DOTP_SB2_SH(t4, t5, c1, c1, t2, t3); \ - SRAI_H2_SH(t2, t3, 5); \ - ADD2(t0, t2, t1, t3, t0, t1); \ - VSHF_B2_UB(src0, t0, src1, t1, mask1, mask1, dst0, dst1); \ -} while (0) - -#define TRANSFORM_COLOR_INVERSE_4(src, dst, c0, c1, mask0, mask1) do { \ - const v16i8 g0 = VSHF_SB(src, src, mask0); \ - v8i16 t0 = __msa_dotp_s_h(c0, g0); \ - v8i16 t1; \ - v4i32 t2; \ - t0 = SRAI_H(t0, 5); \ - t0 = __msa_addv_h(t0, (v8i16)src); \ - t2 = __msa_srli_w((v4i32)t0, 16); \ - t1 = __msa_dotp_s_h(c1, (v16i8)t2); \ - t1 = SRAI_H(t1, 5); \ - t0 = t0 + t1; \ - dst = VSHF_UB(src, t0, mask1); \ -} while (0) - -static void ConvertBGRAToRGBA_MSA(const uint32_t* src, - int num_pixels, uint8_t* dst) { - int i; - const uint8_t* ptemp_src = (const uint8_t*)src; - uint8_t* ptemp_dst = (uint8_t*)dst; - v16u8 src0, dst0; - const v16u8 mask = { 2, 1, 0, 3, 6, 5, 4, 7, 10, 9, 8, 11, 14, 13, 12, 15 }; - - while (num_pixels >= 8) { - v16u8 src1, dst1; - LD_UB2(ptemp_src, 16, src0, src1); - VSHF_B2_UB(src0, src0, src1, src1, mask, mask, dst0, dst1); - ST_UB2(dst0, dst1, ptemp_dst, 16); - ptemp_src += 32; - ptemp_dst += 32; - num_pixels -= 8; - } - if (num_pixels > 0) { - if (num_pixels >= 4) { - src0 = LD_UB(ptemp_src); - dst0 = VSHF_UB(src0, src0, mask); - ST_UB(dst0, ptemp_dst); - ptemp_src += 16; - ptemp_dst += 16; - num_pixels -= 4; - } - for (i = 0; i < num_pixels; i++) { - const uint8_t b = ptemp_src[2]; - const uint8_t g = ptemp_src[1]; - const uint8_t r = ptemp_src[0]; - const uint8_t a = ptemp_src[3]; - ptemp_dst[0] = b; - ptemp_dst[1] = g; - ptemp_dst[2] = r; - ptemp_dst[3] = a; - ptemp_src += 4; - ptemp_dst += 4; - } - } -} - -static void ConvertBGRAToBGR_MSA(const uint32_t* src, - int num_pixels, uint8_t* dst) { - const uint8_t* ptemp_src = (const uint8_t*)src; - uint8_t* ptemp_dst = (uint8_t*)dst; - const v16u8 mask0 = { 0, 1, 2, 4, 5, 6, 8, 9, 10, 12, 13, 14, - 16, 17, 18, 20 }; - const v16u8 mask1 = { 5, 6, 8, 9, 10, 12, 13, 14, 16, 17, 18, 20, - 21, 22, 24, 25 }; - const v16u8 mask2 = { 10, 12, 13, 14, 16, 17, 18, 20, 21, 22, 24, 25, - 26, 28, 29, 30 }; - - while (num_pixels >= 16) { - CONVERT16_BGRA_XXX(ptemp_src, ptemp_dst, mask0, mask1, mask2); - ptemp_src += 64; - ptemp_dst += 48; - num_pixels -= 16; - } - if (num_pixels > 0) { - if (num_pixels >= 12) { - CONVERT12_BGRA_XXX(ptemp_src, ptemp_dst, mask0, mask1, mask2); - ptemp_src += 48; - ptemp_dst += 36; - num_pixels -= 12; - } else if (num_pixels >= 8) { - CONVERT8_BGRA_XXX(ptemp_src, ptemp_dst, mask0, mask1); - ptemp_src += 32; - ptemp_dst += 24; - num_pixels -= 8; - } else if (num_pixels >= 4) { - CONVERT4_BGRA_XXX(ptemp_src, ptemp_dst, mask0); - ptemp_src += 16; - ptemp_dst += 12; - num_pixels -= 4; - } - if (num_pixels == 3) { - CONVERT1_BGRA_BGR(ptemp_src + 0, ptemp_dst + 0); - CONVERT1_BGRA_BGR(ptemp_src + 4, ptemp_dst + 3); - CONVERT1_BGRA_BGR(ptemp_src + 8, ptemp_dst + 6); - } else if (num_pixels == 2) { - CONVERT1_BGRA_BGR(ptemp_src + 0, ptemp_dst + 0); - CONVERT1_BGRA_BGR(ptemp_src + 4, ptemp_dst + 3); - } else if (num_pixels == 1) { - CONVERT1_BGRA_BGR(ptemp_src, ptemp_dst); - } - } -} - -static void ConvertBGRAToRGB_MSA(const uint32_t* src, - int num_pixels, uint8_t* dst) { - const uint8_t* ptemp_src = (const uint8_t*)src; - uint8_t* ptemp_dst = (uint8_t*)dst; - const v16u8 mask0 = { 2, 1, 0, 6, 5, 4, 10, 9, 8, 14, 13, 12, - 18, 17, 16, 22 }; - const v16u8 mask1 = { 5, 4, 10, 9, 8, 14, 13, 12, 18, 17, 16, 22, - 21, 20, 26, 25 }; - const v16u8 mask2 = { 8, 14, 13, 12, 18, 17, 16, 22, 21, 20, 26, 25, - 24, 30, 29, 28 }; - - while (num_pixels >= 16) { - CONVERT16_BGRA_XXX(ptemp_src, ptemp_dst, mask0, mask1, mask2); - ptemp_src += 64; - ptemp_dst += 48; - num_pixels -= 16; - } - if (num_pixels) { - if (num_pixels >= 12) { - CONVERT12_BGRA_XXX(ptemp_src, ptemp_dst, mask0, mask1, mask2); - ptemp_src += 48; - ptemp_dst += 36; - num_pixels -= 12; - } else if (num_pixels >= 8) { - CONVERT8_BGRA_XXX(ptemp_src, ptemp_dst, mask0, mask1); - ptemp_src += 32; - ptemp_dst += 24; - num_pixels -= 8; - } else if (num_pixels >= 4) { - CONVERT4_BGRA_XXX(ptemp_src, ptemp_dst, mask0); - ptemp_src += 16; - ptemp_dst += 12; - num_pixels -= 4; - } - if (num_pixels == 3) { - CONVERT1_BGRA_RGB(ptemp_src + 0, ptemp_dst + 0); - CONVERT1_BGRA_RGB(ptemp_src + 4, ptemp_dst + 3); - CONVERT1_BGRA_RGB(ptemp_src + 8, ptemp_dst + 6); - } else if (num_pixels == 2) { - CONVERT1_BGRA_RGB(ptemp_src + 0, ptemp_dst + 0); - CONVERT1_BGRA_RGB(ptemp_src + 4, ptemp_dst + 3); - } else if (num_pixels == 1) { - CONVERT1_BGRA_RGB(ptemp_src, ptemp_dst); - } - } -} - -static void AddGreenToBlueAndRed_MSA(const uint32_t* const src, int num_pixels, - uint32_t* dst) { - int i; - const uint8_t* in = (const uint8_t*)src; - uint8_t* out = (uint8_t*)dst; - v16u8 src0, dst0, tmp0; - const v16u8 mask = { 1, 255, 1, 255, 5, 255, 5, 255, 9, 255, 9, 255, - 13, 255, 13, 255 }; - - while (num_pixels >= 8) { - v16u8 src1, dst1, tmp1; - LD_UB2(in, 16, src0, src1); - VSHF_B2_UB(src0, src1, src1, src0, mask, mask, tmp0, tmp1); - ADD2(src0, tmp0, src1, tmp1, dst0, dst1); - ST_UB2(dst0, dst1, out, 16); - in += 32; - out += 32; - num_pixels -= 8; - } - if (num_pixels > 0) { - if (num_pixels >= 4) { - src0 = LD_UB(in); - tmp0 = VSHF_UB(src0, src0, mask); - dst0 = src0 + tmp0; - ST_UB(dst0, out); - in += 16; - out += 16; - num_pixels -= 4; - } - for (i = 0; i < num_pixels; i++) { - const uint8_t b = in[0]; - const uint8_t g = in[1]; - const uint8_t r = in[2]; - out[0] = (b + g) & 0xff; - out[1] = g; - out[2] = (r + g) & 0xff; - out[4] = in[4]; - out += 4; - } - } -} - -static void TransformColorInverse_MSA(const VP8LMultipliers* const m, - const uint32_t* src, int num_pixels, - uint32_t* dst) { - v16u8 src0, dst0; - const v16i8 g2br = (v16i8)__msa_fill_w(m->green_to_blue_ | - (m->green_to_red_ << 16)); - const v16i8 r2b = (v16i8)__msa_fill_w(m->red_to_blue_); - const v16u8 mask0 = { 1, 255, 1, 255, 5, 255, 5, 255, 9, 255, 9, 255, - 13, 255, 13, 255 }; - const v16u8 mask1 = { 16, 1, 18, 3, 20, 5, 22, 7, 24, 9, 26, 11, - 28, 13, 30, 15 }; - - while (num_pixels >= 8) { - v16u8 src1, dst1; - LD_UB2(src, 4, src0, src1); - TRANSFORM_COLOR_INVERSE_8(src0, src1, dst0, dst1, g2br, r2b, mask0, mask1); - ST_UB2(dst0, dst1, dst, 4); - src += 8; - dst += 8; - num_pixels -= 8; - } - if (num_pixels > 0) { - if (num_pixels >= 4) { - src0 = LD_UB(src); - TRANSFORM_COLOR_INVERSE_4(src0, dst0, g2br, r2b, mask0, mask1); - ST_UB(dst0, dst); - src += 4; - dst += 4; - num_pixels -= 4; - } - if (num_pixels > 0) { - src0 = LD_UB(src); - TRANSFORM_COLOR_INVERSE_4(src0, dst0, g2br, r2b, mask0, mask1); - if (num_pixels == 3) { - const uint64_t pix_d = __msa_copy_s_d((v2i64)dst0, 0); - const uint32_t pix_w = __msa_copy_s_w((v4i32)dst0, 2); - SD(pix_d, dst + 0); - SW(pix_w, dst + 2); - } else if (num_pixels == 2) { - const uint64_t pix_d = __msa_copy_s_d((v2i64)dst0, 0); - SD(pix_d, dst); - } else { - const uint32_t pix_w = __msa_copy_s_w((v4i32)dst0, 0); - SW(pix_w, dst); - } - } - } -} - -//------------------------------------------------------------------------------ -// Entry point - -extern void VP8LDspInitMSA(void); - -WEBP_TSAN_IGNORE_FUNCTION void VP8LDspInitMSA(void) { - VP8LConvertBGRAToRGBA = ConvertBGRAToRGBA_MSA; - VP8LConvertBGRAToBGR = ConvertBGRAToBGR_MSA; - VP8LConvertBGRAToRGB = ConvertBGRAToRGB_MSA; - - VP8LAddGreenToBlueAndRed = AddGreenToBlueAndRed_MSA; - VP8LTransformColorInverse = TransformColorInverse_MSA; -} - -#else // !WEBP_USE_MSA - -WEBP_DSP_INIT_STUB(VP8LDspInitMSA) - -#endif // WEBP_USE_MSA diff --git a/Extended/libwebp/src/dsp/lossless_neon.c b/Extended/libwebp/src/dsp/lossless_neon.c deleted file mode 100644 index 76a1b6f..0000000 --- a/Extended/libwebp/src/dsp/lossless_neon.c +++ /dev/null @@ -1,641 +0,0 @@ -// Copyright 2014 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// NEON variant of methods for lossless decoder -// -// Author: Skal (pascal.massimino@gmail.com) - -#include "src/dsp/dsp.h" - -#if defined(WEBP_USE_NEON) - -#include - -#include "src/dsp/lossless.h" -#include "src/dsp/neon.h" - -//------------------------------------------------------------------------------ -// Colorspace conversion functions - -#if !defined(WORK_AROUND_GCC) -// gcc 4.6.0 had some trouble (NDK-r9) with this code. We only use it for -// gcc-4.8.x at least. -static void ConvertBGRAToRGBA_NEON(const uint32_t* src, - int num_pixels, uint8_t* dst) { - const uint32_t* const end = src + (num_pixels & ~15); - for (; src < end; src += 16) { - uint8x16x4_t pixel = vld4q_u8((uint8_t*)src); - // swap B and R. (VSWP d0,d2 has no intrinsics equivalent!) - const uint8x16_t tmp = pixel.val[0]; - pixel.val[0] = pixel.val[2]; - pixel.val[2] = tmp; - vst4q_u8(dst, pixel); - dst += 64; - } - VP8LConvertBGRAToRGBA_C(src, num_pixels & 15, dst); // left-overs -} - -static void ConvertBGRAToBGR_NEON(const uint32_t* src, - int num_pixels, uint8_t* dst) { - const uint32_t* const end = src + (num_pixels & ~15); - for (; src < end; src += 16) { - const uint8x16x4_t pixel = vld4q_u8((uint8_t*)src); - const uint8x16x3_t tmp = { { pixel.val[0], pixel.val[1], pixel.val[2] } }; - vst3q_u8(dst, tmp); - dst += 48; - } - VP8LConvertBGRAToBGR_C(src, num_pixels & 15, dst); // left-overs -} - -static void ConvertBGRAToRGB_NEON(const uint32_t* src, - int num_pixels, uint8_t* dst) { - const uint32_t* const end = src + (num_pixels & ~15); - for (; src < end; src += 16) { - const uint8x16x4_t pixel = vld4q_u8((uint8_t*)src); - const uint8x16x3_t tmp = { { pixel.val[2], pixel.val[1], pixel.val[0] } }; - vst3q_u8(dst, tmp); - dst += 48; - } - VP8LConvertBGRAToRGB_C(src, num_pixels & 15, dst); // left-overs -} - -#else // WORK_AROUND_GCC - -// gcc-4.6.0 fallback - -static const uint8_t kRGBAShuffle[8] = { 2, 1, 0, 3, 6, 5, 4, 7 }; - -static void ConvertBGRAToRGBA_NEON(const uint32_t* src, - int num_pixels, uint8_t* dst) { - const uint32_t* const end = src + (num_pixels & ~1); - const uint8x8_t shuffle = vld1_u8(kRGBAShuffle); - for (; src < end; src += 2) { - const uint8x8_t pixels = vld1_u8((uint8_t*)src); - vst1_u8(dst, vtbl1_u8(pixels, shuffle)); - dst += 8; - } - VP8LConvertBGRAToRGBA_C(src, num_pixels & 1, dst); // left-overs -} - -static const uint8_t kBGRShuffle[3][8] = { - { 0, 1, 2, 4, 5, 6, 8, 9 }, - { 10, 12, 13, 14, 16, 17, 18, 20 }, - { 21, 22, 24, 25, 26, 28, 29, 30 } -}; - -static void ConvertBGRAToBGR_NEON(const uint32_t* src, - int num_pixels, uint8_t* dst) { - const uint32_t* const end = src + (num_pixels & ~7); - const uint8x8_t shuffle0 = vld1_u8(kBGRShuffle[0]); - const uint8x8_t shuffle1 = vld1_u8(kBGRShuffle[1]); - const uint8x8_t shuffle2 = vld1_u8(kBGRShuffle[2]); - for (; src < end; src += 8) { - uint8x8x4_t pixels; - INIT_VECTOR4(pixels, - vld1_u8((const uint8_t*)(src + 0)), - vld1_u8((const uint8_t*)(src + 2)), - vld1_u8((const uint8_t*)(src + 4)), - vld1_u8((const uint8_t*)(src + 6))); - vst1_u8(dst + 0, vtbl4_u8(pixels, shuffle0)); - vst1_u8(dst + 8, vtbl4_u8(pixels, shuffle1)); - vst1_u8(dst + 16, vtbl4_u8(pixels, shuffle2)); - dst += 8 * 3; - } - VP8LConvertBGRAToBGR_C(src, num_pixels & 7, dst); // left-overs -} - -static const uint8_t kRGBShuffle[3][8] = { - { 2, 1, 0, 6, 5, 4, 10, 9 }, - { 8, 14, 13, 12, 18, 17, 16, 22 }, - { 21, 20, 26, 25, 24, 30, 29, 28 } -}; - -static void ConvertBGRAToRGB_NEON(const uint32_t* src, - int num_pixels, uint8_t* dst) { - const uint32_t* const end = src + (num_pixels & ~7); - const uint8x8_t shuffle0 = vld1_u8(kRGBShuffle[0]); - const uint8x8_t shuffle1 = vld1_u8(kRGBShuffle[1]); - const uint8x8_t shuffle2 = vld1_u8(kRGBShuffle[2]); - for (; src < end; src += 8) { - uint8x8x4_t pixels; - INIT_VECTOR4(pixels, - vld1_u8((const uint8_t*)(src + 0)), - vld1_u8((const uint8_t*)(src + 2)), - vld1_u8((const uint8_t*)(src + 4)), - vld1_u8((const uint8_t*)(src + 6))); - vst1_u8(dst + 0, vtbl4_u8(pixels, shuffle0)); - vst1_u8(dst + 8, vtbl4_u8(pixels, shuffle1)); - vst1_u8(dst + 16, vtbl4_u8(pixels, shuffle2)); - dst += 8 * 3; - } - VP8LConvertBGRAToRGB_C(src, num_pixels & 7, dst); // left-overs -} - -#endif // !WORK_AROUND_GCC - -//------------------------------------------------------------------------------ -// Predictor Transform - -#define LOAD_U32_AS_U8(IN) vreinterpret_u8_u32(vdup_n_u32((IN))) -#define LOAD_U32P_AS_U8(IN) vreinterpret_u8_u32(vld1_u32((IN))) -#define LOADQ_U32_AS_U8(IN) vreinterpretq_u8_u32(vdupq_n_u32((IN))) -#define LOADQ_U32P_AS_U8(IN) vreinterpretq_u8_u32(vld1q_u32((IN))) -#define GET_U8_AS_U32(IN) vget_lane_u32(vreinterpret_u32_u8((IN)), 0); -#define GETQ_U8_AS_U32(IN) vgetq_lane_u32(vreinterpretq_u32_u8((IN)), 0); -#define STOREQ_U8_AS_U32P(OUT, IN) vst1q_u32((OUT), vreinterpretq_u32_u8((IN))); -#define ROTATE32_LEFT(L) vextq_u8((L), (L), 12) // D|C|B|A -> C|B|A|D - -static WEBP_INLINE uint8x8_t Average2_u8_NEON(uint32_t a0, uint32_t a1) { - const uint8x8_t A0 = LOAD_U32_AS_U8(a0); - const uint8x8_t A1 = LOAD_U32_AS_U8(a1); - return vhadd_u8(A0, A1); -} - -static WEBP_INLINE uint32_t ClampedAddSubtractHalf_NEON(uint32_t c0, - uint32_t c1, - uint32_t c2) { - const uint8x8_t avg = Average2_u8_NEON(c0, c1); - // Remove one to c2 when bigger than avg. - const uint8x8_t C2 = LOAD_U32_AS_U8(c2); - const uint8x8_t cmp = vcgt_u8(C2, avg); - const uint8x8_t C2_1 = vadd_u8(C2, cmp); - // Compute half of the difference between avg and c2. - const int8x8_t diff_avg = vreinterpret_s8_u8(vhsub_u8(avg, C2_1)); - // Compute the sum with avg and saturate. - const int16x8_t avg_16 = vreinterpretq_s16_u16(vmovl_u8(avg)); - const uint8x8_t res = vqmovun_s16(vaddw_s8(avg_16, diff_avg)); - const uint32_t output = GET_U8_AS_U32(res); - return output; -} - -static WEBP_INLINE uint32_t Average2_NEON(uint32_t a0, uint32_t a1) { - const uint8x8_t avg_u8x8 = Average2_u8_NEON(a0, a1); - const uint32_t avg = GET_U8_AS_U32(avg_u8x8); - return avg; -} - -static WEBP_INLINE uint32_t Average3_NEON(uint32_t a0, uint32_t a1, - uint32_t a2) { - const uint8x8_t avg0 = Average2_u8_NEON(a0, a2); - const uint8x8_t A1 = LOAD_U32_AS_U8(a1); - const uint32_t avg = GET_U8_AS_U32(vhadd_u8(avg0, A1)); - return avg; -} - -static uint32_t Predictor5_NEON(uint32_t left, const uint32_t* const top) { - return Average3_NEON(left, top[0], top[1]); -} -static uint32_t Predictor6_NEON(uint32_t left, const uint32_t* const top) { - return Average2_NEON(left, top[-1]); -} -static uint32_t Predictor7_NEON(uint32_t left, const uint32_t* const top) { - return Average2_NEON(left, top[0]); -} -static uint32_t Predictor13_NEON(uint32_t left, const uint32_t* const top) { - return ClampedAddSubtractHalf_NEON(left, top[0], top[-1]); -} - -// Batch versions of those functions. - -// Predictor0: ARGB_BLACK. -static void PredictorAdd0_NEON(const uint32_t* in, const uint32_t* upper, - int num_pixels, uint32_t* out) { - int i; - const uint8x16_t black = vreinterpretq_u8_u32(vdupq_n_u32(ARGB_BLACK)); - for (i = 0; i + 4 <= num_pixels; i += 4) { - const uint8x16_t src = LOADQ_U32P_AS_U8(&in[i]); - const uint8x16_t res = vaddq_u8(src, black); - STOREQ_U8_AS_U32P(&out[i], res); - } - VP8LPredictorsAdd_C[0](in + i, upper + i, num_pixels - i, out + i); -} - -// Predictor1: left. -static void PredictorAdd1_NEON(const uint32_t* in, const uint32_t* upper, - int num_pixels, uint32_t* out) { - int i; - const uint8x16_t zero = LOADQ_U32_AS_U8(0); - for (i = 0; i + 4 <= num_pixels; i += 4) { - // a | b | c | d - const uint8x16_t src = LOADQ_U32P_AS_U8(&in[i]); - // 0 | a | b | c - const uint8x16_t shift0 = vextq_u8(zero, src, 12); - // a | a + b | b + c | c + d - const uint8x16_t sum0 = vaddq_u8(src, shift0); - // 0 | 0 | a | a + b - const uint8x16_t shift1 = vextq_u8(zero, sum0, 8); - // a | a + b | a + b + c | a + b + c + d - const uint8x16_t sum1 = vaddq_u8(sum0, shift1); - const uint8x16_t prev = LOADQ_U32_AS_U8(out[i - 1]); - const uint8x16_t res = vaddq_u8(sum1, prev); - STOREQ_U8_AS_U32P(&out[i], res); - } - VP8LPredictorsAdd_C[1](in + i, upper + i, num_pixels - i, out + i); -} - -// Macro that adds 32-bit integers from IN using mod 256 arithmetic -// per 8 bit channel. -#define GENERATE_PREDICTOR_1(X, IN) \ -static void PredictorAdd##X##_NEON(const uint32_t* in, \ - const uint32_t* upper, int num_pixels, \ - uint32_t* out) { \ - int i; \ - for (i = 0; i + 4 <= num_pixels; i += 4) { \ - const uint8x16_t src = LOADQ_U32P_AS_U8(&in[i]); \ - const uint8x16_t other = LOADQ_U32P_AS_U8(&(IN)); \ - const uint8x16_t res = vaddq_u8(src, other); \ - STOREQ_U8_AS_U32P(&out[i], res); \ - } \ - VP8LPredictorsAdd_C[(X)](in + i, upper + i, num_pixels - i, out + i); \ -} -// Predictor2: Top. -GENERATE_PREDICTOR_1(2, upper[i]) -// Predictor3: Top-right. -GENERATE_PREDICTOR_1(3, upper[i + 1]) -// Predictor4: Top-left. -GENERATE_PREDICTOR_1(4, upper[i - 1]) -#undef GENERATE_PREDICTOR_1 - -// Predictor5: average(average(left, TR), T) -#define DO_PRED5(LANE) do { \ - const uint8x16_t avgLTR = vhaddq_u8(L, TR); \ - const uint8x16_t avg = vhaddq_u8(avgLTR, T); \ - const uint8x16_t res = vaddq_u8(avg, src); \ - vst1q_lane_u32(&out[i + (LANE)], vreinterpretq_u32_u8(res), (LANE)); \ - L = ROTATE32_LEFT(res); \ -} while (0) - -static void PredictorAdd5_NEON(const uint32_t* in, const uint32_t* upper, - int num_pixels, uint32_t* out) { - int i; - uint8x16_t L = LOADQ_U32_AS_U8(out[-1]); - for (i = 0; i + 4 <= num_pixels; i += 4) { - const uint8x16_t src = LOADQ_U32P_AS_U8(&in[i]); - const uint8x16_t T = LOADQ_U32P_AS_U8(&upper[i + 0]); - const uint8x16_t TR = LOADQ_U32P_AS_U8(&upper[i + 1]); - DO_PRED5(0); - DO_PRED5(1); - DO_PRED5(2); - DO_PRED5(3); - } - VP8LPredictorsAdd_C[5](in + i, upper + i, num_pixels - i, out + i); -} -#undef DO_PRED5 - -#define DO_PRED67(LANE) do { \ - const uint8x16_t avg = vhaddq_u8(L, top); \ - const uint8x16_t res = vaddq_u8(avg, src); \ - vst1q_lane_u32(&out[i + (LANE)], vreinterpretq_u32_u8(res), (LANE)); \ - L = ROTATE32_LEFT(res); \ -} while (0) - -// Predictor6: average(left, TL) -static void PredictorAdd6_NEON(const uint32_t* in, const uint32_t* upper, - int num_pixels, uint32_t* out) { - int i; - uint8x16_t L = LOADQ_U32_AS_U8(out[-1]); - for (i = 0; i + 4 <= num_pixels; i += 4) { - const uint8x16_t src = LOADQ_U32P_AS_U8(&in[i]); - const uint8x16_t top = LOADQ_U32P_AS_U8(&upper[i - 1]); - DO_PRED67(0); - DO_PRED67(1); - DO_PRED67(2); - DO_PRED67(3); - } - VP8LPredictorsAdd_C[6](in + i, upper + i, num_pixels - i, out + i); -} - -// Predictor7: average(left, T) -static void PredictorAdd7_NEON(const uint32_t* in, const uint32_t* upper, - int num_pixels, uint32_t* out) { - int i; - uint8x16_t L = LOADQ_U32_AS_U8(out[-1]); - for (i = 0; i + 4 <= num_pixels; i += 4) { - const uint8x16_t src = LOADQ_U32P_AS_U8(&in[i]); - const uint8x16_t top = LOADQ_U32P_AS_U8(&upper[i]); - DO_PRED67(0); - DO_PRED67(1); - DO_PRED67(2); - DO_PRED67(3); - } - VP8LPredictorsAdd_C[7](in + i, upper + i, num_pixels - i, out + i); -} -#undef DO_PRED67 - -#define GENERATE_PREDICTOR_2(X, IN) \ -static void PredictorAdd##X##_NEON(const uint32_t* in, \ - const uint32_t* upper, int num_pixels, \ - uint32_t* out) { \ - int i; \ - for (i = 0; i + 4 <= num_pixels; i += 4) { \ - const uint8x16_t src = LOADQ_U32P_AS_U8(&in[i]); \ - const uint8x16_t Tother = LOADQ_U32P_AS_U8(&(IN)); \ - const uint8x16_t T = LOADQ_U32P_AS_U8(&upper[i]); \ - const uint8x16_t avg = vhaddq_u8(T, Tother); \ - const uint8x16_t res = vaddq_u8(avg, src); \ - STOREQ_U8_AS_U32P(&out[i], res); \ - } \ - VP8LPredictorsAdd_C[(X)](in + i, upper + i, num_pixels - i, out + i); \ -} -// Predictor8: average TL T. -GENERATE_PREDICTOR_2(8, upper[i - 1]) -// Predictor9: average T TR. -GENERATE_PREDICTOR_2(9, upper[i + 1]) -#undef GENERATE_PREDICTOR_2 - -// Predictor10: average of (average of (L,TL), average of (T, TR)). -#define DO_PRED10(LANE) do { \ - const uint8x16_t avgLTL = vhaddq_u8(L, TL); \ - const uint8x16_t avg = vhaddq_u8(avgTTR, avgLTL); \ - const uint8x16_t res = vaddq_u8(avg, src); \ - vst1q_lane_u32(&out[i + (LANE)], vreinterpretq_u32_u8(res), (LANE)); \ - L = ROTATE32_LEFT(res); \ -} while (0) - -static void PredictorAdd10_NEON(const uint32_t* in, const uint32_t* upper, - int num_pixels, uint32_t* out) { - int i; - uint8x16_t L = LOADQ_U32_AS_U8(out[-1]); - for (i = 0; i + 4 <= num_pixels; i += 4) { - const uint8x16_t src = LOADQ_U32P_AS_U8(&in[i]); - const uint8x16_t TL = LOADQ_U32P_AS_U8(&upper[i - 1]); - const uint8x16_t T = LOADQ_U32P_AS_U8(&upper[i]); - const uint8x16_t TR = LOADQ_U32P_AS_U8(&upper[i + 1]); - const uint8x16_t avgTTR = vhaddq_u8(T, TR); - DO_PRED10(0); - DO_PRED10(1); - DO_PRED10(2); - DO_PRED10(3); - } - VP8LPredictorsAdd_C[10](in + i, upper + i, num_pixels - i, out + i); -} -#undef DO_PRED10 - -// Predictor11: select. -#define DO_PRED11(LANE) do { \ - const uint8x16_t sumLin = vaddq_u8(L, src); /* in + L */ \ - const uint8x16_t pLTL = vabdq_u8(L, TL); /* |L - TL| */ \ - const uint16x8_t sum_LTL = vpaddlq_u8(pLTL); \ - const uint32x4_t pa = vpaddlq_u16(sum_LTL); \ - const uint32x4_t mask = vcleq_u32(pa, pb); \ - const uint8x16_t res = vbslq_u8(vreinterpretq_u8_u32(mask), sumTin, sumLin); \ - vst1q_lane_u32(&out[i + (LANE)], vreinterpretq_u32_u8(res), (LANE)); \ - L = ROTATE32_LEFT(res); \ -} while (0) - -static void PredictorAdd11_NEON(const uint32_t* in, const uint32_t* upper, - int num_pixels, uint32_t* out) { - int i; - uint8x16_t L = LOADQ_U32_AS_U8(out[-1]); - for (i = 0; i + 4 <= num_pixels; i += 4) { - const uint8x16_t T = LOADQ_U32P_AS_U8(&upper[i]); - const uint8x16_t TL = LOADQ_U32P_AS_U8(&upper[i - 1]); - const uint8x16_t pTTL = vabdq_u8(T, TL); // |T - TL| - const uint16x8_t sum_TTL = vpaddlq_u8(pTTL); - const uint32x4_t pb = vpaddlq_u16(sum_TTL); - const uint8x16_t src = LOADQ_U32P_AS_U8(&in[i]); - const uint8x16_t sumTin = vaddq_u8(T, src); // in + T - DO_PRED11(0); - DO_PRED11(1); - DO_PRED11(2); - DO_PRED11(3); - } - VP8LPredictorsAdd_C[11](in + i, upper + i, num_pixels - i, out + i); -} -#undef DO_PRED11 - -// Predictor12: ClampedAddSubtractFull. -#define DO_PRED12(DIFF, LANE) do { \ - const uint8x8_t pred = \ - vqmovun_s16(vaddq_s16(vreinterpretq_s16_u16(L), (DIFF))); \ - const uint8x8_t res = \ - vadd_u8(pred, (LANE <= 1) ? vget_low_u8(src) : vget_high_u8(src)); \ - const uint16x8_t res16 = vmovl_u8(res); \ - vst1_lane_u32(&out[i + (LANE)], vreinterpret_u32_u8(res), (LANE) & 1); \ - /* rotate in the left predictor for next iteration */ \ - L = vextq_u16(res16, res16, 4); \ -} while (0) - -static void PredictorAdd12_NEON(const uint32_t* in, const uint32_t* upper, - int num_pixels, uint32_t* out) { - int i; - uint16x8_t L = vmovl_u8(LOAD_U32_AS_U8(out[-1])); - for (i = 0; i + 4 <= num_pixels; i += 4) { - // load four pixels of source - const uint8x16_t src = LOADQ_U32P_AS_U8(&in[i]); - // precompute the difference T - TL once for all, stored as s16 - const uint8x16_t TL = LOADQ_U32P_AS_U8(&upper[i - 1]); - const uint8x16_t T = LOADQ_U32P_AS_U8(&upper[i]); - const int16x8_t diff_lo = - vreinterpretq_s16_u16(vsubl_u8(vget_low_u8(T), vget_low_u8(TL))); - const int16x8_t diff_hi = - vreinterpretq_s16_u16(vsubl_u8(vget_high_u8(T), vget_high_u8(TL))); - // loop over the four reconstructed pixels - DO_PRED12(diff_lo, 0); - DO_PRED12(diff_lo, 1); - DO_PRED12(diff_hi, 2); - DO_PRED12(diff_hi, 3); - } - VP8LPredictorsAdd_C[12](in + i, upper + i, num_pixels - i, out + i); -} -#undef DO_PRED12 - -// Predictor13: ClampedAddSubtractHalf -#define DO_PRED13(LANE, LOW_OR_HI) do { \ - const uint8x16_t avg = vhaddq_u8(L, T); \ - const uint8x16_t cmp = vcgtq_u8(TL, avg); \ - const uint8x16_t TL_1 = vaddq_u8(TL, cmp); \ - /* Compute half of the difference between avg and TL'. */ \ - const int8x8_t diff_avg = \ - vreinterpret_s8_u8(LOW_OR_HI(vhsubq_u8(avg, TL_1))); \ - /* Compute the sum with avg and saturate. */ \ - const int16x8_t avg_16 = vreinterpretq_s16_u16(vmovl_u8(LOW_OR_HI(avg))); \ - const uint8x8_t delta = vqmovun_s16(vaddw_s8(avg_16, diff_avg)); \ - const uint8x8_t res = vadd_u8(LOW_OR_HI(src), delta); \ - const uint8x16_t res2 = vcombine_u8(res, res); \ - vst1_lane_u32(&out[i + (LANE)], vreinterpret_u32_u8(res), (LANE) & 1); \ - L = ROTATE32_LEFT(res2); \ -} while (0) - -static void PredictorAdd13_NEON(const uint32_t* in, const uint32_t* upper, - int num_pixels, uint32_t* out) { - int i; - uint8x16_t L = LOADQ_U32_AS_U8(out[-1]); - for (i = 0; i + 4 <= num_pixels; i += 4) { - const uint8x16_t src = LOADQ_U32P_AS_U8(&in[i]); - const uint8x16_t T = LOADQ_U32P_AS_U8(&upper[i]); - const uint8x16_t TL = LOADQ_U32P_AS_U8(&upper[i - 1]); - DO_PRED13(0, vget_low_u8); - DO_PRED13(1, vget_low_u8); - DO_PRED13(2, vget_high_u8); - DO_PRED13(3, vget_high_u8); - } - VP8LPredictorsAdd_C[13](in + i, upper + i, num_pixels - i, out + i); -} -#undef DO_PRED13 - -#undef LOAD_U32_AS_U8 -#undef LOAD_U32P_AS_U8 -#undef LOADQ_U32_AS_U8 -#undef LOADQ_U32P_AS_U8 -#undef GET_U8_AS_U32 -#undef GETQ_U8_AS_U32 -#undef STOREQ_U8_AS_U32P -#undef ROTATE32_LEFT - -//------------------------------------------------------------------------------ -// Subtract-Green Transform - -// vtbl?_u8 are marked unavailable for iOS arm64 with Xcode < 6.3, use -// non-standard versions there. -#if defined(__APPLE__) && defined(__aarch64__) && \ - defined(__apple_build_version__) && (__apple_build_version__< 6020037) -#define USE_VTBLQ -#endif - -#ifdef USE_VTBLQ -// 255 = byte will be zeroed -static const uint8_t kGreenShuffle[16] = { - 1, 255, 1, 255, 5, 255, 5, 255, 9, 255, 9, 255, 13, 255, 13, 255 -}; - -static WEBP_INLINE uint8x16_t DoGreenShuffle_NEON(const uint8x16_t argb, - const uint8x16_t shuffle) { - return vcombine_u8(vtbl1q_u8(argb, vget_low_u8(shuffle)), - vtbl1q_u8(argb, vget_high_u8(shuffle))); -} -#else // !USE_VTBLQ -// 255 = byte will be zeroed -static const uint8_t kGreenShuffle[8] = { 1, 255, 1, 255, 5, 255, 5, 255 }; - -static WEBP_INLINE uint8x16_t DoGreenShuffle_NEON(const uint8x16_t argb, - const uint8x8_t shuffle) { - return vcombine_u8(vtbl1_u8(vget_low_u8(argb), shuffle), - vtbl1_u8(vget_high_u8(argb), shuffle)); -} -#endif // USE_VTBLQ - -static void AddGreenToBlueAndRed_NEON(const uint32_t* src, int num_pixels, - uint32_t* dst) { - const uint32_t* const end = src + (num_pixels & ~3); -#ifdef USE_VTBLQ - const uint8x16_t shuffle = vld1q_u8(kGreenShuffle); -#else - const uint8x8_t shuffle = vld1_u8(kGreenShuffle); -#endif - for (; src < end; src += 4, dst += 4) { - const uint8x16_t argb = vld1q_u8((const uint8_t*)src); - const uint8x16_t greens = DoGreenShuffle_NEON(argb, shuffle); - vst1q_u8((uint8_t*)dst, vaddq_u8(argb, greens)); - } - // fallthrough and finish off with plain-C - VP8LAddGreenToBlueAndRed_C(src, num_pixels & 3, dst); -} - -//------------------------------------------------------------------------------ -// Color Transform - -static void TransformColorInverse_NEON(const VP8LMultipliers* const m, - const uint32_t* const src, - int num_pixels, uint32_t* dst) { -// sign-extended multiplying constants, pre-shifted by 6. -#define CST(X) (((int16_t)(m->X << 8)) >> 6) - const int16_t rb[8] = { - CST(green_to_blue_), CST(green_to_red_), - CST(green_to_blue_), CST(green_to_red_), - CST(green_to_blue_), CST(green_to_red_), - CST(green_to_blue_), CST(green_to_red_) - }; - const int16x8_t mults_rb = vld1q_s16(rb); - const int16_t b2[8] = { - 0, CST(red_to_blue_), 0, CST(red_to_blue_), - 0, CST(red_to_blue_), 0, CST(red_to_blue_), - }; - const int16x8_t mults_b2 = vld1q_s16(b2); -#undef CST -#ifdef USE_VTBLQ - static const uint8_t kg0g0[16] = { - 255, 1, 255, 1, 255, 5, 255, 5, 255, 9, 255, 9, 255, 13, 255, 13 - }; - const uint8x16_t shuffle = vld1q_u8(kg0g0); -#else - static const uint8_t k0g0g[8] = { 255, 1, 255, 1, 255, 5, 255, 5 }; - const uint8x8_t shuffle = vld1_u8(k0g0g); -#endif - const uint32x4_t mask_ag = vdupq_n_u32(0xff00ff00u); - int i; - for (i = 0; i + 4 <= num_pixels; i += 4) { - const uint8x16_t in = vld1q_u8((const uint8_t*)(src + i)); - const uint32x4_t a0g0 = vandq_u32(vreinterpretq_u32_u8(in), mask_ag); - // 0 g 0 g - const uint8x16_t greens = DoGreenShuffle_NEON(in, shuffle); - // x dr x db1 - const int16x8_t A = vqdmulhq_s16(vreinterpretq_s16_u8(greens), mults_rb); - // x r' x b' - const int8x16_t B = vaddq_s8(vreinterpretq_s8_u8(in), - vreinterpretq_s8_s16(A)); - // r' 0 b' 0 - const int16x8_t C = vshlq_n_s16(vreinterpretq_s16_s8(B), 8); - // x db2 0 0 - const int16x8_t D = vqdmulhq_s16(C, mults_b2); - // 0 x db2 0 - const uint32x4_t E = vshrq_n_u32(vreinterpretq_u32_s16(D), 8); - // r' x b'' 0 - const int8x16_t F = vaddq_s8(vreinterpretq_s8_u32(E), - vreinterpretq_s8_s16(C)); - // 0 r' 0 b'' - const uint16x8_t G = vshrq_n_u16(vreinterpretq_u16_s8(F), 8); - const uint32x4_t out = vorrq_u32(vreinterpretq_u32_u16(G), a0g0); - vst1q_u32(dst + i, out); - } - // Fall-back to C-version for left-overs. - VP8LTransformColorInverse_C(m, src + i, num_pixels - i, dst + i); -} - -#undef USE_VTBLQ - -//------------------------------------------------------------------------------ -// Entry point - -extern void VP8LDspInitNEON(void); - -WEBP_TSAN_IGNORE_FUNCTION void VP8LDspInitNEON(void) { - VP8LPredictors[5] = Predictor5_NEON; - VP8LPredictors[6] = Predictor6_NEON; - VP8LPredictors[7] = Predictor7_NEON; - VP8LPredictors[13] = Predictor13_NEON; - - VP8LPredictorsAdd[0] = PredictorAdd0_NEON; - VP8LPredictorsAdd[1] = PredictorAdd1_NEON; - VP8LPredictorsAdd[2] = PredictorAdd2_NEON; - VP8LPredictorsAdd[3] = PredictorAdd3_NEON; - VP8LPredictorsAdd[4] = PredictorAdd4_NEON; - VP8LPredictorsAdd[5] = PredictorAdd5_NEON; - VP8LPredictorsAdd[6] = PredictorAdd6_NEON; - VP8LPredictorsAdd[7] = PredictorAdd7_NEON; - VP8LPredictorsAdd[8] = PredictorAdd8_NEON; - VP8LPredictorsAdd[9] = PredictorAdd9_NEON; - VP8LPredictorsAdd[10] = PredictorAdd10_NEON; - VP8LPredictorsAdd[11] = PredictorAdd11_NEON; - VP8LPredictorsAdd[12] = PredictorAdd12_NEON; - VP8LPredictorsAdd[13] = PredictorAdd13_NEON; - - VP8LConvertBGRAToRGBA = ConvertBGRAToRGBA_NEON; - VP8LConvertBGRAToBGR = ConvertBGRAToBGR_NEON; - VP8LConvertBGRAToRGB = ConvertBGRAToRGB_NEON; - - VP8LAddGreenToBlueAndRed = AddGreenToBlueAndRed_NEON; - VP8LTransformColorInverse = TransformColorInverse_NEON; -} - -#else // !WEBP_USE_NEON - -WEBP_DSP_INIT_STUB(VP8LDspInitNEON) - -#endif // WEBP_USE_NEON diff --git a/Extended/libwebp/src/dsp/lossless_sse2.c b/Extended/libwebp/src/dsp/lossless_sse2.c deleted file mode 100644 index aef0cee..0000000 --- a/Extended/libwebp/src/dsp/lossless_sse2.c +++ /dev/null @@ -1,708 +0,0 @@ -// Copyright 2014 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// SSE2 variant of methods for lossless decoder -// -// Author: Skal (pascal.massimino@gmail.com) - -#include "src/dsp/dsp.h" - -#if defined(WEBP_USE_SSE2) - -#include "src/dsp/common_sse2.h" -#include "src/dsp/lossless.h" -#include "src/dsp/lossless_common.h" -#include -#include - -//------------------------------------------------------------------------------ -// Predictor Transform - -static WEBP_INLINE uint32_t ClampedAddSubtractFull_SSE2(uint32_t c0, - uint32_t c1, - uint32_t c2) { - const __m128i zero = _mm_setzero_si128(); - const __m128i C0 = _mm_unpacklo_epi8(_mm_cvtsi32_si128(c0), zero); - const __m128i C1 = _mm_unpacklo_epi8(_mm_cvtsi32_si128(c1), zero); - const __m128i C2 = _mm_unpacklo_epi8(_mm_cvtsi32_si128(c2), zero); - const __m128i V1 = _mm_add_epi16(C0, C1); - const __m128i V2 = _mm_sub_epi16(V1, C2); - const __m128i b = _mm_packus_epi16(V2, V2); - const uint32_t output = _mm_cvtsi128_si32(b); - return output; -} - -static WEBP_INLINE uint32_t ClampedAddSubtractHalf_SSE2(uint32_t c0, - uint32_t c1, - uint32_t c2) { - const __m128i zero = _mm_setzero_si128(); - const __m128i C0 = _mm_unpacklo_epi8(_mm_cvtsi32_si128(c0), zero); - const __m128i C1 = _mm_unpacklo_epi8(_mm_cvtsi32_si128(c1), zero); - const __m128i B0 = _mm_unpacklo_epi8(_mm_cvtsi32_si128(c2), zero); - const __m128i avg = _mm_add_epi16(C1, C0); - const __m128i A0 = _mm_srli_epi16(avg, 1); - const __m128i A1 = _mm_sub_epi16(A0, B0); - const __m128i BgtA = _mm_cmpgt_epi16(B0, A0); - const __m128i A2 = _mm_sub_epi16(A1, BgtA); - const __m128i A3 = _mm_srai_epi16(A2, 1); - const __m128i A4 = _mm_add_epi16(A0, A3); - const __m128i A5 = _mm_packus_epi16(A4, A4); - const uint32_t output = _mm_cvtsi128_si32(A5); - return output; -} - -static WEBP_INLINE uint32_t Select_SSE2(uint32_t a, uint32_t b, uint32_t c) { - int pa_minus_pb; - const __m128i zero = _mm_setzero_si128(); - const __m128i A0 = _mm_cvtsi32_si128(a); - const __m128i B0 = _mm_cvtsi32_si128(b); - const __m128i C0 = _mm_cvtsi32_si128(c); - const __m128i AC0 = _mm_subs_epu8(A0, C0); - const __m128i CA0 = _mm_subs_epu8(C0, A0); - const __m128i BC0 = _mm_subs_epu8(B0, C0); - const __m128i CB0 = _mm_subs_epu8(C0, B0); - const __m128i AC = _mm_or_si128(AC0, CA0); - const __m128i BC = _mm_or_si128(BC0, CB0); - const __m128i pa = _mm_unpacklo_epi8(AC, zero); // |a - c| - const __m128i pb = _mm_unpacklo_epi8(BC, zero); // |b - c| - const __m128i diff = _mm_sub_epi16(pb, pa); - { - int16_t out[8]; - _mm_storeu_si128((__m128i*)out, diff); - pa_minus_pb = out[0] + out[1] + out[2] + out[3]; - } - return (pa_minus_pb <= 0) ? a : b; -} - -static WEBP_INLINE void Average2_m128i(const __m128i* const a0, - const __m128i* const a1, - __m128i* const avg) { - // (a + b) >> 1 = ((a + b + 1) >> 1) - ((a ^ b) & 1) - const __m128i ones = _mm_set1_epi8(1); - const __m128i avg1 = _mm_avg_epu8(*a0, *a1); - const __m128i one = _mm_and_si128(_mm_xor_si128(*a0, *a1), ones); - *avg = _mm_sub_epi8(avg1, one); -} - -static WEBP_INLINE void Average2_uint32_SSE2(const uint32_t a0, - const uint32_t a1, - __m128i* const avg) { - // (a + b) >> 1 = ((a + b + 1) >> 1) - ((a ^ b) & 1) - const __m128i ones = _mm_set1_epi8(1); - const __m128i A0 = _mm_cvtsi32_si128(a0); - const __m128i A1 = _mm_cvtsi32_si128(a1); - const __m128i avg1 = _mm_avg_epu8(A0, A1); - const __m128i one = _mm_and_si128(_mm_xor_si128(A0, A1), ones); - *avg = _mm_sub_epi8(avg1, one); -} - -static WEBP_INLINE __m128i Average2_uint32_16_SSE2(uint32_t a0, uint32_t a1) { - const __m128i zero = _mm_setzero_si128(); - const __m128i A0 = _mm_unpacklo_epi8(_mm_cvtsi32_si128(a0), zero); - const __m128i A1 = _mm_unpacklo_epi8(_mm_cvtsi32_si128(a1), zero); - const __m128i sum = _mm_add_epi16(A1, A0); - return _mm_srli_epi16(sum, 1); -} - -static WEBP_INLINE uint32_t Average2_SSE2(uint32_t a0, uint32_t a1) { - __m128i output; - Average2_uint32_SSE2(a0, a1, &output); - return _mm_cvtsi128_si32(output); -} - -static WEBP_INLINE uint32_t Average3_SSE2(uint32_t a0, uint32_t a1, - uint32_t a2) { - const __m128i zero = _mm_setzero_si128(); - const __m128i avg1 = Average2_uint32_16_SSE2(a0, a2); - const __m128i A1 = _mm_unpacklo_epi8(_mm_cvtsi32_si128(a1), zero); - const __m128i sum = _mm_add_epi16(avg1, A1); - const __m128i avg2 = _mm_srli_epi16(sum, 1); - const __m128i A2 = _mm_packus_epi16(avg2, avg2); - const uint32_t output = _mm_cvtsi128_si32(A2); - return output; -} - -static WEBP_INLINE uint32_t Average4_SSE2(uint32_t a0, uint32_t a1, - uint32_t a2, uint32_t a3) { - const __m128i avg1 = Average2_uint32_16_SSE2(a0, a1); - const __m128i avg2 = Average2_uint32_16_SSE2(a2, a3); - const __m128i sum = _mm_add_epi16(avg2, avg1); - const __m128i avg3 = _mm_srli_epi16(sum, 1); - const __m128i A0 = _mm_packus_epi16(avg3, avg3); - const uint32_t output = _mm_cvtsi128_si32(A0); - return output; -} - -static uint32_t Predictor5_SSE2(uint32_t left, const uint32_t* const top) { - const uint32_t pred = Average3_SSE2(left, top[0], top[1]); - return pred; -} -static uint32_t Predictor6_SSE2(uint32_t left, const uint32_t* const top) { - const uint32_t pred = Average2_SSE2(left, top[-1]); - return pred; -} -static uint32_t Predictor7_SSE2(uint32_t left, const uint32_t* const top) { - const uint32_t pred = Average2_SSE2(left, top[0]); - return pred; -} -static uint32_t Predictor8_SSE2(uint32_t left, const uint32_t* const top) { - const uint32_t pred = Average2_SSE2(top[-1], top[0]); - (void)left; - return pred; -} -static uint32_t Predictor9_SSE2(uint32_t left, const uint32_t* const top) { - const uint32_t pred = Average2_SSE2(top[0], top[1]); - (void)left; - return pred; -} -static uint32_t Predictor10_SSE2(uint32_t left, const uint32_t* const top) { - const uint32_t pred = Average4_SSE2(left, top[-1], top[0], top[1]); - return pred; -} -static uint32_t Predictor11_SSE2(uint32_t left, const uint32_t* const top) { - const uint32_t pred = Select_SSE2(top[0], left, top[-1]); - return pred; -} -static uint32_t Predictor12_SSE2(uint32_t left, const uint32_t* const top) { - const uint32_t pred = ClampedAddSubtractFull_SSE2(left, top[0], top[-1]); - return pred; -} -static uint32_t Predictor13_SSE2(uint32_t left, const uint32_t* const top) { - const uint32_t pred = ClampedAddSubtractHalf_SSE2(left, top[0], top[-1]); - return pred; -} - -// Batch versions of those functions. - -// Predictor0: ARGB_BLACK. -static void PredictorAdd0_SSE2(const uint32_t* in, const uint32_t* upper, - int num_pixels, uint32_t* out) { - int i; - const __m128i black = _mm_set1_epi32(ARGB_BLACK); - for (i = 0; i + 4 <= num_pixels; i += 4) { - const __m128i src = _mm_loadu_si128((const __m128i*)&in[i]); - const __m128i res = _mm_add_epi8(src, black); - _mm_storeu_si128((__m128i*)&out[i], res); - } - if (i != num_pixels) { - VP8LPredictorsAdd_C[0](in + i, NULL, num_pixels - i, out + i); - } - (void)upper; -} - -// Predictor1: left. -static void PredictorAdd1_SSE2(const uint32_t* in, const uint32_t* upper, - int num_pixels, uint32_t* out) { - int i; - __m128i prev = _mm_set1_epi32(out[-1]); - for (i = 0; i + 4 <= num_pixels; i += 4) { - // a | b | c | d - const __m128i src = _mm_loadu_si128((const __m128i*)&in[i]); - // 0 | a | b | c - const __m128i shift0 = _mm_slli_si128(src, 4); - // a | a + b | b + c | c + d - const __m128i sum0 = _mm_add_epi8(src, shift0); - // 0 | 0 | a | a + b - const __m128i shift1 = _mm_slli_si128(sum0, 8); - // a | a + b | a + b + c | a + b + c + d - const __m128i sum1 = _mm_add_epi8(sum0, shift1); - const __m128i res = _mm_add_epi8(sum1, prev); - _mm_storeu_si128((__m128i*)&out[i], res); - // replicate prev output on the four lanes - prev = _mm_shuffle_epi32(res, (3 << 0) | (3 << 2) | (3 << 4) | (3 << 6)); - } - if (i != num_pixels) { - VP8LPredictorsAdd_C[1](in + i, upper + i, num_pixels - i, out + i); - } -} - -// Macro that adds 32-bit integers from IN using mod 256 arithmetic -// per 8 bit channel. -#define GENERATE_PREDICTOR_1(X, IN) \ -static void PredictorAdd##X##_SSE2(const uint32_t* in, const uint32_t* upper, \ - int num_pixels, uint32_t* out) { \ - int i; \ - for (i = 0; i + 4 <= num_pixels; i += 4) { \ - const __m128i src = _mm_loadu_si128((const __m128i*)&in[i]); \ - const __m128i other = _mm_loadu_si128((const __m128i*)&(IN)); \ - const __m128i res = _mm_add_epi8(src, other); \ - _mm_storeu_si128((__m128i*)&out[i], res); \ - } \ - if (i != num_pixels) { \ - VP8LPredictorsAdd_C[(X)](in + i, upper + i, num_pixels - i, out + i); \ - } \ -} - -// Predictor2: Top. -GENERATE_PREDICTOR_1(2, upper[i]) -// Predictor3: Top-right. -GENERATE_PREDICTOR_1(3, upper[i + 1]) -// Predictor4: Top-left. -GENERATE_PREDICTOR_1(4, upper[i - 1]) -#undef GENERATE_PREDICTOR_1 - -// Due to averages with integers, values cannot be accumulated in parallel for -// predictors 5 to 7. -GENERATE_PREDICTOR_ADD(Predictor5_SSE2, PredictorAdd5_SSE2) -GENERATE_PREDICTOR_ADD(Predictor6_SSE2, PredictorAdd6_SSE2) -GENERATE_PREDICTOR_ADD(Predictor7_SSE2, PredictorAdd7_SSE2) - -#define GENERATE_PREDICTOR_2(X, IN) \ -static void PredictorAdd##X##_SSE2(const uint32_t* in, const uint32_t* upper, \ - int num_pixels, uint32_t* out) { \ - int i; \ - for (i = 0; i + 4 <= num_pixels; i += 4) { \ - const __m128i Tother = _mm_loadu_si128((const __m128i*)&(IN)); \ - const __m128i T = _mm_loadu_si128((const __m128i*)&upper[i]); \ - const __m128i src = _mm_loadu_si128((const __m128i*)&in[i]); \ - __m128i avg, res; \ - Average2_m128i(&T, &Tother, &avg); \ - res = _mm_add_epi8(avg, src); \ - _mm_storeu_si128((__m128i*)&out[i], res); \ - } \ - if (i != num_pixels) { \ - VP8LPredictorsAdd_C[(X)](in + i, upper + i, num_pixels - i, out + i); \ - } \ -} -// Predictor8: average TL T. -GENERATE_PREDICTOR_2(8, upper[i - 1]) -// Predictor9: average T TR. -GENERATE_PREDICTOR_2(9, upper[i + 1]) -#undef GENERATE_PREDICTOR_2 - -// Predictor10: average of (average of (L,TL), average of (T, TR)). -#define DO_PRED10(OUT) do { \ - __m128i avgLTL, avg; \ - Average2_m128i(&L, &TL, &avgLTL); \ - Average2_m128i(&avgTTR, &avgLTL, &avg); \ - L = _mm_add_epi8(avg, src); \ - out[i + (OUT)] = _mm_cvtsi128_si32(L); \ -} while (0) - -#define DO_PRED10_SHIFT do { \ - /* Rotate the pre-computed values for the next iteration.*/ \ - avgTTR = _mm_srli_si128(avgTTR, 4); \ - TL = _mm_srli_si128(TL, 4); \ - src = _mm_srli_si128(src, 4); \ -} while (0) - -static void PredictorAdd10_SSE2(const uint32_t* in, const uint32_t* upper, - int num_pixels, uint32_t* out) { - int i; - __m128i L = _mm_cvtsi32_si128(out[-1]); - for (i = 0; i + 4 <= num_pixels; i += 4) { - __m128i src = _mm_loadu_si128((const __m128i*)&in[i]); - __m128i TL = _mm_loadu_si128((const __m128i*)&upper[i - 1]); - const __m128i T = _mm_loadu_si128((const __m128i*)&upper[i]); - const __m128i TR = _mm_loadu_si128((const __m128i*)&upper[i + 1]); - __m128i avgTTR; - Average2_m128i(&T, &TR, &avgTTR); - DO_PRED10(0); - DO_PRED10_SHIFT; - DO_PRED10(1); - DO_PRED10_SHIFT; - DO_PRED10(2); - DO_PRED10_SHIFT; - DO_PRED10(3); - } - if (i != num_pixels) { - VP8LPredictorsAdd_C[10](in + i, upper + i, num_pixels - i, out + i); - } -} -#undef DO_PRED10 -#undef DO_PRED10_SHIFT - -// Predictor11: select. -#define DO_PRED11(OUT) do { \ - const __m128i L_lo = _mm_unpacklo_epi32(L, T); \ - const __m128i TL_lo = _mm_unpacklo_epi32(TL, T); \ - const __m128i pb = _mm_sad_epu8(L_lo, TL_lo); /* pb = sum |L-TL|*/ \ - const __m128i mask = _mm_cmpgt_epi32(pb, pa); \ - const __m128i A = _mm_and_si128(mask, L); \ - const __m128i B = _mm_andnot_si128(mask, T); \ - const __m128i pred = _mm_or_si128(A, B); /* pred = (pa > b)? L : T*/ \ - L = _mm_add_epi8(src, pred); \ - out[i + (OUT)] = _mm_cvtsi128_si32(L); \ -} while (0) - -#define DO_PRED11_SHIFT do { \ - /* Shift the pre-computed value for the next iteration.*/ \ - T = _mm_srli_si128(T, 4); \ - TL = _mm_srli_si128(TL, 4); \ - src = _mm_srli_si128(src, 4); \ - pa = _mm_srli_si128(pa, 4); \ -} while (0) - -static void PredictorAdd11_SSE2(const uint32_t* in, const uint32_t* upper, - int num_pixels, uint32_t* out) { - int i; - __m128i pa; - __m128i L = _mm_cvtsi32_si128(out[-1]); - for (i = 0; i + 4 <= num_pixels; i += 4) { - __m128i T = _mm_loadu_si128((const __m128i*)&upper[i]); - __m128i TL = _mm_loadu_si128((const __m128i*)&upper[i - 1]); - __m128i src = _mm_loadu_si128((const __m128i*)&in[i]); - { - // We can unpack with any value on the upper 32 bits, provided it's the - // same on both operands (so that their sum of abs diff is zero). Here we - // use T. - const __m128i T_lo = _mm_unpacklo_epi32(T, T); - const __m128i TL_lo = _mm_unpacklo_epi32(TL, T); - const __m128i T_hi = _mm_unpackhi_epi32(T, T); - const __m128i TL_hi = _mm_unpackhi_epi32(TL, T); - const __m128i s_lo = _mm_sad_epu8(T_lo, TL_lo); - const __m128i s_hi = _mm_sad_epu8(T_hi, TL_hi); - pa = _mm_packs_epi32(s_lo, s_hi); // pa = sum |T-TL| - } - DO_PRED11(0); - DO_PRED11_SHIFT; - DO_PRED11(1); - DO_PRED11_SHIFT; - DO_PRED11(2); - DO_PRED11_SHIFT; - DO_PRED11(3); - } - if (i != num_pixels) { - VP8LPredictorsAdd_C[11](in + i, upper + i, num_pixels - i, out + i); - } -} -#undef DO_PRED11 -#undef DO_PRED11_SHIFT - -// Predictor12: ClampedAddSubtractFull. -#define DO_PRED12(DIFF, LANE, OUT) do { \ - const __m128i all = _mm_add_epi16(L, (DIFF)); \ - const __m128i alls = _mm_packus_epi16(all, all); \ - const __m128i res = _mm_add_epi8(src, alls); \ - out[i + (OUT)] = _mm_cvtsi128_si32(res); \ - L = _mm_unpacklo_epi8(res, zero); \ -} while (0) - -#define DO_PRED12_SHIFT(DIFF, LANE) do { \ - /* Shift the pre-computed value for the next iteration.*/ \ - if ((LANE) == 0) (DIFF) = _mm_srli_si128((DIFF), 8); \ - src = _mm_srli_si128(src, 4); \ -} while (0) - -static void PredictorAdd12_SSE2(const uint32_t* in, const uint32_t* upper, - int num_pixels, uint32_t* out) { - int i; - const __m128i zero = _mm_setzero_si128(); - const __m128i L8 = _mm_cvtsi32_si128(out[-1]); - __m128i L = _mm_unpacklo_epi8(L8, zero); - for (i = 0; i + 4 <= num_pixels; i += 4) { - // Load 4 pixels at a time. - __m128i src = _mm_loadu_si128((const __m128i*)&in[i]); - const __m128i T = _mm_loadu_si128((const __m128i*)&upper[i]); - const __m128i T_lo = _mm_unpacklo_epi8(T, zero); - const __m128i T_hi = _mm_unpackhi_epi8(T, zero); - const __m128i TL = _mm_loadu_si128((const __m128i*)&upper[i - 1]); - const __m128i TL_lo = _mm_unpacklo_epi8(TL, zero); - const __m128i TL_hi = _mm_unpackhi_epi8(TL, zero); - __m128i diff_lo = _mm_sub_epi16(T_lo, TL_lo); - __m128i diff_hi = _mm_sub_epi16(T_hi, TL_hi); - DO_PRED12(diff_lo, 0, 0); - DO_PRED12_SHIFT(diff_lo, 0); - DO_PRED12(diff_lo, 1, 1); - DO_PRED12_SHIFT(diff_lo, 1); - DO_PRED12(diff_hi, 0, 2); - DO_PRED12_SHIFT(diff_hi, 0); - DO_PRED12(diff_hi, 1, 3); - } - if (i != num_pixels) { - VP8LPredictorsAdd_C[12](in + i, upper + i, num_pixels - i, out + i); - } -} -#undef DO_PRED12 -#undef DO_PRED12_SHIFT - -// Due to averages with integers, values cannot be accumulated in parallel for -// predictors 13. -GENERATE_PREDICTOR_ADD(Predictor13_SSE2, PredictorAdd13_SSE2) - -//------------------------------------------------------------------------------ -// Subtract-Green Transform - -static void AddGreenToBlueAndRed_SSE2(const uint32_t* const src, int num_pixels, - uint32_t* dst) { - int i; - for (i = 0; i + 4 <= num_pixels; i += 4) { - const __m128i in = _mm_loadu_si128((const __m128i*)&src[i]); // argb - const __m128i A = _mm_srli_epi16(in, 8); // 0 a 0 g - const __m128i B = _mm_shufflelo_epi16(A, _MM_SHUFFLE(2, 2, 0, 0)); - const __m128i C = _mm_shufflehi_epi16(B, _MM_SHUFFLE(2, 2, 0, 0)); // 0g0g - const __m128i out = _mm_add_epi8(in, C); - _mm_storeu_si128((__m128i*)&dst[i], out); - } - // fallthrough and finish off with plain-C - if (i != num_pixels) { - VP8LAddGreenToBlueAndRed_C(src + i, num_pixels - i, dst + i); - } -} - -//------------------------------------------------------------------------------ -// Color Transform - -static void TransformColorInverse_SSE2(const VP8LMultipliers* const m, - const uint32_t* const src, - int num_pixels, uint32_t* dst) { -// sign-extended multiplying constants, pre-shifted by 5. -#define CST(X) (((int16_t)(m->X << 8)) >> 5) // sign-extend -#define MK_CST_16(HI, LO) \ - _mm_set1_epi32((int)(((uint32_t)(HI) << 16) | ((LO) & 0xffff))) - const __m128i mults_rb = MK_CST_16(CST(green_to_red_), CST(green_to_blue_)); - const __m128i mults_b2 = MK_CST_16(CST(red_to_blue_), 0); -#undef MK_CST_16 -#undef CST - const __m128i mask_ag = _mm_set1_epi32(0xff00ff00); // alpha-green masks - int i; - for (i = 0; i + 4 <= num_pixels; i += 4) { - const __m128i in = _mm_loadu_si128((const __m128i*)&src[i]); // argb - const __m128i A = _mm_and_si128(in, mask_ag); // a 0 g 0 - const __m128i B = _mm_shufflelo_epi16(A, _MM_SHUFFLE(2, 2, 0, 0)); - const __m128i C = _mm_shufflehi_epi16(B, _MM_SHUFFLE(2, 2, 0, 0)); // g0g0 - const __m128i D = _mm_mulhi_epi16(C, mults_rb); // x dr x db1 - const __m128i E = _mm_add_epi8(in, D); // x r' x b' - const __m128i F = _mm_slli_epi16(E, 8); // r' 0 b' 0 - const __m128i G = _mm_mulhi_epi16(F, mults_b2); // x db2 0 0 - const __m128i H = _mm_srli_epi32(G, 8); // 0 x db2 0 - const __m128i I = _mm_add_epi8(H, F); // r' x b'' 0 - const __m128i J = _mm_srli_epi16(I, 8); // 0 r' 0 b'' - const __m128i out = _mm_or_si128(J, A); - _mm_storeu_si128((__m128i*)&dst[i], out); - } - // Fall-back to C-version for left-overs. - if (i != num_pixels) { - VP8LTransformColorInverse_C(m, src + i, num_pixels - i, dst + i); - } -} - -//------------------------------------------------------------------------------ -// Color-space conversion functions - -static void ConvertBGRAToRGB_SSE2(const uint32_t* src, int num_pixels, - uint8_t* dst) { - const __m128i* in = (const __m128i*)src; - __m128i* out = (__m128i*)dst; - - while (num_pixels >= 32) { - // Load the BGRA buffers. - __m128i in0 = _mm_loadu_si128(in + 0); - __m128i in1 = _mm_loadu_si128(in + 1); - __m128i in2 = _mm_loadu_si128(in + 2); - __m128i in3 = _mm_loadu_si128(in + 3); - __m128i in4 = _mm_loadu_si128(in + 4); - __m128i in5 = _mm_loadu_si128(in + 5); - __m128i in6 = _mm_loadu_si128(in + 6); - __m128i in7 = _mm_loadu_si128(in + 7); - VP8L32bToPlanar_SSE2(&in0, &in1, &in2, &in3); - VP8L32bToPlanar_SSE2(&in4, &in5, &in6, &in7); - // At this points, in1/in5 contains red only, in2/in6 green only ... - // Pack the colors in 24b RGB. - VP8PlanarTo24b_SSE2(&in1, &in5, &in2, &in6, &in3, &in7); - _mm_storeu_si128(out + 0, in1); - _mm_storeu_si128(out + 1, in5); - _mm_storeu_si128(out + 2, in2); - _mm_storeu_si128(out + 3, in6); - _mm_storeu_si128(out + 4, in3); - _mm_storeu_si128(out + 5, in7); - in += 8; - out += 6; - num_pixels -= 32; - } - // left-overs - if (num_pixels > 0) { - VP8LConvertBGRAToRGB_C((const uint32_t*)in, num_pixels, (uint8_t*)out); - } -} - -static void ConvertBGRAToRGBA_SSE2(const uint32_t* src, - int num_pixels, uint8_t* dst) { - const __m128i red_blue_mask = _mm_set1_epi32(0x00ff00ffu); - const __m128i* in = (const __m128i*)src; - __m128i* out = (__m128i*)dst; - while (num_pixels >= 8) { - const __m128i A1 = _mm_loadu_si128(in++); - const __m128i A2 = _mm_loadu_si128(in++); - const __m128i B1 = _mm_and_si128(A1, red_blue_mask); // R 0 B 0 - const __m128i B2 = _mm_and_si128(A2, red_blue_mask); // R 0 B 0 - const __m128i C1 = _mm_andnot_si128(red_blue_mask, A1); // 0 G 0 A - const __m128i C2 = _mm_andnot_si128(red_blue_mask, A2); // 0 G 0 A - const __m128i D1 = _mm_shufflelo_epi16(B1, _MM_SHUFFLE(2, 3, 0, 1)); - const __m128i D2 = _mm_shufflelo_epi16(B2, _MM_SHUFFLE(2, 3, 0, 1)); - const __m128i E1 = _mm_shufflehi_epi16(D1, _MM_SHUFFLE(2, 3, 0, 1)); - const __m128i E2 = _mm_shufflehi_epi16(D2, _MM_SHUFFLE(2, 3, 0, 1)); - const __m128i F1 = _mm_or_si128(E1, C1); - const __m128i F2 = _mm_or_si128(E2, C2); - _mm_storeu_si128(out++, F1); - _mm_storeu_si128(out++, F2); - num_pixels -= 8; - } - // left-overs - if (num_pixels > 0) { - VP8LConvertBGRAToRGBA_C((const uint32_t*)in, num_pixels, (uint8_t*)out); - } -} - -static void ConvertBGRAToRGBA4444_SSE2(const uint32_t* src, - int num_pixels, uint8_t* dst) { - const __m128i mask_0x0f = _mm_set1_epi8(0x0f); - const __m128i mask_0xf0 = _mm_set1_epi8(0xf0); - const __m128i* in = (const __m128i*)src; - __m128i* out = (__m128i*)dst; - while (num_pixels >= 8) { - const __m128i bgra0 = _mm_loadu_si128(in++); // bgra0|bgra1|bgra2|bgra3 - const __m128i bgra4 = _mm_loadu_si128(in++); // bgra4|bgra5|bgra6|bgra7 - const __m128i v0l = _mm_unpacklo_epi8(bgra0, bgra4); // b0b4g0g4r0r4a0a4... - const __m128i v0h = _mm_unpackhi_epi8(bgra0, bgra4); // b2b6g2g6r2r6a2a6... - const __m128i v1l = _mm_unpacklo_epi8(v0l, v0h); // b0b2b4b6g0g2g4g6... - const __m128i v1h = _mm_unpackhi_epi8(v0l, v0h); // b1b3b5b7g1g3g5g7... - const __m128i v2l = _mm_unpacklo_epi8(v1l, v1h); // b0...b7 | g0...g7 - const __m128i v2h = _mm_unpackhi_epi8(v1l, v1h); // r0...r7 | a0...a7 - const __m128i ga0 = _mm_unpackhi_epi64(v2l, v2h); // g0...g7 | a0...a7 - const __m128i rb0 = _mm_unpacklo_epi64(v2h, v2l); // r0...r7 | b0...b7 - const __m128i ga1 = _mm_srli_epi16(ga0, 4); // g0-|g1-|...|a6-|a7- - const __m128i rb1 = _mm_and_si128(rb0, mask_0xf0); // -r0|-r1|...|-b6|-a7 - const __m128i ga2 = _mm_and_si128(ga1, mask_0x0f); // g0-|g1-|...|a6-|a7- - const __m128i rgba0 = _mm_or_si128(ga2, rb1); // rg0..rg7 | ba0..ba7 - const __m128i rgba1 = _mm_srli_si128(rgba0, 8); // ba0..ba7 | 0 -#if (WEBP_SWAP_16BIT_CSP == 1) - const __m128i rgba = _mm_unpacklo_epi8(rgba1, rgba0); // barg0...barg7 -#else - const __m128i rgba = _mm_unpacklo_epi8(rgba0, rgba1); // rgba0...rgba7 -#endif - _mm_storeu_si128(out++, rgba); - num_pixels -= 8; - } - // left-overs - if (num_pixels > 0) { - VP8LConvertBGRAToRGBA4444_C((const uint32_t*)in, num_pixels, (uint8_t*)out); - } -} - -static void ConvertBGRAToRGB565_SSE2(const uint32_t* src, - int num_pixels, uint8_t* dst) { - const __m128i mask_0xe0 = _mm_set1_epi8(0xe0); - const __m128i mask_0xf8 = _mm_set1_epi8(0xf8); - const __m128i mask_0x07 = _mm_set1_epi8(0x07); - const __m128i* in = (const __m128i*)src; - __m128i* out = (__m128i*)dst; - while (num_pixels >= 8) { - const __m128i bgra0 = _mm_loadu_si128(in++); // bgra0|bgra1|bgra2|bgra3 - const __m128i bgra4 = _mm_loadu_si128(in++); // bgra4|bgra5|bgra6|bgra7 - const __m128i v0l = _mm_unpacklo_epi8(bgra0, bgra4); // b0b4g0g4r0r4a0a4... - const __m128i v0h = _mm_unpackhi_epi8(bgra0, bgra4); // b2b6g2g6r2r6a2a6... - const __m128i v1l = _mm_unpacklo_epi8(v0l, v0h); // b0b2b4b6g0g2g4g6... - const __m128i v1h = _mm_unpackhi_epi8(v0l, v0h); // b1b3b5b7g1g3g5g7... - const __m128i v2l = _mm_unpacklo_epi8(v1l, v1h); // b0...b7 | g0...g7 - const __m128i v2h = _mm_unpackhi_epi8(v1l, v1h); // r0...r7 | a0...a7 - const __m128i ga0 = _mm_unpackhi_epi64(v2l, v2h); // g0...g7 | a0...a7 - const __m128i rb0 = _mm_unpacklo_epi64(v2h, v2l); // r0...r7 | b0...b7 - const __m128i rb1 = _mm_and_si128(rb0, mask_0xf8); // -r0..-r7|-b0..-b7 - const __m128i g_lo1 = _mm_srli_epi16(ga0, 5); - const __m128i g_lo2 = _mm_and_si128(g_lo1, mask_0x07); // g0-...g7-|xx (3b) - const __m128i g_hi1 = _mm_slli_epi16(ga0, 3); - const __m128i g_hi2 = _mm_and_si128(g_hi1, mask_0xe0); // -g0...-g7|xx (3b) - const __m128i b0 = _mm_srli_si128(rb1, 8); // -b0...-b7|0 - const __m128i rg1 = _mm_or_si128(rb1, g_lo2); // gr0...gr7|xx - const __m128i b1 = _mm_srli_epi16(b0, 3); - const __m128i gb1 = _mm_or_si128(b1, g_hi2); // bg0...bg7|xx -#if (WEBP_SWAP_16BIT_CSP == 1) - const __m128i rgba = _mm_unpacklo_epi8(gb1, rg1); // rggb0...rggb7 -#else - const __m128i rgba = _mm_unpacklo_epi8(rg1, gb1); // bgrb0...bgrb7 -#endif - _mm_storeu_si128(out++, rgba); - num_pixels -= 8; - } - // left-overs - if (num_pixels > 0) { - VP8LConvertBGRAToRGB565_C((const uint32_t*)in, num_pixels, (uint8_t*)out); - } -} - -static void ConvertBGRAToBGR_SSE2(const uint32_t* src, - int num_pixels, uint8_t* dst) { - const __m128i mask_l = _mm_set_epi32(0, 0x00ffffff, 0, 0x00ffffff); - const __m128i mask_h = _mm_set_epi32(0x00ffffff, 0, 0x00ffffff, 0); - const __m128i* in = (const __m128i*)src; - const uint8_t* const end = dst + num_pixels * 3; - // the last storel_epi64 below writes 8 bytes starting at offset 18 - while (dst + 26 <= end) { - const __m128i bgra0 = _mm_loadu_si128(in++); // bgra0|bgra1|bgra2|bgra3 - const __m128i bgra4 = _mm_loadu_si128(in++); // bgra4|bgra5|bgra6|bgra7 - const __m128i a0l = _mm_and_si128(bgra0, mask_l); // bgr0|0|bgr0|0 - const __m128i a4l = _mm_and_si128(bgra4, mask_l); // bgr0|0|bgr0|0 - const __m128i a0h = _mm_and_si128(bgra0, mask_h); // 0|bgr0|0|bgr0 - const __m128i a4h = _mm_and_si128(bgra4, mask_h); // 0|bgr0|0|bgr0 - const __m128i b0h = _mm_srli_epi64(a0h, 8); // 000b|gr00|000b|gr00 - const __m128i b4h = _mm_srli_epi64(a4h, 8); // 000b|gr00|000b|gr00 - const __m128i c0 = _mm_or_si128(a0l, b0h); // rgbrgb00|rgbrgb00 - const __m128i c4 = _mm_or_si128(a4l, b4h); // rgbrgb00|rgbrgb00 - const __m128i c2 = _mm_srli_si128(c0, 8); - const __m128i c6 = _mm_srli_si128(c4, 8); - _mm_storel_epi64((__m128i*)(dst + 0), c0); - _mm_storel_epi64((__m128i*)(dst + 6), c2); - _mm_storel_epi64((__m128i*)(dst + 12), c4); - _mm_storel_epi64((__m128i*)(dst + 18), c6); - dst += 24; - num_pixels -= 8; - } - // left-overs - if (num_pixels > 0) { - VP8LConvertBGRAToBGR_C((const uint32_t*)in, num_pixels, dst); - } -} - -//------------------------------------------------------------------------------ -// Entry point - -extern void VP8LDspInitSSE2(void); - -WEBP_TSAN_IGNORE_FUNCTION void VP8LDspInitSSE2(void) { - VP8LPredictors[5] = Predictor5_SSE2; - VP8LPredictors[6] = Predictor6_SSE2; - VP8LPredictors[7] = Predictor7_SSE2; - VP8LPredictors[8] = Predictor8_SSE2; - VP8LPredictors[9] = Predictor9_SSE2; - VP8LPredictors[10] = Predictor10_SSE2; - VP8LPredictors[11] = Predictor11_SSE2; - VP8LPredictors[12] = Predictor12_SSE2; - VP8LPredictors[13] = Predictor13_SSE2; - - VP8LPredictorsAdd[0] = PredictorAdd0_SSE2; - VP8LPredictorsAdd[1] = PredictorAdd1_SSE2; - VP8LPredictorsAdd[2] = PredictorAdd2_SSE2; - VP8LPredictorsAdd[3] = PredictorAdd3_SSE2; - VP8LPredictorsAdd[4] = PredictorAdd4_SSE2; - VP8LPredictorsAdd[5] = PredictorAdd5_SSE2; - VP8LPredictorsAdd[6] = PredictorAdd6_SSE2; - VP8LPredictorsAdd[7] = PredictorAdd7_SSE2; - VP8LPredictorsAdd[8] = PredictorAdd8_SSE2; - VP8LPredictorsAdd[9] = PredictorAdd9_SSE2; - VP8LPredictorsAdd[10] = PredictorAdd10_SSE2; - VP8LPredictorsAdd[11] = PredictorAdd11_SSE2; - VP8LPredictorsAdd[12] = PredictorAdd12_SSE2; - VP8LPredictorsAdd[13] = PredictorAdd13_SSE2; - - VP8LAddGreenToBlueAndRed = AddGreenToBlueAndRed_SSE2; - VP8LTransformColorInverse = TransformColorInverse_SSE2; - - VP8LConvertBGRAToRGB = ConvertBGRAToRGB_SSE2; - VP8LConvertBGRAToRGBA = ConvertBGRAToRGBA_SSE2; - VP8LConvertBGRAToRGBA4444 = ConvertBGRAToRGBA4444_SSE2; - VP8LConvertBGRAToRGB565 = ConvertBGRAToRGB565_SSE2; - VP8LConvertBGRAToBGR = ConvertBGRAToBGR_SSE2; -} - -#else // !WEBP_USE_SSE2 - -WEBP_DSP_INIT_STUB(VP8LDspInitSSE2) - -#endif // WEBP_USE_SSE2 diff --git a/Extended/libwebp/src/dsp/mips_macro.h b/Extended/libwebp/src/dsp/mips_macro.h deleted file mode 100644 index 44aba9b..0000000 --- a/Extended/libwebp/src/dsp/mips_macro.h +++ /dev/null @@ -1,200 +0,0 @@ -// Copyright 2014 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// MIPS common macros - -#ifndef WEBP_DSP_MIPS_MACRO_H_ -#define WEBP_DSP_MIPS_MACRO_H_ - -#if defined(__GNUC__) && defined(__ANDROID__) && LOCAL_GCC_VERSION == 0x409 -#define WORK_AROUND_GCC -#endif - -#define STR(s) #s -#define XSTR(s) STR(s) - -// O0[31..16 | 15..0] = I0[31..16 | 15..0] + I1[31..16 | 15..0] -// O1[31..16 | 15..0] = I0[31..16 | 15..0] - I1[31..16 | 15..0] -// O - output -// I - input (macro doesn't change it) -#define ADD_SUB_HALVES(O0, O1, \ - I0, I1) \ - "addq.ph %[" #O0 "], %[" #I0 "], %[" #I1 "] \n\t" \ - "subq.ph %[" #O1 "], %[" #I0 "], %[" #I1 "] \n\t" - -// O - output -// I - input (macro doesn't change it) -// I[0/1] - offset in bytes -#define LOAD_IN_X2(O0, O1, \ - I0, I1) \ - "lh %[" #O0 "], " #I0 "(%[in]) \n\t" \ - "lh %[" #O1 "], " #I1 "(%[in]) \n\t" - -// I0 - location -// I1..I9 - offsets in bytes -#define LOAD_WITH_OFFSET_X4(O0, O1, O2, O3, \ - I0, I1, I2, I3, I4, I5, I6, I7, I8, I9) \ - "ulw %[" #O0 "], " #I1 "+" XSTR(I9) "*" #I5 "(%[" #I0 "]) \n\t" \ - "ulw %[" #O1 "], " #I2 "+" XSTR(I9) "*" #I6 "(%[" #I0 "]) \n\t" \ - "ulw %[" #O2 "], " #I3 "+" XSTR(I9) "*" #I7 "(%[" #I0 "]) \n\t" \ - "ulw %[" #O3 "], " #I4 "+" XSTR(I9) "*" #I8 "(%[" #I0 "]) \n\t" - -// O - output -// IO - input/output -// I - input (macro doesn't change it) -#define MUL_SHIFT_SUM(O0, O1, O2, O3, O4, O5, O6, O7, \ - IO0, IO1, IO2, IO3, \ - I0, I1, I2, I3, I4, I5, I6, I7) \ - "mul %[" #O0 "], %[" #I0 "], %[kC2] \n\t" \ - "mul %[" #O1 "], %[" #I0 "], %[kC1] \n\t" \ - "mul %[" #O2 "], %[" #I1 "], %[kC2] \n\t" \ - "mul %[" #O3 "], %[" #I1 "], %[kC1] \n\t" \ - "mul %[" #O4 "], %[" #I2 "], %[kC2] \n\t" \ - "mul %[" #O5 "], %[" #I2 "], %[kC1] \n\t" \ - "mul %[" #O6 "], %[" #I3 "], %[kC2] \n\t" \ - "mul %[" #O7 "], %[" #I3 "], %[kC1] \n\t" \ - "sra %[" #O0 "], %[" #O0 "], 16 \n\t" \ - "sra %[" #O1 "], %[" #O1 "], 16 \n\t" \ - "sra %[" #O2 "], %[" #O2 "], 16 \n\t" \ - "sra %[" #O3 "], %[" #O3 "], 16 \n\t" \ - "sra %[" #O4 "], %[" #O4 "], 16 \n\t" \ - "sra %[" #O5 "], %[" #O5 "], 16 \n\t" \ - "sra %[" #O6 "], %[" #O6 "], 16 \n\t" \ - "sra %[" #O7 "], %[" #O7 "], 16 \n\t" \ - "addu %[" #IO0 "], %[" #IO0 "], %[" #I4 "] \n\t" \ - "addu %[" #IO1 "], %[" #IO1 "], %[" #I5 "] \n\t" \ - "subu %[" #IO2 "], %[" #IO2 "], %[" #I6 "] \n\t" \ - "subu %[" #IO3 "], %[" #IO3 "], %[" #I7 "] \n\t" - -// O - output -// I - input (macro doesn't change it) -#define INSERT_HALF_X2(O0, O1, \ - I0, I1) \ - "ins %[" #O0 "], %[" #I0 "], 16, 16 \n\t" \ - "ins %[" #O1 "], %[" #I1 "], 16, 16 \n\t" - -// O - output -// I - input (macro doesn't change it) -#define SRA_16(O0, O1, O2, O3, \ - I0, I1, I2, I3) \ - "sra %[" #O0 "], %[" #I0 "], 16 \n\t" \ - "sra %[" #O1 "], %[" #I1 "], 16 \n\t" \ - "sra %[" #O2 "], %[" #I2 "], 16 \n\t" \ - "sra %[" #O3 "], %[" #I3 "], 16 \n\t" - -// temp0[31..16 | 15..0] = temp8[31..16 | 15..0] + temp12[31..16 | 15..0] -// temp1[31..16 | 15..0] = temp8[31..16 | 15..0] - temp12[31..16 | 15..0] -// temp0[31..16 | 15..0] = temp0[31..16 >> 3 | 15..0 >> 3] -// temp1[31..16 | 15..0] = temp1[31..16 >> 3 | 15..0 >> 3] -// O - output -// I - input (macro doesn't change it) -#define SHIFT_R_SUM_X2(O0, O1, O2, O3, O4, O5, O6, O7, \ - I0, I1, I2, I3, I4, I5, I6, I7) \ - "addq.ph %[" #O0 "], %[" #I0 "], %[" #I4 "] \n\t" \ - "subq.ph %[" #O1 "], %[" #I0 "], %[" #I4 "] \n\t" \ - "addq.ph %[" #O2 "], %[" #I1 "], %[" #I5 "] \n\t" \ - "subq.ph %[" #O3 "], %[" #I1 "], %[" #I5 "] \n\t" \ - "addq.ph %[" #O4 "], %[" #I2 "], %[" #I6 "] \n\t" \ - "subq.ph %[" #O5 "], %[" #I2 "], %[" #I6 "] \n\t" \ - "addq.ph %[" #O6 "], %[" #I3 "], %[" #I7 "] \n\t" \ - "subq.ph %[" #O7 "], %[" #I3 "], %[" #I7 "] \n\t" \ - "shra.ph %[" #O0 "], %[" #O0 "], 3 \n\t" \ - "shra.ph %[" #O1 "], %[" #O1 "], 3 \n\t" \ - "shra.ph %[" #O2 "], %[" #O2 "], 3 \n\t" \ - "shra.ph %[" #O3 "], %[" #O3 "], 3 \n\t" \ - "shra.ph %[" #O4 "], %[" #O4 "], 3 \n\t" \ - "shra.ph %[" #O5 "], %[" #O5 "], 3 \n\t" \ - "shra.ph %[" #O6 "], %[" #O6 "], 3 \n\t" \ - "shra.ph %[" #O7 "], %[" #O7 "], 3 \n\t" - -// precrq.ph.w temp0, temp8, temp2 -// temp0 = temp8[31..16] | temp2[31..16] -// ins temp2, temp8, 16, 16 -// temp2 = temp8[31..16] | temp2[15..0] -// O - output -// IO - input/output -// I - input (macro doesn't change it) -#define PACK_2_HALVES_TO_WORD(O0, O1, O2, O3, \ - IO0, IO1, IO2, IO3, \ - I0, I1, I2, I3) \ - "precrq.ph.w %[" #O0 "], %[" #I0 "], %[" #IO0 "] \n\t" \ - "precrq.ph.w %[" #O1 "], %[" #I1 "], %[" #IO1 "] \n\t" \ - "ins %[" #IO0 "], %[" #I0 "], 16, 16 \n\t" \ - "ins %[" #IO1 "], %[" #I1 "], 16, 16 \n\t" \ - "precrq.ph.w %[" #O2 "], %[" #I2 "], %[" #IO2 "] \n\t" \ - "precrq.ph.w %[" #O3 "], %[" #I3 "], %[" #IO3 "] \n\t" \ - "ins %[" #IO2 "], %[" #I2 "], 16, 16 \n\t" \ - "ins %[" #IO3 "], %[" #I3 "], 16, 16 \n\t" - -// preceu.ph.qbr temp0, temp8 -// temp0 = 0 | 0 | temp8[23..16] | temp8[7..0] -// preceu.ph.qbl temp1, temp8 -// temp1 = temp8[23..16] | temp8[7..0] | 0 | 0 -// O - output -// I - input (macro doesn't change it) -#define CONVERT_2_BYTES_TO_HALF(O0, O1, O2, O3, O4, O5, O6, O7, \ - I0, I1, I2, I3) \ - "preceu.ph.qbr %[" #O0 "], %[" #I0 "] \n\t" \ - "preceu.ph.qbl %[" #O1 "], %[" #I0 "] \n\t" \ - "preceu.ph.qbr %[" #O2 "], %[" #I1 "] \n\t" \ - "preceu.ph.qbl %[" #O3 "], %[" #I1 "] \n\t" \ - "preceu.ph.qbr %[" #O4 "], %[" #I2 "] \n\t" \ - "preceu.ph.qbl %[" #O5 "], %[" #I2 "] \n\t" \ - "preceu.ph.qbr %[" #O6 "], %[" #I3 "] \n\t" \ - "preceu.ph.qbl %[" #O7 "], %[" #I3 "] \n\t" - -// temp0[31..16 | 15..0] = temp0[31..16 | 15..0] + temp8[31..16 | 15..0] -// temp0[31..16 | 15..0] = temp0[31..16 <<(s) 7 | 15..0 <<(s) 7] -// temp1..temp7 same as temp0 -// precrqu_s.qb.ph temp0, temp1, temp0: -// temp0 = temp1[31..24] | temp1[15..8] | temp0[31..24] | temp0[15..8] -// store temp0 to dst -// IO - input/output -// I - input (macro doesn't change it) -#define STORE_SAT_SUM_X2(IO0, IO1, IO2, IO3, IO4, IO5, IO6, IO7, \ - I0, I1, I2, I3, I4, I5, I6, I7, \ - I8, I9, I10, I11, I12, I13) \ - "addq.ph %[" #IO0 "], %[" #IO0 "], %[" #I0 "] \n\t" \ - "addq.ph %[" #IO1 "], %[" #IO1 "], %[" #I1 "] \n\t" \ - "addq.ph %[" #IO2 "], %[" #IO2 "], %[" #I2 "] \n\t" \ - "addq.ph %[" #IO3 "], %[" #IO3 "], %[" #I3 "] \n\t" \ - "addq.ph %[" #IO4 "], %[" #IO4 "], %[" #I4 "] \n\t" \ - "addq.ph %[" #IO5 "], %[" #IO5 "], %[" #I5 "] \n\t" \ - "addq.ph %[" #IO6 "], %[" #IO6 "], %[" #I6 "] \n\t" \ - "addq.ph %[" #IO7 "], %[" #IO7 "], %[" #I7 "] \n\t" \ - "shll_s.ph %[" #IO0 "], %[" #IO0 "], 7 \n\t" \ - "shll_s.ph %[" #IO1 "], %[" #IO1 "], 7 \n\t" \ - "shll_s.ph %[" #IO2 "], %[" #IO2 "], 7 \n\t" \ - "shll_s.ph %[" #IO3 "], %[" #IO3 "], 7 \n\t" \ - "shll_s.ph %[" #IO4 "], %[" #IO4 "], 7 \n\t" \ - "shll_s.ph %[" #IO5 "], %[" #IO5 "], 7 \n\t" \ - "shll_s.ph %[" #IO6 "], %[" #IO6 "], 7 \n\t" \ - "shll_s.ph %[" #IO7 "], %[" #IO7 "], 7 \n\t" \ - "precrqu_s.qb.ph %[" #IO0 "], %[" #IO1 "], %[" #IO0 "] \n\t" \ - "precrqu_s.qb.ph %[" #IO2 "], %[" #IO3 "], %[" #IO2 "] \n\t" \ - "precrqu_s.qb.ph %[" #IO4 "], %[" #IO5 "], %[" #IO4 "] \n\t" \ - "precrqu_s.qb.ph %[" #IO6 "], %[" #IO7 "], %[" #IO6 "] \n\t" \ - "usw %[" #IO0 "], " XSTR(I13) "*" #I9 "(%[" #I8 "]) \n\t" \ - "usw %[" #IO2 "], " XSTR(I13) "*" #I10 "(%[" #I8 "]) \n\t" \ - "usw %[" #IO4 "], " XSTR(I13) "*" #I11 "(%[" #I8 "]) \n\t" \ - "usw %[" #IO6 "], " XSTR(I13) "*" #I12 "(%[" #I8 "]) \n\t" - -#define OUTPUT_EARLY_CLOBBER_REGS_10() \ - : [temp1]"=&r"(temp1), [temp2]"=&r"(temp2), [temp3]"=&r"(temp3), \ - [temp4]"=&r"(temp4), [temp5]"=&r"(temp5), [temp6]"=&r"(temp6), \ - [temp7]"=&r"(temp7), [temp8]"=&r"(temp8), [temp9]"=&r"(temp9), \ - [temp10]"=&r"(temp10) - -#define OUTPUT_EARLY_CLOBBER_REGS_18() \ - OUTPUT_EARLY_CLOBBER_REGS_10(), \ - [temp11]"=&r"(temp11), [temp12]"=&r"(temp12), [temp13]"=&r"(temp13), \ - [temp14]"=&r"(temp14), [temp15]"=&r"(temp15), [temp16]"=&r"(temp16), \ - [temp17]"=&r"(temp17), [temp18]"=&r"(temp18) - -#endif // WEBP_DSP_MIPS_MACRO_H_ diff --git a/Extended/libwebp/src/dsp/msa_macro.h b/Extended/libwebp/src/dsp/msa_macro.h deleted file mode 100644 index de026a1..0000000 --- a/Extended/libwebp/src/dsp/msa_macro.h +++ /dev/null @@ -1,1392 +0,0 @@ -// Copyright 2016 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// MSA common macros -// -// Author(s): Prashant Patil (prashant.patil@imgtec.com) - -#ifndef WEBP_DSP_MSA_MACRO_H_ -#define WEBP_DSP_MSA_MACRO_H_ - -#include -#include - -#if defined(__clang__) - #define CLANG_BUILD -#endif - -#ifdef CLANG_BUILD - #define ALPHAVAL (-1) - #define ADDVI_H(a, b) __msa_addvi_h((v8i16)a, b) - #define ADDVI_W(a, b) __msa_addvi_w((v4i32)a, b) - #define SRAI_B(a, b) __msa_srai_b((v16i8)a, b) - #define SRAI_H(a, b) __msa_srai_h((v8i16)a, b) - #define SRAI_W(a, b) __msa_srai_w((v4i32)a, b) - #define SRLI_H(a, b) __msa_srli_h((v8i16)a, b) - #define SLLI_B(a, b) __msa_slli_b((v4i32)a, b) - #define ANDI_B(a, b) __msa_andi_b((v16u8)a, b) - #define ORI_B(a, b) __msa_ori_b((v16u8)a, b) -#else - #define ALPHAVAL (0xff) - #define ADDVI_H(a, b) (a + b) - #define ADDVI_W(a, b) (a + b) - #define SRAI_B(a, b) (a >> b) - #define SRAI_H(a, b) (a >> b) - #define SRAI_W(a, b) (a >> b) - #define SRLI_H(a, b) (a << b) - #define SLLI_B(a, b) (a << b) - #define ANDI_B(a, b) (a & b) - #define ORI_B(a, b) (a | b) -#endif - -#define LD_B(RTYPE, psrc) *((RTYPE*)(psrc)) -#define LD_UB(...) LD_B(v16u8, __VA_ARGS__) -#define LD_SB(...) LD_B(v16i8, __VA_ARGS__) - -#define LD_H(RTYPE, psrc) *((RTYPE*)(psrc)) -#define LD_UH(...) LD_H(v8u16, __VA_ARGS__) -#define LD_SH(...) LD_H(v8i16, __VA_ARGS__) - -#define LD_W(RTYPE, psrc) *((RTYPE*)(psrc)) -#define LD_UW(...) LD_W(v4u32, __VA_ARGS__) -#define LD_SW(...) LD_W(v4i32, __VA_ARGS__) - -#define ST_B(RTYPE, in, pdst) *((RTYPE*)(pdst)) = in -#define ST_UB(...) ST_B(v16u8, __VA_ARGS__) -#define ST_SB(...) ST_B(v16i8, __VA_ARGS__) - -#define ST_H(RTYPE, in, pdst) *((RTYPE*)(pdst)) = in -#define ST_UH(...) ST_H(v8u16, __VA_ARGS__) -#define ST_SH(...) ST_H(v8i16, __VA_ARGS__) - -#define ST_W(RTYPE, in, pdst) *((RTYPE*)(pdst)) = in -#define ST_UW(...) ST_W(v4u32, __VA_ARGS__) -#define ST_SW(...) ST_W(v4i32, __VA_ARGS__) - -#define MSA_LOAD_FUNC(TYPE, INSTR, FUNC_NAME) \ - static inline TYPE FUNC_NAME(const void* const psrc) { \ - const uint8_t* const psrc_m = (const uint8_t*)psrc; \ - TYPE val_m; \ - asm volatile ( \ - "" #INSTR " %[val_m], %[psrc_m] \n\t" \ - : [val_m] "=r" (val_m) \ - : [psrc_m] "m" (*psrc_m)); \ - return val_m; \ - } - -#define MSA_LOAD(psrc, FUNC_NAME) FUNC_NAME(psrc) - -#define MSA_STORE_FUNC(TYPE, INSTR, FUNC_NAME) \ - static inline void FUNC_NAME(TYPE val, void* const pdst) { \ - uint8_t* const pdst_m = (uint8_t*)pdst; \ - TYPE val_m = val; \ - asm volatile ( \ - " " #INSTR " %[val_m], %[pdst_m] \n\t" \ - : [pdst_m] "=m" (*pdst_m) \ - : [val_m] "r" (val_m)); \ - } - -#define MSA_STORE(val, pdst, FUNC_NAME) FUNC_NAME(val, pdst) - -#if (__mips_isa_rev >= 6) - MSA_LOAD_FUNC(uint16_t, lh, msa_lh); - #define LH(psrc) MSA_LOAD(psrc, msa_lh) - MSA_LOAD_FUNC(uint32_t, lw, msa_lw); - #define LW(psrc) MSA_LOAD(psrc, msa_lw) - #if (__mips == 64) - MSA_LOAD_FUNC(uint64_t, ld, msa_ld); - #define LD(psrc) MSA_LOAD(psrc, msa_ld) - #else // !(__mips == 64) - #define LD(psrc) ((((uint64_t)MSA_LOAD(psrc + 4, msa_lw)) << 32) | \ - MSA_LOAD(psrc, msa_lw)) - #endif // (__mips == 64) - - MSA_STORE_FUNC(uint16_t, sh, msa_sh); - #define SH(val, pdst) MSA_STORE(val, pdst, msa_sh) - MSA_STORE_FUNC(uint32_t, sw, msa_sw); - #define SW(val, pdst) MSA_STORE(val, pdst, msa_sw) - MSA_STORE_FUNC(uint64_t, sd, msa_sd); - #define SD(val, pdst) MSA_STORE(val, pdst, msa_sd) -#else // !(__mips_isa_rev >= 6) - MSA_LOAD_FUNC(uint16_t, ulh, msa_ulh); - #define LH(psrc) MSA_LOAD(psrc, msa_ulh) - MSA_LOAD_FUNC(uint32_t, ulw, msa_ulw); - #define LW(psrc) MSA_LOAD(psrc, msa_ulw) - #if (__mips == 64) - MSA_LOAD_FUNC(uint64_t, uld, msa_uld); - #define LD(psrc) MSA_LOAD(psrc, msa_uld) - #else // !(__mips == 64) - #define LD(psrc) ((((uint64_t)MSA_LOAD(psrc + 4, msa_ulw)) << 32) | \ - MSA_LOAD(psrc, msa_ulw)) - #endif // (__mips == 64) - - MSA_STORE_FUNC(uint16_t, ush, msa_ush); - #define SH(val, pdst) MSA_STORE(val, pdst, msa_ush) - MSA_STORE_FUNC(uint32_t, usw, msa_usw); - #define SW(val, pdst) MSA_STORE(val, pdst, msa_usw) - #define SD(val, pdst) do { \ - uint8_t* const pdst_sd_m = (uint8_t*)(pdst); \ - const uint32_t val0_m = (uint32_t)(val & 0x00000000FFFFFFFF); \ - const uint32_t val1_m = (uint32_t)((val >> 32) & 0x00000000FFFFFFFF); \ - SW(val0_m, pdst_sd_m); \ - SW(val1_m, pdst_sd_m + 4); \ - } while (0) -#endif // (__mips_isa_rev >= 6) - -/* Description : Load 4 words with stride - * Arguments : Inputs - psrc, stride - * Outputs - out0, out1, out2, out3 - * Details : Load word in 'out0' from (psrc) - * Load word in 'out1' from (psrc + stride) - * Load word in 'out2' from (psrc + 2 * stride) - * Load word in 'out3' from (psrc + 3 * stride) - */ -#define LW4(psrc, stride, out0, out1, out2, out3) do { \ - const uint8_t* ptmp = (const uint8_t*)psrc; \ - out0 = LW(ptmp); \ - ptmp += stride; \ - out1 = LW(ptmp); \ - ptmp += stride; \ - out2 = LW(ptmp); \ - ptmp += stride; \ - out3 = LW(ptmp); \ -} while (0) - -/* Description : Store words with stride - * Arguments : Inputs - in0, in1, in2, in3, pdst, stride - * Details : Store word from 'in0' to (pdst) - * Store word from 'in1' to (pdst + stride) - * Store word from 'in2' to (pdst + 2 * stride) - * Store word from 'in3' to (pdst + 3 * stride) - */ -#define SW4(in0, in1, in2, in3, pdst, stride) do { \ - uint8_t* ptmp = (uint8_t*)pdst; \ - SW(in0, ptmp); \ - ptmp += stride; \ - SW(in1, ptmp); \ - ptmp += stride; \ - SW(in2, ptmp); \ - ptmp += stride; \ - SW(in3, ptmp); \ -} while (0) - -#define SW3(in0, in1, in2, pdst, stride) do { \ - uint8_t* ptmp = (uint8_t*)pdst; \ - SW(in0, ptmp); \ - ptmp += stride; \ - SW(in1, ptmp); \ - ptmp += stride; \ - SW(in2, ptmp); \ -} while (0) - -#define SW2(in0, in1, pdst, stride) do { \ - uint8_t* ptmp = (uint8_t*)pdst; \ - SW(in0, ptmp); \ - ptmp += stride; \ - SW(in1, ptmp); \ -} while (0) - -/* Description : Store 4 double words with stride - * Arguments : Inputs - in0, in1, in2, in3, pdst, stride - * Details : Store double word from 'in0' to (pdst) - * Store double word from 'in1' to (pdst + stride) - * Store double word from 'in2' to (pdst + 2 * stride) - * Store double word from 'in3' to (pdst + 3 * stride) - */ -#define SD4(in0, in1, in2, in3, pdst, stride) do { \ - uint8_t* ptmp = (uint8_t*)pdst; \ - SD(in0, ptmp); \ - ptmp += stride; \ - SD(in1, ptmp); \ - ptmp += stride; \ - SD(in2, ptmp); \ - ptmp += stride; \ - SD(in3, ptmp); \ -} while (0) - -/* Description : Load vectors with 16 byte elements with stride - * Arguments : Inputs - psrc, stride - * Outputs - out0, out1 - * Return Type - as per RTYPE - * Details : Load 16 byte elements in 'out0' from (psrc) - * Load 16 byte elements in 'out1' from (psrc + stride) - */ -#define LD_B2(RTYPE, psrc, stride, out0, out1) do { \ - out0 = LD_B(RTYPE, psrc); \ - out1 = LD_B(RTYPE, psrc + stride); \ -} while (0) -#define LD_UB2(...) LD_B2(v16u8, __VA_ARGS__) -#define LD_SB2(...) LD_B2(v16i8, __VA_ARGS__) - -#define LD_B3(RTYPE, psrc, stride, out0, out1, out2) do { \ - LD_B2(RTYPE, psrc, stride, out0, out1); \ - out2 = LD_B(RTYPE, psrc + 2 * stride); \ -} while (0) -#define LD_UB3(...) LD_B3(v16u8, __VA_ARGS__) -#define LD_SB3(...) LD_B3(v16i8, __VA_ARGS__) - -#define LD_B4(RTYPE, psrc, stride, out0, out1, out2, out3) do { \ - LD_B2(RTYPE, psrc, stride, out0, out1); \ - LD_B2(RTYPE, psrc + 2 * stride , stride, out2, out3); \ -} while (0) -#define LD_UB4(...) LD_B4(v16u8, __VA_ARGS__) -#define LD_SB4(...) LD_B4(v16i8, __VA_ARGS__) - -#define LD_B8(RTYPE, psrc, stride, \ - out0, out1, out2, out3, out4, out5, out6, out7) do { \ - LD_B4(RTYPE, psrc, stride, out0, out1, out2, out3); \ - LD_B4(RTYPE, psrc + 4 * stride, stride, out4, out5, out6, out7); \ -} while (0) -#define LD_UB8(...) LD_B8(v16u8, __VA_ARGS__) -#define LD_SB8(...) LD_B8(v16i8, __VA_ARGS__) - -/* Description : Load vectors with 8 halfword elements with stride - * Arguments : Inputs - psrc, stride - * Outputs - out0, out1 - * Details : Load 8 halfword elements in 'out0' from (psrc) - * Load 8 halfword elements in 'out1' from (psrc + stride) - */ -#define LD_H2(RTYPE, psrc, stride, out0, out1) do { \ - out0 = LD_H(RTYPE, psrc); \ - out1 = LD_H(RTYPE, psrc + stride); \ -} while (0) -#define LD_UH2(...) LD_H2(v8u16, __VA_ARGS__) -#define LD_SH2(...) LD_H2(v8i16, __VA_ARGS__) - -/* Description : Load vectors with 4 word elements with stride - * Arguments : Inputs - psrc, stride - * Outputs - out0, out1, out2, out3 - * Details : Load 4 word elements in 'out0' from (psrc + 0 * stride) - * Load 4 word elements in 'out1' from (psrc + 1 * stride) - * Load 4 word elements in 'out2' from (psrc + 2 * stride) - * Load 4 word elements in 'out3' from (psrc + 3 * stride) - */ -#define LD_W2(RTYPE, psrc, stride, out0, out1) do { \ - out0 = LD_W(RTYPE, psrc); \ - out1 = LD_W(RTYPE, psrc + stride); \ -} while (0) -#define LD_UW2(...) LD_W2(v4u32, __VA_ARGS__) -#define LD_SW2(...) LD_W2(v4i32, __VA_ARGS__) - -#define LD_W3(RTYPE, psrc, stride, out0, out1, out2) do { \ - LD_W2(RTYPE, psrc, stride, out0, out1); \ - out2 = LD_W(RTYPE, psrc + 2 * stride); \ -} while (0) -#define LD_UW3(...) LD_W3(v4u32, __VA_ARGS__) -#define LD_SW3(...) LD_W3(v4i32, __VA_ARGS__) - -#define LD_W4(RTYPE, psrc, stride, out0, out1, out2, out3) do { \ - LD_W2(RTYPE, psrc, stride, out0, out1); \ - LD_W2(RTYPE, psrc + 2 * stride, stride, out2, out3); \ -} while (0) -#define LD_UW4(...) LD_W4(v4u32, __VA_ARGS__) -#define LD_SW4(...) LD_W4(v4i32, __VA_ARGS__) - -/* Description : Store vectors of 16 byte elements with stride - * Arguments : Inputs - in0, in1, pdst, stride - * Details : Store 16 byte elements from 'in0' to (pdst) - * Store 16 byte elements from 'in1' to (pdst + stride) - */ -#define ST_B2(RTYPE, in0, in1, pdst, stride) do { \ - ST_B(RTYPE, in0, pdst); \ - ST_B(RTYPE, in1, pdst + stride); \ -} while (0) -#define ST_UB2(...) ST_B2(v16u8, __VA_ARGS__) -#define ST_SB2(...) ST_B2(v16i8, __VA_ARGS__) - -#define ST_B4(RTYPE, in0, in1, in2, in3, pdst, stride) do { \ - ST_B2(RTYPE, in0, in1, pdst, stride); \ - ST_B2(RTYPE, in2, in3, pdst + 2 * stride, stride); \ -} while (0) -#define ST_UB4(...) ST_B4(v16u8, __VA_ARGS__) -#define ST_SB4(...) ST_B4(v16i8, __VA_ARGS__) - -#define ST_B8(RTYPE, in0, in1, in2, in3, in4, in5, in6, in7, \ - pdst, stride) do { \ - ST_B4(RTYPE, in0, in1, in2, in3, pdst, stride); \ - ST_B4(RTYPE, in4, in5, in6, in7, pdst + 4 * stride, stride); \ -} while (0) -#define ST_UB8(...) ST_B8(v16u8, __VA_ARGS__) - -/* Description : Store vectors of 4 word elements with stride - * Arguments : Inputs - in0, in1, in2, in3, pdst, stride - * Details : Store 4 word elements from 'in0' to (pdst + 0 * stride) - * Store 4 word elements from 'in1' to (pdst + 1 * stride) - * Store 4 word elements from 'in2' to (pdst + 2 * stride) - * Store 4 word elements from 'in3' to (pdst + 3 * stride) - */ -#define ST_W2(RTYPE, in0, in1, pdst, stride) do { \ - ST_W(RTYPE, in0, pdst); \ - ST_W(RTYPE, in1, pdst + stride); \ -} while (0) -#define ST_UW2(...) ST_W2(v4u32, __VA_ARGS__) -#define ST_SW2(...) ST_W2(v4i32, __VA_ARGS__) - -#define ST_W3(RTYPE, in0, in1, in2, pdst, stride) do { \ - ST_W2(RTYPE, in0, in1, pdst, stride); \ - ST_W(RTYPE, in2, pdst + 2 * stride); \ -} while (0) -#define ST_UW3(...) ST_W3(v4u32, __VA_ARGS__) -#define ST_SW3(...) ST_W3(v4i32, __VA_ARGS__) - -#define ST_W4(RTYPE, in0, in1, in2, in3, pdst, stride) do { \ - ST_W2(RTYPE, in0, in1, pdst, stride); \ - ST_W2(RTYPE, in2, in3, pdst + 2 * stride, stride); \ -} while (0) -#define ST_UW4(...) ST_W4(v4u32, __VA_ARGS__) -#define ST_SW4(...) ST_W4(v4i32, __VA_ARGS__) - -/* Description : Store vectors of 8 halfword elements with stride - * Arguments : Inputs - in0, in1, pdst, stride - * Details : Store 8 halfword elements from 'in0' to (pdst) - * Store 8 halfword elements from 'in1' to (pdst + stride) - */ -#define ST_H2(RTYPE, in0, in1, pdst, stride) do { \ - ST_H(RTYPE, in0, pdst); \ - ST_H(RTYPE, in1, pdst + stride); \ -} while (0) -#define ST_UH2(...) ST_H2(v8u16, __VA_ARGS__) -#define ST_SH2(...) ST_H2(v8i16, __VA_ARGS__) - -/* Description : Store 2x4 byte block to destination memory from input vector - * Arguments : Inputs - in, stidx, pdst, stride - * Details : Index 'stidx' halfword element from 'in' vector is copied to - * the GP register and stored to (pdst) - * Index 'stidx+1' halfword element from 'in' vector is copied to - * the GP register and stored to (pdst + stride) - * Index 'stidx+2' halfword element from 'in' vector is copied to - * the GP register and stored to (pdst + 2 * stride) - * Index 'stidx+3' halfword element from 'in' vector is copied to - * the GP register and stored to (pdst + 3 * stride) - */ -#define ST2x4_UB(in, stidx, pdst, stride) do { \ - uint8_t* pblk_2x4_m = (uint8_t*)pdst; \ - const uint16_t out0_m = __msa_copy_s_h((v8i16)in, stidx); \ - const uint16_t out1_m = __msa_copy_s_h((v8i16)in, stidx + 1); \ - const uint16_t out2_m = __msa_copy_s_h((v8i16)in, stidx + 2); \ - const uint16_t out3_m = __msa_copy_s_h((v8i16)in, stidx + 3); \ - SH(out0_m, pblk_2x4_m); \ - pblk_2x4_m += stride; \ - SH(out1_m, pblk_2x4_m); \ - pblk_2x4_m += stride; \ - SH(out2_m, pblk_2x4_m); \ - pblk_2x4_m += stride; \ - SH(out3_m, pblk_2x4_m); \ -} while (0) - -/* Description : Store 4x4 byte block to destination memory from input vector - * Arguments : Inputs - in0, in1, pdst, stride - * Details : 'Idx0' word element from input vector 'in0' is copied to the - * GP register and stored to (pdst) - * 'Idx1' word element from input vector 'in0' is copied to the - * GP register and stored to (pdst + stride) - * 'Idx2' word element from input vector 'in0' is copied to the - * GP register and stored to (pdst + 2 * stride) - * 'Idx3' word element from input vector 'in0' is copied to the - * GP register and stored to (pdst + 3 * stride) - */ -#define ST4x4_UB(in0, in1, idx0, idx1, idx2, idx3, pdst, stride) do { \ - uint8_t* const pblk_4x4_m = (uint8_t*)pdst; \ - const uint32_t out0_m = __msa_copy_s_w((v4i32)in0, idx0); \ - const uint32_t out1_m = __msa_copy_s_w((v4i32)in0, idx1); \ - const uint32_t out2_m = __msa_copy_s_w((v4i32)in1, idx2); \ - const uint32_t out3_m = __msa_copy_s_w((v4i32)in1, idx3); \ - SW4(out0_m, out1_m, out2_m, out3_m, pblk_4x4_m, stride); \ -} while (0) - -#define ST4x8_UB(in0, in1, pdst, stride) do { \ - uint8_t* const pblk_4x8 = (uint8_t*)pdst; \ - ST4x4_UB(in0, in0, 0, 1, 2, 3, pblk_4x8, stride); \ - ST4x4_UB(in1, in1, 0, 1, 2, 3, pblk_4x8 + 4 * stride, stride); \ -} while (0) - -/* Description : Immediate number of elements to slide - * Arguments : Inputs - in0, in1, slide_val - * Outputs - out - * Return Type - as per RTYPE - * Details : Byte elements from 'in1' vector are slid into 'in0' by - * value specified in the 'slide_val' - */ -#define SLDI_B(RTYPE, in0, in1, slide_val) \ - (RTYPE)__msa_sldi_b((v16i8)in0, (v16i8)in1, slide_val) \ - -#define SLDI_UB(...) SLDI_B(v16u8, __VA_ARGS__) -#define SLDI_SB(...) SLDI_B(v16i8, __VA_ARGS__) -#define SLDI_SH(...) SLDI_B(v8i16, __VA_ARGS__) - -/* Description : Shuffle byte vector elements as per mask vector - * Arguments : Inputs - in0, in1, in2, in3, mask0, mask1 - * Outputs - out0, out1 - * Return Type - as per RTYPE - * Details : Byte elements from 'in0' & 'in1' are copied selectively to - * 'out0' as per control vector 'mask0' - */ -#define VSHF_B(RTYPE, in0, in1, mask) \ - (RTYPE)__msa_vshf_b((v16i8)mask, (v16i8)in1, (v16i8)in0) - -#define VSHF_UB(...) VSHF_B(v16u8, __VA_ARGS__) -#define VSHF_SB(...) VSHF_B(v16i8, __VA_ARGS__) -#define VSHF_UH(...) VSHF_B(v8u16, __VA_ARGS__) -#define VSHF_SH(...) VSHF_B(v8i16, __VA_ARGS__) - -#define VSHF_B2(RTYPE, in0, in1, in2, in3, mask0, mask1, out0, out1) do { \ - out0 = VSHF_B(RTYPE, in0, in1, mask0); \ - out1 = VSHF_B(RTYPE, in2, in3, mask1); \ -} while (0) -#define VSHF_B2_UB(...) VSHF_B2(v16u8, __VA_ARGS__) -#define VSHF_B2_SB(...) VSHF_B2(v16i8, __VA_ARGS__) -#define VSHF_B2_UH(...) VSHF_B2(v8u16, __VA_ARGS__) -#define VSHF_B2_SH(...) VSHF_B2(v8i16, __VA_ARGS__) - -/* Description : Shuffle halfword vector elements as per mask vector - * Arguments : Inputs - in0, in1, in2, in3, mask0, mask1 - * Outputs - out0, out1 - * Return Type - as per RTYPE - * Details : halfword elements from 'in0' & 'in1' are copied selectively to - * 'out0' as per control vector 'mask0' - */ -#define VSHF_H2(RTYPE, in0, in1, in2, in3, mask0, mask1, out0, out1) do { \ - out0 = (RTYPE)__msa_vshf_h((v8i16)mask0, (v8i16)in1, (v8i16)in0); \ - out1 = (RTYPE)__msa_vshf_h((v8i16)mask1, (v8i16)in3, (v8i16)in2); \ -} while (0) -#define VSHF_H2_UH(...) VSHF_H2(v8u16, __VA_ARGS__) -#define VSHF_H2_SH(...) VSHF_H2(v8i16, __VA_ARGS__) - -/* Description : Dot product of byte vector elements - * Arguments : Inputs - mult0, mult1, cnst0, cnst1 - * Outputs - out0, out1 - * Return Type - as per RTYPE - * Details : Signed byte elements from 'mult0' are multiplied with - * signed byte elements from 'cnst0' producing a result - * twice the size of input i.e. signed halfword. - * The multiplication result of adjacent odd-even elements - * are added together and written to the 'out0' vector -*/ -#define DOTP_SB2(RTYPE, mult0, mult1, cnst0, cnst1, out0, out1) do { \ - out0 = (RTYPE)__msa_dotp_s_h((v16i8)mult0, (v16i8)cnst0); \ - out1 = (RTYPE)__msa_dotp_s_h((v16i8)mult1, (v16i8)cnst1); \ -} while (0) -#define DOTP_SB2_SH(...) DOTP_SB2(v8i16, __VA_ARGS__) - -/* Description : Dot product of halfword vector elements - * Arguments : Inputs - mult0, mult1, cnst0, cnst1 - * Outputs - out0, out1 - * Return Type - as per RTYPE - * Details : Signed halfword elements from 'mult0' are multiplied with - * signed halfword elements from 'cnst0' producing a result - * twice the size of input i.e. signed word. - * The multiplication result of adjacent odd-even elements - * are added together and written to the 'out0' vector - */ -#define DOTP_SH2(RTYPE, mult0, mult1, cnst0, cnst1, out0, out1) do { \ - out0 = (RTYPE)__msa_dotp_s_w((v8i16)mult0, (v8i16)cnst0); \ - out1 = (RTYPE)__msa_dotp_s_w((v8i16)mult1, (v8i16)cnst1); \ -} while (0) -#define DOTP_SH2_SW(...) DOTP_SH2(v4i32, __VA_ARGS__) - -/* Description : Dot product of unsigned word vector elements - * Arguments : Inputs - mult0, mult1, cnst0, cnst1 - * Outputs - out0, out1 - * Return Type - as per RTYPE - * Details : Unsigned word elements from 'mult0' are multiplied with - * unsigned word elements from 'cnst0' producing a result - * twice the size of input i.e. unsigned double word. - * The multiplication result of adjacent odd-even elements - * are added together and written to the 'out0' vector - */ -#define DOTP_UW2(RTYPE, mult0, mult1, cnst0, cnst1, out0, out1) do { \ - out0 = (RTYPE)__msa_dotp_u_d((v4u32)mult0, (v4u32)cnst0); \ - out1 = (RTYPE)__msa_dotp_u_d((v4u32)mult1, (v4u32)cnst1); \ -} while (0) -#define DOTP_UW2_UD(...) DOTP_UW2(v2u64, __VA_ARGS__) - -/* Description : Dot product & addition of halfword vector elements - * Arguments : Inputs - mult0, mult1, cnst0, cnst1 - * Outputs - out0, out1 - * Return Type - as per RTYPE - * Details : Signed halfword elements from 'mult0' are multiplied with - * signed halfword elements from 'cnst0' producing a result - * twice the size of input i.e. signed word. - * The multiplication result of adjacent odd-even elements - * are added to the 'out0' vector - */ -#define DPADD_SH2(RTYPE, mult0, mult1, cnst0, cnst1, out0, out1) do { \ - out0 = (RTYPE)__msa_dpadd_s_w((v4i32)out0, (v8i16)mult0, (v8i16)cnst0); \ - out1 = (RTYPE)__msa_dpadd_s_w((v4i32)out1, (v8i16)mult1, (v8i16)cnst1); \ -} while (0) -#define DPADD_SH2_SW(...) DPADD_SH2(v4i32, __VA_ARGS__) - -/* Description : Clips all signed halfword elements of input vector - * between 0 & 255 - * Arguments : Input/output - val - * Return Type - signed halfword - */ -#define CLIP_SH_0_255(val) do { \ - const v8i16 max_m = __msa_ldi_h(255); \ - val = __msa_maxi_s_h((v8i16)val, 0); \ - val = __msa_min_s_h(max_m, (v8i16)val); \ -} while (0) - -#define CLIP_SH2_0_255(in0, in1) do { \ - CLIP_SH_0_255(in0); \ - CLIP_SH_0_255(in1); \ -} while (0) - -#define CLIP_SH4_0_255(in0, in1, in2, in3) do { \ - CLIP_SH2_0_255(in0, in1); \ - CLIP_SH2_0_255(in2, in3); \ -} while (0) - -/* Description : Clips all unsigned halfword elements of input vector - * between 0 & 255 - * Arguments : Input - in - * Output - out_m - * Return Type - unsigned halfword - */ -#define CLIP_UH_0_255(in) do { \ - const v8u16 max_m = (v8u16)__msa_ldi_h(255); \ - in = __msa_maxi_u_h((v8u16) in, 0); \ - in = __msa_min_u_h((v8u16) max_m, (v8u16) in); \ -} while (0) - -#define CLIP_UH2_0_255(in0, in1) do { \ - CLIP_UH_0_255(in0); \ - CLIP_UH_0_255(in1); \ -} while (0) - -/* Description : Clips all signed word elements of input vector - * between 0 & 255 - * Arguments : Input/output - val - * Return Type - signed word - */ -#define CLIP_SW_0_255(val) do { \ - const v4i32 max_m = __msa_ldi_w(255); \ - val = __msa_maxi_s_w((v4i32)val, 0); \ - val = __msa_min_s_w(max_m, (v4i32)val); \ -} while (0) - -#define CLIP_SW4_0_255(in0, in1, in2, in3) do { \ - CLIP_SW_0_255(in0); \ - CLIP_SW_0_255(in1); \ - CLIP_SW_0_255(in2); \ - CLIP_SW_0_255(in3); \ -} while (0) - -/* Description : Horizontal addition of 4 signed word elements of input vector - * Arguments : Input - in (signed word vector) - * Output - sum_m (i32 sum) - * Return Type - signed word (GP) - * Details : 4 signed word elements of 'in' vector are added together and - * the resulting integer sum is returned - */ -static WEBP_INLINE int32_t func_hadd_sw_s32(v4i32 in) { - const v2i64 res0_m = __msa_hadd_s_d((v4i32)in, (v4i32)in); - const v2i64 res1_m = __msa_splati_d(res0_m, 1); - const v2i64 out = res0_m + res1_m; - int32_t sum_m = __msa_copy_s_w((v4i32)out, 0); - return sum_m; -} -#define HADD_SW_S32(in) func_hadd_sw_s32(in) - -/* Description : Horizontal addition of 8 signed halfword elements - * Arguments : Input - in (signed halfword vector) - * Output - sum_m (s32 sum) - * Return Type - signed word - * Details : 8 signed halfword elements of input vector are added - * together and the resulting integer sum is returned - */ -static WEBP_INLINE int32_t func_hadd_sh_s32(v8i16 in) { - const v4i32 res = __msa_hadd_s_w(in, in); - const v2i64 res0 = __msa_hadd_s_d(res, res); - const v2i64 res1 = __msa_splati_d(res0, 1); - const v2i64 res2 = res0 + res1; - const int32_t sum_m = __msa_copy_s_w((v4i32)res2, 0); - return sum_m; -} -#define HADD_SH_S32(in) func_hadd_sh_s32(in) - -/* Description : Horizontal addition of 8 unsigned halfword elements - * Arguments : Input - in (unsigned halfword vector) - * Output - sum_m (u32 sum) - * Return Type - unsigned word - * Details : 8 unsigned halfword elements of input vector are added - * together and the resulting integer sum is returned - */ -static WEBP_INLINE uint32_t func_hadd_uh_u32(v8u16 in) { - uint32_t sum_m; - const v4u32 res_m = __msa_hadd_u_w(in, in); - v2u64 res0_m = __msa_hadd_u_d(res_m, res_m); - v2u64 res1_m = (v2u64)__msa_splati_d((v2i64)res0_m, 1); - res0_m = res0_m + res1_m; - sum_m = __msa_copy_s_w((v4i32)res0_m, 0); - return sum_m; -} -#define HADD_UH_U32(in) func_hadd_uh_u32(in) - -/* Description : Horizontal addition of signed half word vector elements - Arguments : Inputs - in0, in1 - Outputs - out0, out1 - Return Type - as per RTYPE - Details : Each signed odd half word element from 'in0' is added to - even signed half word element from 'in0' (pairwise) and the - halfword result is written in 'out0' -*/ -#define HADD_SH2(RTYPE, in0, in1, out0, out1) do { \ - out0 = (RTYPE)__msa_hadd_s_w((v8i16)in0, (v8i16)in0); \ - out1 = (RTYPE)__msa_hadd_s_w((v8i16)in1, (v8i16)in1); \ -} while (0) -#define HADD_SH2_SW(...) HADD_SH2(v4i32, __VA_ARGS__) - -#define HADD_SH4(RTYPE, in0, in1, in2, in3, out0, out1, out2, out3) do { \ - HADD_SH2(RTYPE, in0, in1, out0, out1); \ - HADD_SH2(RTYPE, in2, in3, out2, out3); \ -} while (0) -#define HADD_SH4_SW(...) HADD_SH4(v4i32, __VA_ARGS__) - -/* Description : Horizontal subtraction of unsigned byte vector elements - * Arguments : Inputs - in0, in1 - * Outputs - out0, out1 - * Return Type - as per RTYPE - * Details : Each unsigned odd byte element from 'in0' is subtracted from - * even unsigned byte element from 'in0' (pairwise) and the - * halfword result is written to 'out0' - */ -#define HSUB_UB2(RTYPE, in0, in1, out0, out1) do { \ - out0 = (RTYPE)__msa_hsub_u_h((v16u8)in0, (v16u8)in0); \ - out1 = (RTYPE)__msa_hsub_u_h((v16u8)in1, (v16u8)in1); \ -} while (0) -#define HSUB_UB2_UH(...) HSUB_UB2(v8u16, __VA_ARGS__) -#define HSUB_UB2_SH(...) HSUB_UB2(v8i16, __VA_ARGS__) -#define HSUB_UB2_SW(...) HSUB_UB2(v4i32, __VA_ARGS__) - -/* Description : Set element n input vector to GPR value - * Arguments : Inputs - in0, in1, in2, in3 - * Output - out - * Return Type - as per RTYPE - * Details : Set element 0 in vector 'out' to value specified in 'in0' - */ -#define INSERT_W2(RTYPE, in0, in1, out) do { \ - out = (RTYPE)__msa_insert_w((v4i32)out, 0, in0); \ - out = (RTYPE)__msa_insert_w((v4i32)out, 1, in1); \ -} while (0) -#define INSERT_W2_UB(...) INSERT_W2(v16u8, __VA_ARGS__) -#define INSERT_W2_SB(...) INSERT_W2(v16i8, __VA_ARGS__) - -#define INSERT_W4(RTYPE, in0, in1, in2, in3, out) do { \ - out = (RTYPE)__msa_insert_w((v4i32)out, 0, in0); \ - out = (RTYPE)__msa_insert_w((v4i32)out, 1, in1); \ - out = (RTYPE)__msa_insert_w((v4i32)out, 2, in2); \ - out = (RTYPE)__msa_insert_w((v4i32)out, 3, in3); \ -} while (0) -#define INSERT_W4_UB(...) INSERT_W4(v16u8, __VA_ARGS__) -#define INSERT_W4_SB(...) INSERT_W4(v16i8, __VA_ARGS__) -#define INSERT_W4_SW(...) INSERT_W4(v4i32, __VA_ARGS__) - -/* Description : Set element n of double word input vector to GPR value - * Arguments : Inputs - in0, in1 - * Output - out - * Return Type - as per RTYPE - * Details : Set element 0 in vector 'out' to GPR value specified in 'in0' - * Set element 1 in vector 'out' to GPR value specified in 'in1' - */ -#define INSERT_D2(RTYPE, in0, in1, out) do { \ - out = (RTYPE)__msa_insert_d((v2i64)out, 0, in0); \ - out = (RTYPE)__msa_insert_d((v2i64)out, 1, in1); \ -} while (0) -#define INSERT_D2_UB(...) INSERT_D2(v16u8, __VA_ARGS__) -#define INSERT_D2_SB(...) INSERT_D2(v16i8, __VA_ARGS__) - -/* Description : Interleave even byte elements from vectors - * Arguments : Inputs - in0, in1, in2, in3 - * Outputs - out0, out1 - * Return Type - as per RTYPE - * Details : Even byte elements of 'in0' and 'in1' are interleaved - * and written to 'out0' - */ -#define ILVEV_B2(RTYPE, in0, in1, in2, in3, out0, out1) do { \ - out0 = (RTYPE)__msa_ilvev_b((v16i8)in1, (v16i8)in0); \ - out1 = (RTYPE)__msa_ilvev_b((v16i8)in3, (v16i8)in2); \ -} while (0) -#define ILVEV_B2_UB(...) ILVEV_B2(v16u8, __VA_ARGS__) -#define ILVEV_B2_SB(...) ILVEV_B2(v16i8, __VA_ARGS__) -#define ILVEV_B2_UH(...) ILVEV_B2(v8u16, __VA_ARGS__) -#define ILVEV_B2_SH(...) ILVEV_B2(v8i16, __VA_ARGS__) -#define ILVEV_B2_SD(...) ILVEV_B2(v2i64, __VA_ARGS__) - -/* Description : Interleave odd byte elements from vectors - * Arguments : Inputs - in0, in1, in2, in3 - * Outputs - out0, out1 - * Return Type - as per RTYPE - * Details : Odd byte elements of 'in0' and 'in1' are interleaved - * and written to 'out0' - */ -#define ILVOD_B2(RTYPE, in0, in1, in2, in3, out0, out1) do { \ - out0 = (RTYPE)__msa_ilvod_b((v16i8)in1, (v16i8)in0); \ - out1 = (RTYPE)__msa_ilvod_b((v16i8)in3, (v16i8)in2); \ -} while (0) -#define ILVOD_B2_UB(...) ILVOD_B2(v16u8, __VA_ARGS__) -#define ILVOD_B2_SB(...) ILVOD_B2(v16i8, __VA_ARGS__) -#define ILVOD_B2_UH(...) ILVOD_B2(v8u16, __VA_ARGS__) -#define ILVOD_B2_SH(...) ILVOD_B2(v8i16, __VA_ARGS__) -#define ILVOD_B2_SD(...) ILVOD_B2(v2i64, __VA_ARGS__) - -/* Description : Interleave even halfword elements from vectors - * Arguments : Inputs - in0, in1, in2, in3 - * Outputs - out0, out1 - * Return Type - as per RTYPE - * Details : Even halfword elements of 'in0' and 'in1' are interleaved - * and written to 'out0' - */ -#define ILVEV_H2(RTYPE, in0, in1, in2, in3, out0, out1) do { \ - out0 = (RTYPE)__msa_ilvev_h((v8i16)in1, (v8i16)in0); \ - out1 = (RTYPE)__msa_ilvev_h((v8i16)in3, (v8i16)in2); \ -} while (0) -#define ILVEV_H2_UB(...) ILVEV_H2(v16u8, __VA_ARGS__) -#define ILVEV_H2_UH(...) ILVEV_H2(v8u16, __VA_ARGS__) -#define ILVEV_H2_SH(...) ILVEV_H2(v8i16, __VA_ARGS__) -#define ILVEV_H2_SW(...) ILVEV_H2(v4i32, __VA_ARGS__) - -/* Description : Interleave odd halfword elements from vectors - * Arguments : Inputs - in0, in1, in2, in3 - * Outputs - out0, out1 - * Return Type - as per RTYPE - * Details : Odd halfword elements of 'in0' and 'in1' are interleaved - * and written to 'out0' - */ -#define ILVOD_H2(RTYPE, in0, in1, in2, in3, out0, out1) do { \ - out0 = (RTYPE)__msa_ilvod_h((v8i16)in1, (v8i16)in0); \ - out1 = (RTYPE)__msa_ilvod_h((v8i16)in3, (v8i16)in2); \ -} while (0) -#define ILVOD_H2_UB(...) ILVOD_H2(v16u8, __VA_ARGS__) -#define ILVOD_H2_UH(...) ILVOD_H2(v8u16, __VA_ARGS__) -#define ILVOD_H2_SH(...) ILVOD_H2(v8i16, __VA_ARGS__) -#define ILVOD_H2_SW(...) ILVOD_H2(v4i32, __VA_ARGS__) - -/* Description : Interleave even word elements from vectors - * Arguments : Inputs - in0, in1, in2, in3 - * Outputs - out0, out1 - * Return Type - as per RTYPE - * Details : Even word elements of 'in0' and 'in1' are interleaved - * and written to 'out0' - */ -#define ILVEV_W2(RTYPE, in0, in1, in2, in3, out0, out1) do { \ - out0 = (RTYPE)__msa_ilvev_w((v4i32)in1, (v4i32)in0); \ - out1 = (RTYPE)__msa_ilvev_w((v4i32)in3, (v4i32)in2); \ -} while (0) -#define ILVEV_W2_UB(...) ILVEV_W2(v16u8, __VA_ARGS__) -#define ILVEV_W2_SB(...) ILVEV_W2(v16i8, __VA_ARGS__) -#define ILVEV_W2_UH(...) ILVEV_W2(v8u16, __VA_ARGS__) -#define ILVEV_W2_SD(...) ILVEV_W2(v2i64, __VA_ARGS__) - -/* Description : Interleave even-odd word elements from vectors - * Arguments : Inputs - in0, in1, in2, in3 - * Outputs - out0, out1 - * Return Type - as per RTYPE - * Details : Even word elements of 'in0' and 'in1' are interleaved - * and written to 'out0' - * Odd word elements of 'in2' and 'in3' are interleaved - * and written to 'out1' - */ -#define ILVEVOD_W2(RTYPE, in0, in1, in2, in3, out0, out1) do { \ - out0 = (RTYPE)__msa_ilvev_w((v4i32)in1, (v4i32)in0); \ - out1 = (RTYPE)__msa_ilvod_w((v4i32)in3, (v4i32)in2); \ -} while (0) -#define ILVEVOD_W2_UB(...) ILVEVOD_W2(v16u8, __VA_ARGS__) -#define ILVEVOD_W2_UH(...) ILVEVOD_W2(v8u16, __VA_ARGS__) -#define ILVEVOD_W2_SH(...) ILVEVOD_W2(v8i16, __VA_ARGS__) -#define ILVEVOD_W2_SW(...) ILVEVOD_W2(v4i32, __VA_ARGS__) - -/* Description : Interleave even-odd half-word elements from vectors - * Arguments : Inputs - in0, in1, in2, in3 - * Outputs - out0, out1 - * Return Type - as per RTYPE - * Details : Even half-word elements of 'in0' and 'in1' are interleaved - * and written to 'out0' - * Odd half-word elements of 'in2' and 'in3' are interleaved - * and written to 'out1' - */ -#define ILVEVOD_H2(RTYPE, in0, in1, in2, in3, out0, out1) do { \ - out0 = (RTYPE)__msa_ilvev_h((v8i16)in1, (v8i16)in0); \ - out1 = (RTYPE)__msa_ilvod_h((v8i16)in3, (v8i16)in2); \ -} while (0) -#define ILVEVOD_H2_UB(...) ILVEVOD_H2(v16u8, __VA_ARGS__) -#define ILVEVOD_H2_UH(...) ILVEVOD_H2(v8u16, __VA_ARGS__) -#define ILVEVOD_H2_SH(...) ILVEVOD_H2(v8i16, __VA_ARGS__) -#define ILVEVOD_H2_SW(...) ILVEVOD_H2(v4i32, __VA_ARGS__) - -/* Description : Interleave even double word elements from vectors - * Arguments : Inputs - in0, in1, in2, in3 - * Outputs - out0, out1 - * Return Type - as per RTYPE - * Details : Even double word elements of 'in0' and 'in1' are interleaved - * and written to 'out0' - */ -#define ILVEV_D2(RTYPE, in0, in1, in2, in3, out0, out1) do { \ - out0 = (RTYPE)__msa_ilvev_d((v2i64)in1, (v2i64)in0); \ - out1 = (RTYPE)__msa_ilvev_d((v2i64)in3, (v2i64)in2); \ -} while (0) -#define ILVEV_D2_UB(...) ILVEV_D2(v16u8, __VA_ARGS__) -#define ILVEV_D2_SB(...) ILVEV_D2(v16i8, __VA_ARGS__) -#define ILVEV_D2_SW(...) ILVEV_D2(v4i32, __VA_ARGS__) -#define ILVEV_D2_SD(...) ILVEV_D2(v2i64, __VA_ARGS__) - -/* Description : Interleave left half of byte elements from vectors - * Arguments : Inputs - in0, in1, in2, in3 - * Outputs - out0, out1 - * Return Type - as per RTYPE - * Details : Left half of byte elements of 'in0' and 'in1' are interleaved - * and written to 'out0'. - */ -#define ILVL_B2(RTYPE, in0, in1, in2, in3, out0, out1) do { \ - out0 = (RTYPE)__msa_ilvl_b((v16i8)in0, (v16i8)in1); \ - out1 = (RTYPE)__msa_ilvl_b((v16i8)in2, (v16i8)in3); \ -} while (0) -#define ILVL_B2_UB(...) ILVL_B2(v16u8, __VA_ARGS__) -#define ILVL_B2_SB(...) ILVL_B2(v16i8, __VA_ARGS__) -#define ILVL_B2_UH(...) ILVL_B2(v8u16, __VA_ARGS__) -#define ILVL_B2_SH(...) ILVL_B2(v8i16, __VA_ARGS__) -#define ILVL_B2_SW(...) ILVL_B2(v4i32, __VA_ARGS__) - -/* Description : Interleave right half of byte elements from vectors - * Arguments : Inputs - in0, in1, in2, in3 - * Outputs - out0, out1 - * Return Type - as per RTYPE - * Details : Right half of byte elements of 'in0' and 'in1' are interleaved - * and written to out0. - */ -#define ILVR_B2(RTYPE, in0, in1, in2, in3, out0, out1) do { \ - out0 = (RTYPE)__msa_ilvr_b((v16i8)in0, (v16i8)in1); \ - out1 = (RTYPE)__msa_ilvr_b((v16i8)in2, (v16i8)in3); \ -} while (0) -#define ILVR_B2_UB(...) ILVR_B2(v16u8, __VA_ARGS__) -#define ILVR_B2_SB(...) ILVR_B2(v16i8, __VA_ARGS__) -#define ILVR_B2_UH(...) ILVR_B2(v8u16, __VA_ARGS__) -#define ILVR_B2_SH(...) ILVR_B2(v8i16, __VA_ARGS__) -#define ILVR_B2_SW(...) ILVR_B2(v4i32, __VA_ARGS__) - -#define ILVR_B4(RTYPE, in0, in1, in2, in3, in4, in5, in6, in7, \ - out0, out1, out2, out3) do { \ - ILVR_B2(RTYPE, in0, in1, in2, in3, out0, out1); \ - ILVR_B2(RTYPE, in4, in5, in6, in7, out2, out3); \ -} while (0) -#define ILVR_B4_UB(...) ILVR_B4(v16u8, __VA_ARGS__) -#define ILVR_B4_SB(...) ILVR_B4(v16i8, __VA_ARGS__) -#define ILVR_B4_UH(...) ILVR_B4(v8u16, __VA_ARGS__) -#define ILVR_B4_SH(...) ILVR_B4(v8i16, __VA_ARGS__) -#define ILVR_B4_SW(...) ILVR_B4(v4i32, __VA_ARGS__) - -/* Description : Interleave right half of halfword elements from vectors - * Arguments : Inputs - in0, in1, in2, in3 - * Outputs - out0, out1 - * Return Type - as per RTYPE - * Details : Right half of halfword elements of 'in0' and 'in1' are - * interleaved and written to 'out0'. - */ -#define ILVR_H2(RTYPE, in0, in1, in2, in3, out0, out1) do { \ - out0 = (RTYPE)__msa_ilvr_h((v8i16)in0, (v8i16)in1); \ - out1 = (RTYPE)__msa_ilvr_h((v8i16)in2, (v8i16)in3); \ -} while (0) -#define ILVR_H2_UB(...) ILVR_H2(v16u8, __VA_ARGS__) -#define ILVR_H2_SH(...) ILVR_H2(v8i16, __VA_ARGS__) -#define ILVR_H2_SW(...) ILVR_H2(v4i32, __VA_ARGS__) - -#define ILVR_H4(RTYPE, in0, in1, in2, in3, in4, in5, in6, in7, \ - out0, out1, out2, out3) do { \ - ILVR_H2(RTYPE, in0, in1, in2, in3, out0, out1); \ - ILVR_H2(RTYPE, in4, in5, in6, in7, out2, out3); \ -} while (0) -#define ILVR_H4_UB(...) ILVR_H4(v16u8, __VA_ARGS__) -#define ILVR_H4_SH(...) ILVR_H4(v8i16, __VA_ARGS__) -#define ILVR_H4_SW(...) ILVR_H4(v4i32, __VA_ARGS__) - -/* Description : Interleave right half of double word elements from vectors - * Arguments : Inputs - in0, in1, in2, in3 - * Outputs - out0, out1 - * Return Type - as per RTYPE - * Details : Right half of double word elements of 'in0' and 'in1' are - * interleaved and written to 'out0'. - */ -#define ILVR_D2(RTYPE, in0, in1, in2, in3, out0, out1) do { \ - out0 = (RTYPE)__msa_ilvr_d((v2i64)in0, (v2i64)in1); \ - out1 = (RTYPE)__msa_ilvr_d((v2i64)in2, (v2i64)in3); \ -} while (0) -#define ILVR_D2_UB(...) ILVR_D2(v16u8, __VA_ARGS__) -#define ILVR_D2_SB(...) ILVR_D2(v16i8, __VA_ARGS__) -#define ILVR_D2_SH(...) ILVR_D2(v8i16, __VA_ARGS__) - -#define ILVR_D4(RTYPE, in0, in1, in2, in3, in4, in5, in6, in7, \ - out0, out1, out2, out3) do { \ - ILVR_D2(RTYPE, in0, in1, in2, in3, out0, out1); \ - ILVR_D2(RTYPE, in4, in5, in6, in7, out2, out3); \ -} while (0) -#define ILVR_D4_SB(...) ILVR_D4(v16i8, __VA_ARGS__) -#define ILVR_D4_UB(...) ILVR_D4(v16u8, __VA_ARGS__) - -/* Description : Interleave both left and right half of input vectors - * Arguments : Inputs - in0, in1 - * Outputs - out0, out1 - * Return Type - as per RTYPE - * Details : Right half of byte elements from 'in0' and 'in1' are - * interleaved and written to 'out0' - */ -#define ILVRL_B2(RTYPE, in0, in1, out0, out1) do { \ - out0 = (RTYPE)__msa_ilvr_b((v16i8)in0, (v16i8)in1); \ - out1 = (RTYPE)__msa_ilvl_b((v16i8)in0, (v16i8)in1); \ -} while (0) -#define ILVRL_B2_UB(...) ILVRL_B2(v16u8, __VA_ARGS__) -#define ILVRL_B2_SB(...) ILVRL_B2(v16i8, __VA_ARGS__) -#define ILVRL_B2_UH(...) ILVRL_B2(v8u16, __VA_ARGS__) -#define ILVRL_B2_SH(...) ILVRL_B2(v8i16, __VA_ARGS__) -#define ILVRL_B2_SW(...) ILVRL_B2(v4i32, __VA_ARGS__) - -#define ILVRL_H2(RTYPE, in0, in1, out0, out1) do { \ - out0 = (RTYPE)__msa_ilvr_h((v8i16)in0, (v8i16)in1); \ - out1 = (RTYPE)__msa_ilvl_h((v8i16)in0, (v8i16)in1); \ -} while (0) -#define ILVRL_H2_UB(...) ILVRL_H2(v16u8, __VA_ARGS__) -#define ILVRL_H2_SB(...) ILVRL_H2(v16i8, __VA_ARGS__) -#define ILVRL_H2_SH(...) ILVRL_H2(v8i16, __VA_ARGS__) -#define ILVRL_H2_SW(...) ILVRL_H2(v4i32, __VA_ARGS__) -#define ILVRL_H2_UW(...) ILVRL_H2(v4u32, __VA_ARGS__) - -#define ILVRL_W2(RTYPE, in0, in1, out0, out1) do { \ - out0 = (RTYPE)__msa_ilvr_w((v4i32)in0, (v4i32)in1); \ - out1 = (RTYPE)__msa_ilvl_w((v4i32)in0, (v4i32)in1); \ -} while (0) -#define ILVRL_W2_UB(...) ILVRL_W2(v16u8, __VA_ARGS__) -#define ILVRL_W2_SH(...) ILVRL_W2(v8i16, __VA_ARGS__) -#define ILVRL_W2_SW(...) ILVRL_W2(v4i32, __VA_ARGS__) -#define ILVRL_W2_UW(...) ILVRL_W2(v4u32, __VA_ARGS__) - -/* Description : Pack even byte elements of vector pairs - * Arguments : Inputs - in0, in1, in2, in3 - * Outputs - out0, out1 - * Return Type - as per RTYPE - * Details : Even byte elements of 'in0' are copied to the left half of - * 'out0' & even byte elements of 'in1' are copied to the right - * half of 'out0'. - */ -#define PCKEV_B2(RTYPE, in0, in1, in2, in3, out0, out1) do { \ - out0 = (RTYPE)__msa_pckev_b((v16i8)in0, (v16i8)in1); \ - out1 = (RTYPE)__msa_pckev_b((v16i8)in2, (v16i8)in3); \ -} while (0) -#define PCKEV_B2_SB(...) PCKEV_B2(v16i8, __VA_ARGS__) -#define PCKEV_B2_UB(...) PCKEV_B2(v16u8, __VA_ARGS__) -#define PCKEV_B2_SH(...) PCKEV_B2(v8i16, __VA_ARGS__) -#define PCKEV_B2_SW(...) PCKEV_B2(v4i32, __VA_ARGS__) - -#define PCKEV_B4(RTYPE, in0, in1, in2, in3, in4, in5, in6, in7, \ - out0, out1, out2, out3) do { \ - PCKEV_B2(RTYPE, in0, in1, in2, in3, out0, out1); \ - PCKEV_B2(RTYPE, in4, in5, in6, in7, out2, out3); \ -} while (0) -#define PCKEV_B4_SB(...) PCKEV_B4(v16i8, __VA_ARGS__) -#define PCKEV_B4_UB(...) PCKEV_B4(v16u8, __VA_ARGS__) -#define PCKEV_B4_SH(...) PCKEV_B4(v8i16, __VA_ARGS__) -#define PCKEV_B4_SW(...) PCKEV_B4(v4i32, __VA_ARGS__) - -/* Description : Pack even halfword elements of vector pairs - * Arguments : Inputs - in0, in1, in2, in3 - * Outputs - out0, out1 - * Return Type - as per RTYPE - * Details : Even halfword elements of 'in0' are copied to the left half of - * 'out0' & even halfword elements of 'in1' are copied to the - * right half of 'out0'. - */ -#define PCKEV_H2(RTYPE, in0, in1, in2, in3, out0, out1) do { \ - out0 = (RTYPE)__msa_pckev_h((v8i16)in0, (v8i16)in1); \ - out1 = (RTYPE)__msa_pckev_h((v8i16)in2, (v8i16)in3); \ -} while (0) -#define PCKEV_H2_UH(...) PCKEV_H2(v8u16, __VA_ARGS__) -#define PCKEV_H2_SH(...) PCKEV_H2(v8i16, __VA_ARGS__) -#define PCKEV_H2_SW(...) PCKEV_H2(v4i32, __VA_ARGS__) -#define PCKEV_H2_UW(...) PCKEV_H2(v4u32, __VA_ARGS__) - -/* Description : Pack even word elements of vector pairs - * Arguments : Inputs - in0, in1, in2, in3 - * Outputs - out0, out1 - * Return Type - as per RTYPE - * Details : Even word elements of 'in0' are copied to the left half of - * 'out0' & even word elements of 'in1' are copied to the - * right half of 'out0'. - */ -#define PCKEV_W2(RTYPE, in0, in1, in2, in3, out0, out1) do { \ - out0 = (RTYPE)__msa_pckev_w((v4i32)in0, (v4i32)in1); \ - out1 = (RTYPE)__msa_pckev_w((v4i32)in2, (v4i32)in3); \ -} while (0) -#define PCKEV_W2_UH(...) PCKEV_W2(v8u16, __VA_ARGS__) -#define PCKEV_W2_SH(...) PCKEV_W2(v8i16, __VA_ARGS__) -#define PCKEV_W2_SW(...) PCKEV_W2(v4i32, __VA_ARGS__) -#define PCKEV_W2_UW(...) PCKEV_W2(v4u32, __VA_ARGS__) - -/* Description : Pack odd halfword elements of vector pairs - * Arguments : Inputs - in0, in1, in2, in3 - * Outputs - out0, out1 - * Return Type - as per RTYPE - * Details : Odd halfword elements of 'in0' are copied to the left half of - * 'out0' & odd halfword elements of 'in1' are copied to the - * right half of 'out0'. - */ -#define PCKOD_H2(RTYPE, in0, in1, in2, in3, out0, out1) do { \ - out0 = (RTYPE)__msa_pckod_h((v8i16)in0, (v8i16)in1); \ - out1 = (RTYPE)__msa_pckod_h((v8i16)in2, (v8i16)in3); \ -} while (0) -#define PCKOD_H2_UH(...) PCKOD_H2(v8u16, __VA_ARGS__) -#define PCKOD_H2_SH(...) PCKOD_H2(v8i16, __VA_ARGS__) -#define PCKOD_H2_SW(...) PCKOD_H2(v4i32, __VA_ARGS__) -#define PCKOD_H2_UW(...) PCKOD_H2(v4u32, __VA_ARGS__) - -/* Description : Arithmetic immediate shift right all elements of word vector - * Arguments : Inputs - in0, in1, shift - * Outputs - in place operation - * Return Type - as per input vector RTYPE - * Details : Each element of vector 'in0' is right shifted by 'shift' and - * the result is written in-place. 'shift' is a GP variable. - */ -#define SRAI_W2(RTYPE, in0, in1, shift_val) do { \ - in0 = (RTYPE)SRAI_W(in0, shift_val); \ - in1 = (RTYPE)SRAI_W(in1, shift_val); \ -} while (0) -#define SRAI_W2_SW(...) SRAI_W2(v4i32, __VA_ARGS__) -#define SRAI_W2_UW(...) SRAI_W2(v4u32, __VA_ARGS__) - -#define SRAI_W4(RTYPE, in0, in1, in2, in3, shift_val) do { \ - SRAI_W2(RTYPE, in0, in1, shift_val); \ - SRAI_W2(RTYPE, in2, in3, shift_val); \ -} while (0) -#define SRAI_W4_SW(...) SRAI_W4(v4i32, __VA_ARGS__) -#define SRAI_W4_UW(...) SRAI_W4(v4u32, __VA_ARGS__) - -/* Description : Arithmetic shift right all elements of half-word vector - * Arguments : Inputs - in0, in1, shift - * Outputs - in place operation - * Return Type - as per input vector RTYPE - * Details : Each element of vector 'in0' is right shifted by 'shift' and - * the result is written in-place. 'shift' is a GP variable. - */ -#define SRAI_H2(RTYPE, in0, in1, shift_val) do { \ - in0 = (RTYPE)SRAI_H(in0, shift_val); \ - in1 = (RTYPE)SRAI_H(in1, shift_val); \ -} while (0) -#define SRAI_H2_SH(...) SRAI_H2(v8i16, __VA_ARGS__) -#define SRAI_H2_UH(...) SRAI_H2(v8u16, __VA_ARGS__) - -/* Description : Arithmetic rounded shift right all elements of word vector - * Arguments : Inputs - in0, in1, shift - * Outputs - in place operation - * Return Type - as per input vector RTYPE - * Details : Each element of vector 'in0' is right shifted by 'shift' and - * the result is written in-place. 'shift' is a GP variable. - */ -#define SRARI_W2(RTYPE, in0, in1, shift) do { \ - in0 = (RTYPE)__msa_srari_w((v4i32)in0, shift); \ - in1 = (RTYPE)__msa_srari_w((v4i32)in1, shift); \ -} while (0) -#define SRARI_W2_SW(...) SRARI_W2(v4i32, __VA_ARGS__) - -#define SRARI_W4(RTYPE, in0, in1, in2, in3, shift) do { \ - SRARI_W2(RTYPE, in0, in1, shift); \ - SRARI_W2(RTYPE, in2, in3, shift); \ -} while (0) -#define SRARI_W4_SH(...) SRARI_W4(v8i16, __VA_ARGS__) -#define SRARI_W4_UW(...) SRARI_W4(v4u32, __VA_ARGS__) -#define SRARI_W4_SW(...) SRARI_W4(v4i32, __VA_ARGS__) - -/* Description : Shift right arithmetic rounded double words - * Arguments : Inputs - in0, in1, shift - * Outputs - in place operation - * Return Type - as per RTYPE - * Details : Each element of vector 'in0' is shifted right arithmetically by - * the number of bits in the corresponding element in the vector - * 'shift'. The last discarded bit is added to shifted value for - * rounding and the result is written in-place. - * 'shift' is a vector. - */ -#define SRAR_D2(RTYPE, in0, in1, shift) do { \ - in0 = (RTYPE)__msa_srar_d((v2i64)in0, (v2i64)shift); \ - in1 = (RTYPE)__msa_srar_d((v2i64)in1, (v2i64)shift); \ -} while (0) -#define SRAR_D2_SW(...) SRAR_D2(v4i32, __VA_ARGS__) -#define SRAR_D2_SD(...) SRAR_D2(v2i64, __VA_ARGS__) -#define SRAR_D2_UD(...) SRAR_D2(v2u64, __VA_ARGS__) - -#define SRAR_D4(RTYPE, in0, in1, in2, in3, shift) do { \ - SRAR_D2(RTYPE, in0, in1, shift); \ - SRAR_D2(RTYPE, in2, in3, shift); \ -} while (0) -#define SRAR_D4_SD(...) SRAR_D4(v2i64, __VA_ARGS__) -#define SRAR_D4_UD(...) SRAR_D4(v2u64, __VA_ARGS__) - -/* Description : Addition of 2 pairs of half-word vectors - * Arguments : Inputs - in0, in1, in2, in3 - * Outputs - out0, out1 - * Details : Each element in 'in0' is added to 'in1' and result is written - * to 'out0'. - */ -#define ADDVI_H2(RTYPE, in0, in1, in2, in3, out0, out1) do { \ - out0 = (RTYPE)ADDVI_H(in0, in1); \ - out1 = (RTYPE)ADDVI_H(in2, in3); \ -} while (0) -#define ADDVI_H2_SH(...) ADDVI_H2(v8i16, __VA_ARGS__) -#define ADDVI_H2_UH(...) ADDVI_H2(v8u16, __VA_ARGS__) - -/* Description : Addition of 2 pairs of word vectors - * Arguments : Inputs - in0, in1, in2, in3 - * Outputs - out0, out1 - * Details : Each element in 'in0' is added to 'in1' and result is written - * to 'out0'. - */ -#define ADDVI_W2(RTYPE, in0, in1, in2, in3, out0, out1) do { \ - out0 = (RTYPE)ADDVI_W(in0, in1); \ - out1 = (RTYPE)ADDVI_W(in2, in3); \ -} while (0) -#define ADDVI_W2_SW(...) ADDVI_W2(v4i32, __VA_ARGS__) - -/* Description : Fill 2 pairs of word vectors with GP registers - * Arguments : Inputs - in0, in1 - * Outputs - out0, out1 - * Details : GP register in0 is replicated in each word element of out0 - * GP register in1 is replicated in each word element of out1 - */ -#define FILL_W2(RTYPE, in0, in1, out0, out1) do { \ - out0 = (RTYPE)__msa_fill_w(in0); \ - out1 = (RTYPE)__msa_fill_w(in1); \ -} while (0) -#define FILL_W2_SW(...) FILL_W2(v4i32, __VA_ARGS__) - -/* Description : Addition of 2 pairs of vectors - * Arguments : Inputs - in0, in1, in2, in3 - * Outputs - out0, out1 - * Details : Each element in 'in0' is added to 'in1' and result is written - * to 'out0'. - */ -#define ADD2(in0, in1, in2, in3, out0, out1) do { \ - out0 = in0 + in1; \ - out1 = in2 + in3; \ -} while (0) - -#define ADD4(in0, in1, in2, in3, in4, in5, in6, in7, \ - out0, out1, out2, out3) do { \ - ADD2(in0, in1, in2, in3, out0, out1); \ - ADD2(in4, in5, in6, in7, out2, out3); \ -} while (0) - -/* Description : Subtraction of 2 pairs of vectors - * Arguments : Inputs - in0, in1, in2, in3 - * Outputs - out0, out1 - * Details : Each element in 'in1' is subtracted from 'in0' and result is - * written to 'out0'. - */ -#define SUB2(in0, in1, in2, in3, out0, out1) do { \ - out0 = in0 - in1; \ - out1 = in2 - in3; \ -} while (0) - -#define SUB3(in0, in1, in2, in3, in4, in5, out0, out1, out2) do { \ - out0 = in0 - in1; \ - out1 = in2 - in3; \ - out2 = in4 - in5; \ -} while (0) - -#define SUB4(in0, in1, in2, in3, in4, in5, in6, in7, \ - out0, out1, out2, out3) do { \ - out0 = in0 - in1; \ - out1 = in2 - in3; \ - out2 = in4 - in5; \ - out3 = in6 - in7; \ -} while (0) - -/* Description : Addition - Subtraction of input vectors - * Arguments : Inputs - in0, in1 - * Outputs - out0, out1 - * Details : Each element in 'in1' is added to 'in0' and result is - * written to 'out0'. - * Each element in 'in1' is subtracted from 'in0' and result is - * written to 'out1'. - */ -#define ADDSUB2(in0, in1, out0, out1) do { \ - out0 = in0 + in1; \ - out1 = in0 - in1; \ -} while (0) - -/* Description : Multiplication of pairs of vectors - * Arguments : Inputs - in0, in1, in2, in3 - * Outputs - out0, out1 - * Details : Each element from 'in0' is multiplied with elements from 'in1' - * and the result is written to 'out0' - */ -#define MUL2(in0, in1, in2, in3, out0, out1) do { \ - out0 = in0 * in1; \ - out1 = in2 * in3; \ -} while (0) - -#define MUL4(in0, in1, in2, in3, in4, in5, in6, in7, \ - out0, out1, out2, out3) do { \ - MUL2(in0, in1, in2, in3, out0, out1); \ - MUL2(in4, in5, in6, in7, out2, out3); \ -} while (0) - -/* Description : Sign extend halfword elements from right half of the vector - * Arguments : Input - in (halfword vector) - * Output - out (sign extended word vector) - * Return Type - signed word - * Details : Sign bit of halfword elements from input vector 'in' is - * extracted and interleaved with same vector 'in0' to generate - * 4 word elements keeping sign intact - */ -#define UNPCK_R_SH_SW(in, out) do { \ - const v8i16 sign_m = __msa_clti_s_h((v8i16)in, 0); \ - out = (v4i32)__msa_ilvr_h(sign_m, (v8i16)in); \ -} while (0) - -/* Description : Sign extend halfword elements from input vector and return - * the result in pair of vectors - * Arguments : Input - in (halfword vector) - * Outputs - out0, out1 (sign extended word vectors) - * Return Type - signed word - * Details : Sign bit of halfword elements from input vector 'in' is - * extracted and interleaved right with same vector 'in0' to - * generate 4 signed word elements in 'out0' - * Then interleaved left with same vector 'in0' to - * generate 4 signed word elements in 'out1' - */ -#define UNPCK_SH_SW(in, out0, out1) do { \ - const v8i16 tmp_m = __msa_clti_s_h((v8i16)in, 0); \ - ILVRL_H2_SW(tmp_m, in, out0, out1); \ -} while (0) - -/* Description : Butterfly of 4 input vectors - * Arguments : Inputs - in0, in1, in2, in3 - * Outputs - out0, out1, out2, out3 - * Details : Butterfly operation - */ -#define BUTTERFLY_4(in0, in1, in2, in3, out0, out1, out2, out3) do { \ - out0 = in0 + in3; \ - out1 = in1 + in2; \ - out2 = in1 - in2; \ - out3 = in0 - in3; \ -} while (0) - -/* Description : Transpose 16x4 block into 4x16 with byte elements in vectors - * Arguments : Inputs - in0, in1, in2, in3, in4, in5, in6, in7, - * in8, in9, in10, in11, in12, in13, in14, in15 - * Outputs - out0, out1, out2, out3 - * Return Type - unsigned byte - */ -#define TRANSPOSE16x4_UB_UB(in0, in1, in2, in3, in4, in5, in6, in7, \ - in8, in9, in10, in11, in12, in13, in14, in15, \ - out0, out1, out2, out3) do { \ - v2i64 tmp0_m, tmp1_m, tmp2_m, tmp3_m, tmp4_m, tmp5_m; \ - ILVEV_W2_SD(in0, in4, in8, in12, tmp2_m, tmp3_m); \ - ILVEV_W2_SD(in1, in5, in9, in13, tmp0_m, tmp1_m); \ - ILVEV_D2_UB(tmp2_m, tmp3_m, tmp0_m, tmp1_m, out1, out3); \ - ILVEV_W2_SD(in2, in6, in10, in14, tmp4_m, tmp5_m); \ - ILVEV_W2_SD(in3, in7, in11, in15, tmp0_m, tmp1_m); \ - ILVEV_D2_SD(tmp4_m, tmp5_m, tmp0_m, tmp1_m, tmp2_m, tmp3_m); \ - ILVEV_B2_SD(out1, out3, tmp2_m, tmp3_m, tmp0_m, tmp1_m); \ - ILVEVOD_H2_UB(tmp0_m, tmp1_m, tmp0_m, tmp1_m, out0, out2); \ - ILVOD_B2_SD(out1, out3, tmp2_m, tmp3_m, tmp0_m, tmp1_m); \ - ILVEVOD_H2_UB(tmp0_m, tmp1_m, tmp0_m, tmp1_m, out1, out3); \ -} while (0) - -/* Description : Transpose 16x8 block into 8x16 with byte elements in vectors - * Arguments : Inputs - in0, in1, in2, in3, in4, in5, in6, in7, - * in8, in9, in10, in11, in12, in13, in14, in15 - * Outputs - out0, out1, out2, out3, out4, out5, out6, out7 - * Return Type - unsigned byte - */ -#define TRANSPOSE16x8_UB_UB(in0, in1, in2, in3, in4, in5, in6, in7, \ - in8, in9, in10, in11, in12, in13, in14, in15, \ - out0, out1, out2, out3, out4, out5, \ - out6, out7) do { \ - v8i16 tmp0_m, tmp1_m, tmp4_m, tmp5_m, tmp6_m, tmp7_m; \ - v4i32 tmp2_m, tmp3_m; \ - ILVEV_D2_UB(in0, in8, in1, in9, out7, out6); \ - ILVEV_D2_UB(in2, in10, in3, in11, out5, out4); \ - ILVEV_D2_UB(in4, in12, in5, in13, out3, out2); \ - ILVEV_D2_UB(in6, in14, in7, in15, out1, out0); \ - ILVEV_B2_SH(out7, out6, out5, out4, tmp0_m, tmp1_m); \ - ILVOD_B2_SH(out7, out6, out5, out4, tmp4_m, tmp5_m); \ - ILVEV_B2_UB(out3, out2, out1, out0, out5, out7); \ - ILVOD_B2_SH(out3, out2, out1, out0, tmp6_m, tmp7_m); \ - ILVEV_H2_SW(tmp0_m, tmp1_m, out5, out7, tmp2_m, tmp3_m); \ - ILVEVOD_W2_UB(tmp2_m, tmp3_m, tmp2_m, tmp3_m, out0, out4); \ - ILVOD_H2_SW(tmp0_m, tmp1_m, out5, out7, tmp2_m, tmp3_m); \ - ILVEVOD_W2_UB(tmp2_m, tmp3_m, tmp2_m, tmp3_m, out2, out6); \ - ILVEV_H2_SW(tmp4_m, tmp5_m, tmp6_m, tmp7_m, tmp2_m, tmp3_m); \ - ILVEVOD_W2_UB(tmp2_m, tmp3_m, tmp2_m, tmp3_m, out1, out5); \ - ILVOD_H2_SW(tmp4_m, tmp5_m, tmp6_m, tmp7_m, tmp2_m, tmp3_m); \ - ILVEVOD_W2_UB(tmp2_m, tmp3_m, tmp2_m, tmp3_m, out3, out7); \ -} while (0) - -/* Description : Transpose 4x4 block with word elements in vectors - * Arguments : Inputs - in0, in1, in2, in3 - * Outputs - out0, out1, out2, out3 - * Return Type - as per RTYPE - */ -#define TRANSPOSE4x4_W(RTYPE, in0, in1, in2, in3, \ - out0, out1, out2, out3) do { \ - v4i32 s0_m, s1_m, s2_m, s3_m; \ - ILVRL_W2_SW(in1, in0, s0_m, s1_m); \ - ILVRL_W2_SW(in3, in2, s2_m, s3_m); \ - out0 = (RTYPE)__msa_ilvr_d((v2i64)s2_m, (v2i64)s0_m); \ - out1 = (RTYPE)__msa_ilvl_d((v2i64)s2_m, (v2i64)s0_m); \ - out2 = (RTYPE)__msa_ilvr_d((v2i64)s3_m, (v2i64)s1_m); \ - out3 = (RTYPE)__msa_ilvl_d((v2i64)s3_m, (v2i64)s1_m); \ -} while (0) -#define TRANSPOSE4x4_SW_SW(...) TRANSPOSE4x4_W(v4i32, __VA_ARGS__) - -/* Description : Add block 4x4 - * Arguments : Inputs - in0, in1, in2, in3, pdst, stride - * Details : Least significant 4 bytes from each input vector are added to - * the destination bytes, clipped between 0-255 and stored. - */ -#define ADDBLK_ST4x4_UB(in0, in1, in2, in3, pdst, stride) do { \ - uint32_t src0_m, src1_m, src2_m, src3_m; \ - v8i16 inp0_m, inp1_m, res0_m, res1_m; \ - v16i8 dst0_m = { 0 }; \ - v16i8 dst1_m = { 0 }; \ - const v16i8 zero_m = { 0 }; \ - ILVR_D2_SH(in1, in0, in3, in2, inp0_m, inp1_m); \ - LW4(pdst, stride, src0_m, src1_m, src2_m, src3_m); \ - INSERT_W2_SB(src0_m, src1_m, dst0_m); \ - INSERT_W2_SB(src2_m, src3_m, dst1_m); \ - ILVR_B2_SH(zero_m, dst0_m, zero_m, dst1_m, res0_m, res1_m); \ - ADD2(res0_m, inp0_m, res1_m, inp1_m, res0_m, res1_m); \ - CLIP_SH2_0_255(res0_m, res1_m); \ - PCKEV_B2_SB(res0_m, res0_m, res1_m, res1_m, dst0_m, dst1_m); \ - ST4x4_UB(dst0_m, dst1_m, 0, 1, 0, 1, pdst, stride); \ -} while (0) - -/* Description : Pack even byte elements, extract 0 & 2 index words from pair - * of results and store 4 words in destination memory as per - * stride - * Arguments : Inputs - in0, in1, in2, in3, pdst, stride - */ -#define PCKEV_ST4x4_UB(in0, in1, in2, in3, pdst, stride) do { \ - v16i8 tmp0_m, tmp1_m; \ - PCKEV_B2_SB(in1, in0, in3, in2, tmp0_m, tmp1_m); \ - ST4x4_UB(tmp0_m, tmp1_m, 0, 2, 0, 2, pdst, stride); \ -} while (0) - -/* Description : average with rounding (in0 + in1 + 1) / 2. - * Arguments : Inputs - in0, in1, in2, in3, - * Outputs - out0, out1 - * Return Type - as per RTYPE - * Details : Each unsigned byte element from 'in0' vector is added with - * each unsigned byte element from 'in1' vector. Then the average - * with rounding is calculated and written to 'out0' - */ -#define AVER_UB2(RTYPE, in0, in1, in2, in3, out0, out1) do { \ - out0 = (RTYPE)__msa_aver_u_b((v16u8)in0, (v16u8)in1); \ - out1 = (RTYPE)__msa_aver_u_b((v16u8)in2, (v16u8)in3); \ -} while (0) -#define AVER_UB2_UB(...) AVER_UB2(v16u8, __VA_ARGS__) - -#endif // WEBP_DSP_MSA_MACRO_H_ diff --git a/Extended/libwebp/src/dsp/neon.h b/Extended/libwebp/src/dsp/neon.h deleted file mode 100644 index aa1dea1..0000000 --- a/Extended/libwebp/src/dsp/neon.h +++ /dev/null @@ -1,101 +0,0 @@ -// Copyright 2014 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// NEON common code. - -#ifndef WEBP_DSP_NEON_H_ -#define WEBP_DSP_NEON_H_ - -#include - -#include "src/dsp/dsp.h" - -// Right now, some intrinsics functions seem slower, so we disable them -// everywhere except newer clang/gcc or aarch64 where the inline assembly is -// incompatible. -#if LOCAL_CLANG_PREREQ(3,8) || LOCAL_GCC_PREREQ(4,9) || defined(__aarch64__) -#define WEBP_USE_INTRINSICS // use intrinsics when possible -#endif - -#define INIT_VECTOR2(v, a, b) do { \ - v.val[0] = a; \ - v.val[1] = b; \ -} while (0) - -#define INIT_VECTOR3(v, a, b, c) do { \ - v.val[0] = a; \ - v.val[1] = b; \ - v.val[2] = c; \ -} while (0) - -#define INIT_VECTOR4(v, a, b, c, d) do { \ - v.val[0] = a; \ - v.val[1] = b; \ - v.val[2] = c; \ - v.val[3] = d; \ -} while (0) - -// if using intrinsics, this flag avoids some functions that make gcc-4.6.3 -// crash ("internal compiler error: in immed_double_const, at emit-rtl."). -// (probably similar to gcc.gnu.org/bugzilla/show_bug.cgi?id=48183) -#if !(LOCAL_CLANG_PREREQ(3,8) || LOCAL_GCC_PREREQ(4,8) || defined(__aarch64__)) -#define WORK_AROUND_GCC -#endif - -static WEBP_INLINE int32x4x4_t Transpose4x4_NEON(const int32x4x4_t rows) { - uint64x2x2_t row01, row23; - - row01.val[0] = vreinterpretq_u64_s32(rows.val[0]); - row01.val[1] = vreinterpretq_u64_s32(rows.val[1]); - row23.val[0] = vreinterpretq_u64_s32(rows.val[2]); - row23.val[1] = vreinterpretq_u64_s32(rows.val[3]); - // Transpose 64-bit values (there's no vswp equivalent) - { - const uint64x1_t row0h = vget_high_u64(row01.val[0]); - const uint64x1_t row2l = vget_low_u64(row23.val[0]); - const uint64x1_t row1h = vget_high_u64(row01.val[1]); - const uint64x1_t row3l = vget_low_u64(row23.val[1]); - row01.val[0] = vcombine_u64(vget_low_u64(row01.val[0]), row2l); - row23.val[0] = vcombine_u64(row0h, vget_high_u64(row23.val[0])); - row01.val[1] = vcombine_u64(vget_low_u64(row01.val[1]), row3l); - row23.val[1] = vcombine_u64(row1h, vget_high_u64(row23.val[1])); - } - { - const int32x4x2_t out01 = vtrnq_s32(vreinterpretq_s32_u64(row01.val[0]), - vreinterpretq_s32_u64(row01.val[1])); - const int32x4x2_t out23 = vtrnq_s32(vreinterpretq_s32_u64(row23.val[0]), - vreinterpretq_s32_u64(row23.val[1])); - int32x4x4_t out; - out.val[0] = out01.val[0]; - out.val[1] = out01.val[1]; - out.val[2] = out23.val[0]; - out.val[3] = out23.val[1]; - return out; - } -} - -#if 0 // Useful debug macro. -#include -#define PRINT_REG(REG, SIZE) do { \ - int i; \ - printf("%s \t[%d]: 0x", #REG, SIZE); \ - if (SIZE == 8) { \ - uint8_t _tmp[8]; \ - vst1_u8(_tmp, (REG)); \ - for (i = 0; i < 8; ++i) printf("%.2x ", _tmp[i]); \ - } else if (SIZE == 16) { \ - uint16_t _tmp[4]; \ - vst1_u16(_tmp, (REG)); \ - for (i = 0; i < 4; ++i) printf("%.4x ", _tmp[i]); \ - } \ - printf("\n"); \ -} while (0) -#endif - -#endif // WEBP_DSP_NEON_H_ diff --git a/Extended/libwebp/src/dsp/quant.h b/Extended/libwebp/src/dsp/quant.h deleted file mode 100644 index 5e8dba8..0000000 --- a/Extended/libwebp/src/dsp/quant.h +++ /dev/null @@ -1,85 +0,0 @@ -// Copyright 2018 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- - -#ifndef WEBP_DSP_QUANT_H_ -#define WEBP_DSP_QUANT_H_ - -#include - -#include "src/dsp/dsp.h" -#include "src/webp/types.h" - -#if defined(WEBP_USE_NEON) && !defined(WEBP_ANDROID_NEON) && \ - !defined(WEBP_HAVE_NEON_RTCD) -#include - -#define IsFlat IsFlat_NEON - -static uint32x2_t horizontal_add_uint32x4(const uint32x4_t a) { - const uint64x2_t b = vpaddlq_u32(a); - return vadd_u32(vreinterpret_u32_u64(vget_low_u64(b)), - vreinterpret_u32_u64(vget_high_u64(b))); -} - -static WEBP_INLINE int IsFlat(const int16_t* levels, int num_blocks, - int thresh) { - const int16x8_t tst_ones = vdupq_n_s16(-1); - uint32x4_t sum = vdupq_n_u32(0); - - for (int i = 0; i < num_blocks; ++i) { - // Set DC to zero. - const int16x8_t a_0 = vsetq_lane_s16(0, vld1q_s16(levels), 0); - const int16x8_t a_1 = vld1q_s16(levels + 8); - - const uint16x8_t b_0 = vshrq_n_u16(vtstq_s16(a_0, tst_ones), 15); - const uint16x8_t b_1 = vshrq_n_u16(vtstq_s16(a_1, tst_ones), 15); - - sum = vpadalq_u16(sum, b_0); - sum = vpadalq_u16(sum, b_1); - - levels += 16; - } - return thresh >= (int32_t)vget_lane_u32(horizontal_add_uint32x4(sum), 0); -} - -#else - -#define IsFlat IsFlat_C - -static WEBP_INLINE int IsFlat(const int16_t* levels, int num_blocks, - int thresh) { - int score = 0; - while (num_blocks-- > 0) { // TODO(skal): refine positional scoring? - int i; - for (i = 1; i < 16; ++i) { // omit DC, we're only interested in AC - score += (levels[i] != 0); - if (score > thresh) return 0; - } - levels += 16; - } - return 1; -} - -#endif // defined(WEBP_USE_NEON) && !defined(WEBP_ANDROID_NEON) && - // !defined(WEBP_HAVE_NEON_RTCD) - -static WEBP_INLINE int IsFlatSource16(const uint8_t* src) { - const uint32_t v = src[0] * 0x01010101u; - int i; - for (i = 0; i < 16; ++i) { - if (memcmp(src + 0, &v, 4) || memcmp(src + 4, &v, 4) || - memcmp(src + 8, &v, 4) || memcmp(src + 12, &v, 4)) { - return 0; - } - src += BPS; - } - return 1; -} - -#endif // WEBP_DSP_QUANT_H_ diff --git a/Extended/libwebp/src/dsp/rescaler.c b/Extended/libwebp/src/dsp/rescaler.c deleted file mode 100644 index c5a01e8..0000000 --- a/Extended/libwebp/src/dsp/rescaler.c +++ /dev/null @@ -1,250 +0,0 @@ -// Copyright 2014 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Rescaling functions -// -// Author: Skal (pascal.massimino@gmail.com) - -#include - -#include "src/dsp/dsp.h" -#include "src/utils/rescaler_utils.h" - -//------------------------------------------------------------------------------ -// Implementations of critical functions ImportRow / ExportRow - -#define ROUNDER (WEBP_RESCALER_ONE >> 1) -#define MULT_FIX(x, y) (((uint64_t)(x) * (y) + ROUNDER) >> WEBP_RESCALER_RFIX) -#define MULT_FIX_FLOOR(x, y) (((uint64_t)(x) * (y)) >> WEBP_RESCALER_RFIX) - -//------------------------------------------------------------------------------ -// Row import - -void WebPRescalerImportRowExpand_C(WebPRescaler* const wrk, - const uint8_t* src) { - const int x_stride = wrk->num_channels; - const int x_out_max = wrk->dst_width * wrk->num_channels; - int channel; - assert(!WebPRescalerInputDone(wrk)); - assert(wrk->x_expand); - for (channel = 0; channel < x_stride; ++channel) { - int x_in = channel; - int x_out = channel; - // simple bilinear interpolation - int accum = wrk->x_add; - int left = src[x_in]; - int right = (wrk->src_width > 1) ? src[x_in + x_stride] : left; - x_in += x_stride; - while (1) { - wrk->frow[x_out] = right * wrk->x_add + (left - right) * accum; - x_out += x_stride; - if (x_out >= x_out_max) break; - accum -= wrk->x_sub; - if (accum < 0) { - left = right; - x_in += x_stride; - assert(x_in < wrk->src_width * x_stride); - right = src[x_in]; - accum += wrk->x_add; - } - } - assert(wrk->x_sub == 0 /* <- special case for src_width=1 */ || accum == 0); - } -} - -void WebPRescalerImportRowShrink_C(WebPRescaler* const wrk, - const uint8_t* src) { - const int x_stride = wrk->num_channels; - const int x_out_max = wrk->dst_width * wrk->num_channels; - int channel; - assert(!WebPRescalerInputDone(wrk)); - assert(!wrk->x_expand); - for (channel = 0; channel < x_stride; ++channel) { - int x_in = channel; - int x_out = channel; - uint32_t sum = 0; - int accum = 0; - while (x_out < x_out_max) { - uint32_t base = 0; - accum += wrk->x_add; - while (accum > 0) { - accum -= wrk->x_sub; - assert(x_in < wrk->src_width * x_stride); - base = src[x_in]; - sum += base; - x_in += x_stride; - } - { // Emit next horizontal pixel. - const rescaler_t frac = base * (-accum); - wrk->frow[x_out] = sum * wrk->x_sub - frac; - // fresh fractional start for next pixel - sum = (int)MULT_FIX(frac, wrk->fx_scale); - } - x_out += x_stride; - } - assert(accum == 0); - } -} - -//------------------------------------------------------------------------------ -// Row export - -void WebPRescalerExportRowExpand_C(WebPRescaler* const wrk) { - int x_out; - uint8_t* const dst = wrk->dst; - rescaler_t* const irow = wrk->irow; - const int x_out_max = wrk->dst_width * wrk->num_channels; - const rescaler_t* const frow = wrk->frow; - assert(!WebPRescalerOutputDone(wrk)); - assert(wrk->y_accum <= 0); - assert(wrk->y_expand); - assert(wrk->y_sub != 0); - if (wrk->y_accum == 0) { - for (x_out = 0; x_out < x_out_max; ++x_out) { - const uint32_t J = frow[x_out]; - const int v = (int)MULT_FIX(J, wrk->fy_scale); - dst[x_out] = (v > 255) ? 255u : (uint8_t)v; - } - } else { - const uint32_t B = WEBP_RESCALER_FRAC(-wrk->y_accum, wrk->y_sub); - const uint32_t A = (uint32_t)(WEBP_RESCALER_ONE - B); - for (x_out = 0; x_out < x_out_max; ++x_out) { - const uint64_t I = (uint64_t)A * frow[x_out] - + (uint64_t)B * irow[x_out]; - const uint32_t J = (uint32_t)((I + ROUNDER) >> WEBP_RESCALER_RFIX); - const int v = (int)MULT_FIX(J, wrk->fy_scale); - dst[x_out] = (v > 255) ? 255u : (uint8_t)v; - } - } -} - -void WebPRescalerExportRowShrink_C(WebPRescaler* const wrk) { - int x_out; - uint8_t* const dst = wrk->dst; - rescaler_t* const irow = wrk->irow; - const int x_out_max = wrk->dst_width * wrk->num_channels; - const rescaler_t* const frow = wrk->frow; - const uint32_t yscale = wrk->fy_scale * (-wrk->y_accum); - assert(!WebPRescalerOutputDone(wrk)); - assert(wrk->y_accum <= 0); - assert(!wrk->y_expand); - if (yscale) { - for (x_out = 0; x_out < x_out_max; ++x_out) { - const uint32_t frac = (uint32_t)MULT_FIX_FLOOR(frow[x_out], yscale); - const int v = (int)MULT_FIX(irow[x_out] - frac, wrk->fxy_scale); - dst[x_out] = (v > 255) ? 255u : (uint8_t)v; - irow[x_out] = frac; // new fractional start - } - } else { - for (x_out = 0; x_out < x_out_max; ++x_out) { - const int v = (int)MULT_FIX(irow[x_out], wrk->fxy_scale); - dst[x_out] = (v > 255) ? 255u : (uint8_t)v; - irow[x_out] = 0; - } - } -} - -#undef MULT_FIX_FLOOR -#undef MULT_FIX -#undef ROUNDER - -//------------------------------------------------------------------------------ -// Main entry calls - -void WebPRescalerImportRow(WebPRescaler* const wrk, const uint8_t* src) { - assert(!WebPRescalerInputDone(wrk)); - if (!wrk->x_expand) { - WebPRescalerImportRowShrink(wrk, src); - } else { - WebPRescalerImportRowExpand(wrk, src); - } -} - -void WebPRescalerExportRow(WebPRescaler* const wrk) { - if (wrk->y_accum <= 0) { - assert(!WebPRescalerOutputDone(wrk)); - if (wrk->y_expand) { - WebPRescalerExportRowExpand(wrk); - } else if (wrk->fxy_scale) { - WebPRescalerExportRowShrink(wrk); - } else { // special case - int i; - assert(wrk->src_height == wrk->dst_height && wrk->x_add == 1); - assert(wrk->src_width == 1 && wrk->dst_width <= 2); - for (i = 0; i < wrk->num_channels * wrk->dst_width; ++i) { - wrk->dst[i] = wrk->irow[i]; - wrk->irow[i] = 0; - } - } - wrk->y_accum += wrk->y_add; - wrk->dst += wrk->dst_stride; - ++wrk->dst_y; - } -} - -//------------------------------------------------------------------------------ - -WebPRescalerImportRowFunc WebPRescalerImportRowExpand; -WebPRescalerImportRowFunc WebPRescalerImportRowShrink; - -WebPRescalerExportRowFunc WebPRescalerExportRowExpand; -WebPRescalerExportRowFunc WebPRescalerExportRowShrink; - -extern void WebPRescalerDspInitSSE2(void); -extern void WebPRescalerDspInitMIPS32(void); -extern void WebPRescalerDspInitMIPSdspR2(void); -extern void WebPRescalerDspInitMSA(void); -extern void WebPRescalerDspInitNEON(void); - -WEBP_DSP_INIT_FUNC(WebPRescalerDspInit) { -#if !defined(WEBP_REDUCE_SIZE) -#if !WEBP_NEON_OMIT_C_CODE - WebPRescalerExportRowExpand = WebPRescalerExportRowExpand_C; - WebPRescalerExportRowShrink = WebPRescalerExportRowShrink_C; -#endif - - WebPRescalerImportRowExpand = WebPRescalerImportRowExpand_C; - WebPRescalerImportRowShrink = WebPRescalerImportRowShrink_C; - - if (VP8GetCPUInfo != NULL) { -#if defined(WEBP_USE_SSE2) - if (VP8GetCPUInfo(kSSE2)) { - WebPRescalerDspInitSSE2(); - } -#endif -#if defined(WEBP_USE_MIPS32) - if (VP8GetCPUInfo(kMIPS32)) { - WebPRescalerDspInitMIPS32(); - } -#endif -#if defined(WEBP_USE_MIPS_DSP_R2) - if (VP8GetCPUInfo(kMIPSdspR2)) { - WebPRescalerDspInitMIPSdspR2(); - } -#endif -#if defined(WEBP_USE_MSA) - if (VP8GetCPUInfo(kMSA)) { - WebPRescalerDspInitMSA(); - } -#endif - } - -#if defined(WEBP_USE_NEON) - if (WEBP_NEON_OMIT_C_CODE || - (VP8GetCPUInfo != NULL && VP8GetCPUInfo(kNEON))) { - WebPRescalerDspInitNEON(); - } -#endif - - assert(WebPRescalerExportRowExpand != NULL); - assert(WebPRescalerExportRowShrink != NULL); - assert(WebPRescalerImportRowExpand != NULL); - assert(WebPRescalerImportRowShrink != NULL); -#endif // WEBP_REDUCE_SIZE -} diff --git a/Extended/libwebp/src/dsp/rescaler_mips32.c b/Extended/libwebp/src/dsp/rescaler_mips32.c deleted file mode 100644 index 61f63c6..0000000 --- a/Extended/libwebp/src/dsp/rescaler_mips32.c +++ /dev/null @@ -1,295 +0,0 @@ -// Copyright 2014 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// MIPS version of rescaling functions -// -// Author(s): Djordje Pesut (djordje.pesut@imgtec.com) - -#include "src/dsp/dsp.h" - -#if defined(WEBP_USE_MIPS32) && !defined(WEBP_REDUCE_SIZE) - -#include -#include "src/utils/rescaler_utils.h" - -//------------------------------------------------------------------------------ -// Row import - -static void ImportRowShrink_MIPS32(WebPRescaler* const wrk, - const uint8_t* src) { - const int x_stride = wrk->num_channels; - const int x_out_max = wrk->dst_width * wrk->num_channels; - const int fx_scale = wrk->fx_scale; - const int x_add = wrk->x_add; - const int x_sub = wrk->x_sub; - const int x_stride1 = x_stride << 2; - int channel; - assert(!wrk->x_expand); - assert(!WebPRescalerInputDone(wrk)); - - for (channel = 0; channel < x_stride; ++channel) { - const uint8_t* src1 = src + channel; - rescaler_t* frow = wrk->frow + channel; - int temp1, temp2, temp3; - int base, frac, sum; - int accum, accum1; - int loop_c = x_out_max - channel; - - __asm__ volatile ( - "li %[temp1], 0x8000 \n\t" - "li %[temp2], 0x10000 \n\t" - "li %[sum], 0 \n\t" - "li %[accum], 0 \n\t" - "1: \n\t" - "addu %[accum], %[accum], %[x_add] \n\t" - "li %[base], 0 \n\t" - "blez %[accum], 3f \n\t" - "2: \n\t" - "lbu %[base], 0(%[src1]) \n\t" - "subu %[accum], %[accum], %[x_sub] \n\t" - "addu %[src1], %[src1], %[x_stride] \n\t" - "addu %[sum], %[sum], %[base] \n\t" - "bgtz %[accum], 2b \n\t" - "3: \n\t" - "negu %[accum1], %[accum] \n\t" - "mul %[frac], %[base], %[accum1] \n\t" - "mul %[temp3], %[sum], %[x_sub] \n\t" - "subu %[loop_c], %[loop_c], %[x_stride] \n\t" - "mult %[temp1], %[temp2] \n\t" - "maddu %[frac], %[fx_scale] \n\t" - "mfhi %[sum] \n\t" - "subu %[temp3], %[temp3], %[frac] \n\t" - "sw %[temp3], 0(%[frow]) \n\t" - "addu %[frow], %[frow], %[x_stride1] \n\t" - "bgtz %[loop_c], 1b \n\t" - : [accum]"=&r"(accum), [src1]"+r"(src1), [temp3]"=&r"(temp3), - [sum]"=&r"(sum), [base]"=&r"(base), [frac]"=&r"(frac), - [frow]"+r"(frow), [accum1]"=&r"(accum1), - [temp2]"=&r"(temp2), [temp1]"=&r"(temp1) - : [x_stride]"r"(x_stride), [fx_scale]"r"(fx_scale), - [x_sub]"r"(x_sub), [x_add]"r"(x_add), - [loop_c]"r"(loop_c), [x_stride1]"r"(x_stride1) - : "memory", "hi", "lo" - ); - assert(accum == 0); - } -} - -static void ImportRowExpand_MIPS32(WebPRescaler* const wrk, - const uint8_t* src) { - const int x_stride = wrk->num_channels; - const int x_out_max = wrk->dst_width * wrk->num_channels; - const int x_add = wrk->x_add; - const int x_sub = wrk->x_sub; - const int src_width = wrk->src_width; - const int x_stride1 = x_stride << 2; - int channel; - assert(wrk->x_expand); - assert(!WebPRescalerInputDone(wrk)); - - for (channel = 0; channel < x_stride; ++channel) { - const uint8_t* src1 = src + channel; - rescaler_t* frow = wrk->frow + channel; - int temp1, temp2, temp3, temp4; - int frac; - int accum; - int x_out = channel; - - __asm__ volatile ( - "addiu %[temp3], %[src_width], -1 \n\t" - "lbu %[temp2], 0(%[src1]) \n\t" - "addu %[src1], %[src1], %[x_stride] \n\t" - "bgtz %[temp3], 0f \n\t" - "addiu %[temp1], %[temp2], 0 \n\t" - "b 3f \n\t" - "0: \n\t" - "lbu %[temp1], 0(%[src1]) \n\t" - "3: \n\t" - "addiu %[accum], %[x_add], 0 \n\t" - "1: \n\t" - "subu %[temp3], %[temp2], %[temp1] \n\t" - "mul %[temp3], %[temp3], %[accum] \n\t" - "mul %[temp4], %[temp1], %[x_add] \n\t" - "addu %[temp3], %[temp4], %[temp3] \n\t" - "sw %[temp3], 0(%[frow]) \n\t" - "addu %[frow], %[frow], %[x_stride1] \n\t" - "addu %[x_out], %[x_out], %[x_stride] \n\t" - "subu %[temp3], %[x_out], %[x_out_max] \n\t" - "bgez %[temp3], 2f \n\t" - "subu %[accum], %[accum], %[x_sub] \n\t" - "bgez %[accum], 4f \n\t" - "addiu %[temp2], %[temp1], 0 \n\t" - "addu %[src1], %[src1], %[x_stride] \n\t" - "lbu %[temp1], 0(%[src1]) \n\t" - "addu %[accum], %[accum], %[x_add] \n\t" - "4: \n\t" - "b 1b \n\t" - "2: \n\t" - : [src1]"+r"(src1), [accum]"=&r"(accum), [temp1]"=&r"(temp1), - [temp2]"=&r"(temp2), [temp3]"=&r"(temp3), [temp4]"=&r"(temp4), - [x_out]"+r"(x_out), [frac]"=&r"(frac), [frow]"+r"(frow) - : [x_stride]"r"(x_stride), [x_add]"r"(x_add), [x_sub]"r"(x_sub), - [x_stride1]"r"(x_stride1), [src_width]"r"(src_width), - [x_out_max]"r"(x_out_max) - : "memory", "hi", "lo" - ); - assert(wrk->x_sub == 0 /* <- special case for src_width=1 */ || accum == 0); - } -} - -//------------------------------------------------------------------------------ -// Row export - -static void ExportRowExpand_MIPS32(WebPRescaler* const wrk) { - uint8_t* dst = wrk->dst; - rescaler_t* irow = wrk->irow; - const int x_out_max = wrk->dst_width * wrk->num_channels; - const rescaler_t* frow = wrk->frow; - int temp0, temp1, temp3, temp4, temp5, loop_end; - const int temp2 = (int)wrk->fy_scale; - const int temp6 = x_out_max << 2; - assert(!WebPRescalerOutputDone(wrk)); - assert(wrk->y_accum <= 0); - assert(wrk->y_expand); - assert(wrk->y_sub != 0); - if (wrk->y_accum == 0) { - __asm__ volatile ( - "li %[temp3], 0x10000 \n\t" - "li %[temp4], 0x8000 \n\t" - "addu %[loop_end], %[frow], %[temp6] \n\t" - "1: \n\t" - "lw %[temp0], 0(%[frow]) \n\t" - "addiu %[dst], %[dst], 1 \n\t" - "addiu %[frow], %[frow], 4 \n\t" - "mult %[temp3], %[temp4] \n\t" - "maddu %[temp0], %[temp2] \n\t" - "mfhi %[temp5] \n\t" - "sb %[temp5], -1(%[dst]) \n\t" - "bne %[frow], %[loop_end], 1b \n\t" - : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [temp3]"=&r"(temp3), - [temp4]"=&r"(temp4), [temp5]"=&r"(temp5), [frow]"+r"(frow), - [dst]"+r"(dst), [loop_end]"=&r"(loop_end) - : [temp2]"r"(temp2), [temp6]"r"(temp6) - : "memory", "hi", "lo" - ); - } else { - const uint32_t B = WEBP_RESCALER_FRAC(-wrk->y_accum, wrk->y_sub); - const uint32_t A = (uint32_t)(WEBP_RESCALER_ONE - B); - __asm__ volatile ( - "li %[temp3], 0x10000 \n\t" - "li %[temp4], 0x8000 \n\t" - "addu %[loop_end], %[frow], %[temp6] \n\t" - "1: \n\t" - "lw %[temp0], 0(%[frow]) \n\t" - "lw %[temp1], 0(%[irow]) \n\t" - "addiu %[dst], %[dst], 1 \n\t" - "mult %[temp3], %[temp4] \n\t" - "maddu %[A], %[temp0] \n\t" - "maddu %[B], %[temp1] \n\t" - "addiu %[frow], %[frow], 4 \n\t" - "addiu %[irow], %[irow], 4 \n\t" - "mfhi %[temp5] \n\t" - "mult %[temp3], %[temp4] \n\t" - "maddu %[temp5], %[temp2] \n\t" - "mfhi %[temp5] \n\t" - "sb %[temp5], -1(%[dst]) \n\t" - "bne %[frow], %[loop_end], 1b \n\t" - : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [temp3]"=&r"(temp3), - [temp4]"=&r"(temp4), [temp5]"=&r"(temp5), [frow]"+r"(frow), - [irow]"+r"(irow), [dst]"+r"(dst), [loop_end]"=&r"(loop_end) - : [temp2]"r"(temp2), [temp6]"r"(temp6), [A]"r"(A), [B]"r"(B) - : "memory", "hi", "lo" - ); - } -} - -#if 0 // disabled for now. TODO(skal): make match the C-code -static void ExportRowShrink_MIPS32(WebPRescaler* const wrk) { - const int x_out_max = wrk->dst_width * wrk->num_channels; - uint8_t* dst = wrk->dst; - rescaler_t* irow = wrk->irow; - const rescaler_t* frow = wrk->frow; - const int yscale = wrk->fy_scale * (-wrk->y_accum); - int temp0, temp1, temp3, temp4, temp5, loop_end; - const int temp2 = (int)wrk->fxy_scale; - const int temp6 = x_out_max << 2; - - assert(!WebPRescalerOutputDone(wrk)); - assert(wrk->y_accum <= 0); - assert(!wrk->y_expand); - assert(wrk->fxy_scale != 0); - if (yscale) { - __asm__ volatile ( - "li %[temp3], 0x10000 \n\t" - "li %[temp4], 0x8000 \n\t" - "addu %[loop_end], %[frow], %[temp6] \n\t" - "1: \n\t" - "lw %[temp0], 0(%[frow]) \n\t" - "mult %[temp3], %[temp4] \n\t" - "addiu %[frow], %[frow], 4 \n\t" - "maddu %[temp0], %[yscale] \n\t" - "mfhi %[temp1] \n\t" - "lw %[temp0], 0(%[irow]) \n\t" - "addiu %[dst], %[dst], 1 \n\t" - "addiu %[irow], %[irow], 4 \n\t" - "subu %[temp0], %[temp0], %[temp1] \n\t" - "mult %[temp3], %[temp4] \n\t" - "maddu %[temp0], %[temp2] \n\t" - "mfhi %[temp5] \n\t" - "sw %[temp1], -4(%[irow]) \n\t" - "sb %[temp5], -1(%[dst]) \n\t" - "bne %[frow], %[loop_end], 1b \n\t" - : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [temp3]"=&r"(temp3), - [temp4]"=&r"(temp4), [temp5]"=&r"(temp5), [frow]"+r"(frow), - [irow]"+r"(irow), [dst]"+r"(dst), [loop_end]"=&r"(loop_end) - : [temp2]"r"(temp2), [yscale]"r"(yscale), [temp6]"r"(temp6) - : "memory", "hi", "lo" - ); - } else { - __asm__ volatile ( - "li %[temp3], 0x10000 \n\t" - "li %[temp4], 0x8000 \n\t" - "addu %[loop_end], %[irow], %[temp6] \n\t" - "1: \n\t" - "lw %[temp0], 0(%[irow]) \n\t" - "addiu %[dst], %[dst], 1 \n\t" - "addiu %[irow], %[irow], 4 \n\t" - "mult %[temp3], %[temp4] \n\t" - "maddu %[temp0], %[temp2] \n\t" - "mfhi %[temp5] \n\t" - "sw $zero, -4(%[irow]) \n\t" - "sb %[temp5], -1(%[dst]) \n\t" - "bne %[irow], %[loop_end], 1b \n\t" - : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [temp3]"=&r"(temp3), - [temp4]"=&r"(temp4), [temp5]"=&r"(temp5), [irow]"+r"(irow), - [dst]"+r"(dst), [loop_end]"=&r"(loop_end) - : [temp2]"r"(temp2), [temp6]"r"(temp6) - : "memory", "hi", "lo" - ); - } -} -#endif // 0 - -//------------------------------------------------------------------------------ -// Entry point - -extern void WebPRescalerDspInitMIPS32(void); - -WEBP_TSAN_IGNORE_FUNCTION void WebPRescalerDspInitMIPS32(void) { - WebPRescalerImportRowExpand = ImportRowExpand_MIPS32; - WebPRescalerImportRowShrink = ImportRowShrink_MIPS32; - WebPRescalerExportRowExpand = ExportRowExpand_MIPS32; -// WebPRescalerExportRowShrink = ExportRowShrink_MIPS32; -} - -#else // !WEBP_USE_MIPS32 - -WEBP_DSP_INIT_STUB(WebPRescalerDspInitMIPS32) - -#endif // WEBP_USE_MIPS32 diff --git a/Extended/libwebp/src/dsp/rescaler_mips_dsp_r2.c b/Extended/libwebp/src/dsp/rescaler_mips_dsp_r2.c deleted file mode 100644 index 419b741..0000000 --- a/Extended/libwebp/src/dsp/rescaler_mips_dsp_r2.c +++ /dev/null @@ -1,314 +0,0 @@ -// Copyright 2014 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// MIPS version of rescaling functions -// -// Author(s): Djordje Pesut (djordje.pesut@imgtec.com) - -#include "src/dsp/dsp.h" - -#if defined(WEBP_USE_MIPS_DSP_R2) && !defined(WEBP_REDUCE_SIZE) - -#include -#include "src/utils/rescaler_utils.h" - -#define ROUNDER (WEBP_RESCALER_ONE >> 1) -#define MULT_FIX(x, y) (((uint64_t)(x) * (y) + ROUNDER) >> WEBP_RESCALER_RFIX) -#define MULT_FIX_FLOOR(x, y) (((uint64_t)(x) * (y)) >> WEBP_RESCALER_RFIX) - -//------------------------------------------------------------------------------ -// Row export - -#if 0 // disabled for now. TODO(skal): make match the C-code -static void ExportRowShrink_MIPSdspR2(WebPRescaler* const wrk) { - int i; - const int x_out_max = wrk->dst_width * wrk->num_channels; - uint8_t* dst = wrk->dst; - rescaler_t* irow = wrk->irow; - const rescaler_t* frow = wrk->frow; - const int yscale = wrk->fy_scale * (-wrk->y_accum); - int temp0, temp1, temp2, temp3, temp4, temp5, loop_end; - const int temp7 = (int)wrk->fxy_scale; - const int temp6 = (x_out_max & ~0x3) << 2; - assert(!WebPRescalerOutputDone(wrk)); - assert(wrk->y_accum <= 0); - assert(!wrk->y_expand); - assert(wrk->fxy_scale != 0); - if (yscale) { - if (x_out_max >= 4) { - int temp8, temp9, temp10, temp11; - __asm__ volatile ( - "li %[temp3], 0x10000 \n\t" - "li %[temp4], 0x8000 \n\t" - "addu %[loop_end], %[frow], %[temp6] \n\t" - "1: \n\t" - "lw %[temp0], 0(%[frow]) \n\t" - "lw %[temp1], 4(%[frow]) \n\t" - "lw %[temp2], 8(%[frow]) \n\t" - "lw %[temp5], 12(%[frow]) \n\t" - "mult $ac0, %[temp3], %[temp4] \n\t" - "maddu $ac0, %[temp0], %[yscale] \n\t" - "mult $ac1, %[temp3], %[temp4] \n\t" - "maddu $ac1, %[temp1], %[yscale] \n\t" - "mult $ac2, %[temp3], %[temp4] \n\t" - "maddu $ac2, %[temp2], %[yscale] \n\t" - "mult $ac3, %[temp3], %[temp4] \n\t" - "maddu $ac3, %[temp5], %[yscale] \n\t" - "addiu %[frow], %[frow], 16 \n\t" - "mfhi %[temp0], $ac0 \n\t" - "mfhi %[temp1], $ac1 \n\t" - "mfhi %[temp2], $ac2 \n\t" - "mfhi %[temp5], $ac3 \n\t" - "lw %[temp8], 0(%[irow]) \n\t" - "lw %[temp9], 4(%[irow]) \n\t" - "lw %[temp10], 8(%[irow]) \n\t" - "lw %[temp11], 12(%[irow]) \n\t" - "addiu %[dst], %[dst], 4 \n\t" - "addiu %[irow], %[irow], 16 \n\t" - "subu %[temp8], %[temp8], %[temp0] \n\t" - "subu %[temp9], %[temp9], %[temp1] \n\t" - "subu %[temp10], %[temp10], %[temp2] \n\t" - "subu %[temp11], %[temp11], %[temp5] \n\t" - "mult $ac0, %[temp3], %[temp4] \n\t" - "maddu $ac0, %[temp8], %[temp7] \n\t" - "mult $ac1, %[temp3], %[temp4] \n\t" - "maddu $ac1, %[temp9], %[temp7] \n\t" - "mult $ac2, %[temp3], %[temp4] \n\t" - "maddu $ac2, %[temp10], %[temp7] \n\t" - "mult $ac3, %[temp3], %[temp4] \n\t" - "maddu $ac3, %[temp11], %[temp7] \n\t" - "mfhi %[temp8], $ac0 \n\t" - "mfhi %[temp9], $ac1 \n\t" - "mfhi %[temp10], $ac2 \n\t" - "mfhi %[temp11], $ac3 \n\t" - "sw %[temp0], -16(%[irow]) \n\t" - "sw %[temp1], -12(%[irow]) \n\t" - "sw %[temp2], -8(%[irow]) \n\t" - "sw %[temp5], -4(%[irow]) \n\t" - "sb %[temp8], -4(%[dst]) \n\t" - "sb %[temp9], -3(%[dst]) \n\t" - "sb %[temp10], -2(%[dst]) \n\t" - "sb %[temp11], -1(%[dst]) \n\t" - "bne %[frow], %[loop_end], 1b \n\t" - : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [temp3]"=&r"(temp3), - [temp4]"=&r"(temp4), [temp5]"=&r"(temp5), [frow]"+r"(frow), - [irow]"+r"(irow), [dst]"+r"(dst), [loop_end]"=&r"(loop_end), - [temp8]"=&r"(temp8), [temp9]"=&r"(temp9), [temp10]"=&r"(temp10), - [temp11]"=&r"(temp11), [temp2]"=&r"(temp2) - : [temp7]"r"(temp7), [yscale]"r"(yscale), [temp6]"r"(temp6) - : "memory", "hi", "lo", "$ac1hi", "$ac1lo", - "$ac2hi", "$ac2lo", "$ac3hi", "$ac3lo" - ); - } - for (i = 0; i < (x_out_max & 0x3); ++i) { - const uint32_t frac = (uint32_t)MULT_FIX_FLOOR(*frow++, yscale); - const int v = (int)MULT_FIX(*irow - frac, wrk->fxy_scale); - *dst++ = (v > 255) ? 255u : (uint8_t)v; - *irow++ = frac; // new fractional start - } - } else { - if (x_out_max >= 4) { - __asm__ volatile ( - "li %[temp3], 0x10000 \n\t" - "li %[temp4], 0x8000 \n\t" - "addu %[loop_end], %[irow], %[temp6] \n\t" - "1: \n\t" - "lw %[temp0], 0(%[irow]) \n\t" - "lw %[temp1], 4(%[irow]) \n\t" - "lw %[temp2], 8(%[irow]) \n\t" - "lw %[temp5], 12(%[irow]) \n\t" - "addiu %[dst], %[dst], 4 \n\t" - "addiu %[irow], %[irow], 16 \n\t" - "mult $ac0, %[temp3], %[temp4] \n\t" - "maddu $ac0, %[temp0], %[temp7] \n\t" - "mult $ac1, %[temp3], %[temp4] \n\t" - "maddu $ac1, %[temp1], %[temp7] \n\t" - "mult $ac2, %[temp3], %[temp4] \n\t" - "maddu $ac2, %[temp2], %[temp7] \n\t" - "mult $ac3, %[temp3], %[temp4] \n\t" - "maddu $ac3, %[temp5], %[temp7] \n\t" - "mfhi %[temp0], $ac0 \n\t" - "mfhi %[temp1], $ac1 \n\t" - "mfhi %[temp2], $ac2 \n\t" - "mfhi %[temp5], $ac3 \n\t" - "sw $zero, -16(%[irow]) \n\t" - "sw $zero, -12(%[irow]) \n\t" - "sw $zero, -8(%[irow]) \n\t" - "sw $zero, -4(%[irow]) \n\t" - "sb %[temp0], -4(%[dst]) \n\t" - "sb %[temp1], -3(%[dst]) \n\t" - "sb %[temp2], -2(%[dst]) \n\t" - "sb %[temp5], -1(%[dst]) \n\t" - "bne %[irow], %[loop_end], 1b \n\t" - : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [temp3]"=&r"(temp3), - [temp4]"=&r"(temp4), [temp5]"=&r"(temp5), [irow]"+r"(irow), - [dst]"+r"(dst), [loop_end]"=&r"(loop_end), [temp2]"=&r"(temp2) - : [temp7]"r"(temp7), [temp6]"r"(temp6) - : "memory", "hi", "lo", "$ac1hi", "$ac1lo", - "$ac2hi", "$ac2lo", "$ac3hi", "$ac3lo" - ); - } - for (i = 0; i < (x_out_max & 0x3); ++i) { - const int v = (int)MULT_FIX_FLOOR(*irow, wrk->fxy_scale); - *dst++ = (v > 255) ? 255u : (uint8_t)v; - *irow++ = 0; - } - } -} -#endif // 0 - -static void ExportRowExpand_MIPSdspR2(WebPRescaler* const wrk) { - int i; - uint8_t* dst = wrk->dst; - rescaler_t* irow = wrk->irow; - const int x_out_max = wrk->dst_width * wrk->num_channels; - const rescaler_t* frow = wrk->frow; - int temp0, temp1, temp2, temp3, temp4, temp5, loop_end; - const int temp6 = (x_out_max & ~0x3) << 2; - const int temp7 = (int)wrk->fy_scale; - assert(!WebPRescalerOutputDone(wrk)); - assert(wrk->y_accum <= 0); - assert(wrk->y_expand); - assert(wrk->y_sub != 0); - if (wrk->y_accum == 0) { - if (x_out_max >= 4) { - __asm__ volatile ( - "li %[temp4], 0x10000 \n\t" - "li %[temp5], 0x8000 \n\t" - "addu %[loop_end], %[frow], %[temp6] \n\t" - "1: \n\t" - "lw %[temp0], 0(%[frow]) \n\t" - "lw %[temp1], 4(%[frow]) \n\t" - "lw %[temp2], 8(%[frow]) \n\t" - "lw %[temp3], 12(%[frow]) \n\t" - "addiu %[dst], %[dst], 4 \n\t" - "addiu %[frow], %[frow], 16 \n\t" - "mult $ac0, %[temp4], %[temp5] \n\t" - "maddu $ac0, %[temp0], %[temp7] \n\t" - "mult $ac1, %[temp4], %[temp5] \n\t" - "maddu $ac1, %[temp1], %[temp7] \n\t" - "mult $ac2, %[temp4], %[temp5] \n\t" - "maddu $ac2, %[temp2], %[temp7] \n\t" - "mult $ac3, %[temp4], %[temp5] \n\t" - "maddu $ac3, %[temp3], %[temp7] \n\t" - "mfhi %[temp0], $ac0 \n\t" - "mfhi %[temp1], $ac1 \n\t" - "mfhi %[temp2], $ac2 \n\t" - "mfhi %[temp3], $ac3 \n\t" - "sb %[temp0], -4(%[dst]) \n\t" - "sb %[temp1], -3(%[dst]) \n\t" - "sb %[temp2], -2(%[dst]) \n\t" - "sb %[temp3], -1(%[dst]) \n\t" - "bne %[frow], %[loop_end], 1b \n\t" - : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [temp3]"=&r"(temp3), - [temp4]"=&r"(temp4), [temp5]"=&r"(temp5), [frow]"+r"(frow), - [dst]"+r"(dst), [loop_end]"=&r"(loop_end), [temp2]"=&r"(temp2) - : [temp7]"r"(temp7), [temp6]"r"(temp6) - : "memory", "hi", "lo", "$ac1hi", "$ac1lo", - "$ac2hi", "$ac2lo", "$ac3hi", "$ac3lo" - ); - } - for (i = 0; i < (x_out_max & 0x3); ++i) { - const uint32_t J = *frow++; - const int v = (int)MULT_FIX(J, wrk->fy_scale); - *dst++ = (v > 255) ? 255u : (uint8_t)v; - } - } else { - const uint32_t B = WEBP_RESCALER_FRAC(-wrk->y_accum, wrk->y_sub); - const uint32_t A = (uint32_t)(WEBP_RESCALER_ONE - B); - if (x_out_max >= 4) { - int temp8, temp9, temp10, temp11; - __asm__ volatile ( - "li %[temp8], 0x10000 \n\t" - "li %[temp9], 0x8000 \n\t" - "addu %[loop_end], %[frow], %[temp6] \n\t" - "1: \n\t" - "lw %[temp0], 0(%[frow]) \n\t" - "lw %[temp1], 4(%[frow]) \n\t" - "lw %[temp2], 8(%[frow]) \n\t" - "lw %[temp3], 12(%[frow]) \n\t" - "lw %[temp4], 0(%[irow]) \n\t" - "lw %[temp5], 4(%[irow]) \n\t" - "lw %[temp10], 8(%[irow]) \n\t" - "lw %[temp11], 12(%[irow]) \n\t" - "addiu %[dst], %[dst], 4 \n\t" - "mult $ac0, %[temp8], %[temp9] \n\t" - "maddu $ac0, %[A], %[temp0] \n\t" - "maddu $ac0, %[B], %[temp4] \n\t" - "mult $ac1, %[temp8], %[temp9] \n\t" - "maddu $ac1, %[A], %[temp1] \n\t" - "maddu $ac1, %[B], %[temp5] \n\t" - "mult $ac2, %[temp8], %[temp9] \n\t" - "maddu $ac2, %[A], %[temp2] \n\t" - "maddu $ac2, %[B], %[temp10] \n\t" - "mult $ac3, %[temp8], %[temp9] \n\t" - "maddu $ac3, %[A], %[temp3] \n\t" - "maddu $ac3, %[B], %[temp11] \n\t" - "addiu %[frow], %[frow], 16 \n\t" - "addiu %[irow], %[irow], 16 \n\t" - "mfhi %[temp0], $ac0 \n\t" - "mfhi %[temp1], $ac1 \n\t" - "mfhi %[temp2], $ac2 \n\t" - "mfhi %[temp3], $ac3 \n\t" - "mult $ac0, %[temp8], %[temp9] \n\t" - "maddu $ac0, %[temp0], %[temp7] \n\t" - "mult $ac1, %[temp8], %[temp9] \n\t" - "maddu $ac1, %[temp1], %[temp7] \n\t" - "mult $ac2, %[temp8], %[temp9] \n\t" - "maddu $ac2, %[temp2], %[temp7] \n\t" - "mult $ac3, %[temp8], %[temp9] \n\t" - "maddu $ac3, %[temp3], %[temp7] \n\t" - "mfhi %[temp0], $ac0 \n\t" - "mfhi %[temp1], $ac1 \n\t" - "mfhi %[temp2], $ac2 \n\t" - "mfhi %[temp3], $ac3 \n\t" - "sb %[temp0], -4(%[dst]) \n\t" - "sb %[temp1], -3(%[dst]) \n\t" - "sb %[temp2], -2(%[dst]) \n\t" - "sb %[temp3], -1(%[dst]) \n\t" - "bne %[frow], %[loop_end], 1b \n\t" - : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [temp3]"=&r"(temp3), - [temp4]"=&r"(temp4), [temp5]"=&r"(temp5), [frow]"+r"(frow), - [irow]"+r"(irow), [dst]"+r"(dst), [loop_end]"=&r"(loop_end), - [temp8]"=&r"(temp8), [temp9]"=&r"(temp9), [temp10]"=&r"(temp10), - [temp11]"=&r"(temp11), [temp2]"=&r"(temp2) - : [temp7]"r"(temp7), [temp6]"r"(temp6), [A]"r"(A), [B]"r"(B) - : "memory", "hi", "lo", "$ac1hi", "$ac1lo", - "$ac2hi", "$ac2lo", "$ac3hi", "$ac3lo" - ); - } - for (i = 0; i < (x_out_max & 0x3); ++i) { - const uint64_t I = (uint64_t)A * *frow++ - + (uint64_t)B * *irow++; - const uint32_t J = (uint32_t)((I + ROUNDER) >> WEBP_RESCALER_RFIX); - const int v = (int)MULT_FIX(J, wrk->fy_scale); - *dst++ = (v > 255) ? 255u : (uint8_t)v; - } - } -} - -#undef MULT_FIX_FLOOR -#undef MULT_FIX -#undef ROUNDER - -//------------------------------------------------------------------------------ -// Entry point - -extern void WebPRescalerDspInitMIPSdspR2(void); - -WEBP_TSAN_IGNORE_FUNCTION void WebPRescalerDspInitMIPSdspR2(void) { - WebPRescalerExportRowExpand = ExportRowExpand_MIPSdspR2; -// WebPRescalerExportRowShrink = ExportRowShrink_MIPSdspR2; -} - -#else // !WEBP_USE_MIPS_DSP_R2 - -WEBP_DSP_INIT_STUB(WebPRescalerDspInitMIPSdspR2) - -#endif // WEBP_USE_MIPS_DSP_R2 diff --git a/Extended/libwebp/src/dsp/rescaler_msa.c b/Extended/libwebp/src/dsp/rescaler_msa.c deleted file mode 100644 index 256dbdd..0000000 --- a/Extended/libwebp/src/dsp/rescaler_msa.c +++ /dev/null @@ -1,443 +0,0 @@ -// Copyright 2016 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// MSA version of rescaling functions -// -// Author: Prashant Patil (prashant.patil@imgtec.com) - -#include "src/dsp/dsp.h" - -#if defined(WEBP_USE_MSA) && !defined(WEBP_REDUCE_SIZE) - -#include - -#include "src/utils/rescaler_utils.h" -#include "src/dsp/msa_macro.h" - -#define ROUNDER (WEBP_RESCALER_ONE >> 1) -#define MULT_FIX(x, y) (((uint64_t)(x) * (y) + ROUNDER) >> WEBP_RESCALER_RFIX) -#define MULT_FIX_FLOOR(x, y) (((uint64_t)(x) * (y)) >> WEBP_RESCALER_RFIX) - -#define CALC_MULT_FIX_16(in0, in1, in2, in3, scale, shift, dst) do { \ - v4u32 tmp0, tmp1, tmp2, tmp3; \ - v16u8 t0, t1, t2, t3, t4, t5; \ - v2u64 out0, out1, out2, out3; \ - ILVRL_W2_UW(zero, in0, tmp0, tmp1); \ - ILVRL_W2_UW(zero, in1, tmp2, tmp3); \ - DOTP_UW2_UD(tmp0, tmp1, scale, scale, out0, out1); \ - DOTP_UW2_UD(tmp2, tmp3, scale, scale, out2, out3); \ - SRAR_D4_UD(out0, out1, out2, out3, shift); \ - PCKEV_B2_UB(out1, out0, out3, out2, t0, t1); \ - ILVRL_W2_UW(zero, in2, tmp0, tmp1); \ - ILVRL_W2_UW(zero, in3, tmp2, tmp3); \ - DOTP_UW2_UD(tmp0, tmp1, scale, scale, out0, out1); \ - DOTP_UW2_UD(tmp2, tmp3, scale, scale, out2, out3); \ - SRAR_D4_UD(out0, out1, out2, out3, shift); \ - PCKEV_B2_UB(out1, out0, out3, out2, t2, t3); \ - PCKEV_B2_UB(t1, t0, t3, t2, t4, t5); \ - dst = (v16u8)__msa_pckev_b((v16i8)t5, (v16i8)t4); \ -} while (0) - -#define CALC_MULT_FIX_4(in0, scale, shift, dst) do { \ - v4u32 tmp0, tmp1; \ - v16i8 t0, t1; \ - v2u64 out0, out1; \ - ILVRL_W2_UW(zero, in0, tmp0, tmp1); \ - DOTP_UW2_UD(tmp0, tmp1, scale, scale, out0, out1); \ - SRAR_D2_UD(out0, out1, shift); \ - t0 = __msa_pckev_b((v16i8)out1, (v16i8)out0); \ - t1 = __msa_pckev_b(t0, t0); \ - t0 = __msa_pckev_b(t1, t1); \ - dst = __msa_copy_s_w((v4i32)t0, 0); \ -} while (0) - -#define CALC_MULT_FIX1_16(in0, in1, in2, in3, fyscale, shift, \ - dst0, dst1, dst2, dst3) do { \ - v4u32 tmp0, tmp1, tmp2, tmp3; \ - v2u64 out0, out1, out2, out3; \ - ILVRL_W2_UW(zero, in0, tmp0, tmp1); \ - ILVRL_W2_UW(zero, in1, tmp2, tmp3); \ - DOTP_UW2_UD(tmp0, tmp1, fyscale, fyscale, out0, out1); \ - DOTP_UW2_UD(tmp2, tmp3, fyscale, fyscale, out2, out3); \ - SRAR_D4_UD(out0, out1, out2, out3, shift); \ - PCKEV_W2_UW(out1, out0, out3, out2, dst0, dst1); \ - ILVRL_W2_UW(zero, in2, tmp0, tmp1); \ - ILVRL_W2_UW(zero, in3, tmp2, tmp3); \ - DOTP_UW2_UD(tmp0, tmp1, fyscale, fyscale, out0, out1); \ - DOTP_UW2_UD(tmp2, tmp3, fyscale, fyscale, out2, out3); \ - SRAR_D4_UD(out0, out1, out2, out3, shift); \ - PCKEV_W2_UW(out1, out0, out3, out2, dst2, dst3); \ -} while (0) - -#define CALC_MULT_FIX1_4(in0, scale, shift, dst) do { \ - v4u32 tmp0, tmp1; \ - v2u64 out0, out1; \ - ILVRL_W2_UW(zero, in0, tmp0, tmp1); \ - DOTP_UW2_UD(tmp0, tmp1, scale, scale, out0, out1); \ - SRAR_D2_UD(out0, out1, shift); \ - dst = (v4u32)__msa_pckev_w((v4i32)out1, (v4i32)out0); \ -} while (0) - -#define CALC_MULT_FIX2_16(in0, in1, in2, in3, mult, scale, shift, \ - dst0, dst1) do { \ - v4u32 tmp0, tmp1, tmp2, tmp3; \ - v2u64 out0, out1, out2, out3; \ - ILVRL_W2_UW(in0, in2, tmp0, tmp1); \ - ILVRL_W2_UW(in1, in3, tmp2, tmp3); \ - DOTP_UW2_UD(tmp0, tmp1, mult, mult, out0, out1); \ - DOTP_UW2_UD(tmp2, tmp3, mult, mult, out2, out3); \ - SRAR_D4_UD(out0, out1, out2, out3, shift); \ - DOTP_UW2_UD(out0, out1, scale, scale, out0, out1); \ - DOTP_UW2_UD(out2, out3, scale, scale, out2, out3); \ - SRAR_D4_UD(out0, out1, out2, out3, shift); \ - PCKEV_B2_UB(out1, out0, out3, out2, dst0, dst1); \ -} while (0) - -#define CALC_MULT_FIX2_4(in0, in1, mult, scale, shift, dst) do { \ - v4u32 tmp0, tmp1; \ - v2u64 out0, out1; \ - v16i8 t0, t1; \ - ILVRL_W2_UW(in0, in1, tmp0, tmp1); \ - DOTP_UW2_UD(tmp0, tmp1, mult, mult, out0, out1); \ - SRAR_D2_UD(out0, out1, shift); \ - DOTP_UW2_UD(out0, out1, scale, scale, out0, out1); \ - SRAR_D2_UD(out0, out1, shift); \ - t0 = __msa_pckev_b((v16i8)out1, (v16i8)out0); \ - t1 = __msa_pckev_b(t0, t0); \ - t0 = __msa_pckev_b(t1, t1); \ - dst = __msa_copy_s_w((v4i32)t0, 0); \ -} while (0) - -static WEBP_INLINE void ExportRowExpand_0(const uint32_t* frow, uint8_t* dst, - int length, - WebPRescaler* const wrk) { - const v4u32 scale = (v4u32)__msa_fill_w(wrk->fy_scale); - const v4u32 shift = (v4u32)__msa_fill_w(WEBP_RESCALER_RFIX); - const v4i32 zero = { 0 }; - - while (length >= 16) { - v4u32 src0, src1, src2, src3; - v16u8 out; - LD_UW4(frow, 4, src0, src1, src2, src3); - CALC_MULT_FIX_16(src0, src1, src2, src3, scale, shift, out); - ST_UB(out, dst); - length -= 16; - frow += 16; - dst += 16; - } - if (length > 0) { - int x_out; - if (length >= 12) { - uint32_t val0_m, val1_m, val2_m; - v4u32 src0, src1, src2; - LD_UW3(frow, 4, src0, src1, src2); - CALC_MULT_FIX_4(src0, scale, shift, val0_m); - CALC_MULT_FIX_4(src1, scale, shift, val1_m); - CALC_MULT_FIX_4(src2, scale, shift, val2_m); - SW3(val0_m, val1_m, val2_m, dst, 4); - length -= 12; - frow += 12; - dst += 12; - } else if (length >= 8) { - uint32_t val0_m, val1_m; - v4u32 src0, src1; - LD_UW2(frow, 4, src0, src1); - CALC_MULT_FIX_4(src0, scale, shift, val0_m); - CALC_MULT_FIX_4(src1, scale, shift, val1_m); - SW2(val0_m, val1_m, dst, 4); - length -= 8; - frow += 8; - dst += 8; - } else if (length >= 4) { - uint32_t val0_m; - const v4u32 src0 = LD_UW(frow); - CALC_MULT_FIX_4(src0, scale, shift, val0_m); - SW(val0_m, dst); - length -= 4; - frow += 4; - dst += 4; - } - for (x_out = 0; x_out < length; ++x_out) { - const uint32_t J = frow[x_out]; - const int v = (int)MULT_FIX(J, wrk->fy_scale); - dst[x_out] = (v > 255) ? 255u : (uint8_t)v; - } - } -} - -static WEBP_INLINE void ExportRowExpand_1(const uint32_t* frow, uint32_t* irow, - uint8_t* dst, int length, - WebPRescaler* const wrk) { - const uint32_t B = WEBP_RESCALER_FRAC(-wrk->y_accum, wrk->y_sub); - const uint32_t A = (uint32_t)(WEBP_RESCALER_ONE - B); - const v4i32 B1 = __msa_fill_w(B); - const v4i32 A1 = __msa_fill_w(A); - const v4i32 AB = __msa_ilvr_w(A1, B1); - const v4u32 scale = (v4u32)__msa_fill_w(wrk->fy_scale); - const v4u32 shift = (v4u32)__msa_fill_w(WEBP_RESCALER_RFIX); - - while (length >= 16) { - v4u32 frow0, frow1, frow2, frow3, irow0, irow1, irow2, irow3; - v16u8 t0, t1, t2, t3, t4, t5; - LD_UW4(frow, 4, frow0, frow1, frow2, frow3); - LD_UW4(irow, 4, irow0, irow1, irow2, irow3); - CALC_MULT_FIX2_16(frow0, frow1, irow0, irow1, AB, scale, shift, t0, t1); - CALC_MULT_FIX2_16(frow2, frow3, irow2, irow3, AB, scale, shift, t2, t3); - PCKEV_B2_UB(t1, t0, t3, t2, t4, t5); - t0 = (v16u8)__msa_pckev_b((v16i8)t5, (v16i8)t4); - ST_UB(t0, dst); - frow += 16; - irow += 16; - dst += 16; - length -= 16; - } - if (length > 0) { - int x_out; - if (length >= 12) { - uint32_t val0_m, val1_m, val2_m; - v4u32 frow0, frow1, frow2, irow0, irow1, irow2; - LD_UW3(frow, 4, frow0, frow1, frow2); - LD_UW3(irow, 4, irow0, irow1, irow2); - CALC_MULT_FIX2_4(frow0, irow0, AB, scale, shift, val0_m); - CALC_MULT_FIX2_4(frow1, irow1, AB, scale, shift, val1_m); - CALC_MULT_FIX2_4(frow2, irow2, AB, scale, shift, val2_m); - SW3(val0_m, val1_m, val2_m, dst, 4); - frow += 12; - irow += 12; - dst += 12; - length -= 12; - } else if (length >= 8) { - uint32_t val0_m, val1_m; - v4u32 frow0, frow1, irow0, irow1; - LD_UW2(frow, 4, frow0, frow1); - LD_UW2(irow, 4, irow0, irow1); - CALC_MULT_FIX2_4(frow0, irow0, AB, scale, shift, val0_m); - CALC_MULT_FIX2_4(frow1, irow1, AB, scale, shift, val1_m); - SW2(val0_m, val1_m, dst, 4); - frow += 4; - irow += 4; - dst += 4; - length -= 4; - } else if (length >= 4) { - uint32_t val0_m; - const v4u32 frow0 = LD_UW(frow + 0); - const v4u32 irow0 = LD_UW(irow + 0); - CALC_MULT_FIX2_4(frow0, irow0, AB, scale, shift, val0_m); - SW(val0_m, dst); - frow += 4; - irow += 4; - dst += 4; - length -= 4; - } - for (x_out = 0; x_out < length; ++x_out) { - const uint64_t I = (uint64_t)A * frow[x_out] - + (uint64_t)B * irow[x_out]; - const uint32_t J = (uint32_t)((I + ROUNDER) >> WEBP_RESCALER_RFIX); - const int v = (int)MULT_FIX(J, wrk->fy_scale); - dst[x_out] = (v > 255) ? 255u : (uint8_t)v; - } - } -} - -static void RescalerExportRowExpand_MIPSdspR2(WebPRescaler* const wrk) { - uint8_t* dst = wrk->dst; - rescaler_t* irow = wrk->irow; - const int x_out_max = wrk->dst_width * wrk->num_channels; - const rescaler_t* frow = wrk->frow; - assert(!WebPRescalerOutputDone(wrk)); - assert(wrk->y_accum <= 0); - assert(wrk->y_expand); - assert(wrk->y_sub != 0); - if (wrk->y_accum == 0) { - ExportRowExpand_0(frow, dst, x_out_max, wrk); - } else { - ExportRowExpand_1(frow, irow, dst, x_out_max, wrk); - } -} - -#if 0 // disabled for now. TODO(skal): make match the C-code -static WEBP_INLINE void ExportRowShrink_0(const uint32_t* frow, uint32_t* irow, - uint8_t* dst, int length, - const uint32_t yscale, - WebPRescaler* const wrk) { - const v4u32 y_scale = (v4u32)__msa_fill_w(yscale); - const v4u32 fxyscale = (v4u32)__msa_fill_w(wrk->fxy_scale); - const v4u32 shiftval = (v4u32)__msa_fill_w(WEBP_RESCALER_RFIX); - const v4i32 zero = { 0 }; - - while (length >= 16) { - v4u32 src0, src1, src2, src3, frac0, frac1, frac2, frac3; - v16u8 out; - LD_UW4(frow, 4, src0, src1, src2, src3); - CALC_MULT_FIX1_16(src0, src1, src2, src3, y_scale, shiftval, - frac0, frac1, frac2, frac3); - LD_UW4(irow, 4, src0, src1, src2, src3); - SUB4(src0, frac0, src1, frac1, src2, frac2, src3, frac3, - src0, src1, src2, src3); - CALC_MULT_FIX_16(src0, src1, src2, src3, fxyscale, shiftval, out); - ST_UB(out, dst); - ST_UW4(frac0, frac1, frac2, frac3, irow, 4); - frow += 16; - irow += 16; - dst += 16; - length -= 16; - } - if (length > 0) { - int x_out; - if (length >= 12) { - uint32_t val0_m, val1_m, val2_m; - v4u32 src0, src1, src2, frac0, frac1, frac2; - LD_UW3(frow, 4, src0, src1, src2); - CALC_MULT_FIX1_4(src0, y_scale, shiftval, frac0); - CALC_MULT_FIX1_4(src1, y_scale, shiftval, frac1); - CALC_MULT_FIX1_4(src2, y_scale, shiftval, frac2); - LD_UW3(irow, 4, src0, src1, src2); - SUB3(src0, frac0, src1, frac1, src2, frac2, src0, src1, src2); - CALC_MULT_FIX_4(src0, fxyscale, shiftval, val0_m); - CALC_MULT_FIX_4(src1, fxyscale, shiftval, val1_m); - CALC_MULT_FIX_4(src2, fxyscale, shiftval, val2_m); - SW3(val0_m, val1_m, val2_m, dst, 4); - ST_UW3(frac0, frac1, frac2, irow, 4); - frow += 12; - irow += 12; - dst += 12; - length -= 12; - } else if (length >= 8) { - uint32_t val0_m, val1_m; - v4u32 src0, src1, frac0, frac1; - LD_UW2(frow, 4, src0, src1); - CALC_MULT_FIX1_4(src0, y_scale, shiftval, frac0); - CALC_MULT_FIX1_4(src1, y_scale, shiftval, frac1); - LD_UW2(irow, 4, src0, src1); - SUB2(src0, frac0, src1, frac1, src0, src1); - CALC_MULT_FIX_4(src0, fxyscale, shiftval, val0_m); - CALC_MULT_FIX_4(src1, fxyscale, shiftval, val1_m); - SW2(val0_m, val1_m, dst, 4); - ST_UW2(frac0, frac1, irow, 4); - frow += 8; - irow += 8; - dst += 8; - length -= 8; - } else if (length >= 4) { - uint32_t val0_m; - v4u32 frac0; - v4u32 src0 = LD_UW(frow); - CALC_MULT_FIX1_4(src0, y_scale, shiftval, frac0); - src0 = LD_UW(irow); - src0 = src0 - frac0; - CALC_MULT_FIX_4(src0, fxyscale, shiftval, val0_m); - SW(val0_m, dst); - ST_UW(frac0, irow); - frow += 4; - irow += 4; - dst += 4; - length -= 4; - } - for (x_out = 0; x_out < length; ++x_out) { - const uint32_t frac = (uint32_t)MULT_FIX_FLOOR(frow[x_out], yscale); - const int v = (int)MULT_FIX(irow[x_out] - frac, wrk->fxy_scale); - dst[x_out] = (v > 255) ? 255u : (uint8_t)v; - irow[x_out] = frac; - } - } -} - -static WEBP_INLINE void ExportRowShrink_1(uint32_t* irow, uint8_t* dst, - int length, - WebPRescaler* const wrk) { - const v4u32 scale = (v4u32)__msa_fill_w(wrk->fxy_scale); - const v4u32 shift = (v4u32)__msa_fill_w(WEBP_RESCALER_RFIX); - const v4i32 zero = { 0 }; - - while (length >= 16) { - v4u32 src0, src1, src2, src3; - v16u8 dst0; - LD_UW4(irow, 4, src0, src1, src2, src3); - CALC_MULT_FIX_16(src0, src1, src2, src3, scale, shift, dst0); - ST_UB(dst0, dst); - ST_SW4(zero, zero, zero, zero, irow, 4); - length -= 16; - irow += 16; - dst += 16; - } - if (length > 0) { - int x_out; - if (length >= 12) { - uint32_t val0_m, val1_m, val2_m; - v4u32 src0, src1, src2; - LD_UW3(irow, 4, src0, src1, src2); - CALC_MULT_FIX_4(src0, scale, shift, val0_m); - CALC_MULT_FIX_4(src1, scale, shift, val1_m); - CALC_MULT_FIX_4(src2, scale, shift, val2_m); - SW3(val0_m, val1_m, val2_m, dst, 4); - ST_SW3(zero, zero, zero, irow, 4); - length -= 12; - irow += 12; - dst += 12; - } else if (length >= 8) { - uint32_t val0_m, val1_m; - v4u32 src0, src1; - LD_UW2(irow, 4, src0, src1); - CALC_MULT_FIX_4(src0, scale, shift, val0_m); - CALC_MULT_FIX_4(src1, scale, shift, val1_m); - SW2(val0_m, val1_m, dst, 4); - ST_SW2(zero, zero, irow, 4); - length -= 8; - irow += 8; - dst += 8; - } else if (length >= 4) { - uint32_t val0_m; - const v4u32 src0 = LD_UW(irow + 0); - CALC_MULT_FIX_4(src0, scale, shift, val0_m); - SW(val0_m, dst); - ST_SW(zero, irow); - length -= 4; - irow += 4; - dst += 4; - } - for (x_out = 0; x_out < length; ++x_out) { - const int v = (int)MULT_FIX(irow[x_out], wrk->fxy_scale); - dst[x_out] = (v > 255) ? 255u : (uint8_t)v; - irow[x_out] = 0; - } - } -} - -static void RescalerExportRowShrink_MIPSdspR2(WebPRescaler* const wrk) { - uint8_t* dst = wrk->dst; - rescaler_t* irow = wrk->irow; - const int x_out_max = wrk->dst_width * wrk->num_channels; - const rescaler_t* frow = wrk->frow; - const uint32_t yscale = wrk->fy_scale * (-wrk->y_accum); - assert(!WebPRescalerOutputDone(wrk)); - assert(wrk->y_accum <= 0); - assert(!wrk->y_expand); - if (yscale) { - ExportRowShrink_0(frow, irow, dst, x_out_max, yscale, wrk); - } else { - ExportRowShrink_1(irow, dst, x_out_max, wrk); - } -} -#endif // 0 - -//------------------------------------------------------------------------------ -// Entry point - -extern void WebPRescalerDspInitMSA(void); - -WEBP_TSAN_IGNORE_FUNCTION void WebPRescalerDspInitMSA(void) { - WebPRescalerExportRowExpand = RescalerExportRowExpand_MIPSdspR2; -// WebPRescalerExportRowShrink = RescalerExportRowShrink_MIPSdspR2; -} - -#else // !WEBP_USE_MSA - -WEBP_DSP_INIT_STUB(WebPRescalerDspInitMSA) - -#endif // WEBP_USE_MSA diff --git a/Extended/libwebp/src/dsp/rescaler_neon.c b/Extended/libwebp/src/dsp/rescaler_neon.c deleted file mode 100644 index b976a85..0000000 --- a/Extended/libwebp/src/dsp/rescaler_neon.c +++ /dev/null @@ -1,192 +0,0 @@ -// Copyright 2015 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// NEON version of rescaling functions -// -// Author: Skal (pascal.massimino@gmail.com) - -#include "src/dsp/dsp.h" - -#if defined(WEBP_USE_NEON) && !defined(WEBP_REDUCE_SIZE) - -#include -#include -#include "src/dsp/neon.h" -#include "src/utils/rescaler_utils.h" - -#define ROUNDER (WEBP_RESCALER_ONE >> 1) -#define MULT_FIX_C(x, y) (((uint64_t)(x) * (y) + ROUNDER) >> WEBP_RESCALER_RFIX) -#define MULT_FIX_FLOOR_C(x, y) (((uint64_t)(x) * (y)) >> WEBP_RESCALER_RFIX) - -#define LOAD_32x4(SRC, DST) const uint32x4_t DST = vld1q_u32((SRC)) -#define LOAD_32x8(SRC, DST0, DST1) \ - LOAD_32x4(SRC + 0, DST0); \ - LOAD_32x4(SRC + 4, DST1) - -#define STORE_32x8(SRC0, SRC1, DST) do { \ - vst1q_u32((DST) + 0, SRC0); \ - vst1q_u32((DST) + 4, SRC1); \ -} while (0); - -#if (WEBP_RESCALER_RFIX == 32) -#define MAKE_HALF_CST(C) vdupq_n_s32((int32_t)((C) >> 1)) -// note: B is actualy scale>>1. See MAKE_HALF_CST -#define MULT_FIX(A, B) \ - vreinterpretq_u32_s32(vqrdmulhq_s32(vreinterpretq_s32_u32((A)), (B))) -#define MULT_FIX_FLOOR(A, B) \ - vreinterpretq_u32_s32(vqdmulhq_s32(vreinterpretq_s32_u32((A)), (B))) -#else -#error "MULT_FIX/WEBP_RESCALER_RFIX need some more work" -#endif - -static uint32x4_t Interpolate_NEON(const rescaler_t* const frow, - const rescaler_t* const irow, - uint32_t A, uint32_t B) { - LOAD_32x4(frow, A0); - LOAD_32x4(irow, B0); - const uint64x2_t C0 = vmull_n_u32(vget_low_u32(A0), A); - const uint64x2_t C1 = vmull_n_u32(vget_high_u32(A0), A); - const uint64x2_t D0 = vmlal_n_u32(C0, vget_low_u32(B0), B); - const uint64x2_t D1 = vmlal_n_u32(C1, vget_high_u32(B0), B); - const uint32x4_t E = vcombine_u32( - vrshrn_n_u64(D0, WEBP_RESCALER_RFIX), - vrshrn_n_u64(D1, WEBP_RESCALER_RFIX)); - return E; -} - -static void RescalerExportRowExpand_NEON(WebPRescaler* const wrk) { - int x_out; - uint8_t* const dst = wrk->dst; - rescaler_t* const irow = wrk->irow; - const int x_out_max = wrk->dst_width * wrk->num_channels; - const int max_span = x_out_max & ~7; - const rescaler_t* const frow = wrk->frow; - const uint32_t fy_scale = wrk->fy_scale; - const int32x4_t fy_scale_half = MAKE_HALF_CST(fy_scale); - assert(!WebPRescalerOutputDone(wrk)); - assert(wrk->y_accum <= 0); - assert(wrk->y_expand); - assert(wrk->y_sub != 0); - if (wrk->y_accum == 0) { - for (x_out = 0; x_out < max_span; x_out += 8) { - LOAD_32x4(frow + x_out + 0, A0); - LOAD_32x4(frow + x_out + 4, A1); - const uint32x4_t B0 = MULT_FIX(A0, fy_scale_half); - const uint32x4_t B1 = MULT_FIX(A1, fy_scale_half); - const uint16x4_t C0 = vmovn_u32(B0); - const uint16x4_t C1 = vmovn_u32(B1); - const uint8x8_t D = vqmovn_u16(vcombine_u16(C0, C1)); - vst1_u8(dst + x_out, D); - } - for (; x_out < x_out_max; ++x_out) { - const uint32_t J = frow[x_out]; - const int v = (int)MULT_FIX_C(J, fy_scale); - dst[x_out] = (v > 255) ? 255u : (uint8_t)v; - } - } else { - const uint32_t B = WEBP_RESCALER_FRAC(-wrk->y_accum, wrk->y_sub); - const uint32_t A = (uint32_t)(WEBP_RESCALER_ONE - B); - for (x_out = 0; x_out < max_span; x_out += 8) { - const uint32x4_t C0 = - Interpolate_NEON(frow + x_out + 0, irow + x_out + 0, A, B); - const uint32x4_t C1 = - Interpolate_NEON(frow + x_out + 4, irow + x_out + 4, A, B); - const uint32x4_t D0 = MULT_FIX(C0, fy_scale_half); - const uint32x4_t D1 = MULT_FIX(C1, fy_scale_half); - const uint16x4_t E0 = vmovn_u32(D0); - const uint16x4_t E1 = vmovn_u32(D1); - const uint8x8_t F = vqmovn_u16(vcombine_u16(E0, E1)); - vst1_u8(dst + x_out, F); - } - for (; x_out < x_out_max; ++x_out) { - const uint64_t I = (uint64_t)A * frow[x_out] - + (uint64_t)B * irow[x_out]; - const uint32_t J = (uint32_t)((I + ROUNDER) >> WEBP_RESCALER_RFIX); - const int v = (int)MULT_FIX_C(J, fy_scale); - dst[x_out] = (v > 255) ? 255u : (uint8_t)v; - } - } -} - -static void RescalerExportRowShrink_NEON(WebPRescaler* const wrk) { - int x_out; - uint8_t* const dst = wrk->dst; - rescaler_t* const irow = wrk->irow; - const int x_out_max = wrk->dst_width * wrk->num_channels; - const int max_span = x_out_max & ~7; - const rescaler_t* const frow = wrk->frow; - const uint32_t yscale = wrk->fy_scale * (-wrk->y_accum); - const uint32_t fxy_scale = wrk->fxy_scale; - const uint32x4_t zero = vdupq_n_u32(0); - const int32x4_t yscale_half = MAKE_HALF_CST(yscale); - const int32x4_t fxy_scale_half = MAKE_HALF_CST(fxy_scale); - assert(!WebPRescalerOutputDone(wrk)); - assert(wrk->y_accum <= 0); - assert(!wrk->y_expand); - if (yscale) { - for (x_out = 0; x_out < max_span; x_out += 8) { - LOAD_32x8(frow + x_out, in0, in1); - LOAD_32x8(irow + x_out, in2, in3); - const uint32x4_t A0 = MULT_FIX_FLOOR(in0, yscale_half); - const uint32x4_t A1 = MULT_FIX_FLOOR(in1, yscale_half); - const uint32x4_t B0 = vqsubq_u32(in2, A0); - const uint32x4_t B1 = vqsubq_u32(in3, A1); - const uint32x4_t C0 = MULT_FIX(B0, fxy_scale_half); - const uint32x4_t C1 = MULT_FIX(B1, fxy_scale_half); - const uint16x4_t D0 = vmovn_u32(C0); - const uint16x4_t D1 = vmovn_u32(C1); - const uint8x8_t E = vqmovn_u16(vcombine_u16(D0, D1)); - vst1_u8(dst + x_out, E); - STORE_32x8(A0, A1, irow + x_out); - } - for (; x_out < x_out_max; ++x_out) { - const uint32_t frac = (uint32_t)MULT_FIX_FLOOR_C(frow[x_out], yscale); - const int v = (int)MULT_FIX_C(irow[x_out] - frac, fxy_scale); - dst[x_out] = (v > 255) ? 255u : (uint8_t)v; - irow[x_out] = frac; // new fractional start - } - } else { - for (x_out = 0; x_out < max_span; x_out += 8) { - LOAD_32x8(irow + x_out, in0, in1); - const uint32x4_t A0 = MULT_FIX(in0, fxy_scale_half); - const uint32x4_t A1 = MULT_FIX(in1, fxy_scale_half); - const uint16x4_t B0 = vmovn_u32(A0); - const uint16x4_t B1 = vmovn_u32(A1); - const uint8x8_t C = vqmovn_u16(vcombine_u16(B0, B1)); - vst1_u8(dst + x_out, C); - STORE_32x8(zero, zero, irow + x_out); - } - for (; x_out < x_out_max; ++x_out) { - const int v = (int)MULT_FIX_C(irow[x_out], fxy_scale); - dst[x_out] = (v > 255) ? 255u : (uint8_t)v; - irow[x_out] = 0; - } - } -} - -#undef MULT_FIX_FLOOR_C -#undef MULT_FIX_C -#undef MULT_FIX_FLOOR -#undef MULT_FIX -#undef ROUNDER - -//------------------------------------------------------------------------------ - -extern void WebPRescalerDspInitNEON(void); - -WEBP_TSAN_IGNORE_FUNCTION void WebPRescalerDspInitNEON(void) { - WebPRescalerExportRowExpand = RescalerExportRowExpand_NEON; - WebPRescalerExportRowShrink = RescalerExportRowShrink_NEON; -} - -#else // !WEBP_USE_NEON - -WEBP_DSP_INIT_STUB(WebPRescalerDspInitNEON) - -#endif // WEBP_USE_NEON diff --git a/Extended/libwebp/src/dsp/rescaler_sse2.c b/Extended/libwebp/src/dsp/rescaler_sse2.c deleted file mode 100644 index d7effea..0000000 --- a/Extended/libwebp/src/dsp/rescaler_sse2.c +++ /dev/null @@ -1,366 +0,0 @@ -// Copyright 2015 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// SSE2 Rescaling functions -// -// Author: Skal (pascal.massimino@gmail.com) - -#include "src/dsp/dsp.h" - -#if defined(WEBP_USE_SSE2) && !defined(WEBP_REDUCE_SIZE) -#include - -#include -#include "src/utils/rescaler_utils.h" -#include "src/utils/utils.h" - -//------------------------------------------------------------------------------ -// Implementations of critical functions ImportRow / ExportRow - -#define ROUNDER (WEBP_RESCALER_ONE >> 1) -#define MULT_FIX(x, y) (((uint64_t)(x) * (y) + ROUNDER) >> WEBP_RESCALER_RFIX) -#define MULT_FIX_FLOOR(x, y) (((uint64_t)(x) * (y)) >> WEBP_RESCALER_RFIX) - -// input: 8 bytes ABCDEFGH -> output: A0E0B0F0C0G0D0H0 -static void LoadTwoPixels_SSE2(const uint8_t* const src, __m128i* out) { - const __m128i zero = _mm_setzero_si128(); - const __m128i A = _mm_loadl_epi64((const __m128i*)(src)); // ABCDEFGH - const __m128i B = _mm_unpacklo_epi8(A, zero); // A0B0C0D0E0F0G0H0 - const __m128i C = _mm_srli_si128(B, 8); // E0F0G0H0 - *out = _mm_unpacklo_epi16(B, C); -} - -// input: 8 bytes ABCDEFGH -> output: A0B0C0D0E0F0G0H0 -static void LoadEightPixels_SSE2(const uint8_t* const src, __m128i* out) { - const __m128i zero = _mm_setzero_si128(); - const __m128i A = _mm_loadl_epi64((const __m128i*)(src)); // ABCDEFGH - *out = _mm_unpacklo_epi8(A, zero); -} - -static void RescalerImportRowExpand_SSE2(WebPRescaler* const wrk, - const uint8_t* src) { - rescaler_t* frow = wrk->frow; - const rescaler_t* const frow_end = frow + wrk->dst_width * wrk->num_channels; - const int x_add = wrk->x_add; - int accum = x_add; - __m128i cur_pixels; - - // SSE2 implementation only works with 16b signed arithmetic at max. - if (wrk->src_width < 8 || accum >= (1 << 15)) { - WebPRescalerImportRowExpand_C(wrk, src); - return; - } - - assert(!WebPRescalerInputDone(wrk)); - assert(wrk->x_expand); - if (wrk->num_channels == 4) { - LoadTwoPixels_SSE2(src, &cur_pixels); - src += 4; - while (1) { - const __m128i mult = _mm_set1_epi32(((x_add - accum) << 16) | accum); - const __m128i out = _mm_madd_epi16(cur_pixels, mult); - _mm_storeu_si128((__m128i*)frow, out); - frow += 4; - if (frow >= frow_end) break; - accum -= wrk->x_sub; - if (accum < 0) { - LoadTwoPixels_SSE2(src, &cur_pixels); - src += 4; - accum += x_add; - } - } - } else { - int left; - const uint8_t* const src_limit = src + wrk->src_width - 8; - LoadEightPixels_SSE2(src, &cur_pixels); - src += 7; - left = 7; - while (1) { - const __m128i mult = _mm_cvtsi32_si128(((x_add - accum) << 16) | accum); - const __m128i out = _mm_madd_epi16(cur_pixels, mult); - assert(sizeof(*frow) == sizeof(uint32_t)); - WebPUint32ToMem((uint8_t*)frow, _mm_cvtsi128_si32(out)); - frow += 1; - if (frow >= frow_end) break; - accum -= wrk->x_sub; - if (accum < 0) { - if (--left) { - cur_pixels = _mm_srli_si128(cur_pixels, 2); - } else if (src <= src_limit) { - LoadEightPixels_SSE2(src, &cur_pixels); - src += 7; - left = 7; - } else { // tail - cur_pixels = _mm_srli_si128(cur_pixels, 2); - cur_pixels = _mm_insert_epi16(cur_pixels, src[1], 1); - src += 1; - left = 1; - } - accum += x_add; - } - } - } - assert(accum == 0); -} - -static void RescalerImportRowShrink_SSE2(WebPRescaler* const wrk, - const uint8_t* src) { - const int x_sub = wrk->x_sub; - int accum = 0; - const __m128i zero = _mm_setzero_si128(); - const __m128i mult0 = _mm_set1_epi16(x_sub); - const __m128i mult1 = _mm_set1_epi32(wrk->fx_scale); - const __m128i rounder = _mm_set_epi32(0, ROUNDER, 0, ROUNDER); - __m128i sum = zero; - rescaler_t* frow = wrk->frow; - const rescaler_t* const frow_end = wrk->frow + 4 * wrk->dst_width; - - if (wrk->num_channels != 4 || wrk->x_add > (x_sub << 7)) { - WebPRescalerImportRowShrink_C(wrk, src); - return; - } - assert(!WebPRescalerInputDone(wrk)); - assert(!wrk->x_expand); - - for (; frow < frow_end; frow += 4) { - __m128i base = zero; - accum += wrk->x_add; - while (accum > 0) { - const __m128i A = _mm_cvtsi32_si128(WebPMemToUint32(src)); - src += 4; - base = _mm_unpacklo_epi8(A, zero); - // To avoid overflow, we need: base * x_add / x_sub < 32768 - // => x_add < x_sub << 7. That's a 1/128 reduction ratio limit. - sum = _mm_add_epi16(sum, base); - accum -= x_sub; - } - { // Emit next horizontal pixel. - const __m128i mult = _mm_set1_epi16(-accum); - const __m128i frac0 = _mm_mullo_epi16(base, mult); // 16b x 16b -> 32b - const __m128i frac1 = _mm_mulhi_epu16(base, mult); - const __m128i frac = _mm_unpacklo_epi16(frac0, frac1); // frac is 32b - const __m128i A0 = _mm_mullo_epi16(sum, mult0); - const __m128i A1 = _mm_mulhi_epu16(sum, mult0); - const __m128i B0 = _mm_unpacklo_epi16(A0, A1); // sum * x_sub - const __m128i frow_out = _mm_sub_epi32(B0, frac); // sum * x_sub - frac - const __m128i D0 = _mm_srli_epi64(frac, 32); - const __m128i D1 = _mm_mul_epu32(frac, mult1); // 32b x 16b -> 64b - const __m128i D2 = _mm_mul_epu32(D0, mult1); - const __m128i E1 = _mm_add_epi64(D1, rounder); - const __m128i E2 = _mm_add_epi64(D2, rounder); - const __m128i F1 = _mm_shuffle_epi32(E1, 1 | (3 << 2)); - const __m128i F2 = _mm_shuffle_epi32(E2, 1 | (3 << 2)); - const __m128i G = _mm_unpacklo_epi32(F1, F2); - sum = _mm_packs_epi32(G, zero); - _mm_storeu_si128((__m128i*)frow, frow_out); - } - } - assert(accum == 0); -} - -//------------------------------------------------------------------------------ -// Row export - -// load *src as epi64, multiply by mult and store result in [out0 ... out3] -static WEBP_INLINE void LoadDispatchAndMult_SSE2(const rescaler_t* const src, - const __m128i* const mult, - __m128i* const out0, - __m128i* const out1, - __m128i* const out2, - __m128i* const out3) { - const __m128i A0 = _mm_loadu_si128((const __m128i*)(src + 0)); - const __m128i A1 = _mm_loadu_si128((const __m128i*)(src + 4)); - const __m128i A2 = _mm_srli_epi64(A0, 32); - const __m128i A3 = _mm_srli_epi64(A1, 32); - if (mult != NULL) { - *out0 = _mm_mul_epu32(A0, *mult); - *out1 = _mm_mul_epu32(A1, *mult); - *out2 = _mm_mul_epu32(A2, *mult); - *out3 = _mm_mul_epu32(A3, *mult); - } else { - *out0 = A0; - *out1 = A1; - *out2 = A2; - *out3 = A3; - } -} - -static WEBP_INLINE void ProcessRow_SSE2(const __m128i* const A0, - const __m128i* const A1, - const __m128i* const A2, - const __m128i* const A3, - const __m128i* const mult, - uint8_t* const dst) { - const __m128i rounder = _mm_set_epi32(0, ROUNDER, 0, ROUNDER); - const __m128i mask = _mm_set_epi32(0xffffffffu, 0, 0xffffffffu, 0); - const __m128i B0 = _mm_mul_epu32(*A0, *mult); - const __m128i B1 = _mm_mul_epu32(*A1, *mult); - const __m128i B2 = _mm_mul_epu32(*A2, *mult); - const __m128i B3 = _mm_mul_epu32(*A3, *mult); - const __m128i C0 = _mm_add_epi64(B0, rounder); - const __m128i C1 = _mm_add_epi64(B1, rounder); - const __m128i C2 = _mm_add_epi64(B2, rounder); - const __m128i C3 = _mm_add_epi64(B3, rounder); - const __m128i D0 = _mm_srli_epi64(C0, WEBP_RESCALER_RFIX); - const __m128i D1 = _mm_srli_epi64(C1, WEBP_RESCALER_RFIX); -#if (WEBP_RESCALER_RFIX < 32) - const __m128i D2 = - _mm_and_si128(_mm_slli_epi64(C2, 32 - WEBP_RESCALER_RFIX), mask); - const __m128i D3 = - _mm_and_si128(_mm_slli_epi64(C3, 32 - WEBP_RESCALER_RFIX), mask); -#else - const __m128i D2 = _mm_and_si128(C2, mask); - const __m128i D3 = _mm_and_si128(C3, mask); -#endif - const __m128i E0 = _mm_or_si128(D0, D2); - const __m128i E1 = _mm_or_si128(D1, D3); - const __m128i F = _mm_packs_epi32(E0, E1); - const __m128i G = _mm_packus_epi16(F, F); - _mm_storel_epi64((__m128i*)dst, G); -} - -static void RescalerExportRowExpand_SSE2(WebPRescaler* const wrk) { - int x_out; - uint8_t* const dst = wrk->dst; - rescaler_t* const irow = wrk->irow; - const int x_out_max = wrk->dst_width * wrk->num_channels; - const rescaler_t* const frow = wrk->frow; - const __m128i mult = _mm_set_epi32(0, wrk->fy_scale, 0, wrk->fy_scale); - - assert(!WebPRescalerOutputDone(wrk)); - assert(wrk->y_accum <= 0 && wrk->y_sub + wrk->y_accum >= 0); - assert(wrk->y_expand); - if (wrk->y_accum == 0) { - for (x_out = 0; x_out + 8 <= x_out_max; x_out += 8) { - __m128i A0, A1, A2, A3; - LoadDispatchAndMult_SSE2(frow + x_out, NULL, &A0, &A1, &A2, &A3); - ProcessRow_SSE2(&A0, &A1, &A2, &A3, &mult, dst + x_out); - } - for (; x_out < x_out_max; ++x_out) { - const uint32_t J = frow[x_out]; - const int v = (int)MULT_FIX(J, wrk->fy_scale); - dst[x_out] = (v > 255) ? 255u : (uint8_t)v; - } - } else { - const uint32_t B = WEBP_RESCALER_FRAC(-wrk->y_accum, wrk->y_sub); - const uint32_t A = (uint32_t)(WEBP_RESCALER_ONE - B); - const __m128i mA = _mm_set_epi32(0, A, 0, A); - const __m128i mB = _mm_set_epi32(0, B, 0, B); - const __m128i rounder = _mm_set_epi32(0, ROUNDER, 0, ROUNDER); - for (x_out = 0; x_out + 8 <= x_out_max; x_out += 8) { - __m128i A0, A1, A2, A3, B0, B1, B2, B3; - LoadDispatchAndMult_SSE2(frow + x_out, &mA, &A0, &A1, &A2, &A3); - LoadDispatchAndMult_SSE2(irow + x_out, &mB, &B0, &B1, &B2, &B3); - { - const __m128i C0 = _mm_add_epi64(A0, B0); - const __m128i C1 = _mm_add_epi64(A1, B1); - const __m128i C2 = _mm_add_epi64(A2, B2); - const __m128i C3 = _mm_add_epi64(A3, B3); - const __m128i D0 = _mm_add_epi64(C0, rounder); - const __m128i D1 = _mm_add_epi64(C1, rounder); - const __m128i D2 = _mm_add_epi64(C2, rounder); - const __m128i D3 = _mm_add_epi64(C3, rounder); - const __m128i E0 = _mm_srli_epi64(D0, WEBP_RESCALER_RFIX); - const __m128i E1 = _mm_srli_epi64(D1, WEBP_RESCALER_RFIX); - const __m128i E2 = _mm_srli_epi64(D2, WEBP_RESCALER_RFIX); - const __m128i E3 = _mm_srli_epi64(D3, WEBP_RESCALER_RFIX); - ProcessRow_SSE2(&E0, &E1, &E2, &E3, &mult, dst + x_out); - } - } - for (; x_out < x_out_max; ++x_out) { - const uint64_t I = (uint64_t)A * frow[x_out] - + (uint64_t)B * irow[x_out]; - const uint32_t J = (uint32_t)((I + ROUNDER) >> WEBP_RESCALER_RFIX); - const int v = (int)MULT_FIX(J, wrk->fy_scale); - dst[x_out] = (v > 255) ? 255u : (uint8_t)v; - } - } -} - -static void RescalerExportRowShrink_SSE2(WebPRescaler* const wrk) { - int x_out; - uint8_t* const dst = wrk->dst; - rescaler_t* const irow = wrk->irow; - const int x_out_max = wrk->dst_width * wrk->num_channels; - const rescaler_t* const frow = wrk->frow; - const uint32_t yscale = wrk->fy_scale * (-wrk->y_accum); - assert(!WebPRescalerOutputDone(wrk)); - assert(wrk->y_accum <= 0); - assert(!wrk->y_expand); - if (yscale) { - const int scale_xy = wrk->fxy_scale; - const __m128i mult_xy = _mm_set_epi32(0, scale_xy, 0, scale_xy); - const __m128i mult_y = _mm_set_epi32(0, yscale, 0, yscale); - for (x_out = 0; x_out + 8 <= x_out_max; x_out += 8) { - __m128i A0, A1, A2, A3, B0, B1, B2, B3; - LoadDispatchAndMult_SSE2(irow + x_out, NULL, &A0, &A1, &A2, &A3); - LoadDispatchAndMult_SSE2(frow + x_out, &mult_y, &B0, &B1, &B2, &B3); - { - const __m128i D0 = _mm_srli_epi64(B0, WEBP_RESCALER_RFIX); // = frac - const __m128i D1 = _mm_srli_epi64(B1, WEBP_RESCALER_RFIX); - const __m128i D2 = _mm_srli_epi64(B2, WEBP_RESCALER_RFIX); - const __m128i D3 = _mm_srli_epi64(B3, WEBP_RESCALER_RFIX); - const __m128i E0 = _mm_sub_epi64(A0, D0); // irow[x] - frac - const __m128i E1 = _mm_sub_epi64(A1, D1); - const __m128i E2 = _mm_sub_epi64(A2, D2); - const __m128i E3 = _mm_sub_epi64(A3, D3); - const __m128i F2 = _mm_slli_epi64(D2, 32); - const __m128i F3 = _mm_slli_epi64(D3, 32); - const __m128i G0 = _mm_or_si128(D0, F2); - const __m128i G1 = _mm_or_si128(D1, F3); - _mm_storeu_si128((__m128i*)(irow + x_out + 0), G0); - _mm_storeu_si128((__m128i*)(irow + x_out + 4), G1); - ProcessRow_SSE2(&E0, &E1, &E2, &E3, &mult_xy, dst + x_out); - } - } - for (; x_out < x_out_max; ++x_out) { - const uint32_t frac = (int)MULT_FIX_FLOOR(frow[x_out], yscale); - const int v = (int)MULT_FIX(irow[x_out] - frac, wrk->fxy_scale); - dst[x_out] = (v > 255) ? 255u : (uint8_t)v; - irow[x_out] = frac; // new fractional start - } - } else { - const uint32_t scale = wrk->fxy_scale; - const __m128i mult = _mm_set_epi32(0, scale, 0, scale); - const __m128i zero = _mm_setzero_si128(); - for (x_out = 0; x_out + 8 <= x_out_max; x_out += 8) { - __m128i A0, A1, A2, A3; - LoadDispatchAndMult_SSE2(irow + x_out, NULL, &A0, &A1, &A2, &A3); - _mm_storeu_si128((__m128i*)(irow + x_out + 0), zero); - _mm_storeu_si128((__m128i*)(irow + x_out + 4), zero); - ProcessRow_SSE2(&A0, &A1, &A2, &A3, &mult, dst + x_out); - } - for (; x_out < x_out_max; ++x_out) { - const int v = (int)MULT_FIX(irow[x_out], scale); - dst[x_out] = (v > 255) ? 255u : (uint8_t)v; - irow[x_out] = 0; - } - } -} - -#undef MULT_FIX_FLOOR -#undef MULT_FIX -#undef ROUNDER - -//------------------------------------------------------------------------------ - -extern void WebPRescalerDspInitSSE2(void); - -WEBP_TSAN_IGNORE_FUNCTION void WebPRescalerDspInitSSE2(void) { - WebPRescalerImportRowExpand = RescalerImportRowExpand_SSE2; - WebPRescalerImportRowShrink = RescalerImportRowShrink_SSE2; - WebPRescalerExportRowExpand = RescalerExportRowExpand_SSE2; - WebPRescalerExportRowShrink = RescalerExportRowShrink_SSE2; -} - -#else // !WEBP_USE_SSE2 - -WEBP_DSP_INIT_STUB(WebPRescalerDspInitSSE2) - -#endif // WEBP_USE_SSE2 diff --git a/Extended/libwebp/src/dsp/ssim.c b/Extended/libwebp/src/dsp/ssim.c deleted file mode 100644 index 989ce82..0000000 --- a/Extended/libwebp/src/dsp/ssim.c +++ /dev/null @@ -1,159 +0,0 @@ -// Copyright 2017 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// distortion calculation -// -// Author: Skal (pascal.massimino@gmail.com) - -#include -#include // for abs() - -#include "src/dsp/dsp.h" - -#if !defined(WEBP_REDUCE_SIZE) - -//------------------------------------------------------------------------------ -// SSIM / PSNR - -// hat-shaped filter. Sum of coefficients is equal to 16. -static const uint32_t kWeight[2 * VP8_SSIM_KERNEL + 1] = { - 1, 2, 3, 4, 3, 2, 1 -}; -static const uint32_t kWeightSum = 16 * 16; // sum{kWeight}^2 - -static WEBP_INLINE double SSIMCalculation( - const VP8DistoStats* const stats, uint32_t N /*num samples*/) { - const uint32_t w2 = N * N; - const uint32_t C1 = 20 * w2; - const uint32_t C2 = 60 * w2; - const uint32_t C3 = 8 * 8 * w2; // 'dark' limit ~= 6 - const uint64_t xmxm = (uint64_t)stats->xm * stats->xm; - const uint64_t ymym = (uint64_t)stats->ym * stats->ym; - if (xmxm + ymym >= C3) { - const int64_t xmym = (int64_t)stats->xm * stats->ym; - const int64_t sxy = (int64_t)stats->xym * N - xmym; // can be negative - const uint64_t sxx = (uint64_t)stats->xxm * N - xmxm; - const uint64_t syy = (uint64_t)stats->yym * N - ymym; - // we descale by 8 to prevent overflow during the fnum/fden multiply. - const uint64_t num_S = (2 * (uint64_t)(sxy < 0 ? 0 : sxy) + C2) >> 8; - const uint64_t den_S = (sxx + syy + C2) >> 8; - const uint64_t fnum = (2 * xmym + C1) * num_S; - const uint64_t fden = (xmxm + ymym + C1) * den_S; - const double r = (double)fnum / fden; - assert(r >= 0. && r <= 1.0); - return r; - } - return 1.; // area is too dark to contribute meaningfully -} - -double VP8SSIMFromStats(const VP8DistoStats* const stats) { - return SSIMCalculation(stats, kWeightSum); -} - -double VP8SSIMFromStatsClipped(const VP8DistoStats* const stats) { - return SSIMCalculation(stats, stats->w); -} - -static double SSIMGetClipped_C(const uint8_t* src1, int stride1, - const uint8_t* src2, int stride2, - int xo, int yo, int W, int H) { - VP8DistoStats stats = { 0, 0, 0, 0, 0, 0 }; - const int ymin = (yo - VP8_SSIM_KERNEL < 0) ? 0 : yo - VP8_SSIM_KERNEL; - const int ymax = (yo + VP8_SSIM_KERNEL > H - 1) ? H - 1 - : yo + VP8_SSIM_KERNEL; - const int xmin = (xo - VP8_SSIM_KERNEL < 0) ? 0 : xo - VP8_SSIM_KERNEL; - const int xmax = (xo + VP8_SSIM_KERNEL > W - 1) ? W - 1 - : xo + VP8_SSIM_KERNEL; - int x, y; - src1 += ymin * stride1; - src2 += ymin * stride2; - for (y = ymin; y <= ymax; ++y, src1 += stride1, src2 += stride2) { - for (x = xmin; x <= xmax; ++x) { - const uint32_t w = kWeight[VP8_SSIM_KERNEL + x - xo] - * kWeight[VP8_SSIM_KERNEL + y - yo]; - const uint32_t s1 = src1[x]; - const uint32_t s2 = src2[x]; - stats.w += w; - stats.xm += w * s1; - stats.ym += w * s2; - stats.xxm += w * s1 * s1; - stats.xym += w * s1 * s2; - stats.yym += w * s2 * s2; - } - } - return VP8SSIMFromStatsClipped(&stats); -} - -static double SSIMGet_C(const uint8_t* src1, int stride1, - const uint8_t* src2, int stride2) { - VP8DistoStats stats = { 0, 0, 0, 0, 0, 0 }; - int x, y; - for (y = 0; y <= 2 * VP8_SSIM_KERNEL; ++y, src1 += stride1, src2 += stride2) { - for (x = 0; x <= 2 * VP8_SSIM_KERNEL; ++x) { - const uint32_t w = kWeight[x] * kWeight[y]; - const uint32_t s1 = src1[x]; - const uint32_t s2 = src2[x]; - stats.xm += w * s1; - stats.ym += w * s2; - stats.xxm += w * s1 * s1; - stats.xym += w * s1 * s2; - stats.yym += w * s2 * s2; - } - } - return VP8SSIMFromStats(&stats); -} - -#endif // !defined(WEBP_REDUCE_SIZE) - -//------------------------------------------------------------------------------ - -#if !defined(WEBP_DISABLE_STATS) -static uint32_t AccumulateSSE_C(const uint8_t* src1, - const uint8_t* src2, int len) { - int i; - uint32_t sse2 = 0; - assert(len <= 65535); // to ensure that accumulation fits within uint32_t - for (i = 0; i < len; ++i) { - const int32_t diff = src1[i] - src2[i]; - sse2 += diff * diff; - } - return sse2; -} -#endif - -//------------------------------------------------------------------------------ - -#if !defined(WEBP_REDUCE_SIZE) -VP8SSIMGetFunc VP8SSIMGet; -VP8SSIMGetClippedFunc VP8SSIMGetClipped; -#endif -#if !defined(WEBP_DISABLE_STATS) -VP8AccumulateSSEFunc VP8AccumulateSSE; -#endif - -extern void VP8SSIMDspInitSSE2(void); - -WEBP_DSP_INIT_FUNC(VP8SSIMDspInit) { -#if !defined(WEBP_REDUCE_SIZE) - VP8SSIMGetClipped = SSIMGetClipped_C; - VP8SSIMGet = SSIMGet_C; -#endif - -#if !defined(WEBP_DISABLE_STATS) - VP8AccumulateSSE = AccumulateSSE_C; -#endif - - if (VP8GetCPUInfo != NULL) { -#if defined(WEBP_USE_SSE2) - if (VP8GetCPUInfo(kSSE2)) { - VP8SSIMDspInitSSE2(); - } -#endif - } -} diff --git a/Extended/libwebp/src/dsp/ssim_sse2.c b/Extended/libwebp/src/dsp/ssim_sse2.c deleted file mode 100644 index 1dcb0eb..0000000 --- a/Extended/libwebp/src/dsp/ssim_sse2.c +++ /dev/null @@ -1,165 +0,0 @@ -// Copyright 2017 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// SSE2 version of distortion calculation -// -// Author: Skal (pascal.massimino@gmail.com) - -#include "src/dsp/dsp.h" - -#if defined(WEBP_USE_SSE2) - -#include -#include - -#include "src/dsp/common_sse2.h" - -#if !defined(WEBP_DISABLE_STATS) - -// Helper function -static WEBP_INLINE void SubtractAndSquare_SSE2(const __m128i a, const __m128i b, - __m128i* const sum) { - // take abs(a-b) in 8b - const __m128i a_b = _mm_subs_epu8(a, b); - const __m128i b_a = _mm_subs_epu8(b, a); - const __m128i abs_a_b = _mm_or_si128(a_b, b_a); - // zero-extend to 16b - const __m128i zero = _mm_setzero_si128(); - const __m128i C0 = _mm_unpacklo_epi8(abs_a_b, zero); - const __m128i C1 = _mm_unpackhi_epi8(abs_a_b, zero); - // multiply with self - const __m128i sum1 = _mm_madd_epi16(C0, C0); - const __m128i sum2 = _mm_madd_epi16(C1, C1); - *sum = _mm_add_epi32(sum1, sum2); -} - -//------------------------------------------------------------------------------ -// SSIM / PSNR entry point - -static uint32_t AccumulateSSE_SSE2(const uint8_t* src1, - const uint8_t* src2, int len) { - int i = 0; - uint32_t sse2 = 0; - if (len >= 16) { - const int limit = len - 32; - int32_t tmp[4]; - __m128i sum1; - __m128i sum = _mm_setzero_si128(); - __m128i a0 = _mm_loadu_si128((const __m128i*)&src1[i]); - __m128i b0 = _mm_loadu_si128((const __m128i*)&src2[i]); - i += 16; - while (i <= limit) { - const __m128i a1 = _mm_loadu_si128((const __m128i*)&src1[i]); - const __m128i b1 = _mm_loadu_si128((const __m128i*)&src2[i]); - __m128i sum2; - i += 16; - SubtractAndSquare_SSE2(a0, b0, &sum1); - sum = _mm_add_epi32(sum, sum1); - a0 = _mm_loadu_si128((const __m128i*)&src1[i]); - b0 = _mm_loadu_si128((const __m128i*)&src2[i]); - i += 16; - SubtractAndSquare_SSE2(a1, b1, &sum2); - sum = _mm_add_epi32(sum, sum2); - } - SubtractAndSquare_SSE2(a0, b0, &sum1); - sum = _mm_add_epi32(sum, sum1); - _mm_storeu_si128((__m128i*)tmp, sum); - sse2 += (tmp[3] + tmp[2] + tmp[1] + tmp[0]); - } - - for (; i < len; ++i) { - const int32_t diff = src1[i] - src2[i]; - sse2 += diff * diff; - } - return sse2; -} -#endif // !defined(WEBP_DISABLE_STATS) - -#if !defined(WEBP_REDUCE_SIZE) - -static uint32_t HorizontalAdd16b_SSE2(const __m128i* const m) { - uint16_t tmp[8]; - const __m128i a = _mm_srli_si128(*m, 8); - const __m128i b = _mm_add_epi16(*m, a); - _mm_storeu_si128((__m128i*)tmp, b); - return (uint32_t)tmp[3] + tmp[2] + tmp[1] + tmp[0]; -} - -static uint32_t HorizontalAdd32b_SSE2(const __m128i* const m) { - const __m128i a = _mm_srli_si128(*m, 8); - const __m128i b = _mm_add_epi32(*m, a); - const __m128i c = _mm_add_epi32(b, _mm_srli_si128(b, 4)); - return (uint32_t)_mm_cvtsi128_si32(c); -} - -static const uint16_t kWeight[] = { 1, 2, 3, 4, 3, 2, 1, 0 }; - -#define ACCUMULATE_ROW(WEIGHT) do { \ - /* compute row weight (Wx * Wy) */ \ - const __m128i Wy = _mm_set1_epi16((WEIGHT)); \ - const __m128i W = _mm_mullo_epi16(Wx, Wy); \ - /* process 8 bytes at a time (7 bytes, actually) */ \ - const __m128i a0 = _mm_loadl_epi64((const __m128i*)src1); \ - const __m128i b0 = _mm_loadl_epi64((const __m128i*)src2); \ - /* convert to 16b and multiply by weight */ \ - const __m128i a1 = _mm_unpacklo_epi8(a0, zero); \ - const __m128i b1 = _mm_unpacklo_epi8(b0, zero); \ - const __m128i wa1 = _mm_mullo_epi16(a1, W); \ - const __m128i wb1 = _mm_mullo_epi16(b1, W); \ - /* accumulate */ \ - xm = _mm_add_epi16(xm, wa1); \ - ym = _mm_add_epi16(ym, wb1); \ - xxm = _mm_add_epi32(xxm, _mm_madd_epi16(a1, wa1)); \ - xym = _mm_add_epi32(xym, _mm_madd_epi16(a1, wb1)); \ - yym = _mm_add_epi32(yym, _mm_madd_epi16(b1, wb1)); \ - src1 += stride1; \ - src2 += stride2; \ -} while (0) - -static double SSIMGet_SSE2(const uint8_t* src1, int stride1, - const uint8_t* src2, int stride2) { - VP8DistoStats stats; - const __m128i zero = _mm_setzero_si128(); - __m128i xm = zero, ym = zero; // 16b accums - __m128i xxm = zero, yym = zero, xym = zero; // 32b accum - const __m128i Wx = _mm_loadu_si128((const __m128i*)kWeight); - assert(2 * VP8_SSIM_KERNEL + 1 == 7); - ACCUMULATE_ROW(1); - ACCUMULATE_ROW(2); - ACCUMULATE_ROW(3); - ACCUMULATE_ROW(4); - ACCUMULATE_ROW(3); - ACCUMULATE_ROW(2); - ACCUMULATE_ROW(1); - stats.xm = HorizontalAdd16b_SSE2(&xm); - stats.ym = HorizontalAdd16b_SSE2(&ym); - stats.xxm = HorizontalAdd32b_SSE2(&xxm); - stats.xym = HorizontalAdd32b_SSE2(&xym); - stats.yym = HorizontalAdd32b_SSE2(&yym); - return VP8SSIMFromStats(&stats); -} - -#endif // !defined(WEBP_REDUCE_SIZE) - -extern void VP8SSIMDspInitSSE2(void); - -WEBP_TSAN_IGNORE_FUNCTION void VP8SSIMDspInitSSE2(void) { -#if !defined(WEBP_DISABLE_STATS) - VP8AccumulateSSE = AccumulateSSE_SSE2; -#endif -#if !defined(WEBP_REDUCE_SIZE) - VP8SSIMGet = SSIMGet_SSE2; -#endif -} - -#else // !WEBP_USE_SSE2 - -WEBP_DSP_INIT_STUB(VP8SSIMDspInitSSE2) - -#endif // WEBP_USE_SSE2 diff --git a/Extended/libwebp/src/dsp/upsampling.c b/Extended/libwebp/src/dsp/upsampling.c deleted file mode 100644 index 9b60da5..0000000 --- a/Extended/libwebp/src/dsp/upsampling.c +++ /dev/null @@ -1,327 +0,0 @@ -// Copyright 2011 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// YUV to RGB upsampling functions. -// -// Author: somnath@google.com (Somnath Banerjee) - -#include "src/dsp/dsp.h" -#include "src/dsp/yuv.h" - -#include - -//------------------------------------------------------------------------------ -// Fancy upsampler - -#ifdef FANCY_UPSAMPLING - -// Fancy upsampling functions to convert YUV to RGB -WebPUpsampleLinePairFunc WebPUpsamplers[MODE_LAST]; - -// Given samples laid out in a square as: -// [a b] -// [c d] -// we interpolate u/v as: -// ([9*a + 3*b + 3*c + d 3*a + 9*b + 3*c + d] + [8 8]) / 16 -// ([3*a + b + 9*c + 3*d a + 3*b + 3*c + 9*d] [8 8]) / 16 - -// We process u and v together stashed into 32bit (16bit each). -#define LOAD_UV(u, v) ((u) | ((v) << 16)) - -#define UPSAMPLE_FUNC(FUNC_NAME, FUNC, XSTEP) \ -static void FUNC_NAME(const uint8_t* top_y, const uint8_t* bottom_y, \ - const uint8_t* top_u, const uint8_t* top_v, \ - const uint8_t* cur_u, const uint8_t* cur_v, \ - uint8_t* top_dst, uint8_t* bottom_dst, int len) { \ - int x; \ - const int last_pixel_pair = (len - 1) >> 1; \ - uint32_t tl_uv = LOAD_UV(top_u[0], top_v[0]); /* top-left sample */ \ - uint32_t l_uv = LOAD_UV(cur_u[0], cur_v[0]); /* left-sample */ \ - assert(top_y != NULL); \ - { \ - const uint32_t uv0 = (3 * tl_uv + l_uv + 0x00020002u) >> 2; \ - FUNC(top_y[0], uv0 & 0xff, (uv0 >> 16), top_dst); \ - } \ - if (bottom_y != NULL) { \ - const uint32_t uv0 = (3 * l_uv + tl_uv + 0x00020002u) >> 2; \ - FUNC(bottom_y[0], uv0 & 0xff, (uv0 >> 16), bottom_dst); \ - } \ - for (x = 1; x <= last_pixel_pair; ++x) { \ - const uint32_t t_uv = LOAD_UV(top_u[x], top_v[x]); /* top sample */ \ - const uint32_t uv = LOAD_UV(cur_u[x], cur_v[x]); /* sample */ \ - /* precompute invariant values associated with first and second diagonals*/\ - const uint32_t avg = tl_uv + t_uv + l_uv + uv + 0x00080008u; \ - const uint32_t diag_12 = (avg + 2 * (t_uv + l_uv)) >> 3; \ - const uint32_t diag_03 = (avg + 2 * (tl_uv + uv)) >> 3; \ - { \ - const uint32_t uv0 = (diag_12 + tl_uv) >> 1; \ - const uint32_t uv1 = (diag_03 + t_uv) >> 1; \ - FUNC(top_y[2 * x - 1], uv0 & 0xff, (uv0 >> 16), \ - top_dst + (2 * x - 1) * (XSTEP)); \ - FUNC(top_y[2 * x - 0], uv1 & 0xff, (uv1 >> 16), \ - top_dst + (2 * x - 0) * (XSTEP)); \ - } \ - if (bottom_y != NULL) { \ - const uint32_t uv0 = (diag_03 + l_uv) >> 1; \ - const uint32_t uv1 = (diag_12 + uv) >> 1; \ - FUNC(bottom_y[2 * x - 1], uv0 & 0xff, (uv0 >> 16), \ - bottom_dst + (2 * x - 1) * (XSTEP)); \ - FUNC(bottom_y[2 * x + 0], uv1 & 0xff, (uv1 >> 16), \ - bottom_dst + (2 * x + 0) * (XSTEP)); \ - } \ - tl_uv = t_uv; \ - l_uv = uv; \ - } \ - if (!(len & 1)) { \ - { \ - const uint32_t uv0 = (3 * tl_uv + l_uv + 0x00020002u) >> 2; \ - FUNC(top_y[len - 1], uv0 & 0xff, (uv0 >> 16), \ - top_dst + (len - 1) * (XSTEP)); \ - } \ - if (bottom_y != NULL) { \ - const uint32_t uv0 = (3 * l_uv + tl_uv + 0x00020002u) >> 2; \ - FUNC(bottom_y[len - 1], uv0 & 0xff, (uv0 >> 16), \ - bottom_dst + (len - 1) * (XSTEP)); \ - } \ - } \ -} - -// All variants implemented. -#if !WEBP_NEON_OMIT_C_CODE -UPSAMPLE_FUNC(UpsampleRgbaLinePair_C, VP8YuvToRgba, 4) -UPSAMPLE_FUNC(UpsampleBgraLinePair_C, VP8YuvToBgra, 4) -#if !defined(WEBP_REDUCE_CSP) -UPSAMPLE_FUNC(UpsampleArgbLinePair_C, VP8YuvToArgb, 4) -UPSAMPLE_FUNC(UpsampleRgbLinePair_C, VP8YuvToRgb, 3) -UPSAMPLE_FUNC(UpsampleBgrLinePair_C, VP8YuvToBgr, 3) -UPSAMPLE_FUNC(UpsampleRgba4444LinePair_C, VP8YuvToRgba4444, 2) -UPSAMPLE_FUNC(UpsampleRgb565LinePair_C, VP8YuvToRgb565, 2) -#else -static void EmptyUpsampleFunc(const uint8_t* top_y, const uint8_t* bottom_y, - const uint8_t* top_u, const uint8_t* top_v, - const uint8_t* cur_u, const uint8_t* cur_v, - uint8_t* top_dst, uint8_t* bottom_dst, int len) { - (void)top_y; - (void)bottom_y; - (void)top_u; - (void)top_v; - (void)cur_u; - (void)cur_v; - (void)top_dst; - (void)bottom_dst; - (void)len; - assert(0); // COLORSPACE SUPPORT NOT COMPILED -} -#define UpsampleArgbLinePair_C EmptyUpsampleFunc -#define UpsampleRgbLinePair_C EmptyUpsampleFunc -#define UpsampleBgrLinePair_C EmptyUpsampleFunc -#define UpsampleRgba4444LinePair_C EmptyUpsampleFunc -#define UpsampleRgb565LinePair_C EmptyUpsampleFunc -#endif // WEBP_REDUCE_CSP - -#endif - -#undef LOAD_UV -#undef UPSAMPLE_FUNC - -#endif // FANCY_UPSAMPLING - -//------------------------------------------------------------------------------ - -#if !defined(FANCY_UPSAMPLING) -#define DUAL_SAMPLE_FUNC(FUNC_NAME, FUNC) \ -static void FUNC_NAME(const uint8_t* top_y, const uint8_t* bot_y, \ - const uint8_t* top_u, const uint8_t* top_v, \ - const uint8_t* bot_u, const uint8_t* bot_v, \ - uint8_t* top_dst, uint8_t* bot_dst, int len) { \ - const int half_len = len >> 1; \ - int x; \ - assert(top_dst != NULL); \ - { \ - for (x = 0; x < half_len; ++x) { \ - FUNC(top_y[2 * x + 0], top_u[x], top_v[x], top_dst + 8 * x + 0); \ - FUNC(top_y[2 * x + 1], top_u[x], top_v[x], top_dst + 8 * x + 4); \ - } \ - if (len & 1) FUNC(top_y[2 * x + 0], top_u[x], top_v[x], top_dst + 8 * x); \ - } \ - if (bot_dst != NULL) { \ - for (x = 0; x < half_len; ++x) { \ - FUNC(bot_y[2 * x + 0], bot_u[x], bot_v[x], bot_dst + 8 * x + 0); \ - FUNC(bot_y[2 * x + 1], bot_u[x], bot_v[x], bot_dst + 8 * x + 4); \ - } \ - if (len & 1) FUNC(bot_y[2 * x + 0], bot_u[x], bot_v[x], bot_dst + 8 * x); \ - } \ -} - -DUAL_SAMPLE_FUNC(DualLineSamplerBGRA, VP8YuvToBgra) -DUAL_SAMPLE_FUNC(DualLineSamplerARGB, VP8YuvToArgb) -#undef DUAL_SAMPLE_FUNC - -#endif // !FANCY_UPSAMPLING - -WebPUpsampleLinePairFunc WebPGetLinePairConverter(int alpha_is_last) { - WebPInitUpsamplers(); -#ifdef FANCY_UPSAMPLING - return WebPUpsamplers[alpha_is_last ? MODE_BGRA : MODE_ARGB]; -#else - return (alpha_is_last ? DualLineSamplerBGRA : DualLineSamplerARGB); -#endif -} - -//------------------------------------------------------------------------------ -// YUV444 converter - -#define YUV444_FUNC(FUNC_NAME, FUNC, XSTEP) \ -extern void FUNC_NAME(const uint8_t* y, const uint8_t* u, const uint8_t* v, \ - uint8_t* dst, int len); \ -void FUNC_NAME(const uint8_t* y, const uint8_t* u, const uint8_t* v, \ - uint8_t* dst, int len) { \ - int i; \ - for (i = 0; i < len; ++i) FUNC(y[i], u[i], v[i], &dst[i * (XSTEP)]); \ -} - -YUV444_FUNC(WebPYuv444ToRgba_C, VP8YuvToRgba, 4) -YUV444_FUNC(WebPYuv444ToBgra_C, VP8YuvToBgra, 4) -#if !defined(WEBP_REDUCE_CSP) -YUV444_FUNC(WebPYuv444ToRgb_C, VP8YuvToRgb, 3) -YUV444_FUNC(WebPYuv444ToBgr_C, VP8YuvToBgr, 3) -YUV444_FUNC(WebPYuv444ToArgb_C, VP8YuvToArgb, 4) -YUV444_FUNC(WebPYuv444ToRgba4444_C, VP8YuvToRgba4444, 2) -YUV444_FUNC(WebPYuv444ToRgb565_C, VP8YuvToRgb565, 2) -#else -static void EmptyYuv444Func(const uint8_t* y, - const uint8_t* u, const uint8_t* v, - uint8_t* dst, int len) { - (void)y; - (void)u; - (void)v; - (void)dst; - (void)len; -} -#define WebPYuv444ToRgb_C EmptyYuv444Func -#define WebPYuv444ToBgr_C EmptyYuv444Func -#define WebPYuv444ToArgb_C EmptyYuv444Func -#define WebPYuv444ToRgba4444_C EmptyYuv444Func -#define WebPYuv444ToRgb565_C EmptyYuv444Func -#endif // WEBP_REDUCE_CSP - -#undef YUV444_FUNC - -WebPYUV444Converter WebPYUV444Converters[MODE_LAST]; - -extern void WebPInitYUV444ConvertersMIPSdspR2(void); -extern void WebPInitYUV444ConvertersSSE2(void); -extern void WebPInitYUV444ConvertersSSE41(void); - -WEBP_DSP_INIT_FUNC(WebPInitYUV444Converters) { - WebPYUV444Converters[MODE_RGBA] = WebPYuv444ToRgba_C; - WebPYUV444Converters[MODE_BGRA] = WebPYuv444ToBgra_C; - WebPYUV444Converters[MODE_RGB] = WebPYuv444ToRgb_C; - WebPYUV444Converters[MODE_BGR] = WebPYuv444ToBgr_C; - WebPYUV444Converters[MODE_ARGB] = WebPYuv444ToArgb_C; - WebPYUV444Converters[MODE_RGBA_4444] = WebPYuv444ToRgba4444_C; - WebPYUV444Converters[MODE_RGB_565] = WebPYuv444ToRgb565_C; - WebPYUV444Converters[MODE_rgbA] = WebPYuv444ToRgba_C; - WebPYUV444Converters[MODE_bgrA] = WebPYuv444ToBgra_C; - WebPYUV444Converters[MODE_Argb] = WebPYuv444ToArgb_C; - WebPYUV444Converters[MODE_rgbA_4444] = WebPYuv444ToRgba4444_C; - - if (VP8GetCPUInfo != NULL) { -#if defined(WEBP_USE_SSE2) - if (VP8GetCPUInfo(kSSE2)) { - WebPInitYUV444ConvertersSSE2(); - } -#endif -#if defined(WEBP_USE_SSE41) - if (VP8GetCPUInfo(kSSE4_1)) { - WebPInitYUV444ConvertersSSE41(); - } -#endif -#if defined(WEBP_USE_MIPS_DSP_R2) - if (VP8GetCPUInfo(kMIPSdspR2)) { - WebPInitYUV444ConvertersMIPSdspR2(); - } -#endif - } -} - -//------------------------------------------------------------------------------ -// Main calls - -extern void WebPInitUpsamplersSSE2(void); -extern void WebPInitUpsamplersSSE41(void); -extern void WebPInitUpsamplersNEON(void); -extern void WebPInitUpsamplersMIPSdspR2(void); -extern void WebPInitUpsamplersMSA(void); - -WEBP_DSP_INIT_FUNC(WebPInitUpsamplers) { -#ifdef FANCY_UPSAMPLING -#if !WEBP_NEON_OMIT_C_CODE - WebPUpsamplers[MODE_RGBA] = UpsampleRgbaLinePair_C; - WebPUpsamplers[MODE_BGRA] = UpsampleBgraLinePair_C; - WebPUpsamplers[MODE_rgbA] = UpsampleRgbaLinePair_C; - WebPUpsamplers[MODE_bgrA] = UpsampleBgraLinePair_C; - WebPUpsamplers[MODE_RGB] = UpsampleRgbLinePair_C; - WebPUpsamplers[MODE_BGR] = UpsampleBgrLinePair_C; - WebPUpsamplers[MODE_ARGB] = UpsampleArgbLinePair_C; - WebPUpsamplers[MODE_RGBA_4444] = UpsampleRgba4444LinePair_C; - WebPUpsamplers[MODE_RGB_565] = UpsampleRgb565LinePair_C; - WebPUpsamplers[MODE_Argb] = UpsampleArgbLinePair_C; - WebPUpsamplers[MODE_rgbA_4444] = UpsampleRgba4444LinePair_C; -#endif - - // If defined, use CPUInfo() to overwrite some pointers with faster versions. - if (VP8GetCPUInfo != NULL) { -#if defined(WEBP_USE_SSE2) - if (VP8GetCPUInfo(kSSE2)) { - WebPInitUpsamplersSSE2(); - } -#endif -#if defined(WEBP_USE_SSE41) - if (VP8GetCPUInfo(kSSE4_1)) { - WebPInitUpsamplersSSE41(); - } -#endif -#if defined(WEBP_USE_MIPS_DSP_R2) - if (VP8GetCPUInfo(kMIPSdspR2)) { - WebPInitUpsamplersMIPSdspR2(); - } -#endif -#if defined(WEBP_USE_MSA) - if (VP8GetCPUInfo(kMSA)) { - WebPInitUpsamplersMSA(); - } -#endif - } - -#if defined(WEBP_USE_NEON) - if (WEBP_NEON_OMIT_C_CODE || - (VP8GetCPUInfo != NULL && VP8GetCPUInfo(kNEON))) { - WebPInitUpsamplersNEON(); - } -#endif - - assert(WebPUpsamplers[MODE_RGBA] != NULL); - assert(WebPUpsamplers[MODE_BGRA] != NULL); - assert(WebPUpsamplers[MODE_rgbA] != NULL); - assert(WebPUpsamplers[MODE_bgrA] != NULL); -#if !defined(WEBP_REDUCE_CSP) || !WEBP_NEON_OMIT_C_CODE - assert(WebPUpsamplers[MODE_RGB] != NULL); - assert(WebPUpsamplers[MODE_BGR] != NULL); - assert(WebPUpsamplers[MODE_ARGB] != NULL); - assert(WebPUpsamplers[MODE_RGBA_4444] != NULL); - assert(WebPUpsamplers[MODE_RGB_565] != NULL); - assert(WebPUpsamplers[MODE_Argb] != NULL); - assert(WebPUpsamplers[MODE_rgbA_4444] != NULL); -#endif - -#endif // FANCY_UPSAMPLING -} - -//------------------------------------------------------------------------------ diff --git a/Extended/libwebp/src/dsp/upsampling_mips_dsp_r2.c b/Extended/libwebp/src/dsp/upsampling_mips_dsp_r2.c deleted file mode 100644 index 10d499d..0000000 --- a/Extended/libwebp/src/dsp/upsampling_mips_dsp_r2.c +++ /dev/null @@ -1,291 +0,0 @@ -// Copyright 2014 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// YUV to RGB upsampling functions. -// -// Author(s): Branimir Vasic (branimir.vasic@imgtec.com) -// Djordje Pesut (djordje.pesut@imgtec.com) - -#include "src/dsp/dsp.h" - -#if defined(WEBP_USE_MIPS_DSP_R2) - -#include -#include "src/dsp/yuv.h" - -#define YUV_TO_RGB(Y, U, V, R, G, B) do { \ - const int t1 = MultHi(Y, 19077); \ - const int t2 = MultHi(V, 13320); \ - R = MultHi(V, 26149); \ - G = MultHi(U, 6419); \ - B = MultHi(U, 33050); \ - R = t1 + R; \ - G = t1 - G; \ - B = t1 + B; \ - R = R - 14234; \ - G = G - t2 + 8708; \ - B = B - 17685; \ - __asm__ volatile ( \ - "shll_s.w %[" #R "], %[" #R "], 17 \n\t" \ - "shll_s.w %[" #G "], %[" #G "], 17 \n\t" \ - "shll_s.w %[" #B "], %[" #B "], 17 \n\t" \ - "precrqu_s.qb.ph %[" #R "], %[" #R "], $zero \n\t" \ - "precrqu_s.qb.ph %[" #G "], %[" #G "], $zero \n\t" \ - "precrqu_s.qb.ph %[" #B "], %[" #B "], $zero \n\t" \ - "srl %[" #R "], %[" #R "], 24 \n\t" \ - "srl %[" #G "], %[" #G "], 24 \n\t" \ - "srl %[" #B "], %[" #B "], 24 \n\t" \ - : [R]"+r"(R), [G]"+r"(G), [B]"+r"(B) \ - : \ - ); \ - } while (0) - -#if !defined(WEBP_REDUCE_CSP) -static WEBP_INLINE void YuvToRgb(int y, int u, int v, uint8_t* const rgb) { - int r, g, b; - YUV_TO_RGB(y, u, v, r, g, b); - rgb[0] = r; - rgb[1] = g; - rgb[2] = b; -} -static WEBP_INLINE void YuvToBgr(int y, int u, int v, uint8_t* const bgr) { - int r, g, b; - YUV_TO_RGB(y, u, v, r, g, b); - bgr[0] = b; - bgr[1] = g; - bgr[2] = r; -} -static WEBP_INLINE void YuvToRgb565(int y, int u, int v, uint8_t* const rgb) { - int r, g, b; - YUV_TO_RGB(y, u, v, r, g, b); - { - const int rg = (r & 0xf8) | (g >> 5); - const int gb = ((g << 3) & 0xe0) | (b >> 3); -#if (WEBP_SWAP_16BIT_CSP == 1) - rgb[0] = gb; - rgb[1] = rg; -#else - rgb[0] = rg; - rgb[1] = gb; -#endif - } -} -static WEBP_INLINE void YuvToRgba4444(int y, int u, int v, - uint8_t* const argb) { - int r, g, b; - YUV_TO_RGB(y, u, v, r, g, b); - { - const int rg = (r & 0xf0) | (g >> 4); - const int ba = (b & 0xf0) | 0x0f; // overwrite the lower 4 bits -#if (WEBP_SWAP_16BIT_CSP == 1) - argb[0] = ba; - argb[1] = rg; -#else - argb[0] = rg; - argb[1] = ba; -#endif - } -} -#endif // WEBP_REDUCE_CSP - -//----------------------------------------------------------------------------- -// Alpha handling variants - -#if !defined(WEBP_REDUCE_CSP) -static WEBP_INLINE void YuvToArgb(uint8_t y, uint8_t u, uint8_t v, - uint8_t* const argb) { - int r, g, b; - YUV_TO_RGB(y, u, v, r, g, b); - argb[0] = 0xff; - argb[1] = r; - argb[2] = g; - argb[3] = b; -} -#endif // WEBP_REDUCE_CSP -static WEBP_INLINE void YuvToBgra(uint8_t y, uint8_t u, uint8_t v, - uint8_t* const bgra) { - int r, g, b; - YUV_TO_RGB(y, u, v, r, g, b); - bgra[0] = b; - bgra[1] = g; - bgra[2] = r; - bgra[3] = 0xff; -} -static WEBP_INLINE void YuvToRgba(uint8_t y, uint8_t u, uint8_t v, - uint8_t* const rgba) { - int r, g, b; - YUV_TO_RGB(y, u, v, r, g, b); - rgba[0] = r; - rgba[1] = g; - rgba[2] = b; - rgba[3] = 0xff; -} - -//------------------------------------------------------------------------------ -// Fancy upsampler - -#ifdef FANCY_UPSAMPLING - -// Given samples laid out in a square as: -// [a b] -// [c d] -// we interpolate u/v as: -// ([9*a + 3*b + 3*c + d 3*a + 9*b + 3*c + d] + [8 8]) / 16 -// ([3*a + b + 9*c + 3*d a + 3*b + 3*c + 9*d] [8 8]) / 16 - -// We process u and v together stashed into 32bit (16bit each). -#define LOAD_UV(u, v) ((u) | ((v) << 16)) - -#define UPSAMPLE_FUNC(FUNC_NAME, FUNC, XSTEP) \ -static void FUNC_NAME(const uint8_t* top_y, const uint8_t* bottom_y, \ - const uint8_t* top_u, const uint8_t* top_v, \ - const uint8_t* cur_u, const uint8_t* cur_v, \ - uint8_t* top_dst, uint8_t* bottom_dst, int len) { \ - int x; \ - const int last_pixel_pair = (len - 1) >> 1; \ - uint32_t tl_uv = LOAD_UV(top_u[0], top_v[0]); /* top-left sample */ \ - uint32_t l_uv = LOAD_UV(cur_u[0], cur_v[0]); /* left-sample */ \ - assert(top_y != NULL); \ - { \ - const uint32_t uv0 = (3 * tl_uv + l_uv + 0x00020002u) >> 2; \ - FUNC(top_y[0], uv0 & 0xff, (uv0 >> 16), top_dst); \ - } \ - if (bottom_y != NULL) { \ - const uint32_t uv0 = (3 * l_uv + tl_uv + 0x00020002u) >> 2; \ - FUNC(bottom_y[0], uv0 & 0xff, (uv0 >> 16), bottom_dst); \ - } \ - for (x = 1; x <= last_pixel_pair; ++x) { \ - const uint32_t t_uv = LOAD_UV(top_u[x], top_v[x]); /* top sample */ \ - const uint32_t uv = LOAD_UV(cur_u[x], cur_v[x]); /* sample */ \ - /* precompute invariant values associated with first and second diagonals*/\ - const uint32_t avg = tl_uv + t_uv + l_uv + uv + 0x00080008u; \ - const uint32_t diag_12 = (avg + 2 * (t_uv + l_uv)) >> 3; \ - const uint32_t diag_03 = (avg + 2 * (tl_uv + uv)) >> 3; \ - { \ - const uint32_t uv0 = (diag_12 + tl_uv) >> 1; \ - const uint32_t uv1 = (diag_03 + t_uv) >> 1; \ - FUNC(top_y[2 * x - 1], uv0 & 0xff, (uv0 >> 16), \ - top_dst + (2 * x - 1) * XSTEP); \ - FUNC(top_y[2 * x - 0], uv1 & 0xff, (uv1 >> 16), \ - top_dst + (2 * x - 0) * XSTEP); \ - } \ - if (bottom_y != NULL) { \ - const uint32_t uv0 = (diag_03 + l_uv) >> 1; \ - const uint32_t uv1 = (diag_12 + uv) >> 1; \ - FUNC(bottom_y[2 * x - 1], uv0 & 0xff, (uv0 >> 16), \ - bottom_dst + (2 * x - 1) * XSTEP); \ - FUNC(bottom_y[2 * x + 0], uv1 & 0xff, (uv1 >> 16), \ - bottom_dst + (2 * x + 0) * XSTEP); \ - } \ - tl_uv = t_uv; \ - l_uv = uv; \ - } \ - if (!(len & 1)) { \ - { \ - const uint32_t uv0 = (3 * tl_uv + l_uv + 0x00020002u) >> 2; \ - FUNC(top_y[len - 1], uv0 & 0xff, (uv0 >> 16), \ - top_dst + (len - 1) * XSTEP); \ - } \ - if (bottom_y != NULL) { \ - const uint32_t uv0 = (3 * l_uv + tl_uv + 0x00020002u) >> 2; \ - FUNC(bottom_y[len - 1], uv0 & 0xff, (uv0 >> 16), \ - bottom_dst + (len - 1) * XSTEP); \ - } \ - } \ -} - -// All variants implemented. -UPSAMPLE_FUNC(UpsampleRgbaLinePair, YuvToRgba, 4) -UPSAMPLE_FUNC(UpsampleBgraLinePair, YuvToBgra, 4) -#if !defined(WEBP_REDUCE_CSP) -UPSAMPLE_FUNC(UpsampleRgbLinePair, YuvToRgb, 3) -UPSAMPLE_FUNC(UpsampleBgrLinePair, YuvToBgr, 3) -UPSAMPLE_FUNC(UpsampleArgbLinePair, YuvToArgb, 4) -UPSAMPLE_FUNC(UpsampleRgba4444LinePair, YuvToRgba4444, 2) -UPSAMPLE_FUNC(UpsampleRgb565LinePair, YuvToRgb565, 2) -#endif // WEBP_REDUCE_CSP - -#undef LOAD_UV -#undef UPSAMPLE_FUNC - -//------------------------------------------------------------------------------ -// Entry point - -extern void WebPInitUpsamplersMIPSdspR2(void); - -WEBP_TSAN_IGNORE_FUNCTION void WebPInitUpsamplersMIPSdspR2(void) { - WebPUpsamplers[MODE_RGBA] = UpsampleRgbaLinePair; - WebPUpsamplers[MODE_BGRA] = UpsampleBgraLinePair; - WebPUpsamplers[MODE_rgbA] = UpsampleRgbaLinePair; - WebPUpsamplers[MODE_bgrA] = UpsampleBgraLinePair; -#if !defined(WEBP_REDUCE_CSP) - WebPUpsamplers[MODE_RGB] = UpsampleRgbLinePair; - WebPUpsamplers[MODE_BGR] = UpsampleBgrLinePair; - WebPUpsamplers[MODE_ARGB] = UpsampleArgbLinePair; - WebPUpsamplers[MODE_RGBA_4444] = UpsampleRgba4444LinePair; - WebPUpsamplers[MODE_RGB_565] = UpsampleRgb565LinePair; - WebPUpsamplers[MODE_Argb] = UpsampleArgbLinePair; - WebPUpsamplers[MODE_rgbA_4444] = UpsampleRgba4444LinePair; -#endif // WEBP_REDUCE_CSP -} - -#endif // FANCY_UPSAMPLING - -//------------------------------------------------------------------------------ -// YUV444 converter - -#define YUV444_FUNC(FUNC_NAME, FUNC, XSTEP) \ -static void FUNC_NAME(const uint8_t* y, const uint8_t* u, const uint8_t* v, \ - uint8_t* dst, int len) { \ - int i; \ - for (i = 0; i < len; ++i) FUNC(y[i], u[i], v[i], &dst[i * XSTEP]); \ -} - -YUV444_FUNC(Yuv444ToRgba, YuvToRgba, 4) -YUV444_FUNC(Yuv444ToBgra, YuvToBgra, 4) -#if !defined(WEBP_REDUCE_CSP) -YUV444_FUNC(Yuv444ToRgb, YuvToRgb, 3) -YUV444_FUNC(Yuv444ToBgr, YuvToBgr, 3) -YUV444_FUNC(Yuv444ToArgb, YuvToArgb, 4) -YUV444_FUNC(Yuv444ToRgba4444, YuvToRgba4444, 2) -YUV444_FUNC(Yuv444ToRgb565, YuvToRgb565, 2) -#endif // WEBP_REDUCE_CSP - -#undef YUV444_FUNC - -//------------------------------------------------------------------------------ -// Entry point - -extern void WebPInitYUV444ConvertersMIPSdspR2(void); - -WEBP_TSAN_IGNORE_FUNCTION void WebPInitYUV444ConvertersMIPSdspR2(void) { - WebPYUV444Converters[MODE_RGBA] = Yuv444ToRgba; - WebPYUV444Converters[MODE_BGRA] = Yuv444ToBgra; - WebPYUV444Converters[MODE_rgbA] = Yuv444ToRgba; - WebPYUV444Converters[MODE_bgrA] = Yuv444ToBgra; -#if !defined(WEBP_REDUCE_CSP) - WebPYUV444Converters[MODE_RGB] = Yuv444ToRgb; - WebPYUV444Converters[MODE_BGR] = Yuv444ToBgr; - WebPYUV444Converters[MODE_ARGB] = Yuv444ToArgb; - WebPYUV444Converters[MODE_RGBA_4444] = Yuv444ToRgba4444; - WebPYUV444Converters[MODE_RGB_565] = Yuv444ToRgb565; - WebPYUV444Converters[MODE_Argb] = Yuv444ToArgb; - WebPYUV444Converters[MODE_rgbA_4444] = Yuv444ToRgba4444; -#endif // WEBP_REDUCE_CSP -} - -#else // !WEBP_USE_MIPS_DSP_R2 - -WEBP_DSP_INIT_STUB(WebPInitYUV444ConvertersMIPSdspR2) - -#endif // WEBP_USE_MIPS_DSP_R2 - -#if !(defined(FANCY_UPSAMPLING) && defined(WEBP_USE_MIPS_DSP_R2)) -WEBP_DSP_INIT_STUB(WebPInitUpsamplersMIPSdspR2) -#endif diff --git a/Extended/libwebp/src/dsp/upsampling_msa.c b/Extended/libwebp/src/dsp/upsampling_msa.c deleted file mode 100644 index f2e03e8..0000000 --- a/Extended/libwebp/src/dsp/upsampling_msa.c +++ /dev/null @@ -1,688 +0,0 @@ -// Copyright 2016 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// MSA version of YUV to RGB upsampling functions. -// -// Author: Prashant Patil (prashant.patil@imgtec.com) - -#include -#include "src/dsp/dsp.h" - -#if defined(WEBP_USE_MSA) - -#include "src/dsp/msa_macro.h" -#include "src/dsp/yuv.h" - -#ifdef FANCY_UPSAMPLING - -#define ILVR_UW2(in, out0, out1) do { \ - const v8i16 t0 = (v8i16)__msa_ilvr_b((v16i8)zero, (v16i8)in); \ - out0 = (v4u32)__msa_ilvr_h((v8i16)zero, t0); \ - out1 = (v4u32)__msa_ilvl_h((v8i16)zero, t0); \ -} while (0) - -#define ILVRL_UW4(in, out0, out1, out2, out3) do { \ - v16u8 t0, t1; \ - ILVRL_B2_UB(zero, in, t0, t1); \ - ILVRL_H2_UW(zero, t0, out0, out1); \ - ILVRL_H2_UW(zero, t1, out2, out3); \ -} while (0) - -#define MULTHI_16(in0, in1, in2, in3, cnst, out0, out1) do { \ - const v4i32 const0 = (v4i32)__msa_fill_w(cnst * 256); \ - v4u32 temp0, temp1, temp2, temp3; \ - MUL4(in0, const0, in1, const0, in2, const0, in3, const0, \ - temp0, temp1, temp2, temp3); \ - PCKOD_H2_UH(temp1, temp0, temp3, temp2, out0, out1); \ -} while (0) - -#define MULTHI_8(in0, in1, cnst, out0) do { \ - const v4i32 const0 = (v4i32)__msa_fill_w(cnst * 256); \ - v4u32 temp0, temp1; \ - MUL2(in0, const0, in1, const0, temp0, temp1); \ - out0 = (v8u16)__msa_pckod_h((v8i16)temp1, (v8i16)temp0); \ -} while (0) - -#define CALC_R16(y0, y1, v0, v1, dst) do { \ - const v8i16 const_a = (v8i16)__msa_fill_h(14234); \ - const v8i16 a0 = __msa_adds_s_h((v8i16)y0, (v8i16)v0); \ - const v8i16 a1 = __msa_adds_s_h((v8i16)y1, (v8i16)v1); \ - v8i16 b0 = __msa_subs_s_h(a0, const_a); \ - v8i16 b1 = __msa_subs_s_h(a1, const_a); \ - SRAI_H2_SH(b0, b1, 6); \ - CLIP_SH2_0_255(b0, b1); \ - dst = (v16u8)__msa_pckev_b((v16i8)b1, (v16i8)b0); \ -} while (0) - -#define CALC_R8(y0, v0, dst) do { \ - const v8i16 const_a = (v8i16)__msa_fill_h(14234); \ - const v8i16 a0 = __msa_adds_s_h((v8i16)y0, (v8i16)v0); \ - v8i16 b0 = __msa_subs_s_h(a0, const_a); \ - b0 = SRAI_H(b0, 6); \ - CLIP_SH_0_255(b0); \ - dst = (v16u8)__msa_pckev_b((v16i8)b0, (v16i8)b0); \ -} while (0) - -#define CALC_G16(y0, y1, u0, u1, v0, v1, dst) do { \ - const v8i16 const_a = (v8i16)__msa_fill_h(8708); \ - v8i16 a0 = __msa_subs_s_h((v8i16)y0, (v8i16)u0); \ - v8i16 a1 = __msa_subs_s_h((v8i16)y1, (v8i16)u1); \ - const v8i16 b0 = __msa_subs_s_h(a0, (v8i16)v0); \ - const v8i16 b1 = __msa_subs_s_h(a1, (v8i16)v1); \ - a0 = __msa_adds_s_h(b0, const_a); \ - a1 = __msa_adds_s_h(b1, const_a); \ - SRAI_H2_SH(a0, a1, 6); \ - CLIP_SH2_0_255(a0, a1); \ - dst = (v16u8)__msa_pckev_b((v16i8)a1, (v16i8)a0); \ -} while (0) - -#define CALC_G8(y0, u0, v0, dst) do { \ - const v8i16 const_a = (v8i16)__msa_fill_h(8708); \ - v8i16 a0 = __msa_subs_s_h((v8i16)y0, (v8i16)u0); \ - const v8i16 b0 = __msa_subs_s_h(a0, (v8i16)v0); \ - a0 = __msa_adds_s_h(b0, const_a); \ - a0 = SRAI_H(a0, 6); \ - CLIP_SH_0_255(a0); \ - dst = (v16u8)__msa_pckev_b((v16i8)a0, (v16i8)a0); \ -} while (0) - -#define CALC_B16(y0, y1, u0, u1, dst) do { \ - const v8u16 const_a = (v8u16)__msa_fill_h(17685); \ - const v8u16 a0 = __msa_adds_u_h((v8u16)y0, u0); \ - const v8u16 a1 = __msa_adds_u_h((v8u16)y1, u1); \ - v8u16 b0 = __msa_subs_u_h(a0, const_a); \ - v8u16 b1 = __msa_subs_u_h(a1, const_a); \ - SRAI_H2_UH(b0, b1, 6); \ - CLIP_UH2_0_255(b0, b1); \ - dst = (v16u8)__msa_pckev_b((v16i8)b1, (v16i8)b0); \ -} while (0) - -#define CALC_B8(y0, u0, dst) do { \ - const v8u16 const_a = (v8u16)__msa_fill_h(17685); \ - const v8u16 a0 = __msa_adds_u_h((v8u16)y0, u0); \ - v8u16 b0 = __msa_subs_u_h(a0, const_a); \ - b0 = SRAI_H(b0, 6); \ - CLIP_UH_0_255(b0); \ - dst = (v16u8)__msa_pckev_b((v16i8)b0, (v16i8)b0); \ -} while (0) - -#define CALC_RGB16(y, u, v, R, G, B) do { \ - const v16u8 zero = { 0 }; \ - v8u16 y0, y1, u0, u1, v0, v1; \ - v4u32 p0, p1, p2, p3; \ - const v16u8 in_y = LD_UB(y); \ - const v16u8 in_u = LD_UB(u); \ - const v16u8 in_v = LD_UB(v); \ - ILVRL_UW4(in_y, p0, p1, p2, p3); \ - MULTHI_16(p0, p1, p2, p3, 19077, y0, y1); \ - ILVRL_UW4(in_v, p0, p1, p2, p3); \ - MULTHI_16(p0, p1, p2, p3, 26149, v0, v1); \ - CALC_R16(y0, y1, v0, v1, R); \ - MULTHI_16(p0, p1, p2, p3, 13320, v0, v1); \ - ILVRL_UW4(in_u, p0, p1, p2, p3); \ - MULTHI_16(p0, p1, p2, p3, 6419, u0, u1); \ - CALC_G16(y0, y1, u0, u1, v0, v1, G); \ - MULTHI_16(p0, p1, p2, p3, 33050, u0, u1); \ - CALC_B16(y0, y1, u0, u1, B); \ -} while (0) - -#define CALC_RGB8(y, u, v, R, G, B) do { \ - const v16u8 zero = { 0 }; \ - v8u16 y0, u0, v0; \ - v4u32 p0, p1; \ - const v16u8 in_y = LD_UB(y); \ - const v16u8 in_u = LD_UB(u); \ - const v16u8 in_v = LD_UB(v); \ - ILVR_UW2(in_y, p0, p1); \ - MULTHI_8(p0, p1, 19077, y0); \ - ILVR_UW2(in_v, p0, p1); \ - MULTHI_8(p0, p1, 26149, v0); \ - CALC_R8(y0, v0, R); \ - MULTHI_8(p0, p1, 13320, v0); \ - ILVR_UW2(in_u, p0, p1); \ - MULTHI_8(p0, p1, 6419, u0); \ - CALC_G8(y0, u0, v0, G); \ - MULTHI_8(p0, p1, 33050, u0); \ - CALC_B8(y0, u0, B); \ -} while (0) - -#define STORE16_3(a0, a1, a2, dst) do { \ - const v16u8 mask0 = { 0, 1, 16, 2, 3, 17, 4, 5, 18, 6, 7, 19, \ - 8, 9, 20, 10 }; \ - const v16u8 mask1 = { 0, 21, 1, 2, 22, 3, 4, 23, 5, 6, 24, 7, \ - 8, 25, 9, 10 }; \ - const v16u8 mask2 = { 26, 0, 1, 27, 2, 3, 28, 4, 5, 29, 6, 7, \ - 30, 8, 9, 31 }; \ - v16u8 out0, out1, out2, tmp0, tmp1, tmp2; \ - ILVRL_B2_UB(a1, a0, tmp0, tmp1); \ - out0 = VSHF_UB(tmp0, a2, mask0); \ - tmp2 = SLDI_UB(tmp1, tmp0, 11); \ - out1 = VSHF_UB(tmp2, a2, mask1); \ - tmp2 = SLDI_UB(tmp1, tmp1, 6); \ - out2 = VSHF_UB(tmp2, a2, mask2); \ - ST_UB(out0, dst + 0); \ - ST_UB(out1, dst + 16); \ - ST_UB(out2, dst + 32); \ -} while (0) - -#define STORE8_3(a0, a1, a2, dst) do { \ - int64_t out_m; \ - const v16u8 mask0 = { 0, 1, 16, 2, 3, 17, 4, 5, 18, 6, 7, 19, \ - 8, 9, 20, 10 }; \ - const v16u8 mask1 = { 11, 21, 12, 13, 22, 14, 15, 23, \ - 255, 255, 255, 255, 255, 255, 255, 255 }; \ - const v16u8 tmp0 = (v16u8)__msa_ilvr_b((v16i8)a1, (v16i8)a0); \ - v16u8 out0, out1; \ - VSHF_B2_UB(tmp0, a2, tmp0, a2, mask0, mask1, out0, out1); \ - ST_UB(out0, dst); \ - out_m = __msa_copy_s_d((v2i64)out1, 0); \ - SD(out_m, dst + 16); \ -} while (0) - -#define STORE16_4(a0, a1, a2, a3, dst) do { \ - v16u8 tmp0, tmp1, tmp2, tmp3; \ - v16u8 out0, out1, out2, out3; \ - ILVRL_B2_UB(a1, a0, tmp0, tmp1); \ - ILVRL_B2_UB(a3, a2, tmp2, tmp3); \ - ILVRL_H2_UB(tmp2, tmp0, out0, out1); \ - ILVRL_H2_UB(tmp3, tmp1, out2, out3); \ - ST_UB(out0, dst + 0); \ - ST_UB(out1, dst + 16); \ - ST_UB(out2, dst + 32); \ - ST_UB(out3, dst + 48); \ -} while (0) - -#define STORE8_4(a0, a1, a2, a3, dst) do { \ - v16u8 tmp0, tmp1, tmp2, tmp3; \ - ILVR_B2_UB(a1, a0, a3, a2, tmp0, tmp1); \ - ILVRL_H2_UB(tmp1, tmp0, tmp2, tmp3); \ - ST_UB(tmp2, dst + 0); \ - ST_UB(tmp3, dst + 16); \ -} while (0) - -#define STORE2_16(a0, a1, dst) do { \ - v16u8 out0, out1; \ - ILVRL_B2_UB(a1, a0, out0, out1); \ - ST_UB(out0, dst + 0); \ - ST_UB(out1, dst + 16); \ -} while (0) - -#define STORE2_8(a0, a1, dst) do { \ - const v16u8 out0 = (v16u8)__msa_ilvr_b((v16i8)a1, (v16i8)a0); \ - ST_UB(out0, dst); \ -} while (0) - -#define CALC_RGBA4444(y, u, v, out0, out1, N, dst) do { \ - CALC_RGB##N(y, u, v, R, G, B); \ - tmp0 = ANDI_B(R, 0xf0); \ - tmp1 = SRAI_B(G, 4); \ - RG = tmp0 | tmp1; \ - tmp0 = ANDI_B(B, 0xf0); \ - BA = ORI_B(tmp0, 0x0f); \ - STORE2_##N(out0, out1, dst); \ -} while (0) - -#define CALC_RGB565(y, u, v, out0, out1, N, dst) do { \ - CALC_RGB##N(y, u, v, R, G, B); \ - tmp0 = ANDI_B(R, 0xf8); \ - tmp1 = SRAI_B(G, 5); \ - RG = tmp0 | tmp1; \ - tmp0 = SLLI_B(G, 3); \ - tmp1 = ANDI_B(tmp0, 0xe0); \ - tmp0 = SRAI_B(B, 3); \ - GB = tmp0 | tmp1; \ - STORE2_##N(out0, out1, dst); \ -} while (0) - -static WEBP_INLINE int Clip8(int v) { - return v < 0 ? 0 : v > 255 ? 255 : v; -} - -static void YuvToRgb(int y, int u, int v, uint8_t* const rgb) { - const int y1 = MultHi(y, 19077); - const int r1 = y1 + MultHi(v, 26149) - 14234; - const int g1 = y1 - MultHi(u, 6419) - MultHi(v, 13320) + 8708; - const int b1 = y1 + MultHi(u, 33050) - 17685; - rgb[0] = Clip8(r1 >> 6); - rgb[1] = Clip8(g1 >> 6); - rgb[2] = Clip8(b1 >> 6); -} - -static void YuvToBgr(int y, int u, int v, uint8_t* const bgr) { - const int y1 = MultHi(y, 19077); - const int r1 = y1 + MultHi(v, 26149) - 14234; - const int g1 = y1 - MultHi(u, 6419) - MultHi(v, 13320) + 8708; - const int b1 = y1 + MultHi(u, 33050) - 17685; - bgr[0] = Clip8(b1 >> 6); - bgr[1] = Clip8(g1 >> 6); - bgr[2] = Clip8(r1 >> 6); -} - -#if !defined(WEBP_REDUCE_CSP) -static void YuvToRgb565(int y, int u, int v, uint8_t* const rgb) { - const int y1 = MultHi(y, 19077); - const int r1 = y1 + MultHi(v, 26149) - 14234; - const int g1 = y1 - MultHi(u, 6419) - MultHi(v, 13320) + 8708; - const int b1 = y1 + MultHi(u, 33050) - 17685; - const int r = Clip8(r1 >> 6); - const int g = Clip8(g1 >> 6); - const int b = Clip8(b1 >> 6); - const int rg = (r & 0xf8) | (g >> 5); - const int gb = ((g << 3) & 0xe0) | (b >> 3); -#if (WEBP_SWAP_16BIT_CSP == 1) - rgb[0] = gb; - rgb[1] = rg; -#else - rgb[0] = rg; - rgb[1] = gb; -#endif -} - -static void YuvToRgba4444(int y, int u, int v, uint8_t* const argb) { - const int y1 = MultHi(y, 19077); - const int r1 = y1 + MultHi(v, 26149) - 14234; - const int g1 = y1 - MultHi(u, 6419) - MultHi(v, 13320) + 8708; - const int b1 = y1 + MultHi(u, 33050) - 17685; - const int r = Clip8(r1 >> 6); - const int g = Clip8(g1 >> 6); - const int b = Clip8(b1 >> 6); - const int rg = (r & 0xf0) | (g >> 4); - const int ba = (b & 0xf0) | 0x0f; // overwrite the lower 4 bits -#if (WEBP_SWAP_16BIT_CSP == 1) - argb[0] = ba; - argb[1] = rg; -#else - argb[0] = rg; - argb[1] = ba; -#endif -} - -static void YuvToArgb(uint8_t y, uint8_t u, uint8_t v, uint8_t* const argb) { - argb[0] = 0xff; - YuvToRgb(y, u, v, argb + 1); -} -#endif // WEBP_REDUCE_CSP - -static void YuvToBgra(uint8_t y, uint8_t u, uint8_t v, uint8_t* const bgra) { - YuvToBgr(y, u, v, bgra); - bgra[3] = 0xff; -} - -static void YuvToRgba(uint8_t y, uint8_t u, uint8_t v, uint8_t* const rgba) { - YuvToRgb(y, u, v, rgba); - rgba[3] = 0xff; -} - -#if !defined(WEBP_REDUCE_CSP) -static void YuvToRgbLine(const uint8_t* y, const uint8_t* u, - const uint8_t* v, uint8_t* dst, int length) { - v16u8 R, G, B; - while (length >= 16) { - CALC_RGB16(y, u, v, R, G, B); - STORE16_3(R, G, B, dst); - y += 16; - u += 16; - v += 16; - dst += 16 * 3; - length -= 16; - } - if (length > 8) { - uint8_t temp[3 * 16] = { 0 }; - memcpy(temp, y, length * sizeof(*temp)); - CALC_RGB16(temp, u, v, R, G, B); - STORE16_3(R, G, B, temp); - memcpy(dst, temp, length * 3 * sizeof(*dst)); - } else if (length > 0) { - uint8_t temp[3 * 8] = { 0 }; - memcpy(temp, y, length * sizeof(*temp)); - CALC_RGB8(temp, u, v, R, G, B); - STORE8_3(R, G, B, temp); - memcpy(dst, temp, length * 3 * sizeof(*dst)); - } -} - -static void YuvToBgrLine(const uint8_t* y, const uint8_t* u, - const uint8_t* v, uint8_t* dst, int length) { - v16u8 R, G, B; - while (length >= 16) { - CALC_RGB16(y, u, v, R, G, B); - STORE16_3(B, G, R, dst); - y += 16; - u += 16; - v += 16; - dst += 16 * 3; - length -= 16; - } - if (length > 8) { - uint8_t temp[3 * 16] = { 0 }; - memcpy(temp, y, length * sizeof(*temp)); - CALC_RGB16(temp, u, v, R, G, B); - STORE16_3(B, G, R, temp); - memcpy(dst, temp, length * 3 * sizeof(*dst)); - } else if (length > 0) { - uint8_t temp[3 * 8] = { 0 }; - memcpy(temp, y, length * sizeof(*temp)); - CALC_RGB8(temp, u, v, R, G, B); - STORE8_3(B, G, R, temp); - memcpy(dst, temp, length * 3 * sizeof(*dst)); - } -} -#endif // WEBP_REDUCE_CSP - -static void YuvToRgbaLine(const uint8_t* y, const uint8_t* u, - const uint8_t* v, uint8_t* dst, int length) { - v16u8 R, G, B; - const v16u8 A = (v16u8)__msa_ldi_b(ALPHAVAL); - while (length >= 16) { - CALC_RGB16(y, u, v, R, G, B); - STORE16_4(R, G, B, A, dst); - y += 16; - u += 16; - v += 16; - dst += 16 * 4; - length -= 16; - } - if (length > 8) { - uint8_t temp[4 * 16] = { 0 }; - memcpy(temp, y, length * sizeof(*temp)); - CALC_RGB16(&temp[0], u, v, R, G, B); - STORE16_4(R, G, B, A, temp); - memcpy(dst, temp, length * 4 * sizeof(*dst)); - } else if (length > 0) { - uint8_t temp[4 * 8] = { 0 }; - memcpy(temp, y, length * sizeof(*temp)); - CALC_RGB8(temp, u, v, R, G, B); - STORE8_4(R, G, B, A, temp); - memcpy(dst, temp, length * 4 * sizeof(*dst)); - } -} - -static void YuvToBgraLine(const uint8_t* y, const uint8_t* u, - const uint8_t* v, uint8_t* dst, int length) { - v16u8 R, G, B; - const v16u8 A = (v16u8)__msa_ldi_b(ALPHAVAL); - while (length >= 16) { - CALC_RGB16(y, u, v, R, G, B); - STORE16_4(B, G, R, A, dst); - y += 16; - u += 16; - v += 16; - dst += 16 * 4; - length -= 16; - } - if (length > 8) { - uint8_t temp[4 * 16] = { 0 }; - memcpy(temp, y, length * sizeof(*temp)); - CALC_RGB16(temp, u, v, R, G, B); - STORE16_4(B, G, R, A, temp); - memcpy(dst, temp, length * 4 * sizeof(*dst)); - } else if (length > 0) { - uint8_t temp[4 * 8] = { 0 }; - memcpy(temp, y, length * sizeof(*temp)); - CALC_RGB8(temp, u, v, R, G, B); - STORE8_4(B, G, R, A, temp); - memcpy(dst, temp, length * 4 * sizeof(*dst)); - } -} - -#if !defined(WEBP_REDUCE_CSP) -static void YuvToArgbLine(const uint8_t* y, const uint8_t* u, - const uint8_t* v, uint8_t* dst, int length) { - v16u8 R, G, B; - const v16u8 A = (v16u8)__msa_ldi_b(ALPHAVAL); - while (length >= 16) { - CALC_RGB16(y, u, v, R, G, B); - STORE16_4(A, R, G, B, dst); - y += 16; - u += 16; - v += 16; - dst += 16 * 4; - length -= 16; - } - if (length > 8) { - uint8_t temp[4 * 16] = { 0 }; - memcpy(temp, y, length * sizeof(*temp)); - CALC_RGB16(temp, u, v, R, G, B); - STORE16_4(A, R, G, B, temp); - memcpy(dst, temp, length * 4 * sizeof(*dst)); - } else if (length > 0) { - uint8_t temp[4 * 8] = { 0 }; - memcpy(temp, y, length * sizeof(*temp)); - CALC_RGB8(temp, u, v, R, G, B); - STORE8_4(A, R, G, B, temp); - memcpy(dst, temp, length * 4 * sizeof(*dst)); - } -} - -static void YuvToRgba4444Line(const uint8_t* y, const uint8_t* u, - const uint8_t* v, uint8_t* dst, int length) { - v16u8 R, G, B, RG, BA, tmp0, tmp1; - while (length >= 16) { -#if (WEBP_SWAP_16BIT_CSP == 1) - CALC_RGBA4444(y, u, v, BA, RG, 16, dst); -#else - CALC_RGBA4444(y, u, v, RG, BA, 16, dst); -#endif - y += 16; - u += 16; - v += 16; - dst += 16 * 2; - length -= 16; - } - if (length > 8) { - uint8_t temp[2 * 16] = { 0 }; - memcpy(temp, y, length * sizeof(*temp)); -#if (WEBP_SWAP_16BIT_CSP == 1) - CALC_RGBA4444(temp, u, v, BA, RG, 16, temp); -#else - CALC_RGBA4444(temp, u, v, RG, BA, 16, temp); -#endif - memcpy(dst, temp, length * 2 * sizeof(*dst)); - } else if (length > 0) { - uint8_t temp[2 * 8] = { 0 }; - memcpy(temp, y, length * sizeof(*temp)); -#if (WEBP_SWAP_16BIT_CSP == 1) - CALC_RGBA4444(temp, u, v, BA, RG, 8, temp); -#else - CALC_RGBA4444(temp, u, v, RG, BA, 8, temp); -#endif - memcpy(dst, temp, length * 2 * sizeof(*dst)); - } -} - -static void YuvToRgb565Line(const uint8_t* y, const uint8_t* u, - const uint8_t* v, uint8_t* dst, int length) { - v16u8 R, G, B, RG, GB, tmp0, tmp1; - while (length >= 16) { -#if (WEBP_SWAP_16BIT_CSP == 1) - CALC_RGB565(y, u, v, GB, RG, 16, dst); -#else - CALC_RGB565(y, u, v, RG, GB, 16, dst); -#endif - y += 16; - u += 16; - v += 16; - dst += 16 * 2; - length -= 16; - } - if (length > 8) { - uint8_t temp[2 * 16] = { 0 }; - memcpy(temp, y, length * sizeof(*temp)); -#if (WEBP_SWAP_16BIT_CSP == 1) - CALC_RGB565(temp, u, v, GB, RG, 16, temp); -#else - CALC_RGB565(temp, u, v, RG, GB, 16, temp); -#endif - memcpy(dst, temp, length * 2 * sizeof(*dst)); - } else if (length > 0) { - uint8_t temp[2 * 8] = { 0 }; - memcpy(temp, y, length * sizeof(*temp)); -#if (WEBP_SWAP_16BIT_CSP == 1) - CALC_RGB565(temp, u, v, GB, RG, 8, temp); -#else - CALC_RGB565(temp, u, v, RG, GB, 8, temp); -#endif - memcpy(dst, temp, length * 2 * sizeof(*dst)); - } -} -#endif // WEBP_REDUCE_CSP - -#define UPSAMPLE_32PIXELS(a, b, c, d) do { \ - v16u8 s = __msa_aver_u_b(a, d); \ - v16u8 t = __msa_aver_u_b(b, c); \ - const v16u8 st = s ^ t; \ - v16u8 ad = a ^ d; \ - v16u8 bc = b ^ c; \ - v16u8 t0 = ad | bc; \ - v16u8 t1 = t0 | st; \ - v16u8 t2 = ANDI_B(t1, 1); \ - v16u8 t3 = __msa_aver_u_b(s, t); \ - const v16u8 k = t3 - t2; \ - v16u8 diag1, diag2; \ - AVER_UB2_UB(t, k, s, k, t0, t1); \ - bc = bc & st; \ - ad = ad & st; \ - t = t ^ k; \ - s = s ^ k; \ - t2 = bc | t; \ - t3 = ad | s; \ - t2 = ANDI_B(t2, 1); \ - t3 = ANDI_B(t3, 1); \ - SUB2(t0, t2, t1, t3, diag1, diag2); \ - AVER_UB2_UB(a, diag1, b, diag2, t0, t1); \ - ILVRL_B2_UB(t1, t0, a, b); \ - if (pbot_y != NULL) { \ - AVER_UB2_UB(c, diag2, d, diag1, t0, t1); \ - ILVRL_B2_UB(t1, t0, c, d); \ - } \ -} while (0) - -#define UPSAMPLE_FUNC(FUNC_NAME, FUNC, XSTEP) \ -static void FUNC_NAME(const uint8_t* top_y, const uint8_t* bot_y, \ - const uint8_t* top_u, const uint8_t* top_v, \ - const uint8_t* cur_u, const uint8_t* cur_v, \ - uint8_t* top_dst, uint8_t* bot_dst, int len) \ -{ \ - int size = (len - 1) >> 1; \ - uint8_t temp_u[64]; \ - uint8_t temp_v[64]; \ - const uint32_t tl_uv = ((top_u[0]) | ((top_v[0]) << 16)); \ - const uint32_t l_uv = ((cur_u[0]) | ((cur_v[0]) << 16)); \ - const uint32_t uv0 = (3 * tl_uv + l_uv + 0x00020002u) >> 2; \ - const uint8_t* ptop_y = &top_y[1]; \ - uint8_t* ptop_dst = top_dst + XSTEP; \ - const uint8_t* pbot_y = &bot_y[1]; \ - uint8_t* pbot_dst = bot_dst + XSTEP; \ - \ - FUNC(top_y[0], uv0 & 0xff, (uv0 >> 16), top_dst); \ - if (bot_y != NULL) { \ - const uint32_t uv1 = (3 * l_uv + tl_uv + 0x00020002u) >> 2; \ - FUNC(bot_y[0], uv1 & 0xff, (uv1 >> 16), bot_dst); \ - } \ - while (size >= 16) { \ - v16u8 tu0, tu1, tv0, tv1, cu0, cu1, cv0, cv1; \ - LD_UB2(top_u, 1, tu0, tu1); \ - LD_UB2(cur_u, 1, cu0, cu1); \ - LD_UB2(top_v, 1, tv0, tv1); \ - LD_UB2(cur_v, 1, cv0, cv1); \ - UPSAMPLE_32PIXELS(tu0, tu1, cu0, cu1); \ - UPSAMPLE_32PIXELS(tv0, tv1, cv0, cv1); \ - ST_UB4(tu0, tu1, cu0, cu1, &temp_u[0], 16); \ - ST_UB4(tv0, tv1, cv0, cv1, &temp_v[0], 16); \ - FUNC##Line(ptop_y, &temp_u[ 0], &temp_v[0], ptop_dst, 32); \ - if (bot_y != NULL) { \ - FUNC##Line(pbot_y, &temp_u[32], &temp_v[32], pbot_dst, 32); \ - } \ - ptop_y += 32; \ - pbot_y += 32; \ - ptop_dst += XSTEP * 32; \ - pbot_dst += XSTEP * 32; \ - top_u += 16; \ - top_v += 16; \ - cur_u += 16; \ - cur_v += 16; \ - size -= 16; \ - } \ - if (size > 0) { \ - v16u8 tu0, tu1, tv0, tv1, cu0, cu1, cv0, cv1; \ - memcpy(&temp_u[ 0], top_u, 17 * sizeof(uint8_t)); \ - memcpy(&temp_u[32], cur_u, 17 * sizeof(uint8_t)); \ - memcpy(&temp_v[ 0], top_v, 17 * sizeof(uint8_t)); \ - memcpy(&temp_v[32], cur_v, 17 * sizeof(uint8_t)); \ - LD_UB2(&temp_u[ 0], 1, tu0, tu1); \ - LD_UB2(&temp_u[32], 1, cu0, cu1); \ - LD_UB2(&temp_v[ 0], 1, tv0, tv1); \ - LD_UB2(&temp_v[32], 1, cv0, cv1); \ - UPSAMPLE_32PIXELS(tu0, tu1, cu0, cu1); \ - UPSAMPLE_32PIXELS(tv0, tv1, cv0, cv1); \ - ST_UB4(tu0, tu1, cu0, cu1, &temp_u[0], 16); \ - ST_UB4(tv0, tv1, cv0, cv1, &temp_v[0], 16); \ - FUNC##Line(ptop_y, &temp_u[ 0], &temp_v[0], ptop_dst, size * 2); \ - if (bot_y != NULL) { \ - FUNC##Line(pbot_y, &temp_u[32], &temp_v[32], pbot_dst, size * 2); \ - } \ - top_u += size; \ - top_v += size; \ - cur_u += size; \ - cur_v += size; \ - } \ - if (!(len & 1)) { \ - const uint32_t t0 = ((top_u[0]) | ((top_v[0]) << 16)); \ - const uint32_t c0 = ((cur_u[0]) | ((cur_v[0]) << 16)); \ - const uint32_t tmp0 = (3 * t0 + c0 + 0x00020002u) >> 2; \ - FUNC(top_y[len - 1], tmp0 & 0xff, (tmp0 >> 16), \ - top_dst + (len - 1) * XSTEP); \ - if (bot_y != NULL) { \ - const uint32_t tmp1 = (3 * c0 + t0 + 0x00020002u) >> 2; \ - FUNC(bot_y[len - 1], tmp1 & 0xff, (tmp1 >> 16), \ - bot_dst + (len - 1) * XSTEP); \ - } \ - } \ -} - -UPSAMPLE_FUNC(UpsampleRgbaLinePair, YuvToRgba, 4) -UPSAMPLE_FUNC(UpsampleBgraLinePair, YuvToBgra, 4) -#if !defined(WEBP_REDUCE_CSP) -UPSAMPLE_FUNC(UpsampleRgbLinePair, YuvToRgb, 3) -UPSAMPLE_FUNC(UpsampleBgrLinePair, YuvToBgr, 3) -UPSAMPLE_FUNC(UpsampleArgbLinePair, YuvToArgb, 4) -UPSAMPLE_FUNC(UpsampleRgba4444LinePair, YuvToRgba4444, 2) -UPSAMPLE_FUNC(UpsampleRgb565LinePair, YuvToRgb565, 2) -#endif // WEBP_REDUCE_CSP - -//------------------------------------------------------------------------------ -// Entry point - -extern WebPUpsampleLinePairFunc WebPUpsamplers[/* MODE_LAST */]; - -extern void WebPInitUpsamplersMSA(void); - -WEBP_TSAN_IGNORE_FUNCTION void WebPInitUpsamplersMSA(void) { - WebPUpsamplers[MODE_RGBA] = UpsampleRgbaLinePair; - WebPUpsamplers[MODE_BGRA] = UpsampleBgraLinePair; - WebPUpsamplers[MODE_rgbA] = UpsampleRgbaLinePair; - WebPUpsamplers[MODE_bgrA] = UpsampleBgraLinePair; -#if !defined(WEBP_REDUCE_CSP) - WebPUpsamplers[MODE_RGB] = UpsampleRgbLinePair; - WebPUpsamplers[MODE_BGR] = UpsampleBgrLinePair; - WebPUpsamplers[MODE_ARGB] = UpsampleArgbLinePair; - WebPUpsamplers[MODE_Argb] = UpsampleArgbLinePair; - WebPUpsamplers[MODE_RGB_565] = UpsampleRgb565LinePair; - WebPUpsamplers[MODE_RGBA_4444] = UpsampleRgba4444LinePair; - WebPUpsamplers[MODE_rgbA_4444] = UpsampleRgba4444LinePair; -#endif // WEBP_REDUCE_CSP -} - -#endif // FANCY_UPSAMPLING - -#endif // WEBP_USE_MSA - -#if !(defined(FANCY_UPSAMPLING) && defined(WEBP_USE_MSA)) -WEBP_DSP_INIT_STUB(WebPInitUpsamplersMSA) -#endif diff --git a/Extended/libwebp/src/dsp/upsampling_neon.c b/Extended/libwebp/src/dsp/upsampling_neon.c deleted file mode 100644 index 6ba71a7..0000000 --- a/Extended/libwebp/src/dsp/upsampling_neon.c +++ /dev/null @@ -1,285 +0,0 @@ -// Copyright 2011 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// NEON version of YUV to RGB upsampling functions. -// -// Author: mans@mansr.com (Mans Rullgard) -// Based on SSE code by: somnath@google.com (Somnath Banerjee) - -#include "src/dsp/dsp.h" - -#if defined(WEBP_USE_NEON) - -#include -#include -#include -#include "src/dsp/neon.h" -#include "src/dsp/yuv.h" - -#ifdef FANCY_UPSAMPLING - -//----------------------------------------------------------------------------- -// U/V upsampling - -// Loads 9 pixels each from rows r1 and r2 and generates 16 pixels. -#define UPSAMPLE_16PIXELS(r1, r2, out) do { \ - const uint8x8_t a = vld1_u8(r1 + 0); \ - const uint8x8_t b = vld1_u8(r1 + 1); \ - const uint8x8_t c = vld1_u8(r2 + 0); \ - const uint8x8_t d = vld1_u8(r2 + 1); \ - /* a + b + c + d */ \ - const uint16x8_t ad = vaddl_u8(a, d); \ - const uint16x8_t bc = vaddl_u8(b, c); \ - const uint16x8_t abcd = vaddq_u16(ad, bc); \ - /* 3a + b + c + 3d */ \ - const uint16x8_t al = vaddq_u16(abcd, vshlq_n_u16(ad, 1)); \ - /* a + 3b + 3c + d */ \ - const uint16x8_t bl = vaddq_u16(abcd, vshlq_n_u16(bc, 1)); \ - \ - const uint8x8_t diag2 = vshrn_n_u16(al, 3); \ - const uint8x8_t diag1 = vshrn_n_u16(bl, 3); \ - \ - const uint8x8_t A = vrhadd_u8(a, diag1); \ - const uint8x8_t B = vrhadd_u8(b, diag2); \ - const uint8x8_t C = vrhadd_u8(c, diag2); \ - const uint8x8_t D = vrhadd_u8(d, diag1); \ - \ - uint8x8x2_t A_B, C_D; \ - INIT_VECTOR2(A_B, A, B); \ - INIT_VECTOR2(C_D, C, D); \ - vst2_u8(out + 0, A_B); \ - vst2_u8(out + 32, C_D); \ -} while (0) - -// Turn the macro into a function for reducing code-size when non-critical -static void Upsample16Pixels_NEON(const uint8_t* r1, const uint8_t* r2, - uint8_t* out) { - UPSAMPLE_16PIXELS(r1, r2, out); -} - -#define UPSAMPLE_LAST_BLOCK(tb, bb, num_pixels, out) { \ - uint8_t r1[9], r2[9]; \ - memcpy(r1, (tb), (num_pixels)); \ - memcpy(r2, (bb), (num_pixels)); \ - /* replicate last byte */ \ - memset(r1 + (num_pixels), r1[(num_pixels) - 1], 9 - (num_pixels)); \ - memset(r2 + (num_pixels), r2[(num_pixels) - 1], 9 - (num_pixels)); \ - Upsample16Pixels_NEON(r1, r2, out); \ -} - -//----------------------------------------------------------------------------- -// YUV->RGB conversion - -// note: we represent the 33050 large constant as 32768 + 282 -static const int16_t kCoeffs1[4] = { 19077, 26149, 6419, 13320 }; - -#define v255 vdup_n_u8(255) - -#define STORE_Rgb(out, r, g, b) do { \ - uint8x8x3_t r_g_b; \ - INIT_VECTOR3(r_g_b, r, g, b); \ - vst3_u8(out, r_g_b); \ -} while (0) - -#define STORE_Bgr(out, r, g, b) do { \ - uint8x8x3_t b_g_r; \ - INIT_VECTOR3(b_g_r, b, g, r); \ - vst3_u8(out, b_g_r); \ -} while (0) - -#define STORE_Rgba(out, r, g, b) do { \ - uint8x8x4_t r_g_b_v255; \ - INIT_VECTOR4(r_g_b_v255, r, g, b, v255); \ - vst4_u8(out, r_g_b_v255); \ -} while (0) - -#define STORE_Bgra(out, r, g, b) do { \ - uint8x8x4_t b_g_r_v255; \ - INIT_VECTOR4(b_g_r_v255, b, g, r, v255); \ - vst4_u8(out, b_g_r_v255); \ -} while (0) - -#define STORE_Argb(out, r, g, b) do { \ - uint8x8x4_t v255_r_g_b; \ - INIT_VECTOR4(v255_r_g_b, v255, r, g, b); \ - vst4_u8(out, v255_r_g_b); \ -} while (0) - -#if !defined(WEBP_SWAP_16BIT_CSP) -#define ZIP_U8(lo, hi) vzip_u8((lo), (hi)) -#else -#define ZIP_U8(lo, hi) vzip_u8((hi), (lo)) -#endif - -#define STORE_Rgba4444(out, r, g, b) do { \ - const uint8x8_t rg = vsri_n_u8(r, g, 4); /* shift g, insert r */ \ - const uint8x8_t ba = vsri_n_u8(b, v255, 4); /* shift a, insert b */ \ - const uint8x8x2_t rgba4444 = ZIP_U8(rg, ba); \ - vst1q_u8(out, vcombine_u8(rgba4444.val[0], rgba4444.val[1])); \ -} while (0) - -#define STORE_Rgb565(out, r, g, b) do { \ - const uint8x8_t rg = vsri_n_u8(r, g, 5); /* shift g and insert r */ \ - const uint8x8_t g1 = vshl_n_u8(g, 3); /* pre-shift g: 3bits */ \ - const uint8x8_t gb = vsri_n_u8(g1, b, 3); /* shift b and insert g */ \ - const uint8x8x2_t rgb565 = ZIP_U8(rg, gb); \ - vst1q_u8(out, vcombine_u8(rgb565.val[0], rgb565.val[1])); \ -} while (0) - -#define CONVERT8(FMT, XSTEP, N, src_y, src_uv, out, cur_x) do { \ - int i; \ - for (i = 0; i < N; i += 8) { \ - const int off = ((cur_x) + i) * XSTEP; \ - const uint8x8_t y = vld1_u8((src_y) + (cur_x) + i); \ - const uint8x8_t u = vld1_u8((src_uv) + i + 0); \ - const uint8x8_t v = vld1_u8((src_uv) + i + 16); \ - const int16x8_t Y0 = vreinterpretq_s16_u16(vshll_n_u8(y, 7)); \ - const int16x8_t U0 = vreinterpretq_s16_u16(vshll_n_u8(u, 7)); \ - const int16x8_t V0 = vreinterpretq_s16_u16(vshll_n_u8(v, 7)); \ - const int16x8_t Y1 = vqdmulhq_lane_s16(Y0, coeff1, 0); \ - const int16x8_t R0 = vqdmulhq_lane_s16(V0, coeff1, 1); \ - const int16x8_t G0 = vqdmulhq_lane_s16(U0, coeff1, 2); \ - const int16x8_t G1 = vqdmulhq_lane_s16(V0, coeff1, 3); \ - const int16x8_t B0 = vqdmulhq_n_s16(U0, 282); \ - const int16x8_t R1 = vqaddq_s16(Y1, R_Rounder); \ - const int16x8_t G2 = vqaddq_s16(Y1, G_Rounder); \ - const int16x8_t B1 = vqaddq_s16(Y1, B_Rounder); \ - const int16x8_t R2 = vqaddq_s16(R0, R1); \ - const int16x8_t G3 = vqaddq_s16(G0, G1); \ - const int16x8_t B2 = vqaddq_s16(B0, B1); \ - const int16x8_t G4 = vqsubq_s16(G2, G3); \ - const int16x8_t B3 = vqaddq_s16(B2, U0); \ - const uint8x8_t R = vqshrun_n_s16(R2, YUV_FIX2); \ - const uint8x8_t G = vqshrun_n_s16(G4, YUV_FIX2); \ - const uint8x8_t B = vqshrun_n_s16(B3, YUV_FIX2); \ - STORE_ ## FMT(out + off, R, G, B); \ - } \ -} while (0) - -#define CONVERT1(FUNC, XSTEP, N, src_y, src_uv, rgb, cur_x) { \ - int i; \ - for (i = 0; i < N; i++) { \ - const int off = ((cur_x) + i) * XSTEP; \ - const int y = src_y[(cur_x) + i]; \ - const int u = (src_uv)[i]; \ - const int v = (src_uv)[i + 16]; \ - FUNC(y, u, v, rgb + off); \ - } \ -} - -#define CONVERT2RGB_8(FMT, XSTEP, top_y, bottom_y, uv, \ - top_dst, bottom_dst, cur_x, len) { \ - CONVERT8(FMT, XSTEP, len, top_y, uv, top_dst, cur_x); \ - if (bottom_y != NULL) { \ - CONVERT8(FMT, XSTEP, len, bottom_y, (uv) + 32, bottom_dst, cur_x); \ - } \ -} - -#define CONVERT2RGB_1(FUNC, XSTEP, top_y, bottom_y, uv, \ - top_dst, bottom_dst, cur_x, len) { \ - CONVERT1(FUNC, XSTEP, len, top_y, uv, top_dst, cur_x); \ - if (bottom_y != NULL) { \ - CONVERT1(FUNC, XSTEP, len, bottom_y, (uv) + 32, bottom_dst, cur_x); \ - } \ -} - -#define NEON_UPSAMPLE_FUNC(FUNC_NAME, FMT, XSTEP) \ -static void FUNC_NAME(const uint8_t* top_y, const uint8_t* bottom_y, \ - const uint8_t* top_u, const uint8_t* top_v, \ - const uint8_t* cur_u, const uint8_t* cur_v, \ - uint8_t* top_dst, uint8_t* bottom_dst, int len) { \ - int block; \ - /* 16 byte aligned array to cache reconstructed u and v */ \ - uint8_t uv_buf[2 * 32 + 15]; \ - uint8_t* const r_uv = (uint8_t*)((uintptr_t)(uv_buf + 15) & ~15); \ - const int uv_len = (len + 1) >> 1; \ - /* 9 pixels must be read-able for each block */ \ - const int num_blocks = (uv_len - 1) >> 3; \ - const int leftover = uv_len - num_blocks * 8; \ - const int last_pos = 1 + 16 * num_blocks; \ - \ - const int u_diag = ((top_u[0] + cur_u[0]) >> 1) + 1; \ - const int v_diag = ((top_v[0] + cur_v[0]) >> 1) + 1; \ - \ - const int16x4_t coeff1 = vld1_s16(kCoeffs1); \ - const int16x8_t R_Rounder = vdupq_n_s16(-14234); \ - const int16x8_t G_Rounder = vdupq_n_s16(8708); \ - const int16x8_t B_Rounder = vdupq_n_s16(-17685); \ - \ - /* Treat the first pixel in regular way */ \ - assert(top_y != NULL); \ - { \ - const int u0 = (top_u[0] + u_diag) >> 1; \ - const int v0 = (top_v[0] + v_diag) >> 1; \ - VP8YuvTo ## FMT(top_y[0], u0, v0, top_dst); \ - } \ - if (bottom_y != NULL) { \ - const int u0 = (cur_u[0] + u_diag) >> 1; \ - const int v0 = (cur_v[0] + v_diag) >> 1; \ - VP8YuvTo ## FMT(bottom_y[0], u0, v0, bottom_dst); \ - } \ - \ - for (block = 0; block < num_blocks; ++block) { \ - UPSAMPLE_16PIXELS(top_u, cur_u, r_uv); \ - UPSAMPLE_16PIXELS(top_v, cur_v, r_uv + 16); \ - CONVERT2RGB_8(FMT, XSTEP, top_y, bottom_y, r_uv, \ - top_dst, bottom_dst, 16 * block + 1, 16); \ - top_u += 8; \ - cur_u += 8; \ - top_v += 8; \ - cur_v += 8; \ - } \ - \ - UPSAMPLE_LAST_BLOCK(top_u, cur_u, leftover, r_uv); \ - UPSAMPLE_LAST_BLOCK(top_v, cur_v, leftover, r_uv + 16); \ - CONVERT2RGB_1(VP8YuvTo ## FMT, XSTEP, top_y, bottom_y, r_uv, \ - top_dst, bottom_dst, last_pos, len - last_pos); \ -} - -// NEON variants of the fancy upsampler. -NEON_UPSAMPLE_FUNC(UpsampleRgbaLinePair_NEON, Rgba, 4) -NEON_UPSAMPLE_FUNC(UpsampleBgraLinePair_NEON, Bgra, 4) -#if !defined(WEBP_REDUCE_CSP) -NEON_UPSAMPLE_FUNC(UpsampleRgbLinePair_NEON, Rgb, 3) -NEON_UPSAMPLE_FUNC(UpsampleBgrLinePair_NEON, Bgr, 3) -NEON_UPSAMPLE_FUNC(UpsampleArgbLinePair_NEON, Argb, 4) -NEON_UPSAMPLE_FUNC(UpsampleRgba4444LinePair_NEON, Rgba4444, 2) -NEON_UPSAMPLE_FUNC(UpsampleRgb565LinePair_NEON, Rgb565, 2) -#endif // WEBP_REDUCE_CSP - -//------------------------------------------------------------------------------ -// Entry point - -extern WebPUpsampleLinePairFunc WebPUpsamplers[/* MODE_LAST */]; - -extern void WebPInitUpsamplersNEON(void); - -WEBP_TSAN_IGNORE_FUNCTION void WebPInitUpsamplersNEON(void) { - WebPUpsamplers[MODE_RGBA] = UpsampleRgbaLinePair_NEON; - WebPUpsamplers[MODE_BGRA] = UpsampleBgraLinePair_NEON; - WebPUpsamplers[MODE_rgbA] = UpsampleRgbaLinePair_NEON; - WebPUpsamplers[MODE_bgrA] = UpsampleBgraLinePair_NEON; -#if !defined(WEBP_REDUCE_CSP) - WebPUpsamplers[MODE_RGB] = UpsampleRgbLinePair_NEON; - WebPUpsamplers[MODE_BGR] = UpsampleBgrLinePair_NEON; - WebPUpsamplers[MODE_ARGB] = UpsampleArgbLinePair_NEON; - WebPUpsamplers[MODE_Argb] = UpsampleArgbLinePair_NEON; - WebPUpsamplers[MODE_RGB_565] = UpsampleRgb565LinePair_NEON; - WebPUpsamplers[MODE_RGBA_4444] = UpsampleRgba4444LinePair_NEON; - WebPUpsamplers[MODE_rgbA_4444] = UpsampleRgba4444LinePair_NEON; -#endif // WEBP_REDUCE_CSP -} - -#endif // FANCY_UPSAMPLING - -#endif // WEBP_USE_NEON - -#if !(defined(FANCY_UPSAMPLING) && defined(WEBP_USE_NEON)) -WEBP_DSP_INIT_STUB(WebPInitUpsamplersNEON) -#endif diff --git a/Extended/libwebp/src/dsp/upsampling_sse2.c b/Extended/libwebp/src/dsp/upsampling_sse2.c deleted file mode 100644 index 340f1e2..0000000 --- a/Extended/libwebp/src/dsp/upsampling_sse2.c +++ /dev/null @@ -1,267 +0,0 @@ -// Copyright 2011 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// SSE2 version of YUV to RGB upsampling functions. -// -// Author: somnath@google.com (Somnath Banerjee) - -#include "src/dsp/dsp.h" - -#if defined(WEBP_USE_SSE2) - -#include -#include -#include -#include "src/dsp/yuv.h" - -#ifdef FANCY_UPSAMPLING - -// We compute (9*a + 3*b + 3*c + d + 8) / 16 as follows -// u = (9*a + 3*b + 3*c + d + 8) / 16 -// = (a + (a + 3*b + 3*c + d) / 8 + 1) / 2 -// = (a + m + 1) / 2 -// where m = (a + 3*b + 3*c + d) / 8 -// = ((a + b + c + d) / 2 + b + c) / 4 -// -// Let's say k = (a + b + c + d) / 4. -// We can compute k as -// k = (s + t + 1) / 2 - ((a^d) | (b^c) | (s^t)) & 1 -// where s = (a + d + 1) / 2 and t = (b + c + 1) / 2 -// -// Then m can be written as -// m = (k + t + 1) / 2 - (((b^c) & (s^t)) | (k^t)) & 1 - -// Computes out = (k + in + 1) / 2 - ((ij & (s^t)) | (k^in)) & 1 -#define GET_M(ij, in, out) do { \ - const __m128i tmp0 = _mm_avg_epu8(k, (in)); /* (k + in + 1) / 2 */ \ - const __m128i tmp1 = _mm_and_si128((ij), st); /* (ij) & (s^t) */ \ - const __m128i tmp2 = _mm_xor_si128(k, (in)); /* (k^in) */ \ - const __m128i tmp3 = _mm_or_si128(tmp1, tmp2); /* ((ij) & (s^t)) | (k^in) */\ - const __m128i tmp4 = _mm_and_si128(tmp3, one); /* & 1 -> lsb_correction */ \ - (out) = _mm_sub_epi8(tmp0, tmp4); /* (k + in + 1) / 2 - lsb_correction */ \ -} while (0) - -// pack and store two alternating pixel rows -#define PACK_AND_STORE(a, b, da, db, out) do { \ - const __m128i t_a = _mm_avg_epu8(a, da); /* (9a + 3b + 3c + d + 8) / 16 */ \ - const __m128i t_b = _mm_avg_epu8(b, db); /* (3a + 9b + c + 3d + 8) / 16 */ \ - const __m128i t_1 = _mm_unpacklo_epi8(t_a, t_b); \ - const __m128i t_2 = _mm_unpackhi_epi8(t_a, t_b); \ - _mm_store_si128(((__m128i*)(out)) + 0, t_1); \ - _mm_store_si128(((__m128i*)(out)) + 1, t_2); \ -} while (0) - -// Loads 17 pixels each from rows r1 and r2 and generates 32 pixels. -#define UPSAMPLE_32PIXELS(r1, r2, out) { \ - const __m128i one = _mm_set1_epi8(1); \ - const __m128i a = _mm_loadu_si128((const __m128i*)&(r1)[0]); \ - const __m128i b = _mm_loadu_si128((const __m128i*)&(r1)[1]); \ - const __m128i c = _mm_loadu_si128((const __m128i*)&(r2)[0]); \ - const __m128i d = _mm_loadu_si128((const __m128i*)&(r2)[1]); \ - \ - const __m128i s = _mm_avg_epu8(a, d); /* s = (a + d + 1) / 2 */ \ - const __m128i t = _mm_avg_epu8(b, c); /* t = (b + c + 1) / 2 */ \ - const __m128i st = _mm_xor_si128(s, t); /* st = s^t */ \ - \ - const __m128i ad = _mm_xor_si128(a, d); /* ad = a^d */ \ - const __m128i bc = _mm_xor_si128(b, c); /* bc = b^c */ \ - \ - const __m128i t1 = _mm_or_si128(ad, bc); /* (a^d) | (b^c) */ \ - const __m128i t2 = _mm_or_si128(t1, st); /* (a^d) | (b^c) | (s^t) */ \ - const __m128i t3 = _mm_and_si128(t2, one); /* (a^d) | (b^c) | (s^t) & 1 */ \ - const __m128i t4 = _mm_avg_epu8(s, t); \ - const __m128i k = _mm_sub_epi8(t4, t3); /* k = (a + b + c + d) / 4 */ \ - __m128i diag1, diag2; \ - \ - GET_M(bc, t, diag1); /* diag1 = (a + 3b + 3c + d) / 8 */ \ - GET_M(ad, s, diag2); /* diag2 = (3a + b + c + 3d) / 8 */ \ - \ - /* pack the alternate pixels */ \ - PACK_AND_STORE(a, b, diag1, diag2, (out) + 0); /* store top */ \ - PACK_AND_STORE(c, d, diag2, diag1, (out) + 2 * 32); /* store bottom */ \ -} - -// Turn the macro into a function for reducing code-size when non-critical -static void Upsample32Pixels_SSE2(const uint8_t r1[], const uint8_t r2[], - uint8_t* const out) { - UPSAMPLE_32PIXELS(r1, r2, out); -} - -#define UPSAMPLE_LAST_BLOCK(tb, bb, num_pixels, out) { \ - uint8_t r1[17], r2[17]; \ - memcpy(r1, (tb), (num_pixels)); \ - memcpy(r2, (bb), (num_pixels)); \ - /* replicate last byte */ \ - memset(r1 + (num_pixels), r1[(num_pixels) - 1], 17 - (num_pixels)); \ - memset(r2 + (num_pixels), r2[(num_pixels) - 1], 17 - (num_pixels)); \ - /* using the shared function instead of the macro saves ~3k code size */ \ - Upsample32Pixels_SSE2(r1, r2, out); \ -} - -#define CONVERT2RGB_32(FUNC, XSTEP, top_y, bottom_y, \ - top_dst, bottom_dst, cur_x) do { \ - FUNC##32_SSE2((top_y) + (cur_x), r_u, r_v, (top_dst) + (cur_x) * (XSTEP)); \ - if ((bottom_y) != NULL) { \ - FUNC##32_SSE2((bottom_y) + (cur_x), r_u + 64, r_v + 64, \ - (bottom_dst) + (cur_x) * (XSTEP)); \ - } \ -} while (0) - -#define SSE2_UPSAMPLE_FUNC(FUNC_NAME, FUNC, XSTEP) \ -static void FUNC_NAME(const uint8_t* top_y, const uint8_t* bottom_y, \ - const uint8_t* top_u, const uint8_t* top_v, \ - const uint8_t* cur_u, const uint8_t* cur_v, \ - uint8_t* top_dst, uint8_t* bottom_dst, int len) { \ - int uv_pos, pos; \ - /* 16byte-aligned array to cache reconstructed u and v */ \ - uint8_t uv_buf[14 * 32 + 15] = { 0 }; \ - uint8_t* const r_u = (uint8_t*)((uintptr_t)(uv_buf + 15) & ~15); \ - uint8_t* const r_v = r_u + 32; \ - \ - assert(top_y != NULL); \ - { /* Treat the first pixel in regular way */ \ - const int u_diag = ((top_u[0] + cur_u[0]) >> 1) + 1; \ - const int v_diag = ((top_v[0] + cur_v[0]) >> 1) + 1; \ - const int u0_t = (top_u[0] + u_diag) >> 1; \ - const int v0_t = (top_v[0] + v_diag) >> 1; \ - FUNC(top_y[0], u0_t, v0_t, top_dst); \ - if (bottom_y != NULL) { \ - const int u0_b = (cur_u[0] + u_diag) >> 1; \ - const int v0_b = (cur_v[0] + v_diag) >> 1; \ - FUNC(bottom_y[0], u0_b, v0_b, bottom_dst); \ - } \ - } \ - /* For UPSAMPLE_32PIXELS, 17 u/v values must be read-able for each block */ \ - for (pos = 1, uv_pos = 0; pos + 32 + 1 <= len; pos += 32, uv_pos += 16) { \ - UPSAMPLE_32PIXELS(top_u + uv_pos, cur_u + uv_pos, r_u); \ - UPSAMPLE_32PIXELS(top_v + uv_pos, cur_v + uv_pos, r_v); \ - CONVERT2RGB_32(FUNC, XSTEP, top_y, bottom_y, top_dst, bottom_dst, pos); \ - } \ - if (len > 1) { \ - const int left_over = ((len + 1) >> 1) - (pos >> 1); \ - uint8_t* const tmp_top_dst = r_u + 4 * 32; \ - uint8_t* const tmp_bottom_dst = tmp_top_dst + 4 * 32; \ - uint8_t* const tmp_top = tmp_bottom_dst + 4 * 32; \ - uint8_t* const tmp_bottom = (bottom_y == NULL) ? NULL : tmp_top + 32; \ - assert(left_over > 0); \ - UPSAMPLE_LAST_BLOCK(top_u + uv_pos, cur_u + uv_pos, left_over, r_u); \ - UPSAMPLE_LAST_BLOCK(top_v + uv_pos, cur_v + uv_pos, left_over, r_v); \ - memcpy(tmp_top, top_y + pos, len - pos); \ - if (bottom_y != NULL) memcpy(tmp_bottom, bottom_y + pos, len - pos); \ - CONVERT2RGB_32(FUNC, XSTEP, tmp_top, tmp_bottom, tmp_top_dst, \ - tmp_bottom_dst, 0); \ - memcpy(top_dst + pos * (XSTEP), tmp_top_dst, (len - pos) * (XSTEP)); \ - if (bottom_y != NULL) { \ - memcpy(bottom_dst + pos * (XSTEP), tmp_bottom_dst, \ - (len - pos) * (XSTEP)); \ - } \ - } \ -} - -// SSE2 variants of the fancy upsampler. -SSE2_UPSAMPLE_FUNC(UpsampleRgbaLinePair_SSE2, VP8YuvToRgba, 4) -SSE2_UPSAMPLE_FUNC(UpsampleBgraLinePair_SSE2, VP8YuvToBgra, 4) - -#if !defined(WEBP_REDUCE_CSP) -SSE2_UPSAMPLE_FUNC(UpsampleRgbLinePair_SSE2, VP8YuvToRgb, 3) -SSE2_UPSAMPLE_FUNC(UpsampleBgrLinePair_SSE2, VP8YuvToBgr, 3) -SSE2_UPSAMPLE_FUNC(UpsampleArgbLinePair_SSE2, VP8YuvToArgb, 4) -SSE2_UPSAMPLE_FUNC(UpsampleRgba4444LinePair_SSE2, VP8YuvToRgba4444, 2) -SSE2_UPSAMPLE_FUNC(UpsampleRgb565LinePair_SSE2, VP8YuvToRgb565, 2) -#endif // WEBP_REDUCE_CSP - -#undef GET_M -#undef PACK_AND_STORE -#undef UPSAMPLE_32PIXELS -#undef UPSAMPLE_LAST_BLOCK -#undef CONVERT2RGB -#undef CONVERT2RGB_32 -#undef SSE2_UPSAMPLE_FUNC - -//------------------------------------------------------------------------------ -// Entry point - -extern WebPUpsampleLinePairFunc WebPUpsamplers[/* MODE_LAST */]; - -extern void WebPInitUpsamplersSSE2(void); - -WEBP_TSAN_IGNORE_FUNCTION void WebPInitUpsamplersSSE2(void) { - WebPUpsamplers[MODE_RGBA] = UpsampleRgbaLinePair_SSE2; - WebPUpsamplers[MODE_BGRA] = UpsampleBgraLinePair_SSE2; - WebPUpsamplers[MODE_rgbA] = UpsampleRgbaLinePair_SSE2; - WebPUpsamplers[MODE_bgrA] = UpsampleBgraLinePair_SSE2; -#if !defined(WEBP_REDUCE_CSP) - WebPUpsamplers[MODE_RGB] = UpsampleRgbLinePair_SSE2; - WebPUpsamplers[MODE_BGR] = UpsampleBgrLinePair_SSE2; - WebPUpsamplers[MODE_ARGB] = UpsampleArgbLinePair_SSE2; - WebPUpsamplers[MODE_Argb] = UpsampleArgbLinePair_SSE2; - WebPUpsamplers[MODE_RGB_565] = UpsampleRgb565LinePair_SSE2; - WebPUpsamplers[MODE_RGBA_4444] = UpsampleRgba4444LinePair_SSE2; - WebPUpsamplers[MODE_rgbA_4444] = UpsampleRgba4444LinePair_SSE2; -#endif // WEBP_REDUCE_CSP -} - -#endif // FANCY_UPSAMPLING - -//------------------------------------------------------------------------------ - -extern WebPYUV444Converter WebPYUV444Converters[/* MODE_LAST */]; -extern void WebPInitYUV444ConvertersSSE2(void); - -#define YUV444_FUNC(FUNC_NAME, CALL, CALL_C, XSTEP) \ -extern void CALL_C(const uint8_t* y, const uint8_t* u, const uint8_t* v, \ - uint8_t* dst, int len); \ -static void FUNC_NAME(const uint8_t* y, const uint8_t* u, const uint8_t* v, \ - uint8_t* dst, int len) { \ - int i; \ - const int max_len = len & ~31; \ - for (i = 0; i < max_len; i += 32) { \ - CALL(y + i, u + i, v + i, dst + i * (XSTEP)); \ - } \ - if (i < len) { /* C-fallback */ \ - CALL_C(y + i, u + i, v + i, dst + i * (XSTEP), len - i); \ - } \ -} - -YUV444_FUNC(Yuv444ToRgba_SSE2, VP8YuvToRgba32_SSE2, WebPYuv444ToRgba_C, 4); -YUV444_FUNC(Yuv444ToBgra_SSE2, VP8YuvToBgra32_SSE2, WebPYuv444ToBgra_C, 4); -#if !defined(WEBP_REDUCE_CSP) -YUV444_FUNC(Yuv444ToRgb_SSE2, VP8YuvToRgb32_SSE2, WebPYuv444ToRgb_C, 3); -YUV444_FUNC(Yuv444ToBgr_SSE2, VP8YuvToBgr32_SSE2, WebPYuv444ToBgr_C, 3); -YUV444_FUNC(Yuv444ToArgb_SSE2, VP8YuvToArgb32_SSE2, WebPYuv444ToArgb_C, 4) -YUV444_FUNC(Yuv444ToRgba4444_SSE2, VP8YuvToRgba444432_SSE2, \ - WebPYuv444ToRgba4444_C, 2) -YUV444_FUNC(Yuv444ToRgb565_SSE2, VP8YuvToRgb56532_SSE2, WebPYuv444ToRgb565_C, 2) -#endif // WEBP_REDUCE_CSP - -WEBP_TSAN_IGNORE_FUNCTION void WebPInitYUV444ConvertersSSE2(void) { - WebPYUV444Converters[MODE_RGBA] = Yuv444ToRgba_SSE2; - WebPYUV444Converters[MODE_BGRA] = Yuv444ToBgra_SSE2; - WebPYUV444Converters[MODE_rgbA] = Yuv444ToRgba_SSE2; - WebPYUV444Converters[MODE_bgrA] = Yuv444ToBgra_SSE2; -#if !defined(WEBP_REDUCE_CSP) - WebPYUV444Converters[MODE_RGB] = Yuv444ToRgb_SSE2; - WebPYUV444Converters[MODE_BGR] = Yuv444ToBgr_SSE2; - WebPYUV444Converters[MODE_ARGB] = Yuv444ToArgb_SSE2; - WebPYUV444Converters[MODE_RGBA_4444] = Yuv444ToRgba4444_SSE2; - WebPYUV444Converters[MODE_RGB_565] = Yuv444ToRgb565_SSE2; - WebPYUV444Converters[MODE_Argb] = Yuv444ToArgb_SSE2; - WebPYUV444Converters[MODE_rgbA_4444] = Yuv444ToRgba4444_SSE2; -#endif // WEBP_REDUCE_CSP -} - -#else - -WEBP_DSP_INIT_STUB(WebPInitYUV444ConvertersSSE2) - -#endif // WEBP_USE_SSE2 - -#if !(defined(FANCY_UPSAMPLING) && defined(WEBP_USE_SSE2)) -WEBP_DSP_INIT_STUB(WebPInitUpsamplersSSE2) -#endif diff --git a/Extended/libwebp/src/dsp/upsampling_sse41.c b/Extended/libwebp/src/dsp/upsampling_sse41.c deleted file mode 100644 index 648d456..0000000 --- a/Extended/libwebp/src/dsp/upsampling_sse41.c +++ /dev/null @@ -1,239 +0,0 @@ -// Copyright 2011 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// SSE41 version of YUV to RGB upsampling functions. -// -// Author: somnath@google.com (Somnath Banerjee) - -#include "src/dsp/dsp.h" - -#if defined(WEBP_USE_SSE41) - -#include -#include -#include -#include "src/dsp/yuv.h" - -#ifdef FANCY_UPSAMPLING - -#if !defined(WEBP_REDUCE_CSP) - -// We compute (9*a + 3*b + 3*c + d + 8) / 16 as follows -// u = (9*a + 3*b + 3*c + d + 8) / 16 -// = (a + (a + 3*b + 3*c + d) / 8 + 1) / 2 -// = (a + m + 1) / 2 -// where m = (a + 3*b + 3*c + d) / 8 -// = ((a + b + c + d) / 2 + b + c) / 4 -// -// Let's say k = (a + b + c + d) / 4. -// We can compute k as -// k = (s + t + 1) / 2 - ((a^d) | (b^c) | (s^t)) & 1 -// where s = (a + d + 1) / 2 and t = (b + c + 1) / 2 -// -// Then m can be written as -// m = (k + t + 1) / 2 - (((b^c) & (s^t)) | (k^t)) & 1 - -// Computes out = (k + in + 1) / 2 - ((ij & (s^t)) | (k^in)) & 1 -#define GET_M(ij, in, out) do { \ - const __m128i tmp0 = _mm_avg_epu8(k, (in)); /* (k + in + 1) / 2 */ \ - const __m128i tmp1 = _mm_and_si128((ij), st); /* (ij) & (s^t) */ \ - const __m128i tmp2 = _mm_xor_si128(k, (in)); /* (k^in) */ \ - const __m128i tmp3 = _mm_or_si128(tmp1, tmp2); /* ((ij) & (s^t)) | (k^in) */\ - const __m128i tmp4 = _mm_and_si128(tmp3, one); /* & 1 -> lsb_correction */ \ - (out) = _mm_sub_epi8(tmp0, tmp4); /* (k + in + 1) / 2 - lsb_correction */ \ -} while (0) - -// pack and store two alternating pixel rows -#define PACK_AND_STORE(a, b, da, db, out) do { \ - const __m128i t_a = _mm_avg_epu8(a, da); /* (9a + 3b + 3c + d + 8) / 16 */ \ - const __m128i t_b = _mm_avg_epu8(b, db); /* (3a + 9b + c + 3d + 8) / 16 */ \ - const __m128i t_1 = _mm_unpacklo_epi8(t_a, t_b); \ - const __m128i t_2 = _mm_unpackhi_epi8(t_a, t_b); \ - _mm_store_si128(((__m128i*)(out)) + 0, t_1); \ - _mm_store_si128(((__m128i*)(out)) + 1, t_2); \ -} while (0) - -// Loads 17 pixels each from rows r1 and r2 and generates 32 pixels. -#define UPSAMPLE_32PIXELS(r1, r2, out) { \ - const __m128i one = _mm_set1_epi8(1); \ - const __m128i a = _mm_loadu_si128((const __m128i*)&(r1)[0]); \ - const __m128i b = _mm_loadu_si128((const __m128i*)&(r1)[1]); \ - const __m128i c = _mm_loadu_si128((const __m128i*)&(r2)[0]); \ - const __m128i d = _mm_loadu_si128((const __m128i*)&(r2)[1]); \ - \ - const __m128i s = _mm_avg_epu8(a, d); /* s = (a + d + 1) / 2 */ \ - const __m128i t = _mm_avg_epu8(b, c); /* t = (b + c + 1) / 2 */ \ - const __m128i st = _mm_xor_si128(s, t); /* st = s^t */ \ - \ - const __m128i ad = _mm_xor_si128(a, d); /* ad = a^d */ \ - const __m128i bc = _mm_xor_si128(b, c); /* bc = b^c */ \ - \ - const __m128i t1 = _mm_or_si128(ad, bc); /* (a^d) | (b^c) */ \ - const __m128i t2 = _mm_or_si128(t1, st); /* (a^d) | (b^c) | (s^t) */ \ - const __m128i t3 = _mm_and_si128(t2, one); /* (a^d) | (b^c) | (s^t) & 1 */ \ - const __m128i t4 = _mm_avg_epu8(s, t); \ - const __m128i k = _mm_sub_epi8(t4, t3); /* k = (a + b + c + d) / 4 */ \ - __m128i diag1, diag2; \ - \ - GET_M(bc, t, diag1); /* diag1 = (a + 3b + 3c + d) / 8 */ \ - GET_M(ad, s, diag2); /* diag2 = (3a + b + c + 3d) / 8 */ \ - \ - /* pack the alternate pixels */ \ - PACK_AND_STORE(a, b, diag1, diag2, (out) + 0); /* store top */ \ - PACK_AND_STORE(c, d, diag2, diag1, (out) + 2 * 32); /* store bottom */ \ -} - -// Turn the macro into a function for reducing code-size when non-critical -static void Upsample32Pixels_SSE41(const uint8_t r1[], const uint8_t r2[], - uint8_t* const out) { - UPSAMPLE_32PIXELS(r1, r2, out); -} - -#define UPSAMPLE_LAST_BLOCK(tb, bb, num_pixels, out) { \ - uint8_t r1[17], r2[17]; \ - memcpy(r1, (tb), (num_pixels)); \ - memcpy(r2, (bb), (num_pixels)); \ - /* replicate last byte */ \ - memset(r1 + (num_pixels), r1[(num_pixels) - 1], 17 - (num_pixels)); \ - memset(r2 + (num_pixels), r2[(num_pixels) - 1], 17 - (num_pixels)); \ - /* using the shared function instead of the macro saves ~3k code size */ \ - Upsample32Pixels_SSE41(r1, r2, out); \ -} - -#define CONVERT2RGB_32(FUNC, XSTEP, top_y, bottom_y, \ - top_dst, bottom_dst, cur_x) do { \ - FUNC##32_SSE41((top_y) + (cur_x), r_u, r_v, (top_dst) + (cur_x) * (XSTEP)); \ - if ((bottom_y) != NULL) { \ - FUNC##32_SSE41((bottom_y) + (cur_x), r_u + 64, r_v + 64, \ - (bottom_dst) + (cur_x) * (XSTEP)); \ - } \ -} while (0) - -#define SSE4_UPSAMPLE_FUNC(FUNC_NAME, FUNC, XSTEP) \ -static void FUNC_NAME(const uint8_t* top_y, const uint8_t* bottom_y, \ - const uint8_t* top_u, const uint8_t* top_v, \ - const uint8_t* cur_u, const uint8_t* cur_v, \ - uint8_t* top_dst, uint8_t* bottom_dst, int len) { \ - int uv_pos, pos; \ - /* 16byte-aligned array to cache reconstructed u and v */ \ - uint8_t uv_buf[14 * 32 + 15] = { 0 }; \ - uint8_t* const r_u = (uint8_t*)((uintptr_t)(uv_buf + 15) & ~15); \ - uint8_t* const r_v = r_u + 32; \ - \ - assert(top_y != NULL); \ - { /* Treat the first pixel in regular way */ \ - const int u_diag = ((top_u[0] + cur_u[0]) >> 1) + 1; \ - const int v_diag = ((top_v[0] + cur_v[0]) >> 1) + 1; \ - const int u0_t = (top_u[0] + u_diag) >> 1; \ - const int v0_t = (top_v[0] + v_diag) >> 1; \ - FUNC(top_y[0], u0_t, v0_t, top_dst); \ - if (bottom_y != NULL) { \ - const int u0_b = (cur_u[0] + u_diag) >> 1; \ - const int v0_b = (cur_v[0] + v_diag) >> 1; \ - FUNC(bottom_y[0], u0_b, v0_b, bottom_dst); \ - } \ - } \ - /* For UPSAMPLE_32PIXELS, 17 u/v values must be read-able for each block */ \ - for (pos = 1, uv_pos = 0; pos + 32 + 1 <= len; pos += 32, uv_pos += 16) { \ - UPSAMPLE_32PIXELS(top_u + uv_pos, cur_u + uv_pos, r_u); \ - UPSAMPLE_32PIXELS(top_v + uv_pos, cur_v + uv_pos, r_v); \ - CONVERT2RGB_32(FUNC, XSTEP, top_y, bottom_y, top_dst, bottom_dst, pos); \ - } \ - if (len > 1) { \ - const int left_over = ((len + 1) >> 1) - (pos >> 1); \ - uint8_t* const tmp_top_dst = r_u + 4 * 32; \ - uint8_t* const tmp_bottom_dst = tmp_top_dst + 4 * 32; \ - uint8_t* const tmp_top = tmp_bottom_dst + 4 * 32; \ - uint8_t* const tmp_bottom = (bottom_y == NULL) ? NULL : tmp_top + 32; \ - assert(left_over > 0); \ - UPSAMPLE_LAST_BLOCK(top_u + uv_pos, cur_u + uv_pos, left_over, r_u); \ - UPSAMPLE_LAST_BLOCK(top_v + uv_pos, cur_v + uv_pos, left_over, r_v); \ - memcpy(tmp_top, top_y + pos, len - pos); \ - if (bottom_y != NULL) memcpy(tmp_bottom, bottom_y + pos, len - pos); \ - CONVERT2RGB_32(FUNC, XSTEP, tmp_top, tmp_bottom, tmp_top_dst, \ - tmp_bottom_dst, 0); \ - memcpy(top_dst + pos * (XSTEP), tmp_top_dst, (len - pos) * (XSTEP)); \ - if (bottom_y != NULL) { \ - memcpy(bottom_dst + pos * (XSTEP), tmp_bottom_dst, \ - (len - pos) * (XSTEP)); \ - } \ - } \ -} - -// SSE4 variants of the fancy upsampler. -SSE4_UPSAMPLE_FUNC(UpsampleRgbLinePair_SSE41, VP8YuvToRgb, 3) -SSE4_UPSAMPLE_FUNC(UpsampleBgrLinePair_SSE41, VP8YuvToBgr, 3) - -#undef GET_M -#undef PACK_AND_STORE -#undef UPSAMPLE_32PIXELS -#undef UPSAMPLE_LAST_BLOCK -#undef CONVERT2RGB -#undef CONVERT2RGB_32 -#undef SSE4_UPSAMPLE_FUNC - -#endif // WEBP_REDUCE_CSP - -//------------------------------------------------------------------------------ -// Entry point - -extern WebPUpsampleLinePairFunc WebPUpsamplers[/* MODE_LAST */]; - -extern void WebPInitUpsamplersSSE41(void); - -WEBP_TSAN_IGNORE_FUNCTION void WebPInitUpsamplersSSE41(void) { -#if !defined(WEBP_REDUCE_CSP) - WebPUpsamplers[MODE_RGB] = UpsampleRgbLinePair_SSE41; - WebPUpsamplers[MODE_BGR] = UpsampleBgrLinePair_SSE41; -#endif // WEBP_REDUCE_CSP -} - -#endif // FANCY_UPSAMPLING - -//------------------------------------------------------------------------------ - -extern WebPYUV444Converter WebPYUV444Converters[/* MODE_LAST */]; -extern void WebPInitYUV444ConvertersSSE41(void); - -#define YUV444_FUNC(FUNC_NAME, CALL, CALL_C, XSTEP) \ -extern void CALL_C(const uint8_t* y, const uint8_t* u, const uint8_t* v, \ - uint8_t* dst, int len); \ -static void FUNC_NAME(const uint8_t* y, const uint8_t* u, const uint8_t* v, \ - uint8_t* dst, int len) { \ - int i; \ - const int max_len = len & ~31; \ - for (i = 0; i < max_len; i += 32) { \ - CALL(y + i, u + i, v + i, dst + i * (XSTEP)); \ - } \ - if (i < len) { /* C-fallback */ \ - CALL_C(y + i, u + i, v + i, dst + i * (XSTEP), len - i); \ - } \ -} - -#if !defined(WEBP_REDUCE_CSP) -YUV444_FUNC(Yuv444ToRgb_SSE41, VP8YuvToRgb32_SSE41, WebPYuv444ToRgb_C, 3); -YUV444_FUNC(Yuv444ToBgr_SSE41, VP8YuvToBgr32_SSE41, WebPYuv444ToBgr_C, 3); -#endif // WEBP_REDUCE_CSP - -WEBP_TSAN_IGNORE_FUNCTION void WebPInitYUV444ConvertersSSE41(void) { -#if !defined(WEBP_REDUCE_CSP) - WebPYUV444Converters[MODE_RGB] = Yuv444ToRgb_SSE41; - WebPYUV444Converters[MODE_BGR] = Yuv444ToBgr_SSE41; -#endif // WEBP_REDUCE_CSP -} - -#else - -WEBP_DSP_INIT_STUB(WebPInitYUV444ConvertersSSE41) - -#endif // WEBP_USE_SSE41 - -#if !(defined(FANCY_UPSAMPLING) && defined(WEBP_USE_SSE41)) -WEBP_DSP_INIT_STUB(WebPInitUpsamplersSSE41) -#endif diff --git a/Extended/libwebp/src/dsp/yuv.c b/Extended/libwebp/src/dsp/yuv.c deleted file mode 100644 index 14e67fc..0000000 --- a/Extended/libwebp/src/dsp/yuv.c +++ /dev/null @@ -1,308 +0,0 @@ -// Copyright 2010 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// YUV->RGB conversion functions -// -// Author: Skal (pascal.massimino@gmail.com) - -#include "src/dsp/yuv.h" - -#include -#include - -//----------------------------------------------------------------------------- -// Plain-C version - -#define ROW_FUNC(FUNC_NAME, FUNC, XSTEP) \ -static void FUNC_NAME(const uint8_t* y, \ - const uint8_t* u, const uint8_t* v, \ - uint8_t* dst, int len) { \ - const uint8_t* const end = dst + (len & ~1) * (XSTEP); \ - while (dst != end) { \ - FUNC(y[0], u[0], v[0], dst); \ - FUNC(y[1], u[0], v[0], dst + (XSTEP)); \ - y += 2; \ - ++u; \ - ++v; \ - dst += 2 * (XSTEP); \ - } \ - if (len & 1) { \ - FUNC(y[0], u[0], v[0], dst); \ - } \ -} \ - -// All variants implemented. -ROW_FUNC(YuvToRgbRow, VP8YuvToRgb, 3) -ROW_FUNC(YuvToBgrRow, VP8YuvToBgr, 3) -ROW_FUNC(YuvToRgbaRow, VP8YuvToRgba, 4) -ROW_FUNC(YuvToBgraRow, VP8YuvToBgra, 4) -ROW_FUNC(YuvToArgbRow, VP8YuvToArgb, 4) -ROW_FUNC(YuvToRgba4444Row, VP8YuvToRgba4444, 2) -ROW_FUNC(YuvToRgb565Row, VP8YuvToRgb565, 2) - -#undef ROW_FUNC - -// Main call for processing a plane with a WebPSamplerRowFunc function: -void WebPSamplerProcessPlane(const uint8_t* y, int y_stride, - const uint8_t* u, const uint8_t* v, int uv_stride, - uint8_t* dst, int dst_stride, - int width, int height, WebPSamplerRowFunc func) { - int j; - for (j = 0; j < height; ++j) { - func(y, u, v, dst, width); - y += y_stride; - if (j & 1) { - u += uv_stride; - v += uv_stride; - } - dst += dst_stride; - } -} - -//----------------------------------------------------------------------------- -// Main call - -WebPSamplerRowFunc WebPSamplers[MODE_LAST]; - -extern void WebPInitSamplersSSE2(void); -extern void WebPInitSamplersSSE41(void); -extern void WebPInitSamplersMIPS32(void); -extern void WebPInitSamplersMIPSdspR2(void); - -WEBP_DSP_INIT_FUNC(WebPInitSamplers) { - WebPSamplers[MODE_RGB] = YuvToRgbRow; - WebPSamplers[MODE_RGBA] = YuvToRgbaRow; - WebPSamplers[MODE_BGR] = YuvToBgrRow; - WebPSamplers[MODE_BGRA] = YuvToBgraRow; - WebPSamplers[MODE_ARGB] = YuvToArgbRow; - WebPSamplers[MODE_RGBA_4444] = YuvToRgba4444Row; - WebPSamplers[MODE_RGB_565] = YuvToRgb565Row; - WebPSamplers[MODE_rgbA] = YuvToRgbaRow; - WebPSamplers[MODE_bgrA] = YuvToBgraRow; - WebPSamplers[MODE_Argb] = YuvToArgbRow; - WebPSamplers[MODE_rgbA_4444] = YuvToRgba4444Row; - - // If defined, use CPUInfo() to overwrite some pointers with faster versions. - if (VP8GetCPUInfo != NULL) { -#if defined(WEBP_USE_SSE2) - if (VP8GetCPUInfo(kSSE2)) { - WebPInitSamplersSSE2(); - } -#endif // WEBP_USE_SSE2 -#if defined(WEBP_USE_SSE41) - if (VP8GetCPUInfo(kSSE4_1)) { - WebPInitSamplersSSE41(); - } -#endif // WEBP_USE_SSE41 -#if defined(WEBP_USE_MIPS32) - if (VP8GetCPUInfo(kMIPS32)) { - WebPInitSamplersMIPS32(); - } -#endif // WEBP_USE_MIPS32 -#if defined(WEBP_USE_MIPS_DSP_R2) - if (VP8GetCPUInfo(kMIPSdspR2)) { - WebPInitSamplersMIPSdspR2(); - } -#endif // WEBP_USE_MIPS_DSP_R2 - } -} - -//----------------------------------------------------------------------------- -// ARGB -> YUV converters - -static void ConvertARGBToY_C(const uint32_t* argb, uint8_t* y, int width) { - int i; - for (i = 0; i < width; ++i) { - const uint32_t p = argb[i]; - y[i] = VP8RGBToY((p >> 16) & 0xff, (p >> 8) & 0xff, (p >> 0) & 0xff, - YUV_HALF); - } -} - -void WebPConvertARGBToUV_C(const uint32_t* argb, uint8_t* u, uint8_t* v, - int src_width, int do_store) { - // No rounding. Last pixel is dealt with separately. - const int uv_width = src_width >> 1; - int i; - for (i = 0; i < uv_width; ++i) { - const uint32_t v0 = argb[2 * i + 0]; - const uint32_t v1 = argb[2 * i + 1]; - // VP8RGBToU/V expects four accumulated pixels. Hence we need to - // scale r/g/b value by a factor 2. We just shift v0/v1 one bit less. - const int r = ((v0 >> 15) & 0x1fe) + ((v1 >> 15) & 0x1fe); - const int g = ((v0 >> 7) & 0x1fe) + ((v1 >> 7) & 0x1fe); - const int b = ((v0 << 1) & 0x1fe) + ((v1 << 1) & 0x1fe); - const int tmp_u = VP8RGBToU(r, g, b, YUV_HALF << 2); - const int tmp_v = VP8RGBToV(r, g, b, YUV_HALF << 2); - if (do_store) { - u[i] = tmp_u; - v[i] = tmp_v; - } else { - // Approximated average-of-four. But it's an acceptable diff. - u[i] = (u[i] + tmp_u + 1) >> 1; - v[i] = (v[i] + tmp_v + 1) >> 1; - } - } - if (src_width & 1) { // last pixel - const uint32_t v0 = argb[2 * i + 0]; - const int r = (v0 >> 14) & 0x3fc; - const int g = (v0 >> 6) & 0x3fc; - const int b = (v0 << 2) & 0x3fc; - const int tmp_u = VP8RGBToU(r, g, b, YUV_HALF << 2); - const int tmp_v = VP8RGBToV(r, g, b, YUV_HALF << 2); - if (do_store) { - u[i] = tmp_u; - v[i] = tmp_v; - } else { - u[i] = (u[i] + tmp_u + 1) >> 1; - v[i] = (v[i] + tmp_v + 1) >> 1; - } - } -} - -//----------------------------------------------------------------------------- - -static void ConvertRGB24ToY_C(const uint8_t* rgb, uint8_t* y, int width) { - int i; - for (i = 0; i < width; ++i, rgb += 3) { - y[i] = VP8RGBToY(rgb[0], rgb[1], rgb[2], YUV_HALF); - } -} - -static void ConvertBGR24ToY_C(const uint8_t* bgr, uint8_t* y, int width) { - int i; - for (i = 0; i < width; ++i, bgr += 3) { - y[i] = VP8RGBToY(bgr[2], bgr[1], bgr[0], YUV_HALF); - } -} - -void WebPConvertRGBA32ToUV_C(const uint16_t* rgb, - uint8_t* u, uint8_t* v, int width) { - int i; - for (i = 0; i < width; i += 1, rgb += 4) { - const int r = rgb[0], g = rgb[1], b = rgb[2]; - u[i] = VP8RGBToU(r, g, b, YUV_HALF << 2); - v[i] = VP8RGBToV(r, g, b, YUV_HALF << 2); - } -} - -//----------------------------------------------------------------------------- - -#if !WEBP_NEON_OMIT_C_CODE -#define MAX_Y ((1 << 10) - 1) // 10b precision over 16b-arithmetic -static uint16_t clip_y(int v) { - return (v < 0) ? 0 : (v > MAX_Y) ? MAX_Y : (uint16_t)v; -} - -static uint64_t SharpYUVUpdateY_C(const uint16_t* ref, const uint16_t* src, - uint16_t* dst, int len) { - uint64_t diff = 0; - int i; - for (i = 0; i < len; ++i) { - const int diff_y = ref[i] - src[i]; - const int new_y = (int)dst[i] + diff_y; - dst[i] = clip_y(new_y); - diff += (uint64_t)abs(diff_y); - } - return diff; -} - -static void SharpYUVUpdateRGB_C(const int16_t* ref, const int16_t* src, - int16_t* dst, int len) { - int i; - for (i = 0; i < len; ++i) { - const int diff_uv = ref[i] - src[i]; - dst[i] += diff_uv; - } -} - -static void SharpYUVFilterRow_C(const int16_t* A, const int16_t* B, int len, - const uint16_t* best_y, uint16_t* out) { - int i; - for (i = 0; i < len; ++i, ++A, ++B) { - const int v0 = (A[0] * 9 + A[1] * 3 + B[0] * 3 + B[1] + 8) >> 4; - const int v1 = (A[1] * 9 + A[0] * 3 + B[1] * 3 + B[0] + 8) >> 4; - out[2 * i + 0] = clip_y(best_y[2 * i + 0] + v0); - out[2 * i + 1] = clip_y(best_y[2 * i + 1] + v1); - } -} -#endif // !WEBP_NEON_OMIT_C_CODE - -#undef MAX_Y - -//----------------------------------------------------------------------------- - -void (*WebPConvertRGB24ToY)(const uint8_t* rgb, uint8_t* y, int width); -void (*WebPConvertBGR24ToY)(const uint8_t* bgr, uint8_t* y, int width); -void (*WebPConvertRGBA32ToUV)(const uint16_t* rgb, - uint8_t* u, uint8_t* v, int width); - -void (*WebPConvertARGBToY)(const uint32_t* argb, uint8_t* y, int width); -void (*WebPConvertARGBToUV)(const uint32_t* argb, uint8_t* u, uint8_t* v, - int src_width, int do_store); - -uint64_t (*WebPSharpYUVUpdateY)(const uint16_t* ref, const uint16_t* src, - uint16_t* dst, int len); -void (*WebPSharpYUVUpdateRGB)(const int16_t* ref, const int16_t* src, - int16_t* dst, int len); -void (*WebPSharpYUVFilterRow)(const int16_t* A, const int16_t* B, int len, - const uint16_t* best_y, uint16_t* out); - -extern void WebPInitConvertARGBToYUVSSE2(void); -extern void WebPInitConvertARGBToYUVSSE41(void); -extern void WebPInitConvertARGBToYUVNEON(void); -extern void WebPInitSharpYUVSSE2(void); -extern void WebPInitSharpYUVNEON(void); - -WEBP_DSP_INIT_FUNC(WebPInitConvertARGBToYUV) { - WebPConvertARGBToY = ConvertARGBToY_C; - WebPConvertARGBToUV = WebPConvertARGBToUV_C; - - WebPConvertRGB24ToY = ConvertRGB24ToY_C; - WebPConvertBGR24ToY = ConvertBGR24ToY_C; - - WebPConvertRGBA32ToUV = WebPConvertRGBA32ToUV_C; - -#if !WEBP_NEON_OMIT_C_CODE - WebPSharpYUVUpdateY = SharpYUVUpdateY_C; - WebPSharpYUVUpdateRGB = SharpYUVUpdateRGB_C; - WebPSharpYUVFilterRow = SharpYUVFilterRow_C; -#endif - - if (VP8GetCPUInfo != NULL) { -#if defined(WEBP_USE_SSE2) - if (VP8GetCPUInfo(kSSE2)) { - WebPInitConvertARGBToYUVSSE2(); - WebPInitSharpYUVSSE2(); - } -#endif // WEBP_USE_SSE2 -#if defined(WEBP_USE_SSE41) - if (VP8GetCPUInfo(kSSE4_1)) { - WebPInitConvertARGBToYUVSSE41(); - } -#endif // WEBP_USE_SSE41 - } - -#if defined(WEBP_USE_NEON) - if (WEBP_NEON_OMIT_C_CODE || - (VP8GetCPUInfo != NULL && VP8GetCPUInfo(kNEON))) { - WebPInitConvertARGBToYUVNEON(); - WebPInitSharpYUVNEON(); - } -#endif // WEBP_USE_NEON - - assert(WebPConvertARGBToY != NULL); - assert(WebPConvertARGBToUV != NULL); - assert(WebPConvertRGB24ToY != NULL); - assert(WebPConvertBGR24ToY != NULL); - assert(WebPConvertRGBA32ToUV != NULL); - assert(WebPSharpYUVUpdateY != NULL); - assert(WebPSharpYUVUpdateRGB != NULL); - assert(WebPSharpYUVFilterRow != NULL); -} diff --git a/Extended/libwebp/src/dsp/yuv.h b/Extended/libwebp/src/dsp/yuv.h deleted file mode 100644 index c12be1d..0000000 --- a/Extended/libwebp/src/dsp/yuv.h +++ /dev/null @@ -1,210 +0,0 @@ -// Copyright 2010 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// inline YUV<->RGB conversion function -// -// The exact naming is Y'CbCr, following the ITU-R BT.601 standard. -// More information at: http://en.wikipedia.org/wiki/YCbCr -// Y = 0.2569 * R + 0.5044 * G + 0.0979 * B + 16 -// U = -0.1483 * R - 0.2911 * G + 0.4394 * B + 128 -// V = 0.4394 * R - 0.3679 * G - 0.0715 * B + 128 -// We use 16bit fixed point operations for RGB->YUV conversion (YUV_FIX). -// -// For the Y'CbCr to RGB conversion, the BT.601 specification reads: -// R = 1.164 * (Y-16) + 1.596 * (V-128) -// G = 1.164 * (Y-16) - 0.813 * (V-128) - 0.391 * (U-128) -// B = 1.164 * (Y-16) + 2.018 * (U-128) -// where Y is in the [16,235] range, and U/V in the [16,240] range. -// -// The fixed-point implementation used here is: -// R = (19077 . y + 26149 . v - 14234) >> 6 -// G = (19077 . y - 6419 . u - 13320 . v + 8708) >> 6 -// B = (19077 . y + 33050 . u - 17685) >> 6 -// where the '.' operator is the mulhi_epu16 variant: -// a . b = ((a << 8) * b) >> 16 -// that preserves 8 bits of fractional precision before final descaling. - -// Author: Skal (pascal.massimino@gmail.com) - -#ifndef WEBP_DSP_YUV_H_ -#define WEBP_DSP_YUV_H_ - -#include "src/dsp/dsp.h" -#include "src/dec/vp8_dec.h" - -//------------------------------------------------------------------------------ -// YUV -> RGB conversion - -#ifdef __cplusplus -extern "C" { -#endif - -enum { - YUV_FIX = 16, // fixed-point precision for RGB->YUV - YUV_HALF = 1 << (YUV_FIX - 1), - - YUV_FIX2 = 6, // fixed-point precision for YUV->RGB - YUV_MASK2 = (256 << YUV_FIX2) - 1 -}; - -//------------------------------------------------------------------------------ -// slower on x86 by ~7-8%, but bit-exact with the SSE2/NEON version - -static WEBP_INLINE int MultHi(int v, int coeff) { // _mm_mulhi_epu16 emulation - return (v * coeff) >> 8; -} - -static WEBP_INLINE int VP8Clip8(int v) { - return ((v & ~YUV_MASK2) == 0) ? (v >> YUV_FIX2) : (v < 0) ? 0 : 255; -} - -static WEBP_INLINE int VP8YUVToR(int y, int v) { - return VP8Clip8(MultHi(y, 19077) + MultHi(v, 26149) - 14234); -} - -static WEBP_INLINE int VP8YUVToG(int y, int u, int v) { - return VP8Clip8(MultHi(y, 19077) - MultHi(u, 6419) - MultHi(v, 13320) + 8708); -} - -static WEBP_INLINE int VP8YUVToB(int y, int u) { - return VP8Clip8(MultHi(y, 19077) + MultHi(u, 33050) - 17685); -} - -static WEBP_INLINE void VP8YuvToRgb(int y, int u, int v, - uint8_t* const rgb) { - rgb[0] = VP8YUVToR(y, v); - rgb[1] = VP8YUVToG(y, u, v); - rgb[2] = VP8YUVToB(y, u); -} - -static WEBP_INLINE void VP8YuvToBgr(int y, int u, int v, - uint8_t* const bgr) { - bgr[0] = VP8YUVToB(y, u); - bgr[1] = VP8YUVToG(y, u, v); - bgr[2] = VP8YUVToR(y, v); -} - -static WEBP_INLINE void VP8YuvToRgb565(int y, int u, int v, - uint8_t* const rgb) { - const int r = VP8YUVToR(y, v); // 5 usable bits - const int g = VP8YUVToG(y, u, v); // 6 usable bits - const int b = VP8YUVToB(y, u); // 5 usable bits - const int rg = (r & 0xf8) | (g >> 5); - const int gb = ((g << 3) & 0xe0) | (b >> 3); -#if (WEBP_SWAP_16BIT_CSP == 1) - rgb[0] = gb; - rgb[1] = rg; -#else - rgb[0] = rg; - rgb[1] = gb; -#endif -} - -static WEBP_INLINE void VP8YuvToRgba4444(int y, int u, int v, - uint8_t* const argb) { - const int r = VP8YUVToR(y, v); // 4 usable bits - const int g = VP8YUVToG(y, u, v); // 4 usable bits - const int b = VP8YUVToB(y, u); // 4 usable bits - const int rg = (r & 0xf0) | (g >> 4); - const int ba = (b & 0xf0) | 0x0f; // overwrite the lower 4 bits -#if (WEBP_SWAP_16BIT_CSP == 1) - argb[0] = ba; - argb[1] = rg; -#else - argb[0] = rg; - argb[1] = ba; -#endif -} - -//----------------------------------------------------------------------------- -// Alpha handling variants - -static WEBP_INLINE void VP8YuvToArgb(uint8_t y, uint8_t u, uint8_t v, - uint8_t* const argb) { - argb[0] = 0xff; - VP8YuvToRgb(y, u, v, argb + 1); -} - -static WEBP_INLINE void VP8YuvToBgra(uint8_t y, uint8_t u, uint8_t v, - uint8_t* const bgra) { - VP8YuvToBgr(y, u, v, bgra); - bgra[3] = 0xff; -} - -static WEBP_INLINE void VP8YuvToRgba(uint8_t y, uint8_t u, uint8_t v, - uint8_t* const rgba) { - VP8YuvToRgb(y, u, v, rgba); - rgba[3] = 0xff; -} - -//----------------------------------------------------------------------------- -// SSE2 extra functions (mostly for upsampling_sse2.c) - -#if defined(WEBP_USE_SSE2) - -// Process 32 pixels and store the result (16b, 24b or 32b per pixel) in *dst. -void VP8YuvToRgba32_SSE2(const uint8_t* y, const uint8_t* u, const uint8_t* v, - uint8_t* dst); -void VP8YuvToRgb32_SSE2(const uint8_t* y, const uint8_t* u, const uint8_t* v, - uint8_t* dst); -void VP8YuvToBgra32_SSE2(const uint8_t* y, const uint8_t* u, const uint8_t* v, - uint8_t* dst); -void VP8YuvToBgr32_SSE2(const uint8_t* y, const uint8_t* u, const uint8_t* v, - uint8_t* dst); -void VP8YuvToArgb32_SSE2(const uint8_t* y, const uint8_t* u, const uint8_t* v, - uint8_t* dst); -void VP8YuvToRgba444432_SSE2(const uint8_t* y, const uint8_t* u, - const uint8_t* v, uint8_t* dst); -void VP8YuvToRgb56532_SSE2(const uint8_t* y, const uint8_t* u, const uint8_t* v, - uint8_t* dst); - -#endif // WEBP_USE_SSE2 - -//----------------------------------------------------------------------------- -// SSE41 extra functions (mostly for upsampling_sse41.c) - -#if defined(WEBP_USE_SSE41) - -// Process 32 pixels and store the result (16b, 24b or 32b per pixel) in *dst. -void VP8YuvToRgb32_SSE41(const uint8_t* y, const uint8_t* u, const uint8_t* v, - uint8_t* dst); -void VP8YuvToBgr32_SSE41(const uint8_t* y, const uint8_t* u, const uint8_t* v, - uint8_t* dst); - -#endif // WEBP_USE_SSE41 - -//------------------------------------------------------------------------------ -// RGB -> YUV conversion - -// Stub functions that can be called with various rounding values: -static WEBP_INLINE int VP8ClipUV(int uv, int rounding) { - uv = (uv + rounding + (128 << (YUV_FIX + 2))) >> (YUV_FIX + 2); - return ((uv & ~0xff) == 0) ? uv : (uv < 0) ? 0 : 255; -} - -static WEBP_INLINE int VP8RGBToY(int r, int g, int b, int rounding) { - const int luma = 16839 * r + 33059 * g + 6420 * b; - return (luma + rounding + (16 << YUV_FIX)) >> YUV_FIX; // no need to clip -} - -static WEBP_INLINE int VP8RGBToU(int r, int g, int b, int rounding) { - const int u = -9719 * r - 19081 * g + 28800 * b; - return VP8ClipUV(u, rounding); -} - -static WEBP_INLINE int VP8RGBToV(int r, int g, int b, int rounding) { - const int v = +28800 * r - 24116 * g - 4684 * b; - return VP8ClipUV(v, rounding); -} - -#ifdef __cplusplus -} // extern "C" -#endif - -#endif // WEBP_DSP_YUV_H_ diff --git a/Extended/libwebp/src/dsp/yuv_mips32.c b/Extended/libwebp/src/dsp/yuv_mips32.c deleted file mode 100644 index 9d0a887..0000000 --- a/Extended/libwebp/src/dsp/yuv_mips32.c +++ /dev/null @@ -1,103 +0,0 @@ -// Copyright 2014 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// MIPS version of YUV to RGB upsampling functions. -// -// Author(s): Djordje Pesut (djordje.pesut@imgtec.com) -// Jovan Zelincevic (jovan.zelincevic@imgtec.com) - -#include "src/dsp/dsp.h" - -#if defined(WEBP_USE_MIPS32) - -#include "src/dsp/yuv.h" - -//------------------------------------------------------------------------------ -// simple point-sampling - -#define ROW_FUNC(FUNC_NAME, XSTEP, R, G, B, A) \ -static void FUNC_NAME(const uint8_t* y, \ - const uint8_t* u, const uint8_t* v, \ - uint8_t* dst, int len) { \ - int i, r, g, b; \ - int temp0, temp1, temp2, temp3, temp4; \ - for (i = 0; i < (len >> 1); i++) { \ - temp1 = MultHi(v[0], 26149); \ - temp3 = MultHi(v[0], 13320); \ - temp2 = MultHi(u[0], 6419); \ - temp4 = MultHi(u[0], 33050); \ - temp0 = MultHi(y[0], 19077); \ - temp1 -= 14234; \ - temp3 -= 8708; \ - temp2 += temp3; \ - temp4 -= 17685; \ - r = VP8Clip8(temp0 + temp1); \ - g = VP8Clip8(temp0 - temp2); \ - b = VP8Clip8(temp0 + temp4); \ - temp0 = MultHi(y[1], 19077); \ - dst[R] = r; \ - dst[G] = g; \ - dst[B] = b; \ - if (A) dst[A] = 0xff; \ - r = VP8Clip8(temp0 + temp1); \ - g = VP8Clip8(temp0 - temp2); \ - b = VP8Clip8(temp0 + temp4); \ - dst[R + XSTEP] = r; \ - dst[G + XSTEP] = g; \ - dst[B + XSTEP] = b; \ - if (A) dst[A + XSTEP] = 0xff; \ - y += 2; \ - ++u; \ - ++v; \ - dst += 2 * XSTEP; \ - } \ - if (len & 1) { \ - temp1 = MultHi(v[0], 26149); \ - temp3 = MultHi(v[0], 13320); \ - temp2 = MultHi(u[0], 6419); \ - temp4 = MultHi(u[0], 33050); \ - temp0 = MultHi(y[0], 19077); \ - temp1 -= 14234; \ - temp3 -= 8708; \ - temp2 += temp3; \ - temp4 -= 17685; \ - r = VP8Clip8(temp0 + temp1); \ - g = VP8Clip8(temp0 - temp2); \ - b = VP8Clip8(temp0 + temp4); \ - dst[R] = r; \ - dst[G] = g; \ - dst[B] = b; \ - if (A) dst[A] = 0xff; \ - } \ -} - -ROW_FUNC(YuvToRgbRow_MIPS32, 3, 0, 1, 2, 0) -ROW_FUNC(YuvToRgbaRow_MIPS32, 4, 0, 1, 2, 3) -ROW_FUNC(YuvToBgrRow_MIPS32, 3, 2, 1, 0, 0) -ROW_FUNC(YuvToBgraRow_MIPS32, 4, 2, 1, 0, 3) - -#undef ROW_FUNC - -//------------------------------------------------------------------------------ -// Entry point - -extern void WebPInitSamplersMIPS32(void); - -WEBP_TSAN_IGNORE_FUNCTION void WebPInitSamplersMIPS32(void) { - WebPSamplers[MODE_RGB] = YuvToRgbRow_MIPS32; - WebPSamplers[MODE_RGBA] = YuvToRgbaRow_MIPS32; - WebPSamplers[MODE_BGR] = YuvToBgrRow_MIPS32; - WebPSamplers[MODE_BGRA] = YuvToBgraRow_MIPS32; -} - -#else // !WEBP_USE_MIPS32 - -WEBP_DSP_INIT_STUB(WebPInitSamplersMIPS32) - -#endif // WEBP_USE_MIPS32 diff --git a/Extended/libwebp/src/dsp/yuv_mips_dsp_r2.c b/Extended/libwebp/src/dsp/yuv_mips_dsp_r2.c deleted file mode 100644 index cc8afcc..0000000 --- a/Extended/libwebp/src/dsp/yuv_mips_dsp_r2.c +++ /dev/null @@ -1,134 +0,0 @@ -// Copyright 2014 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// MIPS DSPr2 version of YUV to RGB upsampling functions. -// -// Author(s): Branimir Vasic (branimir.vasic@imgtec.com) -// Djordje Pesut (djordje.pesut@imgtec.com) - -#include "src/dsp/dsp.h" - -#if defined(WEBP_USE_MIPS_DSP_R2) - -#include "src/dsp/yuv.h" - -//------------------------------------------------------------------------------ -// simple point-sampling - -#define ROW_FUNC_PART_1() \ - "lbu %[temp3], 0(%[v]) \n\t" \ - "lbu %[temp4], 0(%[u]) \n\t" \ - "lbu %[temp0], 0(%[y]) \n\t" \ - "mul %[temp1], %[t_con_1], %[temp3] \n\t" \ - "mul %[temp3], %[t_con_2], %[temp3] \n\t" \ - "mul %[temp2], %[t_con_3], %[temp4] \n\t" \ - "mul %[temp4], %[t_con_4], %[temp4] \n\t" \ - "mul %[temp0], %[t_con_5], %[temp0] \n\t" \ - "subu %[temp1], %[temp1], %[t_con_6] \n\t" \ - "subu %[temp3], %[temp3], %[t_con_7] \n\t" \ - "addu %[temp2], %[temp2], %[temp3] \n\t" \ - "subu %[temp4], %[temp4], %[t_con_8] \n\t" \ - -#define ROW_FUNC_PART_2(R, G, B, K) \ - "addu %[temp5], %[temp0], %[temp1] \n\t" \ - "subu %[temp6], %[temp0], %[temp2] \n\t" \ - "addu %[temp7], %[temp0], %[temp4] \n\t" \ -".if " #K " \n\t" \ - "lbu %[temp0], 1(%[y]) \n\t" \ -".endif \n\t" \ - "shll_s.w %[temp5], %[temp5], 17 \n\t" \ - "shll_s.w %[temp6], %[temp6], 17 \n\t" \ -".if " #K " \n\t" \ - "mul %[temp0], %[t_con_5], %[temp0] \n\t" \ -".endif \n\t" \ - "shll_s.w %[temp7], %[temp7], 17 \n\t" \ - "precrqu_s.qb.ph %[temp5], %[temp5], $zero \n\t" \ - "precrqu_s.qb.ph %[temp6], %[temp6], $zero \n\t" \ - "precrqu_s.qb.ph %[temp7], %[temp7], $zero \n\t" \ - "srl %[temp5], %[temp5], 24 \n\t" \ - "srl %[temp6], %[temp6], 24 \n\t" \ - "srl %[temp7], %[temp7], 24 \n\t" \ - "sb %[temp5], " #R "(%[dst]) \n\t" \ - "sb %[temp6], " #G "(%[dst]) \n\t" \ - "sb %[temp7], " #B "(%[dst]) \n\t" \ - -#define ASM_CLOBBER_LIST() \ - : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [temp2]"=&r"(temp2), \ - [temp3]"=&r"(temp3), [temp4]"=&r"(temp4), [temp5]"=&r"(temp5), \ - [temp6]"=&r"(temp6), [temp7]"=&r"(temp7) \ - : [t_con_1]"r"(t_con_1), [t_con_2]"r"(t_con_2), [t_con_3]"r"(t_con_3), \ - [t_con_4]"r"(t_con_4), [t_con_5]"r"(t_con_5), [t_con_6]"r"(t_con_6), \ - [u]"r"(u), [v]"r"(v), [y]"r"(y), [dst]"r"(dst), \ - [t_con_7]"r"(t_con_7), [t_con_8]"r"(t_con_8) \ - : "memory", "hi", "lo" \ - -#define ROW_FUNC(FUNC_NAME, XSTEP, R, G, B, A) \ -static void FUNC_NAME(const uint8_t* y, \ - const uint8_t* u, const uint8_t* v, \ - uint8_t* dst, int len) { \ - int i; \ - uint32_t temp0, temp1, temp2, temp3, temp4, temp5, temp6, temp7; \ - const int t_con_1 = 26149; \ - const int t_con_2 = 13320; \ - const int t_con_3 = 6419; \ - const int t_con_4 = 33050; \ - const int t_con_5 = 19077; \ - const int t_con_6 = 14234; \ - const int t_con_7 = 8708; \ - const int t_con_8 = 17685; \ - for (i = 0; i < (len >> 1); i++) { \ - __asm__ volatile ( \ - ROW_FUNC_PART_1() \ - ROW_FUNC_PART_2(R, G, B, 1) \ - ROW_FUNC_PART_2(R + XSTEP, G + XSTEP, B + XSTEP, 0) \ - ASM_CLOBBER_LIST() \ - ); \ - if (A) dst[A] = dst[A + XSTEP] = 0xff; \ - y += 2; \ - ++u; \ - ++v; \ - dst += 2 * XSTEP; \ - } \ - if (len & 1) { \ - __asm__ volatile ( \ - ROW_FUNC_PART_1() \ - ROW_FUNC_PART_2(R, G, B, 0) \ - ASM_CLOBBER_LIST() \ - ); \ - if (A) dst[A] = 0xff; \ - } \ -} - -ROW_FUNC(YuvToRgbRow_MIPSdspR2, 3, 0, 1, 2, 0) -ROW_FUNC(YuvToRgbaRow_MIPSdspR2, 4, 0, 1, 2, 3) -ROW_FUNC(YuvToBgrRow_MIPSdspR2, 3, 2, 1, 0, 0) -ROW_FUNC(YuvToBgraRow_MIPSdspR2, 4, 2, 1, 0, 3) - -#undef ROW_FUNC -#undef ASM_CLOBBER_LIST -#undef ROW_FUNC_PART_2 -#undef ROW_FUNC_PART_1 - -//------------------------------------------------------------------------------ -// Entry point - -extern void WebPInitSamplersMIPSdspR2(void); - -WEBP_TSAN_IGNORE_FUNCTION void WebPInitSamplersMIPSdspR2(void) { - WebPSamplers[MODE_RGB] = YuvToRgbRow_MIPSdspR2; - WebPSamplers[MODE_RGBA] = YuvToRgbaRow_MIPSdspR2; - WebPSamplers[MODE_BGR] = YuvToBgrRow_MIPSdspR2; - WebPSamplers[MODE_BGRA] = YuvToBgraRow_MIPSdspR2; -} - -#else // !WEBP_USE_MIPS_DSP_R2 - -WEBP_DSP_INIT_STUB(WebPInitSamplersMIPSdspR2) - -#endif // WEBP_USE_MIPS_DSP_R2 diff --git a/Extended/libwebp/src/dsp/yuv_neon.c b/Extended/libwebp/src/dsp/yuv_neon.c deleted file mode 100644 index a34d602..0000000 --- a/Extended/libwebp/src/dsp/yuv_neon.c +++ /dev/null @@ -1,288 +0,0 @@ -// Copyright 2017 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// YUV->RGB conversion functions -// -// Author: Skal (pascal.massimino@gmail.com) - -#include "src/dsp/yuv.h" - -#if defined(WEBP_USE_NEON) - -#include -#include - -#include "src/dsp/neon.h" - -//----------------------------------------------------------------------------- - -static uint8x8_t ConvertRGBToY_NEON(const uint8x8_t R, - const uint8x8_t G, - const uint8x8_t B) { - const uint16x8_t r = vmovl_u8(R); - const uint16x8_t g = vmovl_u8(G); - const uint16x8_t b = vmovl_u8(B); - const uint16x4_t r_lo = vget_low_u16(r); - const uint16x4_t r_hi = vget_high_u16(r); - const uint16x4_t g_lo = vget_low_u16(g); - const uint16x4_t g_hi = vget_high_u16(g); - const uint16x4_t b_lo = vget_low_u16(b); - const uint16x4_t b_hi = vget_high_u16(b); - const uint32x4_t tmp0_lo = vmull_n_u16( r_lo, 16839u); - const uint32x4_t tmp0_hi = vmull_n_u16( r_hi, 16839u); - const uint32x4_t tmp1_lo = vmlal_n_u16(tmp0_lo, g_lo, 33059u); - const uint32x4_t tmp1_hi = vmlal_n_u16(tmp0_hi, g_hi, 33059u); - const uint32x4_t tmp2_lo = vmlal_n_u16(tmp1_lo, b_lo, 6420u); - const uint32x4_t tmp2_hi = vmlal_n_u16(tmp1_hi, b_hi, 6420u); - const uint16x8_t Y1 = vcombine_u16(vrshrn_n_u32(tmp2_lo, 16), - vrshrn_n_u32(tmp2_hi, 16)); - const uint16x8_t Y2 = vaddq_u16(Y1, vdupq_n_u16(16)); - return vqmovn_u16(Y2); -} - -static void ConvertRGB24ToY_NEON(const uint8_t* rgb, uint8_t* y, int width) { - int i; - for (i = 0; i + 8 <= width; i += 8, rgb += 3 * 8) { - const uint8x8x3_t RGB = vld3_u8(rgb); - const uint8x8_t Y = ConvertRGBToY_NEON(RGB.val[0], RGB.val[1], RGB.val[2]); - vst1_u8(y + i, Y); - } - for (; i < width; ++i, rgb += 3) { // left-over - y[i] = VP8RGBToY(rgb[0], rgb[1], rgb[2], YUV_HALF); - } -} - -static void ConvertBGR24ToY_NEON(const uint8_t* bgr, uint8_t* y, int width) { - int i; - for (i = 0; i + 8 <= width; i += 8, bgr += 3 * 8) { - const uint8x8x3_t BGR = vld3_u8(bgr); - const uint8x8_t Y = ConvertRGBToY_NEON(BGR.val[2], BGR.val[1], BGR.val[0]); - vst1_u8(y + i, Y); - } - for (; i < width; ++i, bgr += 3) { // left-over - y[i] = VP8RGBToY(bgr[2], bgr[1], bgr[0], YUV_HALF); - } -} - -static void ConvertARGBToY_NEON(const uint32_t* argb, uint8_t* y, int width) { - int i; - for (i = 0; i + 8 <= width; i += 8) { - const uint8x8x4_t RGB = vld4_u8((const uint8_t*)&argb[i]); - const uint8x8_t Y = ConvertRGBToY_NEON(RGB.val[2], RGB.val[1], RGB.val[0]); - vst1_u8(y + i, Y); - } - for (; i < width; ++i) { // left-over - const uint32_t p = argb[i]; - y[i] = VP8RGBToY((p >> 16) & 0xff, (p >> 8) & 0xff, (p >> 0) & 0xff, - YUV_HALF); - } -} - -//----------------------------------------------------------------------------- - -// computes: DST_s16 = [(C0 * r + C1 * g + C2 * b) >> 16] + CST -#define MULTIPLY_16b_PREAMBLE(r, g, b) \ - const int16x4_t r_lo = vreinterpret_s16_u16(vget_low_u16(r)); \ - const int16x4_t r_hi = vreinterpret_s16_u16(vget_high_u16(r)); \ - const int16x4_t g_lo = vreinterpret_s16_u16(vget_low_u16(g)); \ - const int16x4_t g_hi = vreinterpret_s16_u16(vget_high_u16(g)); \ - const int16x4_t b_lo = vreinterpret_s16_u16(vget_low_u16(b)); \ - const int16x4_t b_hi = vreinterpret_s16_u16(vget_high_u16(b)) - -#define MULTIPLY_16b(C0, C1, C2, CST, DST_s16) do { \ - const int32x4_t tmp0_lo = vmull_n_s16( r_lo, C0); \ - const int32x4_t tmp0_hi = vmull_n_s16( r_hi, C0); \ - const int32x4_t tmp1_lo = vmlal_n_s16(tmp0_lo, g_lo, C1); \ - const int32x4_t tmp1_hi = vmlal_n_s16(tmp0_hi, g_hi, C1); \ - const int32x4_t tmp2_lo = vmlal_n_s16(tmp1_lo, b_lo, C2); \ - const int32x4_t tmp2_hi = vmlal_n_s16(tmp1_hi, b_hi, C2); \ - const int16x8_t tmp3 = vcombine_s16(vshrn_n_s32(tmp2_lo, 16), \ - vshrn_n_s32(tmp2_hi, 16)); \ - DST_s16 = vaddq_s16(tmp3, vdupq_n_s16(CST)); \ -} while (0) - -// This needs to be a macro, since (128 << SHIFT) needs to be an immediate. -#define CONVERT_RGB_TO_UV(r, g, b, SHIFT, U_DST, V_DST) do { \ - MULTIPLY_16b_PREAMBLE(r, g, b); \ - MULTIPLY_16b(-9719, -19081, 28800, 128 << SHIFT, U_DST); \ - MULTIPLY_16b(28800, -24116, -4684, 128 << SHIFT, V_DST); \ -} while (0) - -static void ConvertRGBA32ToUV_NEON(const uint16_t* rgb, - uint8_t* u, uint8_t* v, int width) { - int i; - for (i = 0; i + 8 <= width; i += 8, rgb += 4 * 8) { - const uint16x8x4_t RGB = vld4q_u16((const uint16_t*)rgb); - int16x8_t U, V; - CONVERT_RGB_TO_UV(RGB.val[0], RGB.val[1], RGB.val[2], 2, U, V); - vst1_u8(u + i, vqrshrun_n_s16(U, 2)); - vst1_u8(v + i, vqrshrun_n_s16(V, 2)); - } - for (; i < width; i += 1, rgb += 4) { - const int r = rgb[0], g = rgb[1], b = rgb[2]; - u[i] = VP8RGBToU(r, g, b, YUV_HALF << 2); - v[i] = VP8RGBToV(r, g, b, YUV_HALF << 2); - } -} - -static void ConvertARGBToUV_NEON(const uint32_t* argb, uint8_t* u, uint8_t* v, - int src_width, int do_store) { - int i; - for (i = 0; i + 16 <= src_width; i += 16, u += 8, v += 8) { - const uint8x16x4_t RGB = vld4q_u8((const uint8_t*)&argb[i]); - const uint16x8_t R = vpaddlq_u8(RGB.val[2]); // pair-wise adds - const uint16x8_t G = vpaddlq_u8(RGB.val[1]); - const uint16x8_t B = vpaddlq_u8(RGB.val[0]); - int16x8_t U_tmp, V_tmp; - CONVERT_RGB_TO_UV(R, G, B, 1, U_tmp, V_tmp); - { - const uint8x8_t U = vqrshrun_n_s16(U_tmp, 1); - const uint8x8_t V = vqrshrun_n_s16(V_tmp, 1); - if (do_store) { - vst1_u8(u, U); - vst1_u8(v, V); - } else { - const uint8x8_t prev_u = vld1_u8(u); - const uint8x8_t prev_v = vld1_u8(v); - vst1_u8(u, vrhadd_u8(U, prev_u)); - vst1_u8(v, vrhadd_u8(V, prev_v)); - } - } - } - if (i < src_width) { // left-over - WebPConvertARGBToUV_C(argb + i, u, v, src_width - i, do_store); - } -} - - -//------------------------------------------------------------------------------ - -extern void WebPInitConvertARGBToYUVNEON(void); - -WEBP_TSAN_IGNORE_FUNCTION void WebPInitConvertARGBToYUVNEON(void) { - WebPConvertRGB24ToY = ConvertRGB24ToY_NEON; - WebPConvertBGR24ToY = ConvertBGR24ToY_NEON; - WebPConvertARGBToY = ConvertARGBToY_NEON; - WebPConvertARGBToUV = ConvertARGBToUV_NEON; - WebPConvertRGBA32ToUV = ConvertRGBA32ToUV_NEON; -} - -//------------------------------------------------------------------------------ - -#define MAX_Y ((1 << 10) - 1) // 10b precision over 16b-arithmetic -static uint16_t clip_y_NEON(int v) { - return (v < 0) ? 0 : (v > MAX_Y) ? MAX_Y : (uint16_t)v; -} - -static uint64_t SharpYUVUpdateY_NEON(const uint16_t* ref, const uint16_t* src, - uint16_t* dst, int len) { - int i; - const int16x8_t zero = vdupq_n_s16(0); - const int16x8_t max = vdupq_n_s16(MAX_Y); - uint64x2_t sum = vdupq_n_u64(0); - uint64_t diff; - - for (i = 0; i + 8 <= len; i += 8) { - const int16x8_t A = vreinterpretq_s16_u16(vld1q_u16(ref + i)); - const int16x8_t B = vreinterpretq_s16_u16(vld1q_u16(src + i)); - const int16x8_t C = vreinterpretq_s16_u16(vld1q_u16(dst + i)); - const int16x8_t D = vsubq_s16(A, B); // diff_y - const int16x8_t F = vaddq_s16(C, D); // new_y - const uint16x8_t H = - vreinterpretq_u16_s16(vmaxq_s16(vminq_s16(F, max), zero)); - const int16x8_t I = vabsq_s16(D); // abs(diff_y) - vst1q_u16(dst + i, H); - sum = vpadalq_u32(sum, vpaddlq_u16(vreinterpretq_u16_s16(I))); - } - diff = vgetq_lane_u64(sum, 0) + vgetq_lane_u64(sum, 1); - for (; i < len; ++i) { - const int diff_y = ref[i] - src[i]; - const int new_y = (int)(dst[i]) + diff_y; - dst[i] = clip_y_NEON(new_y); - diff += (uint64_t)(abs(diff_y)); - } - return diff; -} - -static void SharpYUVUpdateRGB_NEON(const int16_t* ref, const int16_t* src, - int16_t* dst, int len) { - int i; - for (i = 0; i + 8 <= len; i += 8) { - const int16x8_t A = vld1q_s16(ref + i); - const int16x8_t B = vld1q_s16(src + i); - const int16x8_t C = vld1q_s16(dst + i); - const int16x8_t D = vsubq_s16(A, B); // diff_uv - const int16x8_t E = vaddq_s16(C, D); // new_uv - vst1q_s16(dst + i, E); - } - for (; i < len; ++i) { - const int diff_uv = ref[i] - src[i]; - dst[i] += diff_uv; - } -} - -static void SharpYUVFilterRow_NEON(const int16_t* A, const int16_t* B, int len, - const uint16_t* best_y, uint16_t* out) { - int i; - const int16x8_t max = vdupq_n_s16(MAX_Y); - const int16x8_t zero = vdupq_n_s16(0); - for (i = 0; i + 8 <= len; i += 8) { - const int16x8_t a0 = vld1q_s16(A + i + 0); - const int16x8_t a1 = vld1q_s16(A + i + 1); - const int16x8_t b0 = vld1q_s16(B + i + 0); - const int16x8_t b1 = vld1q_s16(B + i + 1); - const int16x8_t a0b1 = vaddq_s16(a0, b1); - const int16x8_t a1b0 = vaddq_s16(a1, b0); - const int16x8_t a0a1b0b1 = vaddq_s16(a0b1, a1b0); // A0+A1+B0+B1 - const int16x8_t a0b1_2 = vaddq_s16(a0b1, a0b1); // 2*(A0+B1) - const int16x8_t a1b0_2 = vaddq_s16(a1b0, a1b0); // 2*(A1+B0) - const int16x8_t c0 = vshrq_n_s16(vaddq_s16(a0b1_2, a0a1b0b1), 3); - const int16x8_t c1 = vshrq_n_s16(vaddq_s16(a1b0_2, a0a1b0b1), 3); - const int16x8_t d0 = vaddq_s16(c1, a0); - const int16x8_t d1 = vaddq_s16(c0, a1); - const int16x8_t e0 = vrshrq_n_s16(d0, 1); - const int16x8_t e1 = vrshrq_n_s16(d1, 1); - const int16x8x2_t f = vzipq_s16(e0, e1); - const int16x8_t g0 = vreinterpretq_s16_u16(vld1q_u16(best_y + 2 * i + 0)); - const int16x8_t g1 = vreinterpretq_s16_u16(vld1q_u16(best_y + 2 * i + 8)); - const int16x8_t h0 = vaddq_s16(g0, f.val[0]); - const int16x8_t h1 = vaddq_s16(g1, f.val[1]); - const int16x8_t i0 = vmaxq_s16(vminq_s16(h0, max), zero); - const int16x8_t i1 = vmaxq_s16(vminq_s16(h1, max), zero); - vst1q_u16(out + 2 * i + 0, vreinterpretq_u16_s16(i0)); - vst1q_u16(out + 2 * i + 8, vreinterpretq_u16_s16(i1)); - } - for (; i < len; ++i) { - const int a0b1 = A[i + 0] + B[i + 1]; - const int a1b0 = A[i + 1] + B[i + 0]; - const int a0a1b0b1 = a0b1 + a1b0 + 8; - const int v0 = (8 * A[i + 0] + 2 * a1b0 + a0a1b0b1) >> 4; - const int v1 = (8 * A[i + 1] + 2 * a0b1 + a0a1b0b1) >> 4; - out[2 * i + 0] = clip_y_NEON(best_y[2 * i + 0] + v0); - out[2 * i + 1] = clip_y_NEON(best_y[2 * i + 1] + v1); - } -} -#undef MAX_Y - -//------------------------------------------------------------------------------ - -extern void WebPInitSharpYUVNEON(void); - -WEBP_TSAN_IGNORE_FUNCTION void WebPInitSharpYUVNEON(void) { - WebPSharpYUVUpdateY = SharpYUVUpdateY_NEON; - WebPSharpYUVUpdateRGB = SharpYUVUpdateRGB_NEON; - WebPSharpYUVFilterRow = SharpYUVFilterRow_NEON; -} - -#else // !WEBP_USE_NEON - -WEBP_DSP_INIT_STUB(WebPInitConvertARGBToYUVNEON) -WEBP_DSP_INIT_STUB(WebPInitSharpYUVNEON) - -#endif // WEBP_USE_NEON diff --git a/Extended/libwebp/src/dsp/yuv_sse2.c b/Extended/libwebp/src/dsp/yuv_sse2.c deleted file mode 100644 index baa48d5..0000000 --- a/Extended/libwebp/src/dsp/yuv_sse2.c +++ /dev/null @@ -1,874 +0,0 @@ -// Copyright 2014 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// YUV->RGB conversion functions -// -// Author: Skal (pascal.massimino@gmail.com) - -#include "src/dsp/yuv.h" - -#if defined(WEBP_USE_SSE2) - -#include "src/dsp/common_sse2.h" -#include -#include - -//----------------------------------------------------------------------------- -// Convert spans of 32 pixels to various RGB formats for the fancy upsampler. - -// These constants are 14b fixed-point version of ITU-R BT.601 constants. -// R = (19077 * y + 26149 * v - 14234) >> 6 -// G = (19077 * y - 6419 * u - 13320 * v + 8708) >> 6 -// B = (19077 * y + 33050 * u - 17685) >> 6 -static void ConvertYUV444ToRGB_SSE2(const __m128i* const Y0, - const __m128i* const U0, - const __m128i* const V0, - __m128i* const R, - __m128i* const G, - __m128i* const B) { - const __m128i k19077 = _mm_set1_epi16(19077); - const __m128i k26149 = _mm_set1_epi16(26149); - const __m128i k14234 = _mm_set1_epi16(14234); - // 33050 doesn't fit in a signed short: only use this with unsigned arithmetic - const __m128i k33050 = _mm_set1_epi16((short)33050); - const __m128i k17685 = _mm_set1_epi16(17685); - const __m128i k6419 = _mm_set1_epi16(6419); - const __m128i k13320 = _mm_set1_epi16(13320); - const __m128i k8708 = _mm_set1_epi16(8708); - - const __m128i Y1 = _mm_mulhi_epu16(*Y0, k19077); - - const __m128i R0 = _mm_mulhi_epu16(*V0, k26149); - const __m128i R1 = _mm_sub_epi16(Y1, k14234); - const __m128i R2 = _mm_add_epi16(R1, R0); - - const __m128i G0 = _mm_mulhi_epu16(*U0, k6419); - const __m128i G1 = _mm_mulhi_epu16(*V0, k13320); - const __m128i G2 = _mm_add_epi16(Y1, k8708); - const __m128i G3 = _mm_add_epi16(G0, G1); - const __m128i G4 = _mm_sub_epi16(G2, G3); - - // be careful with the saturated *unsigned* arithmetic here! - const __m128i B0 = _mm_mulhi_epu16(*U0, k33050); - const __m128i B1 = _mm_adds_epu16(B0, Y1); - const __m128i B2 = _mm_subs_epu16(B1, k17685); - - // use logical shift for B2, which can be larger than 32767 - *R = _mm_srai_epi16(R2, 6); // range: [-14234, 30815] - *G = _mm_srai_epi16(G4, 6); // range: [-10953, 27710] - *B = _mm_srli_epi16(B2, 6); // range: [0, 34238] -} - -// Load the bytes into the *upper* part of 16b words. That's "<< 8", basically. -static WEBP_INLINE __m128i Load_HI_16_SSE2(const uint8_t* src) { - const __m128i zero = _mm_setzero_si128(); - return _mm_unpacklo_epi8(zero, _mm_loadl_epi64((const __m128i*)src)); -} - -// Load and replicate the U/V samples -static WEBP_INLINE __m128i Load_UV_HI_8_SSE2(const uint8_t* src) { - const __m128i zero = _mm_setzero_si128(); - const __m128i tmp0 = _mm_cvtsi32_si128(*(const uint32_t*)src); - const __m128i tmp1 = _mm_unpacklo_epi8(zero, tmp0); - return _mm_unpacklo_epi16(tmp1, tmp1); // replicate samples -} - -// Convert 32 samples of YUV444 to R/G/B -static void YUV444ToRGB_SSE2(const uint8_t* const y, - const uint8_t* const u, - const uint8_t* const v, - __m128i* const R, __m128i* const G, - __m128i* const B) { - const __m128i Y0 = Load_HI_16_SSE2(y), U0 = Load_HI_16_SSE2(u), - V0 = Load_HI_16_SSE2(v); - ConvertYUV444ToRGB_SSE2(&Y0, &U0, &V0, R, G, B); -} - -// Convert 32 samples of YUV420 to R/G/B -static void YUV420ToRGB_SSE2(const uint8_t* const y, - const uint8_t* const u, - const uint8_t* const v, - __m128i* const R, __m128i* const G, - __m128i* const B) { - const __m128i Y0 = Load_HI_16_SSE2(y), U0 = Load_UV_HI_8_SSE2(u), - V0 = Load_UV_HI_8_SSE2(v); - ConvertYUV444ToRGB_SSE2(&Y0, &U0, &V0, R, G, B); -} - -// Pack R/G/B/A results into 32b output. -static WEBP_INLINE void PackAndStore4_SSE2(const __m128i* const R, - const __m128i* const G, - const __m128i* const B, - const __m128i* const A, - uint8_t* const dst) { - const __m128i rb = _mm_packus_epi16(*R, *B); - const __m128i ga = _mm_packus_epi16(*G, *A); - const __m128i rg = _mm_unpacklo_epi8(rb, ga); - const __m128i ba = _mm_unpackhi_epi8(rb, ga); - const __m128i RGBA_lo = _mm_unpacklo_epi16(rg, ba); - const __m128i RGBA_hi = _mm_unpackhi_epi16(rg, ba); - _mm_storeu_si128((__m128i*)(dst + 0), RGBA_lo); - _mm_storeu_si128((__m128i*)(dst + 16), RGBA_hi); -} - -// Pack R/G/B/A results into 16b output. -static WEBP_INLINE void PackAndStore4444_SSE2(const __m128i* const R, - const __m128i* const G, - const __m128i* const B, - const __m128i* const A, - uint8_t* const dst) { -#if (WEBP_SWAP_16BIT_CSP == 0) - const __m128i rg0 = _mm_packus_epi16(*R, *G); - const __m128i ba0 = _mm_packus_epi16(*B, *A); -#else - const __m128i rg0 = _mm_packus_epi16(*B, *A); - const __m128i ba0 = _mm_packus_epi16(*R, *G); -#endif - const __m128i mask_0xf0 = _mm_set1_epi8(0xf0); - const __m128i rb1 = _mm_unpacklo_epi8(rg0, ba0); // rbrbrbrbrb... - const __m128i ga1 = _mm_unpackhi_epi8(rg0, ba0); // gagagagaga... - const __m128i rb2 = _mm_and_si128(rb1, mask_0xf0); - const __m128i ga2 = _mm_srli_epi16(_mm_and_si128(ga1, mask_0xf0), 4); - const __m128i rgba4444 = _mm_or_si128(rb2, ga2); - _mm_storeu_si128((__m128i*)dst, rgba4444); -} - -// Pack R/G/B results into 16b output. -static WEBP_INLINE void PackAndStore565_SSE2(const __m128i* const R, - const __m128i* const G, - const __m128i* const B, - uint8_t* const dst) { - const __m128i r0 = _mm_packus_epi16(*R, *R); - const __m128i g0 = _mm_packus_epi16(*G, *G); - const __m128i b0 = _mm_packus_epi16(*B, *B); - const __m128i r1 = _mm_and_si128(r0, _mm_set1_epi8(0xf8)); - const __m128i b1 = _mm_and_si128(_mm_srli_epi16(b0, 3), _mm_set1_epi8(0x1f)); - const __m128i g1 = _mm_srli_epi16(_mm_and_si128(g0, _mm_set1_epi8(0xe0)), 5); - const __m128i g2 = _mm_slli_epi16(_mm_and_si128(g0, _mm_set1_epi8(0x1c)), 3); - const __m128i rg = _mm_or_si128(r1, g1); - const __m128i gb = _mm_or_si128(g2, b1); -#if (WEBP_SWAP_16BIT_CSP == 0) - const __m128i rgb565 = _mm_unpacklo_epi8(rg, gb); -#else - const __m128i rgb565 = _mm_unpacklo_epi8(gb, rg); -#endif - _mm_storeu_si128((__m128i*)dst, rgb565); -} - -// Pack the planar buffers -// rrrr... rrrr... gggg... gggg... bbbb... bbbb.... -// triplet by triplet in the output buffer rgb as rgbrgbrgbrgb ... -static WEBP_INLINE void PlanarTo24b_SSE2(__m128i* const in0, __m128i* const in1, - __m128i* const in2, __m128i* const in3, - __m128i* const in4, __m128i* const in5, - uint8_t* const rgb) { - // The input is 6 registers of sixteen 8b but for the sake of explanation, - // let's take 6 registers of four 8b values. - // To pack, we will keep taking one every two 8b integer and move it - // around as follows: - // Input: - // r0r1r2r3 | r4r5r6r7 | g0g1g2g3 | g4g5g6g7 | b0b1b2b3 | b4b5b6b7 - // Split the 6 registers in two sets of 3 registers: the first set as the even - // 8b bytes, the second the odd ones: - // r0r2r4r6 | g0g2g4g6 | b0b2b4b6 | r1r3r5r7 | g1g3g5g7 | b1b3b5b7 - // Repeat the same permutations twice more: - // r0r4g0g4 | b0b4r1r5 | g1g5b1b5 | r2r6g2g6 | b2b6r3r7 | g3g7b3b7 - // r0g0b0r1 | g1b1r2g2 | b2r3g3b3 | r4g4b4r5 | g5b5r6g6 | b6r7g7b7 - VP8PlanarTo24b_SSE2(in0, in1, in2, in3, in4, in5); - - _mm_storeu_si128((__m128i*)(rgb + 0), *in0); - _mm_storeu_si128((__m128i*)(rgb + 16), *in1); - _mm_storeu_si128((__m128i*)(rgb + 32), *in2); - _mm_storeu_si128((__m128i*)(rgb + 48), *in3); - _mm_storeu_si128((__m128i*)(rgb + 64), *in4); - _mm_storeu_si128((__m128i*)(rgb + 80), *in5); -} - -void VP8YuvToRgba32_SSE2(const uint8_t* y, const uint8_t* u, const uint8_t* v, - uint8_t* dst) { - const __m128i kAlpha = _mm_set1_epi16(255); - int n; - for (n = 0; n < 32; n += 8, dst += 32) { - __m128i R, G, B; - YUV444ToRGB_SSE2(y + n, u + n, v + n, &R, &G, &B); - PackAndStore4_SSE2(&R, &G, &B, &kAlpha, dst); - } -} - -void VP8YuvToBgra32_SSE2(const uint8_t* y, const uint8_t* u, const uint8_t* v, - uint8_t* dst) { - const __m128i kAlpha = _mm_set1_epi16(255); - int n; - for (n = 0; n < 32; n += 8, dst += 32) { - __m128i R, G, B; - YUV444ToRGB_SSE2(y + n, u + n, v + n, &R, &G, &B); - PackAndStore4_SSE2(&B, &G, &R, &kAlpha, dst); - } -} - -void VP8YuvToArgb32_SSE2(const uint8_t* y, const uint8_t* u, const uint8_t* v, - uint8_t* dst) { - const __m128i kAlpha = _mm_set1_epi16(255); - int n; - for (n = 0; n < 32; n += 8, dst += 32) { - __m128i R, G, B; - YUV444ToRGB_SSE2(y + n, u + n, v + n, &R, &G, &B); - PackAndStore4_SSE2(&kAlpha, &R, &G, &B, dst); - } -} - -void VP8YuvToRgba444432_SSE2(const uint8_t* y, const uint8_t* u, - const uint8_t* v, uint8_t* dst) { - const __m128i kAlpha = _mm_set1_epi16(255); - int n; - for (n = 0; n < 32; n += 8, dst += 16) { - __m128i R, G, B; - YUV444ToRGB_SSE2(y + n, u + n, v + n, &R, &G, &B); - PackAndStore4444_SSE2(&R, &G, &B, &kAlpha, dst); - } -} - -void VP8YuvToRgb56532_SSE2(const uint8_t* y, const uint8_t* u, const uint8_t* v, - uint8_t* dst) { - int n; - for (n = 0; n < 32; n += 8, dst += 16) { - __m128i R, G, B; - YUV444ToRGB_SSE2(y + n, u + n, v + n, &R, &G, &B); - PackAndStore565_SSE2(&R, &G, &B, dst); - } -} - -void VP8YuvToRgb32_SSE2(const uint8_t* y, const uint8_t* u, const uint8_t* v, - uint8_t* dst) { - __m128i R0, R1, R2, R3, G0, G1, G2, G3, B0, B1, B2, B3; - __m128i rgb0, rgb1, rgb2, rgb3, rgb4, rgb5; - - YUV444ToRGB_SSE2(y + 0, u + 0, v + 0, &R0, &G0, &B0); - YUV444ToRGB_SSE2(y + 8, u + 8, v + 8, &R1, &G1, &B1); - YUV444ToRGB_SSE2(y + 16, u + 16, v + 16, &R2, &G2, &B2); - YUV444ToRGB_SSE2(y + 24, u + 24, v + 24, &R3, &G3, &B3); - - // Cast to 8b and store as RRRRGGGGBBBB. - rgb0 = _mm_packus_epi16(R0, R1); - rgb1 = _mm_packus_epi16(R2, R3); - rgb2 = _mm_packus_epi16(G0, G1); - rgb3 = _mm_packus_epi16(G2, G3); - rgb4 = _mm_packus_epi16(B0, B1); - rgb5 = _mm_packus_epi16(B2, B3); - - // Pack as RGBRGBRGBRGB. - PlanarTo24b_SSE2(&rgb0, &rgb1, &rgb2, &rgb3, &rgb4, &rgb5, dst); -} - -void VP8YuvToBgr32_SSE2(const uint8_t* y, const uint8_t* u, const uint8_t* v, - uint8_t* dst) { - __m128i R0, R1, R2, R3, G0, G1, G2, G3, B0, B1, B2, B3; - __m128i bgr0, bgr1, bgr2, bgr3, bgr4, bgr5; - - YUV444ToRGB_SSE2(y + 0, u + 0, v + 0, &R0, &G0, &B0); - YUV444ToRGB_SSE2(y + 8, u + 8, v + 8, &R1, &G1, &B1); - YUV444ToRGB_SSE2(y + 16, u + 16, v + 16, &R2, &G2, &B2); - YUV444ToRGB_SSE2(y + 24, u + 24, v + 24, &R3, &G3, &B3); - - // Cast to 8b and store as BBBBGGGGRRRR. - bgr0 = _mm_packus_epi16(B0, B1); - bgr1 = _mm_packus_epi16(B2, B3); - bgr2 = _mm_packus_epi16(G0, G1); - bgr3 = _mm_packus_epi16(G2, G3); - bgr4 = _mm_packus_epi16(R0, R1); - bgr5= _mm_packus_epi16(R2, R3); - - // Pack as BGRBGRBGRBGR. - PlanarTo24b_SSE2(&bgr0, &bgr1, &bgr2, &bgr3, &bgr4, &bgr5, dst); -} - -//----------------------------------------------------------------------------- -// Arbitrary-length row conversion functions - -static void YuvToRgbaRow_SSE2(const uint8_t* y, - const uint8_t* u, const uint8_t* v, - uint8_t* dst, int len) { - const __m128i kAlpha = _mm_set1_epi16(255); - int n; - for (n = 0; n + 8 <= len; n += 8, dst += 32) { - __m128i R, G, B; - YUV420ToRGB_SSE2(y, u, v, &R, &G, &B); - PackAndStore4_SSE2(&R, &G, &B, &kAlpha, dst); - y += 8; - u += 4; - v += 4; - } - for (; n < len; ++n) { // Finish off - VP8YuvToRgba(y[0], u[0], v[0], dst); - dst += 4; - y += 1; - u += (n & 1); - v += (n & 1); - } -} - -static void YuvToBgraRow_SSE2(const uint8_t* y, - const uint8_t* u, const uint8_t* v, - uint8_t* dst, int len) { - const __m128i kAlpha = _mm_set1_epi16(255); - int n; - for (n = 0; n + 8 <= len; n += 8, dst += 32) { - __m128i R, G, B; - YUV420ToRGB_SSE2(y, u, v, &R, &G, &B); - PackAndStore4_SSE2(&B, &G, &R, &kAlpha, dst); - y += 8; - u += 4; - v += 4; - } - for (; n < len; ++n) { // Finish off - VP8YuvToBgra(y[0], u[0], v[0], dst); - dst += 4; - y += 1; - u += (n & 1); - v += (n & 1); - } -} - -static void YuvToArgbRow_SSE2(const uint8_t* y, - const uint8_t* u, const uint8_t* v, - uint8_t* dst, int len) { - const __m128i kAlpha = _mm_set1_epi16(255); - int n; - for (n = 0; n + 8 <= len; n += 8, dst += 32) { - __m128i R, G, B; - YUV420ToRGB_SSE2(y, u, v, &R, &G, &B); - PackAndStore4_SSE2(&kAlpha, &R, &G, &B, dst); - y += 8; - u += 4; - v += 4; - } - for (; n < len; ++n) { // Finish off - VP8YuvToArgb(y[0], u[0], v[0], dst); - dst += 4; - y += 1; - u += (n & 1); - v += (n & 1); - } -} - -static void YuvToRgbRow_SSE2(const uint8_t* y, - const uint8_t* u, const uint8_t* v, - uint8_t* dst, int len) { - int n; - for (n = 0; n + 32 <= len; n += 32, dst += 32 * 3) { - __m128i R0, R1, R2, R3, G0, G1, G2, G3, B0, B1, B2, B3; - __m128i rgb0, rgb1, rgb2, rgb3, rgb4, rgb5; - - YUV420ToRGB_SSE2(y + 0, u + 0, v + 0, &R0, &G0, &B0); - YUV420ToRGB_SSE2(y + 8, u + 4, v + 4, &R1, &G1, &B1); - YUV420ToRGB_SSE2(y + 16, u + 8, v + 8, &R2, &G2, &B2); - YUV420ToRGB_SSE2(y + 24, u + 12, v + 12, &R3, &G3, &B3); - - // Cast to 8b and store as RRRRGGGGBBBB. - rgb0 = _mm_packus_epi16(R0, R1); - rgb1 = _mm_packus_epi16(R2, R3); - rgb2 = _mm_packus_epi16(G0, G1); - rgb3 = _mm_packus_epi16(G2, G3); - rgb4 = _mm_packus_epi16(B0, B1); - rgb5 = _mm_packus_epi16(B2, B3); - - // Pack as RGBRGBRGBRGB. - PlanarTo24b_SSE2(&rgb0, &rgb1, &rgb2, &rgb3, &rgb4, &rgb5, dst); - - y += 32; - u += 16; - v += 16; - } - for (; n < len; ++n) { // Finish off - VP8YuvToRgb(y[0], u[0], v[0], dst); - dst += 3; - y += 1; - u += (n & 1); - v += (n & 1); - } -} - -static void YuvToBgrRow_SSE2(const uint8_t* y, - const uint8_t* u, const uint8_t* v, - uint8_t* dst, int len) { - int n; - for (n = 0; n + 32 <= len; n += 32, dst += 32 * 3) { - __m128i R0, R1, R2, R3, G0, G1, G2, G3, B0, B1, B2, B3; - __m128i bgr0, bgr1, bgr2, bgr3, bgr4, bgr5; - - YUV420ToRGB_SSE2(y + 0, u + 0, v + 0, &R0, &G0, &B0); - YUV420ToRGB_SSE2(y + 8, u + 4, v + 4, &R1, &G1, &B1); - YUV420ToRGB_SSE2(y + 16, u + 8, v + 8, &R2, &G2, &B2); - YUV420ToRGB_SSE2(y + 24, u + 12, v + 12, &R3, &G3, &B3); - - // Cast to 8b and store as BBBBGGGGRRRR. - bgr0 = _mm_packus_epi16(B0, B1); - bgr1 = _mm_packus_epi16(B2, B3); - bgr2 = _mm_packus_epi16(G0, G1); - bgr3 = _mm_packus_epi16(G2, G3); - bgr4 = _mm_packus_epi16(R0, R1); - bgr5 = _mm_packus_epi16(R2, R3); - - // Pack as BGRBGRBGRBGR. - PlanarTo24b_SSE2(&bgr0, &bgr1, &bgr2, &bgr3, &bgr4, &bgr5, dst); - - y += 32; - u += 16; - v += 16; - } - for (; n < len; ++n) { // Finish off - VP8YuvToBgr(y[0], u[0], v[0], dst); - dst += 3; - y += 1; - u += (n & 1); - v += (n & 1); - } -} - -//------------------------------------------------------------------------------ -// Entry point - -extern void WebPInitSamplersSSE2(void); - -WEBP_TSAN_IGNORE_FUNCTION void WebPInitSamplersSSE2(void) { - WebPSamplers[MODE_RGB] = YuvToRgbRow_SSE2; - WebPSamplers[MODE_RGBA] = YuvToRgbaRow_SSE2; - WebPSamplers[MODE_BGR] = YuvToBgrRow_SSE2; - WebPSamplers[MODE_BGRA] = YuvToBgraRow_SSE2; - WebPSamplers[MODE_ARGB] = YuvToArgbRow_SSE2; -} - -//------------------------------------------------------------------------------ -// RGB24/32 -> YUV converters - -// Load eight 16b-words from *src. -#define LOAD_16(src) _mm_loadu_si128((const __m128i*)(src)) -// Store either 16b-words into *dst -#define STORE_16(V, dst) _mm_storeu_si128((__m128i*)(dst), (V)) - -// Function that inserts a value of the second half of the in buffer in between -// every two char of the first half. -static WEBP_INLINE void RGB24PackedToPlanarHelper_SSE2( - const __m128i* const in /*in[6]*/, __m128i* const out /*out[6]*/) { - out[0] = _mm_unpacklo_epi8(in[0], in[3]); - out[1] = _mm_unpackhi_epi8(in[0], in[3]); - out[2] = _mm_unpacklo_epi8(in[1], in[4]); - out[3] = _mm_unpackhi_epi8(in[1], in[4]); - out[4] = _mm_unpacklo_epi8(in[2], in[5]); - out[5] = _mm_unpackhi_epi8(in[2], in[5]); -} - -// Unpack the 8b input rgbrgbrgbrgb ... as contiguous registers: -// rrrr... rrrr... gggg... gggg... bbbb... bbbb.... -// Similar to PlanarTo24bHelper(), but in reverse order. -static WEBP_INLINE void RGB24PackedToPlanar_SSE2( - const uint8_t* const rgb, __m128i* const out /*out[6]*/) { - __m128i tmp[6]; - tmp[0] = _mm_loadu_si128((const __m128i*)(rgb + 0)); - tmp[1] = _mm_loadu_si128((const __m128i*)(rgb + 16)); - tmp[2] = _mm_loadu_si128((const __m128i*)(rgb + 32)); - tmp[3] = _mm_loadu_si128((const __m128i*)(rgb + 48)); - tmp[4] = _mm_loadu_si128((const __m128i*)(rgb + 64)); - tmp[5] = _mm_loadu_si128((const __m128i*)(rgb + 80)); - - RGB24PackedToPlanarHelper_SSE2(tmp, out); - RGB24PackedToPlanarHelper_SSE2(out, tmp); - RGB24PackedToPlanarHelper_SSE2(tmp, out); - RGB24PackedToPlanarHelper_SSE2(out, tmp); - RGB24PackedToPlanarHelper_SSE2(tmp, out); -} - -// Convert 8 packed ARGB to r[], g[], b[] -static WEBP_INLINE void RGB32PackedToPlanar_SSE2(const uint32_t* const argb, - __m128i* const rgb /*in[6]*/) { - const __m128i zero = _mm_setzero_si128(); - __m128i a0 = LOAD_16(argb + 0); - __m128i a1 = LOAD_16(argb + 4); - __m128i a2 = LOAD_16(argb + 8); - __m128i a3 = LOAD_16(argb + 12); - VP8L32bToPlanar_SSE2(&a0, &a1, &a2, &a3); - rgb[0] = _mm_unpacklo_epi8(a1, zero); - rgb[1] = _mm_unpackhi_epi8(a1, zero); - rgb[2] = _mm_unpacklo_epi8(a2, zero); - rgb[3] = _mm_unpackhi_epi8(a2, zero); - rgb[4] = _mm_unpacklo_epi8(a3, zero); - rgb[5] = _mm_unpackhi_epi8(a3, zero); -} - -// This macro computes (RG * MULT_RG + GB * MULT_GB + ROUNDER) >> DESCALE_FIX -// It's a macro and not a function because we need to use immediate values with -// srai_epi32, e.g. -#define TRANSFORM(RG_LO, RG_HI, GB_LO, GB_HI, MULT_RG, MULT_GB, \ - ROUNDER, DESCALE_FIX, OUT) do { \ - const __m128i V0_lo = _mm_madd_epi16(RG_LO, MULT_RG); \ - const __m128i V0_hi = _mm_madd_epi16(RG_HI, MULT_RG); \ - const __m128i V1_lo = _mm_madd_epi16(GB_LO, MULT_GB); \ - const __m128i V1_hi = _mm_madd_epi16(GB_HI, MULT_GB); \ - const __m128i V2_lo = _mm_add_epi32(V0_lo, V1_lo); \ - const __m128i V2_hi = _mm_add_epi32(V0_hi, V1_hi); \ - const __m128i V3_lo = _mm_add_epi32(V2_lo, ROUNDER); \ - const __m128i V3_hi = _mm_add_epi32(V2_hi, ROUNDER); \ - const __m128i V5_lo = _mm_srai_epi32(V3_lo, DESCALE_FIX); \ - const __m128i V5_hi = _mm_srai_epi32(V3_hi, DESCALE_FIX); \ - (OUT) = _mm_packs_epi32(V5_lo, V5_hi); \ -} while (0) - -#define MK_CST_16(A, B) _mm_set_epi16((B), (A), (B), (A), (B), (A), (B), (A)) -static WEBP_INLINE void ConvertRGBToY_SSE2(const __m128i* const R, - const __m128i* const G, - const __m128i* const B, - __m128i* const Y) { - const __m128i kRG_y = MK_CST_16(16839, 33059 - 16384); - const __m128i kGB_y = MK_CST_16(16384, 6420); - const __m128i kHALF_Y = _mm_set1_epi32((16 << YUV_FIX) + YUV_HALF); - - const __m128i RG_lo = _mm_unpacklo_epi16(*R, *G); - const __m128i RG_hi = _mm_unpackhi_epi16(*R, *G); - const __m128i GB_lo = _mm_unpacklo_epi16(*G, *B); - const __m128i GB_hi = _mm_unpackhi_epi16(*G, *B); - TRANSFORM(RG_lo, RG_hi, GB_lo, GB_hi, kRG_y, kGB_y, kHALF_Y, YUV_FIX, *Y); -} - -static WEBP_INLINE void ConvertRGBToUV_SSE2(const __m128i* const R, - const __m128i* const G, - const __m128i* const B, - __m128i* const U, - __m128i* const V) { - const __m128i kRG_u = MK_CST_16(-9719, -19081); - const __m128i kGB_u = MK_CST_16(0, 28800); - const __m128i kRG_v = MK_CST_16(28800, 0); - const __m128i kGB_v = MK_CST_16(-24116, -4684); - const __m128i kHALF_UV = _mm_set1_epi32(((128 << YUV_FIX) + YUV_HALF) << 2); - - const __m128i RG_lo = _mm_unpacklo_epi16(*R, *G); - const __m128i RG_hi = _mm_unpackhi_epi16(*R, *G); - const __m128i GB_lo = _mm_unpacklo_epi16(*G, *B); - const __m128i GB_hi = _mm_unpackhi_epi16(*G, *B); - TRANSFORM(RG_lo, RG_hi, GB_lo, GB_hi, kRG_u, kGB_u, - kHALF_UV, YUV_FIX + 2, *U); - TRANSFORM(RG_lo, RG_hi, GB_lo, GB_hi, kRG_v, kGB_v, - kHALF_UV, YUV_FIX + 2, *V); -} - -#undef MK_CST_16 -#undef TRANSFORM - -static void ConvertRGB24ToY_SSE2(const uint8_t* rgb, uint8_t* y, int width) { - const int max_width = width & ~31; - int i; - for (i = 0; i < max_width; rgb += 3 * 16 * 2) { - __m128i rgb_plane[6]; - int j; - - RGB24PackedToPlanar_SSE2(rgb, rgb_plane); - - for (j = 0; j < 2; ++j, i += 16) { - const __m128i zero = _mm_setzero_si128(); - __m128i r, g, b, Y0, Y1; - - // Convert to 16-bit Y. - r = _mm_unpacklo_epi8(rgb_plane[0 + j], zero); - g = _mm_unpacklo_epi8(rgb_plane[2 + j], zero); - b = _mm_unpacklo_epi8(rgb_plane[4 + j], zero); - ConvertRGBToY_SSE2(&r, &g, &b, &Y0); - - // Convert to 16-bit Y. - r = _mm_unpackhi_epi8(rgb_plane[0 + j], zero); - g = _mm_unpackhi_epi8(rgb_plane[2 + j], zero); - b = _mm_unpackhi_epi8(rgb_plane[4 + j], zero); - ConvertRGBToY_SSE2(&r, &g, &b, &Y1); - - // Cast to 8-bit and store. - STORE_16(_mm_packus_epi16(Y0, Y1), y + i); - } - } - for (; i < width; ++i, rgb += 3) { // left-over - y[i] = VP8RGBToY(rgb[0], rgb[1], rgb[2], YUV_HALF); - } -} - -static void ConvertBGR24ToY_SSE2(const uint8_t* bgr, uint8_t* y, int width) { - const int max_width = width & ~31; - int i; - for (i = 0; i < max_width; bgr += 3 * 16 * 2) { - __m128i bgr_plane[6]; - int j; - - RGB24PackedToPlanar_SSE2(bgr, bgr_plane); - - for (j = 0; j < 2; ++j, i += 16) { - const __m128i zero = _mm_setzero_si128(); - __m128i r, g, b, Y0, Y1; - - // Convert to 16-bit Y. - b = _mm_unpacklo_epi8(bgr_plane[0 + j], zero); - g = _mm_unpacklo_epi8(bgr_plane[2 + j], zero); - r = _mm_unpacklo_epi8(bgr_plane[4 + j], zero); - ConvertRGBToY_SSE2(&r, &g, &b, &Y0); - - // Convert to 16-bit Y. - b = _mm_unpackhi_epi8(bgr_plane[0 + j], zero); - g = _mm_unpackhi_epi8(bgr_plane[2 + j], zero); - r = _mm_unpackhi_epi8(bgr_plane[4 + j], zero); - ConvertRGBToY_SSE2(&r, &g, &b, &Y1); - - // Cast to 8-bit and store. - STORE_16(_mm_packus_epi16(Y0, Y1), y + i); - } - } - for (; i < width; ++i, bgr += 3) { // left-over - y[i] = VP8RGBToY(bgr[2], bgr[1], bgr[0], YUV_HALF); - } -} - -static void ConvertARGBToY_SSE2(const uint32_t* argb, uint8_t* y, int width) { - const int max_width = width & ~15; - int i; - for (i = 0; i < max_width; i += 16) { - __m128i Y0, Y1, rgb[6]; - RGB32PackedToPlanar_SSE2(&argb[i], rgb); - ConvertRGBToY_SSE2(&rgb[0], &rgb[2], &rgb[4], &Y0); - ConvertRGBToY_SSE2(&rgb[1], &rgb[3], &rgb[5], &Y1); - STORE_16(_mm_packus_epi16(Y0, Y1), y + i); - } - for (; i < width; ++i) { // left-over - const uint32_t p = argb[i]; - y[i] = VP8RGBToY((p >> 16) & 0xff, (p >> 8) & 0xff, (p >> 0) & 0xff, - YUV_HALF); - } -} - -// Horizontal add (doubled) of two 16b values, result is 16b. -// in: A | B | C | D | ... -> out: 2*(A+B) | 2*(C+D) | ... -static void HorizontalAddPack_SSE2(const __m128i* const A, - const __m128i* const B, - __m128i* const out) { - const __m128i k2 = _mm_set1_epi16(2); - const __m128i C = _mm_madd_epi16(*A, k2); - const __m128i D = _mm_madd_epi16(*B, k2); - *out = _mm_packs_epi32(C, D); -} - -static void ConvertARGBToUV_SSE2(const uint32_t* argb, - uint8_t* u, uint8_t* v, - int src_width, int do_store) { - const int max_width = src_width & ~31; - int i; - for (i = 0; i < max_width; i += 32, u += 16, v += 16) { - __m128i rgb[6], U0, V0, U1, V1; - RGB32PackedToPlanar_SSE2(&argb[i], rgb); - HorizontalAddPack_SSE2(&rgb[0], &rgb[1], &rgb[0]); - HorizontalAddPack_SSE2(&rgb[2], &rgb[3], &rgb[2]); - HorizontalAddPack_SSE2(&rgb[4], &rgb[5], &rgb[4]); - ConvertRGBToUV_SSE2(&rgb[0], &rgb[2], &rgb[4], &U0, &V0); - - RGB32PackedToPlanar_SSE2(&argb[i + 16], rgb); - HorizontalAddPack_SSE2(&rgb[0], &rgb[1], &rgb[0]); - HorizontalAddPack_SSE2(&rgb[2], &rgb[3], &rgb[2]); - HorizontalAddPack_SSE2(&rgb[4], &rgb[5], &rgb[4]); - ConvertRGBToUV_SSE2(&rgb[0], &rgb[2], &rgb[4], &U1, &V1); - - U0 = _mm_packus_epi16(U0, U1); - V0 = _mm_packus_epi16(V0, V1); - if (!do_store) { - const __m128i prev_u = LOAD_16(u); - const __m128i prev_v = LOAD_16(v); - U0 = _mm_avg_epu8(U0, prev_u); - V0 = _mm_avg_epu8(V0, prev_v); - } - STORE_16(U0, u); - STORE_16(V0, v); - } - if (i < src_width) { // left-over - WebPConvertARGBToUV_C(argb + i, u, v, src_width - i, do_store); - } -} - -// Convert 16 packed ARGB 16b-values to r[], g[], b[] -static WEBP_INLINE void RGBA32PackedToPlanar_16b_SSE2( - const uint16_t* const rgbx, - __m128i* const r, __m128i* const g, __m128i* const b) { - const __m128i in0 = LOAD_16(rgbx + 0); // r0 | g0 | b0 |x| r1 | g1 | b1 |x - const __m128i in1 = LOAD_16(rgbx + 8); // r2 | g2 | b2 |x| r3 | g3 | b3 |x - const __m128i in2 = LOAD_16(rgbx + 16); // r4 | ... - const __m128i in3 = LOAD_16(rgbx + 24); // r6 | ... - // column-wise transpose - const __m128i A0 = _mm_unpacklo_epi16(in0, in1); - const __m128i A1 = _mm_unpackhi_epi16(in0, in1); - const __m128i A2 = _mm_unpacklo_epi16(in2, in3); - const __m128i A3 = _mm_unpackhi_epi16(in2, in3); - const __m128i B0 = _mm_unpacklo_epi16(A0, A1); // r0 r1 r2 r3 | g0 g1 .. - const __m128i B1 = _mm_unpackhi_epi16(A0, A1); // b0 b1 b2 b3 | x x x x - const __m128i B2 = _mm_unpacklo_epi16(A2, A3); // r4 r5 r6 r7 | g4 g5 .. - const __m128i B3 = _mm_unpackhi_epi16(A2, A3); // b4 b5 b6 b7 | x x x x - *r = _mm_unpacklo_epi64(B0, B2); - *g = _mm_unpackhi_epi64(B0, B2); - *b = _mm_unpacklo_epi64(B1, B3); -} - -static void ConvertRGBA32ToUV_SSE2(const uint16_t* rgb, - uint8_t* u, uint8_t* v, int width) { - const int max_width = width & ~15; - const uint16_t* const last_rgb = rgb + 4 * max_width; - while (rgb < last_rgb) { - __m128i r, g, b, U0, V0, U1, V1; - RGBA32PackedToPlanar_16b_SSE2(rgb + 0, &r, &g, &b); - ConvertRGBToUV_SSE2(&r, &g, &b, &U0, &V0); - RGBA32PackedToPlanar_16b_SSE2(rgb + 32, &r, &g, &b); - ConvertRGBToUV_SSE2(&r, &g, &b, &U1, &V1); - STORE_16(_mm_packus_epi16(U0, U1), u); - STORE_16(_mm_packus_epi16(V0, V1), v); - u += 16; - v += 16; - rgb += 2 * 32; - } - if (max_width < width) { // left-over - WebPConvertRGBA32ToUV_C(rgb, u, v, width - max_width); - } -} - -//------------------------------------------------------------------------------ - -extern void WebPInitConvertARGBToYUVSSE2(void); - -WEBP_TSAN_IGNORE_FUNCTION void WebPInitConvertARGBToYUVSSE2(void) { - WebPConvertARGBToY = ConvertARGBToY_SSE2; - WebPConvertARGBToUV = ConvertARGBToUV_SSE2; - - WebPConvertRGB24ToY = ConvertRGB24ToY_SSE2; - WebPConvertBGR24ToY = ConvertBGR24ToY_SSE2; - - WebPConvertRGBA32ToUV = ConvertRGBA32ToUV_SSE2; -} - -//------------------------------------------------------------------------------ - -#define MAX_Y ((1 << 10) - 1) // 10b precision over 16b-arithmetic -static uint16_t clip_y(int v) { - return (v < 0) ? 0 : (v > MAX_Y) ? MAX_Y : (uint16_t)v; -} - -static uint64_t SharpYUVUpdateY_SSE2(const uint16_t* ref, const uint16_t* src, - uint16_t* dst, int len) { - uint64_t diff = 0; - uint32_t tmp[4]; - int i; - const __m128i zero = _mm_setzero_si128(); - const __m128i max = _mm_set1_epi16(MAX_Y); - const __m128i one = _mm_set1_epi16(1); - __m128i sum = zero; - - for (i = 0; i + 8 <= len; i += 8) { - const __m128i A = _mm_loadu_si128((const __m128i*)(ref + i)); - const __m128i B = _mm_loadu_si128((const __m128i*)(src + i)); - const __m128i C = _mm_loadu_si128((const __m128i*)(dst + i)); - const __m128i D = _mm_sub_epi16(A, B); // diff_y - const __m128i E = _mm_cmpgt_epi16(zero, D); // sign (-1 or 0) - const __m128i F = _mm_add_epi16(C, D); // new_y - const __m128i G = _mm_or_si128(E, one); // -1 or 1 - const __m128i H = _mm_max_epi16(_mm_min_epi16(F, max), zero); - const __m128i I = _mm_madd_epi16(D, G); // sum(abs(...)) - _mm_storeu_si128((__m128i*)(dst + i), H); - sum = _mm_add_epi32(sum, I); - } - _mm_storeu_si128((__m128i*)tmp, sum); - diff = tmp[3] + tmp[2] + tmp[1] + tmp[0]; - for (; i < len; ++i) { - const int diff_y = ref[i] - src[i]; - const int new_y = (int)dst[i] + diff_y; - dst[i] = clip_y(new_y); - diff += (uint64_t)abs(diff_y); - } - return diff; -} - -static void SharpYUVUpdateRGB_SSE2(const int16_t* ref, const int16_t* src, - int16_t* dst, int len) { - int i = 0; - for (i = 0; i + 8 <= len; i += 8) { - const __m128i A = _mm_loadu_si128((const __m128i*)(ref + i)); - const __m128i B = _mm_loadu_si128((const __m128i*)(src + i)); - const __m128i C = _mm_loadu_si128((const __m128i*)(dst + i)); - const __m128i D = _mm_sub_epi16(A, B); // diff_uv - const __m128i E = _mm_add_epi16(C, D); // new_uv - _mm_storeu_si128((__m128i*)(dst + i), E); - } - for (; i < len; ++i) { - const int diff_uv = ref[i] - src[i]; - dst[i] += diff_uv; - } -} - -static void SharpYUVFilterRow_SSE2(const int16_t* A, const int16_t* B, int len, - const uint16_t* best_y, uint16_t* out) { - int i; - const __m128i kCst8 = _mm_set1_epi16(8); - const __m128i max = _mm_set1_epi16(MAX_Y); - const __m128i zero = _mm_setzero_si128(); - for (i = 0; i + 8 <= len; i += 8) { - const __m128i a0 = _mm_loadu_si128((const __m128i*)(A + i + 0)); - const __m128i a1 = _mm_loadu_si128((const __m128i*)(A + i + 1)); - const __m128i b0 = _mm_loadu_si128((const __m128i*)(B + i + 0)); - const __m128i b1 = _mm_loadu_si128((const __m128i*)(B + i + 1)); - const __m128i a0b1 = _mm_add_epi16(a0, b1); - const __m128i a1b0 = _mm_add_epi16(a1, b0); - const __m128i a0a1b0b1 = _mm_add_epi16(a0b1, a1b0); // A0+A1+B0+B1 - const __m128i a0a1b0b1_8 = _mm_add_epi16(a0a1b0b1, kCst8); - const __m128i a0b1_2 = _mm_add_epi16(a0b1, a0b1); // 2*(A0+B1) - const __m128i a1b0_2 = _mm_add_epi16(a1b0, a1b0); // 2*(A1+B0) - const __m128i c0 = _mm_srai_epi16(_mm_add_epi16(a0b1_2, a0a1b0b1_8), 3); - const __m128i c1 = _mm_srai_epi16(_mm_add_epi16(a1b0_2, a0a1b0b1_8), 3); - const __m128i d0 = _mm_add_epi16(c1, a0); - const __m128i d1 = _mm_add_epi16(c0, a1); - const __m128i e0 = _mm_srai_epi16(d0, 1); - const __m128i e1 = _mm_srai_epi16(d1, 1); - const __m128i f0 = _mm_unpacklo_epi16(e0, e1); - const __m128i f1 = _mm_unpackhi_epi16(e0, e1); - const __m128i g0 = _mm_loadu_si128((const __m128i*)(best_y + 2 * i + 0)); - const __m128i g1 = _mm_loadu_si128((const __m128i*)(best_y + 2 * i + 8)); - const __m128i h0 = _mm_add_epi16(g0, f0); - const __m128i h1 = _mm_add_epi16(g1, f1); - const __m128i i0 = _mm_max_epi16(_mm_min_epi16(h0, max), zero); - const __m128i i1 = _mm_max_epi16(_mm_min_epi16(h1, max), zero); - _mm_storeu_si128((__m128i*)(out + 2 * i + 0), i0); - _mm_storeu_si128((__m128i*)(out + 2 * i + 8), i1); - } - for (; i < len; ++i) { - // (9 * A0 + 3 * A1 + 3 * B0 + B1 + 8) >> 4 = - // = (8 * A0 + 2 * (A1 + B0) + (A0 + A1 + B0 + B1 + 8)) >> 4 - // We reuse the common sub-expressions. - const int a0b1 = A[i + 0] + B[i + 1]; - const int a1b0 = A[i + 1] + B[i + 0]; - const int a0a1b0b1 = a0b1 + a1b0 + 8; - const int v0 = (8 * A[i + 0] + 2 * a1b0 + a0a1b0b1) >> 4; - const int v1 = (8 * A[i + 1] + 2 * a0b1 + a0a1b0b1) >> 4; - out[2 * i + 0] = clip_y(best_y[2 * i + 0] + v0); - out[2 * i + 1] = clip_y(best_y[2 * i + 1] + v1); - } -} - -#undef MAX_Y - -//------------------------------------------------------------------------------ - -extern void WebPInitSharpYUVSSE2(void); - -WEBP_TSAN_IGNORE_FUNCTION void WebPInitSharpYUVSSE2(void) { - WebPSharpYUVUpdateY = SharpYUVUpdateY_SSE2; - WebPSharpYUVUpdateRGB = SharpYUVUpdateRGB_SSE2; - WebPSharpYUVFilterRow = SharpYUVFilterRow_SSE2; -} - -#else // !WEBP_USE_SSE2 - -WEBP_DSP_INIT_STUB(WebPInitSamplersSSE2) -WEBP_DSP_INIT_STUB(WebPInitConvertARGBToYUVSSE2) -WEBP_DSP_INIT_STUB(WebPInitSharpYUVSSE2) - -#endif // WEBP_USE_SSE2 diff --git a/Extended/libwebp/src/dsp/yuv_sse41.c b/Extended/libwebp/src/dsp/yuv_sse41.c deleted file mode 100644 index 579d1f7..0000000 --- a/Extended/libwebp/src/dsp/yuv_sse41.c +++ /dev/null @@ -1,613 +0,0 @@ -// Copyright 2014 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// YUV->RGB conversion functions -// -// Author: Skal (pascal.massimino@gmail.com) - -#include "src/dsp/yuv.h" - -#if defined(WEBP_USE_SSE41) - -#include "src/dsp/common_sse41.h" -#include -#include - -//----------------------------------------------------------------------------- -// Convert spans of 32 pixels to various RGB formats for the fancy upsampler. - -// These constants are 14b fixed-point version of ITU-R BT.601 constants. -// R = (19077 * y + 26149 * v - 14234) >> 6 -// G = (19077 * y - 6419 * u - 13320 * v + 8708) >> 6 -// B = (19077 * y + 33050 * u - 17685) >> 6 -static void ConvertYUV444ToRGB_SSE41(const __m128i* const Y0, - const __m128i* const U0, - const __m128i* const V0, - __m128i* const R, - __m128i* const G, - __m128i* const B) { - const __m128i k19077 = _mm_set1_epi16(19077); - const __m128i k26149 = _mm_set1_epi16(26149); - const __m128i k14234 = _mm_set1_epi16(14234); - // 33050 doesn't fit in a signed short: only use this with unsigned arithmetic - const __m128i k33050 = _mm_set1_epi16((short)33050); - const __m128i k17685 = _mm_set1_epi16(17685); - const __m128i k6419 = _mm_set1_epi16(6419); - const __m128i k13320 = _mm_set1_epi16(13320); - const __m128i k8708 = _mm_set1_epi16(8708); - - const __m128i Y1 = _mm_mulhi_epu16(*Y0, k19077); - - const __m128i R0 = _mm_mulhi_epu16(*V0, k26149); - const __m128i R1 = _mm_sub_epi16(Y1, k14234); - const __m128i R2 = _mm_add_epi16(R1, R0); - - const __m128i G0 = _mm_mulhi_epu16(*U0, k6419); - const __m128i G1 = _mm_mulhi_epu16(*V0, k13320); - const __m128i G2 = _mm_add_epi16(Y1, k8708); - const __m128i G3 = _mm_add_epi16(G0, G1); - const __m128i G4 = _mm_sub_epi16(G2, G3); - - // be careful with the saturated *unsigned* arithmetic here! - const __m128i B0 = _mm_mulhi_epu16(*U0, k33050); - const __m128i B1 = _mm_adds_epu16(B0, Y1); - const __m128i B2 = _mm_subs_epu16(B1, k17685); - - // use logical shift for B2, which can be larger than 32767 - *R = _mm_srai_epi16(R2, 6); // range: [-14234, 30815] - *G = _mm_srai_epi16(G4, 6); // range: [-10953, 27710] - *B = _mm_srli_epi16(B2, 6); // range: [0, 34238] -} - -// Load the bytes into the *upper* part of 16b words. That's "<< 8", basically. -static WEBP_INLINE __m128i Load_HI_16_SSE41(const uint8_t* src) { - const __m128i zero = _mm_setzero_si128(); - return _mm_unpacklo_epi8(zero, _mm_loadl_epi64((const __m128i*)src)); -} - -// Load and replicate the U/V samples -static WEBP_INLINE __m128i Load_UV_HI_8_SSE41(const uint8_t* src) { - const __m128i zero = _mm_setzero_si128(); - const __m128i tmp0 = _mm_cvtsi32_si128(*(const uint32_t*)src); - const __m128i tmp1 = _mm_unpacklo_epi8(zero, tmp0); - return _mm_unpacklo_epi16(tmp1, tmp1); // replicate samples -} - -// Convert 32 samples of YUV444 to R/G/B -static void YUV444ToRGB_SSE41(const uint8_t* const y, - const uint8_t* const u, - const uint8_t* const v, - __m128i* const R, __m128i* const G, - __m128i* const B) { - const __m128i Y0 = Load_HI_16_SSE41(y), U0 = Load_HI_16_SSE41(u), - V0 = Load_HI_16_SSE41(v); - ConvertYUV444ToRGB_SSE41(&Y0, &U0, &V0, R, G, B); -} - -// Convert 32 samples of YUV420 to R/G/B -static void YUV420ToRGB_SSE41(const uint8_t* const y, - const uint8_t* const u, - const uint8_t* const v, - __m128i* const R, __m128i* const G, - __m128i* const B) { - const __m128i Y0 = Load_HI_16_SSE41(y), U0 = Load_UV_HI_8_SSE41(u), - V0 = Load_UV_HI_8_SSE41(v); - ConvertYUV444ToRGB_SSE41(&Y0, &U0, &V0, R, G, B); -} - -// Pack the planar buffers -// rrrr... rrrr... gggg... gggg... bbbb... bbbb.... -// triplet by triplet in the output buffer rgb as rgbrgbrgbrgb ... -static WEBP_INLINE void PlanarTo24b_SSE41( - __m128i* const in0, __m128i* const in1, __m128i* const in2, - __m128i* const in3, __m128i* const in4, __m128i* const in5, - uint8_t* const rgb) { - // The input is 6 registers of sixteen 8b but for the sake of explanation, - // let's take 6 registers of four 8b values. - // To pack, we will keep taking one every two 8b integer and move it - // around as follows: - // Input: - // r0r1r2r3 | r4r5r6r7 | g0g1g2g3 | g4g5g6g7 | b0b1b2b3 | b4b5b6b7 - // Split the 6 registers in two sets of 3 registers: the first set as the even - // 8b bytes, the second the odd ones: - // r0r2r4r6 | g0g2g4g6 | b0b2b4b6 | r1r3r5r7 | g1g3g5g7 | b1b3b5b7 - // Repeat the same permutations twice more: - // r0r4g0g4 | b0b4r1r5 | g1g5b1b5 | r2r6g2g6 | b2b6r3r7 | g3g7b3b7 - // r0g0b0r1 | g1b1r2g2 | b2r3g3b3 | r4g4b4r5 | g5b5r6g6 | b6r7g7b7 - VP8PlanarTo24b_SSE41(in0, in1, in2, in3, in4, in5); - - _mm_storeu_si128((__m128i*)(rgb + 0), *in0); - _mm_storeu_si128((__m128i*)(rgb + 16), *in1); - _mm_storeu_si128((__m128i*)(rgb + 32), *in2); - _mm_storeu_si128((__m128i*)(rgb + 48), *in3); - _mm_storeu_si128((__m128i*)(rgb + 64), *in4); - _mm_storeu_si128((__m128i*)(rgb + 80), *in5); -} - -void VP8YuvToRgb32_SSE41(const uint8_t* y, const uint8_t* u, const uint8_t* v, - uint8_t* dst) { - __m128i R0, R1, R2, R3, G0, G1, G2, G3, B0, B1, B2, B3; - __m128i rgb0, rgb1, rgb2, rgb3, rgb4, rgb5; - - YUV444ToRGB_SSE41(y + 0, u + 0, v + 0, &R0, &G0, &B0); - YUV444ToRGB_SSE41(y + 8, u + 8, v + 8, &R1, &G1, &B1); - YUV444ToRGB_SSE41(y + 16, u + 16, v + 16, &R2, &G2, &B2); - YUV444ToRGB_SSE41(y + 24, u + 24, v + 24, &R3, &G3, &B3); - - // Cast to 8b and store as RRRRGGGGBBBB. - rgb0 = _mm_packus_epi16(R0, R1); - rgb1 = _mm_packus_epi16(R2, R3); - rgb2 = _mm_packus_epi16(G0, G1); - rgb3 = _mm_packus_epi16(G2, G3); - rgb4 = _mm_packus_epi16(B0, B1); - rgb5 = _mm_packus_epi16(B2, B3); - - // Pack as RGBRGBRGBRGB. - PlanarTo24b_SSE41(&rgb0, &rgb1, &rgb2, &rgb3, &rgb4, &rgb5, dst); -} - -void VP8YuvToBgr32_SSE41(const uint8_t* y, const uint8_t* u, const uint8_t* v, - uint8_t* dst) { - __m128i R0, R1, R2, R3, G0, G1, G2, G3, B0, B1, B2, B3; - __m128i bgr0, bgr1, bgr2, bgr3, bgr4, bgr5; - - YUV444ToRGB_SSE41(y + 0, u + 0, v + 0, &R0, &G0, &B0); - YUV444ToRGB_SSE41(y + 8, u + 8, v + 8, &R1, &G1, &B1); - YUV444ToRGB_SSE41(y + 16, u + 16, v + 16, &R2, &G2, &B2); - YUV444ToRGB_SSE41(y + 24, u + 24, v + 24, &R3, &G3, &B3); - - // Cast to 8b and store as BBBBGGGGRRRR. - bgr0 = _mm_packus_epi16(B0, B1); - bgr1 = _mm_packus_epi16(B2, B3); - bgr2 = _mm_packus_epi16(G0, G1); - bgr3 = _mm_packus_epi16(G2, G3); - bgr4 = _mm_packus_epi16(R0, R1); - bgr5= _mm_packus_epi16(R2, R3); - - // Pack as BGRBGRBGRBGR. - PlanarTo24b_SSE41(&bgr0, &bgr1, &bgr2, &bgr3, &bgr4, &bgr5, dst); -} - -//----------------------------------------------------------------------------- -// Arbitrary-length row conversion functions - -static void YuvToRgbRow_SSE41(const uint8_t* y, - const uint8_t* u, const uint8_t* v, - uint8_t* dst, int len) { - int n; - for (n = 0; n + 32 <= len; n += 32, dst += 32 * 3) { - __m128i R0, R1, R2, R3, G0, G1, G2, G3, B0, B1, B2, B3; - __m128i rgb0, rgb1, rgb2, rgb3, rgb4, rgb5; - - YUV420ToRGB_SSE41(y + 0, u + 0, v + 0, &R0, &G0, &B0); - YUV420ToRGB_SSE41(y + 8, u + 4, v + 4, &R1, &G1, &B1); - YUV420ToRGB_SSE41(y + 16, u + 8, v + 8, &R2, &G2, &B2); - YUV420ToRGB_SSE41(y + 24, u + 12, v + 12, &R3, &G3, &B3); - - // Cast to 8b and store as RRRRGGGGBBBB. - rgb0 = _mm_packus_epi16(R0, R1); - rgb1 = _mm_packus_epi16(R2, R3); - rgb2 = _mm_packus_epi16(G0, G1); - rgb3 = _mm_packus_epi16(G2, G3); - rgb4 = _mm_packus_epi16(B0, B1); - rgb5 = _mm_packus_epi16(B2, B3); - - // Pack as RGBRGBRGBRGB. - PlanarTo24b_SSE41(&rgb0, &rgb1, &rgb2, &rgb3, &rgb4, &rgb5, dst); - - y += 32; - u += 16; - v += 16; - } - for (; n < len; ++n) { // Finish off - VP8YuvToRgb(y[0], u[0], v[0], dst); - dst += 3; - y += 1; - u += (n & 1); - v += (n & 1); - } -} - -static void YuvToBgrRow_SSE41(const uint8_t* y, - const uint8_t* u, const uint8_t* v, - uint8_t* dst, int len) { - int n; - for (n = 0; n + 32 <= len; n += 32, dst += 32 * 3) { - __m128i R0, R1, R2, R3, G0, G1, G2, G3, B0, B1, B2, B3; - __m128i bgr0, bgr1, bgr2, bgr3, bgr4, bgr5; - - YUV420ToRGB_SSE41(y + 0, u + 0, v + 0, &R0, &G0, &B0); - YUV420ToRGB_SSE41(y + 8, u + 4, v + 4, &R1, &G1, &B1); - YUV420ToRGB_SSE41(y + 16, u + 8, v + 8, &R2, &G2, &B2); - YUV420ToRGB_SSE41(y + 24, u + 12, v + 12, &R3, &G3, &B3); - - // Cast to 8b and store as BBBBGGGGRRRR. - bgr0 = _mm_packus_epi16(B0, B1); - bgr1 = _mm_packus_epi16(B2, B3); - bgr2 = _mm_packus_epi16(G0, G1); - bgr3 = _mm_packus_epi16(G2, G3); - bgr4 = _mm_packus_epi16(R0, R1); - bgr5 = _mm_packus_epi16(R2, R3); - - // Pack as BGRBGRBGRBGR. - PlanarTo24b_SSE41(&bgr0, &bgr1, &bgr2, &bgr3, &bgr4, &bgr5, dst); - - y += 32; - u += 16; - v += 16; - } - for (; n < len; ++n) { // Finish off - VP8YuvToBgr(y[0], u[0], v[0], dst); - dst += 3; - y += 1; - u += (n & 1); - v += (n & 1); - } -} - -//------------------------------------------------------------------------------ -// Entry point - -extern void WebPInitSamplersSSE41(void); - -WEBP_TSAN_IGNORE_FUNCTION void WebPInitSamplersSSE41(void) { - WebPSamplers[MODE_RGB] = YuvToRgbRow_SSE41; - WebPSamplers[MODE_BGR] = YuvToBgrRow_SSE41; -} - -//------------------------------------------------------------------------------ -// RGB24/32 -> YUV converters - -// Load eight 16b-words from *src. -#define LOAD_16(src) _mm_loadu_si128((const __m128i*)(src)) -// Store either 16b-words into *dst -#define STORE_16(V, dst) _mm_storeu_si128((__m128i*)(dst), (V)) - -#define WEBP_SSE41_SHUFF(OUT) do { \ - const __m128i tmp0 = _mm_shuffle_epi8(A0, shuff0); \ - const __m128i tmp1 = _mm_shuffle_epi8(A1, shuff1); \ - const __m128i tmp2 = _mm_shuffle_epi8(A2, shuff2); \ - const __m128i tmp3 = _mm_shuffle_epi8(A3, shuff0); \ - const __m128i tmp4 = _mm_shuffle_epi8(A4, shuff1); \ - const __m128i tmp5 = _mm_shuffle_epi8(A5, shuff2); \ - \ - /* OR everything to get one channel */ \ - const __m128i tmp6 = _mm_or_si128(tmp0, tmp1); \ - const __m128i tmp7 = _mm_or_si128(tmp3, tmp4); \ - out[OUT + 0] = _mm_or_si128(tmp6, tmp2); \ - out[OUT + 1] = _mm_or_si128(tmp7, tmp5); \ -} while (0); - -// Unpack the 8b input rgbrgbrgbrgb ... as contiguous registers: -// rrrr... rrrr... gggg... gggg... bbbb... bbbb.... -// Similar to PlanarTo24bHelper(), but in reverse order. -static WEBP_INLINE void RGB24PackedToPlanar_SSE41( - const uint8_t* const rgb, __m128i* const out /*out[6]*/) { - const __m128i A0 = _mm_loadu_si128((const __m128i*)(rgb + 0)); - const __m128i A1 = _mm_loadu_si128((const __m128i*)(rgb + 16)); - const __m128i A2 = _mm_loadu_si128((const __m128i*)(rgb + 32)); - const __m128i A3 = _mm_loadu_si128((const __m128i*)(rgb + 48)); - const __m128i A4 = _mm_loadu_si128((const __m128i*)(rgb + 64)); - const __m128i A5 = _mm_loadu_si128((const __m128i*)(rgb + 80)); - - // Compute RR. - { - const __m128i shuff0 = _mm_set_epi8( - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 15, 12, 9, 6, 3, 0); - const __m128i shuff1 = _mm_set_epi8( - -1, -1, -1, -1, -1, 14, 11, 8, 5, 2, -1, -1, -1, -1, -1, -1); - const __m128i shuff2 = _mm_set_epi8( - 13, 10, 7, 4, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1); - WEBP_SSE41_SHUFF(0) - } - // Compute GG. - { - const __m128i shuff0 = _mm_set_epi8( - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 13, 10, 7, 4, 1); - const __m128i shuff1 = _mm_set_epi8( - -1, -1, -1, -1, -1, 15, 12, 9, 6, 3, 0, -1, -1, -1, -1, -1); - const __m128i shuff2 = _mm_set_epi8( - 14, 11, 8, 5, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1); - WEBP_SSE41_SHUFF(2) - } - // Compute BB. - { - const __m128i shuff0 = _mm_set_epi8( - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 14, 11, 8, 5, 2); - const __m128i shuff1 = _mm_set_epi8( - -1, -1, -1, -1, -1, -1, 13, 10, 7, 4, 1, -1, -1, -1, -1, -1); - const __m128i shuff2 = _mm_set_epi8( - 15, 12, 9, 6, 3, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1); - WEBP_SSE41_SHUFF(4) - } -} - -#undef WEBP_SSE41_SHUFF - -// Convert 8 packed ARGB to r[], g[], b[] -static WEBP_INLINE void RGB32PackedToPlanar_SSE41( - const uint32_t* const argb, __m128i* const rgb /*in[6]*/) { - const __m128i zero = _mm_setzero_si128(); - __m128i a0 = LOAD_16(argb + 0); - __m128i a1 = LOAD_16(argb + 4); - __m128i a2 = LOAD_16(argb + 8); - __m128i a3 = LOAD_16(argb + 12); - VP8L32bToPlanar_SSE41(&a0, &a1, &a2, &a3); - rgb[0] = _mm_unpacklo_epi8(a1, zero); - rgb[1] = _mm_unpackhi_epi8(a1, zero); - rgb[2] = _mm_unpacklo_epi8(a2, zero); - rgb[3] = _mm_unpackhi_epi8(a2, zero); - rgb[4] = _mm_unpacklo_epi8(a3, zero); - rgb[5] = _mm_unpackhi_epi8(a3, zero); -} - -// This macro computes (RG * MULT_RG + GB * MULT_GB + ROUNDER) >> DESCALE_FIX -// It's a macro and not a function because we need to use immediate values with -// srai_epi32, e.g. -#define TRANSFORM(RG_LO, RG_HI, GB_LO, GB_HI, MULT_RG, MULT_GB, \ - ROUNDER, DESCALE_FIX, OUT) do { \ - const __m128i V0_lo = _mm_madd_epi16(RG_LO, MULT_RG); \ - const __m128i V0_hi = _mm_madd_epi16(RG_HI, MULT_RG); \ - const __m128i V1_lo = _mm_madd_epi16(GB_LO, MULT_GB); \ - const __m128i V1_hi = _mm_madd_epi16(GB_HI, MULT_GB); \ - const __m128i V2_lo = _mm_add_epi32(V0_lo, V1_lo); \ - const __m128i V2_hi = _mm_add_epi32(V0_hi, V1_hi); \ - const __m128i V3_lo = _mm_add_epi32(V2_lo, ROUNDER); \ - const __m128i V3_hi = _mm_add_epi32(V2_hi, ROUNDER); \ - const __m128i V5_lo = _mm_srai_epi32(V3_lo, DESCALE_FIX); \ - const __m128i V5_hi = _mm_srai_epi32(V3_hi, DESCALE_FIX); \ - (OUT) = _mm_packs_epi32(V5_lo, V5_hi); \ -} while (0) - -#define MK_CST_16(A, B) _mm_set_epi16((B), (A), (B), (A), (B), (A), (B), (A)) -static WEBP_INLINE void ConvertRGBToY_SSE41(const __m128i* const R, - const __m128i* const G, - const __m128i* const B, - __m128i* const Y) { - const __m128i kRG_y = MK_CST_16(16839, 33059 - 16384); - const __m128i kGB_y = MK_CST_16(16384, 6420); - const __m128i kHALF_Y = _mm_set1_epi32((16 << YUV_FIX) + YUV_HALF); - - const __m128i RG_lo = _mm_unpacklo_epi16(*R, *G); - const __m128i RG_hi = _mm_unpackhi_epi16(*R, *G); - const __m128i GB_lo = _mm_unpacklo_epi16(*G, *B); - const __m128i GB_hi = _mm_unpackhi_epi16(*G, *B); - TRANSFORM(RG_lo, RG_hi, GB_lo, GB_hi, kRG_y, kGB_y, kHALF_Y, YUV_FIX, *Y); -} - -static WEBP_INLINE void ConvertRGBToUV_SSE41(const __m128i* const R, - const __m128i* const G, - const __m128i* const B, - __m128i* const U, - __m128i* const V) { - const __m128i kRG_u = MK_CST_16(-9719, -19081); - const __m128i kGB_u = MK_CST_16(0, 28800); - const __m128i kRG_v = MK_CST_16(28800, 0); - const __m128i kGB_v = MK_CST_16(-24116, -4684); - const __m128i kHALF_UV = _mm_set1_epi32(((128 << YUV_FIX) + YUV_HALF) << 2); - - const __m128i RG_lo = _mm_unpacklo_epi16(*R, *G); - const __m128i RG_hi = _mm_unpackhi_epi16(*R, *G); - const __m128i GB_lo = _mm_unpacklo_epi16(*G, *B); - const __m128i GB_hi = _mm_unpackhi_epi16(*G, *B); - TRANSFORM(RG_lo, RG_hi, GB_lo, GB_hi, kRG_u, kGB_u, - kHALF_UV, YUV_FIX + 2, *U); - TRANSFORM(RG_lo, RG_hi, GB_lo, GB_hi, kRG_v, kGB_v, - kHALF_UV, YUV_FIX + 2, *V); -} - -#undef MK_CST_16 -#undef TRANSFORM - -static void ConvertRGB24ToY_SSE41(const uint8_t* rgb, uint8_t* y, int width) { - const int max_width = width & ~31; - int i; - for (i = 0; i < max_width; rgb += 3 * 16 * 2) { - __m128i rgb_plane[6]; - int j; - - RGB24PackedToPlanar_SSE41(rgb, rgb_plane); - - for (j = 0; j < 2; ++j, i += 16) { - const __m128i zero = _mm_setzero_si128(); - __m128i r, g, b, Y0, Y1; - - // Convert to 16-bit Y. - r = _mm_unpacklo_epi8(rgb_plane[0 + j], zero); - g = _mm_unpacklo_epi8(rgb_plane[2 + j], zero); - b = _mm_unpacklo_epi8(rgb_plane[4 + j], zero); - ConvertRGBToY_SSE41(&r, &g, &b, &Y0); - - // Convert to 16-bit Y. - r = _mm_unpackhi_epi8(rgb_plane[0 + j], zero); - g = _mm_unpackhi_epi8(rgb_plane[2 + j], zero); - b = _mm_unpackhi_epi8(rgb_plane[4 + j], zero); - ConvertRGBToY_SSE41(&r, &g, &b, &Y1); - - // Cast to 8-bit and store. - STORE_16(_mm_packus_epi16(Y0, Y1), y + i); - } - } - for (; i < width; ++i, rgb += 3) { // left-over - y[i] = VP8RGBToY(rgb[0], rgb[1], rgb[2], YUV_HALF); - } -} - -static void ConvertBGR24ToY_SSE41(const uint8_t* bgr, uint8_t* y, int width) { - const int max_width = width & ~31; - int i; - for (i = 0; i < max_width; bgr += 3 * 16 * 2) { - __m128i bgr_plane[6]; - int j; - - RGB24PackedToPlanar_SSE41(bgr, bgr_plane); - - for (j = 0; j < 2; ++j, i += 16) { - const __m128i zero = _mm_setzero_si128(); - __m128i r, g, b, Y0, Y1; - - // Convert to 16-bit Y. - b = _mm_unpacklo_epi8(bgr_plane[0 + j], zero); - g = _mm_unpacklo_epi8(bgr_plane[2 + j], zero); - r = _mm_unpacklo_epi8(bgr_plane[4 + j], zero); - ConvertRGBToY_SSE41(&r, &g, &b, &Y0); - - // Convert to 16-bit Y. - b = _mm_unpackhi_epi8(bgr_plane[0 + j], zero); - g = _mm_unpackhi_epi8(bgr_plane[2 + j], zero); - r = _mm_unpackhi_epi8(bgr_plane[4 + j], zero); - ConvertRGBToY_SSE41(&r, &g, &b, &Y1); - - // Cast to 8-bit and store. - STORE_16(_mm_packus_epi16(Y0, Y1), y + i); - } - } - for (; i < width; ++i, bgr += 3) { // left-over - y[i] = VP8RGBToY(bgr[2], bgr[1], bgr[0], YUV_HALF); - } -} - -static void ConvertARGBToY_SSE41(const uint32_t* argb, uint8_t* y, int width) { - const int max_width = width & ~15; - int i; - for (i = 0; i < max_width; i += 16) { - __m128i Y0, Y1, rgb[6]; - RGB32PackedToPlanar_SSE41(&argb[i], rgb); - ConvertRGBToY_SSE41(&rgb[0], &rgb[2], &rgb[4], &Y0); - ConvertRGBToY_SSE41(&rgb[1], &rgb[3], &rgb[5], &Y1); - STORE_16(_mm_packus_epi16(Y0, Y1), y + i); - } - for (; i < width; ++i) { // left-over - const uint32_t p = argb[i]; - y[i] = VP8RGBToY((p >> 16) & 0xff, (p >> 8) & 0xff, (p >> 0) & 0xff, - YUV_HALF); - } -} - -// Horizontal add (doubled) of two 16b values, result is 16b. -// in: A | B | C | D | ... -> out: 2*(A+B) | 2*(C+D) | ... -static void HorizontalAddPack_SSE41(const __m128i* const A, - const __m128i* const B, - __m128i* const out) { - const __m128i k2 = _mm_set1_epi16(2); - const __m128i C = _mm_madd_epi16(*A, k2); - const __m128i D = _mm_madd_epi16(*B, k2); - *out = _mm_packs_epi32(C, D); -} - -static void ConvertARGBToUV_SSE41(const uint32_t* argb, - uint8_t* u, uint8_t* v, - int src_width, int do_store) { - const int max_width = src_width & ~31; - int i; - for (i = 0; i < max_width; i += 32, u += 16, v += 16) { - __m128i rgb[6], U0, V0, U1, V1; - RGB32PackedToPlanar_SSE41(&argb[i], rgb); - HorizontalAddPack_SSE41(&rgb[0], &rgb[1], &rgb[0]); - HorizontalAddPack_SSE41(&rgb[2], &rgb[3], &rgb[2]); - HorizontalAddPack_SSE41(&rgb[4], &rgb[5], &rgb[4]); - ConvertRGBToUV_SSE41(&rgb[0], &rgb[2], &rgb[4], &U0, &V0); - - RGB32PackedToPlanar_SSE41(&argb[i + 16], rgb); - HorizontalAddPack_SSE41(&rgb[0], &rgb[1], &rgb[0]); - HorizontalAddPack_SSE41(&rgb[2], &rgb[3], &rgb[2]); - HorizontalAddPack_SSE41(&rgb[4], &rgb[5], &rgb[4]); - ConvertRGBToUV_SSE41(&rgb[0], &rgb[2], &rgb[4], &U1, &V1); - - U0 = _mm_packus_epi16(U0, U1); - V0 = _mm_packus_epi16(V0, V1); - if (!do_store) { - const __m128i prev_u = LOAD_16(u); - const __m128i prev_v = LOAD_16(v); - U0 = _mm_avg_epu8(U0, prev_u); - V0 = _mm_avg_epu8(V0, prev_v); - } - STORE_16(U0, u); - STORE_16(V0, v); - } - if (i < src_width) { // left-over - WebPConvertARGBToUV_C(argb + i, u, v, src_width - i, do_store); - } -} - -// Convert 16 packed ARGB 16b-values to r[], g[], b[] -static WEBP_INLINE void RGBA32PackedToPlanar_16b_SSE41( - const uint16_t* const rgbx, - __m128i* const r, __m128i* const g, __m128i* const b) { - const __m128i in0 = LOAD_16(rgbx + 0); // r0 | g0 | b0 |x| r1 | g1 | b1 |x - const __m128i in1 = LOAD_16(rgbx + 8); // r2 | g2 | b2 |x| r3 | g3 | b3 |x - const __m128i in2 = LOAD_16(rgbx + 16); // r4 | ... - const __m128i in3 = LOAD_16(rgbx + 24); // r6 | ... - // aarrggbb as 16-bit. - const __m128i shuff0 = - _mm_set_epi8(-1, -1, -1, -1, 13, 12, 5, 4, 11, 10, 3, 2, 9, 8, 1, 0); - const __m128i shuff1 = - _mm_set_epi8(13, 12, 5, 4, -1, -1, -1, -1, 11, 10, 3, 2, 9, 8, 1, 0); - const __m128i A0 = _mm_shuffle_epi8(in0, shuff0); - const __m128i A1 = _mm_shuffle_epi8(in1, shuff1); - const __m128i A2 = _mm_shuffle_epi8(in2, shuff0); - const __m128i A3 = _mm_shuffle_epi8(in3, shuff1); - // R0R1G0G1 - // B0B1**** - // R2R3G2G3 - // B2B3**** - // (OR is used to free port 5 for the unpack) - const __m128i B0 = _mm_unpacklo_epi32(A0, A1); - const __m128i B1 = _mm_or_si128(A0, A1); - const __m128i B2 = _mm_unpacklo_epi32(A2, A3); - const __m128i B3 = _mm_or_si128(A2, A3); - // Gather the channels. - *r = _mm_unpacklo_epi64(B0, B2); - *g = _mm_unpackhi_epi64(B0, B2); - *b = _mm_unpackhi_epi64(B1, B3); -} - -static void ConvertRGBA32ToUV_SSE41(const uint16_t* rgb, - uint8_t* u, uint8_t* v, int width) { - const int max_width = width & ~15; - const uint16_t* const last_rgb = rgb + 4 * max_width; - while (rgb < last_rgb) { - __m128i r, g, b, U0, V0, U1, V1; - RGBA32PackedToPlanar_16b_SSE41(rgb + 0, &r, &g, &b); - ConvertRGBToUV_SSE41(&r, &g, &b, &U0, &V0); - RGBA32PackedToPlanar_16b_SSE41(rgb + 32, &r, &g, &b); - ConvertRGBToUV_SSE41(&r, &g, &b, &U1, &V1); - STORE_16(_mm_packus_epi16(U0, U1), u); - STORE_16(_mm_packus_epi16(V0, V1), v); - u += 16; - v += 16; - rgb += 2 * 32; - } - if (max_width < width) { // left-over - WebPConvertRGBA32ToUV_C(rgb, u, v, width - max_width); - } -} - -//------------------------------------------------------------------------------ - -extern void WebPInitConvertARGBToYUVSSE41(void); - -WEBP_TSAN_IGNORE_FUNCTION void WebPInitConvertARGBToYUVSSE41(void) { - WebPConvertARGBToY = ConvertARGBToY_SSE41; - WebPConvertARGBToUV = ConvertARGBToUV_SSE41; - - WebPConvertRGB24ToY = ConvertRGB24ToY_SSE41; - WebPConvertBGR24ToY = ConvertBGR24ToY_SSE41; - - WebPConvertRGBA32ToUV = ConvertRGBA32ToUV_SSE41; -} - -//------------------------------------------------------------------------------ - -#else // !WEBP_USE_SSE41 - -WEBP_DSP_INIT_STUB(WebPInitSamplersSSE41) -WEBP_DSP_INIT_STUB(WebPInitConvertARGBToYUVSSE41) - -#endif // WEBP_USE_SSE41 diff --git a/Extended/libwebp/src/enc/.deps/libwebpencode_la-alpha_enc.Plo b/Extended/libwebp/src/enc/.deps/libwebpencode_la-alpha_enc.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/enc/.deps/libwebpencode_la-alpha_enc.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/enc/.deps/libwebpencode_la-analysis_enc.Plo b/Extended/libwebp/src/enc/.deps/libwebpencode_la-analysis_enc.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/enc/.deps/libwebpencode_la-analysis_enc.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/enc/.deps/libwebpencode_la-backward_references_cost_enc.Plo b/Extended/libwebp/src/enc/.deps/libwebpencode_la-backward_references_cost_enc.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/enc/.deps/libwebpencode_la-backward_references_cost_enc.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/enc/.deps/libwebpencode_la-backward_references_enc.Plo b/Extended/libwebp/src/enc/.deps/libwebpencode_la-backward_references_enc.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/enc/.deps/libwebpencode_la-backward_references_enc.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/enc/.deps/libwebpencode_la-config_enc.Plo b/Extended/libwebp/src/enc/.deps/libwebpencode_la-config_enc.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/enc/.deps/libwebpencode_la-config_enc.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/enc/.deps/libwebpencode_la-cost_enc.Plo b/Extended/libwebp/src/enc/.deps/libwebpencode_la-cost_enc.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/enc/.deps/libwebpencode_la-cost_enc.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/enc/.deps/libwebpencode_la-filter_enc.Plo b/Extended/libwebp/src/enc/.deps/libwebpencode_la-filter_enc.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/enc/.deps/libwebpencode_la-filter_enc.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/enc/.deps/libwebpencode_la-frame_enc.Plo b/Extended/libwebp/src/enc/.deps/libwebpencode_la-frame_enc.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/enc/.deps/libwebpencode_la-frame_enc.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/enc/.deps/libwebpencode_la-histogram_enc.Plo b/Extended/libwebp/src/enc/.deps/libwebpencode_la-histogram_enc.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/enc/.deps/libwebpencode_la-histogram_enc.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/enc/.deps/libwebpencode_la-iterator_enc.Plo b/Extended/libwebp/src/enc/.deps/libwebpencode_la-iterator_enc.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/enc/.deps/libwebpencode_la-iterator_enc.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/enc/.deps/libwebpencode_la-near_lossless_enc.Plo b/Extended/libwebp/src/enc/.deps/libwebpencode_la-near_lossless_enc.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/enc/.deps/libwebpencode_la-near_lossless_enc.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/enc/.deps/libwebpencode_la-picture_csp_enc.Plo b/Extended/libwebp/src/enc/.deps/libwebpencode_la-picture_csp_enc.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/enc/.deps/libwebpencode_la-picture_csp_enc.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/enc/.deps/libwebpencode_la-picture_enc.Plo b/Extended/libwebp/src/enc/.deps/libwebpencode_la-picture_enc.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/enc/.deps/libwebpencode_la-picture_enc.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/enc/.deps/libwebpencode_la-picture_psnr_enc.Plo b/Extended/libwebp/src/enc/.deps/libwebpencode_la-picture_psnr_enc.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/enc/.deps/libwebpencode_la-picture_psnr_enc.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/enc/.deps/libwebpencode_la-picture_rescale_enc.Plo b/Extended/libwebp/src/enc/.deps/libwebpencode_la-picture_rescale_enc.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/enc/.deps/libwebpencode_la-picture_rescale_enc.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/enc/.deps/libwebpencode_la-picture_tools_enc.Plo b/Extended/libwebp/src/enc/.deps/libwebpencode_la-picture_tools_enc.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/enc/.deps/libwebpencode_la-picture_tools_enc.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/enc/.deps/libwebpencode_la-predictor_enc.Plo b/Extended/libwebp/src/enc/.deps/libwebpencode_la-predictor_enc.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/enc/.deps/libwebpencode_la-predictor_enc.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/enc/.deps/libwebpencode_la-quant_enc.Plo b/Extended/libwebp/src/enc/.deps/libwebpencode_la-quant_enc.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/enc/.deps/libwebpencode_la-quant_enc.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/enc/.deps/libwebpencode_la-syntax_enc.Plo b/Extended/libwebp/src/enc/.deps/libwebpencode_la-syntax_enc.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/enc/.deps/libwebpencode_la-syntax_enc.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/enc/.deps/libwebpencode_la-token_enc.Plo b/Extended/libwebp/src/enc/.deps/libwebpencode_la-token_enc.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/enc/.deps/libwebpencode_la-token_enc.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/enc/.deps/libwebpencode_la-tree_enc.Plo b/Extended/libwebp/src/enc/.deps/libwebpencode_la-tree_enc.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/enc/.deps/libwebpencode_la-tree_enc.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/enc/.deps/libwebpencode_la-vp8l_enc.Plo b/Extended/libwebp/src/enc/.deps/libwebpencode_la-vp8l_enc.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/enc/.deps/libwebpencode_la-vp8l_enc.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/enc/.deps/libwebpencode_la-webp_enc.Plo b/Extended/libwebp/src/enc/.deps/libwebpencode_la-webp_enc.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/enc/.deps/libwebpencode_la-webp_enc.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/enc/Makefile b/Extended/libwebp/src/enc/Makefile deleted file mode 100644 index d748cb1..0000000 --- a/Extended/libwebp/src/enc/Makefile +++ /dev/null @@ -1,961 +0,0 @@ -# Makefile.in generated by automake 1.16.1 from Makefile.am. -# src/enc/Makefile. Generated from Makefile.in by configure. - -# Copyright (C) 1994-2018 Free Software Foundation, Inc. - -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - - - - - -am__is_gnu_make = { \ - if test -z '$(MAKELEVEL)'; then \ - false; \ - elif test -n '$(MAKE_HOST)'; then \ - true; \ - elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ - true; \ - else \ - false; \ - fi; \ -} -am__make_running_with_option = \ - case $${target_option-} in \ - ?) ;; \ - *) echo "am__make_running_with_option: internal error: invalid" \ - "target option '$${target_option-}' specified" >&2; \ - exit 1;; \ - esac; \ - has_opt=no; \ - sane_makeflags=$$MAKEFLAGS; \ - if $(am__is_gnu_make); then \ - sane_makeflags=$$MFLAGS; \ - else \ - case $$MAKEFLAGS in \ - *\\[\ \ ]*) \ - bs=\\; \ - sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ - | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ - esac; \ - fi; \ - skip_next=no; \ - strip_trailopt () \ - { \ - flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ - }; \ - for flg in $$sane_makeflags; do \ - test $$skip_next = yes && { skip_next=no; continue; }; \ - case $$flg in \ - *=*|--*) continue;; \ - -*I) strip_trailopt 'I'; skip_next=yes;; \ - -*I?*) strip_trailopt 'I';; \ - -*O) strip_trailopt 'O'; skip_next=yes;; \ - -*O?*) strip_trailopt 'O';; \ - -*l) strip_trailopt 'l'; skip_next=yes;; \ - -*l?*) strip_trailopt 'l';; \ - -[dEDm]) skip_next=yes;; \ - -[JT]) skip_next=yes;; \ - esac; \ - case $$flg in \ - *$$target_option*) has_opt=yes; break;; \ - esac; \ - done; \ - test $$has_opt = yes -am__make_dryrun = (target_option=n; $(am__make_running_with_option)) -am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) -pkgdatadir = $(datadir)/libwebp -pkgincludedir = $(includedir)/libwebp -pkglibdir = $(libdir)/libwebp -pkglibexecdir = $(libexecdir)/libwebp -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = x86_64-apple-darwin19.6.0 -host_triplet = x86_64-apple-darwin19.6.0 -subdir = src/enc -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pthread.m4 \ - $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ - $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ - $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -DIST_COMMON = $(srcdir)/Makefile.am $(libwebpencodeinclude_HEADERS) \ - $(noinst_HEADERS) $(am__DIST_COMMON) -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = $(top_builddir)/src/webp/config.h -CONFIG_CLEAN_FILES = -CONFIG_CLEAN_VPATH_FILES = -LTLIBRARIES = $(noinst_LTLIBRARIES) -libwebpencode_la_LIBADD = -am_libwebpencode_la_OBJECTS = libwebpencode_la-alpha_enc.lo \ - libwebpencode_la-analysis_enc.lo \ - libwebpencode_la-backward_references_cost_enc.lo \ - libwebpencode_la-backward_references_enc.lo \ - libwebpencode_la-config_enc.lo libwebpencode_la-cost_enc.lo \ - libwebpencode_la-filter_enc.lo libwebpencode_la-frame_enc.lo \ - libwebpencode_la-histogram_enc.lo \ - libwebpencode_la-iterator_enc.lo \ - libwebpencode_la-near_lossless_enc.lo \ - libwebpencode_la-picture_enc.lo \ - libwebpencode_la-picture_csp_enc.lo \ - libwebpencode_la-picture_psnr_enc.lo \ - libwebpencode_la-picture_rescale_enc.lo \ - libwebpencode_la-picture_tools_enc.lo \ - libwebpencode_la-predictor_enc.lo \ - libwebpencode_la-quant_enc.lo libwebpencode_la-syntax_enc.lo \ - libwebpencode_la-token_enc.lo libwebpencode_la-tree_enc.lo \ - libwebpencode_la-vp8l_enc.lo libwebpencode_la-webp_enc.lo -libwebpencode_la_OBJECTS = $(am_libwebpencode_la_OBJECTS) -AM_V_lt = $(am__v_lt_$(V)) -am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) -am__v_lt_0 = --silent -am__v_lt_1 = -libwebpencode_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ - $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ - $(AM_CFLAGS) $(CFLAGS) $(libwebpencode_la_LDFLAGS) $(LDFLAGS) \ - -o $@ -AM_V_P = $(am__v_P_$(V)) -am__v_P_ = $(am__v_P_$(AM_DEFAULT_VERBOSITY)) -am__v_P_0 = false -am__v_P_1 = : -AM_V_GEN = $(am__v_GEN_$(V)) -am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) -am__v_GEN_0 = @echo " GEN " $@; -am__v_GEN_1 = -AM_V_at = $(am__v_at_$(V)) -am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) -am__v_at_0 = @ -am__v_at_1 = -DEFAULT_INCLUDES = -I. -I$(top_builddir)/src/webp -depcomp = $(SHELL) $(top_srcdir)/depcomp -am__maybe_remake_depfiles = depfiles -am__depfiles_remade = ./$(DEPDIR)/libwebpencode_la-alpha_enc.Plo \ - ./$(DEPDIR)/libwebpencode_la-analysis_enc.Plo \ - ./$(DEPDIR)/libwebpencode_la-backward_references_cost_enc.Plo \ - ./$(DEPDIR)/libwebpencode_la-backward_references_enc.Plo \ - ./$(DEPDIR)/libwebpencode_la-config_enc.Plo \ - ./$(DEPDIR)/libwebpencode_la-cost_enc.Plo \ - ./$(DEPDIR)/libwebpencode_la-filter_enc.Plo \ - ./$(DEPDIR)/libwebpencode_la-frame_enc.Plo \ - ./$(DEPDIR)/libwebpencode_la-histogram_enc.Plo \ - ./$(DEPDIR)/libwebpencode_la-iterator_enc.Plo \ - ./$(DEPDIR)/libwebpencode_la-near_lossless_enc.Plo \ - ./$(DEPDIR)/libwebpencode_la-picture_csp_enc.Plo \ - ./$(DEPDIR)/libwebpencode_la-picture_enc.Plo \ - ./$(DEPDIR)/libwebpencode_la-picture_psnr_enc.Plo \ - ./$(DEPDIR)/libwebpencode_la-picture_rescale_enc.Plo \ - ./$(DEPDIR)/libwebpencode_la-picture_tools_enc.Plo \ - ./$(DEPDIR)/libwebpencode_la-predictor_enc.Plo \ - ./$(DEPDIR)/libwebpencode_la-quant_enc.Plo \ - ./$(DEPDIR)/libwebpencode_la-syntax_enc.Plo \ - ./$(DEPDIR)/libwebpencode_la-token_enc.Plo \ - ./$(DEPDIR)/libwebpencode_la-tree_enc.Plo \ - ./$(DEPDIR)/libwebpencode_la-vp8l_enc.Plo \ - ./$(DEPDIR)/libwebpencode_la-webp_enc.Plo -am__mv = mv -f -COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ - $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CFLAGS) $(CFLAGS) -AM_V_CC = $(am__v_CC_$(V)) -am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) -am__v_CC_0 = @echo " CC " $@; -am__v_CC_1 = -CCLD = $(CC) -LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ - $(AM_LDFLAGS) $(LDFLAGS) -o $@ -AM_V_CCLD = $(am__v_CCLD_$(V)) -am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) -am__v_CCLD_0 = @echo " CCLD " $@; -am__v_CCLD_1 = -SOURCES = $(libwebpencode_la_SOURCES) -DIST_SOURCES = $(libwebpencode_la_SOURCES) -am__can_run_installinfo = \ - case $$AM_UPDATE_INFO_DIR in \ - n|no|NO) false;; \ - *) (install-info --version) >/dev/null 2>&1;; \ - esac -am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; -am__vpath_adj = case $$p in \ - $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ - *) f=$$p;; \ - esac; -am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; -am__install_max = 40 -am__nobase_strip_setup = \ - srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` -am__nobase_strip = \ - for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" -am__nobase_list = $(am__nobase_strip_setup); \ - for p in $$list; do echo "$$p $$p"; done | \ - sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ - $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ - if (++n[$$2] == $(am__install_max)) \ - { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ - END { for (dir in files) print dir, files[dir] }' -am__base_list = \ - sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ - sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' -am__uninstall_files_from_dir = { \ - test -z "$$files" \ - || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ - || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ - $(am__cd) "$$dir" && rm -f $$files; }; \ - } -am__installdirs = "$(DESTDIR)$(libwebpencodeincludedir)" -HEADERS = $(libwebpencodeinclude_HEADERS) $(noinst_HEADERS) -am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) -# Read a list of newline-separated strings from the standard input, -# and print each of them once, without duplicates. Input order is -# *not* preserved. -am__uniquify_input = $(AWK) '\ - BEGIN { nonempty = 0; } \ - { items[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in items) print i; }; } \ -' -# Make sure the list of sources is unique. This is necessary because, -# e.g., the same source file might be shared among _SOURCES variables -# for different programs/libraries. -am__define_uniq_tagged_files = \ - list='$(am__tagged_files)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | $(am__uniquify_input)` -ETAGS = etags -CTAGS = ctags -am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = ${SHELL} /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp/missing aclocal-1.16 -AMTAR = $${TAR-tar} -AM_CFLAGS = -fvisibility=hidden -Wall -Wconstant-conversion -Wdeclaration-after-statement -Wextra -Wfloat-conversion -Wformat -Wformat-nonliteral -Wformat -Wformat-security -Wmissing-declarations -Wmissing-prototypes -Wold-style-definition -Wparentheses-equality -Wshadow -Wshorten-64-to-32 -Wundef -Wunreachable-code -Wunused -Wvla -Wno-deprecated-declarations -AM_CPPFLAGS = -DNDEBUG -I$(top_builddir) -I$(top_srcdir) -AM_DEFAULT_VERBOSITY = 0 -AR = ar -AUTOCONF = ${SHELL} /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp/missing autoconf -AUTOHEADER = ${SHELL} /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp/missing autoheader -AUTOMAKE = ${SHELL} /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp/missing automake-1.16 -AWK = awk -CC = gcc -CCDEPMODE = depmode=gcc3 -CFLAGS = -g -O2 -D_THREAD_SAFE -pthread -CPP = gcc -E -CPPFLAGS = -CYGPATH_W = echo -DEFS = -DHAVE_CONFIG_H -DEPDIR = .deps -DLLTOOL = false -DSYMUTIL = dsymutil -DUMPBIN = -ECHO_C = \c -ECHO_N = -ECHO_T = -EGREP = /usr/bin/grep -E -EXEEXT = -FGREP = /usr/bin/grep -F -GIF_INCLUDES = -GIF_LIBS = -lgif -GL_INCLUDES = -GL_LIBS = -framework GLUT -framework OpenGL -GREP = /usr/bin/grep -INSTALL = /opt/twitter_mde/homebrew_minimal/mde_bin/ginstall -c -INSTALL_DATA = ${INSTALL} -m 644 -INSTALL_PROGRAM = ${INSTALL} -INSTALL_SCRIPT = ${INSTALL} -INSTALL_STRIP_PROGRAM = $(install_sh) -c -s -JPEG_INCLUDES = -DWEBP_HAVE_JPEG -JPEG_LIBS = -ljpeg -LD = /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld -LDFLAGS = -LIBOBJS = -LIBPNG_CONFIG = /opt/twitter_mde/bin/libpng-config -LIBS = -LIBSDL_CONFIG = -LIBTOOL = $(SHELL) $(top_builddir)/libtool -LIPO = lipo -LN_S = ln -s -LTLIBOBJS = -LT_SYS_LIBRARY_PATH = -MAKEINFO = ${SHELL} /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp/missing makeinfo -MANIFEST_TOOL = : -MKDIR_P = /opt/twitter_mde/homebrew_minimal/mde_bin/gmkdir -p -NEON_FLAGS = -NM = /usr/bin/nm -B -NMEDIT = nmedit -OBJDUMP = objdump -OBJEXT = o -OTOOL = otool -OTOOL64 = : -PACKAGE = libwebp -PACKAGE_BUGREPORT = https://bugs.chromium.org/p/webp -PACKAGE_NAME = libwebp -PACKAGE_STRING = libwebp 1.1.0 -PACKAGE_TARNAME = libwebp -PACKAGE_URL = http://developers.google.com/speed/webp -PACKAGE_VERSION = 1.1.0 -PATH_SEPARATOR = : -PNG_INCLUDES = -I/opt/twitter_mde/package/twitter_dev_homebrew/current/Cellar/libpng/1.6.34/include/libpng16 -DWEBP_HAVE_PNG -PNG_LIBS = -L/opt/twitter_mde/package/twitter_dev_homebrew/current/Cellar/libpng/1.6.34/lib -lpng16 -PTHREAD_CC = gcc -PTHREAD_CFLAGS = -D_THREAD_SAFE -pthread -PTHREAD_LIBS = -RANLIB = ranlib -SDL_INCLUDES = -SDL_LIBS = -SED = /usr/bin/sed -SET_MAKE = -SHELL = /bin/sh -SSE2_FLAGS = -msse2 -SSE41_FLAGS = -msse4.1 -STRIP = strip -TIFF_INCLUDES = -DWEBP_HAVE_TIFF -TIFF_LIBS = -ltiff -USE_SWAP_16BIT_CSP = -VERSION = 1.1.0 -abs_builddir = /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp/src/enc -abs_srcdir = /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp/src/enc -abs_top_builddir = /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp -abs_top_srcdir = /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp -ac_ct_AR = ar -ac_ct_CC = gcc -ac_ct_DUMPBIN = -am__include = include -am__leading_dot = . -am__quote = -am__tar = $${TAR-tar} chof - "$$tardir" -am__untar = $${TAR-tar} xf - -ax_pthread_config = -bindir = ${exec_prefix}/bin -build = x86_64-apple-darwin19.6.0 -build_alias = -build_cpu = x86_64 -build_os = darwin19.6.0 -build_vendor = apple -builddir = . -datadir = ${datarootdir} -datarootdir = ${prefix}/share -docdir = ${datarootdir}/doc/${PACKAGE_TARNAME} -dvidir = ${docdir} -exec_prefix = ${prefix} -host = x86_64-apple-darwin19.6.0 -host_alias = -host_cpu = x86_64 -host_os = darwin19.6.0 -host_vendor = apple -htmldir = ${docdir} -includedir = ${prefix}/include -infodir = ${datarootdir}/info -install_sh = ${SHELL} /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp/install-sh -libdir = ${exec_prefix}/lib -libexecdir = ${exec_prefix}/libexec -localedir = ${datarootdir}/locale -localstatedir = ${prefix}/var -mandir = ${datarootdir}/man -mkdir_p = $(MKDIR_P) -oldincludedir = /usr/include -pdfdir = ${docdir} -pkgconfigdir = ${libdir}/pkgconfig -prefix = /usr/local -program_transform_name = s,x,x, -psdir = ${docdir} -runstatedir = ${localstatedir}/run -sbindir = ${exec_prefix}/sbin -sharedstatedir = ${prefix}/com -srcdir = . -sysconfdir = ${prefix}/etc -target_alias = -top_build_prefix = ../../ -top_builddir = ../.. -top_srcdir = ../.. -noinst_LTLIBRARIES = libwebpencode.la -libwebpencode_la_SOURCES = alpha_enc.c analysis_enc.c \ - backward_references_cost_enc.c backward_references_enc.c \ - backward_references_enc.h config_enc.c cost_enc.c cost_enc.h \ - filter_enc.c frame_enc.c histogram_enc.c histogram_enc.h \ - iterator_enc.c near_lossless_enc.c picture_enc.c \ - picture_csp_enc.c picture_psnr_enc.c picture_rescale_enc.c \ - picture_tools_enc.c predictor_enc.c quant_enc.c syntax_enc.c \ - token_enc.c tree_enc.c vp8i_enc.h vp8l_enc.c vp8li_enc.h \ - webp_enc.c -libwebpencodeinclude_HEADERS = ../webp/encode.h ../webp/types.h -noinst_HEADERS = ../webp/format_constants.h -libwebpencode_la_LDFLAGS = -lm -libwebpencode_la_CPPFLAGS = $(AM_CPPFLAGS) -libwebpencodeincludedir = $(includedir)/webp -all: all-am - -.SUFFIXES: -.SUFFIXES: .c .lo .o .obj -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ - && { if test -f $@; then exit 0; else break; fi; }; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/enc/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --foreign src/enc/Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(am__aclocal_m4_deps): - -clean-noinstLTLIBRARIES: - -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) - @list='$(noinst_LTLIBRARIES)'; \ - locs=`for p in $$list; do echo $$p; done | \ - sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ - sort -u`; \ - test -z "$$locs" || { \ - echo rm -f $${locs}; \ - rm -f $${locs}; \ - } - -libwebpencode.la: $(libwebpencode_la_OBJECTS) $(libwebpencode_la_DEPENDENCIES) $(EXTRA_libwebpencode_la_DEPENDENCIES) - $(AM_V_CCLD)$(libwebpencode_la_LINK) $(libwebpencode_la_OBJECTS) $(libwebpencode_la_LIBADD) $(LIBS) - -mostlyclean-compile: - -rm -f *.$(OBJEXT) - -distclean-compile: - -rm -f *.tab.c - -include ./$(DEPDIR)/libwebpencode_la-alpha_enc.Plo # am--include-marker -include ./$(DEPDIR)/libwebpencode_la-analysis_enc.Plo # am--include-marker -include ./$(DEPDIR)/libwebpencode_la-backward_references_cost_enc.Plo # am--include-marker -include ./$(DEPDIR)/libwebpencode_la-backward_references_enc.Plo # am--include-marker -include ./$(DEPDIR)/libwebpencode_la-config_enc.Plo # am--include-marker -include ./$(DEPDIR)/libwebpencode_la-cost_enc.Plo # am--include-marker -include ./$(DEPDIR)/libwebpencode_la-filter_enc.Plo # am--include-marker -include ./$(DEPDIR)/libwebpencode_la-frame_enc.Plo # am--include-marker -include ./$(DEPDIR)/libwebpencode_la-histogram_enc.Plo # am--include-marker -include ./$(DEPDIR)/libwebpencode_la-iterator_enc.Plo # am--include-marker -include ./$(DEPDIR)/libwebpencode_la-near_lossless_enc.Plo # am--include-marker -include ./$(DEPDIR)/libwebpencode_la-picture_csp_enc.Plo # am--include-marker -include ./$(DEPDIR)/libwebpencode_la-picture_enc.Plo # am--include-marker -include ./$(DEPDIR)/libwebpencode_la-picture_psnr_enc.Plo # am--include-marker -include ./$(DEPDIR)/libwebpencode_la-picture_rescale_enc.Plo # am--include-marker -include ./$(DEPDIR)/libwebpencode_la-picture_tools_enc.Plo # am--include-marker -include ./$(DEPDIR)/libwebpencode_la-predictor_enc.Plo # am--include-marker -include ./$(DEPDIR)/libwebpencode_la-quant_enc.Plo # am--include-marker -include ./$(DEPDIR)/libwebpencode_la-syntax_enc.Plo # am--include-marker -include ./$(DEPDIR)/libwebpencode_la-token_enc.Plo # am--include-marker -include ./$(DEPDIR)/libwebpencode_la-tree_enc.Plo # am--include-marker -include ./$(DEPDIR)/libwebpencode_la-vp8l_enc.Plo # am--include-marker -include ./$(DEPDIR)/libwebpencode_la-webp_enc.Plo # am--include-marker - -$(am__depfiles_remade): - @$(MKDIR_P) $(@D) - @echo '# dummy' >$@-t && $(am__mv) $@-t $@ - -am--depfiles: $(am__depfiles_remade) - -.c.o: - $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ - $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ - $(am__mv) $$depbase.Tpo $$depbase.Po -# $(AM_V_CC)source='$<' object='$@' libtool=no \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(COMPILE) -c -o $@ $< - -.c.obj: - $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ - $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ - $(am__mv) $$depbase.Tpo $$depbase.Po -# $(AM_V_CC)source='$<' object='$@' libtool=no \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` - -.c.lo: - $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ - $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ - $(am__mv) $$depbase.Tpo $$depbase.Plo -# $(AM_V_CC)source='$<' object='$@' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LTCOMPILE) -c -o $@ $< - -libwebpencode_la-alpha_enc.lo: alpha_enc.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpencode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwebpencode_la-alpha_enc.lo -MD -MP -MF $(DEPDIR)/libwebpencode_la-alpha_enc.Tpo -c -o libwebpencode_la-alpha_enc.lo `test -f 'alpha_enc.c' || echo '$(srcdir)/'`alpha_enc.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpencode_la-alpha_enc.Tpo $(DEPDIR)/libwebpencode_la-alpha_enc.Plo -# $(AM_V_CC)source='alpha_enc.c' object='libwebpencode_la-alpha_enc.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpencode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwebpencode_la-alpha_enc.lo `test -f 'alpha_enc.c' || echo '$(srcdir)/'`alpha_enc.c - -libwebpencode_la-analysis_enc.lo: analysis_enc.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpencode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwebpencode_la-analysis_enc.lo -MD -MP -MF $(DEPDIR)/libwebpencode_la-analysis_enc.Tpo -c -o libwebpencode_la-analysis_enc.lo `test -f 'analysis_enc.c' || echo '$(srcdir)/'`analysis_enc.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpencode_la-analysis_enc.Tpo $(DEPDIR)/libwebpencode_la-analysis_enc.Plo -# $(AM_V_CC)source='analysis_enc.c' object='libwebpencode_la-analysis_enc.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpencode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwebpencode_la-analysis_enc.lo `test -f 'analysis_enc.c' || echo '$(srcdir)/'`analysis_enc.c - -libwebpencode_la-backward_references_cost_enc.lo: backward_references_cost_enc.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpencode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwebpencode_la-backward_references_cost_enc.lo -MD -MP -MF $(DEPDIR)/libwebpencode_la-backward_references_cost_enc.Tpo -c -o libwebpencode_la-backward_references_cost_enc.lo `test -f 'backward_references_cost_enc.c' || echo '$(srcdir)/'`backward_references_cost_enc.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpencode_la-backward_references_cost_enc.Tpo $(DEPDIR)/libwebpencode_la-backward_references_cost_enc.Plo -# $(AM_V_CC)source='backward_references_cost_enc.c' object='libwebpencode_la-backward_references_cost_enc.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpencode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwebpencode_la-backward_references_cost_enc.lo `test -f 'backward_references_cost_enc.c' || echo '$(srcdir)/'`backward_references_cost_enc.c - -libwebpencode_la-backward_references_enc.lo: backward_references_enc.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpencode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwebpencode_la-backward_references_enc.lo -MD -MP -MF $(DEPDIR)/libwebpencode_la-backward_references_enc.Tpo -c -o libwebpencode_la-backward_references_enc.lo `test -f 'backward_references_enc.c' || echo '$(srcdir)/'`backward_references_enc.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpencode_la-backward_references_enc.Tpo $(DEPDIR)/libwebpencode_la-backward_references_enc.Plo -# $(AM_V_CC)source='backward_references_enc.c' object='libwebpencode_la-backward_references_enc.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpencode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwebpencode_la-backward_references_enc.lo `test -f 'backward_references_enc.c' || echo '$(srcdir)/'`backward_references_enc.c - -libwebpencode_la-config_enc.lo: config_enc.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpencode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwebpencode_la-config_enc.lo -MD -MP -MF $(DEPDIR)/libwebpencode_la-config_enc.Tpo -c -o libwebpencode_la-config_enc.lo `test -f 'config_enc.c' || echo '$(srcdir)/'`config_enc.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpencode_la-config_enc.Tpo $(DEPDIR)/libwebpencode_la-config_enc.Plo -# $(AM_V_CC)source='config_enc.c' object='libwebpencode_la-config_enc.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpencode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwebpencode_la-config_enc.lo `test -f 'config_enc.c' || echo '$(srcdir)/'`config_enc.c - -libwebpencode_la-cost_enc.lo: cost_enc.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpencode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwebpencode_la-cost_enc.lo -MD -MP -MF $(DEPDIR)/libwebpencode_la-cost_enc.Tpo -c -o libwebpencode_la-cost_enc.lo `test -f 'cost_enc.c' || echo '$(srcdir)/'`cost_enc.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpencode_la-cost_enc.Tpo $(DEPDIR)/libwebpencode_la-cost_enc.Plo -# $(AM_V_CC)source='cost_enc.c' object='libwebpencode_la-cost_enc.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpencode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwebpencode_la-cost_enc.lo `test -f 'cost_enc.c' || echo '$(srcdir)/'`cost_enc.c - -libwebpencode_la-filter_enc.lo: filter_enc.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpencode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwebpencode_la-filter_enc.lo -MD -MP -MF $(DEPDIR)/libwebpencode_la-filter_enc.Tpo -c -o libwebpencode_la-filter_enc.lo `test -f 'filter_enc.c' || echo '$(srcdir)/'`filter_enc.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpencode_la-filter_enc.Tpo $(DEPDIR)/libwebpencode_la-filter_enc.Plo -# $(AM_V_CC)source='filter_enc.c' object='libwebpencode_la-filter_enc.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpencode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwebpencode_la-filter_enc.lo `test -f 'filter_enc.c' || echo '$(srcdir)/'`filter_enc.c - -libwebpencode_la-frame_enc.lo: frame_enc.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpencode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwebpencode_la-frame_enc.lo -MD -MP -MF $(DEPDIR)/libwebpencode_la-frame_enc.Tpo -c -o libwebpencode_la-frame_enc.lo `test -f 'frame_enc.c' || echo '$(srcdir)/'`frame_enc.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpencode_la-frame_enc.Tpo $(DEPDIR)/libwebpencode_la-frame_enc.Plo -# $(AM_V_CC)source='frame_enc.c' object='libwebpencode_la-frame_enc.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpencode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwebpencode_la-frame_enc.lo `test -f 'frame_enc.c' || echo '$(srcdir)/'`frame_enc.c - -libwebpencode_la-histogram_enc.lo: histogram_enc.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpencode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwebpencode_la-histogram_enc.lo -MD -MP -MF $(DEPDIR)/libwebpencode_la-histogram_enc.Tpo -c -o libwebpencode_la-histogram_enc.lo `test -f 'histogram_enc.c' || echo '$(srcdir)/'`histogram_enc.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpencode_la-histogram_enc.Tpo $(DEPDIR)/libwebpencode_la-histogram_enc.Plo -# $(AM_V_CC)source='histogram_enc.c' object='libwebpencode_la-histogram_enc.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpencode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwebpencode_la-histogram_enc.lo `test -f 'histogram_enc.c' || echo '$(srcdir)/'`histogram_enc.c - -libwebpencode_la-iterator_enc.lo: iterator_enc.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpencode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwebpencode_la-iterator_enc.lo -MD -MP -MF $(DEPDIR)/libwebpencode_la-iterator_enc.Tpo -c -o libwebpencode_la-iterator_enc.lo `test -f 'iterator_enc.c' || echo '$(srcdir)/'`iterator_enc.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpencode_la-iterator_enc.Tpo $(DEPDIR)/libwebpencode_la-iterator_enc.Plo -# $(AM_V_CC)source='iterator_enc.c' object='libwebpencode_la-iterator_enc.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpencode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwebpencode_la-iterator_enc.lo `test -f 'iterator_enc.c' || echo '$(srcdir)/'`iterator_enc.c - -libwebpencode_la-near_lossless_enc.lo: near_lossless_enc.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpencode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwebpencode_la-near_lossless_enc.lo -MD -MP -MF $(DEPDIR)/libwebpencode_la-near_lossless_enc.Tpo -c -o libwebpencode_la-near_lossless_enc.lo `test -f 'near_lossless_enc.c' || echo '$(srcdir)/'`near_lossless_enc.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpencode_la-near_lossless_enc.Tpo $(DEPDIR)/libwebpencode_la-near_lossless_enc.Plo -# $(AM_V_CC)source='near_lossless_enc.c' object='libwebpencode_la-near_lossless_enc.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpencode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwebpencode_la-near_lossless_enc.lo `test -f 'near_lossless_enc.c' || echo '$(srcdir)/'`near_lossless_enc.c - -libwebpencode_la-picture_enc.lo: picture_enc.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpencode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwebpencode_la-picture_enc.lo -MD -MP -MF $(DEPDIR)/libwebpencode_la-picture_enc.Tpo -c -o libwebpencode_la-picture_enc.lo `test -f 'picture_enc.c' || echo '$(srcdir)/'`picture_enc.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpencode_la-picture_enc.Tpo $(DEPDIR)/libwebpencode_la-picture_enc.Plo -# $(AM_V_CC)source='picture_enc.c' object='libwebpencode_la-picture_enc.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpencode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwebpencode_la-picture_enc.lo `test -f 'picture_enc.c' || echo '$(srcdir)/'`picture_enc.c - -libwebpencode_la-picture_csp_enc.lo: picture_csp_enc.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpencode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwebpencode_la-picture_csp_enc.lo -MD -MP -MF $(DEPDIR)/libwebpencode_la-picture_csp_enc.Tpo -c -o libwebpencode_la-picture_csp_enc.lo `test -f 'picture_csp_enc.c' || echo '$(srcdir)/'`picture_csp_enc.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpencode_la-picture_csp_enc.Tpo $(DEPDIR)/libwebpencode_la-picture_csp_enc.Plo -# $(AM_V_CC)source='picture_csp_enc.c' object='libwebpencode_la-picture_csp_enc.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpencode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwebpencode_la-picture_csp_enc.lo `test -f 'picture_csp_enc.c' || echo '$(srcdir)/'`picture_csp_enc.c - -libwebpencode_la-picture_psnr_enc.lo: picture_psnr_enc.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpencode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwebpencode_la-picture_psnr_enc.lo -MD -MP -MF $(DEPDIR)/libwebpencode_la-picture_psnr_enc.Tpo -c -o libwebpencode_la-picture_psnr_enc.lo `test -f 'picture_psnr_enc.c' || echo '$(srcdir)/'`picture_psnr_enc.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpencode_la-picture_psnr_enc.Tpo $(DEPDIR)/libwebpencode_la-picture_psnr_enc.Plo -# $(AM_V_CC)source='picture_psnr_enc.c' object='libwebpencode_la-picture_psnr_enc.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpencode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwebpencode_la-picture_psnr_enc.lo `test -f 'picture_psnr_enc.c' || echo '$(srcdir)/'`picture_psnr_enc.c - -libwebpencode_la-picture_rescale_enc.lo: picture_rescale_enc.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpencode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwebpencode_la-picture_rescale_enc.lo -MD -MP -MF $(DEPDIR)/libwebpencode_la-picture_rescale_enc.Tpo -c -o libwebpencode_la-picture_rescale_enc.lo `test -f 'picture_rescale_enc.c' || echo '$(srcdir)/'`picture_rescale_enc.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpencode_la-picture_rescale_enc.Tpo $(DEPDIR)/libwebpencode_la-picture_rescale_enc.Plo -# $(AM_V_CC)source='picture_rescale_enc.c' object='libwebpencode_la-picture_rescale_enc.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpencode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwebpencode_la-picture_rescale_enc.lo `test -f 'picture_rescale_enc.c' || echo '$(srcdir)/'`picture_rescale_enc.c - -libwebpencode_la-picture_tools_enc.lo: picture_tools_enc.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpencode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwebpencode_la-picture_tools_enc.lo -MD -MP -MF $(DEPDIR)/libwebpencode_la-picture_tools_enc.Tpo -c -o libwebpencode_la-picture_tools_enc.lo `test -f 'picture_tools_enc.c' || echo '$(srcdir)/'`picture_tools_enc.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpencode_la-picture_tools_enc.Tpo $(DEPDIR)/libwebpencode_la-picture_tools_enc.Plo -# $(AM_V_CC)source='picture_tools_enc.c' object='libwebpencode_la-picture_tools_enc.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpencode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwebpencode_la-picture_tools_enc.lo `test -f 'picture_tools_enc.c' || echo '$(srcdir)/'`picture_tools_enc.c - -libwebpencode_la-predictor_enc.lo: predictor_enc.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpencode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwebpencode_la-predictor_enc.lo -MD -MP -MF $(DEPDIR)/libwebpencode_la-predictor_enc.Tpo -c -o libwebpencode_la-predictor_enc.lo `test -f 'predictor_enc.c' || echo '$(srcdir)/'`predictor_enc.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpencode_la-predictor_enc.Tpo $(DEPDIR)/libwebpencode_la-predictor_enc.Plo -# $(AM_V_CC)source='predictor_enc.c' object='libwebpencode_la-predictor_enc.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpencode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwebpencode_la-predictor_enc.lo `test -f 'predictor_enc.c' || echo '$(srcdir)/'`predictor_enc.c - -libwebpencode_la-quant_enc.lo: quant_enc.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpencode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwebpencode_la-quant_enc.lo -MD -MP -MF $(DEPDIR)/libwebpencode_la-quant_enc.Tpo -c -o libwebpencode_la-quant_enc.lo `test -f 'quant_enc.c' || echo '$(srcdir)/'`quant_enc.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpencode_la-quant_enc.Tpo $(DEPDIR)/libwebpencode_la-quant_enc.Plo -# $(AM_V_CC)source='quant_enc.c' object='libwebpencode_la-quant_enc.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpencode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwebpencode_la-quant_enc.lo `test -f 'quant_enc.c' || echo '$(srcdir)/'`quant_enc.c - -libwebpencode_la-syntax_enc.lo: syntax_enc.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpencode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwebpencode_la-syntax_enc.lo -MD -MP -MF $(DEPDIR)/libwebpencode_la-syntax_enc.Tpo -c -o libwebpencode_la-syntax_enc.lo `test -f 'syntax_enc.c' || echo '$(srcdir)/'`syntax_enc.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpencode_la-syntax_enc.Tpo $(DEPDIR)/libwebpencode_la-syntax_enc.Plo -# $(AM_V_CC)source='syntax_enc.c' object='libwebpencode_la-syntax_enc.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpencode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwebpencode_la-syntax_enc.lo `test -f 'syntax_enc.c' || echo '$(srcdir)/'`syntax_enc.c - -libwebpencode_la-token_enc.lo: token_enc.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpencode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwebpencode_la-token_enc.lo -MD -MP -MF $(DEPDIR)/libwebpencode_la-token_enc.Tpo -c -o libwebpencode_la-token_enc.lo `test -f 'token_enc.c' || echo '$(srcdir)/'`token_enc.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpencode_la-token_enc.Tpo $(DEPDIR)/libwebpencode_la-token_enc.Plo -# $(AM_V_CC)source='token_enc.c' object='libwebpencode_la-token_enc.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpencode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwebpencode_la-token_enc.lo `test -f 'token_enc.c' || echo '$(srcdir)/'`token_enc.c - -libwebpencode_la-tree_enc.lo: tree_enc.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpencode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwebpencode_la-tree_enc.lo -MD -MP -MF $(DEPDIR)/libwebpencode_la-tree_enc.Tpo -c -o libwebpencode_la-tree_enc.lo `test -f 'tree_enc.c' || echo '$(srcdir)/'`tree_enc.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpencode_la-tree_enc.Tpo $(DEPDIR)/libwebpencode_la-tree_enc.Plo -# $(AM_V_CC)source='tree_enc.c' object='libwebpencode_la-tree_enc.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpencode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwebpencode_la-tree_enc.lo `test -f 'tree_enc.c' || echo '$(srcdir)/'`tree_enc.c - -libwebpencode_la-vp8l_enc.lo: vp8l_enc.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpencode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwebpencode_la-vp8l_enc.lo -MD -MP -MF $(DEPDIR)/libwebpencode_la-vp8l_enc.Tpo -c -o libwebpencode_la-vp8l_enc.lo `test -f 'vp8l_enc.c' || echo '$(srcdir)/'`vp8l_enc.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpencode_la-vp8l_enc.Tpo $(DEPDIR)/libwebpencode_la-vp8l_enc.Plo -# $(AM_V_CC)source='vp8l_enc.c' object='libwebpencode_la-vp8l_enc.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpencode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwebpencode_la-vp8l_enc.lo `test -f 'vp8l_enc.c' || echo '$(srcdir)/'`vp8l_enc.c - -libwebpencode_la-webp_enc.lo: webp_enc.c - $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpencode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwebpencode_la-webp_enc.lo -MD -MP -MF $(DEPDIR)/libwebpencode_la-webp_enc.Tpo -c -o libwebpencode_la-webp_enc.lo `test -f 'webp_enc.c' || echo '$(srcdir)/'`webp_enc.c - $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpencode_la-webp_enc.Tpo $(DEPDIR)/libwebpencode_la-webp_enc.Plo -# $(AM_V_CC)source='webp_enc.c' object='libwebpencode_la-webp_enc.lo' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpencode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwebpencode_la-webp_enc.lo `test -f 'webp_enc.c' || echo '$(srcdir)/'`webp_enc.c - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs -install-libwebpencodeincludeHEADERS: $(libwebpencodeinclude_HEADERS) - @$(NORMAL_INSTALL) - @list='$(libwebpencodeinclude_HEADERS)'; test -n "$(libwebpencodeincludedir)" || list=; \ - if test -n "$$list"; then \ - echo " $(MKDIR_P) '$(DESTDIR)$(libwebpencodeincludedir)'"; \ - $(MKDIR_P) "$(DESTDIR)$(libwebpencodeincludedir)" || exit 1; \ - fi; \ - for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - echo "$$d$$p"; \ - done | $(am__base_list) | \ - while read files; do \ - echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(libwebpencodeincludedir)'"; \ - $(INSTALL_HEADER) $$files "$(DESTDIR)$(libwebpencodeincludedir)" || exit $$?; \ - done - -uninstall-libwebpencodeincludeHEADERS: - @$(NORMAL_UNINSTALL) - @list='$(libwebpencodeinclude_HEADERS)'; test -n "$(libwebpencodeincludedir)" || list=; \ - files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ - dir='$(DESTDIR)$(libwebpencodeincludedir)'; $(am__uninstall_files_from_dir) - -ID: $(am__tagged_files) - $(am__define_uniq_tagged_files); mkid -fID $$unique -tags: tags-am -TAGS: tags - -tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) - set x; \ - here=`pwd`; \ - $(am__define_uniq_tagged_files); \ - shift; \ - if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ - test -n "$$unique" || unique=$$empty_fix; \ - if test $$# -gt 0; then \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - "$$@" $$unique; \ - else \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$unique; \ - fi; \ - fi -ctags: ctags-am - -CTAGS: ctags -ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) - $(am__define_uniq_tagged_files); \ - test -z "$(CTAGS_ARGS)$$unique" \ - || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$unique - -GTAGS: - here=`$(am__cd) $(top_builddir) && pwd` \ - && $(am__cd) $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) "$$here" -cscopelist: cscopelist-am - -cscopelist-am: $(am__tagged_files) - list='$(am__tagged_files)'; \ - case "$(srcdir)" in \ - [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ - *) sdir=$(subdir)/$(srcdir) ;; \ - esac; \ - for i in $$list; do \ - if test -f "$$i"; then \ - echo "$(subdir)/$$i"; \ - else \ - echo "$$sdir/$$i"; \ - fi; \ - done >> $(top_builddir)/cscope.files - -distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - -distdir: $(BUILT_SOURCES) - $(MAKE) $(AM_MAKEFLAGS) distdir-am - -distdir-am: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - list='$(DISTFILES)'; \ - dist_files=`for file in $$list; do echo $$file; done | \ - sed -e "s|^$$srcdirstrip/||;t" \ - -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ - case $$dist_files in \ - */*) $(MKDIR_P) `echo "$$dist_files" | \ - sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ - sort -u` ;; \ - esac; \ - for file in $$dist_files; do \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - if test -d $$d/$$file; then \ - dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test -d "$(distdir)/$$file"; then \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ - else \ - test -f "$(distdir)/$$file" \ - || cp -p $$d/$$file "$(distdir)/$$file" \ - || exit 1; \ - fi; \ - done -check-am: all-am -check: check-am -all-am: Makefile $(LTLIBRARIES) $(HEADERS) -installdirs: - for dir in "$(DESTDIR)$(libwebpencodeincludedir)"; do \ - test -z "$$dir" || $(MKDIR_P) "$$dir"; \ - done -install: install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-am -install-strip: - if test -z '$(STRIP)'; then \ - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - install; \ - else \ - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ - fi -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-am - -clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ - mostlyclean-am - -distclean: distclean-am - -rm -f ./$(DEPDIR)/libwebpencode_la-alpha_enc.Plo - -rm -f ./$(DEPDIR)/libwebpencode_la-analysis_enc.Plo - -rm -f ./$(DEPDIR)/libwebpencode_la-backward_references_cost_enc.Plo - -rm -f ./$(DEPDIR)/libwebpencode_la-backward_references_enc.Plo - -rm -f ./$(DEPDIR)/libwebpencode_la-config_enc.Plo - -rm -f ./$(DEPDIR)/libwebpencode_la-cost_enc.Plo - -rm -f ./$(DEPDIR)/libwebpencode_la-filter_enc.Plo - -rm -f ./$(DEPDIR)/libwebpencode_la-frame_enc.Plo - -rm -f ./$(DEPDIR)/libwebpencode_la-histogram_enc.Plo - -rm -f ./$(DEPDIR)/libwebpencode_la-iterator_enc.Plo - -rm -f ./$(DEPDIR)/libwebpencode_la-near_lossless_enc.Plo - -rm -f ./$(DEPDIR)/libwebpencode_la-picture_csp_enc.Plo - -rm -f ./$(DEPDIR)/libwebpencode_la-picture_enc.Plo - -rm -f ./$(DEPDIR)/libwebpencode_la-picture_psnr_enc.Plo - -rm -f ./$(DEPDIR)/libwebpencode_la-picture_rescale_enc.Plo - -rm -f ./$(DEPDIR)/libwebpencode_la-picture_tools_enc.Plo - -rm -f ./$(DEPDIR)/libwebpencode_la-predictor_enc.Plo - -rm -f ./$(DEPDIR)/libwebpencode_la-quant_enc.Plo - -rm -f ./$(DEPDIR)/libwebpencode_la-syntax_enc.Plo - -rm -f ./$(DEPDIR)/libwebpencode_la-token_enc.Plo - -rm -f ./$(DEPDIR)/libwebpencode_la-tree_enc.Plo - -rm -f ./$(DEPDIR)/libwebpencode_la-vp8l_enc.Plo - -rm -f ./$(DEPDIR)/libwebpencode_la-webp_enc.Plo - -rm -f Makefile -distclean-am: clean-am distclean-compile distclean-generic \ - distclean-tags - -dvi: dvi-am - -dvi-am: - -html: html-am - -html-am: - -info: info-am - -info-am: - -install-data-am: install-libwebpencodeincludeHEADERS - -install-dvi: install-dvi-am - -install-dvi-am: - -install-exec-am: - -install-html: install-html-am - -install-html-am: - -install-info: install-info-am - -install-info-am: - -install-man: - -install-pdf: install-pdf-am - -install-pdf-am: - -install-ps: install-ps-am - -install-ps-am: - -installcheck-am: - -maintainer-clean: maintainer-clean-am - -rm -f ./$(DEPDIR)/libwebpencode_la-alpha_enc.Plo - -rm -f ./$(DEPDIR)/libwebpencode_la-analysis_enc.Plo - -rm -f ./$(DEPDIR)/libwebpencode_la-backward_references_cost_enc.Plo - -rm -f ./$(DEPDIR)/libwebpencode_la-backward_references_enc.Plo - -rm -f ./$(DEPDIR)/libwebpencode_la-config_enc.Plo - -rm -f ./$(DEPDIR)/libwebpencode_la-cost_enc.Plo - -rm -f ./$(DEPDIR)/libwebpencode_la-filter_enc.Plo - -rm -f ./$(DEPDIR)/libwebpencode_la-frame_enc.Plo - -rm -f ./$(DEPDIR)/libwebpencode_la-histogram_enc.Plo - -rm -f ./$(DEPDIR)/libwebpencode_la-iterator_enc.Plo - -rm -f ./$(DEPDIR)/libwebpencode_la-near_lossless_enc.Plo - -rm -f ./$(DEPDIR)/libwebpencode_la-picture_csp_enc.Plo - -rm -f ./$(DEPDIR)/libwebpencode_la-picture_enc.Plo - -rm -f ./$(DEPDIR)/libwebpencode_la-picture_psnr_enc.Plo - -rm -f ./$(DEPDIR)/libwebpencode_la-picture_rescale_enc.Plo - -rm -f ./$(DEPDIR)/libwebpencode_la-picture_tools_enc.Plo - -rm -f ./$(DEPDIR)/libwebpencode_la-predictor_enc.Plo - -rm -f ./$(DEPDIR)/libwebpencode_la-quant_enc.Plo - -rm -f ./$(DEPDIR)/libwebpencode_la-syntax_enc.Plo - -rm -f ./$(DEPDIR)/libwebpencode_la-token_enc.Plo - -rm -f ./$(DEPDIR)/libwebpencode_la-tree_enc.Plo - -rm -f ./$(DEPDIR)/libwebpencode_la-vp8l_enc.Plo - -rm -f ./$(DEPDIR)/libwebpencode_la-webp_enc.Plo - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-compile mostlyclean-generic \ - mostlyclean-libtool - -pdf: pdf-am - -pdf-am: - -ps: ps-am - -ps-am: - -uninstall-am: uninstall-libwebpencodeincludeHEADERS - -.MAKE: install-am install-strip - -.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ - clean-generic clean-libtool clean-noinstLTLIBRARIES \ - cscopelist-am ctags ctags-am distclean distclean-compile \ - distclean-generic distclean-libtool distclean-tags distdir dvi \ - dvi-am html html-am info info-am install install-am \ - install-data install-data-am install-dvi install-dvi-am \ - install-exec install-exec-am install-html install-html-am \ - install-info install-info-am \ - install-libwebpencodeincludeHEADERS install-man install-pdf \ - install-pdf-am install-ps install-ps-am install-strip \ - installcheck installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-compile \ - mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ - tags tags-am uninstall uninstall-am \ - uninstall-libwebpencodeincludeHEADERS - -.PRECIOUS: Makefile - - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/Extended/libwebp/src/enc/Makefile.am b/Extended/libwebp/src/enc/Makefile.am deleted file mode 100644 index 27d5228..0000000 --- a/Extended/libwebp/src/enc/Makefile.am +++ /dev/null @@ -1,42 +0,0 @@ -AM_CPPFLAGS += -I$(top_builddir) -I$(top_srcdir) -noinst_LTLIBRARIES = libwebpencode.la - -libwebpencode_la_SOURCES = -libwebpencode_la_SOURCES += alpha_enc.c -libwebpencode_la_SOURCES += analysis_enc.c -libwebpencode_la_SOURCES += backward_references_cost_enc.c -libwebpencode_la_SOURCES += backward_references_enc.c -libwebpencode_la_SOURCES += backward_references_enc.h -libwebpencode_la_SOURCES += config_enc.c -libwebpencode_la_SOURCES += cost_enc.c -libwebpencode_la_SOURCES += cost_enc.h -libwebpencode_la_SOURCES += filter_enc.c -libwebpencode_la_SOURCES += frame_enc.c -libwebpencode_la_SOURCES += histogram_enc.c -libwebpencode_la_SOURCES += histogram_enc.h -libwebpencode_la_SOURCES += iterator_enc.c -libwebpencode_la_SOURCES += near_lossless_enc.c -libwebpencode_la_SOURCES += picture_enc.c -libwebpencode_la_SOURCES += picture_csp_enc.c -libwebpencode_la_SOURCES += picture_psnr_enc.c -libwebpencode_la_SOURCES += picture_rescale_enc.c -libwebpencode_la_SOURCES += picture_tools_enc.c -libwebpencode_la_SOURCES += predictor_enc.c -libwebpencode_la_SOURCES += quant_enc.c -libwebpencode_la_SOURCES += syntax_enc.c -libwebpencode_la_SOURCES += token_enc.c -libwebpencode_la_SOURCES += tree_enc.c -libwebpencode_la_SOURCES += vp8i_enc.h -libwebpencode_la_SOURCES += vp8l_enc.c -libwebpencode_la_SOURCES += vp8li_enc.h -libwebpencode_la_SOURCES += webp_enc.c - -libwebpencodeinclude_HEADERS = -libwebpencodeinclude_HEADERS += ../webp/encode.h -libwebpencodeinclude_HEADERS += ../webp/types.h -noinst_HEADERS = -noinst_HEADERS += ../webp/format_constants.h - -libwebpencode_la_LDFLAGS = -lm -libwebpencode_la_CPPFLAGS = $(AM_CPPFLAGS) -libwebpencodeincludedir = $(includedir)/webp diff --git a/Extended/libwebp/src/enc/Makefile.in b/Extended/libwebp/src/enc/Makefile.in deleted file mode 100644 index cbd41ca..0000000 --- a/Extended/libwebp/src/enc/Makefile.in +++ /dev/null @@ -1,961 +0,0 @@ -# Makefile.in generated by automake 1.16.1 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994-2018 Free Software Foundation, Inc. - -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -@SET_MAKE@ - - -VPATH = @srcdir@ -am__is_gnu_make = { \ - if test -z '$(MAKELEVEL)'; then \ - false; \ - elif test -n '$(MAKE_HOST)'; then \ - true; \ - elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ - true; \ - else \ - false; \ - fi; \ -} -am__make_running_with_option = \ - case $${target_option-} in \ - ?) ;; \ - *) echo "am__make_running_with_option: internal error: invalid" \ - "target option '$${target_option-}' specified" >&2; \ - exit 1;; \ - esac; \ - has_opt=no; \ - sane_makeflags=$$MAKEFLAGS; \ - if $(am__is_gnu_make); then \ - sane_makeflags=$$MFLAGS; \ - else \ - case $$MAKEFLAGS in \ - *\\[\ \ ]*) \ - bs=\\; \ - sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ - | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ - esac; \ - fi; \ - skip_next=no; \ - strip_trailopt () \ - { \ - flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ - }; \ - for flg in $$sane_makeflags; do \ - test $$skip_next = yes && { skip_next=no; continue; }; \ - case $$flg in \ - *=*|--*) continue;; \ - -*I) strip_trailopt 'I'; skip_next=yes;; \ - -*I?*) strip_trailopt 'I';; \ - -*O) strip_trailopt 'O'; skip_next=yes;; \ - -*O?*) strip_trailopt 'O';; \ - -*l) strip_trailopt 'l'; skip_next=yes;; \ - -*l?*) strip_trailopt 'l';; \ - -[dEDm]) skip_next=yes;; \ - -[JT]) skip_next=yes;; \ - esac; \ - case $$flg in \ - *$$target_option*) has_opt=yes; break;; \ - esac; \ - done; \ - test $$has_opt = yes -am__make_dryrun = (target_option=n; $(am__make_running_with_option)) -am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) -pkgdatadir = $(datadir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkglibexecdir = $(libexecdir)/@PACKAGE@ -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = @build@ -host_triplet = @host@ -subdir = src/enc -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pthread.m4 \ - $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ - $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ - $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -DIST_COMMON = $(srcdir)/Makefile.am $(libwebpencodeinclude_HEADERS) \ - $(noinst_HEADERS) $(am__DIST_COMMON) -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = $(top_builddir)/src/webp/config.h -CONFIG_CLEAN_FILES = -CONFIG_CLEAN_VPATH_FILES = -LTLIBRARIES = $(noinst_LTLIBRARIES) -libwebpencode_la_LIBADD = -am_libwebpencode_la_OBJECTS = libwebpencode_la-alpha_enc.lo \ - libwebpencode_la-analysis_enc.lo \ - libwebpencode_la-backward_references_cost_enc.lo \ - libwebpencode_la-backward_references_enc.lo \ - libwebpencode_la-config_enc.lo libwebpencode_la-cost_enc.lo \ - libwebpencode_la-filter_enc.lo libwebpencode_la-frame_enc.lo \ - libwebpencode_la-histogram_enc.lo \ - libwebpencode_la-iterator_enc.lo \ - libwebpencode_la-near_lossless_enc.lo \ - libwebpencode_la-picture_enc.lo \ - libwebpencode_la-picture_csp_enc.lo \ - libwebpencode_la-picture_psnr_enc.lo \ - libwebpencode_la-picture_rescale_enc.lo \ - libwebpencode_la-picture_tools_enc.lo \ - libwebpencode_la-predictor_enc.lo \ - libwebpencode_la-quant_enc.lo libwebpencode_la-syntax_enc.lo \ - libwebpencode_la-token_enc.lo libwebpencode_la-tree_enc.lo \ - libwebpencode_la-vp8l_enc.lo libwebpencode_la-webp_enc.lo -libwebpencode_la_OBJECTS = $(am_libwebpencode_la_OBJECTS) -AM_V_lt = $(am__v_lt_@AM_V@) -am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) -am__v_lt_0 = --silent -am__v_lt_1 = -libwebpencode_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ - $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ - $(AM_CFLAGS) $(CFLAGS) $(libwebpencode_la_LDFLAGS) $(LDFLAGS) \ - -o $@ -AM_V_P = $(am__v_P_@AM_V@) -am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) -am__v_P_0 = false -am__v_P_1 = : -AM_V_GEN = $(am__v_GEN_@AM_V@) -am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) -am__v_GEN_0 = @echo " GEN " $@; -am__v_GEN_1 = -AM_V_at = $(am__v_at_@AM_V@) -am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) -am__v_at_0 = @ -am__v_at_1 = -DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/src/webp -depcomp = $(SHELL) $(top_srcdir)/depcomp -am__maybe_remake_depfiles = depfiles -am__depfiles_remade = ./$(DEPDIR)/libwebpencode_la-alpha_enc.Plo \ - ./$(DEPDIR)/libwebpencode_la-analysis_enc.Plo \ - ./$(DEPDIR)/libwebpencode_la-backward_references_cost_enc.Plo \ - ./$(DEPDIR)/libwebpencode_la-backward_references_enc.Plo \ - ./$(DEPDIR)/libwebpencode_la-config_enc.Plo \ - ./$(DEPDIR)/libwebpencode_la-cost_enc.Plo \ - ./$(DEPDIR)/libwebpencode_la-filter_enc.Plo \ - ./$(DEPDIR)/libwebpencode_la-frame_enc.Plo \ - ./$(DEPDIR)/libwebpencode_la-histogram_enc.Plo \ - ./$(DEPDIR)/libwebpencode_la-iterator_enc.Plo \ - ./$(DEPDIR)/libwebpencode_la-near_lossless_enc.Plo \ - ./$(DEPDIR)/libwebpencode_la-picture_csp_enc.Plo \ - ./$(DEPDIR)/libwebpencode_la-picture_enc.Plo \ - ./$(DEPDIR)/libwebpencode_la-picture_psnr_enc.Plo \ - ./$(DEPDIR)/libwebpencode_la-picture_rescale_enc.Plo \ - ./$(DEPDIR)/libwebpencode_la-picture_tools_enc.Plo \ - ./$(DEPDIR)/libwebpencode_la-predictor_enc.Plo \ - ./$(DEPDIR)/libwebpencode_la-quant_enc.Plo \ - ./$(DEPDIR)/libwebpencode_la-syntax_enc.Plo \ - ./$(DEPDIR)/libwebpencode_la-token_enc.Plo \ - ./$(DEPDIR)/libwebpencode_la-tree_enc.Plo \ - ./$(DEPDIR)/libwebpencode_la-vp8l_enc.Plo \ - ./$(DEPDIR)/libwebpencode_la-webp_enc.Plo -am__mv = mv -f -COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ - $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CFLAGS) $(CFLAGS) -AM_V_CC = $(am__v_CC_@AM_V@) -am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) -am__v_CC_0 = @echo " CC " $@; -am__v_CC_1 = -CCLD = $(CC) -LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ - $(AM_LDFLAGS) $(LDFLAGS) -o $@ -AM_V_CCLD = $(am__v_CCLD_@AM_V@) -am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) -am__v_CCLD_0 = @echo " CCLD " $@; -am__v_CCLD_1 = -SOURCES = $(libwebpencode_la_SOURCES) -DIST_SOURCES = $(libwebpencode_la_SOURCES) -am__can_run_installinfo = \ - case $$AM_UPDATE_INFO_DIR in \ - n|no|NO) false;; \ - *) (install-info --version) >/dev/null 2>&1;; \ - esac -am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; -am__vpath_adj = case $$p in \ - $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ - *) f=$$p;; \ - esac; -am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; -am__install_max = 40 -am__nobase_strip_setup = \ - srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` -am__nobase_strip = \ - for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" -am__nobase_list = $(am__nobase_strip_setup); \ - for p in $$list; do echo "$$p $$p"; done | \ - sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ - $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ - if (++n[$$2] == $(am__install_max)) \ - { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ - END { for (dir in files) print dir, files[dir] }' -am__base_list = \ - sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ - sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' -am__uninstall_files_from_dir = { \ - test -z "$$files" \ - || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ - || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ - $(am__cd) "$$dir" && rm -f $$files; }; \ - } -am__installdirs = "$(DESTDIR)$(libwebpencodeincludedir)" -HEADERS = $(libwebpencodeinclude_HEADERS) $(noinst_HEADERS) -am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) -# Read a list of newline-separated strings from the standard input, -# and print each of them once, without duplicates. Input order is -# *not* preserved. -am__uniquify_input = $(AWK) '\ - BEGIN { nonempty = 0; } \ - { items[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in items) print i; }; } \ -' -# Make sure the list of sources is unique. This is necessary because, -# e.g., the same source file might be shared among _SOURCES variables -# for different programs/libraries. -am__define_uniq_tagged_files = \ - list='$(am__tagged_files)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | $(am__uniquify_input)` -ETAGS = etags -CTAGS = ctags -am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = @ACLOCAL@ -AMTAR = @AMTAR@ -AM_CFLAGS = @AM_CFLAGS@ -AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_builddir) -I$(top_srcdir) -AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ -AR = @AR@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -CC = @CC@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -DLLTOOL = @DLLTOOL@ -DSYMUTIL = @DSYMUTIL@ -DUMPBIN = @DUMPBIN@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -FGREP = @FGREP@ -GIF_INCLUDES = @GIF_INCLUDES@ -GIF_LIBS = @GIF_LIBS@ -GL_INCLUDES = @GL_INCLUDES@ -GL_LIBS = @GL_LIBS@ -GREP = @GREP@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -JPEG_INCLUDES = @JPEG_INCLUDES@ -JPEG_LIBS = @JPEG_LIBS@ -LD = @LD@ -LDFLAGS = @LDFLAGS@ -LIBOBJS = @LIBOBJS@ -LIBPNG_CONFIG = @LIBPNG_CONFIG@ -LIBS = @LIBS@ -LIBSDL_CONFIG = @LIBSDL_CONFIG@ -LIBTOOL = @LIBTOOL@ -LIPO = @LIPO@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ -MAKEINFO = @MAKEINFO@ -MANIFEST_TOOL = @MANIFEST_TOOL@ -MKDIR_P = @MKDIR_P@ -NEON_FLAGS = @NEON_FLAGS@ -NM = @NM@ -NMEDIT = @NMEDIT@ -OBJDUMP = @OBJDUMP@ -OBJEXT = @OBJEXT@ -OTOOL = @OTOOL@ -OTOOL64 = @OTOOL64@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_URL = @PACKAGE_URL@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -PNG_INCLUDES = @PNG_INCLUDES@ -PNG_LIBS = @PNG_LIBS@ -PTHREAD_CC = @PTHREAD_CC@ -PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ -PTHREAD_LIBS = @PTHREAD_LIBS@ -RANLIB = @RANLIB@ -SDL_INCLUDES = @SDL_INCLUDES@ -SDL_LIBS = @SDL_LIBS@ -SED = @SED@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -SSE2_FLAGS = @SSE2_FLAGS@ -SSE41_FLAGS = @SSE41_FLAGS@ -STRIP = @STRIP@ -TIFF_INCLUDES = @TIFF_INCLUDES@ -TIFF_LIBS = @TIFF_LIBS@ -USE_SWAP_16BIT_CSP = @USE_SWAP_16BIT_CSP@ -VERSION = @VERSION@ -abs_builddir = @abs_builddir@ -abs_srcdir = @abs_srcdir@ -abs_top_builddir = @abs_top_builddir@ -abs_top_srcdir = @abs_top_srcdir@ -ac_ct_AR = @ac_ct_AR@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ -am__include = @am__include@ -am__leading_dot = @am__leading_dot@ -am__quote = @am__quote@ -am__tar = @am__tar@ -am__untar = @am__untar@ -ax_pthread_config = @ax_pthread_config@ -bindir = @bindir@ -build = @build@ -build_alias = @build_alias@ -build_cpu = @build_cpu@ -build_os = @build_os@ -build_vendor = @build_vendor@ -builddir = @builddir@ -datadir = @datadir@ -datarootdir = @datarootdir@ -docdir = @docdir@ -dvidir = @dvidir@ -exec_prefix = @exec_prefix@ -host = @host@ -host_alias = @host_alias@ -host_cpu = @host_cpu@ -host_os = @host_os@ -host_vendor = @host_vendor@ -htmldir = @htmldir@ -includedir = @includedir@ -infodir = @infodir@ -install_sh = @install_sh@ -libdir = @libdir@ -libexecdir = @libexecdir@ -localedir = @localedir@ -localstatedir = @localstatedir@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -oldincludedir = @oldincludedir@ -pdfdir = @pdfdir@ -pkgconfigdir = @pkgconfigdir@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -psdir = @psdir@ -runstatedir = @runstatedir@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -srcdir = @srcdir@ -sysconfdir = @sysconfdir@ -target_alias = @target_alias@ -top_build_prefix = @top_build_prefix@ -top_builddir = @top_builddir@ -top_srcdir = @top_srcdir@ -noinst_LTLIBRARIES = libwebpencode.la -libwebpencode_la_SOURCES = alpha_enc.c analysis_enc.c \ - backward_references_cost_enc.c backward_references_enc.c \ - backward_references_enc.h config_enc.c cost_enc.c cost_enc.h \ - filter_enc.c frame_enc.c histogram_enc.c histogram_enc.h \ - iterator_enc.c near_lossless_enc.c picture_enc.c \ - picture_csp_enc.c picture_psnr_enc.c picture_rescale_enc.c \ - picture_tools_enc.c predictor_enc.c quant_enc.c syntax_enc.c \ - token_enc.c tree_enc.c vp8i_enc.h vp8l_enc.c vp8li_enc.h \ - webp_enc.c -libwebpencodeinclude_HEADERS = ../webp/encode.h ../webp/types.h -noinst_HEADERS = ../webp/format_constants.h -libwebpencode_la_LDFLAGS = -lm -libwebpencode_la_CPPFLAGS = $(AM_CPPFLAGS) -libwebpencodeincludedir = $(includedir)/webp -all: all-am - -.SUFFIXES: -.SUFFIXES: .c .lo .o .obj -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ - && { if test -f $@; then exit 0; else break; fi; }; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/enc/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --foreign src/enc/Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(am__aclocal_m4_deps): - -clean-noinstLTLIBRARIES: - -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) - @list='$(noinst_LTLIBRARIES)'; \ - locs=`for p in $$list; do echo $$p; done | \ - sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ - sort -u`; \ - test -z "$$locs" || { \ - echo rm -f $${locs}; \ - rm -f $${locs}; \ - } - -libwebpencode.la: $(libwebpencode_la_OBJECTS) $(libwebpencode_la_DEPENDENCIES) $(EXTRA_libwebpencode_la_DEPENDENCIES) - $(AM_V_CCLD)$(libwebpencode_la_LINK) $(libwebpencode_la_OBJECTS) $(libwebpencode_la_LIBADD) $(LIBS) - -mostlyclean-compile: - -rm -f *.$(OBJEXT) - -distclean-compile: - -rm -f *.tab.c - -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwebpencode_la-alpha_enc.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwebpencode_la-analysis_enc.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwebpencode_la-backward_references_cost_enc.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwebpencode_la-backward_references_enc.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwebpencode_la-config_enc.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwebpencode_la-cost_enc.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwebpencode_la-filter_enc.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwebpencode_la-frame_enc.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwebpencode_la-histogram_enc.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwebpencode_la-iterator_enc.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwebpencode_la-near_lossless_enc.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwebpencode_la-picture_csp_enc.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwebpencode_la-picture_enc.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwebpencode_la-picture_psnr_enc.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwebpencode_la-picture_rescale_enc.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwebpencode_la-picture_tools_enc.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwebpencode_la-predictor_enc.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwebpencode_la-quant_enc.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwebpencode_la-syntax_enc.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwebpencode_la-token_enc.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwebpencode_la-tree_enc.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwebpencode_la-vp8l_enc.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwebpencode_la-webp_enc.Plo@am__quote@ # am--include-marker - -$(am__depfiles_remade): - @$(MKDIR_P) $(@D) - @echo '# dummy' >$@-t && $(am__mv) $@-t $@ - -am--depfiles: $(am__depfiles_remade) - -.c.o: -@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ -@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ -@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< - -.c.obj: -@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ -@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ -@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` - -.c.lo: -@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ -@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ -@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< - -libwebpencode_la-alpha_enc.lo: alpha_enc.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpencode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwebpencode_la-alpha_enc.lo -MD -MP -MF $(DEPDIR)/libwebpencode_la-alpha_enc.Tpo -c -o libwebpencode_la-alpha_enc.lo `test -f 'alpha_enc.c' || echo '$(srcdir)/'`alpha_enc.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpencode_la-alpha_enc.Tpo $(DEPDIR)/libwebpencode_la-alpha_enc.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='alpha_enc.c' object='libwebpencode_la-alpha_enc.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpencode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwebpencode_la-alpha_enc.lo `test -f 'alpha_enc.c' || echo '$(srcdir)/'`alpha_enc.c - -libwebpencode_la-analysis_enc.lo: analysis_enc.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpencode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwebpencode_la-analysis_enc.lo -MD -MP -MF $(DEPDIR)/libwebpencode_la-analysis_enc.Tpo -c -o libwebpencode_la-analysis_enc.lo `test -f 'analysis_enc.c' || echo '$(srcdir)/'`analysis_enc.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpencode_la-analysis_enc.Tpo $(DEPDIR)/libwebpencode_la-analysis_enc.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='analysis_enc.c' object='libwebpencode_la-analysis_enc.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpencode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwebpencode_la-analysis_enc.lo `test -f 'analysis_enc.c' || echo '$(srcdir)/'`analysis_enc.c - -libwebpencode_la-backward_references_cost_enc.lo: backward_references_cost_enc.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpencode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwebpencode_la-backward_references_cost_enc.lo -MD -MP -MF $(DEPDIR)/libwebpencode_la-backward_references_cost_enc.Tpo -c -o libwebpencode_la-backward_references_cost_enc.lo `test -f 'backward_references_cost_enc.c' || echo '$(srcdir)/'`backward_references_cost_enc.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpencode_la-backward_references_cost_enc.Tpo $(DEPDIR)/libwebpencode_la-backward_references_cost_enc.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='backward_references_cost_enc.c' object='libwebpencode_la-backward_references_cost_enc.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpencode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwebpencode_la-backward_references_cost_enc.lo `test -f 'backward_references_cost_enc.c' || echo '$(srcdir)/'`backward_references_cost_enc.c - -libwebpencode_la-backward_references_enc.lo: backward_references_enc.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpencode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwebpencode_la-backward_references_enc.lo -MD -MP -MF $(DEPDIR)/libwebpencode_la-backward_references_enc.Tpo -c -o libwebpencode_la-backward_references_enc.lo `test -f 'backward_references_enc.c' || echo '$(srcdir)/'`backward_references_enc.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpencode_la-backward_references_enc.Tpo $(DEPDIR)/libwebpencode_la-backward_references_enc.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='backward_references_enc.c' object='libwebpencode_la-backward_references_enc.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpencode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwebpencode_la-backward_references_enc.lo `test -f 'backward_references_enc.c' || echo '$(srcdir)/'`backward_references_enc.c - -libwebpencode_la-config_enc.lo: config_enc.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpencode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwebpencode_la-config_enc.lo -MD -MP -MF $(DEPDIR)/libwebpencode_la-config_enc.Tpo -c -o libwebpencode_la-config_enc.lo `test -f 'config_enc.c' || echo '$(srcdir)/'`config_enc.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpencode_la-config_enc.Tpo $(DEPDIR)/libwebpencode_la-config_enc.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='config_enc.c' object='libwebpencode_la-config_enc.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpencode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwebpencode_la-config_enc.lo `test -f 'config_enc.c' || echo '$(srcdir)/'`config_enc.c - -libwebpencode_la-cost_enc.lo: cost_enc.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpencode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwebpencode_la-cost_enc.lo -MD -MP -MF $(DEPDIR)/libwebpencode_la-cost_enc.Tpo -c -o libwebpencode_la-cost_enc.lo `test -f 'cost_enc.c' || echo '$(srcdir)/'`cost_enc.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpencode_la-cost_enc.Tpo $(DEPDIR)/libwebpencode_la-cost_enc.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='cost_enc.c' object='libwebpencode_la-cost_enc.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpencode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwebpencode_la-cost_enc.lo `test -f 'cost_enc.c' || echo '$(srcdir)/'`cost_enc.c - -libwebpencode_la-filter_enc.lo: filter_enc.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpencode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwebpencode_la-filter_enc.lo -MD -MP -MF $(DEPDIR)/libwebpencode_la-filter_enc.Tpo -c -o libwebpencode_la-filter_enc.lo `test -f 'filter_enc.c' || echo '$(srcdir)/'`filter_enc.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpencode_la-filter_enc.Tpo $(DEPDIR)/libwebpencode_la-filter_enc.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='filter_enc.c' object='libwebpencode_la-filter_enc.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpencode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwebpencode_la-filter_enc.lo `test -f 'filter_enc.c' || echo '$(srcdir)/'`filter_enc.c - -libwebpencode_la-frame_enc.lo: frame_enc.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpencode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwebpencode_la-frame_enc.lo -MD -MP -MF $(DEPDIR)/libwebpencode_la-frame_enc.Tpo -c -o libwebpencode_la-frame_enc.lo `test -f 'frame_enc.c' || echo '$(srcdir)/'`frame_enc.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpencode_la-frame_enc.Tpo $(DEPDIR)/libwebpencode_la-frame_enc.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='frame_enc.c' object='libwebpencode_la-frame_enc.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpencode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwebpencode_la-frame_enc.lo `test -f 'frame_enc.c' || echo '$(srcdir)/'`frame_enc.c - -libwebpencode_la-histogram_enc.lo: histogram_enc.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpencode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwebpencode_la-histogram_enc.lo -MD -MP -MF $(DEPDIR)/libwebpencode_la-histogram_enc.Tpo -c -o libwebpencode_la-histogram_enc.lo `test -f 'histogram_enc.c' || echo '$(srcdir)/'`histogram_enc.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpencode_la-histogram_enc.Tpo $(DEPDIR)/libwebpencode_la-histogram_enc.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='histogram_enc.c' object='libwebpencode_la-histogram_enc.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpencode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwebpencode_la-histogram_enc.lo `test -f 'histogram_enc.c' || echo '$(srcdir)/'`histogram_enc.c - -libwebpencode_la-iterator_enc.lo: iterator_enc.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpencode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwebpencode_la-iterator_enc.lo -MD -MP -MF $(DEPDIR)/libwebpencode_la-iterator_enc.Tpo -c -o libwebpencode_la-iterator_enc.lo `test -f 'iterator_enc.c' || echo '$(srcdir)/'`iterator_enc.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpencode_la-iterator_enc.Tpo $(DEPDIR)/libwebpencode_la-iterator_enc.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='iterator_enc.c' object='libwebpencode_la-iterator_enc.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpencode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwebpencode_la-iterator_enc.lo `test -f 'iterator_enc.c' || echo '$(srcdir)/'`iterator_enc.c - -libwebpencode_la-near_lossless_enc.lo: near_lossless_enc.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpencode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwebpencode_la-near_lossless_enc.lo -MD -MP -MF $(DEPDIR)/libwebpencode_la-near_lossless_enc.Tpo -c -o libwebpencode_la-near_lossless_enc.lo `test -f 'near_lossless_enc.c' || echo '$(srcdir)/'`near_lossless_enc.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpencode_la-near_lossless_enc.Tpo $(DEPDIR)/libwebpencode_la-near_lossless_enc.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='near_lossless_enc.c' object='libwebpencode_la-near_lossless_enc.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpencode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwebpencode_la-near_lossless_enc.lo `test -f 'near_lossless_enc.c' || echo '$(srcdir)/'`near_lossless_enc.c - -libwebpencode_la-picture_enc.lo: picture_enc.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpencode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwebpencode_la-picture_enc.lo -MD -MP -MF $(DEPDIR)/libwebpencode_la-picture_enc.Tpo -c -o libwebpencode_la-picture_enc.lo `test -f 'picture_enc.c' || echo '$(srcdir)/'`picture_enc.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpencode_la-picture_enc.Tpo $(DEPDIR)/libwebpencode_la-picture_enc.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='picture_enc.c' object='libwebpencode_la-picture_enc.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpencode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwebpencode_la-picture_enc.lo `test -f 'picture_enc.c' || echo '$(srcdir)/'`picture_enc.c - -libwebpencode_la-picture_csp_enc.lo: picture_csp_enc.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpencode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwebpencode_la-picture_csp_enc.lo -MD -MP -MF $(DEPDIR)/libwebpencode_la-picture_csp_enc.Tpo -c -o libwebpencode_la-picture_csp_enc.lo `test -f 'picture_csp_enc.c' || echo '$(srcdir)/'`picture_csp_enc.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpencode_la-picture_csp_enc.Tpo $(DEPDIR)/libwebpencode_la-picture_csp_enc.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='picture_csp_enc.c' object='libwebpencode_la-picture_csp_enc.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpencode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwebpencode_la-picture_csp_enc.lo `test -f 'picture_csp_enc.c' || echo '$(srcdir)/'`picture_csp_enc.c - -libwebpencode_la-picture_psnr_enc.lo: picture_psnr_enc.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpencode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwebpencode_la-picture_psnr_enc.lo -MD -MP -MF $(DEPDIR)/libwebpencode_la-picture_psnr_enc.Tpo -c -o libwebpencode_la-picture_psnr_enc.lo `test -f 'picture_psnr_enc.c' || echo '$(srcdir)/'`picture_psnr_enc.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpencode_la-picture_psnr_enc.Tpo $(DEPDIR)/libwebpencode_la-picture_psnr_enc.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='picture_psnr_enc.c' object='libwebpencode_la-picture_psnr_enc.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpencode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwebpencode_la-picture_psnr_enc.lo `test -f 'picture_psnr_enc.c' || echo '$(srcdir)/'`picture_psnr_enc.c - -libwebpencode_la-picture_rescale_enc.lo: picture_rescale_enc.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpencode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwebpencode_la-picture_rescale_enc.lo -MD -MP -MF $(DEPDIR)/libwebpencode_la-picture_rescale_enc.Tpo -c -o libwebpencode_la-picture_rescale_enc.lo `test -f 'picture_rescale_enc.c' || echo '$(srcdir)/'`picture_rescale_enc.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpencode_la-picture_rescale_enc.Tpo $(DEPDIR)/libwebpencode_la-picture_rescale_enc.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='picture_rescale_enc.c' object='libwebpencode_la-picture_rescale_enc.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpencode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwebpencode_la-picture_rescale_enc.lo `test -f 'picture_rescale_enc.c' || echo '$(srcdir)/'`picture_rescale_enc.c - -libwebpencode_la-picture_tools_enc.lo: picture_tools_enc.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpencode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwebpencode_la-picture_tools_enc.lo -MD -MP -MF $(DEPDIR)/libwebpencode_la-picture_tools_enc.Tpo -c -o libwebpencode_la-picture_tools_enc.lo `test -f 'picture_tools_enc.c' || echo '$(srcdir)/'`picture_tools_enc.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpencode_la-picture_tools_enc.Tpo $(DEPDIR)/libwebpencode_la-picture_tools_enc.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='picture_tools_enc.c' object='libwebpencode_la-picture_tools_enc.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpencode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwebpencode_la-picture_tools_enc.lo `test -f 'picture_tools_enc.c' || echo '$(srcdir)/'`picture_tools_enc.c - -libwebpencode_la-predictor_enc.lo: predictor_enc.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpencode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwebpencode_la-predictor_enc.lo -MD -MP -MF $(DEPDIR)/libwebpencode_la-predictor_enc.Tpo -c -o libwebpencode_la-predictor_enc.lo `test -f 'predictor_enc.c' || echo '$(srcdir)/'`predictor_enc.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpencode_la-predictor_enc.Tpo $(DEPDIR)/libwebpencode_la-predictor_enc.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='predictor_enc.c' object='libwebpencode_la-predictor_enc.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpencode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwebpencode_la-predictor_enc.lo `test -f 'predictor_enc.c' || echo '$(srcdir)/'`predictor_enc.c - -libwebpencode_la-quant_enc.lo: quant_enc.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpencode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwebpencode_la-quant_enc.lo -MD -MP -MF $(DEPDIR)/libwebpencode_la-quant_enc.Tpo -c -o libwebpencode_la-quant_enc.lo `test -f 'quant_enc.c' || echo '$(srcdir)/'`quant_enc.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpencode_la-quant_enc.Tpo $(DEPDIR)/libwebpencode_la-quant_enc.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='quant_enc.c' object='libwebpencode_la-quant_enc.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpencode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwebpencode_la-quant_enc.lo `test -f 'quant_enc.c' || echo '$(srcdir)/'`quant_enc.c - -libwebpencode_la-syntax_enc.lo: syntax_enc.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpencode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwebpencode_la-syntax_enc.lo -MD -MP -MF $(DEPDIR)/libwebpencode_la-syntax_enc.Tpo -c -o libwebpencode_la-syntax_enc.lo `test -f 'syntax_enc.c' || echo '$(srcdir)/'`syntax_enc.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpencode_la-syntax_enc.Tpo $(DEPDIR)/libwebpencode_la-syntax_enc.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='syntax_enc.c' object='libwebpencode_la-syntax_enc.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpencode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwebpencode_la-syntax_enc.lo `test -f 'syntax_enc.c' || echo '$(srcdir)/'`syntax_enc.c - -libwebpencode_la-token_enc.lo: token_enc.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpencode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwebpencode_la-token_enc.lo -MD -MP -MF $(DEPDIR)/libwebpencode_la-token_enc.Tpo -c -o libwebpencode_la-token_enc.lo `test -f 'token_enc.c' || echo '$(srcdir)/'`token_enc.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpencode_la-token_enc.Tpo $(DEPDIR)/libwebpencode_la-token_enc.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='token_enc.c' object='libwebpencode_la-token_enc.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpencode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwebpencode_la-token_enc.lo `test -f 'token_enc.c' || echo '$(srcdir)/'`token_enc.c - -libwebpencode_la-tree_enc.lo: tree_enc.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpencode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwebpencode_la-tree_enc.lo -MD -MP -MF $(DEPDIR)/libwebpencode_la-tree_enc.Tpo -c -o libwebpencode_la-tree_enc.lo `test -f 'tree_enc.c' || echo '$(srcdir)/'`tree_enc.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpencode_la-tree_enc.Tpo $(DEPDIR)/libwebpencode_la-tree_enc.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tree_enc.c' object='libwebpencode_la-tree_enc.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpencode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwebpencode_la-tree_enc.lo `test -f 'tree_enc.c' || echo '$(srcdir)/'`tree_enc.c - -libwebpencode_la-vp8l_enc.lo: vp8l_enc.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpencode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwebpencode_la-vp8l_enc.lo -MD -MP -MF $(DEPDIR)/libwebpencode_la-vp8l_enc.Tpo -c -o libwebpencode_la-vp8l_enc.lo `test -f 'vp8l_enc.c' || echo '$(srcdir)/'`vp8l_enc.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpencode_la-vp8l_enc.Tpo $(DEPDIR)/libwebpencode_la-vp8l_enc.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='vp8l_enc.c' object='libwebpencode_la-vp8l_enc.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpencode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwebpencode_la-vp8l_enc.lo `test -f 'vp8l_enc.c' || echo '$(srcdir)/'`vp8l_enc.c - -libwebpencode_la-webp_enc.lo: webp_enc.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpencode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libwebpencode_la-webp_enc.lo -MD -MP -MF $(DEPDIR)/libwebpencode_la-webp_enc.Tpo -c -o libwebpencode_la-webp_enc.lo `test -f 'webp_enc.c' || echo '$(srcdir)/'`webp_enc.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libwebpencode_la-webp_enc.Tpo $(DEPDIR)/libwebpencode_la-webp_enc.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='webp_enc.c' object='libwebpencode_la-webp_enc.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwebpencode_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libwebpencode_la-webp_enc.lo `test -f 'webp_enc.c' || echo '$(srcdir)/'`webp_enc.c - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs -install-libwebpencodeincludeHEADERS: $(libwebpencodeinclude_HEADERS) - @$(NORMAL_INSTALL) - @list='$(libwebpencodeinclude_HEADERS)'; test -n "$(libwebpencodeincludedir)" || list=; \ - if test -n "$$list"; then \ - echo " $(MKDIR_P) '$(DESTDIR)$(libwebpencodeincludedir)'"; \ - $(MKDIR_P) "$(DESTDIR)$(libwebpencodeincludedir)" || exit 1; \ - fi; \ - for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - echo "$$d$$p"; \ - done | $(am__base_list) | \ - while read files; do \ - echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(libwebpencodeincludedir)'"; \ - $(INSTALL_HEADER) $$files "$(DESTDIR)$(libwebpencodeincludedir)" || exit $$?; \ - done - -uninstall-libwebpencodeincludeHEADERS: - @$(NORMAL_UNINSTALL) - @list='$(libwebpencodeinclude_HEADERS)'; test -n "$(libwebpencodeincludedir)" || list=; \ - files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ - dir='$(DESTDIR)$(libwebpencodeincludedir)'; $(am__uninstall_files_from_dir) - -ID: $(am__tagged_files) - $(am__define_uniq_tagged_files); mkid -fID $$unique -tags: tags-am -TAGS: tags - -tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) - set x; \ - here=`pwd`; \ - $(am__define_uniq_tagged_files); \ - shift; \ - if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ - test -n "$$unique" || unique=$$empty_fix; \ - if test $$# -gt 0; then \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - "$$@" $$unique; \ - else \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$unique; \ - fi; \ - fi -ctags: ctags-am - -CTAGS: ctags -ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) - $(am__define_uniq_tagged_files); \ - test -z "$(CTAGS_ARGS)$$unique" \ - || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$unique - -GTAGS: - here=`$(am__cd) $(top_builddir) && pwd` \ - && $(am__cd) $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) "$$here" -cscopelist: cscopelist-am - -cscopelist-am: $(am__tagged_files) - list='$(am__tagged_files)'; \ - case "$(srcdir)" in \ - [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ - *) sdir=$(subdir)/$(srcdir) ;; \ - esac; \ - for i in $$list; do \ - if test -f "$$i"; then \ - echo "$(subdir)/$$i"; \ - else \ - echo "$$sdir/$$i"; \ - fi; \ - done >> $(top_builddir)/cscope.files - -distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - -distdir: $(BUILT_SOURCES) - $(MAKE) $(AM_MAKEFLAGS) distdir-am - -distdir-am: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - list='$(DISTFILES)'; \ - dist_files=`for file in $$list; do echo $$file; done | \ - sed -e "s|^$$srcdirstrip/||;t" \ - -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ - case $$dist_files in \ - */*) $(MKDIR_P) `echo "$$dist_files" | \ - sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ - sort -u` ;; \ - esac; \ - for file in $$dist_files; do \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - if test -d $$d/$$file; then \ - dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test -d "$(distdir)/$$file"; then \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ - else \ - test -f "$(distdir)/$$file" \ - || cp -p $$d/$$file "$(distdir)/$$file" \ - || exit 1; \ - fi; \ - done -check-am: all-am -check: check-am -all-am: Makefile $(LTLIBRARIES) $(HEADERS) -installdirs: - for dir in "$(DESTDIR)$(libwebpencodeincludedir)"; do \ - test -z "$$dir" || $(MKDIR_P) "$$dir"; \ - done -install: install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-am -install-strip: - if test -z '$(STRIP)'; then \ - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - install; \ - else \ - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ - fi -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-am - -clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ - mostlyclean-am - -distclean: distclean-am - -rm -f ./$(DEPDIR)/libwebpencode_la-alpha_enc.Plo - -rm -f ./$(DEPDIR)/libwebpencode_la-analysis_enc.Plo - -rm -f ./$(DEPDIR)/libwebpencode_la-backward_references_cost_enc.Plo - -rm -f ./$(DEPDIR)/libwebpencode_la-backward_references_enc.Plo - -rm -f ./$(DEPDIR)/libwebpencode_la-config_enc.Plo - -rm -f ./$(DEPDIR)/libwebpencode_la-cost_enc.Plo - -rm -f ./$(DEPDIR)/libwebpencode_la-filter_enc.Plo - -rm -f ./$(DEPDIR)/libwebpencode_la-frame_enc.Plo - -rm -f ./$(DEPDIR)/libwebpencode_la-histogram_enc.Plo - -rm -f ./$(DEPDIR)/libwebpencode_la-iterator_enc.Plo - -rm -f ./$(DEPDIR)/libwebpencode_la-near_lossless_enc.Plo - -rm -f ./$(DEPDIR)/libwebpencode_la-picture_csp_enc.Plo - -rm -f ./$(DEPDIR)/libwebpencode_la-picture_enc.Plo - -rm -f ./$(DEPDIR)/libwebpencode_la-picture_psnr_enc.Plo - -rm -f ./$(DEPDIR)/libwebpencode_la-picture_rescale_enc.Plo - -rm -f ./$(DEPDIR)/libwebpencode_la-picture_tools_enc.Plo - -rm -f ./$(DEPDIR)/libwebpencode_la-predictor_enc.Plo - -rm -f ./$(DEPDIR)/libwebpencode_la-quant_enc.Plo - -rm -f ./$(DEPDIR)/libwebpencode_la-syntax_enc.Plo - -rm -f ./$(DEPDIR)/libwebpencode_la-token_enc.Plo - -rm -f ./$(DEPDIR)/libwebpencode_la-tree_enc.Plo - -rm -f ./$(DEPDIR)/libwebpencode_la-vp8l_enc.Plo - -rm -f ./$(DEPDIR)/libwebpencode_la-webp_enc.Plo - -rm -f Makefile -distclean-am: clean-am distclean-compile distclean-generic \ - distclean-tags - -dvi: dvi-am - -dvi-am: - -html: html-am - -html-am: - -info: info-am - -info-am: - -install-data-am: install-libwebpencodeincludeHEADERS - -install-dvi: install-dvi-am - -install-dvi-am: - -install-exec-am: - -install-html: install-html-am - -install-html-am: - -install-info: install-info-am - -install-info-am: - -install-man: - -install-pdf: install-pdf-am - -install-pdf-am: - -install-ps: install-ps-am - -install-ps-am: - -installcheck-am: - -maintainer-clean: maintainer-clean-am - -rm -f ./$(DEPDIR)/libwebpencode_la-alpha_enc.Plo - -rm -f ./$(DEPDIR)/libwebpencode_la-analysis_enc.Plo - -rm -f ./$(DEPDIR)/libwebpencode_la-backward_references_cost_enc.Plo - -rm -f ./$(DEPDIR)/libwebpencode_la-backward_references_enc.Plo - -rm -f ./$(DEPDIR)/libwebpencode_la-config_enc.Plo - -rm -f ./$(DEPDIR)/libwebpencode_la-cost_enc.Plo - -rm -f ./$(DEPDIR)/libwebpencode_la-filter_enc.Plo - -rm -f ./$(DEPDIR)/libwebpencode_la-frame_enc.Plo - -rm -f ./$(DEPDIR)/libwebpencode_la-histogram_enc.Plo - -rm -f ./$(DEPDIR)/libwebpencode_la-iterator_enc.Plo - -rm -f ./$(DEPDIR)/libwebpencode_la-near_lossless_enc.Plo - -rm -f ./$(DEPDIR)/libwebpencode_la-picture_csp_enc.Plo - -rm -f ./$(DEPDIR)/libwebpencode_la-picture_enc.Plo - -rm -f ./$(DEPDIR)/libwebpencode_la-picture_psnr_enc.Plo - -rm -f ./$(DEPDIR)/libwebpencode_la-picture_rescale_enc.Plo - -rm -f ./$(DEPDIR)/libwebpencode_la-picture_tools_enc.Plo - -rm -f ./$(DEPDIR)/libwebpencode_la-predictor_enc.Plo - -rm -f ./$(DEPDIR)/libwebpencode_la-quant_enc.Plo - -rm -f ./$(DEPDIR)/libwebpencode_la-syntax_enc.Plo - -rm -f ./$(DEPDIR)/libwebpencode_la-token_enc.Plo - -rm -f ./$(DEPDIR)/libwebpencode_la-tree_enc.Plo - -rm -f ./$(DEPDIR)/libwebpencode_la-vp8l_enc.Plo - -rm -f ./$(DEPDIR)/libwebpencode_la-webp_enc.Plo - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-compile mostlyclean-generic \ - mostlyclean-libtool - -pdf: pdf-am - -pdf-am: - -ps: ps-am - -ps-am: - -uninstall-am: uninstall-libwebpencodeincludeHEADERS - -.MAKE: install-am install-strip - -.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ - clean-generic clean-libtool clean-noinstLTLIBRARIES \ - cscopelist-am ctags ctags-am distclean distclean-compile \ - distclean-generic distclean-libtool distclean-tags distdir dvi \ - dvi-am html html-am info info-am install install-am \ - install-data install-data-am install-dvi install-dvi-am \ - install-exec install-exec-am install-html install-html-am \ - install-info install-info-am \ - install-libwebpencodeincludeHEADERS install-man install-pdf \ - install-pdf-am install-ps install-ps-am install-strip \ - installcheck installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-compile \ - mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ - tags tags-am uninstall uninstall-am \ - uninstall-libwebpencodeincludeHEADERS - -.PRECIOUS: Makefile - - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/Extended/libwebp/src/enc/alpha_enc.c b/Extended/libwebp/src/enc/alpha_enc.c deleted file mode 100644 index dce9ca9..0000000 --- a/Extended/libwebp/src/enc/alpha_enc.c +++ /dev/null @@ -1,443 +0,0 @@ -// Copyright 2011 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Alpha-plane compression. -// -// Author: Skal (pascal.massimino@gmail.com) - -#include -#include - -#include "src/enc/vp8i_enc.h" -#include "src/dsp/dsp.h" -#include "src/utils/filters_utils.h" -#include "src/utils/quant_levels_utils.h" -#include "src/utils/utils.h" -#include "src/webp/format_constants.h" - -// ----------------------------------------------------------------------------- -// Encodes the given alpha data via specified compression method 'method'. -// The pre-processing (quantization) is performed if 'quality' is less than 100. -// For such cases, the encoding is lossy. The valid range is [0, 100] for -// 'quality' and [0, 1] for 'method': -// 'method = 0' - No compression; -// 'method = 1' - Use lossless coder on the alpha plane only -// 'filter' values [0, 4] correspond to prediction modes none, horizontal, -// vertical & gradient filters. The prediction mode 4 will try all the -// prediction modes 0 to 3 and pick the best one. -// 'effort_level': specifies how much effort must be spent to try and reduce -// the compressed output size. In range 0 (quick) to 6 (slow). -// -// 'output' corresponds to the buffer containing compressed alpha data. -// This buffer is allocated by this method and caller should call -// WebPSafeFree(*output) when done. -// 'output_size' corresponds to size of this compressed alpha buffer. -// -// Returns 1 on successfully encoding the alpha and -// 0 if either: -// invalid quality or method, or -// memory allocation for the compressed data fails. - -#include "src/enc/vp8li_enc.h" - -static int EncodeLossless(const uint8_t* const data, int width, int height, - int effort_level, // in [0..6] range - int use_quality_100, VP8LBitWriter* const bw, - WebPAuxStats* const stats) { - int ok = 0; - WebPConfig config; - WebPPicture picture; - - WebPPictureInit(&picture); - picture.width = width; - picture.height = height; - picture.use_argb = 1; - picture.stats = stats; - if (!WebPPictureAlloc(&picture)) return 0; - - // Transfer the alpha values to the green channel. - WebPDispatchAlphaToGreen(data, width, picture.width, picture.height, - picture.argb, picture.argb_stride); - - WebPConfigInit(&config); - config.lossless = 1; - // Enable exact, or it would alter RGB values of transparent alpha, which is - // normally OK but not here since we are not encoding the input image but an - // internal encoding-related image containing necessary exact information in - // RGB channels. - config.exact = 1; - config.method = effort_level; // impact is very small - // Set a low default quality for encoding alpha. Ensure that Alpha quality at - // lower methods (3 and below) is less than the threshold for triggering - // costly 'BackwardReferencesTraceBackwards'. - // If the alpha quality is set to 100 and the method to 6, allow for a high - // lossless quality to trigger the cruncher. - config.quality = - (use_quality_100 && effort_level == 6) ? 100 : 8.f * effort_level; - assert(config.quality >= 0 && config.quality <= 100.f); - - // TODO(urvang): Temporary fix to avoid generating images that trigger - // a decoder bug related to alpha with color cache. - // See: https://code.google.com/p/webp/issues/detail?id=239 - // Need to re-enable this later. - ok = (VP8LEncodeStream(&config, &picture, bw, 0 /*use_cache*/) == VP8_ENC_OK); - WebPPictureFree(&picture); - ok = ok && !bw->error_; - if (!ok) { - VP8LBitWriterWipeOut(bw); - return 0; - } - return 1; -} - -// ----------------------------------------------------------------------------- - -// Small struct to hold the result of a filter mode compression attempt. -typedef struct { - size_t score; - VP8BitWriter bw; - WebPAuxStats stats; -} FilterTrial; - -// This function always returns an initialized 'bw' object, even upon error. -static int EncodeAlphaInternal(const uint8_t* const data, int width, int height, - int method, int filter, int reduce_levels, - int effort_level, // in [0..6] range - uint8_t* const tmp_alpha, - FilterTrial* result) { - int ok = 0; - const uint8_t* alpha_src; - WebPFilterFunc filter_func; - uint8_t header; - const size_t data_size = width * height; - const uint8_t* output = NULL; - size_t output_size = 0; - VP8LBitWriter tmp_bw; - - assert((uint64_t)data_size == (uint64_t)width * height); // as per spec - assert(filter >= 0 && filter < WEBP_FILTER_LAST); - assert(method >= ALPHA_NO_COMPRESSION); - assert(method <= ALPHA_LOSSLESS_COMPRESSION); - assert(sizeof(header) == ALPHA_HEADER_LEN); - - filter_func = WebPFilters[filter]; - if (filter_func != NULL) { - filter_func(data, width, height, width, tmp_alpha); - alpha_src = tmp_alpha; - } else { - alpha_src = data; - } - - if (method != ALPHA_NO_COMPRESSION) { - ok = VP8LBitWriterInit(&tmp_bw, data_size >> 3); - ok = ok && EncodeLossless(alpha_src, width, height, effort_level, - !reduce_levels, &tmp_bw, &result->stats); - if (ok) { - output = VP8LBitWriterFinish(&tmp_bw); - output_size = VP8LBitWriterNumBytes(&tmp_bw); - if (output_size > data_size) { - // compressed size is larger than source! Revert to uncompressed mode. - method = ALPHA_NO_COMPRESSION; - VP8LBitWriterWipeOut(&tmp_bw); - } - } else { - VP8LBitWriterWipeOut(&tmp_bw); - return 0; - } - } - - if (method == ALPHA_NO_COMPRESSION) { - output = alpha_src; - output_size = data_size; - ok = 1; - } - - // Emit final result. - header = method | (filter << 2); - if (reduce_levels) header |= ALPHA_PREPROCESSED_LEVELS << 4; - - VP8BitWriterInit(&result->bw, ALPHA_HEADER_LEN + output_size); - ok = ok && VP8BitWriterAppend(&result->bw, &header, ALPHA_HEADER_LEN); - ok = ok && VP8BitWriterAppend(&result->bw, output, output_size); - - if (method != ALPHA_NO_COMPRESSION) { - VP8LBitWriterWipeOut(&tmp_bw); - } - ok = ok && !result->bw.error_; - result->score = VP8BitWriterSize(&result->bw); - return ok; -} - -// ----------------------------------------------------------------------------- - -static int GetNumColors(const uint8_t* data, int width, int height, - int stride) { - int j; - int colors = 0; - uint8_t color[256] = { 0 }; - - for (j = 0; j < height; ++j) { - int i; - const uint8_t* const p = data + j * stride; - for (i = 0; i < width; ++i) { - color[p[i]] = 1; - } - } - for (j = 0; j < 256; ++j) { - if (color[j] > 0) ++colors; - } - return colors; -} - -#define FILTER_TRY_NONE (1 << WEBP_FILTER_NONE) -#define FILTER_TRY_ALL ((1 << WEBP_FILTER_LAST) - 1) - -// Given the input 'filter' option, return an OR'd bit-set of filters to try. -static uint32_t GetFilterMap(const uint8_t* alpha, int width, int height, - int filter, int effort_level) { - uint32_t bit_map = 0U; - if (filter == WEBP_FILTER_FAST) { - // Quick estimate of the best candidate. - int try_filter_none = (effort_level > 3); - const int kMinColorsForFilterNone = 16; - const int kMaxColorsForFilterNone = 192; - const int num_colors = GetNumColors(alpha, width, height, width); - // For low number of colors, NONE yields better compression. - filter = (num_colors <= kMinColorsForFilterNone) - ? WEBP_FILTER_NONE - : WebPEstimateBestFilter(alpha, width, height, width); - bit_map |= 1 << filter; - // For large number of colors, try FILTER_NONE in addition to the best - // filter as well. - if (try_filter_none || num_colors > kMaxColorsForFilterNone) { - bit_map |= FILTER_TRY_NONE; - } - } else if (filter == WEBP_FILTER_NONE) { - bit_map = FILTER_TRY_NONE; - } else { // WEBP_FILTER_BEST -> try all - bit_map = FILTER_TRY_ALL; - } - return bit_map; -} - -static void InitFilterTrial(FilterTrial* const score) { - score->score = (size_t)~0U; - VP8BitWriterInit(&score->bw, 0); -} - -static int ApplyFiltersAndEncode(const uint8_t* alpha, int width, int height, - size_t data_size, int method, int filter, - int reduce_levels, int effort_level, - uint8_t** const output, - size_t* const output_size, - WebPAuxStats* const stats) { - int ok = 1; - FilterTrial best; - uint32_t try_map = - GetFilterMap(alpha, width, height, filter, effort_level); - InitFilterTrial(&best); - - if (try_map != FILTER_TRY_NONE) { - uint8_t* filtered_alpha = (uint8_t*)WebPSafeMalloc(1ULL, data_size); - if (filtered_alpha == NULL) return 0; - - for (filter = WEBP_FILTER_NONE; ok && try_map; ++filter, try_map >>= 1) { - if (try_map & 1) { - FilterTrial trial; - ok = EncodeAlphaInternal(alpha, width, height, method, filter, - reduce_levels, effort_level, filtered_alpha, - &trial); - if (ok && trial.score < best.score) { - VP8BitWriterWipeOut(&best.bw); - best = trial; - } else { - VP8BitWriterWipeOut(&trial.bw); - } - } - } - WebPSafeFree(filtered_alpha); - } else { - ok = EncodeAlphaInternal(alpha, width, height, method, WEBP_FILTER_NONE, - reduce_levels, effort_level, NULL, &best); - } - if (ok) { -#if !defined(WEBP_DISABLE_STATS) - if (stats != NULL) { - stats->lossless_features = best.stats.lossless_features; - stats->histogram_bits = best.stats.histogram_bits; - stats->transform_bits = best.stats.transform_bits; - stats->cache_bits = best.stats.cache_bits; - stats->palette_size = best.stats.palette_size; - stats->lossless_size = best.stats.lossless_size; - stats->lossless_hdr_size = best.stats.lossless_hdr_size; - stats->lossless_data_size = best.stats.lossless_data_size; - } -#else - (void)stats; -#endif - *output_size = VP8BitWriterSize(&best.bw); - *output = VP8BitWriterBuf(&best.bw); - } else { - VP8BitWriterWipeOut(&best.bw); - } - return ok; -} - -static int EncodeAlpha(VP8Encoder* const enc, - int quality, int method, int filter, - int effort_level, - uint8_t** const output, size_t* const output_size) { - const WebPPicture* const pic = enc->pic_; - const int width = pic->width; - const int height = pic->height; - - uint8_t* quant_alpha = NULL; - const size_t data_size = width * height; - uint64_t sse = 0; - int ok = 1; - const int reduce_levels = (quality < 100); - - // quick sanity checks - assert((uint64_t)data_size == (uint64_t)width * height); // as per spec - assert(enc != NULL && pic != NULL && pic->a != NULL); - assert(output != NULL && output_size != NULL); - assert(width > 0 && height > 0); - assert(pic->a_stride >= width); - assert(filter >= WEBP_FILTER_NONE && filter <= WEBP_FILTER_FAST); - - if (quality < 0 || quality > 100) { - return 0; - } - - if (method < ALPHA_NO_COMPRESSION || method > ALPHA_LOSSLESS_COMPRESSION) { - return 0; - } - - if (method == ALPHA_NO_COMPRESSION) { - // Don't filter, as filtering will make no impact on compressed size. - filter = WEBP_FILTER_NONE; - } - - quant_alpha = (uint8_t*)WebPSafeMalloc(1ULL, data_size); - if (quant_alpha == NULL) { - return 0; - } - - // Extract alpha data (width x height) from raw_data (stride x height). - WebPCopyPlane(pic->a, pic->a_stride, quant_alpha, width, width, height); - - if (reduce_levels) { // No Quantization required for 'quality = 100'. - // 16 alpha levels gives quite a low MSE w.r.t original alpha plane hence - // mapped to moderate quality 70. Hence Quality:[0, 70] -> Levels:[2, 16] - // and Quality:]70, 100] -> Levels:]16, 256]. - const int alpha_levels = (quality <= 70) ? (2 + quality / 5) - : (16 + (quality - 70) * 8); - ok = QuantizeLevels(quant_alpha, width, height, alpha_levels, &sse); - } - - if (ok) { - VP8FiltersInit(); - ok = ApplyFiltersAndEncode(quant_alpha, width, height, data_size, method, - filter, reduce_levels, effort_level, output, - output_size, pic->stats); -#if !defined(WEBP_DISABLE_STATS) - if (pic->stats != NULL) { // need stats? - pic->stats->coded_size += (int)(*output_size); - enc->sse_[3] = sse; - } -#endif - } - - WebPSafeFree(quant_alpha); - return ok; -} - -//------------------------------------------------------------------------------ -// Main calls - -static int CompressAlphaJob(void* arg1, void* dummy) { - VP8Encoder* const enc = (VP8Encoder*)arg1; - const WebPConfig* config = enc->config_; - uint8_t* alpha_data = NULL; - size_t alpha_size = 0; - const int effort_level = config->method; // maps to [0..6] - const WEBP_FILTER_TYPE filter = - (config->alpha_filtering == 0) ? WEBP_FILTER_NONE : - (config->alpha_filtering == 1) ? WEBP_FILTER_FAST : - WEBP_FILTER_BEST; - if (!EncodeAlpha(enc, config->alpha_quality, config->alpha_compression, - filter, effort_level, &alpha_data, &alpha_size)) { - return 0; - } - if (alpha_size != (uint32_t)alpha_size) { // Sanity check. - WebPSafeFree(alpha_data); - return 0; - } - enc->alpha_data_size_ = (uint32_t)alpha_size; - enc->alpha_data_ = alpha_data; - (void)dummy; - return 1; -} - -void VP8EncInitAlpha(VP8Encoder* const enc) { - WebPInitAlphaProcessing(); - enc->has_alpha_ = WebPPictureHasTransparency(enc->pic_); - enc->alpha_data_ = NULL; - enc->alpha_data_size_ = 0; - if (enc->thread_level_ > 0) { - WebPWorker* const worker = &enc->alpha_worker_; - WebPGetWorkerInterface()->Init(worker); - worker->data1 = enc; - worker->data2 = NULL; - worker->hook = CompressAlphaJob; - } -} - -int VP8EncStartAlpha(VP8Encoder* const enc) { - if (enc->has_alpha_) { - if (enc->thread_level_ > 0) { - WebPWorker* const worker = &enc->alpha_worker_; - // Makes sure worker is good to go. - if (!WebPGetWorkerInterface()->Reset(worker)) { - return 0; - } - WebPGetWorkerInterface()->Launch(worker); - return 1; - } else { - return CompressAlphaJob(enc, NULL); // just do the job right away - } - } - return 1; -} - -int VP8EncFinishAlpha(VP8Encoder* const enc) { - if (enc->has_alpha_) { - if (enc->thread_level_ > 0) { - WebPWorker* const worker = &enc->alpha_worker_; - if (!WebPGetWorkerInterface()->Sync(worker)) return 0; // error - } - } - return WebPReportProgress(enc->pic_, enc->percent_ + 20, &enc->percent_); -} - -int VP8EncDeleteAlpha(VP8Encoder* const enc) { - int ok = 1; - if (enc->thread_level_ > 0) { - WebPWorker* const worker = &enc->alpha_worker_; - // finish anything left in flight - ok = WebPGetWorkerInterface()->Sync(worker); - // still need to end the worker, even if !ok - WebPGetWorkerInterface()->End(worker); - } - WebPSafeFree(enc->alpha_data_); - enc->alpha_data_ = NULL; - enc->alpha_data_size_ = 0; - enc->has_alpha_ = 0; - return ok; -} diff --git a/Extended/libwebp/src/enc/analysis_enc.c b/Extended/libwebp/src/enc/analysis_enc.c deleted file mode 100644 index 687757a..0000000 --- a/Extended/libwebp/src/enc/analysis_enc.c +++ /dev/null @@ -1,535 +0,0 @@ -// Copyright 2011 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Macroblock analysis -// -// Author: Skal (pascal.massimino@gmail.com) - -#include -#include -#include - -#include "src/enc/vp8i_enc.h" -#include "src/enc/cost_enc.h" -#include "src/utils/utils.h" - -#define MAX_ITERS_K_MEANS 6 - -//------------------------------------------------------------------------------ -// Smooth the segment map by replacing isolated block by the majority of its -// neighbours. - -static void SmoothSegmentMap(VP8Encoder* const enc) { - int n, x, y; - const int w = enc->mb_w_; - const int h = enc->mb_h_; - const int majority_cnt_3_x_3_grid = 5; - uint8_t* const tmp = (uint8_t*)WebPSafeMalloc(w * h, sizeof(*tmp)); - assert((uint64_t)(w * h) == (uint64_t)w * h); // no overflow, as per spec - - if (tmp == NULL) return; - for (y = 1; y < h - 1; ++y) { - for (x = 1; x < w - 1; ++x) { - int cnt[NUM_MB_SEGMENTS] = { 0 }; - const VP8MBInfo* const mb = &enc->mb_info_[x + w * y]; - int majority_seg = mb->segment_; - // Check the 8 neighbouring segment values. - cnt[mb[-w - 1].segment_]++; // top-left - cnt[mb[-w + 0].segment_]++; // top - cnt[mb[-w + 1].segment_]++; // top-right - cnt[mb[ - 1].segment_]++; // left - cnt[mb[ + 1].segment_]++; // right - cnt[mb[ w - 1].segment_]++; // bottom-left - cnt[mb[ w + 0].segment_]++; // bottom - cnt[mb[ w + 1].segment_]++; // bottom-right - for (n = 0; n < NUM_MB_SEGMENTS; ++n) { - if (cnt[n] >= majority_cnt_3_x_3_grid) { - majority_seg = n; - break; - } - } - tmp[x + y * w] = majority_seg; - } - } - for (y = 1; y < h - 1; ++y) { - for (x = 1; x < w - 1; ++x) { - VP8MBInfo* const mb = &enc->mb_info_[x + w * y]; - mb->segment_ = tmp[x + y * w]; - } - } - WebPSafeFree(tmp); -} - -//------------------------------------------------------------------------------ -// set segment susceptibility alpha_ / beta_ - -static WEBP_INLINE int clip(int v, int m, int M) { - return (v < m) ? m : (v > M) ? M : v; -} - -static void SetSegmentAlphas(VP8Encoder* const enc, - const int centers[NUM_MB_SEGMENTS], - int mid) { - const int nb = enc->segment_hdr_.num_segments_; - int min = centers[0], max = centers[0]; - int n; - - if (nb > 1) { - for (n = 0; n < nb; ++n) { - if (min > centers[n]) min = centers[n]; - if (max < centers[n]) max = centers[n]; - } - } - if (max == min) max = min + 1; - assert(mid <= max && mid >= min); - for (n = 0; n < nb; ++n) { - const int alpha = 255 * (centers[n] - mid) / (max - min); - const int beta = 255 * (centers[n] - min) / (max - min); - enc->dqm_[n].alpha_ = clip(alpha, -127, 127); - enc->dqm_[n].beta_ = clip(beta, 0, 255); - } -} - -//------------------------------------------------------------------------------ -// Compute susceptibility based on DCT-coeff histograms: -// the higher, the "easier" the macroblock is to compress. - -#define MAX_ALPHA 255 // 8b of precision for susceptibilities. -#define ALPHA_SCALE (2 * MAX_ALPHA) // scaling factor for alpha. -#define DEFAULT_ALPHA (-1) -#define IS_BETTER_ALPHA(alpha, best_alpha) ((alpha) > (best_alpha)) - -static int FinalAlphaValue(int alpha) { - alpha = MAX_ALPHA - alpha; - return clip(alpha, 0, MAX_ALPHA); -} - -static int GetAlpha(const VP8Histogram* const histo) { - // 'alpha' will later be clipped to [0..MAX_ALPHA] range, clamping outer - // values which happen to be mostly noise. This leaves the maximum precision - // for handling the useful small values which contribute most. - const int max_value = histo->max_value; - const int last_non_zero = histo->last_non_zero; - const int alpha = - (max_value > 1) ? ALPHA_SCALE * last_non_zero / max_value : 0; - return alpha; -} - -static void InitHistogram(VP8Histogram* const histo) { - histo->max_value = 0; - histo->last_non_zero = 1; -} - -static void MergeHistograms(const VP8Histogram* const in, - VP8Histogram* const out) { - if (in->max_value > out->max_value) { - out->max_value = in->max_value; - } - if (in->last_non_zero > out->last_non_zero) { - out->last_non_zero = in->last_non_zero; - } -} - -//------------------------------------------------------------------------------ -// Simplified k-Means, to assign Nb segments based on alpha-histogram - -static void AssignSegments(VP8Encoder* const enc, - const int alphas[MAX_ALPHA + 1]) { - // 'num_segments_' is previously validated and <= NUM_MB_SEGMENTS, but an - // explicit check is needed to avoid spurious warning about 'n + 1' exceeding - // array bounds of 'centers' with some compilers (noticed with gcc-4.9). - const int nb = (enc->segment_hdr_.num_segments_ < NUM_MB_SEGMENTS) ? - enc->segment_hdr_.num_segments_ : NUM_MB_SEGMENTS; - int centers[NUM_MB_SEGMENTS]; - int weighted_average = 0; - int map[MAX_ALPHA + 1]; - int a, n, k; - int min_a = 0, max_a = MAX_ALPHA, range_a; - // 'int' type is ok for histo, and won't overflow - int accum[NUM_MB_SEGMENTS], dist_accum[NUM_MB_SEGMENTS]; - - assert(nb >= 1); - assert(nb <= NUM_MB_SEGMENTS); - - // bracket the input - for (n = 0; n <= MAX_ALPHA && alphas[n] == 0; ++n) {} - min_a = n; - for (n = MAX_ALPHA; n > min_a && alphas[n] == 0; --n) {} - max_a = n; - range_a = max_a - min_a; - - // Spread initial centers evenly - for (k = 0, n = 1; k < nb; ++k, n += 2) { - assert(n < 2 * nb); - centers[k] = min_a + (n * range_a) / (2 * nb); - } - - for (k = 0; k < MAX_ITERS_K_MEANS; ++k) { // few iters are enough - int total_weight; - int displaced; - // Reset stats - for (n = 0; n < nb; ++n) { - accum[n] = 0; - dist_accum[n] = 0; - } - // Assign nearest center for each 'a' - n = 0; // track the nearest center for current 'a' - for (a = min_a; a <= max_a; ++a) { - if (alphas[a]) { - while (n + 1 < nb && abs(a - centers[n + 1]) < abs(a - centers[n])) { - n++; - } - map[a] = n; - // accumulate contribution into best centroid - dist_accum[n] += a * alphas[a]; - accum[n] += alphas[a]; - } - } - // All point are classified. Move the centroids to the - // center of their respective cloud. - displaced = 0; - weighted_average = 0; - total_weight = 0; - for (n = 0; n < nb; ++n) { - if (accum[n]) { - const int new_center = (dist_accum[n] + accum[n] / 2) / accum[n]; - displaced += abs(centers[n] - new_center); - centers[n] = new_center; - weighted_average += new_center * accum[n]; - total_weight += accum[n]; - } - } - weighted_average = (weighted_average + total_weight / 2) / total_weight; - if (displaced < 5) break; // no need to keep on looping... - } - - // Map each original value to the closest centroid - for (n = 0; n < enc->mb_w_ * enc->mb_h_; ++n) { - VP8MBInfo* const mb = &enc->mb_info_[n]; - const int alpha = mb->alpha_; - mb->segment_ = map[alpha]; - mb->alpha_ = centers[map[alpha]]; // for the record. - } - - if (nb > 1) { - const int smooth = (enc->config_->preprocessing & 1); - if (smooth) SmoothSegmentMap(enc); - } - - SetSegmentAlphas(enc, centers, weighted_average); // pick some alphas. -} - -//------------------------------------------------------------------------------ -// Macroblock analysis: collect histogram for each mode, deduce the maximal -// susceptibility and set best modes for this macroblock. -// Segment assignment is done later. - -// Number of modes to inspect for alpha_ evaluation. We don't need to test all -// the possible modes during the analysis phase: we risk falling into a local -// optimum, or be subject to boundary effect -#define MAX_INTRA16_MODE 2 -#define MAX_INTRA4_MODE 2 -#define MAX_UV_MODE 2 - -static int MBAnalyzeBestIntra16Mode(VP8EncIterator* const it) { - const int max_mode = MAX_INTRA16_MODE; - int mode; - int best_alpha = DEFAULT_ALPHA; - int best_mode = 0; - - VP8MakeLuma16Preds(it); - for (mode = 0; mode < max_mode; ++mode) { - VP8Histogram histo; - int alpha; - - InitHistogram(&histo); - VP8CollectHistogram(it->yuv_in_ + Y_OFF_ENC, - it->yuv_p_ + VP8I16ModeOffsets[mode], - 0, 16, &histo); - alpha = GetAlpha(&histo); - if (IS_BETTER_ALPHA(alpha, best_alpha)) { - best_alpha = alpha; - best_mode = mode; - } - } - VP8SetIntra16Mode(it, best_mode); - return best_alpha; -} - -static int FastMBAnalyze(VP8EncIterator* const it) { - // Empirical cut-off value, should be around 16 (~=block size). We use the - // [8-17] range and favor intra4 at high quality, intra16 for low quality. - const int q = (int)it->enc_->config_->quality; - const uint32_t kThreshold = 8 + (17 - 8) * q / 100; - int k; - uint32_t dc[16], m, m2; - for (k = 0; k < 16; k += 4) { - VP8Mean16x4(it->yuv_in_ + Y_OFF_ENC + k * BPS, &dc[k]); - } - for (m = 0, m2 = 0, k = 0; k < 16; ++k) { - m += dc[k]; - m2 += dc[k] * dc[k]; - } - if (kThreshold * m2 < m * m) { - VP8SetIntra16Mode(it, 0); // DC16 - } else { - const uint8_t modes[16] = { 0 }; // DC4 - VP8SetIntra4Mode(it, modes); - } - return 0; -} - -static int MBAnalyzeBestIntra4Mode(VP8EncIterator* const it, - int best_alpha) { - uint8_t modes[16]; - const int max_mode = MAX_INTRA4_MODE; - int i4_alpha; - VP8Histogram total_histo; - int cur_histo = 0; - InitHistogram(&total_histo); - - VP8IteratorStartI4(it); - do { - int mode; - int best_mode_alpha = DEFAULT_ALPHA; - VP8Histogram histos[2]; - const uint8_t* const src = it->yuv_in_ + Y_OFF_ENC + VP8Scan[it->i4_]; - - VP8MakeIntra4Preds(it); - for (mode = 0; mode < max_mode; ++mode) { - int alpha; - - InitHistogram(&histos[cur_histo]); - VP8CollectHistogram(src, it->yuv_p_ + VP8I4ModeOffsets[mode], - 0, 1, &histos[cur_histo]); - alpha = GetAlpha(&histos[cur_histo]); - if (IS_BETTER_ALPHA(alpha, best_mode_alpha)) { - best_mode_alpha = alpha; - modes[it->i4_] = mode; - cur_histo ^= 1; // keep track of best histo so far. - } - } - // accumulate best histogram - MergeHistograms(&histos[cur_histo ^ 1], &total_histo); - // Note: we reuse the original samples for predictors - } while (VP8IteratorRotateI4(it, it->yuv_in_ + Y_OFF_ENC)); - - i4_alpha = GetAlpha(&total_histo); - if (IS_BETTER_ALPHA(i4_alpha, best_alpha)) { - VP8SetIntra4Mode(it, modes); - best_alpha = i4_alpha; - } - return best_alpha; -} - -static int MBAnalyzeBestUVMode(VP8EncIterator* const it) { - int best_alpha = DEFAULT_ALPHA; - int smallest_alpha = 0; - int best_mode = 0; - const int max_mode = MAX_UV_MODE; - int mode; - - VP8MakeChroma8Preds(it); - for (mode = 0; mode < max_mode; ++mode) { - VP8Histogram histo; - int alpha; - InitHistogram(&histo); - VP8CollectHistogram(it->yuv_in_ + U_OFF_ENC, - it->yuv_p_ + VP8UVModeOffsets[mode], - 16, 16 + 4 + 4, &histo); - alpha = GetAlpha(&histo); - if (IS_BETTER_ALPHA(alpha, best_alpha)) { - best_alpha = alpha; - } - // The best prediction mode tends to be the one with the smallest alpha. - if (mode == 0 || alpha < smallest_alpha) { - smallest_alpha = alpha; - best_mode = mode; - } - } - VP8SetIntraUVMode(it, best_mode); - return best_alpha; -} - -static void MBAnalyze(VP8EncIterator* const it, - int alphas[MAX_ALPHA + 1], - int* const alpha, int* const uv_alpha) { - const VP8Encoder* const enc = it->enc_; - int best_alpha, best_uv_alpha; - - VP8SetIntra16Mode(it, 0); // default: Intra16, DC_PRED - VP8SetSkip(it, 0); // not skipped - VP8SetSegment(it, 0); // default segment, spec-wise. - - if (enc->method_ <= 1) { - best_alpha = FastMBAnalyze(it); - } else { - best_alpha = MBAnalyzeBestIntra16Mode(it); - if (enc->method_ >= 5) { - // We go and make a fast decision for intra4/intra16. - // It's usually not a good and definitive pick, but helps seeding the - // stats about level bit-cost. - // TODO(skal): improve criterion. - best_alpha = MBAnalyzeBestIntra4Mode(it, best_alpha); - } - } - best_uv_alpha = MBAnalyzeBestUVMode(it); - - // Final susceptibility mix - best_alpha = (3 * best_alpha + best_uv_alpha + 2) >> 2; - best_alpha = FinalAlphaValue(best_alpha); - alphas[best_alpha]++; - it->mb_->alpha_ = best_alpha; // for later remapping. - - // Accumulate for later complexity analysis. - *alpha += best_alpha; // mixed susceptibility (not just luma) - *uv_alpha += best_uv_alpha; -} - -static void DefaultMBInfo(VP8MBInfo* const mb) { - mb->type_ = 1; // I16x16 - mb->uv_mode_ = 0; - mb->skip_ = 0; // not skipped - mb->segment_ = 0; // default segment - mb->alpha_ = 0; -} - -//------------------------------------------------------------------------------ -// Main analysis loop: -// Collect all susceptibilities for each macroblock and record their -// distribution in alphas[]. Segments is assigned a-posteriori, based on -// this histogram. -// We also pick an intra16 prediction mode, which shouldn't be considered -// final except for fast-encode settings. We can also pick some intra4 modes -// and decide intra4/intra16, but that's usually almost always a bad choice at -// this stage. - -static void ResetAllMBInfo(VP8Encoder* const enc) { - int n; - for (n = 0; n < enc->mb_w_ * enc->mb_h_; ++n) { - DefaultMBInfo(&enc->mb_info_[n]); - } - // Default susceptibilities. - enc->dqm_[0].alpha_ = 0; - enc->dqm_[0].beta_ = 0; - // Note: we can't compute this alpha_ / uv_alpha_ -> set to default value. - enc->alpha_ = 0; - enc->uv_alpha_ = 0; - WebPReportProgress(enc->pic_, enc->percent_ + 20, &enc->percent_); -} - -// struct used to collect job result -typedef struct { - WebPWorker worker; - int alphas[MAX_ALPHA + 1]; - int alpha, uv_alpha; - VP8EncIterator it; - int delta_progress; -} SegmentJob; - -// main work call -static int DoSegmentsJob(void* arg1, void* arg2) { - SegmentJob* const job = (SegmentJob*)arg1; - VP8EncIterator* const it = (VP8EncIterator*)arg2; - int ok = 1; - if (!VP8IteratorIsDone(it)) { - uint8_t tmp[32 + WEBP_ALIGN_CST]; - uint8_t* const scratch = (uint8_t*)WEBP_ALIGN(tmp); - do { - // Let's pretend we have perfect lossless reconstruction. - VP8IteratorImport(it, scratch); - MBAnalyze(it, job->alphas, &job->alpha, &job->uv_alpha); - ok = VP8IteratorProgress(it, job->delta_progress); - } while (ok && VP8IteratorNext(it)); - } - return ok; -} - -static void MergeJobs(const SegmentJob* const src, SegmentJob* const dst) { - int i; - for (i = 0; i <= MAX_ALPHA; ++i) dst->alphas[i] += src->alphas[i]; - dst->alpha += src->alpha; - dst->uv_alpha += src->uv_alpha; -} - -// initialize the job struct with some tasks to perform -static void InitSegmentJob(VP8Encoder* const enc, SegmentJob* const job, - int start_row, int end_row) { - WebPGetWorkerInterface()->Init(&job->worker); - job->worker.data1 = job; - job->worker.data2 = &job->it; - job->worker.hook = DoSegmentsJob; - VP8IteratorInit(enc, &job->it); - VP8IteratorSetRow(&job->it, start_row); - VP8IteratorSetCountDown(&job->it, (end_row - start_row) * enc->mb_w_); - memset(job->alphas, 0, sizeof(job->alphas)); - job->alpha = 0; - job->uv_alpha = 0; - // only one of both jobs can record the progress, since we don't - // expect the user's hook to be multi-thread safe - job->delta_progress = (start_row == 0) ? 20 : 0; -} - -// main entry point -int VP8EncAnalyze(VP8Encoder* const enc) { - int ok = 1; - const int do_segments = - enc->config_->emulate_jpeg_size || // We need the complexity evaluation. - (enc->segment_hdr_.num_segments_ > 1) || - (enc->method_ <= 1); // for method 0 - 1, we need preds_[] to be filled. - if (do_segments) { - const int last_row = enc->mb_h_; - // We give a little more than a half work to the main thread. - const int split_row = (9 * last_row + 15) >> 4; - const int total_mb = last_row * enc->mb_w_; -#ifdef WEBP_USE_THREAD - const int kMinSplitRow = 2; // minimal rows needed for mt to be worth it - const int do_mt = (enc->thread_level_ > 0) && (split_row >= kMinSplitRow); -#else - const int do_mt = 0; -#endif - const WebPWorkerInterface* const worker_interface = - WebPGetWorkerInterface(); - SegmentJob main_job; - if (do_mt) { - SegmentJob side_job; - // Note the use of '&' instead of '&&' because we must call the functions - // no matter what. - InitSegmentJob(enc, &main_job, 0, split_row); - InitSegmentJob(enc, &side_job, split_row, last_row); - // we don't need to call Reset() on main_job.worker, since we're calling - // WebPWorkerExecute() on it - ok &= worker_interface->Reset(&side_job.worker); - // launch the two jobs in parallel - if (ok) { - worker_interface->Launch(&side_job.worker); - worker_interface->Execute(&main_job.worker); - ok &= worker_interface->Sync(&side_job.worker); - ok &= worker_interface->Sync(&main_job.worker); - } - worker_interface->End(&side_job.worker); - if (ok) MergeJobs(&side_job, &main_job); // merge results together - } else { - // Even for single-thread case, we use the generic Worker tools. - InitSegmentJob(enc, &main_job, 0, last_row); - worker_interface->Execute(&main_job.worker); - ok &= worker_interface->Sync(&main_job.worker); - } - worker_interface->End(&main_job.worker); - if (ok) { - enc->alpha_ = main_job.alpha / total_mb; - enc->uv_alpha_ = main_job.uv_alpha / total_mb; - AssignSegments(enc, main_job.alphas); - } - } else { // Use only one default segment. - ResetAllMBInfo(enc); - } - return ok; -} - diff --git a/Extended/libwebp/src/enc/backward_references_cost_enc.c b/Extended/libwebp/src/enc/backward_references_cost_enc.c deleted file mode 100644 index 516abd7..0000000 --- a/Extended/libwebp/src/enc/backward_references_cost_enc.c +++ /dev/null @@ -1,790 +0,0 @@ -// Copyright 2017 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Improves a given set of backward references by analyzing its bit cost. -// The algorithm is similar to the Zopfli compression algorithm but tailored to -// images. -// -// Author: Vincent Rabaud (vrabaud@google.com) -// - -#include - -#include "src/enc/backward_references_enc.h" -#include "src/enc/histogram_enc.h" -#include "src/dsp/lossless_common.h" -#include "src/utils/color_cache_utils.h" -#include "src/utils/utils.h" - -#define VALUES_IN_BYTE 256 - -extern void VP8LClearBackwardRefs(VP8LBackwardRefs* const refs); -extern int VP8LDistanceToPlaneCode(int xsize, int dist); -extern void VP8LBackwardRefsCursorAdd(VP8LBackwardRefs* const refs, - const PixOrCopy v); - -typedef struct { - double alpha_[VALUES_IN_BYTE]; - double red_[VALUES_IN_BYTE]; - double blue_[VALUES_IN_BYTE]; - double distance_[NUM_DISTANCE_CODES]; - double* literal_; -} CostModel; - -static void ConvertPopulationCountTableToBitEstimates( - int num_symbols, const uint32_t population_counts[], double output[]) { - uint32_t sum = 0; - int nonzeros = 0; - int i; - for (i = 0; i < num_symbols; ++i) { - sum += population_counts[i]; - if (population_counts[i] > 0) { - ++nonzeros; - } - } - if (nonzeros <= 1) { - memset(output, 0, num_symbols * sizeof(*output)); - } else { - const double logsum = VP8LFastLog2(sum); - for (i = 0; i < num_symbols; ++i) { - output[i] = logsum - VP8LFastLog2(population_counts[i]); - } - } -} - -static int CostModelBuild(CostModel* const m, int xsize, int cache_bits, - const VP8LBackwardRefs* const refs) { - int ok = 0; - VP8LRefsCursor c = VP8LRefsCursorInit(refs); - VP8LHistogram* const histo = VP8LAllocateHistogram(cache_bits); - if (histo == NULL) goto Error; - - // The following code is similar to VP8LHistogramCreate but converts the - // distance to plane code. - VP8LHistogramInit(histo, cache_bits, /*init_arrays=*/ 1); - while (VP8LRefsCursorOk(&c)) { - VP8LHistogramAddSinglePixOrCopy(histo, c.cur_pos, VP8LDistanceToPlaneCode, - xsize); - VP8LRefsCursorNext(&c); - } - - ConvertPopulationCountTableToBitEstimates( - VP8LHistogramNumCodes(histo->palette_code_bits_), - histo->literal_, m->literal_); - ConvertPopulationCountTableToBitEstimates( - VALUES_IN_BYTE, histo->red_, m->red_); - ConvertPopulationCountTableToBitEstimates( - VALUES_IN_BYTE, histo->blue_, m->blue_); - ConvertPopulationCountTableToBitEstimates( - VALUES_IN_BYTE, histo->alpha_, m->alpha_); - ConvertPopulationCountTableToBitEstimates( - NUM_DISTANCE_CODES, histo->distance_, m->distance_); - ok = 1; - - Error: - VP8LFreeHistogram(histo); - return ok; -} - -static WEBP_INLINE double GetLiteralCost(const CostModel* const m, uint32_t v) { - return m->alpha_[v >> 24] + - m->red_[(v >> 16) & 0xff] + - m->literal_[(v >> 8) & 0xff] + - m->blue_[v & 0xff]; -} - -static WEBP_INLINE double GetCacheCost(const CostModel* const m, uint32_t idx) { - const int literal_idx = VALUES_IN_BYTE + NUM_LENGTH_CODES + idx; - return m->literal_[literal_idx]; -} - -static WEBP_INLINE double GetLengthCost(const CostModel* const m, - uint32_t length) { - int code, extra_bits; - VP8LPrefixEncodeBits(length, &code, &extra_bits); - return m->literal_[VALUES_IN_BYTE + code] + extra_bits; -} - -static WEBP_INLINE double GetDistanceCost(const CostModel* const m, - uint32_t distance) { - int code, extra_bits; - VP8LPrefixEncodeBits(distance, &code, &extra_bits); - return m->distance_[code] + extra_bits; -} - -static WEBP_INLINE void AddSingleLiteralWithCostModel( - const uint32_t* const argb, VP8LColorCache* const hashers, - const CostModel* const cost_model, int idx, int use_color_cache, - float prev_cost, float* const cost, uint16_t* const dist_array) { - double cost_val = prev_cost; - const uint32_t color = argb[idx]; - const int ix = use_color_cache ? VP8LColorCacheContains(hashers, color) : -1; - if (ix >= 0) { - // use_color_cache is true and hashers contains color - const double mul0 = 0.68; - cost_val += GetCacheCost(cost_model, ix) * mul0; - } else { - const double mul1 = 0.82; - if (use_color_cache) VP8LColorCacheInsert(hashers, color); - cost_val += GetLiteralCost(cost_model, color) * mul1; - } - if (cost[idx] > cost_val) { - cost[idx] = (float)cost_val; - dist_array[idx] = 1; // only one is inserted. - } -} - -// ----------------------------------------------------------------------------- -// CostManager and interval handling - -// Empirical value to avoid high memory consumption but good for performance. -#define COST_CACHE_INTERVAL_SIZE_MAX 500 - -// To perform backward reference every pixel at index index_ is considered and -// the cost for the MAX_LENGTH following pixels computed. Those following pixels -// at index index_ + k (k from 0 to MAX_LENGTH) have a cost of: -// cost_ = distance cost at index + GetLengthCost(cost_model, k) -// and the minimum value is kept. GetLengthCost(cost_model, k) is cached in an -// array of size MAX_LENGTH. -// Instead of performing MAX_LENGTH comparisons per pixel, we keep track of the -// minimal values using intervals of constant cost. -// An interval is defined by the index_ of the pixel that generated it and -// is only useful in a range of indices from start_ to end_ (exclusive), i.e. -// it contains the minimum value for pixels between start_ and end_. -// Intervals are stored in a linked list and ordered by start_. When a new -// interval has a better value, old intervals are split or removed. There are -// therefore no overlapping intervals. -typedef struct CostInterval CostInterval; -struct CostInterval { - float cost_; - int start_; - int end_; - int index_; - CostInterval* previous_; - CostInterval* next_; -}; - -// The GetLengthCost(cost_model, k) are cached in a CostCacheInterval. -typedef struct { - double cost_; - int start_; - int end_; // Exclusive. -} CostCacheInterval; - -// This structure is in charge of managing intervals and costs. -// It caches the different CostCacheInterval, caches the different -// GetLengthCost(cost_model, k) in cost_cache_ and the CostInterval's (whose -// count_ is limited by COST_CACHE_INTERVAL_SIZE_MAX). -#define COST_MANAGER_MAX_FREE_LIST 10 -typedef struct { - CostInterval* head_; - int count_; // The number of stored intervals. - CostCacheInterval* cache_intervals_; - size_t cache_intervals_size_; - double cost_cache_[MAX_LENGTH]; // Contains the GetLengthCost(cost_model, k). - float* costs_; - uint16_t* dist_array_; - // Most of the time, we only need few intervals -> use a free-list, to avoid - // fragmentation with small allocs in most common cases. - CostInterval intervals_[COST_MANAGER_MAX_FREE_LIST]; - CostInterval* free_intervals_; - // These are regularly malloc'd remains. This list can't grow larger than than - // size COST_CACHE_INTERVAL_SIZE_MAX - COST_MANAGER_MAX_FREE_LIST, note. - CostInterval* recycled_intervals_; -} CostManager; - -static void CostIntervalAddToFreeList(CostManager* const manager, - CostInterval* const interval) { - interval->next_ = manager->free_intervals_; - manager->free_intervals_ = interval; -} - -static int CostIntervalIsInFreeList(const CostManager* const manager, - const CostInterval* const interval) { - return (interval >= &manager->intervals_[0] && - interval <= &manager->intervals_[COST_MANAGER_MAX_FREE_LIST - 1]); -} - -static void CostManagerInitFreeList(CostManager* const manager) { - int i; - manager->free_intervals_ = NULL; - for (i = 0; i < COST_MANAGER_MAX_FREE_LIST; ++i) { - CostIntervalAddToFreeList(manager, &manager->intervals_[i]); - } -} - -static void DeleteIntervalList(CostManager* const manager, - const CostInterval* interval) { - while (interval != NULL) { - const CostInterval* const next = interval->next_; - if (!CostIntervalIsInFreeList(manager, interval)) { - WebPSafeFree((void*)interval); - } // else: do nothing - interval = next; - } -} - -static void CostManagerClear(CostManager* const manager) { - if (manager == NULL) return; - - WebPSafeFree(manager->costs_); - WebPSafeFree(manager->cache_intervals_); - - // Clear the interval lists. - DeleteIntervalList(manager, manager->head_); - manager->head_ = NULL; - DeleteIntervalList(manager, manager->recycled_intervals_); - manager->recycled_intervals_ = NULL; - - // Reset pointers, count_ and cache_intervals_size_. - memset(manager, 0, sizeof(*manager)); - CostManagerInitFreeList(manager); -} - -static int CostManagerInit(CostManager* const manager, - uint16_t* const dist_array, int pix_count, - const CostModel* const cost_model) { - int i; - const int cost_cache_size = (pix_count > MAX_LENGTH) ? MAX_LENGTH : pix_count; - - manager->costs_ = NULL; - manager->cache_intervals_ = NULL; - manager->head_ = NULL; - manager->recycled_intervals_ = NULL; - manager->count_ = 0; - manager->dist_array_ = dist_array; - CostManagerInitFreeList(manager); - - // Fill in the cost_cache_. - manager->cache_intervals_size_ = 1; - manager->cost_cache_[0] = GetLengthCost(cost_model, 0); - for (i = 1; i < cost_cache_size; ++i) { - manager->cost_cache_[i] = GetLengthCost(cost_model, i); - // Get the number of bound intervals. - if (manager->cost_cache_[i] != manager->cost_cache_[i - 1]) { - ++manager->cache_intervals_size_; - } - } - - // With the current cost model, we usually have below 20 intervals. - // The worst case scenario with a cost model would be if every length has a - // different cost, hence MAX_LENGTH but that is impossible with the current - // implementation that spirals around a pixel. - assert(manager->cache_intervals_size_ <= MAX_LENGTH); - manager->cache_intervals_ = (CostCacheInterval*)WebPSafeMalloc( - manager->cache_intervals_size_, sizeof(*manager->cache_intervals_)); - if (manager->cache_intervals_ == NULL) { - CostManagerClear(manager); - return 0; - } - - // Fill in the cache_intervals_. - { - CostCacheInterval* cur = manager->cache_intervals_; - - // Consecutive values in cost_cache_ are compared and if a big enough - // difference is found, a new interval is created and bounded. - cur->start_ = 0; - cur->end_ = 1; - cur->cost_ = manager->cost_cache_[0]; - for (i = 1; i < cost_cache_size; ++i) { - const double cost_val = manager->cost_cache_[i]; - if (cost_val != cur->cost_) { - ++cur; - // Initialize an interval. - cur->start_ = i; - cur->cost_ = cost_val; - } - cur->end_ = i + 1; - } - } - - manager->costs_ = (float*)WebPSafeMalloc(pix_count, sizeof(*manager->costs_)); - if (manager->costs_ == NULL) { - CostManagerClear(manager); - return 0; - } - // Set the initial costs_ high for every pixel as we will keep the minimum. - for (i = 0; i < pix_count; ++i) manager->costs_[i] = 1e38f; - - return 1; -} - -// Given the cost and the position that define an interval, update the cost at -// pixel 'i' if it is smaller than the previously computed value. -static WEBP_INLINE void UpdateCost(CostManager* const manager, int i, - int position, float cost) { - const int k = i - position; - assert(k >= 0 && k < MAX_LENGTH); - - if (manager->costs_[i] > cost) { - manager->costs_[i] = cost; - manager->dist_array_[i] = k + 1; - } -} - -// Given the cost and the position that define an interval, update the cost for -// all the pixels between 'start' and 'end' excluded. -static WEBP_INLINE void UpdateCostPerInterval(CostManager* const manager, - int start, int end, int position, - float cost) { - int i; - for (i = start; i < end; ++i) UpdateCost(manager, i, position, cost); -} - -// Given two intervals, make 'prev' be the previous one of 'next' in 'manager'. -static WEBP_INLINE void ConnectIntervals(CostManager* const manager, - CostInterval* const prev, - CostInterval* const next) { - if (prev != NULL) { - prev->next_ = next; - } else { - manager->head_ = next; - } - - if (next != NULL) next->previous_ = prev; -} - -// Pop an interval in the manager. -static WEBP_INLINE void PopInterval(CostManager* const manager, - CostInterval* const interval) { - if (interval == NULL) return; - - ConnectIntervals(manager, interval->previous_, interval->next_); - if (CostIntervalIsInFreeList(manager, interval)) { - CostIntervalAddToFreeList(manager, interval); - } else { // recycle regularly malloc'd intervals too - interval->next_ = manager->recycled_intervals_; - manager->recycled_intervals_ = interval; - } - --manager->count_; - assert(manager->count_ >= 0); -} - -// Update the cost at index i by going over all the stored intervals that -// overlap with i. -// If 'do_clean_intervals' is set to something different than 0, intervals that -// end before 'i' will be popped. -static WEBP_INLINE void UpdateCostAtIndex(CostManager* const manager, int i, - int do_clean_intervals) { - CostInterval* current = manager->head_; - - while (current != NULL && current->start_ <= i) { - CostInterval* const next = current->next_; - if (current->end_ <= i) { - if (do_clean_intervals) { - // We have an outdated interval, remove it. - PopInterval(manager, current); - } - } else { - UpdateCost(manager, i, current->index_, current->cost_); - } - current = next; - } -} - -// Given a current orphan interval and its previous interval, before -// it was orphaned (which can be NULL), set it at the right place in the list -// of intervals using the start_ ordering and the previous interval as a hint. -static WEBP_INLINE void PositionOrphanInterval(CostManager* const manager, - CostInterval* const current, - CostInterval* previous) { - assert(current != NULL); - - if (previous == NULL) previous = manager->head_; - while (previous != NULL && current->start_ < previous->start_) { - previous = previous->previous_; - } - while (previous != NULL && previous->next_ != NULL && - previous->next_->start_ < current->start_) { - previous = previous->next_; - } - - if (previous != NULL) { - ConnectIntervals(manager, current, previous->next_); - } else { - ConnectIntervals(manager, current, manager->head_); - } - ConnectIntervals(manager, previous, current); -} - -// Insert an interval in the list contained in the manager by starting at -// interval_in as a hint. The intervals are sorted by start_ value. -static WEBP_INLINE void InsertInterval(CostManager* const manager, - CostInterval* const interval_in, - float cost, int position, int start, - int end) { - CostInterval* interval_new; - - if (start >= end) return; - if (manager->count_ >= COST_CACHE_INTERVAL_SIZE_MAX) { - // Serialize the interval if we cannot store it. - UpdateCostPerInterval(manager, start, end, position, cost); - return; - } - if (manager->free_intervals_ != NULL) { - interval_new = manager->free_intervals_; - manager->free_intervals_ = interval_new->next_; - } else if (manager->recycled_intervals_ != NULL) { - interval_new = manager->recycled_intervals_; - manager->recycled_intervals_ = interval_new->next_; - } else { // malloc for good - interval_new = (CostInterval*)WebPSafeMalloc(1, sizeof(*interval_new)); - if (interval_new == NULL) { - // Write down the interval if we cannot create it. - UpdateCostPerInterval(manager, start, end, position, cost); - return; - } - } - - interval_new->cost_ = cost; - interval_new->index_ = position; - interval_new->start_ = start; - interval_new->end_ = end; - PositionOrphanInterval(manager, interval_new, interval_in); - - ++manager->count_; -} - -// Given a new cost interval defined by its start at position, its length value -// and distance_cost, add its contributions to the previous intervals and costs. -// If handling the interval or one of its subintervals becomes to heavy, its -// contribution is added to the costs right away. -static WEBP_INLINE void PushInterval(CostManager* const manager, - double distance_cost, int position, - int len) { - size_t i; - CostInterval* interval = manager->head_; - CostInterval* interval_next; - const CostCacheInterval* const cost_cache_intervals = - manager->cache_intervals_; - // If the interval is small enough, no need to deal with the heavy - // interval logic, just serialize it right away. This constant is empirical. - const int kSkipDistance = 10; - - if (len < kSkipDistance) { - int j; - for (j = position; j < position + len; ++j) { - const int k = j - position; - float cost_tmp; - assert(k >= 0 && k < MAX_LENGTH); - cost_tmp = (float)(distance_cost + manager->cost_cache_[k]); - - if (manager->costs_[j] > cost_tmp) { - manager->costs_[j] = cost_tmp; - manager->dist_array_[j] = k + 1; - } - } - return; - } - - for (i = 0; i < manager->cache_intervals_size_ && - cost_cache_intervals[i].start_ < len; - ++i) { - // Define the intersection of the ith interval with the new one. - int start = position + cost_cache_intervals[i].start_; - const int end = position + (cost_cache_intervals[i].end_ > len - ? len - : cost_cache_intervals[i].end_); - const float cost = (float)(distance_cost + cost_cache_intervals[i].cost_); - - for (; interval != NULL && interval->start_ < end; - interval = interval_next) { - interval_next = interval->next_; - - // Make sure we have some overlap - if (start >= interval->end_) continue; - - if (cost >= interval->cost_) { - // When intervals are represented, the lower, the better. - // [**********************************************************[ - // start end - // [----------------------------------[ - // interval->start_ interval->end_ - // If we are worse than what we already have, add whatever we have so - // far up to interval. - const int start_new = interval->end_; - InsertInterval(manager, interval, cost, position, start, - interval->start_); - start = start_new; - if (start >= end) break; - continue; - } - - if (start <= interval->start_) { - if (interval->end_ <= end) { - // [----------------------------------[ - // interval->start_ interval->end_ - // [**************************************************************[ - // start end - // We can safely remove the old interval as it is fully included. - PopInterval(manager, interval); - } else { - // [------------------------------------[ - // interval->start_ interval->end_ - // [*****************************[ - // start end - interval->start_ = end; - break; - } - } else { - if (end < interval->end_) { - // [--------------------------------------------------------------[ - // interval->start_ interval->end_ - // [*****************************[ - // start end - // We have to split the old interval as it fully contains the new one. - const int end_original = interval->end_; - interval->end_ = start; - InsertInterval(manager, interval, interval->cost_, interval->index_, - end, end_original); - interval = interval->next_; - break; - } else { - // [------------------------------------[ - // interval->start_ interval->end_ - // [*****************************[ - // start end - interval->end_ = start; - } - } - } - // Insert the remaining interval from start to end. - InsertInterval(manager, interval, cost, position, start, end); - } -} - -static int BackwardReferencesHashChainDistanceOnly( - int xsize, int ysize, const uint32_t* const argb, int cache_bits, - const VP8LHashChain* const hash_chain, const VP8LBackwardRefs* const refs, - uint16_t* const dist_array) { - int i; - int ok = 0; - int cc_init = 0; - const int pix_count = xsize * ysize; - const int use_color_cache = (cache_bits > 0); - const size_t literal_array_size = - sizeof(double) * (NUM_LITERAL_CODES + NUM_LENGTH_CODES + - ((cache_bits > 0) ? (1 << cache_bits) : 0)); - const size_t cost_model_size = sizeof(CostModel) + literal_array_size; - CostModel* const cost_model = - (CostModel*)WebPSafeCalloc(1ULL, cost_model_size); - VP8LColorCache hashers; - CostManager* cost_manager = - (CostManager*)WebPSafeMalloc(1ULL, sizeof(*cost_manager)); - int offset_prev = -1, len_prev = -1; - double offset_cost = -1; - int first_offset_is_constant = -1; // initialized with 'impossible' value - int reach = 0; - - if (cost_model == NULL || cost_manager == NULL) goto Error; - - cost_model->literal_ = (double*)(cost_model + 1); - if (use_color_cache) { - cc_init = VP8LColorCacheInit(&hashers, cache_bits); - if (!cc_init) goto Error; - } - - if (!CostModelBuild(cost_model, xsize, cache_bits, refs)) { - goto Error; - } - - if (!CostManagerInit(cost_manager, dist_array, pix_count, cost_model)) { - goto Error; - } - - // We loop one pixel at a time, but store all currently best points to - // non-processed locations from this point. - dist_array[0] = 0; - // Add first pixel as literal. - AddSingleLiteralWithCostModel(argb, &hashers, cost_model, 0, use_color_cache, - 0.f, cost_manager->costs_, dist_array); - - for (i = 1; i < pix_count; ++i) { - const float prev_cost = cost_manager->costs_[i - 1]; - int offset, len; - VP8LHashChainFindCopy(hash_chain, i, &offset, &len); - - // Try adding the pixel as a literal. - AddSingleLiteralWithCostModel(argb, &hashers, cost_model, i, - use_color_cache, prev_cost, - cost_manager->costs_, dist_array); - - // If we are dealing with a non-literal. - if (len >= 2) { - if (offset != offset_prev) { - const int code = VP8LDistanceToPlaneCode(xsize, offset); - offset_cost = GetDistanceCost(cost_model, code); - first_offset_is_constant = 1; - PushInterval(cost_manager, prev_cost + offset_cost, i, len); - } else { - assert(offset_cost >= 0); - assert(len_prev >= 0); - assert(first_offset_is_constant == 0 || first_offset_is_constant == 1); - // Instead of considering all contributions from a pixel i by calling: - // PushInterval(cost_manager, prev_cost + offset_cost, i, len); - // we optimize these contributions in case offset_cost stays the same - // for consecutive pixels. This describes a set of pixels similar to a - // previous set (e.g. constant color regions). - if (first_offset_is_constant) { - reach = i - 1 + len_prev - 1; - first_offset_is_constant = 0; - } - - if (i + len - 1 > reach) { - // We can only be go further with the same offset if the previous - // length was maxed, hence len_prev == len == MAX_LENGTH. - // TODO(vrabaud), bump i to the end right away (insert cache and - // update cost). - // TODO(vrabaud), check if one of the points in between does not have - // a lower cost. - // Already consider the pixel at "reach" to add intervals that are - // better than whatever we add. - int offset_j, len_j = 0; - int j; - assert(len == MAX_LENGTH || len == pix_count - i); - // Figure out the last consecutive pixel within [i, reach + 1] with - // the same offset. - for (j = i; j <= reach; ++j) { - VP8LHashChainFindCopy(hash_chain, j + 1, &offset_j, &len_j); - if (offset_j != offset) { - VP8LHashChainFindCopy(hash_chain, j, &offset_j, &len_j); - break; - } - } - // Update the cost at j - 1 and j. - UpdateCostAtIndex(cost_manager, j - 1, 0); - UpdateCostAtIndex(cost_manager, j, 0); - - PushInterval(cost_manager, cost_manager->costs_[j - 1] + offset_cost, - j, len_j); - reach = j + len_j - 1; - } - } - } - - UpdateCostAtIndex(cost_manager, i, 1); - offset_prev = offset; - len_prev = len; - } - - ok = !refs->error_; -Error: - if (cc_init) VP8LColorCacheClear(&hashers); - CostManagerClear(cost_manager); - WebPSafeFree(cost_model); - WebPSafeFree(cost_manager); - return ok; -} - -// We pack the path at the end of *dist_array and return -// a pointer to this part of the array. Example: -// dist_array = [1x2xx3x2] => packed [1x2x1232], chosen_path = [1232] -static void TraceBackwards(uint16_t* const dist_array, - int dist_array_size, - uint16_t** const chosen_path, - int* const chosen_path_size) { - uint16_t* path = dist_array + dist_array_size; - uint16_t* cur = dist_array + dist_array_size - 1; - while (cur >= dist_array) { - const int k = *cur; - --path; - *path = k; - cur -= k; - } - *chosen_path = path; - *chosen_path_size = (int)(dist_array + dist_array_size - path); -} - -static int BackwardReferencesHashChainFollowChosenPath( - const uint32_t* const argb, int cache_bits, - const uint16_t* const chosen_path, int chosen_path_size, - const VP8LHashChain* const hash_chain, VP8LBackwardRefs* const refs) { - const int use_color_cache = (cache_bits > 0); - int ix; - int i = 0; - int ok = 0; - int cc_init = 0; - VP8LColorCache hashers; - - if (use_color_cache) { - cc_init = VP8LColorCacheInit(&hashers, cache_bits); - if (!cc_init) goto Error; - } - - VP8LClearBackwardRefs(refs); - for (ix = 0; ix < chosen_path_size; ++ix) { - const int len = chosen_path[ix]; - if (len != 1) { - int k; - const int offset = VP8LHashChainFindOffset(hash_chain, i); - VP8LBackwardRefsCursorAdd(refs, PixOrCopyCreateCopy(offset, len)); - if (use_color_cache) { - for (k = 0; k < len; ++k) { - VP8LColorCacheInsert(&hashers, argb[i + k]); - } - } - i += len; - } else { - PixOrCopy v; - const int idx = - use_color_cache ? VP8LColorCacheContains(&hashers, argb[i]) : -1; - if (idx >= 0) { - // use_color_cache is true and hashers contains argb[i] - // push pixel as a color cache index - v = PixOrCopyCreateCacheIdx(idx); - } else { - if (use_color_cache) VP8LColorCacheInsert(&hashers, argb[i]); - v = PixOrCopyCreateLiteral(argb[i]); - } - VP8LBackwardRefsCursorAdd(refs, v); - ++i; - } - } - ok = !refs->error_; - Error: - if (cc_init) VP8LColorCacheClear(&hashers); - return ok; -} - -// Returns 1 on success. -extern int VP8LBackwardReferencesTraceBackwards( - int xsize, int ysize, const uint32_t* const argb, int cache_bits, - const VP8LHashChain* const hash_chain, - const VP8LBackwardRefs* const refs_src, VP8LBackwardRefs* const refs_dst); -int VP8LBackwardReferencesTraceBackwards(int xsize, int ysize, - const uint32_t* const argb, - int cache_bits, - const VP8LHashChain* const hash_chain, - const VP8LBackwardRefs* const refs_src, - VP8LBackwardRefs* const refs_dst) { - int ok = 0; - const int dist_array_size = xsize * ysize; - uint16_t* chosen_path = NULL; - int chosen_path_size = 0; - uint16_t* dist_array = - (uint16_t*)WebPSafeMalloc(dist_array_size, sizeof(*dist_array)); - - if (dist_array == NULL) goto Error; - - if (!BackwardReferencesHashChainDistanceOnly( - xsize, ysize, argb, cache_bits, hash_chain, refs_src, dist_array)) { - goto Error; - } - TraceBackwards(dist_array, dist_array_size, &chosen_path, &chosen_path_size); - if (!BackwardReferencesHashChainFollowChosenPath( - argb, cache_bits, chosen_path, chosen_path_size, hash_chain, - refs_dst)) { - goto Error; - } - ok = 1; - Error: - WebPSafeFree(dist_array); - return ok; -} diff --git a/Extended/libwebp/src/enc/backward_references_enc.c b/Extended/libwebp/src/enc/backward_references_enc.c deleted file mode 100644 index d445b40..0000000 --- a/Extended/libwebp/src/enc/backward_references_enc.c +++ /dev/null @@ -1,945 +0,0 @@ -// Copyright 2012 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Author: Jyrki Alakuijala (jyrki@google.com) -// - -#include -#include - -#include "src/enc/backward_references_enc.h" -#include "src/enc/histogram_enc.h" -#include "src/dsp/lossless.h" -#include "src/dsp/lossless_common.h" -#include "src/dsp/dsp.h" -#include "src/utils/color_cache_utils.h" -#include "src/utils/utils.h" - -#define MIN_BLOCK_SIZE 256 // minimum block size for backward references - -#define MAX_ENTROPY (1e30f) - -// 1M window (4M bytes) minus 120 special codes for short distances. -#define WINDOW_SIZE ((1 << WINDOW_SIZE_BITS) - 120) - -// Minimum number of pixels for which it is cheaper to encode a -// distance + length instead of each pixel as a literal. -#define MIN_LENGTH 4 - -// ----------------------------------------------------------------------------- - -static const uint8_t plane_to_code_lut[128] = { - 96, 73, 55, 39, 23, 13, 5, 1, 255, 255, 255, 255, 255, 255, 255, 255, - 101, 78, 58, 42, 26, 16, 8, 2, 0, 3, 9, 17, 27, 43, 59, 79, - 102, 86, 62, 46, 32, 20, 10, 6, 4, 7, 11, 21, 33, 47, 63, 87, - 105, 90, 70, 52, 37, 28, 18, 14, 12, 15, 19, 29, 38, 53, 71, 91, - 110, 99, 82, 66, 48, 35, 30, 24, 22, 25, 31, 36, 49, 67, 83, 100, - 115, 108, 94, 76, 64, 50, 44, 40, 34, 41, 45, 51, 65, 77, 95, 109, - 118, 113, 103, 92, 80, 68, 60, 56, 54, 57, 61, 69, 81, 93, 104, 114, - 119, 116, 111, 106, 97, 88, 84, 74, 72, 75, 85, 89, 98, 107, 112, 117 -}; - -extern int VP8LDistanceToPlaneCode(int xsize, int dist); -int VP8LDistanceToPlaneCode(int xsize, int dist) { - const int yoffset = dist / xsize; - const int xoffset = dist - yoffset * xsize; - if (xoffset <= 8 && yoffset < 8) { - return plane_to_code_lut[yoffset * 16 + 8 - xoffset] + 1; - } else if (xoffset > xsize - 8 && yoffset < 7) { - return plane_to_code_lut[(yoffset + 1) * 16 + 8 + (xsize - xoffset)] + 1; - } - return dist + 120; -} - -// Returns the exact index where array1 and array2 are different. For an index -// inferior or equal to best_len_match, the return value just has to be strictly -// inferior to best_len_match. The current behavior is to return 0 if this index -// is best_len_match, and the index itself otherwise. -// If no two elements are the same, it returns max_limit. -static WEBP_INLINE int FindMatchLength(const uint32_t* const array1, - const uint32_t* const array2, - int best_len_match, int max_limit) { - // Before 'expensive' linear match, check if the two arrays match at the - // current best length index. - if (array1[best_len_match] != array2[best_len_match]) return 0; - - return VP8LVectorMismatch(array1, array2, max_limit); -} - -// ----------------------------------------------------------------------------- -// VP8LBackwardRefs - -struct PixOrCopyBlock { - PixOrCopyBlock* next_; // next block (or NULL) - PixOrCopy* start_; // data start - int size_; // currently used size -}; - -extern void VP8LClearBackwardRefs(VP8LBackwardRefs* const refs); -void VP8LClearBackwardRefs(VP8LBackwardRefs* const refs) { - assert(refs != NULL); - if (refs->tail_ != NULL) { - *refs->tail_ = refs->free_blocks_; // recycle all blocks at once - } - refs->free_blocks_ = refs->refs_; - refs->tail_ = &refs->refs_; - refs->last_block_ = NULL; - refs->refs_ = NULL; -} - -void VP8LBackwardRefsClear(VP8LBackwardRefs* const refs) { - assert(refs != NULL); - VP8LClearBackwardRefs(refs); - while (refs->free_blocks_ != NULL) { - PixOrCopyBlock* const next = refs->free_blocks_->next_; - WebPSafeFree(refs->free_blocks_); - refs->free_blocks_ = next; - } -} - -void VP8LBackwardRefsInit(VP8LBackwardRefs* const refs, int block_size) { - assert(refs != NULL); - memset(refs, 0, sizeof(*refs)); - refs->tail_ = &refs->refs_; - refs->block_size_ = - (block_size < MIN_BLOCK_SIZE) ? MIN_BLOCK_SIZE : block_size; -} - -VP8LRefsCursor VP8LRefsCursorInit(const VP8LBackwardRefs* const refs) { - VP8LRefsCursor c; - c.cur_block_ = refs->refs_; - if (refs->refs_ != NULL) { - c.cur_pos = c.cur_block_->start_; - c.last_pos_ = c.cur_pos + c.cur_block_->size_; - } else { - c.cur_pos = NULL; - c.last_pos_ = NULL; - } - return c; -} - -void VP8LRefsCursorNextBlock(VP8LRefsCursor* const c) { - PixOrCopyBlock* const b = c->cur_block_->next_; - c->cur_pos = (b == NULL) ? NULL : b->start_; - c->last_pos_ = (b == NULL) ? NULL : b->start_ + b->size_; - c->cur_block_ = b; -} - -// Create a new block, either from the free list or allocated -static PixOrCopyBlock* BackwardRefsNewBlock(VP8LBackwardRefs* const refs) { - PixOrCopyBlock* b = refs->free_blocks_; - if (b == NULL) { // allocate new memory chunk - const size_t total_size = - sizeof(*b) + refs->block_size_ * sizeof(*b->start_); - b = (PixOrCopyBlock*)WebPSafeMalloc(1ULL, total_size); - if (b == NULL) { - refs->error_ |= 1; - return NULL; - } - b->start_ = (PixOrCopy*)((uint8_t*)b + sizeof(*b)); // not always aligned - } else { // recycle from free-list - refs->free_blocks_ = b->next_; - } - *refs->tail_ = b; - refs->tail_ = &b->next_; - refs->last_block_ = b; - b->next_ = NULL; - b->size_ = 0; - return b; -} - -extern void VP8LBackwardRefsCursorAdd(VP8LBackwardRefs* const refs, - const PixOrCopy v); -void VP8LBackwardRefsCursorAdd(VP8LBackwardRefs* const refs, - const PixOrCopy v) { - PixOrCopyBlock* b = refs->last_block_; - if (b == NULL || b->size_ == refs->block_size_) { - b = BackwardRefsNewBlock(refs); - if (b == NULL) return; // refs->error_ is set - } - b->start_[b->size_++] = v; -} - -// ----------------------------------------------------------------------------- -// Hash chains - -int VP8LHashChainInit(VP8LHashChain* const p, int size) { - assert(p->size_ == 0); - assert(p->offset_length_ == NULL); - assert(size > 0); - p->offset_length_ = - (uint32_t*)WebPSafeMalloc(size, sizeof(*p->offset_length_)); - if (p->offset_length_ == NULL) return 0; - p->size_ = size; - - return 1; -} - -void VP8LHashChainClear(VP8LHashChain* const p) { - assert(p != NULL); - WebPSafeFree(p->offset_length_); - - p->size_ = 0; - p->offset_length_ = NULL; -} - -// ----------------------------------------------------------------------------- - -static const uint32_t kHashMultiplierHi = 0xc6a4a793u; -static const uint32_t kHashMultiplierLo = 0x5bd1e996u; - -static WEBP_UBSAN_IGNORE_UNSIGNED_OVERFLOW WEBP_INLINE -uint32_t GetPixPairHash64(const uint32_t* const argb) { - uint32_t key; - key = argb[1] * kHashMultiplierHi; - key += argb[0] * kHashMultiplierLo; - key = key >> (32 - HASH_BITS); - return key; -} - -// Returns the maximum number of hash chain lookups to do for a -// given compression quality. Return value in range [8, 86]. -static int GetMaxItersForQuality(int quality) { - return 8 + (quality * quality) / 128; -} - -static int GetWindowSizeForHashChain(int quality, int xsize) { - const int max_window_size = (quality > 75) ? WINDOW_SIZE - : (quality > 50) ? (xsize << 8) - : (quality > 25) ? (xsize << 6) - : (xsize << 4); - assert(xsize > 0); - return (max_window_size > WINDOW_SIZE) ? WINDOW_SIZE : max_window_size; -} - -static WEBP_INLINE int MaxFindCopyLength(int len) { - return (len < MAX_LENGTH) ? len : MAX_LENGTH; -} - -int VP8LHashChainFill(VP8LHashChain* const p, int quality, - const uint32_t* const argb, int xsize, int ysize, - int low_effort) { - const int size = xsize * ysize; - const int iter_max = GetMaxItersForQuality(quality); - const uint32_t window_size = GetWindowSizeForHashChain(quality, xsize); - int pos; - int argb_comp; - uint32_t base_position; - int32_t* hash_to_first_index; - // Temporarily use the p->offset_length_ as a hash chain. - int32_t* chain = (int32_t*)p->offset_length_; - assert(size > 0); - assert(p->size_ != 0); - assert(p->offset_length_ != NULL); - - if (size <= 2) { - p->offset_length_[0] = p->offset_length_[size - 1] = 0; - return 1; - } - - hash_to_first_index = - (int32_t*)WebPSafeMalloc(HASH_SIZE, sizeof(*hash_to_first_index)); - if (hash_to_first_index == NULL) return 0; - - // Set the int32_t array to -1. - memset(hash_to_first_index, 0xff, HASH_SIZE * sizeof(*hash_to_first_index)); - // Fill the chain linking pixels with the same hash. - argb_comp = (argb[0] == argb[1]); - for (pos = 0; pos < size - 2;) { - uint32_t hash_code; - const int argb_comp_next = (argb[pos + 1] == argb[pos + 2]); - if (argb_comp && argb_comp_next) { - // Consecutive pixels with the same color will share the same hash. - // We therefore use a different hash: the color and its repetition - // length. - uint32_t tmp[2]; - uint32_t len = 1; - tmp[0] = argb[pos]; - // Figure out how far the pixels are the same. - // The last pixel has a different 64 bit hash, as its next pixel does - // not have the same color, so we just need to get to the last pixel equal - // to its follower. - while (pos + (int)len + 2 < size && argb[pos + len + 2] == argb[pos]) { - ++len; - } - if (len > MAX_LENGTH) { - // Skip the pixels that match for distance=1 and length>MAX_LENGTH - // because they are linked to their predecessor and we automatically - // check that in the main for loop below. Skipping means setting no - // predecessor in the chain, hence -1. - memset(chain + pos, 0xff, (len - MAX_LENGTH) * sizeof(*chain)); - pos += len - MAX_LENGTH; - len = MAX_LENGTH; - } - // Process the rest of the hash chain. - while (len) { - tmp[1] = len--; - hash_code = GetPixPairHash64(tmp); - chain[pos] = hash_to_first_index[hash_code]; - hash_to_first_index[hash_code] = pos++; - } - argb_comp = 0; - } else { - // Just move one pixel forward. - hash_code = GetPixPairHash64(argb + pos); - chain[pos] = hash_to_first_index[hash_code]; - hash_to_first_index[hash_code] = pos++; - argb_comp = argb_comp_next; - } - } - // Process the penultimate pixel. - chain[pos] = hash_to_first_index[GetPixPairHash64(argb + pos)]; - - WebPSafeFree(hash_to_first_index); - - // Find the best match interval at each pixel, defined by an offset to the - // pixel and a length. The right-most pixel cannot match anything to the right - // (hence a best length of 0) and the left-most pixel nothing to the left - // (hence an offset of 0). - assert(size > 2); - p->offset_length_[0] = p->offset_length_[size - 1] = 0; - for (base_position = size - 2; base_position > 0;) { - const int max_len = MaxFindCopyLength(size - 1 - base_position); - const uint32_t* const argb_start = argb + base_position; - int iter = iter_max; - int best_length = 0; - uint32_t best_distance = 0; - uint32_t best_argb; - const int min_pos = - (base_position > window_size) ? base_position - window_size : 0; - const int length_max = (max_len < 256) ? max_len : 256; - uint32_t max_base_position; - - pos = chain[base_position]; - if (!low_effort) { - int curr_length; - // Heuristic: use the comparison with the above line as an initialization. - if (base_position >= (uint32_t)xsize) { - curr_length = FindMatchLength(argb_start - xsize, argb_start, - best_length, max_len); - if (curr_length > best_length) { - best_length = curr_length; - best_distance = xsize; - } - --iter; - } - // Heuristic: compare to the previous pixel. - curr_length = - FindMatchLength(argb_start - 1, argb_start, best_length, max_len); - if (curr_length > best_length) { - best_length = curr_length; - best_distance = 1; - } - --iter; - // Skip the for loop if we already have the maximum. - if (best_length == MAX_LENGTH) pos = min_pos - 1; - } - best_argb = argb_start[best_length]; - - for (; pos >= min_pos && --iter; pos = chain[pos]) { - int curr_length; - assert(base_position > (uint32_t)pos); - - if (argb[pos + best_length] != best_argb) continue; - - curr_length = VP8LVectorMismatch(argb + pos, argb_start, max_len); - if (best_length < curr_length) { - best_length = curr_length; - best_distance = base_position - pos; - best_argb = argb_start[best_length]; - // Stop if we have reached a good enough length. - if (best_length >= length_max) break; - } - } - // We have the best match but in case the two intervals continue matching - // to the left, we have the best matches for the left-extended pixels. - max_base_position = base_position; - while (1) { - assert(best_length <= MAX_LENGTH); - assert(best_distance <= WINDOW_SIZE); - p->offset_length_[base_position] = - (best_distance << MAX_LENGTH_BITS) | (uint32_t)best_length; - --base_position; - // Stop if we don't have a match or if we are out of bounds. - if (best_distance == 0 || base_position == 0) break; - // Stop if we cannot extend the matching intervals to the left. - if (base_position < best_distance || - argb[base_position - best_distance] != argb[base_position]) { - break; - } - // Stop if we are matching at its limit because there could be a closer - // matching interval with the same maximum length. Then again, if the - // matching interval is as close as possible (best_distance == 1), we will - // never find anything better so let's continue. - if (best_length == MAX_LENGTH && best_distance != 1 && - base_position + MAX_LENGTH < max_base_position) { - break; - } - if (best_length < MAX_LENGTH) { - ++best_length; - max_base_position = base_position; - } - } - } - return 1; -} - -static WEBP_INLINE void AddSingleLiteral(uint32_t pixel, int use_color_cache, - VP8LColorCache* const hashers, - VP8LBackwardRefs* const refs) { - PixOrCopy v; - if (use_color_cache) { - const uint32_t key = VP8LColorCacheGetIndex(hashers, pixel); - if (VP8LColorCacheLookup(hashers, key) == pixel) { - v = PixOrCopyCreateCacheIdx(key); - } else { - v = PixOrCopyCreateLiteral(pixel); - VP8LColorCacheSet(hashers, key, pixel); - } - } else { - v = PixOrCopyCreateLiteral(pixel); - } - VP8LBackwardRefsCursorAdd(refs, v); -} - -static int BackwardReferencesRle(int xsize, int ysize, - const uint32_t* const argb, - int cache_bits, VP8LBackwardRefs* const refs) { - const int pix_count = xsize * ysize; - int i, k; - const int use_color_cache = (cache_bits > 0); - VP8LColorCache hashers; - - if (use_color_cache && !VP8LColorCacheInit(&hashers, cache_bits)) { - return 0; - } - VP8LClearBackwardRefs(refs); - // Add first pixel as literal. - AddSingleLiteral(argb[0], use_color_cache, &hashers, refs); - i = 1; - while (i < pix_count) { - const int max_len = MaxFindCopyLength(pix_count - i); - const int rle_len = FindMatchLength(argb + i, argb + i - 1, 0, max_len); - const int prev_row_len = (i < xsize) ? 0 : - FindMatchLength(argb + i, argb + i - xsize, 0, max_len); - if (rle_len >= prev_row_len && rle_len >= MIN_LENGTH) { - VP8LBackwardRefsCursorAdd(refs, PixOrCopyCreateCopy(1, rle_len)); - // We don't need to update the color cache here since it is always the - // same pixel being copied, and that does not change the color cache - // state. - i += rle_len; - } else if (prev_row_len >= MIN_LENGTH) { - VP8LBackwardRefsCursorAdd(refs, PixOrCopyCreateCopy(xsize, prev_row_len)); - if (use_color_cache) { - for (k = 0; k < prev_row_len; ++k) { - VP8LColorCacheInsert(&hashers, argb[i + k]); - } - } - i += prev_row_len; - } else { - AddSingleLiteral(argb[i], use_color_cache, &hashers, refs); - i++; - } - } - if (use_color_cache) VP8LColorCacheClear(&hashers); - return !refs->error_; -} - -static int BackwardReferencesLz77(int xsize, int ysize, - const uint32_t* const argb, int cache_bits, - const VP8LHashChain* const hash_chain, - VP8LBackwardRefs* const refs) { - int i; - int i_last_check = -1; - int ok = 0; - int cc_init = 0; - const int use_color_cache = (cache_bits > 0); - const int pix_count = xsize * ysize; - VP8LColorCache hashers; - - if (use_color_cache) { - cc_init = VP8LColorCacheInit(&hashers, cache_bits); - if (!cc_init) goto Error; - } - VP8LClearBackwardRefs(refs); - for (i = 0; i < pix_count;) { - // Alternative#1: Code the pixels starting at 'i' using backward reference. - int offset = 0; - int len = 0; - int j; - VP8LHashChainFindCopy(hash_chain, i, &offset, &len); - if (len >= MIN_LENGTH) { - const int len_ini = len; - int max_reach = 0; - const int j_max = - (i + len_ini >= pix_count) ? pix_count - 1 : i + len_ini; - // Only start from what we have not checked already. - i_last_check = (i > i_last_check) ? i : i_last_check; - // We know the best match for the current pixel but we try to find the - // best matches for the current pixel AND the next one combined. - // The naive method would use the intervals: - // [i,i+len) + [i+len, length of best match at i+len) - // while we check if we can use: - // [i,j) (where j<=i+len) + [j, length of best match at j) - for (j = i_last_check + 1; j <= j_max; ++j) { - const int len_j = VP8LHashChainFindLength(hash_chain, j); - const int reach = - j + (len_j >= MIN_LENGTH ? len_j : 1); // 1 for single literal. - if (reach > max_reach) { - len = j - i; - max_reach = reach; - if (max_reach >= pix_count) break; - } - } - } else { - len = 1; - } - // Go with literal or backward reference. - assert(len > 0); - if (len == 1) { - AddSingleLiteral(argb[i], use_color_cache, &hashers, refs); - } else { - VP8LBackwardRefsCursorAdd(refs, PixOrCopyCreateCopy(offset, len)); - if (use_color_cache) { - for (j = i; j < i + len; ++j) VP8LColorCacheInsert(&hashers, argb[j]); - } - } - i += len; - } - - ok = !refs->error_; - Error: - if (cc_init) VP8LColorCacheClear(&hashers); - return ok; -} - -// Compute an LZ77 by forcing matches to happen within a given distance cost. -// We therefore limit the algorithm to the lowest 32 values in the PlaneCode -// definition. -#define WINDOW_OFFSETS_SIZE_MAX 32 -static int BackwardReferencesLz77Box(int xsize, int ysize, - const uint32_t* const argb, int cache_bits, - const VP8LHashChain* const hash_chain_best, - VP8LHashChain* hash_chain, - VP8LBackwardRefs* const refs) { - int i; - const int pix_count = xsize * ysize; - uint16_t* counts; - int window_offsets[WINDOW_OFFSETS_SIZE_MAX] = {0}; - int window_offsets_new[WINDOW_OFFSETS_SIZE_MAX] = {0}; - int window_offsets_size = 0; - int window_offsets_new_size = 0; - uint16_t* const counts_ini = - (uint16_t*)WebPSafeMalloc(xsize * ysize, sizeof(*counts_ini)); - int best_offset_prev = -1, best_length_prev = -1; - if (counts_ini == NULL) return 0; - - // counts[i] counts how many times a pixel is repeated starting at position i. - i = pix_count - 2; - counts = counts_ini + i; - counts[1] = 1; - for (; i >= 0; --i, --counts) { - if (argb[i] == argb[i + 1]) { - // Max out the counts to MAX_LENGTH. - counts[0] = counts[1] + (counts[1] != MAX_LENGTH); - } else { - counts[0] = 1; - } - } - - // Figure out the window offsets around a pixel. They are stored in a - // spiraling order around the pixel as defined by VP8LDistanceToPlaneCode. - { - int x, y; - for (y = 0; y <= 6; ++y) { - for (x = -6; x <= 6; ++x) { - const int offset = y * xsize + x; - int plane_code; - // Ignore offsets that bring us after the pixel. - if (offset <= 0) continue; - plane_code = VP8LDistanceToPlaneCode(xsize, offset) - 1; - if (plane_code >= WINDOW_OFFSETS_SIZE_MAX) continue; - window_offsets[plane_code] = offset; - } - } - // For narrow images, not all plane codes are reached, so remove those. - for (i = 0; i < WINDOW_OFFSETS_SIZE_MAX; ++i) { - if (window_offsets[i] == 0) continue; - window_offsets[window_offsets_size++] = window_offsets[i]; - } - // Given a pixel P, find the offsets that reach pixels unreachable from P-1 - // with any of the offsets in window_offsets[]. - for (i = 0; i < window_offsets_size; ++i) { - int j; - int is_reachable = 0; - for (j = 0; j < window_offsets_size && !is_reachable; ++j) { - is_reachable |= (window_offsets[i] == window_offsets[j] + 1); - } - if (!is_reachable) { - window_offsets_new[window_offsets_new_size] = window_offsets[i]; - ++window_offsets_new_size; - } - } - } - - hash_chain->offset_length_[0] = 0; - for (i = 1; i < pix_count; ++i) { - int ind; - int best_length = VP8LHashChainFindLength(hash_chain_best, i); - int best_offset; - int do_compute = 1; - - if (best_length >= MAX_LENGTH) { - // Do not recompute the best match if we already have a maximal one in the - // window. - best_offset = VP8LHashChainFindOffset(hash_chain_best, i); - for (ind = 0; ind < window_offsets_size; ++ind) { - if (best_offset == window_offsets[ind]) { - do_compute = 0; - break; - } - } - } - if (do_compute) { - // Figure out if we should use the offset/length from the previous pixel - // as an initial guess and therefore only inspect the offsets in - // window_offsets_new[]. - const int use_prev = - (best_length_prev > 1) && (best_length_prev < MAX_LENGTH); - const int num_ind = - use_prev ? window_offsets_new_size : window_offsets_size; - best_length = use_prev ? best_length_prev - 1 : 0; - best_offset = use_prev ? best_offset_prev : 0; - // Find the longest match in a window around the pixel. - for (ind = 0; ind < num_ind; ++ind) { - int curr_length = 0; - int j = i; - int j_offset = - use_prev ? i - window_offsets_new[ind] : i - window_offsets[ind]; - if (j_offset < 0 || argb[j_offset] != argb[i]) continue; - // The longest match is the sum of how many times each pixel is - // repeated. - do { - const int counts_j_offset = counts_ini[j_offset]; - const int counts_j = counts_ini[j]; - if (counts_j_offset != counts_j) { - curr_length += - (counts_j_offset < counts_j) ? counts_j_offset : counts_j; - break; - } - // The same color is repeated counts_pos times at j_offset and j. - curr_length += counts_j_offset; - j_offset += counts_j_offset; - j += counts_j_offset; - } while (curr_length <= MAX_LENGTH && j < pix_count && - argb[j_offset] == argb[j]); - if (best_length < curr_length) { - best_offset = - use_prev ? window_offsets_new[ind] : window_offsets[ind]; - if (curr_length >= MAX_LENGTH) { - best_length = MAX_LENGTH; - break; - } else { - best_length = curr_length; - } - } - } - } - - assert(i + best_length <= pix_count); - assert(best_length <= MAX_LENGTH); - if (best_length <= MIN_LENGTH) { - hash_chain->offset_length_[i] = 0; - best_offset_prev = 0; - best_length_prev = 0; - } else { - hash_chain->offset_length_[i] = - (best_offset << MAX_LENGTH_BITS) | (uint32_t)best_length; - best_offset_prev = best_offset; - best_length_prev = best_length; - } - } - hash_chain->offset_length_[0] = 0; - WebPSafeFree(counts_ini); - - return BackwardReferencesLz77(xsize, ysize, argb, cache_bits, hash_chain, - refs); -} - -// ----------------------------------------------------------------------------- - -static void BackwardReferences2DLocality(int xsize, - const VP8LBackwardRefs* const refs) { - VP8LRefsCursor c = VP8LRefsCursorInit(refs); - while (VP8LRefsCursorOk(&c)) { - if (PixOrCopyIsCopy(c.cur_pos)) { - const int dist = c.cur_pos->argb_or_distance; - const int transformed_dist = VP8LDistanceToPlaneCode(xsize, dist); - c.cur_pos->argb_or_distance = transformed_dist; - } - VP8LRefsCursorNext(&c); - } -} - -// Evaluate optimal cache bits for the local color cache. -// The input *best_cache_bits sets the maximum cache bits to use (passing 0 -// implies disabling the local color cache). The local color cache is also -// disabled for the lower (<= 25) quality. -// Returns 0 in case of memory error. -static int CalculateBestCacheSize(const uint32_t* argb, int quality, - const VP8LBackwardRefs* const refs, - int* const best_cache_bits) { - int i; - const int cache_bits_max = (quality <= 25) ? 0 : *best_cache_bits; - double entropy_min = MAX_ENTROPY; - int cc_init[MAX_COLOR_CACHE_BITS + 1] = { 0 }; - VP8LColorCache hashers[MAX_COLOR_CACHE_BITS + 1]; - VP8LRefsCursor c = VP8LRefsCursorInit(refs); - VP8LHistogram* histos[MAX_COLOR_CACHE_BITS + 1] = { NULL }; - int ok = 0; - - assert(cache_bits_max >= 0 && cache_bits_max <= MAX_COLOR_CACHE_BITS); - - if (cache_bits_max == 0) { - *best_cache_bits = 0; - // Local color cache is disabled. - return 1; - } - - // Allocate data. - for (i = 0; i <= cache_bits_max; ++i) { - histos[i] = VP8LAllocateHistogram(i); - if (histos[i] == NULL) goto Error; - VP8LHistogramInit(histos[i], i, /*init_arrays=*/ 1); - if (i == 0) continue; - cc_init[i] = VP8LColorCacheInit(&hashers[i], i); - if (!cc_init[i]) goto Error; - } - - // Find the cache_bits giving the lowest entropy. The search is done in a - // brute-force way as the function (entropy w.r.t cache_bits) can be - // anything in practice. - while (VP8LRefsCursorOk(&c)) { - const PixOrCopy* const v = c.cur_pos; - if (PixOrCopyIsLiteral(v)) { - const uint32_t pix = *argb++; - const uint32_t a = (pix >> 24) & 0xff; - const uint32_t r = (pix >> 16) & 0xff; - const uint32_t g = (pix >> 8) & 0xff; - const uint32_t b = (pix >> 0) & 0xff; - // The keys of the caches can be derived from the longest one. - int key = VP8LHashPix(pix, 32 - cache_bits_max); - // Do not use the color cache for cache_bits = 0. - ++histos[0]->blue_[b]; - ++histos[0]->literal_[g]; - ++histos[0]->red_[r]; - ++histos[0]->alpha_[a]; - // Deal with cache_bits > 0. - for (i = cache_bits_max; i >= 1; --i, key >>= 1) { - if (VP8LColorCacheLookup(&hashers[i], key) == pix) { - ++histos[i]->literal_[NUM_LITERAL_CODES + NUM_LENGTH_CODES + key]; - } else { - VP8LColorCacheSet(&hashers[i], key, pix); - ++histos[i]->blue_[b]; - ++histos[i]->literal_[g]; - ++histos[i]->red_[r]; - ++histos[i]->alpha_[a]; - } - } - } else { - // We should compute the contribution of the (distance,length) - // histograms but those are the same independently from the cache size. - // As those constant contributions are in the end added to the other - // histogram contributions, we can safely ignore them. - int len = PixOrCopyLength(v); - uint32_t argb_prev = *argb ^ 0xffffffffu; - // Update the color caches. - do { - if (*argb != argb_prev) { - // Efficiency: insert only if the color changes. - int key = VP8LHashPix(*argb, 32 - cache_bits_max); - for (i = cache_bits_max; i >= 1; --i, key >>= 1) { - hashers[i].colors_[key] = *argb; - } - argb_prev = *argb; - } - argb++; - } while (--len != 0); - } - VP8LRefsCursorNext(&c); - } - - for (i = 0; i <= cache_bits_max; ++i) { - const double entropy = VP8LHistogramEstimateBits(histos[i]); - if (i == 0 || entropy < entropy_min) { - entropy_min = entropy; - *best_cache_bits = i; - } - } - ok = 1; -Error: - for (i = 0; i <= cache_bits_max; ++i) { - if (cc_init[i]) VP8LColorCacheClear(&hashers[i]); - VP8LFreeHistogram(histos[i]); - } - return ok; -} - -// Update (in-place) backward references for specified cache_bits. -static int BackwardRefsWithLocalCache(const uint32_t* const argb, - int cache_bits, - VP8LBackwardRefs* const refs) { - int pixel_index = 0; - VP8LColorCache hashers; - VP8LRefsCursor c = VP8LRefsCursorInit(refs); - if (!VP8LColorCacheInit(&hashers, cache_bits)) return 0; - - while (VP8LRefsCursorOk(&c)) { - PixOrCopy* const v = c.cur_pos; - if (PixOrCopyIsLiteral(v)) { - const uint32_t argb_literal = v->argb_or_distance; - const int ix = VP8LColorCacheContains(&hashers, argb_literal); - if (ix >= 0) { - // hashers contains argb_literal - *v = PixOrCopyCreateCacheIdx(ix); - } else { - VP8LColorCacheInsert(&hashers, argb_literal); - } - ++pixel_index; - } else { - // refs was created without local cache, so it can not have cache indexes. - int k; - assert(PixOrCopyIsCopy(v)); - for (k = 0; k < v->len; ++k) { - VP8LColorCacheInsert(&hashers, argb[pixel_index++]); - } - } - VP8LRefsCursorNext(&c); - } - VP8LColorCacheClear(&hashers); - return 1; -} - -static VP8LBackwardRefs* GetBackwardReferencesLowEffort( - int width, int height, const uint32_t* const argb, - int* const cache_bits, const VP8LHashChain* const hash_chain, - VP8LBackwardRefs* const refs_lz77) { - *cache_bits = 0; - if (!BackwardReferencesLz77(width, height, argb, 0, hash_chain, refs_lz77)) { - return NULL; - } - BackwardReferences2DLocality(width, refs_lz77); - return refs_lz77; -} - -extern int VP8LBackwardReferencesTraceBackwards( - int xsize, int ysize, const uint32_t* const argb, int cache_bits, - const VP8LHashChain* const hash_chain, - const VP8LBackwardRefs* const refs_src, VP8LBackwardRefs* const refs_dst); -static VP8LBackwardRefs* GetBackwardReferences( - int width, int height, const uint32_t* const argb, int quality, - int lz77_types_to_try, int* const cache_bits, - const VP8LHashChain* const hash_chain, VP8LBackwardRefs* best, - VP8LBackwardRefs* worst) { - const int cache_bits_initial = *cache_bits; - double bit_cost_best = -1; - VP8LHistogram* histo = NULL; - int lz77_type, lz77_type_best = 0; - VP8LHashChain hash_chain_box; - memset(&hash_chain_box, 0, sizeof(hash_chain_box)); - - histo = VP8LAllocateHistogram(MAX_COLOR_CACHE_BITS); - if (histo == NULL) goto Error; - - for (lz77_type = 1; lz77_types_to_try; - lz77_types_to_try &= ~lz77_type, lz77_type <<= 1) { - int res = 0; - double bit_cost; - int cache_bits_tmp = cache_bits_initial; - if ((lz77_types_to_try & lz77_type) == 0) continue; - switch (lz77_type) { - case kLZ77RLE: - res = BackwardReferencesRle(width, height, argb, 0, worst); - break; - case kLZ77Standard: - // Compute LZ77 with no cache (0 bits), as the ideal LZ77 with a color - // cache is not that different in practice. - res = BackwardReferencesLz77(width, height, argb, 0, hash_chain, worst); - break; - case kLZ77Box: - if (!VP8LHashChainInit(&hash_chain_box, width * height)) goto Error; - res = BackwardReferencesLz77Box(width, height, argb, 0, hash_chain, - &hash_chain_box, worst); - break; - default: - assert(0); - } - if (!res) goto Error; - - // Next, try with a color cache and update the references. - if (!CalculateBestCacheSize(argb, quality, worst, &cache_bits_tmp)) { - goto Error; - } - if (cache_bits_tmp > 0) { - if (!BackwardRefsWithLocalCache(argb, cache_bits_tmp, worst)) { - goto Error; - } - } - - // Keep the best backward references. - VP8LHistogramCreate(histo, worst, cache_bits_tmp); - bit_cost = VP8LHistogramEstimateBits(histo); - if (lz77_type_best == 0 || bit_cost < bit_cost_best) { - VP8LBackwardRefs* const tmp = worst; - worst = best; - best = tmp; - bit_cost_best = bit_cost; - *cache_bits = cache_bits_tmp; - lz77_type_best = lz77_type; - } - } - assert(lz77_type_best > 0); - - // Improve on simple LZ77 but only for high quality (TraceBackwards is - // costly). - if ((lz77_type_best == kLZ77Standard || lz77_type_best == kLZ77Box) && - quality >= 25) { - const VP8LHashChain* const hash_chain_tmp = - (lz77_type_best == kLZ77Standard) ? hash_chain : &hash_chain_box; - if (VP8LBackwardReferencesTraceBackwards(width, height, argb, *cache_bits, - hash_chain_tmp, best, worst)) { - double bit_cost_trace; - VP8LHistogramCreate(histo, worst, *cache_bits); - bit_cost_trace = VP8LHistogramEstimateBits(histo); - if (bit_cost_trace < bit_cost_best) best = worst; - } - } - - BackwardReferences2DLocality(width, best); - -Error: - VP8LHashChainClear(&hash_chain_box); - VP8LFreeHistogram(histo); - return best; -} - -VP8LBackwardRefs* VP8LGetBackwardReferences( - int width, int height, const uint32_t* const argb, int quality, - int low_effort, int lz77_types_to_try, int* const cache_bits, - const VP8LHashChain* const hash_chain, VP8LBackwardRefs* const refs_tmp1, - VP8LBackwardRefs* const refs_tmp2) { - if (low_effort) { - return GetBackwardReferencesLowEffort(width, height, argb, cache_bits, - hash_chain, refs_tmp1); - } else { - return GetBackwardReferences(width, height, argb, quality, - lz77_types_to_try, cache_bits, hash_chain, - refs_tmp1, refs_tmp2); - } -} diff --git a/Extended/libwebp/src/enc/backward_references_enc.h b/Extended/libwebp/src/enc/backward_references_enc.h deleted file mode 100644 index 103ddfd..0000000 --- a/Extended/libwebp/src/enc/backward_references_enc.h +++ /dev/null @@ -1,234 +0,0 @@ -// Copyright 2012 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Author: Jyrki Alakuijala (jyrki@google.com) -// - -#ifndef WEBP_ENC_BACKWARD_REFERENCES_ENC_H_ -#define WEBP_ENC_BACKWARD_REFERENCES_ENC_H_ - -#include -#include -#include "src/webp/types.h" -#include "src/webp/format_constants.h" - -#ifdef __cplusplus -extern "C" { -#endif - -// The maximum allowed limit is 11. -#define MAX_COLOR_CACHE_BITS 10 - -// ----------------------------------------------------------------------------- -// PixOrCopy - -enum Mode { - kLiteral, - kCacheIdx, - kCopy, - kNone -}; - -typedef struct { - // mode as uint8_t to make the memory layout to be exactly 8 bytes. - uint8_t mode; - uint16_t len; - uint32_t argb_or_distance; -} PixOrCopy; - -static WEBP_INLINE PixOrCopy PixOrCopyCreateCopy(uint32_t distance, - uint16_t len) { - PixOrCopy retval; - retval.mode = kCopy; - retval.argb_or_distance = distance; - retval.len = len; - return retval; -} - -static WEBP_INLINE PixOrCopy PixOrCopyCreateCacheIdx(int idx) { - PixOrCopy retval; - assert(idx >= 0); - assert(idx < (1 << MAX_COLOR_CACHE_BITS)); - retval.mode = kCacheIdx; - retval.argb_or_distance = idx; - retval.len = 1; - return retval; -} - -static WEBP_INLINE PixOrCopy PixOrCopyCreateLiteral(uint32_t argb) { - PixOrCopy retval; - retval.mode = kLiteral; - retval.argb_or_distance = argb; - retval.len = 1; - return retval; -} - -static WEBP_INLINE int PixOrCopyIsLiteral(const PixOrCopy* const p) { - return (p->mode == kLiteral); -} - -static WEBP_INLINE int PixOrCopyIsCacheIdx(const PixOrCopy* const p) { - return (p->mode == kCacheIdx); -} - -static WEBP_INLINE int PixOrCopyIsCopy(const PixOrCopy* const p) { - return (p->mode == kCopy); -} - -static WEBP_INLINE uint32_t PixOrCopyLiteral(const PixOrCopy* const p, - int component) { - assert(p->mode == kLiteral); - return (p->argb_or_distance >> (component * 8)) & 0xff; -} - -static WEBP_INLINE uint32_t PixOrCopyLength(const PixOrCopy* const p) { - return p->len; -} - -static WEBP_INLINE uint32_t PixOrCopyCacheIdx(const PixOrCopy* const p) { - assert(p->mode == kCacheIdx); - assert(p->argb_or_distance < (1U << MAX_COLOR_CACHE_BITS)); - return p->argb_or_distance; -} - -static WEBP_INLINE uint32_t PixOrCopyDistance(const PixOrCopy* const p) { - assert(p->mode == kCopy); - return p->argb_or_distance; -} - -// ----------------------------------------------------------------------------- -// VP8LHashChain - -#define HASH_BITS 18 -#define HASH_SIZE (1 << HASH_BITS) - -// If you change this, you need MAX_LENGTH_BITS + WINDOW_SIZE_BITS <= 32 as it -// is used in VP8LHashChain. -#define MAX_LENGTH_BITS 12 -#define WINDOW_SIZE_BITS 20 -// We want the max value to be attainable and stored in MAX_LENGTH_BITS bits. -#define MAX_LENGTH ((1 << MAX_LENGTH_BITS) - 1) -#if MAX_LENGTH_BITS + WINDOW_SIZE_BITS > 32 -#error "MAX_LENGTH_BITS + WINDOW_SIZE_BITS > 32" -#endif - -typedef struct VP8LHashChain VP8LHashChain; -struct VP8LHashChain { - // The 20 most significant bits contain the offset at which the best match - // is found. These 20 bits are the limit defined by GetWindowSizeForHashChain - // (through WINDOW_SIZE = 1<<20). - // The lower 12 bits contain the length of the match. The 12 bit limit is - // defined in MaxFindCopyLength with MAX_LENGTH=4096. - uint32_t* offset_length_; - // This is the maximum size of the hash_chain that can be constructed. - // Typically this is the pixel count (width x height) for a given image. - int size_; -}; - -// Must be called first, to set size. -int VP8LHashChainInit(VP8LHashChain* const p, int size); -// Pre-compute the best matches for argb. -int VP8LHashChainFill(VP8LHashChain* const p, int quality, - const uint32_t* const argb, int xsize, int ysize, - int low_effort); -void VP8LHashChainClear(VP8LHashChain* const p); // release memory - -static WEBP_INLINE int VP8LHashChainFindOffset(const VP8LHashChain* const p, - const int base_position) { - return p->offset_length_[base_position] >> MAX_LENGTH_BITS; -} - -static WEBP_INLINE int VP8LHashChainFindLength(const VP8LHashChain* const p, - const int base_position) { - return p->offset_length_[base_position] & ((1U << MAX_LENGTH_BITS) - 1); -} - -static WEBP_INLINE void VP8LHashChainFindCopy(const VP8LHashChain* const p, - int base_position, - int* const offset_ptr, - int* const length_ptr) { - *offset_ptr = VP8LHashChainFindOffset(p, base_position); - *length_ptr = VP8LHashChainFindLength(p, base_position); -} - -// ----------------------------------------------------------------------------- -// VP8LBackwardRefs (block-based backward-references storage) - -// maximum number of reference blocks the image will be segmented into -#define MAX_REFS_BLOCK_PER_IMAGE 16 - -typedef struct PixOrCopyBlock PixOrCopyBlock; // forward declaration -typedef struct VP8LBackwardRefs VP8LBackwardRefs; - -// Container for blocks chain -struct VP8LBackwardRefs { - int block_size_; // common block-size - int error_; // set to true if some memory error occurred - PixOrCopyBlock* refs_; // list of currently used blocks - PixOrCopyBlock** tail_; // for list recycling - PixOrCopyBlock* free_blocks_; // free-list - PixOrCopyBlock* last_block_; // used for adding new refs (internal) -}; - -// Initialize the object. 'block_size' is the common block size to store -// references (typically, width * height / MAX_REFS_BLOCK_PER_IMAGE). -void VP8LBackwardRefsInit(VP8LBackwardRefs* const refs, int block_size); -// Release memory for backward references. -void VP8LBackwardRefsClear(VP8LBackwardRefs* const refs); - -// Cursor for iterating on references content -typedef struct { - // public: - PixOrCopy* cur_pos; // current position - // private: - PixOrCopyBlock* cur_block_; // current block in the refs list - const PixOrCopy* last_pos_; // sentinel for switching to next block -} VP8LRefsCursor; - -// Returns a cursor positioned at the beginning of the references list. -VP8LRefsCursor VP8LRefsCursorInit(const VP8LBackwardRefs* const refs); -// Returns true if cursor is pointing at a valid position. -static WEBP_INLINE int VP8LRefsCursorOk(const VP8LRefsCursor* const c) { - return (c->cur_pos != NULL); -} -// Move to next block of references. Internal, not to be called directly. -void VP8LRefsCursorNextBlock(VP8LRefsCursor* const c); -// Move to next position, or NULL. Should not be called if !VP8LRefsCursorOk(). -static WEBP_INLINE void VP8LRefsCursorNext(VP8LRefsCursor* const c) { - assert(c != NULL); - assert(VP8LRefsCursorOk(c)); - if (++c->cur_pos == c->last_pos_) VP8LRefsCursorNextBlock(c); -} - -// ----------------------------------------------------------------------------- -// Main entry points - -enum VP8LLZ77Type { - kLZ77Standard = 1, - kLZ77RLE = 2, - kLZ77Box = 4 -}; - -// Evaluates best possible backward references for specified quality. -// The input cache_bits to 'VP8LGetBackwardReferences' sets the maximum cache -// bits to use (passing 0 implies disabling the local color cache). -// The optimal cache bits is evaluated and set for the *cache_bits parameter. -// The return value is the pointer to the best of the two backward refs viz, -// refs[0] or refs[1]. -VP8LBackwardRefs* VP8LGetBackwardReferences( - int width, int height, const uint32_t* const argb, int quality, - int low_effort, int lz77_types_to_try, int* const cache_bits, - const VP8LHashChain* const hash_chain, VP8LBackwardRefs* const refs_tmp1, - VP8LBackwardRefs* const refs_tmp2); - -#ifdef __cplusplus -} -#endif - -#endif // WEBP_ENC_BACKWARD_REFERENCES_ENC_H_ diff --git a/Extended/libwebp/src/enc/config_enc.c b/Extended/libwebp/src/enc/config_enc.c deleted file mode 100644 index 9d48289..0000000 --- a/Extended/libwebp/src/enc/config_enc.c +++ /dev/null @@ -1,152 +0,0 @@ -// Copyright 2011 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Coding tools configuration -// -// Author: Skal (pascal.massimino@gmail.com) - -#ifdef HAVE_CONFIG_H -#include "src/webp/config.h" -#endif - -#include "src/webp/encode.h" - -//------------------------------------------------------------------------------ -// WebPConfig -//------------------------------------------------------------------------------ - -int WebPConfigInitInternal(WebPConfig* config, - WebPPreset preset, float quality, int version) { - if (WEBP_ABI_IS_INCOMPATIBLE(version, WEBP_ENCODER_ABI_VERSION)) { - return 0; // caller/system version mismatch! - } - if (config == NULL) return 0; - - config->quality = quality; - config->target_size = 0; - config->target_PSNR = 0.; - config->method = 4; - config->sns_strength = 50; - config->filter_strength = 60; // mid-filtering - config->filter_sharpness = 0; - config->filter_type = 1; // default: strong (so U/V is filtered too) - config->partitions = 0; - config->segments = 4; - config->pass = 1; - config->show_compressed = 0; - config->preprocessing = 0; - config->autofilter = 0; - config->partition_limit = 0; - config->alpha_compression = 1; - config->alpha_filtering = 1; - config->alpha_quality = 100; - config->lossless = 0; - config->exact = 0; - config->image_hint = WEBP_HINT_DEFAULT; - config->emulate_jpeg_size = 0; - config->thread_level = 0; - config->low_memory = 0; - config->near_lossless = 100; - config->use_delta_palette = 0; - config->use_sharp_yuv = 0; - - // TODO(skal): tune. - switch (preset) { - case WEBP_PRESET_PICTURE: - config->sns_strength = 80; - config->filter_sharpness = 4; - config->filter_strength = 35; - config->preprocessing &= ~2; // no dithering - break; - case WEBP_PRESET_PHOTO: - config->sns_strength = 80; - config->filter_sharpness = 3; - config->filter_strength = 30; - config->preprocessing |= 2; - break; - case WEBP_PRESET_DRAWING: - config->sns_strength = 25; - config->filter_sharpness = 6; - config->filter_strength = 10; - break; - case WEBP_PRESET_ICON: - config->sns_strength = 0; - config->filter_strength = 0; // disable filtering to retain sharpness - config->preprocessing &= ~2; // no dithering - break; - case WEBP_PRESET_TEXT: - config->sns_strength = 0; - config->filter_strength = 0; // disable filtering to retain sharpness - config->preprocessing &= ~2; // no dithering - config->segments = 2; - break; - case WEBP_PRESET_DEFAULT: - default: - break; - } - return WebPValidateConfig(config); -} - -int WebPValidateConfig(const WebPConfig* config) { - if (config == NULL) return 0; - if (config->quality < 0 || config->quality > 100) return 0; - if (config->target_size < 0) return 0; - if (config->target_PSNR < 0) return 0; - if (config->method < 0 || config->method > 6) return 0; - if (config->segments < 1 || config->segments > 4) return 0; - if (config->sns_strength < 0 || config->sns_strength > 100) return 0; - if (config->filter_strength < 0 || config->filter_strength > 100) return 0; - if (config->filter_sharpness < 0 || config->filter_sharpness > 7) return 0; - if (config->filter_type < 0 || config->filter_type > 1) return 0; - if (config->autofilter < 0 || config->autofilter > 1) return 0; - if (config->pass < 1 || config->pass > 10) return 0; - if (config->show_compressed < 0 || config->show_compressed > 1) return 0; - if (config->preprocessing < 0 || config->preprocessing > 7) return 0; - if (config->partitions < 0 || config->partitions > 3) return 0; - if (config->partition_limit < 0 || config->partition_limit > 100) return 0; - if (config->alpha_compression < 0) return 0; - if (config->alpha_filtering < 0) return 0; - if (config->alpha_quality < 0 || config->alpha_quality > 100) return 0; - if (config->lossless < 0 || config->lossless > 1) return 0; - if (config->near_lossless < 0 || config->near_lossless > 100) return 0; - if (config->image_hint >= WEBP_HINT_LAST) return 0; - if (config->emulate_jpeg_size < 0 || config->emulate_jpeg_size > 1) return 0; - if (config->thread_level < 0 || config->thread_level > 1) return 0; - if (config->low_memory < 0 || config->low_memory > 1) return 0; - if (config->exact < 0 || config->exact > 1) return 0; - if (config->use_delta_palette < 0 || config->use_delta_palette > 1) { - return 0; - } - if (config->use_sharp_yuv < 0 || config->use_sharp_yuv > 1) return 0; - - return 1; -} - -//------------------------------------------------------------------------------ - -#define MAX_LEVEL 9 - -// Mapping between -z level and -m / -q parameter settings. -static const struct { - uint8_t method_; - uint8_t quality_; -} kLosslessPresets[MAX_LEVEL + 1] = { - { 0, 0 }, { 1, 20 }, { 2, 25 }, { 3, 30 }, { 3, 50 }, - { 4, 50 }, { 4, 75 }, { 4, 90 }, { 5, 90 }, { 6, 100 } -}; - -int WebPConfigLosslessPreset(WebPConfig* config, int level) { - if (config == NULL || level < 0 || level > MAX_LEVEL) return 0; - config->lossless = 1; - config->method = kLosslessPresets[level].method_; - config->quality = kLosslessPresets[level].quality_; - return 1; -} - -//------------------------------------------------------------------------------ diff --git a/Extended/libwebp/src/enc/cost_enc.c b/Extended/libwebp/src/enc/cost_enc.c deleted file mode 100644 index 48fd9bc..0000000 --- a/Extended/libwebp/src/enc/cost_enc.c +++ /dev/null @@ -1,342 +0,0 @@ -// Copyright 2011 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Cost tables for level and modes -// -// Author: Skal (pascal.massimino@gmail.com) - -#include "src/enc/cost_enc.h" - -//------------------------------------------------------------------------------ -// Level cost tables - -// For each given level, the following table gives the pattern of contexts to -// use for coding it (in [][0]) as well as the bit value to use for each -// context (in [][1]). -const uint16_t VP8LevelCodes[MAX_VARIABLE_LEVEL][2] = { - {0x001, 0x000}, {0x007, 0x001}, {0x00f, 0x005}, - {0x00f, 0x00d}, {0x033, 0x003}, {0x033, 0x003}, {0x033, 0x023}, - {0x033, 0x023}, {0x033, 0x023}, {0x033, 0x023}, {0x0d3, 0x013}, - {0x0d3, 0x013}, {0x0d3, 0x013}, {0x0d3, 0x013}, {0x0d3, 0x013}, - {0x0d3, 0x013}, {0x0d3, 0x013}, {0x0d3, 0x013}, {0x0d3, 0x093}, - {0x0d3, 0x093}, {0x0d3, 0x093}, {0x0d3, 0x093}, {0x0d3, 0x093}, - {0x0d3, 0x093}, {0x0d3, 0x093}, {0x0d3, 0x093}, {0x0d3, 0x093}, - {0x0d3, 0x093}, {0x0d3, 0x093}, {0x0d3, 0x093}, {0x0d3, 0x093}, - {0x0d3, 0x093}, {0x0d3, 0x093}, {0x0d3, 0x093}, {0x153, 0x053}, - {0x153, 0x053}, {0x153, 0x053}, {0x153, 0x053}, {0x153, 0x053}, - {0x153, 0x053}, {0x153, 0x053}, {0x153, 0x053}, {0x153, 0x053}, - {0x153, 0x053}, {0x153, 0x053}, {0x153, 0x053}, {0x153, 0x053}, - {0x153, 0x053}, {0x153, 0x053}, {0x153, 0x053}, {0x153, 0x053}, - {0x153, 0x053}, {0x153, 0x053}, {0x153, 0x053}, {0x153, 0x053}, - {0x153, 0x053}, {0x153, 0x053}, {0x153, 0x053}, {0x153, 0x053}, - {0x153, 0x053}, {0x153, 0x053}, {0x153, 0x053}, {0x153, 0x053}, - {0x153, 0x053}, {0x153, 0x053}, {0x153, 0x053}, {0x153, 0x153} -}; - -static int VariableLevelCost(int level, const uint8_t probas[NUM_PROBAS]) { - int pattern = VP8LevelCodes[level - 1][0]; - int bits = VP8LevelCodes[level - 1][1]; - int cost = 0; - int i; - for (i = 2; pattern; ++i) { - if (pattern & 1) { - cost += VP8BitCost(bits & 1, probas[i]); - } - bits >>= 1; - pattern >>= 1; - } - return cost; -} - -//------------------------------------------------------------------------------ -// Pre-calc level costs once for all - -void VP8CalculateLevelCosts(VP8EncProba* const proba) { - int ctype, band, ctx; - - if (!proba->dirty_) return; // nothing to do. - - for (ctype = 0; ctype < NUM_TYPES; ++ctype) { - int n; - for (band = 0; band < NUM_BANDS; ++band) { - for (ctx = 0; ctx < NUM_CTX; ++ctx) { - const uint8_t* const p = proba->coeffs_[ctype][band][ctx]; - uint16_t* const table = proba->level_cost_[ctype][band][ctx]; - const int cost0 = (ctx > 0) ? VP8BitCost(1, p[0]) : 0; - const int cost_base = VP8BitCost(1, p[1]) + cost0; - int v; - table[0] = VP8BitCost(0, p[1]) + cost0; - for (v = 1; v <= MAX_VARIABLE_LEVEL; ++v) { - table[v] = cost_base + VariableLevelCost(v, p); - } - // Starting at level 67 and up, the variable part of the cost is - // actually constant. - } - } - for (n = 0; n < 16; ++n) { // replicate bands. We don't need to sentinel. - for (ctx = 0; ctx < NUM_CTX; ++ctx) { - proba->remapped_costs_[ctype][n][ctx] = - proba->level_cost_[ctype][VP8EncBands[n]][ctx]; - } - } - } - proba->dirty_ = 0; -} - -//------------------------------------------------------------------------------ -// Mode cost tables. - -// These are the fixed probabilities (in the coding trees) turned into bit-cost -// by calling VP8BitCost(). -const uint16_t VP8FixedCostsUV[4] = { 302, 984, 439, 642 }; -// note: these values include the fixed VP8BitCost(1, 145) mode selection cost. -const uint16_t VP8FixedCostsI16[4] = { 663, 919, 872, 919 }; -const uint16_t VP8FixedCostsI4[NUM_BMODES][NUM_BMODES][NUM_BMODES] = { - { { 40, 1151, 1723, 1874, 2103, 2019, 1628, 1777, 2226, 2137 }, - { 192, 469, 1296, 1308, 1849, 1794, 1781, 1703, 1713, 1522 }, - { 142, 910, 762, 1684, 1849, 1576, 1460, 1305, 1801, 1657 }, - { 559, 641, 1370, 421, 1182, 1569, 1612, 1725, 863, 1007 }, - { 299, 1059, 1256, 1108, 636, 1068, 1581, 1883, 869, 1142 }, - { 277, 1111, 707, 1362, 1089, 672, 1603, 1541, 1545, 1291 }, - { 214, 781, 1609, 1303, 1632, 2229, 726, 1560, 1713, 918 }, - { 152, 1037, 1046, 1759, 1983, 2174, 1358, 742, 1740, 1390 }, - { 512, 1046, 1420, 753, 752, 1297, 1486, 1613, 460, 1207 }, - { 424, 827, 1362, 719, 1462, 1202, 1199, 1476, 1199, 538 } }, - { { 240, 402, 1134, 1491, 1659, 1505, 1517, 1555, 1979, 2099 }, - { 467, 242, 960, 1232, 1714, 1620, 1834, 1570, 1676, 1391 }, - { 500, 455, 463, 1507, 1699, 1282, 1564, 982, 2114, 2114 }, - { 672, 643, 1372, 331, 1589, 1667, 1453, 1938, 996, 876 }, - { 458, 783, 1037, 911, 738, 968, 1165, 1518, 859, 1033 }, - { 504, 815, 504, 1139, 1219, 719, 1506, 1085, 1268, 1268 }, - { 333, 630, 1445, 1239, 1883, 3672, 799, 1548, 1865, 598 }, - { 399, 644, 746, 1342, 1856, 1350, 1493, 613, 1855, 1015 }, - { 622, 749, 1205, 608, 1066, 1408, 1290, 1406, 546, 971 }, - { 500, 753, 1041, 668, 1230, 1617, 1297, 1425, 1383, 523 } }, - { { 394, 553, 523, 1502, 1536, 981, 1608, 1142, 1666, 2181 }, - { 655, 430, 375, 1411, 1861, 1220, 1677, 1135, 1978, 1553 }, - { 690, 640, 245, 1954, 2070, 1194, 1528, 982, 1972, 2232 }, - { 559, 834, 741, 867, 1131, 980, 1225, 852, 1092, 784 }, - { 690, 875, 516, 959, 673, 894, 1056, 1190, 1528, 1126 }, - { 740, 951, 384, 1277, 1177, 492, 1579, 1155, 1846, 1513 }, - { 323, 775, 1062, 1776, 3062, 1274, 813, 1188, 1372, 655 }, - { 488, 971, 484, 1767, 1515, 1775, 1115, 503, 1539, 1461 }, - { 740, 1006, 998, 709, 851, 1230, 1337, 788, 741, 721 }, - { 522, 1073, 573, 1045, 1346, 887, 1046, 1146, 1203, 697 } }, - { { 105, 864, 1442, 1009, 1934, 1840, 1519, 1920, 1673, 1579 }, - { 534, 305, 1193, 683, 1388, 2164, 1802, 1894, 1264, 1170 }, - { 305, 518, 877, 1108, 1426, 3215, 1425, 1064, 1320, 1242 }, - { 683, 732, 1927, 257, 1493, 2048, 1858, 1552, 1055, 947 }, - { 394, 814, 1024, 660, 959, 1556, 1282, 1289, 893, 1047 }, - { 528, 615, 996, 940, 1201, 635, 1094, 2515, 803, 1358 }, - { 347, 614, 1609, 1187, 3133, 1345, 1007, 1339, 1017, 667 }, - { 218, 740, 878, 1605, 3650, 3650, 1345, 758, 1357, 1617 }, - { 672, 750, 1541, 558, 1257, 1599, 1870, 2135, 402, 1087 }, - { 592, 684, 1161, 430, 1092, 1497, 1475, 1489, 1095, 822 } }, - { { 228, 1056, 1059, 1368, 752, 982, 1512, 1518, 987, 1782 }, - { 494, 514, 818, 942, 965, 892, 1610, 1356, 1048, 1363 }, - { 512, 648, 591, 1042, 761, 991, 1196, 1454, 1309, 1463 }, - { 683, 749, 1043, 676, 841, 1396, 1133, 1138, 654, 939 }, - { 622, 1101, 1126, 994, 361, 1077, 1203, 1318, 877, 1219 }, - { 631, 1068, 857, 1650, 651, 477, 1650, 1419, 828, 1170 }, - { 555, 727, 1068, 1335, 3127, 1339, 820, 1331, 1077, 429 }, - { 504, 879, 624, 1398, 889, 889, 1392, 808, 891, 1406 }, - { 683, 1602, 1289, 977, 578, 983, 1280, 1708, 406, 1122 }, - { 399, 865, 1433, 1070, 1072, 764, 968, 1477, 1223, 678 } }, - { { 333, 760, 935, 1638, 1010, 529, 1646, 1410, 1472, 2219 }, - { 512, 494, 750, 1160, 1215, 610, 1870, 1868, 1628, 1169 }, - { 572, 646, 492, 1934, 1208, 603, 1580, 1099, 1398, 1995 }, - { 786, 789, 942, 581, 1018, 951, 1599, 1207, 731, 768 }, - { 690, 1015, 672, 1078, 582, 504, 1693, 1438, 1108, 2897 }, - { 768, 1267, 571, 2005, 1243, 244, 2881, 1380, 1786, 1453 }, - { 452, 899, 1293, 903, 1311, 3100, 465, 1311, 1319, 813 }, - { 394, 927, 942, 1103, 1358, 1104, 946, 593, 1363, 1109 }, - { 559, 1005, 1007, 1016, 658, 1173, 1021, 1164, 623, 1028 }, - { 564, 796, 632, 1005, 1014, 863, 2316, 1268, 938, 764 } }, - { { 266, 606, 1098, 1228, 1497, 1243, 948, 1030, 1734, 1461 }, - { 366, 585, 901, 1060, 1407, 1247, 876, 1134, 1620, 1054 }, - { 452, 565, 542, 1729, 1479, 1479, 1016, 886, 2938, 1150 }, - { 555, 1088, 1533, 950, 1354, 895, 834, 1019, 1021, 496 }, - { 704, 815, 1193, 971, 973, 640, 1217, 2214, 832, 578 }, - { 672, 1245, 579, 871, 875, 774, 872, 1273, 1027, 949 }, - { 296, 1134, 2050, 1784, 1636, 3425, 442, 1550, 2076, 722 }, - { 342, 982, 1259, 1846, 1848, 1848, 622, 568, 1847, 1052 }, - { 555, 1064, 1304, 828, 746, 1343, 1075, 1329, 1078, 494 }, - { 288, 1167, 1285, 1174, 1639, 1639, 833, 2254, 1304, 509 } }, - { { 342, 719, 767, 1866, 1757, 1270, 1246, 550, 1746, 2151 }, - { 483, 653, 694, 1509, 1459, 1410, 1218, 507, 1914, 1266 }, - { 488, 757, 447, 2979, 1813, 1268, 1654, 539, 1849, 2109 }, - { 522, 1097, 1085, 851, 1365, 1111, 851, 901, 961, 605 }, - { 709, 716, 841, 728, 736, 945, 941, 862, 2845, 1057 }, - { 512, 1323, 500, 1336, 1083, 681, 1342, 717, 1604, 1350 }, - { 452, 1155, 1372, 1900, 1501, 3290, 311, 944, 1919, 922 }, - { 403, 1520, 977, 2132, 1733, 3522, 1076, 276, 3335, 1547 }, - { 559, 1374, 1101, 615, 673, 2462, 974, 795, 984, 984 }, - { 547, 1122, 1062, 812, 1410, 951, 1140, 622, 1268, 651 } }, - { { 165, 982, 1235, 938, 1334, 1366, 1659, 1578, 964, 1612 }, - { 592, 422, 925, 847, 1139, 1112, 1387, 2036, 861, 1041 }, - { 403, 837, 732, 770, 941, 1658, 1250, 809, 1407, 1407 }, - { 896, 874, 1071, 381, 1568, 1722, 1437, 2192, 480, 1035 }, - { 640, 1098, 1012, 1032, 684, 1382, 1581, 2106, 416, 865 }, - { 559, 1005, 819, 914, 710, 770, 1418, 920, 838, 1435 }, - { 415, 1258, 1245, 870, 1278, 3067, 770, 1021, 1287, 522 }, - { 406, 990, 601, 1009, 1265, 1265, 1267, 759, 1017, 1277 }, - { 968, 1182, 1329, 788, 1032, 1292, 1705, 1714, 203, 1403 }, - { 732, 877, 1279, 471, 901, 1161, 1545, 1294, 755, 755 } }, - { { 111, 931, 1378, 1185, 1933, 1648, 1148, 1714, 1873, 1307 }, - { 406, 414, 1030, 1023, 1910, 1404, 1313, 1647, 1509, 793 }, - { 342, 640, 575, 1088, 1241, 1349, 1161, 1350, 1756, 1502 }, - { 559, 766, 1185, 357, 1682, 1428, 1329, 1897, 1219, 802 }, - { 473, 909, 1164, 771, 719, 2508, 1427, 1432, 722, 782 }, - { 342, 892, 785, 1145, 1150, 794, 1296, 1550, 973, 1057 }, - { 208, 1036, 1326, 1343, 1606, 3395, 815, 1455, 1618, 712 }, - { 228, 928, 890, 1046, 3499, 1711, 994, 829, 1720, 1318 }, - { 768, 724, 1058, 636, 991, 1075, 1319, 1324, 616, 825 }, - { 305, 1167, 1358, 899, 1587, 1587, 987, 1988, 1332, 501 } } -}; - -//------------------------------------------------------------------------------ -// helper functions for residuals struct VP8Residual. - -void VP8InitResidual(int first, int coeff_type, - VP8Encoder* const enc, VP8Residual* const res) { - res->coeff_type = coeff_type; - res->prob = enc->proba_.coeffs_[coeff_type]; - res->stats = enc->proba_.stats_[coeff_type]; - res->costs = enc->proba_.remapped_costs_[coeff_type]; - res->first = first; -} - -//------------------------------------------------------------------------------ -// Mode costs - -int VP8GetCostLuma4(VP8EncIterator* const it, const int16_t levels[16]) { - const int x = (it->i4_ & 3), y = (it->i4_ >> 2); - VP8Residual res; - VP8Encoder* const enc = it->enc_; - int R = 0; - int ctx; - - VP8InitResidual(0, 3, enc, &res); - ctx = it->top_nz_[x] + it->left_nz_[y]; - VP8SetResidualCoeffs(levels, &res); - R += VP8GetResidualCost(ctx, &res); - return R; -} - -int VP8GetCostLuma16(VP8EncIterator* const it, const VP8ModeScore* const rd) { - VP8Residual res; - VP8Encoder* const enc = it->enc_; - int x, y; - int R = 0; - - VP8IteratorNzToBytes(it); // re-import the non-zero context - - // DC - VP8InitResidual(0, 1, enc, &res); - VP8SetResidualCoeffs(rd->y_dc_levels, &res); - R += VP8GetResidualCost(it->top_nz_[8] + it->left_nz_[8], &res); - - // AC - VP8InitResidual(1, 0, enc, &res); - for (y = 0; y < 4; ++y) { - for (x = 0; x < 4; ++x) { - const int ctx = it->top_nz_[x] + it->left_nz_[y]; - VP8SetResidualCoeffs(rd->y_ac_levels[x + y * 4], &res); - R += VP8GetResidualCost(ctx, &res); - it->top_nz_[x] = it->left_nz_[y] = (res.last >= 0); - } - } - return R; -} - -int VP8GetCostUV(VP8EncIterator* const it, const VP8ModeScore* const rd) { - VP8Residual res; - VP8Encoder* const enc = it->enc_; - int ch, x, y; - int R = 0; - - VP8IteratorNzToBytes(it); // re-import the non-zero context - - VP8InitResidual(0, 2, enc, &res); - for (ch = 0; ch <= 2; ch += 2) { - for (y = 0; y < 2; ++y) { - for (x = 0; x < 2; ++x) { - const int ctx = it->top_nz_[4 + ch + x] + it->left_nz_[4 + ch + y]; - VP8SetResidualCoeffs(rd->uv_levels[ch * 2 + x + y * 2], &res); - R += VP8GetResidualCost(ctx, &res); - it->top_nz_[4 + ch + x] = it->left_nz_[4 + ch + y] = (res.last >= 0); - } - } - } - return R; -} - - -//------------------------------------------------------------------------------ -// Recording of token probabilities. - -// We keep the table-free variant around for reference, in case. -#define USE_LEVEL_CODE_TABLE - -// Simulate block coding, but only record statistics. -// Note: no need to record the fixed probas. -int VP8RecordCoeffs(int ctx, const VP8Residual* const res) { - int n = res->first; - // should be stats[VP8EncBands[n]], but it's equivalent for n=0 or 1 - proba_t* s = res->stats[n][ctx]; - if (res->last < 0) { - VP8RecordStats(0, s + 0); - return 0; - } - while (n <= res->last) { - int v; - VP8RecordStats(1, s + 0); // order of record doesn't matter - while ((v = res->coeffs[n++]) == 0) { - VP8RecordStats(0, s + 1); - s = res->stats[VP8EncBands[n]][0]; - } - VP8RecordStats(1, s + 1); - if (!VP8RecordStats(2u < (unsigned int)(v + 1), s + 2)) { // v = -1 or 1 - s = res->stats[VP8EncBands[n]][1]; - } else { - v = abs(v); -#if !defined(USE_LEVEL_CODE_TABLE) - if (!VP8RecordStats(v > 4, s + 3)) { - if (VP8RecordStats(v != 2, s + 4)) - VP8RecordStats(v == 4, s + 5); - } else if (!VP8RecordStats(v > 10, s + 6)) { - VP8RecordStats(v > 6, s + 7); - } else if (!VP8RecordStats((v >= 3 + (8 << 2)), s + 8)) { - VP8RecordStats((v >= 3 + (8 << 1)), s + 9); - } else { - VP8RecordStats((v >= 3 + (8 << 3)), s + 10); - } -#else - if (v > MAX_VARIABLE_LEVEL) { - v = MAX_VARIABLE_LEVEL; - } - - { - const int bits = VP8LevelCodes[v - 1][1]; - int pattern = VP8LevelCodes[v - 1][0]; - int i; - for (i = 0; (pattern >>= 1) != 0; ++i) { - const int mask = 2 << i; - if (pattern & 1) VP8RecordStats(!!(bits & mask), s + 3 + i); - } - } -#endif - s = res->stats[VP8EncBands[n]][2]; - } - } - if (n < 16) VP8RecordStats(0, s + 0); - return 1; -} - -//------------------------------------------------------------------------------ diff --git a/Extended/libwebp/src/enc/cost_enc.h b/Extended/libwebp/src/enc/cost_enc.h deleted file mode 100644 index a4b177b..0000000 --- a/Extended/libwebp/src/enc/cost_enc.h +++ /dev/null @@ -1,82 +0,0 @@ -// Copyright 2011 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Cost tables for level and modes. -// -// Author: Skal (pascal.massimino@gmail.com) - -#ifndef WEBP_ENC_COST_ENC_H_ -#define WEBP_ENC_COST_ENC_H_ - -#include -#include -#include "src/enc/vp8i_enc.h" - -#ifdef __cplusplus -extern "C" { -#endif - -// On-the-fly info about the current set of residuals. Handy to avoid -// passing zillions of params. -typedef struct VP8Residual VP8Residual; -struct VP8Residual { - int first; - int last; - const int16_t* coeffs; - - int coeff_type; - ProbaArray* prob; - StatsArray* stats; - CostArrayPtr costs; -}; - -void VP8InitResidual(int first, int coeff_type, - VP8Encoder* const enc, VP8Residual* const res); - -int VP8RecordCoeffs(int ctx, const VP8Residual* const res); - -// Record proba context used. -static WEBP_INLINE int VP8RecordStats(int bit, proba_t* const stats) { - proba_t p = *stats; - // An overflow is inbound. Note we handle this at 0xfffe0000u instead of - // 0xffff0000u to make sure p + 1u does not overflow. - if (p >= 0xfffe0000u) { - p = ((p + 1u) >> 1) & 0x7fff7fffu; // -> divide the stats by 2. - } - // record bit count (lower 16 bits) and increment total count (upper 16 bits). - p += 0x00010000u + bit; - *stats = p; - return bit; -} - -// Cost of coding one event with probability 'proba'. -static WEBP_INLINE int VP8BitCost(int bit, uint8_t proba) { - return !bit ? VP8EntropyCost[proba] : VP8EntropyCost[255 - proba]; -} - -// Level cost calculations -extern const uint16_t VP8LevelCodes[MAX_VARIABLE_LEVEL][2]; -void VP8CalculateLevelCosts(VP8EncProba* const proba); -static WEBP_INLINE int VP8LevelCost(const uint16_t* const table, int level) { - return VP8LevelFixedCosts[level] - + table[(level > MAX_VARIABLE_LEVEL) ? MAX_VARIABLE_LEVEL : level]; -} - -// Mode costs -extern const uint16_t VP8FixedCostsUV[4]; -extern const uint16_t VP8FixedCostsI16[4]; -extern const uint16_t VP8FixedCostsI4[NUM_BMODES][NUM_BMODES][NUM_BMODES]; - -//------------------------------------------------------------------------------ - -#ifdef __cplusplus -} // extern "C" -#endif - -#endif // WEBP_ENC_COST_ENC_H_ diff --git a/Extended/libwebp/src/enc/filter_enc.c b/Extended/libwebp/src/enc/filter_enc.c deleted file mode 100644 index 580800b..0000000 --- a/Extended/libwebp/src/enc/filter_enc.c +++ /dev/null @@ -1,235 +0,0 @@ -// Copyright 2011 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Selecting filter level -// -// Author: somnath@google.com (Somnath Banerjee) - -#include -#include "src/enc/vp8i_enc.h" -#include "src/dsp/dsp.h" - -// This table gives, for a given sharpness, the filtering strength to be -// used (at least) in order to filter a given edge step delta. -// This is constructed by brute force inspection: for all delta, we iterate -// over all possible filtering strength / thresh until needs_filter() returns -// true. -#define MAX_DELTA_SIZE 64 -static const uint8_t kLevelsFromDelta[8][MAX_DELTA_SIZE] = { - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63 }, - { 0, 1, 2, 3, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 17, 18, - 20, 21, 23, 24, 26, 27, 29, 30, 32, 33, 35, 36, 38, 39, 41, 42, - 44, 45, 47, 48, 50, 51, 53, 54, 56, 57, 59, 60, 62, 63, 63, 63, - 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63 }, - { 0, 1, 2, 3, 5, 6, 7, 8, 9, 11, 12, 13, 14, 16, 17, 19, - 20, 22, 23, 25, 26, 28, 29, 31, 32, 34, 35, 37, 38, 40, 41, 43, - 44, 46, 47, 49, 50, 52, 53, 55, 56, 58, 59, 61, 62, 63, 63, 63, - 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63 }, - { 0, 1, 2, 3, 5, 6, 7, 8, 9, 11, 12, 13, 15, 16, 18, 19, - 21, 22, 24, 25, 27, 28, 30, 31, 33, 34, 36, 37, 39, 40, 42, 43, - 45, 46, 48, 49, 51, 52, 54, 55, 57, 58, 60, 61, 63, 63, 63, 63, - 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63 }, - { 0, 1, 2, 3, 5, 6, 7, 8, 9, 11, 12, 14, 15, 17, 18, 20, - 21, 23, 24, 26, 27, 29, 30, 32, 33, 35, 36, 38, 39, 41, 42, 44, - 45, 47, 48, 50, 51, 53, 54, 56, 57, 59, 60, 62, 63, 63, 63, 63, - 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63 }, - { 0, 1, 2, 4, 5, 7, 8, 9, 11, 12, 13, 15, 16, 17, 19, 20, - 22, 23, 25, 26, 28, 29, 31, 32, 34, 35, 37, 38, 40, 41, 43, 44, - 46, 47, 49, 50, 52, 53, 55, 56, 58, 59, 61, 62, 63, 63, 63, 63, - 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63 }, - { 0, 1, 2, 4, 5, 7, 8, 9, 11, 12, 13, 15, 16, 18, 19, 21, - 22, 24, 25, 27, 28, 30, 31, 33, 34, 36, 37, 39, 40, 42, 43, 45, - 46, 48, 49, 51, 52, 54, 55, 57, 58, 60, 61, 63, 63, 63, 63, 63, - 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63 }, - { 0, 1, 2, 4, 5, 7, 8, 9, 11, 12, 14, 15, 17, 18, 20, 21, - 23, 24, 26, 27, 29, 30, 32, 33, 35, 36, 38, 39, 41, 42, 44, 45, - 47, 48, 50, 51, 53, 54, 56, 57, 59, 60, 62, 63, 63, 63, 63, 63, - 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63 } -}; - -int VP8FilterStrengthFromDelta(int sharpness, int delta) { - const int pos = (delta < MAX_DELTA_SIZE) ? delta : MAX_DELTA_SIZE - 1; - assert(sharpness >= 0 && sharpness <= 7); - return kLevelsFromDelta[sharpness][pos]; -} - -//------------------------------------------------------------------------------ -// Paragraph 15.4: compute the inner-edge filtering strength - -#if !defined(WEBP_REDUCE_SIZE) - -static int GetILevel(int sharpness, int level) { - if (sharpness > 0) { - if (sharpness > 4) { - level >>= 2; - } else { - level >>= 1; - } - if (level > 9 - sharpness) { - level = 9 - sharpness; - } - } - if (level < 1) level = 1; - return level; -} - -static void DoFilter(const VP8EncIterator* const it, int level) { - const VP8Encoder* const enc = it->enc_; - const int ilevel = GetILevel(enc->config_->filter_sharpness, level); - const int limit = 2 * level + ilevel; - - uint8_t* const y_dst = it->yuv_out2_ + Y_OFF_ENC; - uint8_t* const u_dst = it->yuv_out2_ + U_OFF_ENC; - uint8_t* const v_dst = it->yuv_out2_ + V_OFF_ENC; - - // copy current block to yuv_out2_ - memcpy(y_dst, it->yuv_out_, YUV_SIZE_ENC * sizeof(uint8_t)); - - if (enc->filter_hdr_.simple_ == 1) { // simple - VP8SimpleHFilter16i(y_dst, BPS, limit); - VP8SimpleVFilter16i(y_dst, BPS, limit); - } else { // complex - const int hev_thresh = (level >= 40) ? 2 : (level >= 15) ? 1 : 0; - VP8HFilter16i(y_dst, BPS, limit, ilevel, hev_thresh); - VP8HFilter8i(u_dst, v_dst, BPS, limit, ilevel, hev_thresh); - VP8VFilter16i(y_dst, BPS, limit, ilevel, hev_thresh); - VP8VFilter8i(u_dst, v_dst, BPS, limit, ilevel, hev_thresh); - } -} - -//------------------------------------------------------------------------------ -// SSIM metric for one macroblock - -static double GetMBSSIM(const uint8_t* yuv1, const uint8_t* yuv2) { - int x, y; - double sum = 0.; - - // compute SSIM in a 10 x 10 window - for (y = VP8_SSIM_KERNEL; y < 16 - VP8_SSIM_KERNEL; y++) { - for (x = VP8_SSIM_KERNEL; x < 16 - VP8_SSIM_KERNEL; x++) { - sum += VP8SSIMGetClipped(yuv1 + Y_OFF_ENC, BPS, yuv2 + Y_OFF_ENC, BPS, - x, y, 16, 16); - } - } - for (x = 1; x < 7; x++) { - for (y = 1; y < 7; y++) { - sum += VP8SSIMGetClipped(yuv1 + U_OFF_ENC, BPS, yuv2 + U_OFF_ENC, BPS, - x, y, 8, 8); - sum += VP8SSIMGetClipped(yuv1 + V_OFF_ENC, BPS, yuv2 + V_OFF_ENC, BPS, - x, y, 8, 8); - } - } - return sum; -} - -#endif // !defined(WEBP_REDUCE_SIZE) - -//------------------------------------------------------------------------------ -// Exposed APIs: Encoder should call the following 3 functions to adjust -// loop filter strength - -void VP8InitFilter(VP8EncIterator* const it) { -#if !defined(WEBP_REDUCE_SIZE) - if (it->lf_stats_ != NULL) { - int s, i; - for (s = 0; s < NUM_MB_SEGMENTS; s++) { - for (i = 0; i < MAX_LF_LEVELS; i++) { - (*it->lf_stats_)[s][i] = 0; - } - } - VP8SSIMDspInit(); - } -#else - (void)it; -#endif -} - -void VP8StoreFilterStats(VP8EncIterator* const it) { -#if !defined(WEBP_REDUCE_SIZE) - int d; - VP8Encoder* const enc = it->enc_; - const int s = it->mb_->segment_; - const int level0 = enc->dqm_[s].fstrength_; - - // explore +/-quant range of values around level0 - const int delta_min = -enc->dqm_[s].quant_; - const int delta_max = enc->dqm_[s].quant_; - const int step_size = (delta_max - delta_min >= 4) ? 4 : 1; - - if (it->lf_stats_ == NULL) return; - - // NOTE: Currently we are applying filter only across the sublock edges - // There are two reasons for that. - // 1. Applying filter on macro block edges will change the pixels in - // the left and top macro blocks. That will be hard to restore - // 2. Macro Blocks on the bottom and right are not yet compressed. So we - // cannot apply filter on the right and bottom macro block edges. - if (it->mb_->type_ == 1 && it->mb_->skip_) return; - - // Always try filter level zero - (*it->lf_stats_)[s][0] += GetMBSSIM(it->yuv_in_, it->yuv_out_); - - for (d = delta_min; d <= delta_max; d += step_size) { - const int level = level0 + d; - if (level <= 0 || level >= MAX_LF_LEVELS) { - continue; - } - DoFilter(it, level); - (*it->lf_stats_)[s][level] += GetMBSSIM(it->yuv_in_, it->yuv_out2_); - } -#else // defined(WEBP_REDUCE_SIZE) - (void)it; -#endif // !defined(WEBP_REDUCE_SIZE) -} - -void VP8AdjustFilterStrength(VP8EncIterator* const it) { - VP8Encoder* const enc = it->enc_; -#if !defined(WEBP_REDUCE_SIZE) - if (it->lf_stats_ != NULL) { - int s; - for (s = 0; s < NUM_MB_SEGMENTS; s++) { - int i, best_level = 0; - // Improvement over filter level 0 should be at least 1e-5 (relatively) - double best_v = 1.00001 * (*it->lf_stats_)[s][0]; - for (i = 1; i < MAX_LF_LEVELS; i++) { - const double v = (*it->lf_stats_)[s][i]; - if (v > best_v) { - best_v = v; - best_level = i; - } - } - enc->dqm_[s].fstrength_ = best_level; - } - return; - } -#endif // !defined(WEBP_REDUCE_SIZE) - if (enc->config_->filter_strength > 0) { - int max_level = 0; - int s; - for (s = 0; s < NUM_MB_SEGMENTS; s++) { - VP8SegmentInfo* const dqm = &enc->dqm_[s]; - // this '>> 3' accounts for some inverse WHT scaling - const int delta = (dqm->max_edge_ * dqm->y2_.q_[1]) >> 3; - const int level = - VP8FilterStrengthFromDelta(enc->filter_hdr_.sharpness_, delta); - if (level > dqm->fstrength_) { - dqm->fstrength_ = level; - } - if (max_level < dqm->fstrength_) { - max_level = dqm->fstrength_; - } - } - enc->filter_hdr_.level_ = max_level; - } -} - -// ----------------------------------------------------------------------------- diff --git a/Extended/libwebp/src/enc/frame_enc.c b/Extended/libwebp/src/enc/frame_enc.c deleted file mode 100644 index 1aec376..0000000 --- a/Extended/libwebp/src/enc/frame_enc.c +++ /dev/null @@ -1,890 +0,0 @@ -// Copyright 2011 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// frame coding and analysis -// -// Author: Skal (pascal.massimino@gmail.com) - -#include -#include - -#include "src/enc/cost_enc.h" -#include "src/enc/vp8i_enc.h" -#include "src/dsp/dsp.h" -#include "src/webp/format_constants.h" // RIFF constants - -#define SEGMENT_VISU 0 -#define DEBUG_SEARCH 0 // useful to track search convergence - -//------------------------------------------------------------------------------ -// multi-pass convergence - -#define HEADER_SIZE_ESTIMATE (RIFF_HEADER_SIZE + CHUNK_HEADER_SIZE + \ - VP8_FRAME_HEADER_SIZE) -#define DQ_LIMIT 0.4 // convergence is considered reached if dq < DQ_LIMIT -// we allow 2k of extra head-room in PARTITION0 limit. -#define PARTITION0_SIZE_LIMIT ((VP8_MAX_PARTITION0_SIZE - 2048ULL) << 11) - -typedef struct { // struct for organizing convergence in either size or PSNR - int is_first; - float dq; - float q, last_q; - double value, last_value; // PSNR or size - double target; - int do_size_search; -} PassStats; - -static int InitPassStats(const VP8Encoder* const enc, PassStats* const s) { - const uint64_t target_size = (uint64_t)enc->config_->target_size; - const int do_size_search = (target_size != 0); - const float target_PSNR = enc->config_->target_PSNR; - - s->is_first = 1; - s->dq = 10.f; - s->q = s->last_q = enc->config_->quality; - s->target = do_size_search ? (double)target_size - : (target_PSNR > 0.) ? target_PSNR - : 40.; // default, just in case - s->value = s->last_value = 0.; - s->do_size_search = do_size_search; - return do_size_search; -} - -static float Clamp(float v, float min, float max) { - return (v < min) ? min : (v > max) ? max : v; -} - -static float ComputeNextQ(PassStats* const s) { - float dq; - if (s->is_first) { - dq = (s->value > s->target) ? -s->dq : s->dq; - s->is_first = 0; - } else if (s->value != s->last_value) { - const double slope = (s->target - s->value) / (s->last_value - s->value); - dq = (float)(slope * (s->last_q - s->q)); - } else { - dq = 0.; // we're done?! - } - // Limit variable to avoid large swings. - s->dq = Clamp(dq, -30.f, 30.f); - s->last_q = s->q; - s->last_value = s->value; - s->q = Clamp(s->q + s->dq, 0.f, 100.f); - return s->q; -} - -//------------------------------------------------------------------------------ -// Tables for level coding - -const uint8_t VP8Cat3[] = { 173, 148, 140 }; -const uint8_t VP8Cat4[] = { 176, 155, 140, 135 }; -const uint8_t VP8Cat5[] = { 180, 157, 141, 134, 130 }; -const uint8_t VP8Cat6[] = - { 254, 254, 243, 230, 196, 177, 153, 140, 133, 130, 129 }; - -//------------------------------------------------------------------------------ -// Reset the statistics about: number of skips, token proba, level cost,... - -static void ResetStats(VP8Encoder* const enc) { - VP8EncProba* const proba = &enc->proba_; - VP8CalculateLevelCosts(proba); - proba->nb_skip_ = 0; -} - -//------------------------------------------------------------------------------ -// Skip decision probability - -#define SKIP_PROBA_THRESHOLD 250 // value below which using skip_proba is OK. - -static int CalcSkipProba(uint64_t nb, uint64_t total) { - return (int)(total ? (total - nb) * 255 / total : 255); -} - -// Returns the bit-cost for coding the skip probability. -static int FinalizeSkipProba(VP8Encoder* const enc) { - VP8EncProba* const proba = &enc->proba_; - const int nb_mbs = enc->mb_w_ * enc->mb_h_; - const int nb_events = proba->nb_skip_; - int size; - proba->skip_proba_ = CalcSkipProba(nb_events, nb_mbs); - proba->use_skip_proba_ = (proba->skip_proba_ < SKIP_PROBA_THRESHOLD); - size = 256; // 'use_skip_proba' bit - if (proba->use_skip_proba_) { - size += nb_events * VP8BitCost(1, proba->skip_proba_) - + (nb_mbs - nb_events) * VP8BitCost(0, proba->skip_proba_); - size += 8 * 256; // cost of signaling the skip_proba_ itself. - } - return size; -} - -// Collect statistics and deduce probabilities for next coding pass. -// Return the total bit-cost for coding the probability updates. -static int CalcTokenProba(int nb, int total) { - assert(nb <= total); - return nb ? (255 - nb * 255 / total) : 255; -} - -// Cost of coding 'nb' 1's and 'total-nb' 0's using 'proba' probability. -static int BranchCost(int nb, int total, int proba) { - return nb * VP8BitCost(1, proba) + (total - nb) * VP8BitCost(0, proba); -} - -static void ResetTokenStats(VP8Encoder* const enc) { - VP8EncProba* const proba = &enc->proba_; - memset(proba->stats_, 0, sizeof(proba->stats_)); -} - -static int FinalizeTokenProbas(VP8EncProba* const proba) { - int has_changed = 0; - int size = 0; - int t, b, c, p; - for (t = 0; t < NUM_TYPES; ++t) { - for (b = 0; b < NUM_BANDS; ++b) { - for (c = 0; c < NUM_CTX; ++c) { - for (p = 0; p < NUM_PROBAS; ++p) { - const proba_t stats = proba->stats_[t][b][c][p]; - const int nb = (stats >> 0) & 0xffff; - const int total = (stats >> 16) & 0xffff; - const int update_proba = VP8CoeffsUpdateProba[t][b][c][p]; - const int old_p = VP8CoeffsProba0[t][b][c][p]; - const int new_p = CalcTokenProba(nb, total); - const int old_cost = BranchCost(nb, total, old_p) - + VP8BitCost(0, update_proba); - const int new_cost = BranchCost(nb, total, new_p) - + VP8BitCost(1, update_proba) - + 8 * 256; - const int use_new_p = (old_cost > new_cost); - size += VP8BitCost(use_new_p, update_proba); - if (use_new_p) { // only use proba that seem meaningful enough. - proba->coeffs_[t][b][c][p] = new_p; - has_changed |= (new_p != old_p); - size += 8 * 256; - } else { - proba->coeffs_[t][b][c][p] = old_p; - } - } - } - } - } - proba->dirty_ = has_changed; - return size; -} - -//------------------------------------------------------------------------------ -// Finalize Segment probability based on the coding tree - -static int GetProba(int a, int b) { - const int total = a + b; - return (total == 0) ? 255 // that's the default probability. - : (255 * a + total / 2) / total; // rounded proba -} - -static void ResetSegments(VP8Encoder* const enc) { - int n; - for (n = 0; n < enc->mb_w_ * enc->mb_h_; ++n) { - enc->mb_info_[n].segment_ = 0; - } -} - -static void SetSegmentProbas(VP8Encoder* const enc) { - int p[NUM_MB_SEGMENTS] = { 0 }; - int n; - - for (n = 0; n < enc->mb_w_ * enc->mb_h_; ++n) { - const VP8MBInfo* const mb = &enc->mb_info_[n]; - ++p[mb->segment_]; - } -#if !defined(WEBP_DISABLE_STATS) - if (enc->pic_->stats != NULL) { - for (n = 0; n < NUM_MB_SEGMENTS; ++n) { - enc->pic_->stats->segment_size[n] = p[n]; - } - } -#endif - if (enc->segment_hdr_.num_segments_ > 1) { - uint8_t* const probas = enc->proba_.segments_; - probas[0] = GetProba(p[0] + p[1], p[2] + p[3]); - probas[1] = GetProba(p[0], p[1]); - probas[2] = GetProba(p[2], p[3]); - - enc->segment_hdr_.update_map_ = - (probas[0] != 255) || (probas[1] != 255) || (probas[2] != 255); - if (!enc->segment_hdr_.update_map_) ResetSegments(enc); - enc->segment_hdr_.size_ = - p[0] * (VP8BitCost(0, probas[0]) + VP8BitCost(0, probas[1])) + - p[1] * (VP8BitCost(0, probas[0]) + VP8BitCost(1, probas[1])) + - p[2] * (VP8BitCost(1, probas[0]) + VP8BitCost(0, probas[2])) + - p[3] * (VP8BitCost(1, probas[0]) + VP8BitCost(1, probas[2])); - } else { - enc->segment_hdr_.update_map_ = 0; - enc->segment_hdr_.size_ = 0; - } -} - -//------------------------------------------------------------------------------ -// Coefficient coding - -static int PutCoeffs(VP8BitWriter* const bw, int ctx, const VP8Residual* res) { - int n = res->first; - // should be prob[VP8EncBands[n]], but it's equivalent for n=0 or 1 - const uint8_t* p = res->prob[n][ctx]; - if (!VP8PutBit(bw, res->last >= 0, p[0])) { - return 0; - } - - while (n < 16) { - const int c = res->coeffs[n++]; - const int sign = c < 0; - int v = sign ? -c : c; - if (!VP8PutBit(bw, v != 0, p[1])) { - p = res->prob[VP8EncBands[n]][0]; - continue; - } - if (!VP8PutBit(bw, v > 1, p[2])) { - p = res->prob[VP8EncBands[n]][1]; - } else { - if (!VP8PutBit(bw, v > 4, p[3])) { - if (VP8PutBit(bw, v != 2, p[4])) { - VP8PutBit(bw, v == 4, p[5]); - } - } else if (!VP8PutBit(bw, v > 10, p[6])) { - if (!VP8PutBit(bw, v > 6, p[7])) { - VP8PutBit(bw, v == 6, 159); - } else { - VP8PutBit(bw, v >= 9, 165); - VP8PutBit(bw, !(v & 1), 145); - } - } else { - int mask; - const uint8_t* tab; - if (v < 3 + (8 << 1)) { // VP8Cat3 (3b) - VP8PutBit(bw, 0, p[8]); - VP8PutBit(bw, 0, p[9]); - v -= 3 + (8 << 0); - mask = 1 << 2; - tab = VP8Cat3; - } else if (v < 3 + (8 << 2)) { // VP8Cat4 (4b) - VP8PutBit(bw, 0, p[8]); - VP8PutBit(bw, 1, p[9]); - v -= 3 + (8 << 1); - mask = 1 << 3; - tab = VP8Cat4; - } else if (v < 3 + (8 << 3)) { // VP8Cat5 (5b) - VP8PutBit(bw, 1, p[8]); - VP8PutBit(bw, 0, p[10]); - v -= 3 + (8 << 2); - mask = 1 << 4; - tab = VP8Cat5; - } else { // VP8Cat6 (11b) - VP8PutBit(bw, 1, p[8]); - VP8PutBit(bw, 1, p[10]); - v -= 3 + (8 << 3); - mask = 1 << 10; - tab = VP8Cat6; - } - while (mask) { - VP8PutBit(bw, !!(v & mask), *tab++); - mask >>= 1; - } - } - p = res->prob[VP8EncBands[n]][2]; - } - VP8PutBitUniform(bw, sign); - if (n == 16 || !VP8PutBit(bw, n <= res->last, p[0])) { - return 1; // EOB - } - } - return 1; -} - -static void CodeResiduals(VP8BitWriter* const bw, VP8EncIterator* const it, - const VP8ModeScore* const rd) { - int x, y, ch; - VP8Residual res; - uint64_t pos1, pos2, pos3; - const int i16 = (it->mb_->type_ == 1); - const int segment = it->mb_->segment_; - VP8Encoder* const enc = it->enc_; - - VP8IteratorNzToBytes(it); - - pos1 = VP8BitWriterPos(bw); - if (i16) { - VP8InitResidual(0, 1, enc, &res); - VP8SetResidualCoeffs(rd->y_dc_levels, &res); - it->top_nz_[8] = it->left_nz_[8] = - PutCoeffs(bw, it->top_nz_[8] + it->left_nz_[8], &res); - VP8InitResidual(1, 0, enc, &res); - } else { - VP8InitResidual(0, 3, enc, &res); - } - - // luma-AC - for (y = 0; y < 4; ++y) { - for (x = 0; x < 4; ++x) { - const int ctx = it->top_nz_[x] + it->left_nz_[y]; - VP8SetResidualCoeffs(rd->y_ac_levels[x + y * 4], &res); - it->top_nz_[x] = it->left_nz_[y] = PutCoeffs(bw, ctx, &res); - } - } - pos2 = VP8BitWriterPos(bw); - - // U/V - VP8InitResidual(0, 2, enc, &res); - for (ch = 0; ch <= 2; ch += 2) { - for (y = 0; y < 2; ++y) { - for (x = 0; x < 2; ++x) { - const int ctx = it->top_nz_[4 + ch + x] + it->left_nz_[4 + ch + y]; - VP8SetResidualCoeffs(rd->uv_levels[ch * 2 + x + y * 2], &res); - it->top_nz_[4 + ch + x] = it->left_nz_[4 + ch + y] = - PutCoeffs(bw, ctx, &res); - } - } - } - pos3 = VP8BitWriterPos(bw); - it->luma_bits_ = pos2 - pos1; - it->uv_bits_ = pos3 - pos2; - it->bit_count_[segment][i16] += it->luma_bits_; - it->bit_count_[segment][2] += it->uv_bits_; - VP8IteratorBytesToNz(it); -} - -// Same as CodeResiduals, but doesn't actually write anything. -// Instead, it just records the event distribution. -static void RecordResiduals(VP8EncIterator* const it, - const VP8ModeScore* const rd) { - int x, y, ch; - VP8Residual res; - VP8Encoder* const enc = it->enc_; - - VP8IteratorNzToBytes(it); - - if (it->mb_->type_ == 1) { // i16x16 - VP8InitResidual(0, 1, enc, &res); - VP8SetResidualCoeffs(rd->y_dc_levels, &res); - it->top_nz_[8] = it->left_nz_[8] = - VP8RecordCoeffs(it->top_nz_[8] + it->left_nz_[8], &res); - VP8InitResidual(1, 0, enc, &res); - } else { - VP8InitResidual(0, 3, enc, &res); - } - - // luma-AC - for (y = 0; y < 4; ++y) { - for (x = 0; x < 4; ++x) { - const int ctx = it->top_nz_[x] + it->left_nz_[y]; - VP8SetResidualCoeffs(rd->y_ac_levels[x + y * 4], &res); - it->top_nz_[x] = it->left_nz_[y] = VP8RecordCoeffs(ctx, &res); - } - } - - // U/V - VP8InitResidual(0, 2, enc, &res); - for (ch = 0; ch <= 2; ch += 2) { - for (y = 0; y < 2; ++y) { - for (x = 0; x < 2; ++x) { - const int ctx = it->top_nz_[4 + ch + x] + it->left_nz_[4 + ch + y]; - VP8SetResidualCoeffs(rd->uv_levels[ch * 2 + x + y * 2], &res); - it->top_nz_[4 + ch + x] = it->left_nz_[4 + ch + y] = - VP8RecordCoeffs(ctx, &res); - } - } - } - - VP8IteratorBytesToNz(it); -} - -//------------------------------------------------------------------------------ -// Token buffer - -#if !defined(DISABLE_TOKEN_BUFFER) - -static int RecordTokens(VP8EncIterator* const it, const VP8ModeScore* const rd, - VP8TBuffer* const tokens) { - int x, y, ch; - VP8Residual res; - VP8Encoder* const enc = it->enc_; - - VP8IteratorNzToBytes(it); - if (it->mb_->type_ == 1) { // i16x16 - const int ctx = it->top_nz_[8] + it->left_nz_[8]; - VP8InitResidual(0, 1, enc, &res); - VP8SetResidualCoeffs(rd->y_dc_levels, &res); - it->top_nz_[8] = it->left_nz_[8] = - VP8RecordCoeffTokens(ctx, &res, tokens); - VP8InitResidual(1, 0, enc, &res); - } else { - VP8InitResidual(0, 3, enc, &res); - } - - // luma-AC - for (y = 0; y < 4; ++y) { - for (x = 0; x < 4; ++x) { - const int ctx = it->top_nz_[x] + it->left_nz_[y]; - VP8SetResidualCoeffs(rd->y_ac_levels[x + y * 4], &res); - it->top_nz_[x] = it->left_nz_[y] = - VP8RecordCoeffTokens(ctx, &res, tokens); - } - } - - // U/V - VP8InitResidual(0, 2, enc, &res); - for (ch = 0; ch <= 2; ch += 2) { - for (y = 0; y < 2; ++y) { - for (x = 0; x < 2; ++x) { - const int ctx = it->top_nz_[4 + ch + x] + it->left_nz_[4 + ch + y]; - VP8SetResidualCoeffs(rd->uv_levels[ch * 2 + x + y * 2], &res); - it->top_nz_[4 + ch + x] = it->left_nz_[4 + ch + y] = - VP8RecordCoeffTokens(ctx, &res, tokens); - } - } - } - VP8IteratorBytesToNz(it); - return !tokens->error_; -} - -#endif // !DISABLE_TOKEN_BUFFER - -//------------------------------------------------------------------------------ -// ExtraInfo map / Debug function - -#if !defined(WEBP_DISABLE_STATS) - -#if SEGMENT_VISU -static void SetBlock(uint8_t* p, int value, int size) { - int y; - for (y = 0; y < size; ++y) { - memset(p, value, size); - p += BPS; - } -} -#endif - -static void ResetSSE(VP8Encoder* const enc) { - enc->sse_[0] = 0; - enc->sse_[1] = 0; - enc->sse_[2] = 0; - // Note: enc->sse_[3] is managed by alpha.c - enc->sse_count_ = 0; -} - -static void StoreSSE(const VP8EncIterator* const it) { - VP8Encoder* const enc = it->enc_; - const uint8_t* const in = it->yuv_in_; - const uint8_t* const out = it->yuv_out_; - // Note: not totally accurate at boundary. And doesn't include in-loop filter. - enc->sse_[0] += VP8SSE16x16(in + Y_OFF_ENC, out + Y_OFF_ENC); - enc->sse_[1] += VP8SSE8x8(in + U_OFF_ENC, out + U_OFF_ENC); - enc->sse_[2] += VP8SSE8x8(in + V_OFF_ENC, out + V_OFF_ENC); - enc->sse_count_ += 16 * 16; -} - -static void StoreSideInfo(const VP8EncIterator* const it) { - VP8Encoder* const enc = it->enc_; - const VP8MBInfo* const mb = it->mb_; - WebPPicture* const pic = enc->pic_; - - if (pic->stats != NULL) { - StoreSSE(it); - enc->block_count_[0] += (mb->type_ == 0); - enc->block_count_[1] += (mb->type_ == 1); - enc->block_count_[2] += (mb->skip_ != 0); - } - - if (pic->extra_info != NULL) { - uint8_t* const info = &pic->extra_info[it->x_ + it->y_ * enc->mb_w_]; - switch (pic->extra_info_type) { - case 1: *info = mb->type_; break; - case 2: *info = mb->segment_; break; - case 3: *info = enc->dqm_[mb->segment_].quant_; break; - case 4: *info = (mb->type_ == 1) ? it->preds_[0] : 0xff; break; - case 5: *info = mb->uv_mode_; break; - case 6: { - const int b = (int)((it->luma_bits_ + it->uv_bits_ + 7) >> 3); - *info = (b > 255) ? 255 : b; break; - } - case 7: *info = mb->alpha_; break; - default: *info = 0; break; - } - } -#if SEGMENT_VISU // visualize segments and prediction modes - SetBlock(it->yuv_out_ + Y_OFF_ENC, mb->segment_ * 64, 16); - SetBlock(it->yuv_out_ + U_OFF_ENC, it->preds_[0] * 64, 8); - SetBlock(it->yuv_out_ + V_OFF_ENC, mb->uv_mode_ * 64, 8); -#endif -} - -static void ResetSideInfo(const VP8EncIterator* const it) { - VP8Encoder* const enc = it->enc_; - WebPPicture* const pic = enc->pic_; - if (pic->stats != NULL) { - memset(enc->block_count_, 0, sizeof(enc->block_count_)); - } - ResetSSE(enc); -} -#else // defined(WEBP_DISABLE_STATS) -static void ResetSSE(VP8Encoder* const enc) { - (void)enc; -} -static void StoreSideInfo(const VP8EncIterator* const it) { - VP8Encoder* const enc = it->enc_; - WebPPicture* const pic = enc->pic_; - if (pic->extra_info != NULL) { - if (it->x_ == 0 && it->y_ == 0) { // only do it once, at start - memset(pic->extra_info, 0, - enc->mb_w_ * enc->mb_h_ * sizeof(*pic->extra_info)); - } - } -} - -static void ResetSideInfo(const VP8EncIterator* const it) { - (void)it; -} -#endif // !defined(WEBP_DISABLE_STATS) - -static double GetPSNR(uint64_t mse, uint64_t size) { - return (mse > 0 && size > 0) ? 10. * log10(255. * 255. * size / mse) : 99; -} - -//------------------------------------------------------------------------------ -// StatLoop(): only collect statistics (number of skips, token usage, ...). -// This is used for deciding optimal probabilities. It also modifies the -// quantizer value if some target (size, PSNR) was specified. - -static void SetLoopParams(VP8Encoder* const enc, float q) { - // Make sure the quality parameter is inside valid bounds - q = Clamp(q, 0.f, 100.f); - - VP8SetSegmentParams(enc, q); // setup segment quantizations and filters - SetSegmentProbas(enc); // compute segment probabilities - - ResetStats(enc); - ResetSSE(enc); -} - -static uint64_t OneStatPass(VP8Encoder* const enc, VP8RDLevel rd_opt, - int nb_mbs, int percent_delta, - PassStats* const s) { - VP8EncIterator it; - uint64_t size = 0; - uint64_t size_p0 = 0; - uint64_t distortion = 0; - const uint64_t pixel_count = nb_mbs * 384; - - VP8IteratorInit(enc, &it); - SetLoopParams(enc, s->q); - do { - VP8ModeScore info; - VP8IteratorImport(&it, NULL); - if (VP8Decimate(&it, &info, rd_opt)) { - // Just record the number of skips and act like skip_proba is not used. - ++enc->proba_.nb_skip_; - } - RecordResiduals(&it, &info); - size += info.R + info.H; - size_p0 += info.H; - distortion += info.D; - if (percent_delta && !VP8IteratorProgress(&it, percent_delta)) { - return 0; - } - VP8IteratorSaveBoundary(&it); - } while (VP8IteratorNext(&it) && --nb_mbs > 0); - - size_p0 += enc->segment_hdr_.size_; - if (s->do_size_search) { - size += FinalizeSkipProba(enc); - size += FinalizeTokenProbas(&enc->proba_); - size = ((size + size_p0 + 1024) >> 11) + HEADER_SIZE_ESTIMATE; - s->value = (double)size; - } else { - s->value = GetPSNR(distortion, pixel_count); - } - return size_p0; -} - -static int StatLoop(VP8Encoder* const enc) { - const int method = enc->method_; - const int do_search = enc->do_search_; - const int fast_probe = ((method == 0 || method == 3) && !do_search); - int num_pass_left = enc->config_->pass; - const int task_percent = 20; - const int percent_per_pass = - (task_percent + num_pass_left / 2) / num_pass_left; - const int final_percent = enc->percent_ + task_percent; - const VP8RDLevel rd_opt = - (method >= 3 || do_search) ? RD_OPT_BASIC : RD_OPT_NONE; - int nb_mbs = enc->mb_w_ * enc->mb_h_; - PassStats stats; - - InitPassStats(enc, &stats); - ResetTokenStats(enc); - - // Fast mode: quick analysis pass over few mbs. Better than nothing. - if (fast_probe) { - if (method == 3) { // we need more stats for method 3 to be reliable. - nb_mbs = (nb_mbs > 200) ? nb_mbs >> 1 : 100; - } else { - nb_mbs = (nb_mbs > 200) ? nb_mbs >> 2 : 50; - } - } - - while (num_pass_left-- > 0) { - const int is_last_pass = (fabs(stats.dq) <= DQ_LIMIT) || - (num_pass_left == 0) || - (enc->max_i4_header_bits_ == 0); - const uint64_t size_p0 = - OneStatPass(enc, rd_opt, nb_mbs, percent_per_pass, &stats); - if (size_p0 == 0) return 0; -#if (DEBUG_SEARCH > 0) - printf("#%d value:%.1lf -> %.1lf q:%.2f -> %.2f\n", - num_pass_left, stats.last_value, stats.value, stats.last_q, stats.q); -#endif - if (enc->max_i4_header_bits_ > 0 && size_p0 > PARTITION0_SIZE_LIMIT) { - ++num_pass_left; - enc->max_i4_header_bits_ >>= 1; // strengthen header bit limitation... - continue; // ...and start over - } - if (is_last_pass) { - break; - } - // If no target size: just do several pass without changing 'q' - if (do_search) { - ComputeNextQ(&stats); - if (fabs(stats.dq) <= DQ_LIMIT) break; - } - } - if (!do_search || !stats.do_size_search) { - // Need to finalize probas now, since it wasn't done during the search. - FinalizeSkipProba(enc); - FinalizeTokenProbas(&enc->proba_); - } - VP8CalculateLevelCosts(&enc->proba_); // finalize costs - return WebPReportProgress(enc->pic_, final_percent, &enc->percent_); -} - -//------------------------------------------------------------------------------ -// Main loops -// - -static const uint8_t kAverageBytesPerMB[8] = { 50, 24, 16, 9, 7, 5, 3, 2 }; - -static int PreLoopInitialize(VP8Encoder* const enc) { - int p; - int ok = 1; - const int average_bytes_per_MB = kAverageBytesPerMB[enc->base_quant_ >> 4]; - const int bytes_per_parts = - enc->mb_w_ * enc->mb_h_ * average_bytes_per_MB / enc->num_parts_; - // Initialize the bit-writers - for (p = 0; ok && p < enc->num_parts_; ++p) { - ok = VP8BitWriterInit(enc->parts_ + p, bytes_per_parts); - } - if (!ok) { - VP8EncFreeBitWriters(enc); // malloc error occurred - WebPEncodingSetError(enc->pic_, VP8_ENC_ERROR_OUT_OF_MEMORY); - } - return ok; -} - -static int PostLoopFinalize(VP8EncIterator* const it, int ok) { - VP8Encoder* const enc = it->enc_; - if (ok) { // Finalize the partitions, check for extra errors. - int p; - for (p = 0; p < enc->num_parts_; ++p) { - VP8BitWriterFinish(enc->parts_ + p); - ok &= !enc->parts_[p].error_; - } - } - - if (ok) { // All good. Finish up. -#if !defined(WEBP_DISABLE_STATS) - if (enc->pic_->stats != NULL) { // finalize byte counters... - int i, s; - for (i = 0; i <= 2; ++i) { - for (s = 0; s < NUM_MB_SEGMENTS; ++s) { - enc->residual_bytes_[i][s] = (int)((it->bit_count_[s][i] + 7) >> 3); - } - } - } -#endif - VP8AdjustFilterStrength(it); // ...and store filter stats. - } else { - // Something bad happened -> need to do some memory cleanup. - VP8EncFreeBitWriters(enc); - } - return ok; -} - -//------------------------------------------------------------------------------ -// VP8EncLoop(): does the final bitstream coding. - -static void ResetAfterSkip(VP8EncIterator* const it) { - if (it->mb_->type_ == 1) { - *it->nz_ = 0; // reset all predictors - it->left_nz_[8] = 0; - } else { - *it->nz_ &= (1 << 24); // preserve the dc_nz bit - } -} - -int VP8EncLoop(VP8Encoder* const enc) { - VP8EncIterator it; - int ok = PreLoopInitialize(enc); - if (!ok) return 0; - - StatLoop(enc); // stats-collection loop - - VP8IteratorInit(enc, &it); - VP8InitFilter(&it); - do { - VP8ModeScore info; - const int dont_use_skip = !enc->proba_.use_skip_proba_; - const VP8RDLevel rd_opt = enc->rd_opt_level_; - - VP8IteratorImport(&it, NULL); - // Warning! order is important: first call VP8Decimate() and - // *then* decide how to code the skip decision if there's one. - if (!VP8Decimate(&it, &info, rd_opt) || dont_use_skip) { - CodeResiduals(it.bw_, &it, &info); - } else { // reset predictors after a skip - ResetAfterSkip(&it); - } - StoreSideInfo(&it); - VP8StoreFilterStats(&it); - VP8IteratorExport(&it); - ok = VP8IteratorProgress(&it, 20); - VP8IteratorSaveBoundary(&it); - } while (ok && VP8IteratorNext(&it)); - - return PostLoopFinalize(&it, ok); -} - -//------------------------------------------------------------------------------ -// Single pass using Token Buffer. - -#if !defined(DISABLE_TOKEN_BUFFER) - -#define MIN_COUNT 96 // minimum number of macroblocks before updating stats - -int VP8EncTokenLoop(VP8Encoder* const enc) { - // Roughly refresh the proba eight times per pass - int max_count = (enc->mb_w_ * enc->mb_h_) >> 3; - int num_pass_left = enc->config_->pass; - const int do_search = enc->do_search_; - VP8EncIterator it; - VP8EncProba* const proba = &enc->proba_; - const VP8RDLevel rd_opt = enc->rd_opt_level_; - const uint64_t pixel_count = enc->mb_w_ * enc->mb_h_ * 384; - PassStats stats; - int ok; - - InitPassStats(enc, &stats); - ok = PreLoopInitialize(enc); - if (!ok) return 0; - - if (max_count < MIN_COUNT) max_count = MIN_COUNT; - - assert(enc->num_parts_ == 1); - assert(enc->use_tokens_); - assert(proba->use_skip_proba_ == 0); - assert(rd_opt >= RD_OPT_BASIC); // otherwise, token-buffer won't be useful - assert(num_pass_left > 0); - - while (ok && num_pass_left-- > 0) { - const int is_last_pass = (fabs(stats.dq) <= DQ_LIMIT) || - (num_pass_left == 0) || - (enc->max_i4_header_bits_ == 0); - uint64_t size_p0 = 0; - uint64_t distortion = 0; - int cnt = max_count; - VP8IteratorInit(enc, &it); - SetLoopParams(enc, stats.q); - if (is_last_pass) { - ResetTokenStats(enc); - VP8InitFilter(&it); // don't collect stats until last pass (too costly) - } - VP8TBufferClear(&enc->tokens_); - do { - VP8ModeScore info; - VP8IteratorImport(&it, NULL); - if (--cnt < 0) { - FinalizeTokenProbas(proba); - VP8CalculateLevelCosts(proba); // refresh cost tables for rd-opt - cnt = max_count; - } - VP8Decimate(&it, &info, rd_opt); - ok = RecordTokens(&it, &info, &enc->tokens_); - if (!ok) { - WebPEncodingSetError(enc->pic_, VP8_ENC_ERROR_OUT_OF_MEMORY); - break; - } - size_p0 += info.H; - distortion += info.D; - if (is_last_pass) { - StoreSideInfo(&it); - VP8StoreFilterStats(&it); - VP8IteratorExport(&it); - ok = VP8IteratorProgress(&it, 20); - } - VP8IteratorSaveBoundary(&it); - } while (ok && VP8IteratorNext(&it)); - if (!ok) break; - - size_p0 += enc->segment_hdr_.size_; - if (stats.do_size_search) { - uint64_t size = FinalizeTokenProbas(&enc->proba_); - size += VP8EstimateTokenSize(&enc->tokens_, - (const uint8_t*)proba->coeffs_); - size = (size + size_p0 + 1024) >> 11; // -> size in bytes - size += HEADER_SIZE_ESTIMATE; - stats.value = (double)size; - } else { // compute and store PSNR - stats.value = GetPSNR(distortion, pixel_count); - } - -#if (DEBUG_SEARCH > 0) - printf("#%2d metric:%.1lf -> %.1lf last_q=%.2lf q=%.2lf dq=%.2lf\n", - num_pass_left, stats.last_value, stats.value, - stats.last_q, stats.q, stats.dq); -#endif - if (enc->max_i4_header_bits_ > 0 && size_p0 > PARTITION0_SIZE_LIMIT) { - ++num_pass_left; - enc->max_i4_header_bits_ >>= 1; // strengthen header bit limitation... - if (is_last_pass) { - ResetSideInfo(&it); - } - continue; // ...and start over - } - if (is_last_pass) { - break; // done - } - if (do_search) { - ComputeNextQ(&stats); // Adjust q - } - } - if (ok) { - if (!stats.do_size_search) { - FinalizeTokenProbas(&enc->proba_); - } - ok = VP8EmitTokens(&enc->tokens_, enc->parts_ + 0, - (const uint8_t*)proba->coeffs_, 1); - } - ok = ok && WebPReportProgress(enc->pic_, enc->percent_ + 20, &enc->percent_); - return PostLoopFinalize(&it, ok); -} - -#else - -int VP8EncTokenLoop(VP8Encoder* const enc) { - (void)enc; - return 0; // we shouldn't be here. -} - -#endif // DISABLE_TOKEN_BUFFER - -//------------------------------------------------------------------------------ diff --git a/Extended/libwebp/src/enc/histogram_enc.c b/Extended/libwebp/src/enc/histogram_enc.c deleted file mode 100644 index a4e6bf3..0000000 --- a/Extended/libwebp/src/enc/histogram_enc.c +++ /dev/null @@ -1,1249 +0,0 @@ -// Copyright 2012 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Author: Jyrki Alakuijala (jyrki@google.com) -// -#ifdef HAVE_CONFIG_H -#include "src/webp/config.h" -#endif - -#include - -#include "src/enc/backward_references_enc.h" -#include "src/enc/histogram_enc.h" -#include "src/dsp/lossless.h" -#include "src/dsp/lossless_common.h" -#include "src/utils/utils.h" - -#define MAX_COST 1.e38 - -// Number of partitions for the three dominant (literal, red and blue) symbol -// costs. -#define NUM_PARTITIONS 4 -// The size of the bin-hash corresponding to the three dominant costs. -#define BIN_SIZE (NUM_PARTITIONS * NUM_PARTITIONS * NUM_PARTITIONS) -// Maximum number of histograms allowed in greedy combining algorithm. -#define MAX_HISTO_GREEDY 100 - -static void HistogramClear(VP8LHistogram* const p) { - uint32_t* const literal = p->literal_; - const int cache_bits = p->palette_code_bits_; - const int histo_size = VP8LGetHistogramSize(cache_bits); - memset(p, 0, histo_size); - p->palette_code_bits_ = cache_bits; - p->literal_ = literal; -} - -// Swap two histogram pointers. -static void HistogramSwap(VP8LHistogram** const A, VP8LHistogram** const B) { - VP8LHistogram* const tmp = *A; - *A = *B; - *B = tmp; -} - -static void HistogramCopy(const VP8LHistogram* const src, - VP8LHistogram* const dst) { - uint32_t* const dst_literal = dst->literal_; - const int dst_cache_bits = dst->palette_code_bits_; - const int literal_size = VP8LHistogramNumCodes(dst_cache_bits); - const int histo_size = VP8LGetHistogramSize(dst_cache_bits); - assert(src->palette_code_bits_ == dst_cache_bits); - memcpy(dst, src, histo_size); - dst->literal_ = dst_literal; - memcpy(dst->literal_, src->literal_, literal_size * sizeof(*dst->literal_)); -} - -int VP8LGetHistogramSize(int cache_bits) { - const int literal_size = VP8LHistogramNumCodes(cache_bits); - const size_t total_size = sizeof(VP8LHistogram) + sizeof(int) * literal_size; - assert(total_size <= (size_t)0x7fffffff); - return (int)total_size; -} - -void VP8LFreeHistogram(VP8LHistogram* const histo) { - WebPSafeFree(histo); -} - -void VP8LFreeHistogramSet(VP8LHistogramSet* const histo) { - WebPSafeFree(histo); -} - -void VP8LHistogramStoreRefs(const VP8LBackwardRefs* const refs, - VP8LHistogram* const histo) { - VP8LRefsCursor c = VP8LRefsCursorInit(refs); - while (VP8LRefsCursorOk(&c)) { - VP8LHistogramAddSinglePixOrCopy(histo, c.cur_pos, NULL, 0); - VP8LRefsCursorNext(&c); - } -} - -void VP8LHistogramCreate(VP8LHistogram* const p, - const VP8LBackwardRefs* const refs, - int palette_code_bits) { - if (palette_code_bits >= 0) { - p->palette_code_bits_ = palette_code_bits; - } - HistogramClear(p); - VP8LHistogramStoreRefs(refs, p); -} - -void VP8LHistogramInit(VP8LHistogram* const p, int palette_code_bits, - int init_arrays) { - p->palette_code_bits_ = palette_code_bits; - if (init_arrays) { - HistogramClear(p); - } else { - p->trivial_symbol_ = 0; - p->bit_cost_ = 0.; - p->literal_cost_ = 0.; - p->red_cost_ = 0.; - p->blue_cost_ = 0.; - memset(p->is_used_, 0, sizeof(p->is_used_)); - } -} - -VP8LHistogram* VP8LAllocateHistogram(int cache_bits) { - VP8LHistogram* histo = NULL; - const int total_size = VP8LGetHistogramSize(cache_bits); - uint8_t* const memory = (uint8_t*)WebPSafeMalloc(total_size, sizeof(*memory)); - if (memory == NULL) return NULL; - histo = (VP8LHistogram*)memory; - // literal_ won't necessary be aligned. - histo->literal_ = (uint32_t*)(memory + sizeof(VP8LHistogram)); - VP8LHistogramInit(histo, cache_bits, /*init_arrays=*/ 0); - return histo; -} - -// Resets the pointers of the histograms to point to the bit buffer in the set. -static void HistogramSetResetPointers(VP8LHistogramSet* const set, - int cache_bits) { - int i; - const int histo_size = VP8LGetHistogramSize(cache_bits); - uint8_t* memory = (uint8_t*) (set->histograms); - memory += set->max_size * sizeof(*set->histograms); - for (i = 0; i < set->max_size; ++i) { - memory = (uint8_t*) WEBP_ALIGN(memory); - set->histograms[i] = (VP8LHistogram*) memory; - // literal_ won't necessary be aligned. - set->histograms[i]->literal_ = (uint32_t*)(memory + sizeof(VP8LHistogram)); - memory += histo_size; - } -} - -// Returns the total size of the VP8LHistogramSet. -static size_t HistogramSetTotalSize(int size, int cache_bits) { - const int histo_size = VP8LGetHistogramSize(cache_bits); - return (sizeof(VP8LHistogramSet) + size * (sizeof(VP8LHistogram*) + - histo_size + WEBP_ALIGN_CST)); -} - -VP8LHistogramSet* VP8LAllocateHistogramSet(int size, int cache_bits) { - int i; - VP8LHistogramSet* set; - const size_t total_size = HistogramSetTotalSize(size, cache_bits); - uint8_t* memory = (uint8_t*)WebPSafeMalloc(total_size, sizeof(*memory)); - if (memory == NULL) return NULL; - - set = (VP8LHistogramSet*)memory; - memory += sizeof(*set); - set->histograms = (VP8LHistogram**)memory; - set->max_size = size; - set->size = size; - HistogramSetResetPointers(set, cache_bits); - for (i = 0; i < size; ++i) { - VP8LHistogramInit(set->histograms[i], cache_bits, /*init_arrays=*/ 0); - } - return set; -} - -void VP8LHistogramSetClear(VP8LHistogramSet* const set) { - int i; - const int cache_bits = set->histograms[0]->palette_code_bits_; - const int size = set->max_size; - const size_t total_size = HistogramSetTotalSize(size, cache_bits); - uint8_t* memory = (uint8_t*)set; - - memset(memory, 0, total_size); - memory += sizeof(*set); - set->histograms = (VP8LHistogram**)memory; - set->max_size = size; - set->size = size; - HistogramSetResetPointers(set, cache_bits); - for (i = 0; i < size; ++i) { - set->histograms[i]->palette_code_bits_ = cache_bits; - } -} - -// Removes the histogram 'i' from 'set' by setting it to NULL. -static void HistogramSetRemoveHistogram(VP8LHistogramSet* const set, int i, - int* const num_used) { - assert(set->histograms[i] != NULL); - set->histograms[i] = NULL; - --*num_used; - // If we remove the last valid one, shrink until the next valid one. - if (i == set->size - 1) { - while (set->size >= 1 && set->histograms[set->size - 1] == NULL) { - --set->size; - } - } -} - -// ----------------------------------------------------------------------------- - -void VP8LHistogramAddSinglePixOrCopy(VP8LHistogram* const histo, - const PixOrCopy* const v, - int (*const distance_modifier)(int, int), - int distance_modifier_arg0) { - if (PixOrCopyIsLiteral(v)) { - ++histo->alpha_[PixOrCopyLiteral(v, 3)]; - ++histo->red_[PixOrCopyLiteral(v, 2)]; - ++histo->literal_[PixOrCopyLiteral(v, 1)]; - ++histo->blue_[PixOrCopyLiteral(v, 0)]; - } else if (PixOrCopyIsCacheIdx(v)) { - const int literal_ix = - NUM_LITERAL_CODES + NUM_LENGTH_CODES + PixOrCopyCacheIdx(v); - ++histo->literal_[literal_ix]; - } else { - int code, extra_bits; - VP8LPrefixEncodeBits(PixOrCopyLength(v), &code, &extra_bits); - ++histo->literal_[NUM_LITERAL_CODES + code]; - if (distance_modifier == NULL) { - VP8LPrefixEncodeBits(PixOrCopyDistance(v), &code, &extra_bits); - } else { - VP8LPrefixEncodeBits( - distance_modifier(distance_modifier_arg0, PixOrCopyDistance(v)), - &code, &extra_bits); - } - ++histo->distance_[code]; - } -} - -// ----------------------------------------------------------------------------- -// Entropy-related functions. - -static WEBP_INLINE double BitsEntropyRefine(const VP8LBitEntropy* entropy) { - double mix; - if (entropy->nonzeros < 5) { - if (entropy->nonzeros <= 1) { - return 0; - } - // Two symbols, they will be 0 and 1 in a Huffman code. - // Let's mix in a bit of entropy to favor good clustering when - // distributions of these are combined. - if (entropy->nonzeros == 2) { - return 0.99 * entropy->sum + 0.01 * entropy->entropy; - } - // No matter what the entropy says, we cannot be better than min_limit - // with Huffman coding. I am mixing a bit of entropy into the - // min_limit since it produces much better (~0.5 %) compression results - // perhaps because of better entropy clustering. - if (entropy->nonzeros == 3) { - mix = 0.95; - } else { - mix = 0.7; // nonzeros == 4. - } - } else { - mix = 0.627; - } - - { - double min_limit = 2 * entropy->sum - entropy->max_val; - min_limit = mix * min_limit + (1.0 - mix) * entropy->entropy; - return (entropy->entropy < min_limit) ? min_limit : entropy->entropy; - } -} - -double VP8LBitsEntropy(const uint32_t* const array, int n) { - VP8LBitEntropy entropy; - VP8LBitsEntropyUnrefined(array, n, &entropy); - - return BitsEntropyRefine(&entropy); -} - -static double InitialHuffmanCost(void) { - // Small bias because Huffman code length is typically not stored in - // full length. - static const int kHuffmanCodeOfHuffmanCodeSize = CODE_LENGTH_CODES * 3; - static const double kSmallBias = 9.1; - return kHuffmanCodeOfHuffmanCodeSize - kSmallBias; -} - -// Finalize the Huffman cost based on streak numbers and length type (<3 or >=3) -static double FinalHuffmanCost(const VP8LStreaks* const stats) { - // The constants in this function are experimental and got rounded from - // their original values in 1/8 when switched to 1/1024. - double retval = InitialHuffmanCost(); - // Second coefficient: Many zeros in the histogram are covered efficiently - // by a run-length encode. Originally 2/8. - retval += stats->counts[0] * 1.5625 + 0.234375 * stats->streaks[0][1]; - // Second coefficient: Constant values are encoded less efficiently, but still - // RLE'ed. Originally 6/8. - retval += stats->counts[1] * 2.578125 + 0.703125 * stats->streaks[1][1]; - // 0s are usually encoded more efficiently than non-0s. - // Originally 15/8. - retval += 1.796875 * stats->streaks[0][0]; - // Originally 26/8. - retval += 3.28125 * stats->streaks[1][0]; - return retval; -} - -// Get the symbol entropy for the distribution 'population'. -// Set 'trivial_sym', if there's only one symbol present in the distribution. -static double PopulationCost(const uint32_t* const population, int length, - uint32_t* const trivial_sym, - uint8_t* const is_used) { - VP8LBitEntropy bit_entropy; - VP8LStreaks stats; - VP8LGetEntropyUnrefined(population, length, &bit_entropy, &stats); - if (trivial_sym != NULL) { - *trivial_sym = (bit_entropy.nonzeros == 1) ? bit_entropy.nonzero_code - : VP8L_NON_TRIVIAL_SYM; - } - // The histogram is used if there is at least one non-zero streak. - *is_used = (stats.streaks[1][0] != 0 || stats.streaks[1][1] != 0); - - return BitsEntropyRefine(&bit_entropy) + FinalHuffmanCost(&stats); -} - -// trivial_at_end is 1 if the two histograms only have one element that is -// non-zero: both the zero-th one, or both the last one. -static WEBP_INLINE double GetCombinedEntropy(const uint32_t* const X, - const uint32_t* const Y, - int length, int is_X_used, - int is_Y_used, - int trivial_at_end) { - VP8LStreaks stats; - if (trivial_at_end) { - // This configuration is due to palettization that transforms an indexed - // pixel into 0xff000000 | (pixel << 8) in VP8LBundleColorMap. - // BitsEntropyRefine is 0 for histograms with only one non-zero value. - // Only FinalHuffmanCost needs to be evaluated. - memset(&stats, 0, sizeof(stats)); - // Deal with the non-zero value at index 0 or length-1. - stats.streaks[1][0] = 1; - // Deal with the following/previous zero streak. - stats.counts[0] = 1; - stats.streaks[0][1] = length - 1; - return FinalHuffmanCost(&stats); - } else { - VP8LBitEntropy bit_entropy; - if (is_X_used) { - if (is_Y_used) { - VP8LGetCombinedEntropyUnrefined(X, Y, length, &bit_entropy, &stats); - } else { - VP8LGetEntropyUnrefined(X, length, &bit_entropy, &stats); - } - } else { - if (is_Y_used) { - VP8LGetEntropyUnrefined(Y, length, &bit_entropy, &stats); - } else { - memset(&stats, 0, sizeof(stats)); - stats.counts[0] = 1; - stats.streaks[0][length > 3] = length; - VP8LBitEntropyInit(&bit_entropy); - } - } - - return BitsEntropyRefine(&bit_entropy) + FinalHuffmanCost(&stats); - } -} - -// Estimates the Entropy + Huffman + other block overhead size cost. -double VP8LHistogramEstimateBits(VP8LHistogram* const p) { - return - PopulationCost(p->literal_, VP8LHistogramNumCodes(p->palette_code_bits_), - NULL, &p->is_used_[0]) - + PopulationCost(p->red_, NUM_LITERAL_CODES, NULL, &p->is_used_[1]) - + PopulationCost(p->blue_, NUM_LITERAL_CODES, NULL, &p->is_used_[2]) - + PopulationCost(p->alpha_, NUM_LITERAL_CODES, NULL, &p->is_used_[3]) - + PopulationCost(p->distance_, NUM_DISTANCE_CODES, NULL, &p->is_used_[4]) - + VP8LExtraCost(p->literal_ + NUM_LITERAL_CODES, NUM_LENGTH_CODES) - + VP8LExtraCost(p->distance_, NUM_DISTANCE_CODES); -} - -// ----------------------------------------------------------------------------- -// Various histogram combine/cost-eval functions - -static int GetCombinedHistogramEntropy(const VP8LHistogram* const a, - const VP8LHistogram* const b, - double cost_threshold, - double* cost) { - const int palette_code_bits = a->palette_code_bits_; - int trivial_at_end = 0; - assert(a->palette_code_bits_ == b->palette_code_bits_); - *cost += GetCombinedEntropy(a->literal_, b->literal_, - VP8LHistogramNumCodes(palette_code_bits), - a->is_used_[0], b->is_used_[0], 0); - *cost += VP8LExtraCostCombined(a->literal_ + NUM_LITERAL_CODES, - b->literal_ + NUM_LITERAL_CODES, - NUM_LENGTH_CODES); - if (*cost > cost_threshold) return 0; - - if (a->trivial_symbol_ != VP8L_NON_TRIVIAL_SYM && - a->trivial_symbol_ == b->trivial_symbol_) { - // A, R and B are all 0 or 0xff. - const uint32_t color_a = (a->trivial_symbol_ >> 24) & 0xff; - const uint32_t color_r = (a->trivial_symbol_ >> 16) & 0xff; - const uint32_t color_b = (a->trivial_symbol_ >> 0) & 0xff; - if ((color_a == 0 || color_a == 0xff) && - (color_r == 0 || color_r == 0xff) && - (color_b == 0 || color_b == 0xff)) { - trivial_at_end = 1; - } - } - - *cost += - GetCombinedEntropy(a->red_, b->red_, NUM_LITERAL_CODES, a->is_used_[1], - b->is_used_[1], trivial_at_end); - if (*cost > cost_threshold) return 0; - - *cost += - GetCombinedEntropy(a->blue_, b->blue_, NUM_LITERAL_CODES, a->is_used_[2], - b->is_used_[2], trivial_at_end); - if (*cost > cost_threshold) return 0; - - *cost += - GetCombinedEntropy(a->alpha_, b->alpha_, NUM_LITERAL_CODES, - a->is_used_[3], b->is_used_[3], trivial_at_end); - if (*cost > cost_threshold) return 0; - - *cost += - GetCombinedEntropy(a->distance_, b->distance_, NUM_DISTANCE_CODES, - a->is_used_[4], b->is_used_[4], 0); - *cost += - VP8LExtraCostCombined(a->distance_, b->distance_, NUM_DISTANCE_CODES); - if (*cost > cost_threshold) return 0; - - return 1; -} - -static WEBP_INLINE void HistogramAdd(const VP8LHistogram* const a, - const VP8LHistogram* const b, - VP8LHistogram* const out) { - VP8LHistogramAdd(a, b, out); - out->trivial_symbol_ = (a->trivial_symbol_ == b->trivial_symbol_) - ? a->trivial_symbol_ - : VP8L_NON_TRIVIAL_SYM; -} - -// Performs out = a + b, computing the cost C(a+b) - C(a) - C(b) while comparing -// to the threshold value 'cost_threshold'. The score returned is -// Score = C(a+b) - C(a) - C(b), where C(a) + C(b) is known and fixed. -// Since the previous score passed is 'cost_threshold', we only need to compare -// the partial cost against 'cost_threshold + C(a) + C(b)' to possibly bail-out -// early. -static double HistogramAddEval(const VP8LHistogram* const a, - const VP8LHistogram* const b, - VP8LHistogram* const out, - double cost_threshold) { - double cost = 0; - const double sum_cost = a->bit_cost_ + b->bit_cost_; - cost_threshold += sum_cost; - - if (GetCombinedHistogramEntropy(a, b, cost_threshold, &cost)) { - HistogramAdd(a, b, out); - out->bit_cost_ = cost; - out->palette_code_bits_ = a->palette_code_bits_; - } - - return cost - sum_cost; -} - -// Same as HistogramAddEval(), except that the resulting histogram -// is not stored. Only the cost C(a+b) - C(a) is evaluated. We omit -// the term C(b) which is constant over all the evaluations. -static double HistogramAddThresh(const VP8LHistogram* const a, - const VP8LHistogram* const b, - double cost_threshold) { - double cost; - assert(a != NULL && b != NULL); - cost = -a->bit_cost_; - GetCombinedHistogramEntropy(a, b, cost_threshold, &cost); - return cost; -} - -// ----------------------------------------------------------------------------- - -// The structure to keep track of cost range for the three dominant entropy -// symbols. -// TODO(skal): Evaluate if float can be used here instead of double for -// representing the entropy costs. -typedef struct { - double literal_max_; - double literal_min_; - double red_max_; - double red_min_; - double blue_max_; - double blue_min_; -} DominantCostRange; - -static void DominantCostRangeInit(DominantCostRange* const c) { - c->literal_max_ = 0.; - c->literal_min_ = MAX_COST; - c->red_max_ = 0.; - c->red_min_ = MAX_COST; - c->blue_max_ = 0.; - c->blue_min_ = MAX_COST; -} - -static void UpdateDominantCostRange( - const VP8LHistogram* const h, DominantCostRange* const c) { - if (c->literal_max_ < h->literal_cost_) c->literal_max_ = h->literal_cost_; - if (c->literal_min_ > h->literal_cost_) c->literal_min_ = h->literal_cost_; - if (c->red_max_ < h->red_cost_) c->red_max_ = h->red_cost_; - if (c->red_min_ > h->red_cost_) c->red_min_ = h->red_cost_; - if (c->blue_max_ < h->blue_cost_) c->blue_max_ = h->blue_cost_; - if (c->blue_min_ > h->blue_cost_) c->blue_min_ = h->blue_cost_; -} - -static void UpdateHistogramCost(VP8LHistogram* const h) { - uint32_t alpha_sym, red_sym, blue_sym; - const double alpha_cost = - PopulationCost(h->alpha_, NUM_LITERAL_CODES, &alpha_sym, - &h->is_used_[3]); - const double distance_cost = - PopulationCost(h->distance_, NUM_DISTANCE_CODES, NULL, &h->is_used_[4]) + - VP8LExtraCost(h->distance_, NUM_DISTANCE_CODES); - const int num_codes = VP8LHistogramNumCodes(h->palette_code_bits_); - h->literal_cost_ = - PopulationCost(h->literal_, num_codes, NULL, &h->is_used_[0]) + - VP8LExtraCost(h->literal_ + NUM_LITERAL_CODES, NUM_LENGTH_CODES); - h->red_cost_ = - PopulationCost(h->red_, NUM_LITERAL_CODES, &red_sym, &h->is_used_[1]); - h->blue_cost_ = - PopulationCost(h->blue_, NUM_LITERAL_CODES, &blue_sym, &h->is_used_[2]); - h->bit_cost_ = h->literal_cost_ + h->red_cost_ + h->blue_cost_ + - alpha_cost + distance_cost; - if ((alpha_sym | red_sym | blue_sym) == VP8L_NON_TRIVIAL_SYM) { - h->trivial_symbol_ = VP8L_NON_TRIVIAL_SYM; - } else { - h->trivial_symbol_ = - ((uint32_t)alpha_sym << 24) | (red_sym << 16) | (blue_sym << 0); - } -} - -static int GetBinIdForEntropy(double min, double max, double val) { - const double range = max - min; - if (range > 0.) { - const double delta = val - min; - return (int)((NUM_PARTITIONS - 1e-6) * delta / range); - } else { - return 0; - } -} - -static int GetHistoBinIndex(const VP8LHistogram* const h, - const DominantCostRange* const c, int low_effort) { - int bin_id = GetBinIdForEntropy(c->literal_min_, c->literal_max_, - h->literal_cost_); - assert(bin_id < NUM_PARTITIONS); - if (!low_effort) { - bin_id = bin_id * NUM_PARTITIONS - + GetBinIdForEntropy(c->red_min_, c->red_max_, h->red_cost_); - bin_id = bin_id * NUM_PARTITIONS - + GetBinIdForEntropy(c->blue_min_, c->blue_max_, h->blue_cost_); - assert(bin_id < BIN_SIZE); - } - return bin_id; -} - -// Construct the histograms from backward references. -static void HistogramBuild( - int xsize, int histo_bits, const VP8LBackwardRefs* const backward_refs, - VP8LHistogramSet* const image_histo) { - int x = 0, y = 0; - const int histo_xsize = VP8LSubSampleSize(xsize, histo_bits); - VP8LHistogram** const histograms = image_histo->histograms; - VP8LRefsCursor c = VP8LRefsCursorInit(backward_refs); - assert(histo_bits > 0); - VP8LHistogramSetClear(image_histo); - while (VP8LRefsCursorOk(&c)) { - const PixOrCopy* const v = c.cur_pos; - const int ix = (y >> histo_bits) * histo_xsize + (x >> histo_bits); - VP8LHistogramAddSinglePixOrCopy(histograms[ix], v, NULL, 0); - x += PixOrCopyLength(v); - while (x >= xsize) { - x -= xsize; - ++y; - } - VP8LRefsCursorNext(&c); - } -} - -// Copies the histograms and computes its bit_cost. -static const uint16_t kInvalidHistogramSymbol = (uint16_t)(-1); -static void HistogramCopyAndAnalyze(VP8LHistogramSet* const orig_histo, - VP8LHistogramSet* const image_histo, - int* const num_used, - uint16_t* const histogram_symbols) { - int i, cluster_id; - int num_used_orig = *num_used; - VP8LHistogram** const orig_histograms = orig_histo->histograms; - VP8LHistogram** const histograms = image_histo->histograms; - assert(image_histo->max_size == orig_histo->max_size); - for (cluster_id = 0, i = 0; i < orig_histo->max_size; ++i) { - VP8LHistogram* const histo = orig_histograms[i]; - UpdateHistogramCost(histo); - - // Skip the histogram if it is completely empty, which can happen for tiles - // with no information (when they are skipped because of LZ77). - if (!histo->is_used_[0] && !histo->is_used_[1] && !histo->is_used_[2] - && !histo->is_used_[3] && !histo->is_used_[4]) { - // The first histogram is always used. If an histogram is empty, we set - // its id to be the same as the previous one: this will improve - // compressibility for later LZ77. - assert(i > 0); - HistogramSetRemoveHistogram(image_histo, i, num_used); - HistogramSetRemoveHistogram(orig_histo, i, &num_used_orig); - histogram_symbols[i] = kInvalidHistogramSymbol; - } else { - // Copy histograms from orig_histo[] to image_histo[]. - HistogramCopy(histo, histograms[i]); - histogram_symbols[i] = cluster_id++; - assert(cluster_id <= image_histo->max_size); - } - } -} - -// Partition histograms to different entropy bins for three dominant (literal, -// red and blue) symbol costs and compute the histogram aggregate bit_cost. -static void HistogramAnalyzeEntropyBin(VP8LHistogramSet* const image_histo, - uint16_t* const bin_map, - int low_effort) { - int i; - VP8LHistogram** const histograms = image_histo->histograms; - const int histo_size = image_histo->size; - DominantCostRange cost_range; - DominantCostRangeInit(&cost_range); - - // Analyze the dominant (literal, red and blue) entropy costs. - for (i = 0; i < histo_size; ++i) { - if (histograms[i] == NULL) continue; - UpdateDominantCostRange(histograms[i], &cost_range); - } - - // bin-hash histograms on three of the dominant (literal, red and blue) - // symbol costs and store the resulting bin_id for each histogram. - for (i = 0; i < histo_size; ++i) { - // bin_map[i] is not set to a special value as its use will later be guarded - // by another (histograms[i] == NULL). - if (histograms[i] == NULL) continue; - bin_map[i] = GetHistoBinIndex(histograms[i], &cost_range, low_effort); - } -} - -// Merges some histograms with same bin_id together if it's advantageous. -// Sets the remaining histograms to NULL. -static void HistogramCombineEntropyBin(VP8LHistogramSet* const image_histo, - int* num_used, - const uint16_t* const clusters, - uint16_t* const cluster_mappings, - VP8LHistogram* cur_combo, - const uint16_t* const bin_map, - int num_bins, - double combine_cost_factor, - int low_effort) { - VP8LHistogram** const histograms = image_histo->histograms; - int idx; - struct { - int16_t first; // position of the histogram that accumulates all - // histograms with the same bin_id - uint16_t num_combine_failures; // number of combine failures per bin_id - } bin_info[BIN_SIZE]; - - assert(num_bins <= BIN_SIZE); - for (idx = 0; idx < num_bins; ++idx) { - bin_info[idx].first = -1; - bin_info[idx].num_combine_failures = 0; - } - - // By default, a cluster matches itself. - for (idx = 0; idx < *num_used; ++idx) cluster_mappings[idx] = idx; - for (idx = 0; idx < image_histo->size; ++idx) { - int bin_id, first; - if (histograms[idx] == NULL) continue; - bin_id = bin_map[idx]; - first = bin_info[bin_id].first; - if (first == -1) { - bin_info[bin_id].first = idx; - } else if (low_effort) { - HistogramAdd(histograms[idx], histograms[first], histograms[first]); - HistogramSetRemoveHistogram(image_histo, idx, num_used); - cluster_mappings[clusters[idx]] = clusters[first]; - } else { - // try to merge #idx into #first (both share the same bin_id) - const double bit_cost = histograms[idx]->bit_cost_; - const double bit_cost_thresh = -bit_cost * combine_cost_factor; - const double curr_cost_diff = - HistogramAddEval(histograms[first], histograms[idx], - cur_combo, bit_cost_thresh); - if (curr_cost_diff < bit_cost_thresh) { - // Try to merge two histograms only if the combo is a trivial one or - // the two candidate histograms are already non-trivial. - // For some images, 'try_combine' turns out to be false for a lot of - // histogram pairs. In that case, we fallback to combining - // histograms as usual to avoid increasing the header size. - const int try_combine = - (cur_combo->trivial_symbol_ != VP8L_NON_TRIVIAL_SYM) || - ((histograms[idx]->trivial_symbol_ == VP8L_NON_TRIVIAL_SYM) && - (histograms[first]->trivial_symbol_ == VP8L_NON_TRIVIAL_SYM)); - const int max_combine_failures = 32; - if (try_combine || - bin_info[bin_id].num_combine_failures >= max_combine_failures) { - // move the (better) merged histogram to its final slot - HistogramSwap(&cur_combo, &histograms[first]); - HistogramSetRemoveHistogram(image_histo, idx, num_used); - cluster_mappings[clusters[idx]] = clusters[first]; - } else { - ++bin_info[bin_id].num_combine_failures; - } - } - } - } - if (low_effort) { - // for low_effort case, update the final cost when everything is merged - for (idx = 0; idx < image_histo->size; ++idx) { - if (histograms[idx] == NULL) continue; - UpdateHistogramCost(histograms[idx]); - } - } -} - -// Implement a Lehmer random number generator with a multiplicative constant of -// 48271 and a modulo constant of 2^31 - 1. -static uint32_t MyRand(uint32_t* const seed) { - *seed = (uint32_t)(((uint64_t)(*seed) * 48271u) % 2147483647u); - assert(*seed > 0); - return *seed; -} - -// ----------------------------------------------------------------------------- -// Histogram pairs priority queue - -// Pair of histograms. Negative idx1 value means that pair is out-of-date. -typedef struct { - int idx1; - int idx2; - double cost_diff; - double cost_combo; -} HistogramPair; - -typedef struct { - HistogramPair* queue; - int size; - int max_size; -} HistoQueue; - -static int HistoQueueInit(HistoQueue* const histo_queue, const int max_size) { - histo_queue->size = 0; - histo_queue->max_size = max_size; - // We allocate max_size + 1 because the last element at index "size" is - // used as temporary data (and it could be up to max_size). - histo_queue->queue = (HistogramPair*)WebPSafeMalloc( - histo_queue->max_size + 1, sizeof(*histo_queue->queue)); - return histo_queue->queue != NULL; -} - -static void HistoQueueClear(HistoQueue* const histo_queue) { - assert(histo_queue != NULL); - WebPSafeFree(histo_queue->queue); - histo_queue->size = 0; - histo_queue->max_size = 0; -} - -// Pop a specific pair in the queue by replacing it with the last one -// and shrinking the queue. -static void HistoQueuePopPair(HistoQueue* const histo_queue, - HistogramPair* const pair) { - assert(pair >= histo_queue->queue && - pair < (histo_queue->queue + histo_queue->size)); - assert(histo_queue->size > 0); - *pair = histo_queue->queue[histo_queue->size - 1]; - --histo_queue->size; -} - -// Check whether a pair in the queue should be updated as head or not. -static void HistoQueueUpdateHead(HistoQueue* const histo_queue, - HistogramPair* const pair) { - assert(pair->cost_diff < 0.); - assert(pair >= histo_queue->queue && - pair < (histo_queue->queue + histo_queue->size)); - assert(histo_queue->size > 0); - if (pair->cost_diff < histo_queue->queue[0].cost_diff) { - // Replace the best pair. - const HistogramPair tmp = histo_queue->queue[0]; - histo_queue->queue[0] = *pair; - *pair = tmp; - } -} - -// Update the cost diff and combo of a pair of histograms. This needs to be -// called when the the histograms have been merged with a third one. -static void HistoQueueUpdatePair(const VP8LHistogram* const h1, - const VP8LHistogram* const h2, - double threshold, - HistogramPair* const pair) { - const double sum_cost = h1->bit_cost_ + h2->bit_cost_; - pair->cost_combo = 0.; - GetCombinedHistogramEntropy(h1, h2, sum_cost + threshold, &pair->cost_combo); - pair->cost_diff = pair->cost_combo - sum_cost; -} - -// Create a pair from indices "idx1" and "idx2" provided its cost -// is inferior to "threshold", a negative entropy. -// It returns the cost of the pair, or 0. if it superior to threshold. -static double HistoQueuePush(HistoQueue* const histo_queue, - VP8LHistogram** const histograms, int idx1, - int idx2, double threshold) { - const VP8LHistogram* h1; - const VP8LHistogram* h2; - HistogramPair pair; - - // Stop here if the queue is full. - if (histo_queue->size == histo_queue->max_size) return 0.; - assert(threshold <= 0.); - if (idx1 > idx2) { - const int tmp = idx2; - idx2 = idx1; - idx1 = tmp; - } - pair.idx1 = idx1; - pair.idx2 = idx2; - h1 = histograms[idx1]; - h2 = histograms[idx2]; - - HistoQueueUpdatePair(h1, h2, threshold, &pair); - - // Do not even consider the pair if it does not improve the entropy. - if (pair.cost_diff >= threshold) return 0.; - - histo_queue->queue[histo_queue->size++] = pair; - HistoQueueUpdateHead(histo_queue, &histo_queue->queue[histo_queue->size - 1]); - - return pair.cost_diff; -} - -// ----------------------------------------------------------------------------- - -// Combines histograms by continuously choosing the one with the highest cost -// reduction. -static int HistogramCombineGreedy(VP8LHistogramSet* const image_histo, - int* const num_used) { - int ok = 0; - const int image_histo_size = image_histo->size; - int i, j; - VP8LHistogram** const histograms = image_histo->histograms; - // Priority queue of histogram pairs. - HistoQueue histo_queue; - - // image_histo_size^2 for the queue size is safe. If you look at - // HistogramCombineGreedy, and imagine that UpdateQueueFront always pushes - // data to the queue, you insert at most: - // - image_histo_size*(image_histo_size-1)/2 (the first two for loops) - // - image_histo_size - 1 in the last for loop at the first iteration of - // the while loop, image_histo_size - 2 at the second iteration ... - // therefore image_histo_size*(image_histo_size-1)/2 overall too - if (!HistoQueueInit(&histo_queue, image_histo_size * image_histo_size)) { - goto End; - } - - for (i = 0; i < image_histo_size; ++i) { - if (image_histo->histograms[i] == NULL) continue; - for (j = i + 1; j < image_histo_size; ++j) { - // Initialize queue. - if (image_histo->histograms[j] == NULL) continue; - HistoQueuePush(&histo_queue, histograms, i, j, 0.); - } - } - - while (histo_queue.size > 0) { - const int idx1 = histo_queue.queue[0].idx1; - const int idx2 = histo_queue.queue[0].idx2; - HistogramAdd(histograms[idx2], histograms[idx1], histograms[idx1]); - histograms[idx1]->bit_cost_ = histo_queue.queue[0].cost_combo; - - // Remove merged histogram. - HistogramSetRemoveHistogram(image_histo, idx2, num_used); - - // Remove pairs intersecting the just combined best pair. - for (i = 0; i < histo_queue.size;) { - HistogramPair* const p = histo_queue.queue + i; - if (p->idx1 == idx1 || p->idx2 == idx1 || - p->idx1 == idx2 || p->idx2 == idx2) { - HistoQueuePopPair(&histo_queue, p); - } else { - HistoQueueUpdateHead(&histo_queue, p); - ++i; - } - } - - // Push new pairs formed with combined histogram to the queue. - for (i = 0; i < image_histo->size; ++i) { - if (i == idx1 || image_histo->histograms[i] == NULL) continue; - HistoQueuePush(&histo_queue, image_histo->histograms, idx1, i, 0.); - } - } - - ok = 1; - - End: - HistoQueueClear(&histo_queue); - return ok; -} - -// Perform histogram aggregation using a stochastic approach. -// 'do_greedy' is set to 1 if a greedy approach needs to be performed -// afterwards, 0 otherwise. -static int PairComparison(const void* idx1, const void* idx2) { - // To be used with bsearch: <0 when *idx1<*idx2, >0 if >, 0 when ==. - return (*(int*) idx1 - *(int*) idx2); -} -static int HistogramCombineStochastic(VP8LHistogramSet* const image_histo, - int* const num_used, int min_cluster_size, - int* const do_greedy) { - int j, iter; - uint32_t seed = 1; - int tries_with_no_success = 0; - const int outer_iters = *num_used; - const int num_tries_no_success = outer_iters / 2; - VP8LHistogram** const histograms = image_histo->histograms; - // Priority queue of histogram pairs. Its size of 'kHistoQueueSize' - // impacts the quality of the compression and the speed: the smaller the - // faster but the worse for the compression. - HistoQueue histo_queue; - const int kHistoQueueSize = 9; - int ok = 0; - // mapping from an index in image_histo with no NULL histogram to the full - // blown image_histo. - int* mappings; - - if (*num_used < min_cluster_size) { - *do_greedy = 1; - return 1; - } - - mappings = (int*) WebPSafeMalloc(*num_used, sizeof(*mappings)); - if (mappings == NULL) return 0; - if (!HistoQueueInit(&histo_queue, kHistoQueueSize)) goto End; - // Fill the initial mapping. - for (j = 0, iter = 0; iter < image_histo->size; ++iter) { - if (histograms[iter] == NULL) continue; - mappings[j++] = iter; - } - assert(j == *num_used); - - // Collapse similar histograms in 'image_histo'. - for (iter = 0; - iter < outer_iters && *num_used >= min_cluster_size && - ++tries_with_no_success < num_tries_no_success; - ++iter) { - int* mapping_index; - double best_cost = - (histo_queue.size == 0) ? 0. : histo_queue.queue[0].cost_diff; - int best_idx1 = -1, best_idx2 = 1; - const uint32_t rand_range = (*num_used - 1) * (*num_used); - // (*num_used) / 2 was chosen empirically. Less means faster but worse - // compression. - const int num_tries = (*num_used) / 2; - - // Pick random samples. - for (j = 0; *num_used >= 2 && j < num_tries; ++j) { - double curr_cost; - // Choose two different histograms at random and try to combine them. - const uint32_t tmp = MyRand(&seed) % rand_range; - uint32_t idx1 = tmp / (*num_used - 1); - uint32_t idx2 = tmp % (*num_used - 1); - if (idx2 >= idx1) ++idx2; - idx1 = mappings[idx1]; - idx2 = mappings[idx2]; - - // Calculate cost reduction on combination. - curr_cost = - HistoQueuePush(&histo_queue, histograms, idx1, idx2, best_cost); - if (curr_cost < 0) { // found a better pair? - best_cost = curr_cost; - // Empty the queue if we reached full capacity. - if (histo_queue.size == histo_queue.max_size) break; - } - } - if (histo_queue.size == 0) continue; - - // Get the best histograms. - best_idx1 = histo_queue.queue[0].idx1; - best_idx2 = histo_queue.queue[0].idx2; - assert(best_idx1 < best_idx2); - // Pop best_idx2 from mappings. - mapping_index = (int*) bsearch(&best_idx2, mappings, *num_used, - sizeof(best_idx2), &PairComparison); - assert(mapping_index != NULL); - memmove(mapping_index, mapping_index + 1, sizeof(*mapping_index) * - ((*num_used) - (mapping_index - mappings) - 1)); - // Merge the histograms and remove best_idx2 from the queue. - HistogramAdd(histograms[best_idx2], histograms[best_idx1], - histograms[best_idx1]); - histograms[best_idx1]->bit_cost_ = histo_queue.queue[0].cost_combo; - HistogramSetRemoveHistogram(image_histo, best_idx2, num_used); - // Parse the queue and update each pair that deals with best_idx1, - // best_idx2 or image_histo_size. - for (j = 0; j < histo_queue.size;) { - HistogramPair* const p = histo_queue.queue + j; - const int is_idx1_best = p->idx1 == best_idx1 || p->idx1 == best_idx2; - const int is_idx2_best = p->idx2 == best_idx1 || p->idx2 == best_idx2; - int do_eval = 0; - // The front pair could have been duplicated by a random pick so - // check for it all the time nevertheless. - if (is_idx1_best && is_idx2_best) { - HistoQueuePopPair(&histo_queue, p); - continue; - } - // Any pair containing one of the two best indices should only refer to - // best_idx1. Its cost should also be updated. - if (is_idx1_best) { - p->idx1 = best_idx1; - do_eval = 1; - } else if (is_idx2_best) { - p->idx2 = best_idx1; - do_eval = 1; - } - // Make sure the index order is respected. - if (p->idx1 > p->idx2) { - const int tmp = p->idx2; - p->idx2 = p->idx1; - p->idx1 = tmp; - } - if (do_eval) { - // Re-evaluate the cost of an updated pair. - HistoQueueUpdatePair(histograms[p->idx1], histograms[p->idx2], 0., p); - if (p->cost_diff >= 0.) { - HistoQueuePopPair(&histo_queue, p); - continue; - } - } - HistoQueueUpdateHead(&histo_queue, p); - ++j; - } - tries_with_no_success = 0; - } - *do_greedy = (*num_used <= min_cluster_size); - ok = 1; - -End: - HistoQueueClear(&histo_queue); - WebPSafeFree(mappings); - return ok; -} - -// ----------------------------------------------------------------------------- -// Histogram refinement - -// Find the best 'out' histogram for each of the 'in' histograms. -// At call-time, 'out' contains the histograms of the clusters. -// Note: we assume that out[]->bit_cost_ is already up-to-date. -static void HistogramRemap(const VP8LHistogramSet* const in, - VP8LHistogramSet* const out, - uint16_t* const symbols) { - int i; - VP8LHistogram** const in_histo = in->histograms; - VP8LHistogram** const out_histo = out->histograms; - const int in_size = out->max_size; - const int out_size = out->size; - if (out_size > 1) { - for (i = 0; i < in_size; ++i) { - int best_out = 0; - double best_bits = MAX_COST; - int k; - if (in_histo[i] == NULL) { - // Arbitrarily set to the previous value if unused to help future LZ77. - symbols[i] = symbols[i - 1]; - continue; - } - for (k = 0; k < out_size; ++k) { - double cur_bits; - cur_bits = HistogramAddThresh(out_histo[k], in_histo[i], best_bits); - if (k == 0 || cur_bits < best_bits) { - best_bits = cur_bits; - best_out = k; - } - } - symbols[i] = best_out; - } - } else { - assert(out_size == 1); - for (i = 0; i < in_size; ++i) { - symbols[i] = 0; - } - } - - // Recompute each out based on raw and symbols. - VP8LHistogramSetClear(out); - out->size = out_size; - - for (i = 0; i < in_size; ++i) { - int idx; - if (in_histo[i] == NULL) continue; - idx = symbols[i]; - HistogramAdd(in_histo[i], out_histo[idx], out_histo[idx]); - } -} - -static double GetCombineCostFactor(int histo_size, int quality) { - double combine_cost_factor = 0.16; - if (quality < 90) { - if (histo_size > 256) combine_cost_factor /= 2.; - if (histo_size > 512) combine_cost_factor /= 2.; - if (histo_size > 1024) combine_cost_factor /= 2.; - if (quality <= 50) combine_cost_factor /= 2.; - } - return combine_cost_factor; -} - -// Given a HistogramSet 'set', the mapping of clusters 'cluster_mapping' and the -// current assignment of the cells in 'symbols', merge the clusters and -// assign the smallest possible clusters values. -static void OptimizeHistogramSymbols(const VP8LHistogramSet* const set, - uint16_t* const cluster_mappings, - int num_clusters, - uint16_t* const cluster_mappings_tmp, - uint16_t* const symbols) { - int i, cluster_max; - int do_continue = 1; - // First, assign the lowest cluster to each pixel. - while (do_continue) { - do_continue = 0; - for (i = 0; i < num_clusters; ++i) { - int k; - k = cluster_mappings[i]; - while (k != cluster_mappings[k]) { - cluster_mappings[k] = cluster_mappings[cluster_mappings[k]]; - k = cluster_mappings[k]; - } - if (k != cluster_mappings[i]) { - do_continue = 1; - cluster_mappings[i] = k; - } - } - } - // Create a mapping from a cluster id to its minimal version. - cluster_max = 0; - memset(cluster_mappings_tmp, 0, - set->max_size * sizeof(*cluster_mappings_tmp)); - assert(cluster_mappings[0] == 0); - // Re-map the ids. - for (i = 0; i < set->max_size; ++i) { - int cluster; - if (symbols[i] == kInvalidHistogramSymbol) continue; - cluster = cluster_mappings[symbols[i]]; - assert(symbols[i] < num_clusters); - if (cluster > 0 && cluster_mappings_tmp[cluster] == 0) { - ++cluster_max; - cluster_mappings_tmp[cluster] = cluster_max; - } - symbols[i] = cluster_mappings_tmp[cluster]; - } - - // Make sure all cluster values are used. - cluster_max = 0; - for (i = 0; i < set->max_size; ++i) { - if (symbols[i] == kInvalidHistogramSymbol) continue; - if (symbols[i] <= cluster_max) continue; - ++cluster_max; - assert(symbols[i] == cluster_max); - } -} - -static void RemoveEmptyHistograms(VP8LHistogramSet* const image_histo) { - uint32_t size; - int i; - for (i = 0, size = 0; i < image_histo->size; ++i) { - if (image_histo->histograms[i] == NULL) continue; - image_histo->histograms[size++] = image_histo->histograms[i]; - } - image_histo->size = size; -} - -int VP8LGetHistoImageSymbols(int xsize, int ysize, - const VP8LBackwardRefs* const refs, - int quality, int low_effort, - int histo_bits, int cache_bits, - VP8LHistogramSet* const image_histo, - VP8LHistogram* const tmp_histo, - uint16_t* const histogram_symbols) { - int ok = 0; - const int histo_xsize = histo_bits ? VP8LSubSampleSize(xsize, histo_bits) : 1; - const int histo_ysize = histo_bits ? VP8LSubSampleSize(ysize, histo_bits) : 1; - const int image_histo_raw_size = histo_xsize * histo_ysize; - VP8LHistogramSet* const orig_histo = - VP8LAllocateHistogramSet(image_histo_raw_size, cache_bits); - // Don't attempt linear bin-partition heuristic for - // histograms of small sizes (as bin_map will be very sparse) and - // maximum quality q==100 (to preserve the compression gains at that level). - const int entropy_combine_num_bins = low_effort ? NUM_PARTITIONS : BIN_SIZE; - int entropy_combine; - uint16_t* const map_tmp = - WebPSafeMalloc(2 * image_histo_raw_size, sizeof(map_tmp)); - uint16_t* const cluster_mappings = map_tmp + image_histo_raw_size; - int num_used = image_histo_raw_size; - if (orig_histo == NULL || map_tmp == NULL) goto Error; - - // Construct the histograms from backward references. - HistogramBuild(xsize, histo_bits, refs, orig_histo); - // Copies the histograms and computes its bit_cost. - // histogram_symbols is optimized - HistogramCopyAndAnalyze(orig_histo, image_histo, &num_used, - histogram_symbols); - - entropy_combine = - (num_used > entropy_combine_num_bins * 2) && (quality < 100); - - if (entropy_combine) { - uint16_t* const bin_map = map_tmp; - const double combine_cost_factor = - GetCombineCostFactor(image_histo_raw_size, quality); - const uint32_t num_clusters = num_used; - - HistogramAnalyzeEntropyBin(image_histo, bin_map, low_effort); - // Collapse histograms with similar entropy. - HistogramCombineEntropyBin(image_histo, &num_used, histogram_symbols, - cluster_mappings, tmp_histo, bin_map, - entropy_combine_num_bins, combine_cost_factor, - low_effort); - OptimizeHistogramSymbols(image_histo, cluster_mappings, num_clusters, - map_tmp, histogram_symbols); - } - - // Don't combine the histograms using stochastic and greedy heuristics for - // low-effort compression mode. - if (!low_effort || !entropy_combine) { - const float x = quality / 100.f; - // cubic ramp between 1 and MAX_HISTO_GREEDY: - const int threshold_size = (int)(1 + (x * x * x) * (MAX_HISTO_GREEDY - 1)); - int do_greedy; - if (!HistogramCombineStochastic(image_histo, &num_used, threshold_size, - &do_greedy)) { - goto Error; - } - if (do_greedy) { - RemoveEmptyHistograms(image_histo); - if (!HistogramCombineGreedy(image_histo, &num_used)) { - goto Error; - } - } - } - - // Find the optimal map from original histograms to the final ones. - RemoveEmptyHistograms(image_histo); - HistogramRemap(orig_histo, image_histo, histogram_symbols); - - ok = 1; - - Error: - VP8LFreeHistogramSet(orig_histo); - WebPSafeFree(map_tmp); - return ok; -} diff --git a/Extended/libwebp/src/enc/histogram_enc.h b/Extended/libwebp/src/enc/histogram_enc.h deleted file mode 100644 index 54c2d21..0000000 --- a/Extended/libwebp/src/enc/histogram_enc.h +++ /dev/null @@ -1,128 +0,0 @@ -// Copyright 2012 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Author: Jyrki Alakuijala (jyrki@google.com) -// -// Models the histograms of literal and distance codes. - -#ifndef WEBP_ENC_HISTOGRAM_ENC_H_ -#define WEBP_ENC_HISTOGRAM_ENC_H_ - -#include - -#include "src/enc/backward_references_enc.h" -#include "src/webp/format_constants.h" -#include "src/webp/types.h" - -#ifdef __cplusplus -extern "C" { -#endif - -// Not a trivial literal symbol. -#define VP8L_NON_TRIVIAL_SYM (0xffffffff) - -// A simple container for histograms of data. -typedef struct { - // literal_ contains green literal, palette-code and - // copy-length-prefix histogram - uint32_t* literal_; // Pointer to the allocated buffer for literal. - uint32_t red_[NUM_LITERAL_CODES]; - uint32_t blue_[NUM_LITERAL_CODES]; - uint32_t alpha_[NUM_LITERAL_CODES]; - // Backward reference prefix-code histogram. - uint32_t distance_[NUM_DISTANCE_CODES]; - int palette_code_bits_; - uint32_t trivial_symbol_; // True, if histograms for Red, Blue & Alpha - // literal symbols are single valued. - double bit_cost_; // cached value of bit cost. - double literal_cost_; // Cached values of dominant entropy costs: - double red_cost_; // literal, red & blue. - double blue_cost_; - uint8_t is_used_[5]; // 5 for literal, red, blue, alpha, distance -} VP8LHistogram; - -// Collection of histograms with fixed capacity, allocated as one -// big memory chunk. Can be destroyed by calling WebPSafeFree(). -typedef struct { - int size; // number of slots currently in use - int max_size; // maximum capacity - VP8LHistogram** histograms; -} VP8LHistogramSet; - -// Create the histogram. -// -// The input data is the PixOrCopy data, which models the literals, stop -// codes and backward references (both distances and lengths). Also: if -// palette_code_bits is >= 0, initialize the histogram with this value. -void VP8LHistogramCreate(VP8LHistogram* const p, - const VP8LBackwardRefs* const refs, - int palette_code_bits); - -// Return the size of the histogram for a given palette_code_bits. -int VP8LGetHistogramSize(int palette_code_bits); - -// Set the palette_code_bits and reset the stats. -// If init_arrays is true, the arrays are also filled with 0's. -void VP8LHistogramInit(VP8LHistogram* const p, int palette_code_bits, - int init_arrays); - -// Collect all the references into a histogram (without reset) -void VP8LHistogramStoreRefs(const VP8LBackwardRefs* const refs, - VP8LHistogram* const histo); - -// Free the memory allocated for the histogram. -void VP8LFreeHistogram(VP8LHistogram* const histo); - -// Free the memory allocated for the histogram set. -void VP8LFreeHistogramSet(VP8LHistogramSet* const histo); - -// Allocate an array of pointer to histograms, allocated and initialized -// using 'cache_bits'. Return NULL in case of memory error. -VP8LHistogramSet* VP8LAllocateHistogramSet(int size, int cache_bits); - -// Set the histograms in set to 0. -void VP8LHistogramSetClear(VP8LHistogramSet* const set); - -// Allocate and initialize histogram object with specified 'cache_bits'. -// Returns NULL in case of memory error. -// Special case of VP8LAllocateHistogramSet, with size equals 1. -VP8LHistogram* VP8LAllocateHistogram(int cache_bits); - -// Accumulate a token 'v' into a histogram. -void VP8LHistogramAddSinglePixOrCopy(VP8LHistogram* const histo, - const PixOrCopy* const v, - int (*const distance_modifier)(int, int), - int distance_modifier_arg0); - -static WEBP_INLINE int VP8LHistogramNumCodes(int palette_code_bits) { - return NUM_LITERAL_CODES + NUM_LENGTH_CODES + - ((palette_code_bits > 0) ? (1 << palette_code_bits) : 0); -} - -// Builds the histogram image. -int VP8LGetHistoImageSymbols(int xsize, int ysize, - const VP8LBackwardRefs* const refs, - int quality, int low_effort, - int histogram_bits, int cache_bits, - VP8LHistogramSet* const image_in, - VP8LHistogram* const tmp_histo, - uint16_t* const histogram_symbols); - -// Returns the entropy for the symbols in the input array. -double VP8LBitsEntropy(const uint32_t* const array, int n); - -// Estimate how many bits the combined entropy of literals and distance -// approximately maps to. -double VP8LHistogramEstimateBits(VP8LHistogram* const p); - -#ifdef __cplusplus -} -#endif - -#endif // WEBP_ENC_HISTOGRAM_ENC_H_ diff --git a/Extended/libwebp/src/enc/iterator_enc.c b/Extended/libwebp/src/enc/iterator_enc.c deleted file mode 100644 index 29f91d8..0000000 --- a/Extended/libwebp/src/enc/iterator_enc.c +++ /dev/null @@ -1,459 +0,0 @@ -// Copyright 2011 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// VP8Iterator: block iterator -// -// Author: Skal (pascal.massimino@gmail.com) - -#include - -#include "src/enc/vp8i_enc.h" - -//------------------------------------------------------------------------------ -// VP8Iterator -//------------------------------------------------------------------------------ - -static void InitLeft(VP8EncIterator* const it) { - it->y_left_[-1] = it->u_left_[-1] = it->v_left_[-1] = - (it->y_ > 0) ? 129 : 127; - memset(it->y_left_, 129, 16); - memset(it->u_left_, 129, 8); - memset(it->v_left_, 129, 8); - it->left_nz_[8] = 0; - if (it->top_derr_ != NULL) { - memset(&it->left_derr_, 0, sizeof(it->left_derr_)); - } -} - -static void InitTop(VP8EncIterator* const it) { - const VP8Encoder* const enc = it->enc_; - const size_t top_size = enc->mb_w_ * 16; - memset(enc->y_top_, 127, 2 * top_size); - memset(enc->nz_, 0, enc->mb_w_ * sizeof(*enc->nz_)); - if (enc->top_derr_ != NULL) { - memset(enc->top_derr_, 0, enc->mb_w_ * sizeof(*enc->top_derr_)); - } -} - -void VP8IteratorSetRow(VP8EncIterator* const it, int y) { - VP8Encoder* const enc = it->enc_; - it->x_ = 0; - it->y_ = y; - it->bw_ = &enc->parts_[y & (enc->num_parts_ - 1)]; - it->preds_ = enc->preds_ + y * 4 * enc->preds_w_; - it->nz_ = enc->nz_; - it->mb_ = enc->mb_info_ + y * enc->mb_w_; - it->y_top_ = enc->y_top_; - it->uv_top_ = enc->uv_top_; - InitLeft(it); -} - -void VP8IteratorReset(VP8EncIterator* const it) { - VP8Encoder* const enc = it->enc_; - VP8IteratorSetRow(it, 0); - VP8IteratorSetCountDown(it, enc->mb_w_ * enc->mb_h_); // default - InitTop(it); - memset(it->bit_count_, 0, sizeof(it->bit_count_)); - it->do_trellis_ = 0; -} - -void VP8IteratorSetCountDown(VP8EncIterator* const it, int count_down) { - it->count_down_ = it->count_down0_ = count_down; -} - -int VP8IteratorIsDone(const VP8EncIterator* const it) { - return (it->count_down_ <= 0); -} - -void VP8IteratorInit(VP8Encoder* const enc, VP8EncIterator* const it) { - it->enc_ = enc; - it->yuv_in_ = (uint8_t*)WEBP_ALIGN(it->yuv_mem_); - it->yuv_out_ = it->yuv_in_ + YUV_SIZE_ENC; - it->yuv_out2_ = it->yuv_out_ + YUV_SIZE_ENC; - it->yuv_p_ = it->yuv_out2_ + YUV_SIZE_ENC; - it->lf_stats_ = enc->lf_stats_; - it->percent0_ = enc->percent_; - it->y_left_ = (uint8_t*)WEBP_ALIGN(it->yuv_left_mem_ + 1); - it->u_left_ = it->y_left_ + 16 + 16; - it->v_left_ = it->u_left_ + 16; - it->top_derr_ = enc->top_derr_; - VP8IteratorReset(it); -} - -int VP8IteratorProgress(const VP8EncIterator* const it, int delta) { - VP8Encoder* const enc = it->enc_; - if (delta && enc->pic_->progress_hook != NULL) { - const int done = it->count_down0_ - it->count_down_; - const int percent = (it->count_down0_ <= 0) - ? it->percent0_ - : it->percent0_ + delta * done / it->count_down0_; - return WebPReportProgress(enc->pic_, percent, &enc->percent_); - } - return 1; -} - -//------------------------------------------------------------------------------ -// Import the source samples into the cache. Takes care of replicating -// boundary pixels if necessary. - -static WEBP_INLINE int MinSize(int a, int b) { return (a < b) ? a : b; } - -static void ImportBlock(const uint8_t* src, int src_stride, - uint8_t* dst, int w, int h, int size) { - int i; - for (i = 0; i < h; ++i) { - memcpy(dst, src, w); - if (w < size) { - memset(dst + w, dst[w - 1], size - w); - } - dst += BPS; - src += src_stride; - } - for (i = h; i < size; ++i) { - memcpy(dst, dst - BPS, size); - dst += BPS; - } -} - -static void ImportLine(const uint8_t* src, int src_stride, - uint8_t* dst, int len, int total_len) { - int i; - for (i = 0; i < len; ++i, src += src_stride) dst[i] = *src; - for (; i < total_len; ++i) dst[i] = dst[len - 1]; -} - -void VP8IteratorImport(VP8EncIterator* const it, uint8_t* const tmp_32) { - const VP8Encoder* const enc = it->enc_; - const int x = it->x_, y = it->y_; - const WebPPicture* const pic = enc->pic_; - const uint8_t* const ysrc = pic->y + (y * pic->y_stride + x) * 16; - const uint8_t* const usrc = pic->u + (y * pic->uv_stride + x) * 8; - const uint8_t* const vsrc = pic->v + (y * pic->uv_stride + x) * 8; - const int w = MinSize(pic->width - x * 16, 16); - const int h = MinSize(pic->height - y * 16, 16); - const int uv_w = (w + 1) >> 1; - const int uv_h = (h + 1) >> 1; - - ImportBlock(ysrc, pic->y_stride, it->yuv_in_ + Y_OFF_ENC, w, h, 16); - ImportBlock(usrc, pic->uv_stride, it->yuv_in_ + U_OFF_ENC, uv_w, uv_h, 8); - ImportBlock(vsrc, pic->uv_stride, it->yuv_in_ + V_OFF_ENC, uv_w, uv_h, 8); - - if (tmp_32 == NULL) return; - - // Import source (uncompressed) samples into boundary. - if (x == 0) { - InitLeft(it); - } else { - if (y == 0) { - it->y_left_[-1] = it->u_left_[-1] = it->v_left_[-1] = 127; - } else { - it->y_left_[-1] = ysrc[- 1 - pic->y_stride]; - it->u_left_[-1] = usrc[- 1 - pic->uv_stride]; - it->v_left_[-1] = vsrc[- 1 - pic->uv_stride]; - } - ImportLine(ysrc - 1, pic->y_stride, it->y_left_, h, 16); - ImportLine(usrc - 1, pic->uv_stride, it->u_left_, uv_h, 8); - ImportLine(vsrc - 1, pic->uv_stride, it->v_left_, uv_h, 8); - } - - it->y_top_ = tmp_32 + 0; - it->uv_top_ = tmp_32 + 16; - if (y == 0) { - memset(tmp_32, 127, 32 * sizeof(*tmp_32)); - } else { - ImportLine(ysrc - pic->y_stride, 1, tmp_32, w, 16); - ImportLine(usrc - pic->uv_stride, 1, tmp_32 + 16, uv_w, 8); - ImportLine(vsrc - pic->uv_stride, 1, tmp_32 + 16 + 8, uv_w, 8); - } -} - -//------------------------------------------------------------------------------ -// Copy back the compressed samples into user space if requested. - -static void ExportBlock(const uint8_t* src, uint8_t* dst, int dst_stride, - int w, int h) { - while (h-- > 0) { - memcpy(dst, src, w); - dst += dst_stride; - src += BPS; - } -} - -void VP8IteratorExport(const VP8EncIterator* const it) { - const VP8Encoder* const enc = it->enc_; - if (enc->config_->show_compressed) { - const int x = it->x_, y = it->y_; - const uint8_t* const ysrc = it->yuv_out_ + Y_OFF_ENC; - const uint8_t* const usrc = it->yuv_out_ + U_OFF_ENC; - const uint8_t* const vsrc = it->yuv_out_ + V_OFF_ENC; - const WebPPicture* const pic = enc->pic_; - uint8_t* const ydst = pic->y + (y * pic->y_stride + x) * 16; - uint8_t* const udst = pic->u + (y * pic->uv_stride + x) * 8; - uint8_t* const vdst = pic->v + (y * pic->uv_stride + x) * 8; - int w = (pic->width - x * 16); - int h = (pic->height - y * 16); - - if (w > 16) w = 16; - if (h > 16) h = 16; - - // Luma plane - ExportBlock(ysrc, ydst, pic->y_stride, w, h); - - { // U/V planes - const int uv_w = (w + 1) >> 1; - const int uv_h = (h + 1) >> 1; - ExportBlock(usrc, udst, pic->uv_stride, uv_w, uv_h); - ExportBlock(vsrc, vdst, pic->uv_stride, uv_w, uv_h); - } - } -} - -//------------------------------------------------------------------------------ -// Non-zero contexts setup/teardown - -// Nz bits: -// 0 1 2 3 Y -// 4 5 6 7 -// 8 9 10 11 -// 12 13 14 15 -// 16 17 U -// 18 19 -// 20 21 V -// 22 23 -// 24 DC-intra16 - -// Convert packed context to byte array -#define BIT(nz, n) (!!((nz) & (1 << (n)))) - -void VP8IteratorNzToBytes(VP8EncIterator* const it) { - const int tnz = it->nz_[0], lnz = it->nz_[-1]; - int* const top_nz = it->top_nz_; - int* const left_nz = it->left_nz_; - - // Top-Y - top_nz[0] = BIT(tnz, 12); - top_nz[1] = BIT(tnz, 13); - top_nz[2] = BIT(tnz, 14); - top_nz[3] = BIT(tnz, 15); - // Top-U - top_nz[4] = BIT(tnz, 18); - top_nz[5] = BIT(tnz, 19); - // Top-V - top_nz[6] = BIT(tnz, 22); - top_nz[7] = BIT(tnz, 23); - // DC - top_nz[8] = BIT(tnz, 24); - - // left-Y - left_nz[0] = BIT(lnz, 3); - left_nz[1] = BIT(lnz, 7); - left_nz[2] = BIT(lnz, 11); - left_nz[3] = BIT(lnz, 15); - // left-U - left_nz[4] = BIT(lnz, 17); - left_nz[5] = BIT(lnz, 19); - // left-V - left_nz[6] = BIT(lnz, 21); - left_nz[7] = BIT(lnz, 23); - // left-DC is special, iterated separately -} - -void VP8IteratorBytesToNz(VP8EncIterator* const it) { - uint32_t nz = 0; - const int* const top_nz = it->top_nz_; - const int* const left_nz = it->left_nz_; - // top - nz |= (top_nz[0] << 12) | (top_nz[1] << 13); - nz |= (top_nz[2] << 14) | (top_nz[3] << 15); - nz |= (top_nz[4] << 18) | (top_nz[5] << 19); - nz |= (top_nz[6] << 22) | (top_nz[7] << 23); - nz |= (top_nz[8] << 24); // we propagate the _top_ bit, esp. for intra4 - // left - nz |= (left_nz[0] << 3) | (left_nz[1] << 7); - nz |= (left_nz[2] << 11); - nz |= (left_nz[4] << 17) | (left_nz[6] << 21); - - *it->nz_ = nz; -} - -#undef BIT - -//------------------------------------------------------------------------------ -// Advance to the next position, doing the bookkeeping. - -void VP8IteratorSaveBoundary(VP8EncIterator* const it) { - VP8Encoder* const enc = it->enc_; - const int x = it->x_, y = it->y_; - const uint8_t* const ysrc = it->yuv_out_ + Y_OFF_ENC; - const uint8_t* const uvsrc = it->yuv_out_ + U_OFF_ENC; - if (x < enc->mb_w_ - 1) { // left - int i; - for (i = 0; i < 16; ++i) { - it->y_left_[i] = ysrc[15 + i * BPS]; - } - for (i = 0; i < 8; ++i) { - it->u_left_[i] = uvsrc[7 + i * BPS]; - it->v_left_[i] = uvsrc[15 + i * BPS]; - } - // top-left (before 'top'!) - it->y_left_[-1] = it->y_top_[15]; - it->u_left_[-1] = it->uv_top_[0 + 7]; - it->v_left_[-1] = it->uv_top_[8 + 7]; - } - if (y < enc->mb_h_ - 1) { // top - memcpy(it->y_top_, ysrc + 15 * BPS, 16); - memcpy(it->uv_top_, uvsrc + 7 * BPS, 8 + 8); - } -} - -int VP8IteratorNext(VP8EncIterator* const it) { - if (++it->x_ == it->enc_->mb_w_) { - VP8IteratorSetRow(it, ++it->y_); - } else { - it->preds_ += 4; - it->mb_ += 1; - it->nz_ += 1; - it->y_top_ += 16; - it->uv_top_ += 16; - } - return (0 < --it->count_down_); -} - -//------------------------------------------------------------------------------ -// Helper function to set mode properties - -void VP8SetIntra16Mode(const VP8EncIterator* const it, int mode) { - uint8_t* preds = it->preds_; - int y; - for (y = 0; y < 4; ++y) { - memset(preds, mode, 4); - preds += it->enc_->preds_w_; - } - it->mb_->type_ = 1; -} - -void VP8SetIntra4Mode(const VP8EncIterator* const it, const uint8_t* modes) { - uint8_t* preds = it->preds_; - int y; - for (y = 4; y > 0; --y) { - memcpy(preds, modes, 4 * sizeof(*modes)); - preds += it->enc_->preds_w_; - modes += 4; - } - it->mb_->type_ = 0; -} - -void VP8SetIntraUVMode(const VP8EncIterator* const it, int mode) { - it->mb_->uv_mode_ = mode; -} - -void VP8SetSkip(const VP8EncIterator* const it, int skip) { - it->mb_->skip_ = skip; -} - -void VP8SetSegment(const VP8EncIterator* const it, int segment) { - it->mb_->segment_ = segment; -} - -//------------------------------------------------------------------------------ -// Intra4x4 sub-blocks iteration -// -// We store and update the boundary samples into an array of 37 pixels. They -// are updated as we iterate and reconstructs each intra4x4 blocks in turn. -// The position of the samples has the following snake pattern: -// -// 16|17 18 19 20|21 22 23 24|25 26 27 28|29 30 31 32|33 34 35 36 <- Top-right -// --+-----------+-----------+-----------+-----------+ -// 15| 19| 23| 27| 31| -// 14| 18| 22| 26| 30| -// 13| 17| 21| 25| 29| -// 12|13 14 15 16|17 18 19 20|21 22 23 24|25 26 27 28| -// --+-----------+-----------+-----------+-----------+ -// 11| 15| 19| 23| 27| -// 10| 14| 18| 22| 26| -// 9| 13| 17| 21| 25| -// 8| 9 10 11 12|13 14 15 16|17 18 19 20|21 22 23 24| -// --+-----------+-----------+-----------+-----------+ -// 7| 11| 15| 19| 23| -// 6| 10| 14| 18| 22| -// 5| 9| 13| 17| 21| -// 4| 5 6 7 8| 9 10 11 12|13 14 15 16|17 18 19 20| -// --+-----------+-----------+-----------+-----------+ -// 3| 7| 11| 15| 19| -// 2| 6| 10| 14| 18| -// 1| 5| 9| 13| 17| -// 0| 1 2 3 4| 5 6 7 8| 9 10 11 12|13 14 15 16| -// --+-----------+-----------+-----------+-----------+ - -// Array to record the position of the top sample to pass to the prediction -// functions in dsp.c. -static const uint8_t VP8TopLeftI4[16] = { - 17, 21, 25, 29, - 13, 17, 21, 25, - 9, 13, 17, 21, - 5, 9, 13, 17 -}; - -void VP8IteratorStartI4(VP8EncIterator* const it) { - const VP8Encoder* const enc = it->enc_; - int i; - - it->i4_ = 0; // first 4x4 sub-block - it->i4_top_ = it->i4_boundary_ + VP8TopLeftI4[0]; - - // Import the boundary samples - for (i = 0; i < 17; ++i) { // left - it->i4_boundary_[i] = it->y_left_[15 - i]; - } - for (i = 0; i < 16; ++i) { // top - it->i4_boundary_[17 + i] = it->y_top_[i]; - } - // top-right samples have a special case on the far right of the picture - if (it->x_ < enc->mb_w_ - 1) { - for (i = 16; i < 16 + 4; ++i) { - it->i4_boundary_[17 + i] = it->y_top_[i]; - } - } else { // else, replicate the last valid pixel four times - for (i = 16; i < 16 + 4; ++i) { - it->i4_boundary_[17 + i] = it->i4_boundary_[17 + 15]; - } - } - VP8IteratorNzToBytes(it); // import the non-zero context -} - -int VP8IteratorRotateI4(VP8EncIterator* const it, - const uint8_t* const yuv_out) { - const uint8_t* const blk = yuv_out + VP8Scan[it->i4_]; - uint8_t* const top = it->i4_top_; - int i; - - // Update the cache with 7 fresh samples - for (i = 0; i <= 3; ++i) { - top[-4 + i] = blk[i + 3 * BPS]; // store future top samples - } - if ((it->i4_ & 3) != 3) { // if not on the right sub-blocks #3, #7, #11, #15 - for (i = 0; i <= 2; ++i) { // store future left samples - top[i] = blk[3 + (2 - i) * BPS]; - } - } else { // else replicate top-right samples, as says the specs. - for (i = 0; i <= 3; ++i) { - top[i] = top[i + 4]; - } - } - // move pointers to next sub-block - ++it->i4_; - if (it->i4_ == 16) { // we're done - return 0; - } - - it->i4_top_ = it->i4_boundary_ + VP8TopLeftI4[it->i4_]; - return 1; -} - -//------------------------------------------------------------------------------ diff --git a/Extended/libwebp/src/enc/near_lossless_enc.c b/Extended/libwebp/src/enc/near_lossless_enc.c deleted file mode 100644 index 5517a7e..0000000 --- a/Extended/libwebp/src/enc/near_lossless_enc.c +++ /dev/null @@ -1,151 +0,0 @@ -// Copyright 2014 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Near-lossless image preprocessing adjusts pixel values to help -// compressibility with a guarantee of maximum deviation between original and -// resulting pixel values. -// -// Author: Jyrki Alakuijala (jyrki@google.com) -// Converted to C by Aleksander Kramarz (akramarz@google.com) - -#include -#include - -#include "src/dsp/lossless_common.h" -#include "src/utils/utils.h" -#include "src/enc/vp8li_enc.h" - -#if (WEBP_NEAR_LOSSLESS == 1) - -#define MIN_DIM_FOR_NEAR_LOSSLESS 64 -#define MAX_LIMIT_BITS 5 - -// Quantizes the value up or down to a multiple of 1<> 1) + ((a >> bits) & 1); - assert(bits > 0); - if (biased > 0xff) return 0xff; - return biased & ~mask; -} - -// Applies FindClosestDiscretized to all channels of pixel. -static uint32_t ClosestDiscretizedArgb(uint32_t a, int bits) { - return - (FindClosestDiscretized(a >> 24, bits) << 24) | - (FindClosestDiscretized((a >> 16) & 0xff, bits) << 16) | - (FindClosestDiscretized((a >> 8) & 0xff, bits) << 8) | - (FindClosestDiscretized(a & 0xff, bits)); -} - -// Checks if distance between corresponding channel values of pixels a and b -// is within the given limit. -static int IsNear(uint32_t a, uint32_t b, int limit) { - int k; - for (k = 0; k < 4; ++k) { - const int delta = - (int)((a >> (k * 8)) & 0xff) - (int)((b >> (k * 8)) & 0xff); - if (delta >= limit || delta <= -limit) { - return 0; - } - } - return 1; -} - -static int IsSmooth(const uint32_t* const prev_row, - const uint32_t* const curr_row, - const uint32_t* const next_row, - int ix, int limit) { - // Check that all pixels in 4-connected neighborhood are smooth. - return (IsNear(curr_row[ix], curr_row[ix - 1], limit) && - IsNear(curr_row[ix], curr_row[ix + 1], limit) && - IsNear(curr_row[ix], prev_row[ix], limit) && - IsNear(curr_row[ix], next_row[ix], limit)); -} - -// Adjusts pixel values of image with given maximum error. -static void NearLossless(int xsize, int ysize, const uint32_t* argb_src, - int stride, int limit_bits, uint32_t* copy_buffer, - uint32_t* argb_dst) { - int x, y; - const int limit = 1 << limit_bits; - uint32_t* prev_row = copy_buffer; - uint32_t* curr_row = prev_row + xsize; - uint32_t* next_row = curr_row + xsize; - memcpy(curr_row, argb_src, xsize * sizeof(argb_src[0])); - memcpy(next_row, argb_src + stride, xsize * sizeof(argb_src[0])); - - for (y = 0; y < ysize; ++y, argb_src += stride, argb_dst += xsize) { - if (y == 0 || y == ysize - 1) { - memcpy(argb_dst, argb_src, xsize * sizeof(argb_src[0])); - } else { - memcpy(next_row, argb_src + stride, xsize * sizeof(argb_src[0])); - argb_dst[0] = argb_src[0]; - argb_dst[xsize - 1] = argb_src[xsize - 1]; - for (x = 1; x < xsize - 1; ++x) { - if (IsSmooth(prev_row, curr_row, next_row, x, limit)) { - argb_dst[x] = curr_row[x]; - } else { - argb_dst[x] = ClosestDiscretizedArgb(curr_row[x], limit_bits); - } - } - } - { - // Three-way swap. - uint32_t* const temp = prev_row; - prev_row = curr_row; - curr_row = next_row; - next_row = temp; - } - } -} - -int VP8ApplyNearLossless(const WebPPicture* const picture, int quality, - uint32_t* const argb_dst) { - int i; - const int xsize = picture->width; - const int ysize = picture->height; - const int stride = picture->argb_stride; - uint32_t* const copy_buffer = - (uint32_t*)WebPSafeMalloc(xsize * 3, sizeof(*copy_buffer)); - const int limit_bits = VP8LNearLosslessBits(quality); - assert(argb_dst != NULL); - assert(limit_bits > 0); - assert(limit_bits <= MAX_LIMIT_BITS); - if (copy_buffer == NULL) { - return 0; - } - // For small icon images, don't attempt to apply near-lossless compression. - if ((xsize < MIN_DIM_FOR_NEAR_LOSSLESS && - ysize < MIN_DIM_FOR_NEAR_LOSSLESS) || - ysize < 3) { - for (i = 0; i < ysize; ++i) { - memcpy(argb_dst + i * xsize, picture->argb + i * picture->argb_stride, - xsize * sizeof(*argb_dst)); - } - WebPSafeFree(copy_buffer); - return 1; - } - - NearLossless(xsize, ysize, picture->argb, stride, limit_bits, copy_buffer, - argb_dst); - for (i = limit_bits - 1; i != 0; --i) { - NearLossless(xsize, ysize, argb_dst, xsize, i, copy_buffer, argb_dst); - } - WebPSafeFree(copy_buffer); - return 1; -} -#else // (WEBP_NEAR_LOSSLESS == 1) - -// Define a stub to suppress compiler warnings. -extern void VP8LNearLosslessStub(void); -void VP8LNearLosslessStub(void) {} - -#endif // (WEBP_NEAR_LOSSLESS == 1) diff --git a/Extended/libwebp/src/enc/picture_csp_enc.c b/Extended/libwebp/src/enc/picture_csp_enc.c deleted file mode 100644 index 718e014..0000000 --- a/Extended/libwebp/src/enc/picture_csp_enc.c +++ /dev/null @@ -1,1210 +0,0 @@ -// Copyright 2014 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// WebPPicture utils for colorspace conversion -// -// Author: Skal (pascal.massimino@gmail.com) - -#include -#include -#include - -#include "src/enc/vp8i_enc.h" -#include "src/utils/random_utils.h" -#include "src/utils/utils.h" -#include "src/dsp/dsp.h" -#include "src/dsp/lossless.h" -#include "src/dsp/yuv.h" - -// Uncomment to disable gamma-compression during RGB->U/V averaging -#define USE_GAMMA_COMPRESSION - -// If defined, use table to compute x / alpha. -#define USE_INVERSE_ALPHA_TABLE - -#ifdef WORDS_BIGENDIAN -// uint32_t 0xff000000 is 0xff,00,00,00 in memory -#define CHANNEL_OFFSET(i) (i) -#else -// uint32_t 0xff000000 is 0x00,00,00,ff in memory -#define CHANNEL_OFFSET(i) (3-(i)) -#endif - -#define ALPHA_OFFSET CHANNEL_OFFSET(0) - -//------------------------------------------------------------------------------ -// Detection of non-trivial transparency - -// Returns true if alpha[] has non-0xff values. -static int CheckNonOpaque(const uint8_t* alpha, int width, int height, - int x_step, int y_step) { - if (alpha == NULL) return 0; - WebPInitAlphaProcessing(); - if (x_step == 1) { - for (; height-- > 0; alpha += y_step) { - if (WebPHasAlpha8b(alpha, width)) return 1; - } - } else { - for (; height-- > 0; alpha += y_step) { - if (WebPHasAlpha32b(alpha, width)) return 1; - } - } - return 0; -} - -// Checking for the presence of non-opaque alpha. -int WebPPictureHasTransparency(const WebPPicture* picture) { - if (picture == NULL) return 0; - if (!picture->use_argb) { - return CheckNonOpaque(picture->a, picture->width, picture->height, - 1, picture->a_stride); - } else { - const int alpha_offset = ALPHA_OFFSET; - return CheckNonOpaque((const uint8_t*)picture->argb + alpha_offset, - picture->width, picture->height, - 4, picture->argb_stride * sizeof(*picture->argb)); - } - return 0; -} - -//------------------------------------------------------------------------------ -// Code for gamma correction - -#if defined(USE_GAMMA_COMPRESSION) - -// gamma-compensates loss of resolution during chroma subsampling -#define kGamma 0.80 // for now we use a different gamma value than kGammaF -#define kGammaFix 12 // fixed-point precision for linear values -#define kGammaScale ((1 << kGammaFix) - 1) -#define kGammaTabFix 7 // fixed-point fractional bits precision -#define kGammaTabScale (1 << kGammaTabFix) -#define kGammaTabRounder (kGammaTabScale >> 1) -#define kGammaTabSize (1 << (kGammaFix - kGammaTabFix)) - -static int kLinearToGammaTab[kGammaTabSize + 1]; -static uint16_t kGammaToLinearTab[256]; -static volatile int kGammaTablesOk = 0; - -static WEBP_TSAN_IGNORE_FUNCTION void InitGammaTables(void) { - if (!kGammaTablesOk) { - int v; - const double scale = (double)(1 << kGammaTabFix) / kGammaScale; - const double norm = 1. / 255.; - for (v = 0; v <= 255; ++v) { - kGammaToLinearTab[v] = - (uint16_t)(pow(norm * v, kGamma) * kGammaScale + .5); - } - for (v = 0; v <= kGammaTabSize; ++v) { - kLinearToGammaTab[v] = (int)(255. * pow(scale * v, 1. / kGamma) + .5); - } - kGammaTablesOk = 1; - } -} - -static WEBP_INLINE uint32_t GammaToLinear(uint8_t v) { - return kGammaToLinearTab[v]; -} - -static WEBP_INLINE int Interpolate(int v) { - const int tab_pos = v >> (kGammaTabFix + 2); // integer part - const int x = v & ((kGammaTabScale << 2) - 1); // fractional part - const int v0 = kLinearToGammaTab[tab_pos]; - const int v1 = kLinearToGammaTab[tab_pos + 1]; - const int y = v1 * x + v0 * ((kGammaTabScale << 2) - x); // interpolate - assert(tab_pos + 1 < kGammaTabSize + 1); - return y; -} - -// Convert a linear value 'v' to YUV_FIX+2 fixed-point precision -// U/V value, suitable for RGBToU/V calls. -static WEBP_INLINE int LinearToGamma(uint32_t base_value, int shift) { - const int y = Interpolate(base_value << shift); // final uplifted value - return (y + kGammaTabRounder) >> kGammaTabFix; // descale -} - -#else - -static void InitGammaTables(void) {} -static WEBP_INLINE uint32_t GammaToLinear(uint8_t v) { return v; } -static WEBP_INLINE int LinearToGamma(uint32_t base_value, int shift) { - return (int)(base_value << shift); -} - -#endif // USE_GAMMA_COMPRESSION - -//------------------------------------------------------------------------------ -// RGB -> YUV conversion - -static int RGBToY(int r, int g, int b, VP8Random* const rg) { - return (rg == NULL) ? VP8RGBToY(r, g, b, YUV_HALF) - : VP8RGBToY(r, g, b, VP8RandomBits(rg, YUV_FIX)); -} - -static int RGBToU(int r, int g, int b, VP8Random* const rg) { - return (rg == NULL) ? VP8RGBToU(r, g, b, YUV_HALF << 2) - : VP8RGBToU(r, g, b, VP8RandomBits(rg, YUV_FIX + 2)); -} - -static int RGBToV(int r, int g, int b, VP8Random* const rg) { - return (rg == NULL) ? VP8RGBToV(r, g, b, YUV_HALF << 2) - : VP8RGBToV(r, g, b, VP8RandomBits(rg, YUV_FIX + 2)); -} - -//------------------------------------------------------------------------------ -// Sharp RGB->YUV conversion - -static const int kNumIterations = 4; -static const int kMinDimensionIterativeConversion = 4; - -// We could use SFIX=0 and only uint8_t for fixed_y_t, but it produces some -// banding sometimes. Better use extra precision. -#define SFIX 2 // fixed-point precision of RGB and Y/W -typedef int16_t fixed_t; // signed type with extra SFIX precision for UV -typedef uint16_t fixed_y_t; // unsigned type with extra SFIX precision for W - -#define SHALF (1 << SFIX >> 1) -#define MAX_Y_T ((256 << SFIX) - 1) -#define SROUNDER (1 << (YUV_FIX + SFIX - 1)) - -#if defined(USE_GAMMA_COMPRESSION) - -// We use tables of different size and precision for the Rec709 / BT2020 -// transfer function. -#define kGammaF (1./0.45) -static uint32_t kLinearToGammaTabS[kGammaTabSize + 2]; -#define GAMMA_TO_LINEAR_BITS 14 -static uint32_t kGammaToLinearTabS[MAX_Y_T + 1]; // size scales with Y_FIX -static volatile int kGammaTablesSOk = 0; - -static WEBP_TSAN_IGNORE_FUNCTION void InitGammaTablesS(void) { - assert(2 * GAMMA_TO_LINEAR_BITS < 32); // we use uint32_t intermediate values - if (!kGammaTablesSOk) { - int v; - const double norm = 1. / MAX_Y_T; - const double scale = 1. / kGammaTabSize; - const double a = 0.09929682680944; - const double thresh = 0.018053968510807; - const double final_scale = 1 << GAMMA_TO_LINEAR_BITS; - for (v = 0; v <= MAX_Y_T; ++v) { - const double g = norm * v; - double value; - if (g <= thresh * 4.5) { - value = g / 4.5; - } else { - const double a_rec = 1. / (1. + a); - value = pow(a_rec * (g + a), kGammaF); - } - kGammaToLinearTabS[v] = (uint32_t)(value * final_scale + .5); - } - for (v = 0; v <= kGammaTabSize; ++v) { - const double g = scale * v; - double value; - if (g <= thresh) { - value = 4.5 * g; - } else { - value = (1. + a) * pow(g, 1. / kGammaF) - a; - } - // we already incorporate the 1/2 rounding constant here - kLinearToGammaTabS[v] = - (uint32_t)(MAX_Y_T * value) + (1 << GAMMA_TO_LINEAR_BITS >> 1); - } - // to prevent small rounding errors to cause read-overflow: - kLinearToGammaTabS[kGammaTabSize + 1] = kLinearToGammaTabS[kGammaTabSize]; - kGammaTablesSOk = 1; - } -} - -// return value has a fixed-point precision of GAMMA_TO_LINEAR_BITS -static WEBP_INLINE uint32_t GammaToLinearS(int v) { - return kGammaToLinearTabS[v]; -} - -static WEBP_INLINE uint32_t LinearToGammaS(uint32_t value) { - // 'value' is in GAMMA_TO_LINEAR_BITS fractional precision - const uint32_t v = value * kGammaTabSize; - const uint32_t tab_pos = v >> GAMMA_TO_LINEAR_BITS; - // fractional part, in GAMMA_TO_LINEAR_BITS fixed-point precision - const uint32_t x = v - (tab_pos << GAMMA_TO_LINEAR_BITS); // fractional part - // v0 / v1 are in GAMMA_TO_LINEAR_BITS fixed-point precision (range [0..1]) - const uint32_t v0 = kLinearToGammaTabS[tab_pos + 0]; - const uint32_t v1 = kLinearToGammaTabS[tab_pos + 1]; - // Final interpolation. Note that rounding is already included. - const uint32_t v2 = (v1 - v0) * x; // note: v1 >= v0. - const uint32_t result = v0 + (v2 >> GAMMA_TO_LINEAR_BITS); - return result; -} - -#else - -static void InitGammaTablesS(void) {} -static WEBP_INLINE uint32_t GammaToLinearS(int v) { - return (v << GAMMA_TO_LINEAR_BITS) / MAX_Y_T; -} -static WEBP_INLINE uint32_t LinearToGammaS(uint32_t value) { - return (MAX_Y_T * value) >> GAMMA_TO_LINEAR_BITS; -} - -#endif // USE_GAMMA_COMPRESSION - -//------------------------------------------------------------------------------ - -static uint8_t clip_8b(fixed_t v) { - return (!(v & ~0xff)) ? (uint8_t)v : (v < 0) ? 0u : 255u; -} - -static fixed_y_t clip_y(int y) { - return (!(y & ~MAX_Y_T)) ? (fixed_y_t)y : (y < 0) ? 0 : MAX_Y_T; -} - -//------------------------------------------------------------------------------ - -static int RGBToGray(int r, int g, int b) { - const int luma = 13933 * r + 46871 * g + 4732 * b + YUV_HALF; - return (luma >> YUV_FIX); -} - -static uint32_t ScaleDown(int a, int b, int c, int d) { - const uint32_t A = GammaToLinearS(a); - const uint32_t B = GammaToLinearS(b); - const uint32_t C = GammaToLinearS(c); - const uint32_t D = GammaToLinearS(d); - return LinearToGammaS((A + B + C + D + 2) >> 2); -} - -static WEBP_INLINE void UpdateW(const fixed_y_t* src, fixed_y_t* dst, int w) { - int i; - for (i = 0; i < w; ++i) { - const uint32_t R = GammaToLinearS(src[0 * w + i]); - const uint32_t G = GammaToLinearS(src[1 * w + i]); - const uint32_t B = GammaToLinearS(src[2 * w + i]); - const uint32_t Y = RGBToGray(R, G, B); - dst[i] = (fixed_y_t)LinearToGammaS(Y); - } -} - -static void UpdateChroma(const fixed_y_t* src1, const fixed_y_t* src2, - fixed_t* dst, int uv_w) { - int i; - for (i = 0; i < uv_w; ++i) { - const int r = ScaleDown(src1[0 * uv_w + 0], src1[0 * uv_w + 1], - src2[0 * uv_w + 0], src2[0 * uv_w + 1]); - const int g = ScaleDown(src1[2 * uv_w + 0], src1[2 * uv_w + 1], - src2[2 * uv_w + 0], src2[2 * uv_w + 1]); - const int b = ScaleDown(src1[4 * uv_w + 0], src1[4 * uv_w + 1], - src2[4 * uv_w + 0], src2[4 * uv_w + 1]); - const int W = RGBToGray(r, g, b); - dst[0 * uv_w] = (fixed_t)(r - W); - dst[1 * uv_w] = (fixed_t)(g - W); - dst[2 * uv_w] = (fixed_t)(b - W); - dst += 1; - src1 += 2; - src2 += 2; - } -} - -static void StoreGray(const fixed_y_t* rgb, fixed_y_t* y, int w) { - int i; - for (i = 0; i < w; ++i) { - y[i] = RGBToGray(rgb[0 * w + i], rgb[1 * w + i], rgb[2 * w + i]); - } -} - -//------------------------------------------------------------------------------ - -static WEBP_INLINE fixed_y_t Filter2(int A, int B, int W0) { - const int v0 = (A * 3 + B + 2) >> 2; - return clip_y(v0 + W0); -} - -//------------------------------------------------------------------------------ - -static WEBP_INLINE fixed_y_t UpLift(uint8_t a) { // 8bit -> SFIX - return ((fixed_y_t)a << SFIX) | SHALF; -} - -static void ImportOneRow(const uint8_t* const r_ptr, - const uint8_t* const g_ptr, - const uint8_t* const b_ptr, - int step, - int pic_width, - fixed_y_t* const dst) { - int i; - const int w = (pic_width + 1) & ~1; - for (i = 0; i < pic_width; ++i) { - const int off = i * step; - dst[i + 0 * w] = UpLift(r_ptr[off]); - dst[i + 1 * w] = UpLift(g_ptr[off]); - dst[i + 2 * w] = UpLift(b_ptr[off]); - } - if (pic_width & 1) { // replicate rightmost pixel - dst[pic_width + 0 * w] = dst[pic_width + 0 * w - 1]; - dst[pic_width + 1 * w] = dst[pic_width + 1 * w - 1]; - dst[pic_width + 2 * w] = dst[pic_width + 2 * w - 1]; - } -} - -static void InterpolateTwoRows(const fixed_y_t* const best_y, - const fixed_t* prev_uv, - const fixed_t* cur_uv, - const fixed_t* next_uv, - int w, - fixed_y_t* out1, - fixed_y_t* out2) { - const int uv_w = w >> 1; - const int len = (w - 1) >> 1; // length to filter - int k = 3; - while (k-- > 0) { // process each R/G/B segments in turn - // special boundary case for i==0 - out1[0] = Filter2(cur_uv[0], prev_uv[0], best_y[0]); - out2[0] = Filter2(cur_uv[0], next_uv[0], best_y[w]); - - WebPSharpYUVFilterRow(cur_uv, prev_uv, len, best_y + 0 + 1, out1 + 1); - WebPSharpYUVFilterRow(cur_uv, next_uv, len, best_y + w + 1, out2 + 1); - - // special boundary case for i == w - 1 when w is even - if (!(w & 1)) { - out1[w - 1] = Filter2(cur_uv[uv_w - 1], prev_uv[uv_w - 1], - best_y[w - 1 + 0]); - out2[w - 1] = Filter2(cur_uv[uv_w - 1], next_uv[uv_w - 1], - best_y[w - 1 + w]); - } - out1 += w; - out2 += w; - prev_uv += uv_w; - cur_uv += uv_w; - next_uv += uv_w; - } -} - -static WEBP_INLINE uint8_t ConvertRGBToY(int r, int g, int b) { - const int luma = 16839 * r + 33059 * g + 6420 * b + SROUNDER; - return clip_8b(16 + (luma >> (YUV_FIX + SFIX))); -} - -static WEBP_INLINE uint8_t ConvertRGBToU(int r, int g, int b) { - const int u = -9719 * r - 19081 * g + 28800 * b + SROUNDER; - return clip_8b(128 + (u >> (YUV_FIX + SFIX))); -} - -static WEBP_INLINE uint8_t ConvertRGBToV(int r, int g, int b) { - const int v = +28800 * r - 24116 * g - 4684 * b + SROUNDER; - return clip_8b(128 + (v >> (YUV_FIX + SFIX))); -} - -static int ConvertWRGBToYUV(const fixed_y_t* best_y, const fixed_t* best_uv, - WebPPicture* const picture) { - int i, j; - uint8_t* dst_y = picture->y; - uint8_t* dst_u = picture->u; - uint8_t* dst_v = picture->v; - const fixed_t* const best_uv_base = best_uv; - const int w = (picture->width + 1) & ~1; - const int h = (picture->height + 1) & ~1; - const int uv_w = w >> 1; - const int uv_h = h >> 1; - for (best_uv = best_uv_base, j = 0; j < picture->height; ++j) { - for (i = 0; i < picture->width; ++i) { - const int off = (i >> 1); - const int W = best_y[i]; - const int r = best_uv[off + 0 * uv_w] + W; - const int g = best_uv[off + 1 * uv_w] + W; - const int b = best_uv[off + 2 * uv_w] + W; - dst_y[i] = ConvertRGBToY(r, g, b); - } - best_y += w; - best_uv += (j & 1) * 3 * uv_w; - dst_y += picture->y_stride; - } - for (best_uv = best_uv_base, j = 0; j < uv_h; ++j) { - for (i = 0; i < uv_w; ++i) { - const int off = i; - const int r = best_uv[off + 0 * uv_w]; - const int g = best_uv[off + 1 * uv_w]; - const int b = best_uv[off + 2 * uv_w]; - dst_u[i] = ConvertRGBToU(r, g, b); - dst_v[i] = ConvertRGBToV(r, g, b); - } - best_uv += 3 * uv_w; - dst_u += picture->uv_stride; - dst_v += picture->uv_stride; - } - return 1; -} - -//------------------------------------------------------------------------------ -// Main function - -#define SAFE_ALLOC(W, H, T) ((T*)WebPSafeMalloc((W) * (H), sizeof(T))) - -static int PreprocessARGB(const uint8_t* r_ptr, - const uint8_t* g_ptr, - const uint8_t* b_ptr, - int step, int rgb_stride, - WebPPicture* const picture) { - // we expand the right/bottom border if needed - const int w = (picture->width + 1) & ~1; - const int h = (picture->height + 1) & ~1; - const int uv_w = w >> 1; - const int uv_h = h >> 1; - uint64_t prev_diff_y_sum = ~0; - int j, iter; - - // TODO(skal): allocate one big memory chunk. But for now, it's easier - // for valgrind debugging to have several chunks. - fixed_y_t* const tmp_buffer = SAFE_ALLOC(w * 3, 2, fixed_y_t); // scratch - fixed_y_t* const best_y_base = SAFE_ALLOC(w, h, fixed_y_t); - fixed_y_t* const target_y_base = SAFE_ALLOC(w, h, fixed_y_t); - fixed_y_t* const best_rgb_y = SAFE_ALLOC(w, 2, fixed_y_t); - fixed_t* const best_uv_base = SAFE_ALLOC(uv_w * 3, uv_h, fixed_t); - fixed_t* const target_uv_base = SAFE_ALLOC(uv_w * 3, uv_h, fixed_t); - fixed_t* const best_rgb_uv = SAFE_ALLOC(uv_w * 3, 1, fixed_t); - fixed_y_t* best_y = best_y_base; - fixed_y_t* target_y = target_y_base; - fixed_t* best_uv = best_uv_base; - fixed_t* target_uv = target_uv_base; - const uint64_t diff_y_threshold = (uint64_t)(3.0 * w * h); - int ok; - - if (best_y_base == NULL || best_uv_base == NULL || - target_y_base == NULL || target_uv_base == NULL || - best_rgb_y == NULL || best_rgb_uv == NULL || - tmp_buffer == NULL) { - ok = WebPEncodingSetError(picture, VP8_ENC_ERROR_OUT_OF_MEMORY); - goto End; - } - assert(picture->width >= kMinDimensionIterativeConversion); - assert(picture->height >= kMinDimensionIterativeConversion); - - WebPInitConvertARGBToYUV(); - - // Import RGB samples to W/RGB representation. - for (j = 0; j < picture->height; j += 2) { - const int is_last_row = (j == picture->height - 1); - fixed_y_t* const src1 = tmp_buffer + 0 * w; - fixed_y_t* const src2 = tmp_buffer + 3 * w; - - // prepare two rows of input - ImportOneRow(r_ptr, g_ptr, b_ptr, step, picture->width, src1); - if (!is_last_row) { - ImportOneRow(r_ptr + rgb_stride, g_ptr + rgb_stride, b_ptr + rgb_stride, - step, picture->width, src2); - } else { - memcpy(src2, src1, 3 * w * sizeof(*src2)); - } - StoreGray(src1, best_y + 0, w); - StoreGray(src2, best_y + w, w); - - UpdateW(src1, target_y, w); - UpdateW(src2, target_y + w, w); - UpdateChroma(src1, src2, target_uv, uv_w); - memcpy(best_uv, target_uv, 3 * uv_w * sizeof(*best_uv)); - best_y += 2 * w; - best_uv += 3 * uv_w; - target_y += 2 * w; - target_uv += 3 * uv_w; - r_ptr += 2 * rgb_stride; - g_ptr += 2 * rgb_stride; - b_ptr += 2 * rgb_stride; - } - - // Iterate and resolve clipping conflicts. - for (iter = 0; iter < kNumIterations; ++iter) { - const fixed_t* cur_uv = best_uv_base; - const fixed_t* prev_uv = best_uv_base; - uint64_t diff_y_sum = 0; - - best_y = best_y_base; - best_uv = best_uv_base; - target_y = target_y_base; - target_uv = target_uv_base; - for (j = 0; j < h; j += 2) { - fixed_y_t* const src1 = tmp_buffer + 0 * w; - fixed_y_t* const src2 = tmp_buffer + 3 * w; - { - const fixed_t* const next_uv = cur_uv + ((j < h - 2) ? 3 * uv_w : 0); - InterpolateTwoRows(best_y, prev_uv, cur_uv, next_uv, w, src1, src2); - prev_uv = cur_uv; - cur_uv = next_uv; - } - - UpdateW(src1, best_rgb_y + 0 * w, w); - UpdateW(src2, best_rgb_y + 1 * w, w); - UpdateChroma(src1, src2, best_rgb_uv, uv_w); - - // update two rows of Y and one row of RGB - diff_y_sum += WebPSharpYUVUpdateY(target_y, best_rgb_y, best_y, 2 * w); - WebPSharpYUVUpdateRGB(target_uv, best_rgb_uv, best_uv, 3 * uv_w); - - best_y += 2 * w; - best_uv += 3 * uv_w; - target_y += 2 * w; - target_uv += 3 * uv_w; - } - // test exit condition - if (iter > 0) { - if (diff_y_sum < diff_y_threshold) break; - if (diff_y_sum > prev_diff_y_sum) break; - } - prev_diff_y_sum = diff_y_sum; - } - // final reconstruction - ok = ConvertWRGBToYUV(best_y_base, best_uv_base, picture); - - End: - WebPSafeFree(best_y_base); - WebPSafeFree(best_uv_base); - WebPSafeFree(target_y_base); - WebPSafeFree(target_uv_base); - WebPSafeFree(best_rgb_y); - WebPSafeFree(best_rgb_uv); - WebPSafeFree(tmp_buffer); - return ok; -} -#undef SAFE_ALLOC - -//------------------------------------------------------------------------------ -// "Fast" regular RGB->YUV - -#define SUM4(ptr, step) LinearToGamma( \ - GammaToLinear((ptr)[0]) + \ - GammaToLinear((ptr)[(step)]) + \ - GammaToLinear((ptr)[rgb_stride]) + \ - GammaToLinear((ptr)[rgb_stride + (step)]), 0) \ - -#define SUM2(ptr) \ - LinearToGamma(GammaToLinear((ptr)[0]) + GammaToLinear((ptr)[rgb_stride]), 1) - -#define SUM2ALPHA(ptr) ((ptr)[0] + (ptr)[rgb_stride]) -#define SUM4ALPHA(ptr) (SUM2ALPHA(ptr) + SUM2ALPHA((ptr) + 4)) - -#if defined(USE_INVERSE_ALPHA_TABLE) - -static const int kAlphaFix = 19; -// Following table is (1 << kAlphaFix) / a. The (v * kInvAlpha[a]) >> kAlphaFix -// formula is then equal to v / a in most (99.6%) cases. Note that this table -// and constant are adjusted very tightly to fit 32b arithmetic. -// In particular, they use the fact that the operands for 'v / a' are actually -// derived as v = (a0.p0 + a1.p1 + a2.p2 + a3.p3) and a = a0 + a1 + a2 + a3 -// with ai in [0..255] and pi in [0..1<> (kAlphaFix - 2)) - -#else - -#define DIVIDE_BY_ALPHA(sum, a) (4 * (sum) / (a)) - -#endif // USE_INVERSE_ALPHA_TABLE - -static WEBP_INLINE int LinearToGammaWeighted(const uint8_t* src, - const uint8_t* a_ptr, - uint32_t total_a, int step, - int rgb_stride) { - const uint32_t sum = - a_ptr[0] * GammaToLinear(src[0]) + - a_ptr[step] * GammaToLinear(src[step]) + - a_ptr[rgb_stride] * GammaToLinear(src[rgb_stride]) + - a_ptr[rgb_stride + step] * GammaToLinear(src[rgb_stride + step]); - assert(total_a > 0 && total_a <= 4 * 0xff); -#if defined(USE_INVERSE_ALPHA_TABLE) - assert((uint64_t)sum * kInvAlpha[total_a] < ((uint64_t)1 << 32)); -#endif - return LinearToGamma(DIVIDE_BY_ALPHA(sum, total_a), 0); -} - -static WEBP_INLINE void ConvertRowToY(const uint8_t* const r_ptr, - const uint8_t* const g_ptr, - const uint8_t* const b_ptr, - int step, - uint8_t* const dst_y, - int width, - VP8Random* const rg) { - int i, j; - for (i = 0, j = 0; i < width; i += 1, j += step) { - dst_y[i] = RGBToY(r_ptr[j], g_ptr[j], b_ptr[j], rg); - } -} - -static WEBP_INLINE void AccumulateRGBA(const uint8_t* const r_ptr, - const uint8_t* const g_ptr, - const uint8_t* const b_ptr, - const uint8_t* const a_ptr, - int rgb_stride, - uint16_t* dst, int width) { - int i, j; - // we loop over 2x2 blocks and produce one R/G/B/A value for each. - for (i = 0, j = 0; i < (width >> 1); i += 1, j += 2 * 4, dst += 4) { - const uint32_t a = SUM4ALPHA(a_ptr + j); - int r, g, b; - if (a == 4 * 0xff || a == 0) { - r = SUM4(r_ptr + j, 4); - g = SUM4(g_ptr + j, 4); - b = SUM4(b_ptr + j, 4); - } else { - r = LinearToGammaWeighted(r_ptr + j, a_ptr + j, a, 4, rgb_stride); - g = LinearToGammaWeighted(g_ptr + j, a_ptr + j, a, 4, rgb_stride); - b = LinearToGammaWeighted(b_ptr + j, a_ptr + j, a, 4, rgb_stride); - } - dst[0] = r; - dst[1] = g; - dst[2] = b; - dst[3] = a; - } - if (width & 1) { - const uint32_t a = 2u * SUM2ALPHA(a_ptr + j); - int r, g, b; - if (a == 4 * 0xff || a == 0) { - r = SUM2(r_ptr + j); - g = SUM2(g_ptr + j); - b = SUM2(b_ptr + j); - } else { - r = LinearToGammaWeighted(r_ptr + j, a_ptr + j, a, 0, rgb_stride); - g = LinearToGammaWeighted(g_ptr + j, a_ptr + j, a, 0, rgb_stride); - b = LinearToGammaWeighted(b_ptr + j, a_ptr + j, a, 0, rgb_stride); - } - dst[0] = r; - dst[1] = g; - dst[2] = b; - dst[3] = a; - } -} - -static WEBP_INLINE void AccumulateRGB(const uint8_t* const r_ptr, - const uint8_t* const g_ptr, - const uint8_t* const b_ptr, - int step, int rgb_stride, - uint16_t* dst, int width) { - int i, j; - for (i = 0, j = 0; i < (width >> 1); i += 1, j += 2 * step, dst += 4) { - dst[0] = SUM4(r_ptr + j, step); - dst[1] = SUM4(g_ptr + j, step); - dst[2] = SUM4(b_ptr + j, step); - } - if (width & 1) { - dst[0] = SUM2(r_ptr + j); - dst[1] = SUM2(g_ptr + j); - dst[2] = SUM2(b_ptr + j); - } -} - -static WEBP_INLINE void ConvertRowsToUV(const uint16_t* rgb, - uint8_t* const dst_u, - uint8_t* const dst_v, - int width, - VP8Random* const rg) { - int i; - for (i = 0; i < width; i += 1, rgb += 4) { - const int r = rgb[0], g = rgb[1], b = rgb[2]; - dst_u[i] = RGBToU(r, g, b, rg); - dst_v[i] = RGBToV(r, g, b, rg); - } -} - -static int ImportYUVAFromRGBA(const uint8_t* r_ptr, - const uint8_t* g_ptr, - const uint8_t* b_ptr, - const uint8_t* a_ptr, - int step, // bytes per pixel - int rgb_stride, // bytes per scanline - float dithering, - int use_iterative_conversion, - WebPPicture* const picture) { - int y; - const int width = picture->width; - const int height = picture->height; - const int has_alpha = CheckNonOpaque(a_ptr, width, height, step, rgb_stride); - const int is_rgb = (r_ptr < b_ptr); // otherwise it's bgr - - picture->colorspace = has_alpha ? WEBP_YUV420A : WEBP_YUV420; - picture->use_argb = 0; - - // disable smart conversion if source is too small (overkill). - if (width < kMinDimensionIterativeConversion || - height < kMinDimensionIterativeConversion) { - use_iterative_conversion = 0; - } - - if (!WebPPictureAllocYUVA(picture, width, height)) { - return 0; - } - if (has_alpha) { - assert(step == 4); -#if defined(USE_GAMMA_COMPRESSION) && defined(USE_INVERSE_ALPHA_TABLE) - assert(kAlphaFix + kGammaFix <= 31); -#endif - } - - if (use_iterative_conversion) { - InitGammaTablesS(); - if (!PreprocessARGB(r_ptr, g_ptr, b_ptr, step, rgb_stride, picture)) { - return 0; - } - if (has_alpha) { - WebPExtractAlpha(a_ptr, rgb_stride, width, height, - picture->a, picture->a_stride); - } - } else { - const int uv_width = (width + 1) >> 1; - int use_dsp = (step == 3); // use special function in this case - // temporary storage for accumulated R/G/B values during conversion to U/V - uint16_t* const tmp_rgb = - (uint16_t*)WebPSafeMalloc(4 * uv_width, sizeof(*tmp_rgb)); - uint8_t* dst_y = picture->y; - uint8_t* dst_u = picture->u; - uint8_t* dst_v = picture->v; - uint8_t* dst_a = picture->a; - - VP8Random base_rg; - VP8Random* rg = NULL; - if (dithering > 0.) { - VP8InitRandom(&base_rg, dithering); - rg = &base_rg; - use_dsp = 0; // can't use dsp in this case - } - WebPInitConvertARGBToYUV(); - InitGammaTables(); - - if (tmp_rgb == NULL) return 0; // malloc error - - // Downsample Y/U/V planes, two rows at a time - for (y = 0; y < (height >> 1); ++y) { - int rows_have_alpha = has_alpha; - if (use_dsp) { - if (is_rgb) { - WebPConvertRGB24ToY(r_ptr, dst_y, width); - WebPConvertRGB24ToY(r_ptr + rgb_stride, - dst_y + picture->y_stride, width); - } else { - WebPConvertBGR24ToY(b_ptr, dst_y, width); - WebPConvertBGR24ToY(b_ptr + rgb_stride, - dst_y + picture->y_stride, width); - } - } else { - ConvertRowToY(r_ptr, g_ptr, b_ptr, step, dst_y, width, rg); - ConvertRowToY(r_ptr + rgb_stride, - g_ptr + rgb_stride, - b_ptr + rgb_stride, step, - dst_y + picture->y_stride, width, rg); - } - dst_y += 2 * picture->y_stride; - if (has_alpha) { - rows_have_alpha &= !WebPExtractAlpha(a_ptr, rgb_stride, width, 2, - dst_a, picture->a_stride); - dst_a += 2 * picture->a_stride; - } - // Collect averaged R/G/B(/A) - if (!rows_have_alpha) { - AccumulateRGB(r_ptr, g_ptr, b_ptr, step, rgb_stride, tmp_rgb, width); - } else { - AccumulateRGBA(r_ptr, g_ptr, b_ptr, a_ptr, rgb_stride, tmp_rgb, width); - } - // Convert to U/V - if (rg == NULL) { - WebPConvertRGBA32ToUV(tmp_rgb, dst_u, dst_v, uv_width); - } else { - ConvertRowsToUV(tmp_rgb, dst_u, dst_v, uv_width, rg); - } - dst_u += picture->uv_stride; - dst_v += picture->uv_stride; - r_ptr += 2 * rgb_stride; - b_ptr += 2 * rgb_stride; - g_ptr += 2 * rgb_stride; - if (has_alpha) a_ptr += 2 * rgb_stride; - } - if (height & 1) { // extra last row - int row_has_alpha = has_alpha; - if (use_dsp) { - if (r_ptr < b_ptr) { - WebPConvertRGB24ToY(r_ptr, dst_y, width); - } else { - WebPConvertBGR24ToY(b_ptr, dst_y, width); - } - } else { - ConvertRowToY(r_ptr, g_ptr, b_ptr, step, dst_y, width, rg); - } - if (row_has_alpha) { - row_has_alpha &= !WebPExtractAlpha(a_ptr, 0, width, 1, dst_a, 0); - } - // Collect averaged R/G/B(/A) - if (!row_has_alpha) { - // Collect averaged R/G/B - AccumulateRGB(r_ptr, g_ptr, b_ptr, step, /* rgb_stride = */ 0, - tmp_rgb, width); - } else { - AccumulateRGBA(r_ptr, g_ptr, b_ptr, a_ptr, /* rgb_stride = */ 0, - tmp_rgb, width); - } - if (rg == NULL) { - WebPConvertRGBA32ToUV(tmp_rgb, dst_u, dst_v, uv_width); - } else { - ConvertRowsToUV(tmp_rgb, dst_u, dst_v, uv_width, rg); - } - } - WebPSafeFree(tmp_rgb); - } - return 1; -} - -#undef SUM4 -#undef SUM2 -#undef SUM4ALPHA -#undef SUM2ALPHA - -//------------------------------------------------------------------------------ -// call for ARGB->YUVA conversion - -static int PictureARGBToYUVA(WebPPicture* picture, WebPEncCSP colorspace, - float dithering, int use_iterative_conversion) { - if (picture == NULL) return 0; - if (picture->argb == NULL) { - return WebPEncodingSetError(picture, VP8_ENC_ERROR_NULL_PARAMETER); - } else if ((colorspace & WEBP_CSP_UV_MASK) != WEBP_YUV420) { - return WebPEncodingSetError(picture, VP8_ENC_ERROR_INVALID_CONFIGURATION); - } else { - const uint8_t* const argb = (const uint8_t*)picture->argb; - const uint8_t* const a = argb + CHANNEL_OFFSET(0); - const uint8_t* const r = argb + CHANNEL_OFFSET(1); - const uint8_t* const g = argb + CHANNEL_OFFSET(2); - const uint8_t* const b = argb + CHANNEL_OFFSET(3); - - picture->colorspace = WEBP_YUV420; - return ImportYUVAFromRGBA(r, g, b, a, 4, 4 * picture->argb_stride, - dithering, use_iterative_conversion, picture); - } -} - -int WebPPictureARGBToYUVADithered(WebPPicture* picture, WebPEncCSP colorspace, - float dithering) { - return PictureARGBToYUVA(picture, colorspace, dithering, 0); -} - -int WebPPictureARGBToYUVA(WebPPicture* picture, WebPEncCSP colorspace) { - return PictureARGBToYUVA(picture, colorspace, 0.f, 0); -} - -int WebPPictureSharpARGBToYUVA(WebPPicture* picture) { - return PictureARGBToYUVA(picture, WEBP_YUV420, 0.f, 1); -} -// for backward compatibility -int WebPPictureSmartARGBToYUVA(WebPPicture* picture) { - return WebPPictureSharpARGBToYUVA(picture); -} - -//------------------------------------------------------------------------------ -// call for YUVA -> ARGB conversion - -int WebPPictureYUVAToARGB(WebPPicture* picture) { - if (picture == NULL) return 0; - if (picture->y == NULL || picture->u == NULL || picture->v == NULL) { - return WebPEncodingSetError(picture, VP8_ENC_ERROR_NULL_PARAMETER); - } - if ((picture->colorspace & WEBP_CSP_ALPHA_BIT) && picture->a == NULL) { - return WebPEncodingSetError(picture, VP8_ENC_ERROR_NULL_PARAMETER); - } - if ((picture->colorspace & WEBP_CSP_UV_MASK) != WEBP_YUV420) { - return WebPEncodingSetError(picture, VP8_ENC_ERROR_INVALID_CONFIGURATION); - } - // Allocate a new argb buffer (discarding the previous one). - if (!WebPPictureAllocARGB(picture, picture->width, picture->height)) return 0; - picture->use_argb = 1; - - // Convert - { - int y; - const int width = picture->width; - const int height = picture->height; - const int argb_stride = 4 * picture->argb_stride; - uint8_t* dst = (uint8_t*)picture->argb; - const uint8_t* cur_u = picture->u, *cur_v = picture->v, *cur_y = picture->y; - WebPUpsampleLinePairFunc upsample = - WebPGetLinePairConverter(ALPHA_OFFSET > 0); - - // First row, with replicated top samples. - upsample(cur_y, NULL, cur_u, cur_v, cur_u, cur_v, dst, NULL, width); - cur_y += picture->y_stride; - dst += argb_stride; - // Center rows. - for (y = 1; y + 1 < height; y += 2) { - const uint8_t* const top_u = cur_u; - const uint8_t* const top_v = cur_v; - cur_u += picture->uv_stride; - cur_v += picture->uv_stride; - upsample(cur_y, cur_y + picture->y_stride, top_u, top_v, cur_u, cur_v, - dst, dst + argb_stride, width); - cur_y += 2 * picture->y_stride; - dst += 2 * argb_stride; - } - // Last row (if needed), with replicated bottom samples. - if (height > 1 && !(height & 1)) { - upsample(cur_y, NULL, cur_u, cur_v, cur_u, cur_v, dst, NULL, width); - } - // Insert alpha values if needed, in replacement for the default 0xff ones. - if (picture->colorspace & WEBP_CSP_ALPHA_BIT) { - for (y = 0; y < height; ++y) { - uint32_t* const argb_dst = picture->argb + y * picture->argb_stride; - const uint8_t* const src = picture->a + y * picture->a_stride; - int x; - for (x = 0; x < width; ++x) { - argb_dst[x] = (argb_dst[x] & 0x00ffffffu) | ((uint32_t)src[x] << 24); - } - } - } - } - return 1; -} - -//------------------------------------------------------------------------------ -// automatic import / conversion - -static int Import(WebPPicture* const picture, - const uint8_t* rgb, int rgb_stride, - int step, int swap_rb, int import_alpha) { - int y; - // swap_rb -> b,g,r,a , !swap_rb -> r,g,b,a - const uint8_t* r_ptr = rgb + (swap_rb ? 2 : 0); - const uint8_t* g_ptr = rgb + 1; - const uint8_t* b_ptr = rgb + (swap_rb ? 0 : 2); - const int width = picture->width; - const int height = picture->height; - - if (!picture->use_argb) { - const uint8_t* a_ptr = import_alpha ? rgb + 3 : NULL; - return ImportYUVAFromRGBA(r_ptr, g_ptr, b_ptr, a_ptr, step, rgb_stride, - 0.f /* no dithering */, 0, picture); - } - if (!WebPPictureAlloc(picture)) return 0; - - VP8LDspInit(); - WebPInitAlphaProcessing(); - - if (import_alpha) { - // dst[] byte order is {a,r,g,b} for big-endian, {b,g,r,a} for little endian - uint32_t* dst = picture->argb; - const int do_copy = (ALPHA_OFFSET == 3) && swap_rb; - assert(step == 4); - if (do_copy) { - for (y = 0; y < height; ++y) { - memcpy(dst, rgb, width * 4); - rgb += rgb_stride; - dst += picture->argb_stride; - } - } else { - for (y = 0; y < height; ++y) { -#ifdef WORDS_BIGENDIAN - // BGRA or RGBA input order. - const uint8_t* a_ptr = rgb + 3; - WebPPackARGB(a_ptr, r_ptr, g_ptr, b_ptr, width, dst); - r_ptr += rgb_stride; - g_ptr += rgb_stride; - b_ptr += rgb_stride; -#else - // RGBA input order. Need to swap R and B. - VP8LConvertBGRAToRGBA((const uint32_t*)rgb, width, (uint8_t*)dst); -#endif - rgb += rgb_stride; - dst += picture->argb_stride; - } - } - } else { - uint32_t* dst = picture->argb; - assert(step >= 3); - for (y = 0; y < height; ++y) { - WebPPackRGB(r_ptr, g_ptr, b_ptr, width, step, dst); - r_ptr += rgb_stride; - g_ptr += rgb_stride; - b_ptr += rgb_stride; - dst += picture->argb_stride; - } - } - return 1; -} - -// Public API - -#if !defined(WEBP_REDUCE_CSP) - -int WebPPictureImportBGR(WebPPicture* picture, - const uint8_t* rgb, int rgb_stride) { - return (picture != NULL && rgb != NULL) - ? Import(picture, rgb, rgb_stride, 3, 1, 0) - : 0; -} - -int WebPPictureImportBGRA(WebPPicture* picture, - const uint8_t* rgba, int rgba_stride) { - return (picture != NULL && rgba != NULL) - ? Import(picture, rgba, rgba_stride, 4, 1, 1) - : 0; -} - - -int WebPPictureImportBGRX(WebPPicture* picture, - const uint8_t* rgba, int rgba_stride) { - return (picture != NULL && rgba != NULL) - ? Import(picture, rgba, rgba_stride, 4, 1, 0) - : 0; -} - -#endif // WEBP_REDUCE_CSP - -int WebPPictureImportRGB(WebPPicture* picture, - const uint8_t* rgb, int rgb_stride) { - return (picture != NULL && rgb != NULL) - ? Import(picture, rgb, rgb_stride, 3, 0, 0) - : 0; -} - -int WebPPictureImportRGBA(WebPPicture* picture, - const uint8_t* rgba, int rgba_stride) { - return (picture != NULL && rgba != NULL) - ? Import(picture, rgba, rgba_stride, 4, 0, 1) - : 0; -} - -int WebPPictureImportRGBX(WebPPicture* picture, - const uint8_t* rgba, int rgba_stride) { - return (picture != NULL && rgba != NULL) - ? Import(picture, rgba, rgba_stride, 4, 0, 0) - : 0; -} - -//------------------------------------------------------------------------------ diff --git a/Extended/libwebp/src/enc/picture_enc.c b/Extended/libwebp/src/enc/picture_enc.c deleted file mode 100644 index c691622..0000000 --- a/Extended/libwebp/src/enc/picture_enc.c +++ /dev/null @@ -1,296 +0,0 @@ -// Copyright 2011 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// WebPPicture class basis -// -// Author: Skal (pascal.massimino@gmail.com) - -#include -#include - -#include "src/enc/vp8i_enc.h" -#include "src/dsp/dsp.h" -#include "src/utils/utils.h" - -//------------------------------------------------------------------------------ -// WebPPicture -//------------------------------------------------------------------------------ - -static int DummyWriter(const uint8_t* data, size_t data_size, - const WebPPicture* const picture) { - // The following are to prevent 'unused variable' error message. - (void)data; - (void)data_size; - (void)picture; - return 1; -} - -int WebPPictureInitInternal(WebPPicture* picture, int version) { - if (WEBP_ABI_IS_INCOMPATIBLE(version, WEBP_ENCODER_ABI_VERSION)) { - return 0; // caller/system version mismatch! - } - if (picture != NULL) { - memset(picture, 0, sizeof(*picture)); - picture->writer = DummyWriter; - WebPEncodingSetError(picture, VP8_ENC_OK); - } - return 1; -} - -//------------------------------------------------------------------------------ - -static void WebPPictureResetBufferARGB(WebPPicture* const picture) { - picture->memory_argb_ = NULL; - picture->argb = NULL; - picture->argb_stride = 0; -} - -static void WebPPictureResetBufferYUVA(WebPPicture* const picture) { - picture->memory_ = NULL; - picture->y = picture->u = picture->v = picture->a = NULL; - picture->y_stride = picture->uv_stride = 0; - picture->a_stride = 0; -} - -void WebPPictureResetBuffers(WebPPicture* const picture) { - WebPPictureResetBufferARGB(picture); - WebPPictureResetBufferYUVA(picture); -} - -int WebPPictureAllocARGB(WebPPicture* const picture, int width, int height) { - void* memory; - const uint64_t argb_size = (uint64_t)width * height; - - assert(picture != NULL); - - WebPSafeFree(picture->memory_argb_); - WebPPictureResetBufferARGB(picture); - - if (width <= 0 || height <= 0) { - return WebPEncodingSetError(picture, VP8_ENC_ERROR_BAD_DIMENSION); - } - // allocate a new buffer. - memory = WebPSafeMalloc(argb_size + WEBP_ALIGN_CST, sizeof(*picture->argb)); - if (memory == NULL) { - return WebPEncodingSetError(picture, VP8_ENC_ERROR_OUT_OF_MEMORY); - } - picture->memory_argb_ = memory; - picture->argb = (uint32_t*)WEBP_ALIGN(memory); - picture->argb_stride = width; - return 1; -} - -int WebPPictureAllocYUVA(WebPPicture* const picture, int width, int height) { - const WebPEncCSP uv_csp = - (WebPEncCSP)((int)picture->colorspace & WEBP_CSP_UV_MASK); - const int has_alpha = (int)picture->colorspace & WEBP_CSP_ALPHA_BIT; - const int y_stride = width; - const int uv_width = (int)(((int64_t)width + 1) >> 1); - const int uv_height = (int)(((int64_t)height + 1) >> 1); - const int uv_stride = uv_width; - int a_width, a_stride; - uint64_t y_size, uv_size, a_size, total_size; - uint8_t* mem; - - assert(picture != NULL); - - WebPSafeFree(picture->memory_); - WebPPictureResetBufferYUVA(picture); - - if (uv_csp != WEBP_YUV420) { - return WebPEncodingSetError(picture, VP8_ENC_ERROR_INVALID_CONFIGURATION); - } - - // alpha - a_width = has_alpha ? width : 0; - a_stride = a_width; - y_size = (uint64_t)y_stride * height; - uv_size = (uint64_t)uv_stride * uv_height; - a_size = (uint64_t)a_stride * height; - - total_size = y_size + a_size + 2 * uv_size; - - // Security and validation checks - if (width <= 0 || height <= 0 || // luma/alpha param error - uv_width <= 0 || uv_height <= 0) { // u/v param error - return WebPEncodingSetError(picture, VP8_ENC_ERROR_BAD_DIMENSION); - } - // allocate a new buffer. - mem = (uint8_t*)WebPSafeMalloc(total_size, sizeof(*mem)); - if (mem == NULL) { - return WebPEncodingSetError(picture, VP8_ENC_ERROR_OUT_OF_MEMORY); - } - - // From now on, we're in the clear, we can no longer fail... - picture->memory_ = (void*)mem; - picture->y_stride = y_stride; - picture->uv_stride = uv_stride; - picture->a_stride = a_stride; - - // TODO(skal): we could align the y/u/v planes and adjust stride. - picture->y = mem; - mem += y_size; - - picture->u = mem; - mem += uv_size; - picture->v = mem; - mem += uv_size; - - if (a_size > 0) { - picture->a = mem; - mem += a_size; - } - (void)mem; // makes the static analyzer happy - return 1; -} - -int WebPPictureAlloc(WebPPicture* picture) { - if (picture != NULL) { - const int width = picture->width; - const int height = picture->height; - - WebPPictureFree(picture); // erase previous buffer - - if (!picture->use_argb) { - return WebPPictureAllocYUVA(picture, width, height); - } else { - return WebPPictureAllocARGB(picture, width, height); - } - } - return 1; -} - -void WebPPictureFree(WebPPicture* picture) { - if (picture != NULL) { - WebPSafeFree(picture->memory_); - WebPSafeFree(picture->memory_argb_); - WebPPictureResetBuffers(picture); - } -} - -//------------------------------------------------------------------------------ -// WebPMemoryWriter: Write-to-memory - -void WebPMemoryWriterInit(WebPMemoryWriter* writer) { - writer->mem = NULL; - writer->size = 0; - writer->max_size = 0; -} - -int WebPMemoryWrite(const uint8_t* data, size_t data_size, - const WebPPicture* picture) { - WebPMemoryWriter* const w = (WebPMemoryWriter*)picture->custom_ptr; - uint64_t next_size; - if (w == NULL) { - return 1; - } - next_size = (uint64_t)w->size + data_size; - if (next_size > w->max_size) { - uint8_t* new_mem; - uint64_t next_max_size = 2ULL * w->max_size; - if (next_max_size < next_size) next_max_size = next_size; - if (next_max_size < 8192ULL) next_max_size = 8192ULL; - new_mem = (uint8_t*)WebPSafeMalloc(next_max_size, 1); - if (new_mem == NULL) { - return 0; - } - if (w->size > 0) { - memcpy(new_mem, w->mem, w->size); - } - WebPSafeFree(w->mem); - w->mem = new_mem; - // down-cast is ok, thanks to WebPSafeMalloc - w->max_size = (size_t)next_max_size; - } - if (data_size > 0) { - memcpy(w->mem + w->size, data, data_size); - w->size += data_size; - } - return 1; -} - -void WebPMemoryWriterClear(WebPMemoryWriter* writer) { - if (writer != NULL) { - WebPSafeFree(writer->mem); - writer->mem = NULL; - writer->size = 0; - writer->max_size = 0; - } -} - -//------------------------------------------------------------------------------ -// Simplest high-level calls: - -typedef int (*Importer)(WebPPicture* const, const uint8_t* const, int); - -static size_t Encode(const uint8_t* rgba, int width, int height, int stride, - Importer import, float quality_factor, int lossless, - uint8_t** output) { - WebPPicture pic; - WebPConfig config; - WebPMemoryWriter wrt; - int ok; - - if (output == NULL) return 0; - - if (!WebPConfigPreset(&config, WEBP_PRESET_DEFAULT, quality_factor) || - !WebPPictureInit(&pic)) { - return 0; // shouldn't happen, except if system installation is broken - } - - config.lossless = !!lossless; - pic.use_argb = !!lossless; - pic.width = width; - pic.height = height; - pic.writer = WebPMemoryWrite; - pic.custom_ptr = &wrt; - WebPMemoryWriterInit(&wrt); - - ok = import(&pic, rgba, stride) && WebPEncode(&config, &pic); - WebPPictureFree(&pic); - if (!ok) { - WebPMemoryWriterClear(&wrt); - *output = NULL; - return 0; - } - *output = wrt.mem; - return wrt.size; -} - -#define ENCODE_FUNC(NAME, IMPORTER) \ -size_t NAME(const uint8_t* in, int w, int h, int bps, float q, \ - uint8_t** out) { \ - return Encode(in, w, h, bps, IMPORTER, q, 0, out); \ -} - -ENCODE_FUNC(WebPEncodeRGB, WebPPictureImportRGB) -ENCODE_FUNC(WebPEncodeRGBA, WebPPictureImportRGBA) -#if !defined(WEBP_REDUCE_CSP) -ENCODE_FUNC(WebPEncodeBGR, WebPPictureImportBGR) -ENCODE_FUNC(WebPEncodeBGRA, WebPPictureImportBGRA) -#endif // WEBP_REDUCE_CSP - -#undef ENCODE_FUNC - -#define LOSSLESS_DEFAULT_QUALITY 70. -#define LOSSLESS_ENCODE_FUNC(NAME, IMPORTER) \ -size_t NAME(const uint8_t* in, int w, int h, int bps, uint8_t** out) { \ - return Encode(in, w, h, bps, IMPORTER, LOSSLESS_DEFAULT_QUALITY, 1, out); \ -} - -LOSSLESS_ENCODE_FUNC(WebPEncodeLosslessRGB, WebPPictureImportRGB) -LOSSLESS_ENCODE_FUNC(WebPEncodeLosslessRGBA, WebPPictureImportRGBA) -#if !defined(WEBP_REDUCE_CSP) -LOSSLESS_ENCODE_FUNC(WebPEncodeLosslessBGR, WebPPictureImportBGR) -LOSSLESS_ENCODE_FUNC(WebPEncodeLosslessBGRA, WebPPictureImportBGRA) -#endif // WEBP_REDUCE_CSP - -#undef LOSSLESS_ENCODE_FUNC - -//------------------------------------------------------------------------------ diff --git a/Extended/libwebp/src/enc/picture_psnr_enc.c b/Extended/libwebp/src/enc/picture_psnr_enc.c deleted file mode 100644 index 1a2f0be..0000000 --- a/Extended/libwebp/src/enc/picture_psnr_enc.c +++ /dev/null @@ -1,258 +0,0 @@ -// Copyright 2014 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// WebPPicture tools for measuring distortion -// -// Author: Skal (pascal.massimino@gmail.com) - -#include "src/webp/encode.h" - -#if !(defined(WEBP_DISABLE_STATS) || defined(WEBP_REDUCE_SIZE)) - -#include -#include - -#include "src/dsp/dsp.h" -#include "src/enc/vp8i_enc.h" -#include "src/utils/utils.h" - -typedef double (*AccumulateFunc)(const uint8_t* src, int src_stride, - const uint8_t* ref, int ref_stride, - int w, int h); - -//------------------------------------------------------------------------------ -// local-min distortion -// -// For every pixel in the *reference* picture, we search for the local best -// match in the compressed image. This is not a symmetrical measure. - -#define RADIUS 2 // search radius. Shouldn't be too large. - -static double AccumulateLSIM(const uint8_t* src, int src_stride, - const uint8_t* ref, int ref_stride, - int w, int h) { - int x, y; - double total_sse = 0.; - for (y = 0; y < h; ++y) { - const int y_0 = (y - RADIUS < 0) ? 0 : y - RADIUS; - const int y_1 = (y + RADIUS + 1 >= h) ? h : y + RADIUS + 1; - for (x = 0; x < w; ++x) { - const int x_0 = (x - RADIUS < 0) ? 0 : x - RADIUS; - const int x_1 = (x + RADIUS + 1 >= w) ? w : x + RADIUS + 1; - double best_sse = 255. * 255.; - const double value = (double)ref[y * ref_stride + x]; - int i, j; - for (j = y_0; j < y_1; ++j) { - const uint8_t* const s = src + j * src_stride; - for (i = x_0; i < x_1; ++i) { - const double diff = s[i] - value; - const double sse = diff * diff; - if (sse < best_sse) best_sse = sse; - } - } - total_sse += best_sse; - } - } - return total_sse; -} -#undef RADIUS - -static double AccumulateSSE(const uint8_t* src, int src_stride, - const uint8_t* ref, int ref_stride, - int w, int h) { - int y; - double total_sse = 0.; - for (y = 0; y < h; ++y) { - total_sse += VP8AccumulateSSE(src, ref, w); - src += src_stride; - ref += ref_stride; - } - return total_sse; -} - -//------------------------------------------------------------------------------ - -static double AccumulateSSIM(const uint8_t* src, int src_stride, - const uint8_t* ref, int ref_stride, - int w, int h) { - const int w0 = (w < VP8_SSIM_KERNEL) ? w : VP8_SSIM_KERNEL; - const int w1 = w - VP8_SSIM_KERNEL - 1; - const int h0 = (h < VP8_SSIM_KERNEL) ? h : VP8_SSIM_KERNEL; - const int h1 = h - VP8_SSIM_KERNEL - 1; - int x, y; - double sum = 0.; - for (y = 0; y < h0; ++y) { - for (x = 0; x < w; ++x) { - sum += VP8SSIMGetClipped(src, src_stride, ref, ref_stride, x, y, w, h); - } - } - for (; y < h1; ++y) { - for (x = 0; x < w0; ++x) { - sum += VP8SSIMGetClipped(src, src_stride, ref, ref_stride, x, y, w, h); - } - for (; x < w1; ++x) { - const int off1 = x - VP8_SSIM_KERNEL + (y - VP8_SSIM_KERNEL) * src_stride; - const int off2 = x - VP8_SSIM_KERNEL + (y - VP8_SSIM_KERNEL) * ref_stride; - sum += VP8SSIMGet(src + off1, src_stride, ref + off2, ref_stride); - } - for (; x < w; ++x) { - sum += VP8SSIMGetClipped(src, src_stride, ref, ref_stride, x, y, w, h); - } - } - for (; y < h; ++y) { - for (x = 0; x < w; ++x) { - sum += VP8SSIMGetClipped(src, src_stride, ref, ref_stride, x, y, w, h); - } - } - return sum; -} - -//------------------------------------------------------------------------------ -// Distortion - -// Max value returned in case of exact similarity. -static const double kMinDistortion_dB = 99.; - -static double GetPSNR(double v, double size) { - return (v > 0. && size > 0.) ? -4.3429448 * log(v / (size * 255 * 255.)) - : kMinDistortion_dB; -} - -static double GetLogSSIM(double v, double size) { - v = (size > 0.) ? v / size : 1.; - return (v < 1.) ? -10.0 * log10(1. - v) : kMinDistortion_dB; -} - -int WebPPlaneDistortion(const uint8_t* src, size_t src_stride, - const uint8_t* ref, size_t ref_stride, - int width, int height, size_t x_step, - int type, float* distortion, float* result) { - uint8_t* allocated = NULL; - const AccumulateFunc metric = (type == 0) ? AccumulateSSE : - (type == 1) ? AccumulateSSIM : - AccumulateLSIM; - if (src == NULL || ref == NULL || - src_stride < x_step * width || ref_stride < x_step * width || - result == NULL || distortion == NULL) { - return 0; - } - - VP8SSIMDspInit(); - if (x_step != 1) { // extract a packed plane if needed - int x, y; - uint8_t* tmp1; - uint8_t* tmp2; - allocated = - (uint8_t*)WebPSafeMalloc(2ULL * width * height, sizeof(*allocated)); - if (allocated == NULL) return 0; - tmp1 = allocated; - tmp2 = tmp1 + (size_t)width * height; - for (y = 0; y < height; ++y) { - for (x = 0; x < width; ++x) { - tmp1[x + y * width] = src[x * x_step + y * src_stride]; - tmp2[x + y * width] = ref[x * x_step + y * ref_stride]; - } - } - src = tmp1; - ref = tmp2; - } - *distortion = (float)metric(src, width, ref, width, width, height); - WebPSafeFree(allocated); - - *result = (type == 1) ? (float)GetLogSSIM(*distortion, (double)width * height) - : (float)GetPSNR(*distortion, (double)width * height); - return 1; -} - -#ifdef WORDS_BIGENDIAN -#define BLUE_OFFSET 3 // uint32_t 0x000000ff is 0x00,00,00,ff in memory -#else -#define BLUE_OFFSET 0 // uint32_t 0x000000ff is 0xff,00,00,00 in memory -#endif - -int WebPPictureDistortion(const WebPPicture* src, const WebPPicture* ref, - int type, float results[5]) { - int w, h, c; - int ok = 0; - WebPPicture p0, p1; - double total_size = 0., total_distortion = 0.; - if (src == NULL || ref == NULL || - src->width != ref->width || src->height != ref->height || - results == NULL) { - return 0; - } - - VP8SSIMDspInit(); - if (!WebPPictureInit(&p0) || !WebPPictureInit(&p1)) return 0; - w = src->width; - h = src->height; - if (!WebPPictureView(src, 0, 0, w, h, &p0)) goto Error; - if (!WebPPictureView(ref, 0, 0, w, h, &p1)) goto Error; - - // We always measure distortion in ARGB space. - if (p0.use_argb == 0 && !WebPPictureYUVAToARGB(&p0)) goto Error; - if (p1.use_argb == 0 && !WebPPictureYUVAToARGB(&p1)) goto Error; - for (c = 0; c < 4; ++c) { - float distortion; - const size_t stride0 = 4 * (size_t)p0.argb_stride; - const size_t stride1 = 4 * (size_t)p1.argb_stride; - // results are reported as BGRA - const int offset = c ^ BLUE_OFFSET; - if (!WebPPlaneDistortion((const uint8_t*)p0.argb + offset, stride0, - (const uint8_t*)p1.argb + offset, stride1, - w, h, 4, type, &distortion, results + c)) { - goto Error; - } - total_distortion += distortion; - total_size += w * h; - } - - results[4] = (type == 1) ? (float)GetLogSSIM(total_distortion, total_size) - : (float)GetPSNR(total_distortion, total_size); - ok = 1; - - Error: - WebPPictureFree(&p0); - WebPPictureFree(&p1); - return ok; -} - -#undef BLUE_OFFSET - -#else // defined(WEBP_DISABLE_STATS) -int WebPPlaneDistortion(const uint8_t* src, size_t src_stride, - const uint8_t* ref, size_t ref_stride, - int width, int height, size_t x_step, - int type, float* distortion, float* result) { - (void)src; - (void)src_stride; - (void)ref; - (void)ref_stride; - (void)width; - (void)height; - (void)x_step; - (void)type; - if (distortion == NULL || result == NULL) return 0; - *distortion = 0.f; - *result = 0.f; - return 1; -} - -int WebPPictureDistortion(const WebPPicture* src, const WebPPicture* ref, - int type, float results[5]) { - int i; - (void)src; - (void)ref; - (void)type; - if (results == NULL) return 0; - for (i = 0; i < 5; ++i) results[i] = 0.f; - return 1; -} - -#endif // !defined(WEBP_DISABLE_STATS) diff --git a/Extended/libwebp/src/enc/picture_rescale_enc.c b/Extended/libwebp/src/enc/picture_rescale_enc.c deleted file mode 100644 index 58a6ae7..0000000 --- a/Extended/libwebp/src/enc/picture_rescale_enc.c +++ /dev/null @@ -1,309 +0,0 @@ -// Copyright 2014 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// WebPPicture tools: copy, crop, rescaling and view. -// -// Author: Skal (pascal.massimino@gmail.com) - -#include "src/webp/encode.h" - -#if !defined(WEBP_REDUCE_SIZE) - -#include -#include - -#include "src/enc/vp8i_enc.h" -#include "src/utils/rescaler_utils.h" -#include "src/utils/utils.h" - -#define HALVE(x) (((x) + 1) >> 1) - -// Grab the 'specs' (writer, *opaque, width, height...) from 'src' and copy them -// into 'dst'. Mark 'dst' as not owning any memory. -static void PictureGrabSpecs(const WebPPicture* const src, - WebPPicture* const dst) { - assert(src != NULL && dst != NULL); - *dst = *src; - WebPPictureResetBuffers(dst); -} - -//------------------------------------------------------------------------------ - -// Adjust top-left corner to chroma sample position. -static void SnapTopLeftPosition(const WebPPicture* const pic, - int* const left, int* const top) { - if (!pic->use_argb) { - *left &= ~1; - *top &= ~1; - } -} - -// Adjust top-left corner and verify that the sub-rectangle is valid. -static int AdjustAndCheckRectangle(const WebPPicture* const pic, - int* const left, int* const top, - int width, int height) { - SnapTopLeftPosition(pic, left, top); - if ((*left) < 0 || (*top) < 0) return 0; - if (width <= 0 || height <= 0) return 0; - if ((*left) + width > pic->width) return 0; - if ((*top) + height > pic->height) return 0; - return 1; -} - -int WebPPictureCopy(const WebPPicture* src, WebPPicture* dst) { - if (src == NULL || dst == NULL) return 0; - if (src == dst) return 1; - - PictureGrabSpecs(src, dst); - if (!WebPPictureAlloc(dst)) return 0; - - if (!src->use_argb) { - WebPCopyPlane(src->y, src->y_stride, - dst->y, dst->y_stride, dst->width, dst->height); - WebPCopyPlane(src->u, src->uv_stride, dst->u, dst->uv_stride, - HALVE(dst->width), HALVE(dst->height)); - WebPCopyPlane(src->v, src->uv_stride, dst->v, dst->uv_stride, - HALVE(dst->width), HALVE(dst->height)); - if (dst->a != NULL) { - WebPCopyPlane(src->a, src->a_stride, - dst->a, dst->a_stride, dst->width, dst->height); - } - } else { - WebPCopyPlane((const uint8_t*)src->argb, 4 * src->argb_stride, - (uint8_t*)dst->argb, 4 * dst->argb_stride, - 4 * dst->width, dst->height); - } - return 1; -} - -int WebPPictureIsView(const WebPPicture* picture) { - if (picture == NULL) return 0; - if (picture->use_argb) { - return (picture->memory_argb_ == NULL); - } - return (picture->memory_ == NULL); -} - -int WebPPictureView(const WebPPicture* src, - int left, int top, int width, int height, - WebPPicture* dst) { - if (src == NULL || dst == NULL) return 0; - - // verify rectangle position. - if (!AdjustAndCheckRectangle(src, &left, &top, width, height)) return 0; - - if (src != dst) { // beware of aliasing! We don't want to leak 'memory_'. - PictureGrabSpecs(src, dst); - } - dst->width = width; - dst->height = height; - if (!src->use_argb) { - dst->y = src->y + top * src->y_stride + left; - dst->u = src->u + (top >> 1) * src->uv_stride + (left >> 1); - dst->v = src->v + (top >> 1) * src->uv_stride + (left >> 1); - dst->y_stride = src->y_stride; - dst->uv_stride = src->uv_stride; - if (src->a != NULL) { - dst->a = src->a + top * src->a_stride + left; - dst->a_stride = src->a_stride; - } - } else { - dst->argb = src->argb + top * src->argb_stride + left; - dst->argb_stride = src->argb_stride; - } - return 1; -} - -//------------------------------------------------------------------------------ -// Picture cropping - -int WebPPictureCrop(WebPPicture* pic, - int left, int top, int width, int height) { - WebPPicture tmp; - - if (pic == NULL) return 0; - if (!AdjustAndCheckRectangle(pic, &left, &top, width, height)) return 0; - - PictureGrabSpecs(pic, &tmp); - tmp.width = width; - tmp.height = height; - if (!WebPPictureAlloc(&tmp)) return 0; - - if (!pic->use_argb) { - const int y_offset = top * pic->y_stride + left; - const int uv_offset = (top / 2) * pic->uv_stride + left / 2; - WebPCopyPlane(pic->y + y_offset, pic->y_stride, - tmp.y, tmp.y_stride, width, height); - WebPCopyPlane(pic->u + uv_offset, pic->uv_stride, - tmp.u, tmp.uv_stride, HALVE(width), HALVE(height)); - WebPCopyPlane(pic->v + uv_offset, pic->uv_stride, - tmp.v, tmp.uv_stride, HALVE(width), HALVE(height)); - - if (tmp.a != NULL) { - const int a_offset = top * pic->a_stride + left; - WebPCopyPlane(pic->a + a_offset, pic->a_stride, - tmp.a, tmp.a_stride, width, height); - } - } else { - const uint8_t* const src = - (const uint8_t*)(pic->argb + top * pic->argb_stride + left); - WebPCopyPlane(src, pic->argb_stride * 4, (uint8_t*)tmp.argb, - tmp.argb_stride * 4, width * 4, height); - } - WebPPictureFree(pic); - *pic = tmp; - return 1; -} - -//------------------------------------------------------------------------------ -// Simple picture rescaler - -static void RescalePlane(const uint8_t* src, - int src_width, int src_height, int src_stride, - uint8_t* dst, - int dst_width, int dst_height, int dst_stride, - rescaler_t* const work, - int num_channels) { - WebPRescaler rescaler; - int y = 0; - WebPRescalerInit(&rescaler, src_width, src_height, - dst, dst_width, dst_height, dst_stride, - num_channels, work); - while (y < src_height) { - y += WebPRescalerImport(&rescaler, src_height - y, - src + y * src_stride, src_stride); - WebPRescalerExport(&rescaler); - } -} - -static void AlphaMultiplyARGB(WebPPicture* const pic, int inverse) { - assert(pic->argb != NULL); - WebPMultARGBRows((uint8_t*)pic->argb, pic->argb_stride * sizeof(*pic->argb), - pic->width, pic->height, inverse); -} - -static void AlphaMultiplyY(WebPPicture* const pic, int inverse) { - if (pic->a != NULL) { - WebPMultRows(pic->y, pic->y_stride, pic->a, pic->a_stride, - pic->width, pic->height, inverse); - } -} - -int WebPPictureRescale(WebPPicture* pic, int width, int height) { - WebPPicture tmp; - int prev_width, prev_height; - rescaler_t* work; - - if (pic == NULL) return 0; - prev_width = pic->width; - prev_height = pic->height; - if (!WebPRescalerGetScaledDimensions( - prev_width, prev_height, &width, &height)) { - return 0; - } - - PictureGrabSpecs(pic, &tmp); - tmp.width = width; - tmp.height = height; - if (!WebPPictureAlloc(&tmp)) return 0; - - if (!pic->use_argb) { - work = (rescaler_t*)WebPSafeMalloc(2ULL * width, sizeof(*work)); - if (work == NULL) { - WebPPictureFree(&tmp); - return 0; - } - // If present, we need to rescale alpha first (for AlphaMultiplyY). - if (pic->a != NULL) { - WebPInitAlphaProcessing(); - RescalePlane(pic->a, prev_width, prev_height, pic->a_stride, - tmp.a, width, height, tmp.a_stride, work, 1); - } - - // We take transparency into account on the luma plane only. That's not - // totally exact blending, but still is a good approximation. - AlphaMultiplyY(pic, 0); - RescalePlane(pic->y, prev_width, prev_height, pic->y_stride, - tmp.y, width, height, tmp.y_stride, work, 1); - AlphaMultiplyY(&tmp, 1); - - RescalePlane(pic->u, - HALVE(prev_width), HALVE(prev_height), pic->uv_stride, - tmp.u, - HALVE(width), HALVE(height), tmp.uv_stride, work, 1); - RescalePlane(pic->v, - HALVE(prev_width), HALVE(prev_height), pic->uv_stride, - tmp.v, - HALVE(width), HALVE(height), tmp.uv_stride, work, 1); - } else { - work = (rescaler_t*)WebPSafeMalloc(2ULL * width * 4, sizeof(*work)); - if (work == NULL) { - WebPPictureFree(&tmp); - return 0; - } - // In order to correctly interpolate colors, we need to apply the alpha - // weighting first (black-matting), scale the RGB values, and remove - // the premultiplication afterward (while preserving the alpha channel). - WebPInitAlphaProcessing(); - AlphaMultiplyARGB(pic, 0); - RescalePlane((const uint8_t*)pic->argb, prev_width, prev_height, - pic->argb_stride * 4, - (uint8_t*)tmp.argb, width, height, - tmp.argb_stride * 4, - work, 4); - AlphaMultiplyARGB(&tmp, 1); - } - WebPPictureFree(pic); - WebPSafeFree(work); - *pic = tmp; - return 1; -} - -#else // defined(WEBP_REDUCE_SIZE) - -int WebPPictureCopy(const WebPPicture* src, WebPPicture* dst) { - (void)src; - (void)dst; - return 0; -} - -int WebPPictureIsView(const WebPPicture* picture) { - (void)picture; - return 0; -} - -int WebPPictureView(const WebPPicture* src, - int left, int top, int width, int height, - WebPPicture* dst) { - (void)src; - (void)left; - (void)top; - (void)width; - (void)height; - (void)dst; - return 0; -} - -int WebPPictureCrop(WebPPicture* pic, - int left, int top, int width, int height) { - (void)pic; - (void)left; - (void)top; - (void)width; - (void)height; - return 0; -} - -int WebPPictureRescale(WebPPicture* pic, int width, int height) { - (void)pic; - (void)width; - (void)height; - return 0; -} -#endif // !defined(WEBP_REDUCE_SIZE) diff --git a/Extended/libwebp/src/enc/picture_tools_enc.c b/Extended/libwebp/src/enc/picture_tools_enc.c deleted file mode 100644 index d0e8a49..0000000 --- a/Extended/libwebp/src/enc/picture_tools_enc.c +++ /dev/null @@ -1,278 +0,0 @@ -// Copyright 2014 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// WebPPicture tools: alpha handling, etc. -// -// Author: Skal (pascal.massimino@gmail.com) - -#include - -#include "src/enc/vp8i_enc.h" -#include "src/dsp/yuv.h" - -//------------------------------------------------------------------------------ -// Helper: clean up fully transparent area to help compressibility. - -#define SIZE 8 -#define SIZE2 (SIZE / 2) -static int IsTransparentARGBArea(const uint32_t* ptr, int stride, int size) { - int y, x; - for (y = 0; y < size; ++y) { - for (x = 0; x < size; ++x) { - if (ptr[x] & 0xff000000u) { - return 0; - } - } - ptr += stride; - } - return 1; -} - -static void Flatten(uint8_t* ptr, int v, int stride, int size) { - int y; - for (y = 0; y < size; ++y) { - memset(ptr, v, size); - ptr += stride; - } -} - -static void FlattenARGB(uint32_t* ptr, uint32_t v, int stride, int size) { - int x, y; - for (y = 0; y < size; ++y) { - for (x = 0; x < size; ++x) ptr[x] = v; - ptr += stride; - } -} - -// Smoothen the luma components of transparent pixels. Return true if the whole -// block is transparent. -static int SmoothenBlock(const uint8_t* a_ptr, int a_stride, uint8_t* y_ptr, - int y_stride, int width, int height) { - int sum = 0, count = 0; - int x, y; - const uint8_t* alpha_ptr = a_ptr; - uint8_t* luma_ptr = y_ptr; - for (y = 0; y < height; ++y) { - for (x = 0; x < width; ++x) { - if (alpha_ptr[x] != 0) { - ++count; - sum += luma_ptr[x]; - } - } - alpha_ptr += a_stride; - luma_ptr += y_stride; - } - if (count > 0 && count < width * height) { - const uint8_t avg_u8 = (uint8_t)(sum / count); - alpha_ptr = a_ptr; - luma_ptr = y_ptr; - for (y = 0; y < height; ++y) { - for (x = 0; x < width; ++x) { - if (alpha_ptr[x] == 0) luma_ptr[x] = avg_u8; - } - alpha_ptr += a_stride; - luma_ptr += y_stride; - } - } - return (count == 0); -} - -void WebPCleanupTransparentArea(WebPPicture* pic) { - int x, y, w, h; - if (pic == NULL) return; - w = pic->width / SIZE; - h = pic->height / SIZE; - - // note: we ignore the left-overs on right/bottom, except for SmoothenBlock(). - if (pic->use_argb) { - uint32_t argb_value = 0; - for (y = 0; y < h; ++y) { - int need_reset = 1; - for (x = 0; x < w; ++x) { - const int off = (y * pic->argb_stride + x) * SIZE; - if (IsTransparentARGBArea(pic->argb + off, pic->argb_stride, SIZE)) { - if (need_reset) { - argb_value = pic->argb[off]; - need_reset = 0; - } - FlattenARGB(pic->argb + off, argb_value, pic->argb_stride, SIZE); - } else { - need_reset = 1; - } - } - } - } else { - const int width = pic->width; - const int height = pic->height; - const int y_stride = pic->y_stride; - const int uv_stride = pic->uv_stride; - const int a_stride = pic->a_stride; - uint8_t* y_ptr = pic->y; - uint8_t* u_ptr = pic->u; - uint8_t* v_ptr = pic->v; - const uint8_t* a_ptr = pic->a; - int values[3] = { 0 }; - if (a_ptr == NULL || y_ptr == NULL || u_ptr == NULL || v_ptr == NULL) { - return; - } - for (y = 0; y + SIZE <= height; y += SIZE) { - int need_reset = 1; - for (x = 0; x + SIZE <= width; x += SIZE) { - if (SmoothenBlock(a_ptr + x, a_stride, y_ptr + x, y_stride, - SIZE, SIZE)) { - if (need_reset) { - values[0] = y_ptr[x]; - values[1] = u_ptr[x >> 1]; - values[2] = v_ptr[x >> 1]; - need_reset = 0; - } - Flatten(y_ptr + x, values[0], y_stride, SIZE); - Flatten(u_ptr + (x >> 1), values[1], uv_stride, SIZE2); - Flatten(v_ptr + (x >> 1), values[2], uv_stride, SIZE2); - } else { - need_reset = 1; - } - } - if (x < width) { - SmoothenBlock(a_ptr + x, a_stride, y_ptr + x, y_stride, - width - x, SIZE); - } - a_ptr += SIZE * a_stride; - y_ptr += SIZE * y_stride; - u_ptr += SIZE2 * uv_stride; - v_ptr += SIZE2 * uv_stride; - } - if (y < height) { - const int sub_height = height - y; - for (x = 0; x + SIZE <= width; x += SIZE) { - SmoothenBlock(a_ptr + x, a_stride, y_ptr + x, y_stride, - SIZE, sub_height); - } - if (x < width) { - SmoothenBlock(a_ptr + x, a_stride, y_ptr + x, y_stride, - width - x, sub_height); - } - } - } -} - -#undef SIZE -#undef SIZE2 - -void WebPCleanupTransparentAreaLossless(WebPPicture* const pic) { - int x, y, w, h; - uint32_t* argb; - assert(pic != NULL && pic->use_argb); - w = pic->width; - h = pic->height; - argb = pic->argb; - - for (y = 0; y < h; ++y) { - for (x = 0; x < w; ++x) { - if ((argb[x] & 0xff000000) == 0) { - argb[x] = 0x00000000; - } - } - argb += pic->argb_stride; - } -} - -//------------------------------------------------------------------------------ -// Blend color and remove transparency info - -#define BLEND(V0, V1, ALPHA) \ - ((((V0) * (255 - (ALPHA)) + (V1) * (ALPHA)) * 0x101 + 256) >> 16) -#define BLEND_10BIT(V0, V1, ALPHA) \ - ((((V0) * (1020 - (ALPHA)) + (V1) * (ALPHA)) * 0x101 + 1024) >> 18) - -static WEBP_INLINE uint32_t MakeARGB32(int r, int g, int b) { - return (0xff000000u | (r << 16) | (g << 8) | b); -} - -void WebPBlendAlpha(WebPPicture* pic, uint32_t background_rgb) { - const int red = (background_rgb >> 16) & 0xff; - const int green = (background_rgb >> 8) & 0xff; - const int blue = (background_rgb >> 0) & 0xff; - int x, y; - if (pic == NULL) return; - if (!pic->use_argb) { - const int uv_width = (pic->width >> 1); // omit last pixel during u/v loop - const int Y0 = VP8RGBToY(red, green, blue, YUV_HALF); - // VP8RGBToU/V expects the u/v values summed over four pixels - const int U0 = VP8RGBToU(4 * red, 4 * green, 4 * blue, 4 * YUV_HALF); - const int V0 = VP8RGBToV(4 * red, 4 * green, 4 * blue, 4 * YUV_HALF); - const int has_alpha = pic->colorspace & WEBP_CSP_ALPHA_BIT; - uint8_t* y_ptr = pic->y; - uint8_t* u_ptr = pic->u; - uint8_t* v_ptr = pic->v; - uint8_t* a_ptr = pic->a; - if (!has_alpha || a_ptr == NULL) return; // nothing to do - for (y = 0; y < pic->height; ++y) { - // Luma blending - for (x = 0; x < pic->width; ++x) { - const uint8_t alpha = a_ptr[x]; - if (alpha < 0xff) { - y_ptr[x] = BLEND(Y0, y_ptr[x], alpha); - } - } - // Chroma blending every even line - if ((y & 1) == 0) { - uint8_t* const a_ptr2 = - (y + 1 == pic->height) ? a_ptr : a_ptr + pic->a_stride; - for (x = 0; x < uv_width; ++x) { - // Average four alpha values into a single blending weight. - // TODO(skal): might lead to visible contouring. Can we do better? - const uint32_t alpha = - a_ptr[2 * x + 0] + a_ptr[2 * x + 1] + - a_ptr2[2 * x + 0] + a_ptr2[2 * x + 1]; - u_ptr[x] = BLEND_10BIT(U0, u_ptr[x], alpha); - v_ptr[x] = BLEND_10BIT(V0, v_ptr[x], alpha); - } - if (pic->width & 1) { // rightmost pixel - const uint32_t alpha = 2 * (a_ptr[2 * x + 0] + a_ptr2[2 * x + 0]); - u_ptr[x] = BLEND_10BIT(U0, u_ptr[x], alpha); - v_ptr[x] = BLEND_10BIT(V0, v_ptr[x], alpha); - } - } else { - u_ptr += pic->uv_stride; - v_ptr += pic->uv_stride; - } - memset(a_ptr, 0xff, pic->width); // reset alpha value to opaque - a_ptr += pic->a_stride; - y_ptr += pic->y_stride; - } - } else { - uint32_t* argb = pic->argb; - const uint32_t background = MakeARGB32(red, green, blue); - for (y = 0; y < pic->height; ++y) { - for (x = 0; x < pic->width; ++x) { - const int alpha = (argb[x] >> 24) & 0xff; - if (alpha != 0xff) { - if (alpha > 0) { - int r = (argb[x] >> 16) & 0xff; - int g = (argb[x] >> 8) & 0xff; - int b = (argb[x] >> 0) & 0xff; - r = BLEND(red, r, alpha); - g = BLEND(green, g, alpha); - b = BLEND(blue, b, alpha); - argb[x] = MakeARGB32(r, g, b); - } else { - argb[x] = background; - } - } - } - argb += pic->argb_stride; - } - } -} - -#undef BLEND -#undef BLEND_10BIT - -//------------------------------------------------------------------------------ diff --git a/Extended/libwebp/src/enc/predictor_enc.c b/Extended/libwebp/src/enc/predictor_enc.c deleted file mode 100644 index 2e6762e..0000000 --- a/Extended/libwebp/src/enc/predictor_enc.c +++ /dev/null @@ -1,772 +0,0 @@ -// Copyright 2016 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Image transform methods for lossless encoder. -// -// Authors: Vikas Arora (vikaas.arora@gmail.com) -// Jyrki Alakuijala (jyrki@google.com) -// Urvang Joshi (urvang@google.com) -// Vincent Rabaud (vrabaud@google.com) - -#include "src/dsp/lossless.h" -#include "src/dsp/lossless_common.h" -#include "src/enc/vp8li_enc.h" - -#define MAX_DIFF_COST (1e30f) - -static const float kSpatialPredictorBias = 15.f; -static const int kPredLowEffort = 11; -static const uint32_t kMaskAlpha = 0xff000000; - -// Mostly used to reduce code size + readability -static WEBP_INLINE int GetMin(int a, int b) { return (a > b) ? b : a; } - -//------------------------------------------------------------------------------ -// Methods to calculate Entropy (Shannon). - -static float PredictionCostSpatial(const int counts[256], int weight_0, - double exp_val) { - const int significant_symbols = 256 >> 4; - const double exp_decay_factor = 0.6; - double bits = weight_0 * counts[0]; - int i; - for (i = 1; i < significant_symbols; ++i) { - bits += exp_val * (counts[i] + counts[256 - i]); - exp_val *= exp_decay_factor; - } - return (float)(-0.1 * bits); -} - -static float PredictionCostSpatialHistogram(const int accumulated[4][256], - const int tile[4][256]) { - int i; - double retval = 0; - for (i = 0; i < 4; ++i) { - const double kExpValue = 0.94; - retval += PredictionCostSpatial(tile[i], 1, kExpValue); - retval += VP8LCombinedShannonEntropy(tile[i], accumulated[i]); - } - return (float)retval; -} - -static WEBP_INLINE void UpdateHisto(int histo_argb[4][256], uint32_t argb) { - ++histo_argb[0][argb >> 24]; - ++histo_argb[1][(argb >> 16) & 0xff]; - ++histo_argb[2][(argb >> 8) & 0xff]; - ++histo_argb[3][argb & 0xff]; -} - -//------------------------------------------------------------------------------ -// Spatial transform functions. - -static WEBP_INLINE void PredictBatch(int mode, int x_start, int y, - int num_pixels, const uint32_t* current, - const uint32_t* upper, uint32_t* out) { - if (x_start == 0) { - if (y == 0) { - // ARGB_BLACK. - VP8LPredictorsSub[0](current, NULL, 1, out); - } else { - // Top one. - VP8LPredictorsSub[2](current, upper, 1, out); - } - ++x_start; - ++out; - --num_pixels; - } - if (y == 0) { - // Left one. - VP8LPredictorsSub[1](current + x_start, NULL, num_pixels, out); - } else { - VP8LPredictorsSub[mode](current + x_start, upper + x_start, num_pixels, - out); - } -} - -#if (WEBP_NEAR_LOSSLESS == 1) -static WEBP_INLINE int GetMax(int a, int b) { return (a < b) ? b : a; } - -static int MaxDiffBetweenPixels(uint32_t p1, uint32_t p2) { - const int diff_a = abs((int)(p1 >> 24) - (int)(p2 >> 24)); - const int diff_r = abs((int)((p1 >> 16) & 0xff) - (int)((p2 >> 16) & 0xff)); - const int diff_g = abs((int)((p1 >> 8) & 0xff) - (int)((p2 >> 8) & 0xff)); - const int diff_b = abs((int)(p1 & 0xff) - (int)(p2 & 0xff)); - return GetMax(GetMax(diff_a, diff_r), GetMax(diff_g, diff_b)); -} - -static int MaxDiffAroundPixel(uint32_t current, uint32_t up, uint32_t down, - uint32_t left, uint32_t right) { - const int diff_up = MaxDiffBetweenPixels(current, up); - const int diff_down = MaxDiffBetweenPixels(current, down); - const int diff_left = MaxDiffBetweenPixels(current, left); - const int diff_right = MaxDiffBetweenPixels(current, right); - return GetMax(GetMax(diff_up, diff_down), GetMax(diff_left, diff_right)); -} - -static uint32_t AddGreenToBlueAndRed(uint32_t argb) { - const uint32_t green = (argb >> 8) & 0xff; - uint32_t red_blue = argb & 0x00ff00ffu; - red_blue += (green << 16) | green; - red_blue &= 0x00ff00ffu; - return (argb & 0xff00ff00u) | red_blue; -} - -static void MaxDiffsForRow(int width, int stride, const uint32_t* const argb, - uint8_t* const max_diffs, int used_subtract_green) { - uint32_t current, up, down, left, right; - int x; - if (width <= 2) return; - current = argb[0]; - right = argb[1]; - if (used_subtract_green) { - current = AddGreenToBlueAndRed(current); - right = AddGreenToBlueAndRed(right); - } - // max_diffs[0] and max_diffs[width - 1] are never used. - for (x = 1; x < width - 1; ++x) { - up = argb[-stride + x]; - down = argb[stride + x]; - left = current; - current = right; - right = argb[x + 1]; - if (used_subtract_green) { - up = AddGreenToBlueAndRed(up); - down = AddGreenToBlueAndRed(down); - right = AddGreenToBlueAndRed(right); - } - max_diffs[x] = MaxDiffAroundPixel(current, up, down, left, right); - } -} - -// Quantize the difference between the actual component value and its prediction -// to a multiple of quantization, working modulo 256, taking care not to cross -// a boundary (inclusive upper limit). -static uint8_t NearLosslessComponent(uint8_t value, uint8_t predict, - uint8_t boundary, int quantization) { - const int residual = (value - predict) & 0xff; - const int boundary_residual = (boundary - predict) & 0xff; - const int lower = residual & ~(quantization - 1); - const int upper = lower + quantization; - // Resolve ties towards a value closer to the prediction (i.e. towards lower - // if value comes after prediction and towards upper otherwise). - const int bias = ((boundary - value) & 0xff) < boundary_residual; - if (residual - lower < upper - residual + bias) { - // lower is closer to residual than upper. - if (residual > boundary_residual && lower <= boundary_residual) { - // Halve quantization step to avoid crossing boundary. This midpoint is - // on the same side of boundary as residual because midpoint >= residual - // (since lower is closer than upper) and residual is above the boundary. - return lower + (quantization >> 1); - } - return lower; - } else { - // upper is closer to residual than lower. - if (residual <= boundary_residual && upper > boundary_residual) { - // Halve quantization step to avoid crossing boundary. This midpoint is - // on the same side of boundary as residual because midpoint <= residual - // (since upper is closer than lower) and residual is below the boundary. - return lower + (quantization >> 1); - } - return upper & 0xff; - } -} - -static WEBP_INLINE uint8_t NearLosslessDiff(uint8_t a, uint8_t b) { - return (uint8_t)((((int)(a) - (int)(b))) & 0xff); -} - -// Quantize every component of the difference between the actual pixel value and -// its prediction to a multiple of a quantization (a power of 2, not larger than -// max_quantization which is a power of 2, smaller than max_diff). Take care if -// value and predict have undergone subtract green, which means that red and -// blue are represented as offsets from green. -static uint32_t NearLossless(uint32_t value, uint32_t predict, - int max_quantization, int max_diff, - int used_subtract_green) { - int quantization; - uint8_t new_green = 0; - uint8_t green_diff = 0; - uint8_t a, r, g, b; - if (max_diff <= 2) { - return VP8LSubPixels(value, predict); - } - quantization = max_quantization; - while (quantization >= max_diff) { - quantization >>= 1; - } - if ((value >> 24) == 0 || (value >> 24) == 0xff) { - // Preserve transparency of fully transparent or fully opaque pixels. - a = NearLosslessDiff((value >> 24) & 0xff, (predict >> 24) & 0xff); - } else { - a = NearLosslessComponent(value >> 24, predict >> 24, 0xff, quantization); - } - g = NearLosslessComponent((value >> 8) & 0xff, (predict >> 8) & 0xff, 0xff, - quantization); - if (used_subtract_green) { - // The green offset will be added to red and blue components during decoding - // to obtain the actual red and blue values. - new_green = ((predict >> 8) + g) & 0xff; - // The amount by which green has been adjusted during quantization. It is - // subtracted from red and blue for compensation, to avoid accumulating two - // quantization errors in them. - green_diff = NearLosslessDiff(new_green, (value >> 8) & 0xff); - } - r = NearLosslessComponent(NearLosslessDiff((value >> 16) & 0xff, green_diff), - (predict >> 16) & 0xff, 0xff - new_green, - quantization); - b = NearLosslessComponent(NearLosslessDiff(value & 0xff, green_diff), - predict & 0xff, 0xff - new_green, quantization); - return ((uint32_t)a << 24) | ((uint32_t)r << 16) | ((uint32_t)g << 8) | b; -} -#endif // (WEBP_NEAR_LOSSLESS == 1) - -// Stores the difference between the pixel and its prediction in "out". -// In case of a lossy encoding, updates the source image to avoid propagating -// the deviation further to pixels which depend on the current pixel for their -// predictions. -static WEBP_INLINE void GetResidual( - int width, int height, uint32_t* const upper_row, - uint32_t* const current_row, const uint8_t* const max_diffs, int mode, - int x_start, int x_end, int y, int max_quantization, int exact, - int used_subtract_green, uint32_t* const out) { - if (exact) { - PredictBatch(mode, x_start, y, x_end - x_start, current_row, upper_row, - out); - } else { - const VP8LPredictorFunc pred_func = VP8LPredictors[mode]; - int x; - for (x = x_start; x < x_end; ++x) { - uint32_t predict; - uint32_t residual; - if (y == 0) { - predict = (x == 0) ? ARGB_BLACK : current_row[x - 1]; // Left. - } else if (x == 0) { - predict = upper_row[x]; // Top. - } else { - predict = pred_func(current_row[x - 1], upper_row + x); - } -#if (WEBP_NEAR_LOSSLESS == 1) - if (max_quantization == 1 || mode == 0 || y == 0 || y == height - 1 || - x == 0 || x == width - 1) { - residual = VP8LSubPixels(current_row[x], predict); - } else { - residual = NearLossless(current_row[x], predict, max_quantization, - max_diffs[x], used_subtract_green); - // Update the source image. - current_row[x] = VP8LAddPixels(predict, residual); - // x is never 0 here so we do not need to update upper_row like below. - } -#else - (void)max_diffs; - (void)height; - (void)max_quantization; - (void)used_subtract_green; - residual = VP8LSubPixels(current_row[x], predict); -#endif - if ((current_row[x] & kMaskAlpha) == 0) { - // If alpha is 0, cleanup RGB. We can choose the RGB values of the - // residual for best compression. The prediction of alpha itself can be - // non-zero and must be kept though. We choose RGB of the residual to be - // 0. - residual &= kMaskAlpha; - // Update the source image. - current_row[x] = predict & ~kMaskAlpha; - // The prediction for the rightmost pixel in a row uses the leftmost - // pixel - // in that row as its top-right context pixel. Hence if we change the - // leftmost pixel of current_row, the corresponding change must be - // applied - // to upper_row as well where top-right context is being read from. - if (x == 0 && y != 0) upper_row[width] = current_row[0]; - } - out[x - x_start] = residual; - } - } -} - -// Returns best predictor and updates the accumulated histogram. -// If max_quantization > 1, assumes that near lossless processing will be -// applied, quantizing residuals to multiples of quantization levels up to -// max_quantization (the actual quantization level depends on smoothness near -// the given pixel). -static int GetBestPredictorForTile(int width, int height, - int tile_x, int tile_y, int bits, - int accumulated[4][256], - uint32_t* const argb_scratch, - const uint32_t* const argb, - int max_quantization, - int exact, int used_subtract_green, - const uint32_t* const modes) { - const int kNumPredModes = 14; - const int start_x = tile_x << bits; - const int start_y = tile_y << bits; - const int tile_size = 1 << bits; - const int max_y = GetMin(tile_size, height - start_y); - const int max_x = GetMin(tile_size, width - start_x); - // Whether there exist columns just outside the tile. - const int have_left = (start_x > 0); - // Position and size of the strip covering the tile and adjacent columns if - // they exist. - const int context_start_x = start_x - have_left; -#if (WEBP_NEAR_LOSSLESS == 1) - const int context_width = max_x + have_left + (max_x < width - start_x); -#endif - const int tiles_per_row = VP8LSubSampleSize(width, bits); - // Prediction modes of the left and above neighbor tiles. - const int left_mode = (tile_x > 0) ? - (modes[tile_y * tiles_per_row + tile_x - 1] >> 8) & 0xff : 0xff; - const int above_mode = (tile_y > 0) ? - (modes[(tile_y - 1) * tiles_per_row + tile_x] >> 8) & 0xff : 0xff; - // The width of upper_row and current_row is one pixel larger than image width - // to allow the top right pixel to point to the leftmost pixel of the next row - // when at the right edge. - uint32_t* upper_row = argb_scratch; - uint32_t* current_row = upper_row + width + 1; - uint8_t* const max_diffs = (uint8_t*)(current_row + width + 1); - float best_diff = MAX_DIFF_COST; - int best_mode = 0; - int mode; - int histo_stack_1[4][256]; - int histo_stack_2[4][256]; - // Need pointers to be able to swap arrays. - int (*histo_argb)[256] = histo_stack_1; - int (*best_histo)[256] = histo_stack_2; - int i, j; - uint32_t residuals[1 << MAX_TRANSFORM_BITS]; - assert(bits <= MAX_TRANSFORM_BITS); - assert(max_x <= (1 << MAX_TRANSFORM_BITS)); - - for (mode = 0; mode < kNumPredModes; ++mode) { - float cur_diff; - int relative_y; - memset(histo_argb, 0, sizeof(histo_stack_1)); - if (start_y > 0) { - // Read the row above the tile which will become the first upper_row. - // Include a pixel to the left if it exists; include a pixel to the right - // in all cases (wrapping to the leftmost pixel of the next row if it does - // not exist). - memcpy(current_row + context_start_x, - argb + (start_y - 1) * width + context_start_x, - sizeof(*argb) * (max_x + have_left + 1)); - } - for (relative_y = 0; relative_y < max_y; ++relative_y) { - const int y = start_y + relative_y; - int relative_x; - uint32_t* tmp = upper_row; - upper_row = current_row; - current_row = tmp; - // Read current_row. Include a pixel to the left if it exists; include a - // pixel to the right in all cases except at the bottom right corner of - // the image (wrapping to the leftmost pixel of the next row if it does - // not exist in the current row). - memcpy(current_row + context_start_x, - argb + y * width + context_start_x, - sizeof(*argb) * (max_x + have_left + (y + 1 < height))); -#if (WEBP_NEAR_LOSSLESS == 1) - if (max_quantization > 1 && y >= 1 && y + 1 < height) { - MaxDiffsForRow(context_width, width, argb + y * width + context_start_x, - max_diffs + context_start_x, used_subtract_green); - } -#endif - - GetResidual(width, height, upper_row, current_row, max_diffs, mode, - start_x, start_x + max_x, y, max_quantization, exact, - used_subtract_green, residuals); - for (relative_x = 0; relative_x < max_x; ++relative_x) { - UpdateHisto(histo_argb, residuals[relative_x]); - } - } - cur_diff = PredictionCostSpatialHistogram( - (const int (*)[256])accumulated, (const int (*)[256])histo_argb); - // Favor keeping the areas locally similar. - if (mode == left_mode) cur_diff -= kSpatialPredictorBias; - if (mode == above_mode) cur_diff -= kSpatialPredictorBias; - - if (cur_diff < best_diff) { - int (*tmp)[256] = histo_argb; - histo_argb = best_histo; - best_histo = tmp; - best_diff = cur_diff; - best_mode = mode; - } - } - - for (i = 0; i < 4; i++) { - for (j = 0; j < 256; j++) { - accumulated[i][j] += best_histo[i][j]; - } - } - - return best_mode; -} - -// Converts pixels of the image to residuals with respect to predictions. -// If max_quantization > 1, applies near lossless processing, quantizing -// residuals to multiples of quantization levels up to max_quantization -// (the actual quantization level depends on smoothness near the given pixel). -static void CopyImageWithPrediction(int width, int height, - int bits, uint32_t* const modes, - uint32_t* const argb_scratch, - uint32_t* const argb, - int low_effort, int max_quantization, - int exact, int used_subtract_green) { - const int tiles_per_row = VP8LSubSampleSize(width, bits); - // The width of upper_row and current_row is one pixel larger than image width - // to allow the top right pixel to point to the leftmost pixel of the next row - // when at the right edge. - uint32_t* upper_row = argb_scratch; - uint32_t* current_row = upper_row + width + 1; - uint8_t* current_max_diffs = (uint8_t*)(current_row + width + 1); -#if (WEBP_NEAR_LOSSLESS == 1) - uint8_t* lower_max_diffs = current_max_diffs + width; -#endif - int y; - - for (y = 0; y < height; ++y) { - int x; - uint32_t* const tmp32 = upper_row; - upper_row = current_row; - current_row = tmp32; - memcpy(current_row, argb + y * width, - sizeof(*argb) * (width + (y + 1 < height))); - - if (low_effort) { - PredictBatch(kPredLowEffort, 0, y, width, current_row, upper_row, - argb + y * width); - } else { -#if (WEBP_NEAR_LOSSLESS == 1) - if (max_quantization > 1) { - // Compute max_diffs for the lower row now, because that needs the - // contents of argb for the current row, which we will overwrite with - // residuals before proceeding with the next row. - uint8_t* const tmp8 = current_max_diffs; - current_max_diffs = lower_max_diffs; - lower_max_diffs = tmp8; - if (y + 2 < height) { - MaxDiffsForRow(width, width, argb + (y + 1) * width, lower_max_diffs, - used_subtract_green); - } - } -#endif - for (x = 0; x < width;) { - const int mode = - (modes[(y >> bits) * tiles_per_row + (x >> bits)] >> 8) & 0xff; - int x_end = x + (1 << bits); - if (x_end > width) x_end = width; - GetResidual(width, height, upper_row, current_row, current_max_diffs, - mode, x, x_end, y, max_quantization, exact, - used_subtract_green, argb + y * width + x); - x = x_end; - } - } - } -} - -// Finds the best predictor for each tile, and converts the image to residuals -// with respect to predictions. If near_lossless_quality < 100, applies -// near lossless processing, shaving off more bits of residuals for lower -// qualities. -void VP8LResidualImage(int width, int height, int bits, int low_effort, - uint32_t* const argb, uint32_t* const argb_scratch, - uint32_t* const image, int near_lossless_quality, - int exact, int used_subtract_green) { - const int tiles_per_row = VP8LSubSampleSize(width, bits); - const int tiles_per_col = VP8LSubSampleSize(height, bits); - int tile_y; - int histo[4][256]; - const int max_quantization = 1 << VP8LNearLosslessBits(near_lossless_quality); - if (low_effort) { - int i; - for (i = 0; i < tiles_per_row * tiles_per_col; ++i) { - image[i] = ARGB_BLACK | (kPredLowEffort << 8); - } - } else { - memset(histo, 0, sizeof(histo)); - for (tile_y = 0; tile_y < tiles_per_col; ++tile_y) { - int tile_x; - for (tile_x = 0; tile_x < tiles_per_row; ++tile_x) { - const int pred = GetBestPredictorForTile(width, height, tile_x, tile_y, - bits, histo, argb_scratch, argb, max_quantization, exact, - used_subtract_green, image); - image[tile_y * tiles_per_row + tile_x] = ARGB_BLACK | (pred << 8); - } - } - } - - CopyImageWithPrediction(width, height, bits, image, argb_scratch, argb, - low_effort, max_quantization, exact, - used_subtract_green); -} - -//------------------------------------------------------------------------------ -// Color transform functions. - -static WEBP_INLINE void MultipliersClear(VP8LMultipliers* const m) { - m->green_to_red_ = 0; - m->green_to_blue_ = 0; - m->red_to_blue_ = 0; -} - -static WEBP_INLINE void ColorCodeToMultipliers(uint32_t color_code, - VP8LMultipliers* const m) { - m->green_to_red_ = (color_code >> 0) & 0xff; - m->green_to_blue_ = (color_code >> 8) & 0xff; - m->red_to_blue_ = (color_code >> 16) & 0xff; -} - -static WEBP_INLINE uint32_t MultipliersToColorCode( - const VP8LMultipliers* const m) { - return 0xff000000u | - ((uint32_t)(m->red_to_blue_) << 16) | - ((uint32_t)(m->green_to_blue_) << 8) | - m->green_to_red_; -} - -static float PredictionCostCrossColor(const int accumulated[256], - const int counts[256]) { - // Favor low entropy, locally and globally. - // Favor small absolute values for PredictionCostSpatial - static const double kExpValue = 2.4; - return VP8LCombinedShannonEntropy(counts, accumulated) + - PredictionCostSpatial(counts, 3, kExpValue); -} - -static float GetPredictionCostCrossColorRed( - const uint32_t* argb, int stride, int tile_width, int tile_height, - VP8LMultipliers prev_x, VP8LMultipliers prev_y, int green_to_red, - const int accumulated_red_histo[256]) { - int histo[256] = { 0 }; - float cur_diff; - - VP8LCollectColorRedTransforms(argb, stride, tile_width, tile_height, - green_to_red, histo); - - cur_diff = PredictionCostCrossColor(accumulated_red_histo, histo); - if ((uint8_t)green_to_red == prev_x.green_to_red_) { - cur_diff -= 3; // favor keeping the areas locally similar - } - if ((uint8_t)green_to_red == prev_y.green_to_red_) { - cur_diff -= 3; // favor keeping the areas locally similar - } - if (green_to_red == 0) { - cur_diff -= 3; - } - return cur_diff; -} - -static void GetBestGreenToRed( - const uint32_t* argb, int stride, int tile_width, int tile_height, - VP8LMultipliers prev_x, VP8LMultipliers prev_y, int quality, - const int accumulated_red_histo[256], VP8LMultipliers* const best_tx) { - const int kMaxIters = 4 + ((7 * quality) >> 8); // in range [4..6] - int green_to_red_best = 0; - int iter, offset; - float best_diff = GetPredictionCostCrossColorRed( - argb, stride, tile_width, tile_height, prev_x, prev_y, - green_to_red_best, accumulated_red_histo); - for (iter = 0; iter < kMaxIters; ++iter) { - // ColorTransformDelta is a 3.5 bit fixed point, so 32 is equal to - // one in color computation. Having initial delta here as 1 is sufficient - // to explore the range of (-2, 2). - const int delta = 32 >> iter; - // Try a negative and a positive delta from the best known value. - for (offset = -delta; offset <= delta; offset += 2 * delta) { - const int green_to_red_cur = offset + green_to_red_best; - const float cur_diff = GetPredictionCostCrossColorRed( - argb, stride, tile_width, tile_height, prev_x, prev_y, - green_to_red_cur, accumulated_red_histo); - if (cur_diff < best_diff) { - best_diff = cur_diff; - green_to_red_best = green_to_red_cur; - } - } - } - best_tx->green_to_red_ = (green_to_red_best & 0xff); -} - -static float GetPredictionCostCrossColorBlue( - const uint32_t* argb, int stride, int tile_width, int tile_height, - VP8LMultipliers prev_x, VP8LMultipliers prev_y, - int green_to_blue, int red_to_blue, const int accumulated_blue_histo[256]) { - int histo[256] = { 0 }; - float cur_diff; - - VP8LCollectColorBlueTransforms(argb, stride, tile_width, tile_height, - green_to_blue, red_to_blue, histo); - - cur_diff = PredictionCostCrossColor(accumulated_blue_histo, histo); - if ((uint8_t)green_to_blue == prev_x.green_to_blue_) { - cur_diff -= 3; // favor keeping the areas locally similar - } - if ((uint8_t)green_to_blue == prev_y.green_to_blue_) { - cur_diff -= 3; // favor keeping the areas locally similar - } - if ((uint8_t)red_to_blue == prev_x.red_to_blue_) { - cur_diff -= 3; // favor keeping the areas locally similar - } - if ((uint8_t)red_to_blue == prev_y.red_to_blue_) { - cur_diff -= 3; // favor keeping the areas locally similar - } - if (green_to_blue == 0) { - cur_diff -= 3; - } - if (red_to_blue == 0) { - cur_diff -= 3; - } - return cur_diff; -} - -#define kGreenRedToBlueNumAxis 8 -#define kGreenRedToBlueMaxIters 7 -static void GetBestGreenRedToBlue( - const uint32_t* argb, int stride, int tile_width, int tile_height, - VP8LMultipliers prev_x, VP8LMultipliers prev_y, int quality, - const int accumulated_blue_histo[256], - VP8LMultipliers* const best_tx) { - const int8_t offset[kGreenRedToBlueNumAxis][2] = - {{0, -1}, {0, 1}, {-1, 0}, {1, 0}, {-1, -1}, {-1, 1}, {1, -1}, {1, 1}}; - const int8_t delta_lut[kGreenRedToBlueMaxIters] = { 16, 16, 8, 4, 2, 2, 2 }; - const int iters = - (quality < 25) ? 1 : (quality > 50) ? kGreenRedToBlueMaxIters : 4; - int green_to_blue_best = 0; - int red_to_blue_best = 0; - int iter; - // Initial value at origin: - float best_diff = GetPredictionCostCrossColorBlue( - argb, stride, tile_width, tile_height, prev_x, prev_y, - green_to_blue_best, red_to_blue_best, accumulated_blue_histo); - for (iter = 0; iter < iters; ++iter) { - const int delta = delta_lut[iter]; - int axis; - for (axis = 0; axis < kGreenRedToBlueNumAxis; ++axis) { - const int green_to_blue_cur = - offset[axis][0] * delta + green_to_blue_best; - const int red_to_blue_cur = offset[axis][1] * delta + red_to_blue_best; - const float cur_diff = GetPredictionCostCrossColorBlue( - argb, stride, tile_width, tile_height, prev_x, prev_y, - green_to_blue_cur, red_to_blue_cur, accumulated_blue_histo); - if (cur_diff < best_diff) { - best_diff = cur_diff; - green_to_blue_best = green_to_blue_cur; - red_to_blue_best = red_to_blue_cur; - } - if (quality < 25 && iter == 4) { - // Only axis aligned diffs for lower quality. - break; // next iter. - } - } - if (delta == 2 && green_to_blue_best == 0 && red_to_blue_best == 0) { - // Further iterations would not help. - break; // out of iter-loop. - } - } - best_tx->green_to_blue_ = green_to_blue_best & 0xff; - best_tx->red_to_blue_ = red_to_blue_best & 0xff; -} -#undef kGreenRedToBlueMaxIters -#undef kGreenRedToBlueNumAxis - -static VP8LMultipliers GetBestColorTransformForTile( - int tile_x, int tile_y, int bits, - VP8LMultipliers prev_x, - VP8LMultipliers prev_y, - int quality, int xsize, int ysize, - const int accumulated_red_histo[256], - const int accumulated_blue_histo[256], - const uint32_t* const argb) { - const int max_tile_size = 1 << bits; - const int tile_y_offset = tile_y * max_tile_size; - const int tile_x_offset = tile_x * max_tile_size; - const int all_x_max = GetMin(tile_x_offset + max_tile_size, xsize); - const int all_y_max = GetMin(tile_y_offset + max_tile_size, ysize); - const int tile_width = all_x_max - tile_x_offset; - const int tile_height = all_y_max - tile_y_offset; - const uint32_t* const tile_argb = argb + tile_y_offset * xsize - + tile_x_offset; - VP8LMultipliers best_tx; - MultipliersClear(&best_tx); - - GetBestGreenToRed(tile_argb, xsize, tile_width, tile_height, - prev_x, prev_y, quality, accumulated_red_histo, &best_tx); - GetBestGreenRedToBlue(tile_argb, xsize, tile_width, tile_height, - prev_x, prev_y, quality, accumulated_blue_histo, - &best_tx); - return best_tx; -} - -static void CopyTileWithColorTransform(int xsize, int ysize, - int tile_x, int tile_y, - int max_tile_size, - VP8LMultipliers color_transform, - uint32_t* argb) { - const int xscan = GetMin(max_tile_size, xsize - tile_x); - int yscan = GetMin(max_tile_size, ysize - tile_y); - argb += tile_y * xsize + tile_x; - while (yscan-- > 0) { - VP8LTransformColor(&color_transform, argb, xscan); - argb += xsize; - } -} - -void VP8LColorSpaceTransform(int width, int height, int bits, int quality, - uint32_t* const argb, uint32_t* image) { - const int max_tile_size = 1 << bits; - const int tile_xsize = VP8LSubSampleSize(width, bits); - const int tile_ysize = VP8LSubSampleSize(height, bits); - int accumulated_red_histo[256] = { 0 }; - int accumulated_blue_histo[256] = { 0 }; - int tile_x, tile_y; - VP8LMultipliers prev_x, prev_y; - MultipliersClear(&prev_y); - MultipliersClear(&prev_x); - for (tile_y = 0; tile_y < tile_ysize; ++tile_y) { - for (tile_x = 0; tile_x < tile_xsize; ++tile_x) { - int y; - const int tile_x_offset = tile_x * max_tile_size; - const int tile_y_offset = tile_y * max_tile_size; - const int all_x_max = GetMin(tile_x_offset + max_tile_size, width); - const int all_y_max = GetMin(tile_y_offset + max_tile_size, height); - const int offset = tile_y * tile_xsize + tile_x; - if (tile_y != 0) { - ColorCodeToMultipliers(image[offset - tile_xsize], &prev_y); - } - prev_x = GetBestColorTransformForTile(tile_x, tile_y, bits, - prev_x, prev_y, - quality, width, height, - accumulated_red_histo, - accumulated_blue_histo, - argb); - image[offset] = MultipliersToColorCode(&prev_x); - CopyTileWithColorTransform(width, height, tile_x_offset, tile_y_offset, - max_tile_size, prev_x, argb); - - // Gather accumulated histogram data. - for (y = tile_y_offset; y < all_y_max; ++y) { - int ix = y * width + tile_x_offset; - const int ix_end = ix + all_x_max - tile_x_offset; - for (; ix < ix_end; ++ix) { - const uint32_t pix = argb[ix]; - if (ix >= 2 && - pix == argb[ix - 2] && - pix == argb[ix - 1]) { - continue; // repeated pixels are handled by backward references - } - if (ix >= width + 2 && - argb[ix - 2] == argb[ix - width - 2] && - argb[ix - 1] == argb[ix - width - 1] && - pix == argb[ix - width]) { - continue; // repeated pixels are handled by backward references - } - ++accumulated_red_histo[(pix >> 16) & 0xff]; - ++accumulated_blue_histo[(pix >> 0) & 0xff]; - } - } - } - } -} diff --git a/Extended/libwebp/src/enc/quant_enc.c b/Extended/libwebp/src/enc/quant_enc.c deleted file mode 100644 index 01eb565..0000000 --- a/Extended/libwebp/src/enc/quant_enc.c +++ /dev/null @@ -1,1372 +0,0 @@ -// Copyright 2011 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Quantization -// -// Author: Skal (pascal.massimino@gmail.com) - -#include -#include -#include // for abs() - -#include "src/dsp/quant.h" -#include "src/enc/vp8i_enc.h" -#include "src/enc/cost_enc.h" - -#define DO_TRELLIS_I4 1 -#define DO_TRELLIS_I16 1 // not a huge gain, but ok at low bitrate. -#define DO_TRELLIS_UV 0 // disable trellis for UV. Risky. Not worth. -#define USE_TDISTO 1 - -#define MID_ALPHA 64 // neutral value for susceptibility -#define MIN_ALPHA 30 // lowest usable value for susceptibility -#define MAX_ALPHA 100 // higher meaningful value for susceptibility - -#define SNS_TO_DQ 0.9 // Scaling constant between the sns value and the QP - // power-law modulation. Must be strictly less than 1. - -// number of non-zero coeffs below which we consider the block very flat -// (and apply a penalty to complex predictions) -#define FLATNESS_LIMIT_I16 0 // I16 mode (special case) -#define FLATNESS_LIMIT_I4 3 // I4 mode -#define FLATNESS_LIMIT_UV 2 // UV mode -#define FLATNESS_PENALTY 140 // roughly ~1bit per block - -#define MULT_8B(a, b) (((a) * (b) + 128) >> 8) - -#define RD_DISTO_MULT 256 // distortion multiplier (equivalent of lambda) - -// #define DEBUG_BLOCK - -//------------------------------------------------------------------------------ - -#if defined(DEBUG_BLOCK) - -#include -#include - -static void PrintBlockInfo(const VP8EncIterator* const it, - const VP8ModeScore* const rd) { - int i, j; - const int is_i16 = (it->mb_->type_ == 1); - const uint8_t* const y_in = it->yuv_in_ + Y_OFF_ENC; - const uint8_t* const y_out = it->yuv_out_ + Y_OFF_ENC; - const uint8_t* const uv_in = it->yuv_in_ + U_OFF_ENC; - const uint8_t* const uv_out = it->yuv_out_ + U_OFF_ENC; - printf("SOURCE / OUTPUT / ABS DELTA\n"); - for (j = 0; j < 16; ++j) { - for (i = 0; i < 16; ++i) printf("%3d ", y_in[i + j * BPS]); - printf(" "); - for (i = 0; i < 16; ++i) printf("%3d ", y_out[i + j * BPS]); - printf(" "); - for (i = 0; i < 16; ++i) { - printf("%1d ", abs(y_in[i + j * BPS] - y_out[i + j * BPS])); - } - printf("\n"); - } - printf("\n"); // newline before the U/V block - for (j = 0; j < 8; ++j) { - for (i = 0; i < 8; ++i) printf("%3d ", uv_in[i + j * BPS]); - printf(" "); - for (i = 8; i < 16; ++i) printf("%3d ", uv_in[i + j * BPS]); - printf(" "); - for (i = 0; i < 8; ++i) printf("%3d ", uv_out[i + j * BPS]); - printf(" "); - for (i = 8; i < 16; ++i) printf("%3d ", uv_out[i + j * BPS]); - printf(" "); - for (i = 0; i < 8; ++i) { - printf("%1d ", abs(uv_out[i + j * BPS] - uv_in[i + j * BPS])); - } - printf(" "); - for (i = 8; i < 16; ++i) { - printf("%1d ", abs(uv_out[i + j * BPS] - uv_in[i + j * BPS])); - } - printf("\n"); - } - printf("\nD:%d SD:%d R:%d H:%d nz:0x%x score:%d\n", - (int)rd->D, (int)rd->SD, (int)rd->R, (int)rd->H, (int)rd->nz, - (int)rd->score); - if (is_i16) { - printf("Mode: %d\n", rd->mode_i16); - printf("y_dc_levels:"); - for (i = 0; i < 16; ++i) printf("%3d ", rd->y_dc_levels[i]); - printf("\n"); - } else { - printf("Modes[16]: "); - for (i = 0; i < 16; ++i) printf("%d ", rd->modes_i4[i]); - printf("\n"); - } - printf("y_ac_levels:\n"); - for (j = 0; j < 16; ++j) { - for (i = is_i16 ? 1 : 0; i < 16; ++i) { - printf("%4d ", rd->y_ac_levels[j][i]); - } - printf("\n"); - } - printf("\n"); - printf("uv_levels (mode=%d):\n", rd->mode_uv); - for (j = 0; j < 8; ++j) { - for (i = 0; i < 16; ++i) { - printf("%4d ", rd->uv_levels[j][i]); - } - printf("\n"); - } -} - -#endif // DEBUG_BLOCK - -//------------------------------------------------------------------------------ - -static WEBP_INLINE int clip(int v, int m, int M) { - return v < m ? m : v > M ? M : v; -} - -static const uint8_t kZigzag[16] = { - 0, 1, 4, 8, 5, 2, 3, 6, 9, 12, 13, 10, 7, 11, 14, 15 -}; - -static const uint8_t kDcTable[128] = { - 4, 5, 6, 7, 8, 9, 10, 10, - 11, 12, 13, 14, 15, 16, 17, 17, - 18, 19, 20, 20, 21, 21, 22, 22, - 23, 23, 24, 25, 25, 26, 27, 28, - 29, 30, 31, 32, 33, 34, 35, 36, - 37, 37, 38, 39, 40, 41, 42, 43, - 44, 45, 46, 46, 47, 48, 49, 50, - 51, 52, 53, 54, 55, 56, 57, 58, - 59, 60, 61, 62, 63, 64, 65, 66, - 67, 68, 69, 70, 71, 72, 73, 74, - 75, 76, 76, 77, 78, 79, 80, 81, - 82, 83, 84, 85, 86, 87, 88, 89, - 91, 93, 95, 96, 98, 100, 101, 102, - 104, 106, 108, 110, 112, 114, 116, 118, - 122, 124, 126, 128, 130, 132, 134, 136, - 138, 140, 143, 145, 148, 151, 154, 157 -}; - -static const uint16_t kAcTable[128] = { - 4, 5, 6, 7, 8, 9, 10, 11, - 12, 13, 14, 15, 16, 17, 18, 19, - 20, 21, 22, 23, 24, 25, 26, 27, - 28, 29, 30, 31, 32, 33, 34, 35, - 36, 37, 38, 39, 40, 41, 42, 43, - 44, 45, 46, 47, 48, 49, 50, 51, - 52, 53, 54, 55, 56, 57, 58, 60, - 62, 64, 66, 68, 70, 72, 74, 76, - 78, 80, 82, 84, 86, 88, 90, 92, - 94, 96, 98, 100, 102, 104, 106, 108, - 110, 112, 114, 116, 119, 122, 125, 128, - 131, 134, 137, 140, 143, 146, 149, 152, - 155, 158, 161, 164, 167, 170, 173, 177, - 181, 185, 189, 193, 197, 201, 205, 209, - 213, 217, 221, 225, 229, 234, 239, 245, - 249, 254, 259, 264, 269, 274, 279, 284 -}; - -static const uint16_t kAcTable2[128] = { - 8, 8, 9, 10, 12, 13, 15, 17, - 18, 20, 21, 23, 24, 26, 27, 29, - 31, 32, 34, 35, 37, 38, 40, 41, - 43, 44, 46, 48, 49, 51, 52, 54, - 55, 57, 58, 60, 62, 63, 65, 66, - 68, 69, 71, 72, 74, 75, 77, 79, - 80, 82, 83, 85, 86, 88, 89, 93, - 96, 99, 102, 105, 108, 111, 114, 117, - 120, 124, 127, 130, 133, 136, 139, 142, - 145, 148, 151, 155, 158, 161, 164, 167, - 170, 173, 176, 179, 184, 189, 193, 198, - 203, 207, 212, 217, 221, 226, 230, 235, - 240, 244, 249, 254, 258, 263, 268, 274, - 280, 286, 292, 299, 305, 311, 317, 323, - 330, 336, 342, 348, 354, 362, 370, 379, - 385, 393, 401, 409, 416, 424, 432, 440 -}; - -static const uint8_t kBiasMatrices[3][2] = { // [luma-ac,luma-dc,chroma][dc,ac] - { 96, 110 }, { 96, 108 }, { 110, 115 } -}; - -// Sharpening by (slightly) raising the hi-frequency coeffs. -// Hack-ish but helpful for mid-bitrate range. Use with care. -#define SHARPEN_BITS 11 // number of descaling bits for sharpening bias -static const uint8_t kFreqSharpening[16] = { - 0, 30, 60, 90, - 30, 60, 90, 90, - 60, 90, 90, 90, - 90, 90, 90, 90 -}; - -//------------------------------------------------------------------------------ -// Initialize quantization parameters in VP8Matrix - -// Returns the average quantizer -static int ExpandMatrix(VP8Matrix* const m, int type) { - int i, sum; - for (i = 0; i < 2; ++i) { - const int is_ac_coeff = (i > 0); - const int bias = kBiasMatrices[type][is_ac_coeff]; - m->iq_[i] = (1 << QFIX) / m->q_[i]; - m->bias_[i] = BIAS(bias); - // zthresh_ is the exact value such that QUANTDIV(coeff, iQ, B) is: - // * zero if coeff <= zthresh - // * non-zero if coeff > zthresh - m->zthresh_[i] = ((1 << QFIX) - 1 - m->bias_[i]) / m->iq_[i]; - } - for (i = 2; i < 16; ++i) { - m->q_[i] = m->q_[1]; - m->iq_[i] = m->iq_[1]; - m->bias_[i] = m->bias_[1]; - m->zthresh_[i] = m->zthresh_[1]; - } - for (sum = 0, i = 0; i < 16; ++i) { - if (type == 0) { // we only use sharpening for AC luma coeffs - m->sharpen_[i] = (kFreqSharpening[i] * m->q_[i]) >> SHARPEN_BITS; - } else { - m->sharpen_[i] = 0; - } - sum += m->q_[i]; - } - return (sum + 8) >> 4; -} - -static void CheckLambdaValue(int* const v) { if (*v < 1) *v = 1; } - -static void SetupMatrices(VP8Encoder* enc) { - int i; - const int tlambda_scale = - (enc->method_ >= 4) ? enc->config_->sns_strength - : 0; - const int num_segments = enc->segment_hdr_.num_segments_; - for (i = 0; i < num_segments; ++i) { - VP8SegmentInfo* const m = &enc->dqm_[i]; - const int q = m->quant_; - int q_i4, q_i16, q_uv; - m->y1_.q_[0] = kDcTable[clip(q + enc->dq_y1_dc_, 0, 127)]; - m->y1_.q_[1] = kAcTable[clip(q, 0, 127)]; - - m->y2_.q_[0] = kDcTable[ clip(q + enc->dq_y2_dc_, 0, 127)] * 2; - m->y2_.q_[1] = kAcTable2[clip(q + enc->dq_y2_ac_, 0, 127)]; - - m->uv_.q_[0] = kDcTable[clip(q + enc->dq_uv_dc_, 0, 117)]; - m->uv_.q_[1] = kAcTable[clip(q + enc->dq_uv_ac_, 0, 127)]; - - q_i4 = ExpandMatrix(&m->y1_, 0); - q_i16 = ExpandMatrix(&m->y2_, 1); - q_uv = ExpandMatrix(&m->uv_, 2); - - m->lambda_i4_ = (3 * q_i4 * q_i4) >> 7; - m->lambda_i16_ = (3 * q_i16 * q_i16); - m->lambda_uv_ = (3 * q_uv * q_uv) >> 6; - m->lambda_mode_ = (1 * q_i4 * q_i4) >> 7; - m->lambda_trellis_i4_ = (7 * q_i4 * q_i4) >> 3; - m->lambda_trellis_i16_ = (q_i16 * q_i16) >> 2; - m->lambda_trellis_uv_ = (q_uv * q_uv) << 1; - m->tlambda_ = (tlambda_scale * q_i4) >> 5; - - // none of these constants should be < 1 - CheckLambdaValue(&m->lambda_i4_); - CheckLambdaValue(&m->lambda_i16_); - CheckLambdaValue(&m->lambda_uv_); - CheckLambdaValue(&m->lambda_mode_); - CheckLambdaValue(&m->lambda_trellis_i4_); - CheckLambdaValue(&m->lambda_trellis_i16_); - CheckLambdaValue(&m->lambda_trellis_uv_); - CheckLambdaValue(&m->tlambda_); - - m->min_disto_ = 20 * m->y1_.q_[0]; // quantization-aware min disto - m->max_edge_ = 0; - - m->i4_penalty_ = 1000 * q_i4 * q_i4; - } -} - -//------------------------------------------------------------------------------ -// Initialize filtering parameters - -// Very small filter-strength values have close to no visual effect. So we can -// save a little decoding-CPU by turning filtering off for these. -#define FSTRENGTH_CUTOFF 2 - -static void SetupFilterStrength(VP8Encoder* const enc) { - int i; - // level0 is in [0..500]. Using '-f 50' as filter_strength is mid-filtering. - const int level0 = 5 * enc->config_->filter_strength; - for (i = 0; i < NUM_MB_SEGMENTS; ++i) { - VP8SegmentInfo* const m = &enc->dqm_[i]; - // We focus on the quantization of AC coeffs. - const int qstep = kAcTable[clip(m->quant_, 0, 127)] >> 2; - const int base_strength = - VP8FilterStrengthFromDelta(enc->filter_hdr_.sharpness_, qstep); - // Segments with lower complexity ('beta') will be less filtered. - const int f = base_strength * level0 / (256 + m->beta_); - m->fstrength_ = (f < FSTRENGTH_CUTOFF) ? 0 : (f > 63) ? 63 : f; - } - // We record the initial strength (mainly for the case of 1-segment only). - enc->filter_hdr_.level_ = enc->dqm_[0].fstrength_; - enc->filter_hdr_.simple_ = (enc->config_->filter_type == 0); - enc->filter_hdr_.sharpness_ = enc->config_->filter_sharpness; -} - -//------------------------------------------------------------------------------ - -// Note: if you change the values below, remember that the max range -// allowed by the syntax for DQ_UV is [-16,16]. -#define MAX_DQ_UV (6) -#define MIN_DQ_UV (-4) - -// We want to emulate jpeg-like behaviour where the expected "good" quality -// is around q=75. Internally, our "good" middle is around c=50. So we -// map accordingly using linear piece-wise function -static double QualityToCompression(double c) { - const double linear_c = (c < 0.75) ? c * (2. / 3.) : 2. * c - 1.; - // The file size roughly scales as pow(quantizer, 3.). Actually, the - // exponent is somewhere between 2.8 and 3.2, but we're mostly interested - // in the mid-quant range. So we scale the compressibility inversely to - // this power-law: quant ~= compression ^ 1/3. This law holds well for - // low quant. Finer modeling for high-quant would make use of kAcTable[] - // more explicitly. - const double v = pow(linear_c, 1 / 3.); - return v; -} - -static double QualityToJPEGCompression(double c, double alpha) { - // We map the complexity 'alpha' and quality setting 'c' to a compression - // exponent empirically matched to the compression curve of libjpeg6b. - // On average, the WebP output size will be roughly similar to that of a - // JPEG file compressed with same quality factor. - const double amin = 0.30; - const double amax = 0.85; - const double exp_min = 0.4; - const double exp_max = 0.9; - const double slope = (exp_min - exp_max) / (amax - amin); - // Linearly interpolate 'expn' from exp_min to exp_max - // in the [amin, amax] range. - const double expn = (alpha > amax) ? exp_min - : (alpha < amin) ? exp_max - : exp_max + slope * (alpha - amin); - const double v = pow(c, expn); - return v; -} - -static int SegmentsAreEquivalent(const VP8SegmentInfo* const S1, - const VP8SegmentInfo* const S2) { - return (S1->quant_ == S2->quant_) && (S1->fstrength_ == S2->fstrength_); -} - -static void SimplifySegments(VP8Encoder* const enc) { - int map[NUM_MB_SEGMENTS] = { 0, 1, 2, 3 }; - // 'num_segments_' is previously validated and <= NUM_MB_SEGMENTS, but an - // explicit check is needed to avoid a spurious warning about 'i' exceeding - // array bounds of 'dqm_' with some compilers (noticed with gcc-4.9). - const int num_segments = (enc->segment_hdr_.num_segments_ < NUM_MB_SEGMENTS) - ? enc->segment_hdr_.num_segments_ - : NUM_MB_SEGMENTS; - int num_final_segments = 1; - int s1, s2; - for (s1 = 1; s1 < num_segments; ++s1) { // find similar segments - const VP8SegmentInfo* const S1 = &enc->dqm_[s1]; - int found = 0; - // check if we already have similar segment - for (s2 = 0; s2 < num_final_segments; ++s2) { - const VP8SegmentInfo* const S2 = &enc->dqm_[s2]; - if (SegmentsAreEquivalent(S1, S2)) { - found = 1; - break; - } - } - map[s1] = s2; - if (!found) { - if (num_final_segments != s1) { - enc->dqm_[num_final_segments] = enc->dqm_[s1]; - } - ++num_final_segments; - } - } - if (num_final_segments < num_segments) { // Remap - int i = enc->mb_w_ * enc->mb_h_; - while (i-- > 0) enc->mb_info_[i].segment_ = map[enc->mb_info_[i].segment_]; - enc->segment_hdr_.num_segments_ = num_final_segments; - // Replicate the trailing segment infos (it's mostly cosmetics) - for (i = num_final_segments; i < num_segments; ++i) { - enc->dqm_[i] = enc->dqm_[num_final_segments - 1]; - } - } -} - -void VP8SetSegmentParams(VP8Encoder* const enc, float quality) { - int i; - int dq_uv_ac, dq_uv_dc; - const int num_segments = enc->segment_hdr_.num_segments_; - const double amp = SNS_TO_DQ * enc->config_->sns_strength / 100. / 128.; - const double Q = quality / 100.; - const double c_base = enc->config_->emulate_jpeg_size ? - QualityToJPEGCompression(Q, enc->alpha_ / 255.) : - QualityToCompression(Q); - for (i = 0; i < num_segments; ++i) { - // We modulate the base coefficient to accommodate for the quantization - // susceptibility and allow denser segments to be quantized more. - const double expn = 1. - amp * enc->dqm_[i].alpha_; - const double c = pow(c_base, expn); - const int q = (int)(127. * (1. - c)); - assert(expn > 0.); - enc->dqm_[i].quant_ = clip(q, 0, 127); - } - - // purely indicative in the bitstream (except for the 1-segment case) - enc->base_quant_ = enc->dqm_[0].quant_; - - // fill-in values for the unused segments (required by the syntax) - for (i = num_segments; i < NUM_MB_SEGMENTS; ++i) { - enc->dqm_[i].quant_ = enc->base_quant_; - } - - // uv_alpha_ is normally spread around ~60. The useful range is - // typically ~30 (quite bad) to ~100 (ok to decimate UV more). - // We map it to the safe maximal range of MAX/MIN_DQ_UV for dq_uv. - dq_uv_ac = (enc->uv_alpha_ - MID_ALPHA) * (MAX_DQ_UV - MIN_DQ_UV) - / (MAX_ALPHA - MIN_ALPHA); - // we rescale by the user-defined strength of adaptation - dq_uv_ac = dq_uv_ac * enc->config_->sns_strength / 100; - // and make it safe. - dq_uv_ac = clip(dq_uv_ac, MIN_DQ_UV, MAX_DQ_UV); - // We also boost the dc-uv-quant a little, based on sns-strength, since - // U/V channels are quite more reactive to high quants (flat DC-blocks - // tend to appear, and are unpleasant). - dq_uv_dc = -4 * enc->config_->sns_strength / 100; - dq_uv_dc = clip(dq_uv_dc, -15, 15); // 4bit-signed max allowed - - enc->dq_y1_dc_ = 0; // TODO(skal): dq-lum - enc->dq_y2_dc_ = 0; - enc->dq_y2_ac_ = 0; - enc->dq_uv_dc_ = dq_uv_dc; - enc->dq_uv_ac_ = dq_uv_ac; - - SetupFilterStrength(enc); // initialize segments' filtering, eventually - - if (num_segments > 1) SimplifySegments(enc); - - SetupMatrices(enc); // finalize quantization matrices -} - -//------------------------------------------------------------------------------ -// Form the predictions in cache - -// Must be ordered using {DC_PRED, TM_PRED, V_PRED, H_PRED} as index -const uint16_t VP8I16ModeOffsets[4] = { I16DC16, I16TM16, I16VE16, I16HE16 }; -const uint16_t VP8UVModeOffsets[4] = { C8DC8, C8TM8, C8VE8, C8HE8 }; - -// Must be indexed using {B_DC_PRED -> B_HU_PRED} as index -const uint16_t VP8I4ModeOffsets[NUM_BMODES] = { - I4DC4, I4TM4, I4VE4, I4HE4, I4RD4, I4VR4, I4LD4, I4VL4, I4HD4, I4HU4 -}; - -void VP8MakeLuma16Preds(const VP8EncIterator* const it) { - const uint8_t* const left = it->x_ ? it->y_left_ : NULL; - const uint8_t* const top = it->y_ ? it->y_top_ : NULL; - VP8EncPredLuma16(it->yuv_p_, left, top); -} - -void VP8MakeChroma8Preds(const VP8EncIterator* const it) { - const uint8_t* const left = it->x_ ? it->u_left_ : NULL; - const uint8_t* const top = it->y_ ? it->uv_top_ : NULL; - VP8EncPredChroma8(it->yuv_p_, left, top); -} - -void VP8MakeIntra4Preds(const VP8EncIterator* const it) { - VP8EncPredLuma4(it->yuv_p_, it->i4_top_); -} - -//------------------------------------------------------------------------------ -// Quantize - -// Layout: -// +----+----+ -// |YYYY|UUVV| 0 -// |YYYY|UUVV| 4 -// |YYYY|....| 8 -// |YYYY|....| 12 -// +----+----+ - -const uint16_t VP8Scan[16] = { // Luma - 0 + 0 * BPS, 4 + 0 * BPS, 8 + 0 * BPS, 12 + 0 * BPS, - 0 + 4 * BPS, 4 + 4 * BPS, 8 + 4 * BPS, 12 + 4 * BPS, - 0 + 8 * BPS, 4 + 8 * BPS, 8 + 8 * BPS, 12 + 8 * BPS, - 0 + 12 * BPS, 4 + 12 * BPS, 8 + 12 * BPS, 12 + 12 * BPS, -}; - -static const uint16_t VP8ScanUV[4 + 4] = { - 0 + 0 * BPS, 4 + 0 * BPS, 0 + 4 * BPS, 4 + 4 * BPS, // U - 8 + 0 * BPS, 12 + 0 * BPS, 8 + 4 * BPS, 12 + 4 * BPS // V -}; - -//------------------------------------------------------------------------------ -// Distortion measurement - -static const uint16_t kWeightY[16] = { - 38, 32, 20, 9, 32, 28, 17, 7, 20, 17, 10, 4, 9, 7, 4, 2 -}; - -static const uint16_t kWeightTrellis[16] = { -#if USE_TDISTO == 0 - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16 -#else - 30, 27, 19, 11, - 27, 24, 17, 10, - 19, 17, 12, 8, - 11, 10, 8, 6 -#endif -}; - -// Init/Copy the common fields in score. -static void InitScore(VP8ModeScore* const rd) { - rd->D = 0; - rd->SD = 0; - rd->R = 0; - rd->H = 0; - rd->nz = 0; - rd->score = MAX_COST; -} - -static void CopyScore(VP8ModeScore* const dst, const VP8ModeScore* const src) { - dst->D = src->D; - dst->SD = src->SD; - dst->R = src->R; - dst->H = src->H; - dst->nz = src->nz; // note that nz is not accumulated, but just copied. - dst->score = src->score; -} - -static void AddScore(VP8ModeScore* const dst, const VP8ModeScore* const src) { - dst->D += src->D; - dst->SD += src->SD; - dst->R += src->R; - dst->H += src->H; - dst->nz |= src->nz; // here, new nz bits are accumulated. - dst->score += src->score; -} - -//------------------------------------------------------------------------------ -// Performs trellis-optimized quantization. - -// Trellis node -typedef struct { - int8_t prev; // best previous node - int8_t sign; // sign of coeff_i - int16_t level; // level -} Node; - -// Score state -typedef struct { - score_t score; // partial RD score - const uint16_t* costs; // shortcut to cost tables -} ScoreState; - -// If a coefficient was quantized to a value Q (using a neutral bias), -// we test all alternate possibilities between [Q-MIN_DELTA, Q+MAX_DELTA] -// We don't test negative values though. -#define MIN_DELTA 0 // how much lower level to try -#define MAX_DELTA 1 // how much higher -#define NUM_NODES (MIN_DELTA + 1 + MAX_DELTA) -#define NODE(n, l) (nodes[(n)][(l) + MIN_DELTA]) -#define SCORE_STATE(n, l) (score_states[n][(l) + MIN_DELTA]) - -static WEBP_INLINE void SetRDScore(int lambda, VP8ModeScore* const rd) { - rd->score = (rd->R + rd->H) * lambda + RD_DISTO_MULT * (rd->D + rd->SD); -} - -static WEBP_INLINE score_t RDScoreTrellis(int lambda, score_t rate, - score_t distortion) { - return rate * lambda + RD_DISTO_MULT * distortion; -} - -static int TrellisQuantizeBlock(const VP8Encoder* const enc, - int16_t in[16], int16_t out[16], - int ctx0, int coeff_type, - const VP8Matrix* const mtx, - int lambda) { - const ProbaArray* const probas = enc->proba_.coeffs_[coeff_type]; - CostArrayPtr const costs = - (CostArrayPtr)enc->proba_.remapped_costs_[coeff_type]; - const int first = (coeff_type == 0) ? 1 : 0; - Node nodes[16][NUM_NODES]; - ScoreState score_states[2][NUM_NODES]; - ScoreState* ss_cur = &SCORE_STATE(0, MIN_DELTA); - ScoreState* ss_prev = &SCORE_STATE(1, MIN_DELTA); - int best_path[3] = {-1, -1, -1}; // store best-last/best-level/best-previous - score_t best_score; - int n, m, p, last; - - { - score_t cost; - const int thresh = mtx->q_[1] * mtx->q_[1] / 4; - const int last_proba = probas[VP8EncBands[first]][ctx0][0]; - - // compute the position of the last interesting coefficient - last = first - 1; - for (n = 15; n >= first; --n) { - const int j = kZigzag[n]; - const int err = in[j] * in[j]; - if (err > thresh) { - last = n; - break; - } - } - // we don't need to go inspect up to n = 16 coeffs. We can just go up - // to last + 1 (inclusive) without losing much. - if (last < 15) ++last; - - // compute 'skip' score. This is the max score one can do. - cost = VP8BitCost(0, last_proba); - best_score = RDScoreTrellis(lambda, cost, 0); - - // initialize source node. - for (m = -MIN_DELTA; m <= MAX_DELTA; ++m) { - const score_t rate = (ctx0 == 0) ? VP8BitCost(1, last_proba) : 0; - ss_cur[m].score = RDScoreTrellis(lambda, rate, 0); - ss_cur[m].costs = costs[first][ctx0]; - } - } - - // traverse trellis. - for (n = first; n <= last; ++n) { - const int j = kZigzag[n]; - const uint32_t Q = mtx->q_[j]; - const uint32_t iQ = mtx->iq_[j]; - const uint32_t B = BIAS(0x00); // neutral bias - // note: it's important to take sign of the _original_ coeff, - // so we don't have to consider level < 0 afterward. - const int sign = (in[j] < 0); - const uint32_t coeff0 = (sign ? -in[j] : in[j]) + mtx->sharpen_[j]; - int level0 = QUANTDIV(coeff0, iQ, B); - int thresh_level = QUANTDIV(coeff0, iQ, BIAS(0x80)); - if (thresh_level > MAX_LEVEL) thresh_level = MAX_LEVEL; - if (level0 > MAX_LEVEL) level0 = MAX_LEVEL; - - { // Swap current and previous score states - ScoreState* const tmp = ss_cur; - ss_cur = ss_prev; - ss_prev = tmp; - } - - // test all alternate level values around level0. - for (m = -MIN_DELTA; m <= MAX_DELTA; ++m) { - Node* const cur = &NODE(n, m); - int level = level0 + m; - const int ctx = (level > 2) ? 2 : level; - const int band = VP8EncBands[n + 1]; - score_t base_score; - score_t best_cur_score = MAX_COST; - int best_prev = 0; // default, in case - - ss_cur[m].score = MAX_COST; - ss_cur[m].costs = costs[n + 1][ctx]; - if (level < 0 || level > thresh_level) { - // Node is dead. - continue; - } - - { - // Compute delta_error = how much coding this level will - // subtract to max_error as distortion. - // Here, distortion = sum of (|coeff_i| - level_i * Q_i)^2 - const int new_error = coeff0 - level * Q; - const int delta_error = - kWeightTrellis[j] * (new_error * new_error - coeff0 * coeff0); - base_score = RDScoreTrellis(lambda, 0, delta_error); - } - - // Inspect all possible non-dead predecessors. Retain only the best one. - for (p = -MIN_DELTA; p <= MAX_DELTA; ++p) { - // Dead nodes (with ss_prev[p].score >= MAX_COST) are automatically - // eliminated since their score can't be better than the current best. - const score_t cost = VP8LevelCost(ss_prev[p].costs, level); - // Examine node assuming it's a non-terminal one. - const score_t score = - base_score + ss_prev[p].score + RDScoreTrellis(lambda, cost, 0); - if (score < best_cur_score) { - best_cur_score = score; - best_prev = p; - } - } - // Store best finding in current node. - cur->sign = sign; - cur->level = level; - cur->prev = best_prev; - ss_cur[m].score = best_cur_score; - - // Now, record best terminal node (and thus best entry in the graph). - if (level != 0) { - const score_t last_pos_cost = - (n < 15) ? VP8BitCost(0, probas[band][ctx][0]) : 0; - const score_t last_pos_score = RDScoreTrellis(lambda, last_pos_cost, 0); - const score_t score = best_cur_score + last_pos_score; - if (score < best_score) { - best_score = score; - best_path[0] = n; // best eob position - best_path[1] = m; // best node index - best_path[2] = best_prev; // best predecessor - } - } - } - } - - // Fresh start - memset(in + first, 0, (16 - first) * sizeof(*in)); - memset(out + first, 0, (16 - first) * sizeof(*out)); - if (best_path[0] == -1) { - return 0; // skip! - } - - { - // Unwind the best path. - // Note: best-prev on terminal node is not necessarily equal to the - // best_prev for non-terminal. So we patch best_path[2] in. - int nz = 0; - int best_node = best_path[1]; - n = best_path[0]; - NODE(n, best_node).prev = best_path[2]; // force best-prev for terminal - - for (; n >= first; --n) { - const Node* const node = &NODE(n, best_node); - const int j = kZigzag[n]; - out[n] = node->sign ? -node->level : node->level; - nz |= node->level; - in[j] = out[n] * mtx->q_[j]; - best_node = node->prev; - } - return (nz != 0); - } -} - -#undef NODE - -//------------------------------------------------------------------------------ -// Performs: difference, transform, quantize, back-transform, add -// all at once. Output is the reconstructed block in *yuv_out, and the -// quantized levels in *levels. - -static int ReconstructIntra16(VP8EncIterator* const it, - VP8ModeScore* const rd, - uint8_t* const yuv_out, - int mode) { - const VP8Encoder* const enc = it->enc_; - const uint8_t* const ref = it->yuv_p_ + VP8I16ModeOffsets[mode]; - const uint8_t* const src = it->yuv_in_ + Y_OFF_ENC; - const VP8SegmentInfo* const dqm = &enc->dqm_[it->mb_->segment_]; - int nz = 0; - int n; - int16_t tmp[16][16], dc_tmp[16]; - - for (n = 0; n < 16; n += 2) { - VP8FTransform2(src + VP8Scan[n], ref + VP8Scan[n], tmp[n]); - } - VP8FTransformWHT(tmp[0], dc_tmp); - nz |= VP8EncQuantizeBlockWHT(dc_tmp, rd->y_dc_levels, &dqm->y2_) << 24; - - if (DO_TRELLIS_I16 && it->do_trellis_) { - int x, y; - VP8IteratorNzToBytes(it); - for (y = 0, n = 0; y < 4; ++y) { - for (x = 0; x < 4; ++x, ++n) { - const int ctx = it->top_nz_[x] + it->left_nz_[y]; - const int non_zero = - TrellisQuantizeBlock(enc, tmp[n], rd->y_ac_levels[n], ctx, 0, - &dqm->y1_, dqm->lambda_trellis_i16_); - it->top_nz_[x] = it->left_nz_[y] = non_zero; - rd->y_ac_levels[n][0] = 0; - nz |= non_zero << n; - } - } - } else { - for (n = 0; n < 16; n += 2) { - // Zero-out the first coeff, so that: a) nz is correct below, and - // b) finding 'last' non-zero coeffs in SetResidualCoeffs() is simplified. - tmp[n][0] = tmp[n + 1][0] = 0; - nz |= VP8EncQuantize2Blocks(tmp[n], rd->y_ac_levels[n], &dqm->y1_) << n; - assert(rd->y_ac_levels[n + 0][0] == 0); - assert(rd->y_ac_levels[n + 1][0] == 0); - } - } - - // Transform back - VP8TransformWHT(dc_tmp, tmp[0]); - for (n = 0; n < 16; n += 2) { - VP8ITransform(ref + VP8Scan[n], tmp[n], yuv_out + VP8Scan[n], 1); - } - - return nz; -} - -static int ReconstructIntra4(VP8EncIterator* const it, - int16_t levels[16], - const uint8_t* const src, - uint8_t* const yuv_out, - int mode) { - const VP8Encoder* const enc = it->enc_; - const uint8_t* const ref = it->yuv_p_ + VP8I4ModeOffsets[mode]; - const VP8SegmentInfo* const dqm = &enc->dqm_[it->mb_->segment_]; - int nz = 0; - int16_t tmp[16]; - - VP8FTransform(src, ref, tmp); - if (DO_TRELLIS_I4 && it->do_trellis_) { - const int x = it->i4_ & 3, y = it->i4_ >> 2; - const int ctx = it->top_nz_[x] + it->left_nz_[y]; - nz = TrellisQuantizeBlock(enc, tmp, levels, ctx, 3, &dqm->y1_, - dqm->lambda_trellis_i4_); - } else { - nz = VP8EncQuantizeBlock(tmp, levels, &dqm->y1_); - } - VP8ITransform(ref, tmp, yuv_out, 0); - return nz; -} - -//------------------------------------------------------------------------------ -// DC-error diffusion - -// Diffusion weights. We under-correct a bit (15/16th of the error is actually -// diffused) to avoid 'rainbow' chessboard pattern of blocks at q~=0. -#define C1 7 // fraction of error sent to the 4x4 block below -#define C2 8 // fraction of error sent to the 4x4 block on the right -#define DSHIFT 4 -#define DSCALE 1 // storage descaling, needed to make the error fit int8_t - -// Quantize as usual, but also compute and return the quantization error. -// Error is already divided by DSHIFT. -static int QuantizeSingle(int16_t* const v, const VP8Matrix* const mtx) { - int V = *v; - const int sign = (V < 0); - if (sign) V = -V; - if (V > (int)mtx->zthresh_[0]) { - const int qV = QUANTDIV(V, mtx->iq_[0], mtx->bias_[0]) * mtx->q_[0]; - const int err = (V - qV); - *v = sign ? -qV : qV; - return (sign ? -err : err) >> DSCALE; - } - *v = 0; - return (sign ? -V : V) >> DSCALE; -} - -static void CorrectDCValues(const VP8EncIterator* const it, - const VP8Matrix* const mtx, - int16_t tmp[][16], VP8ModeScore* const rd) { - // | top[0] | top[1] - // --------+--------+--------- - // left[0] | tmp[0] tmp[1] <-> err0 err1 - // left[1] | tmp[2] tmp[3] err2 err3 - // - // Final errors {err1,err2,err3} are preserved and later restored - // as top[]/left[] on the next block. - int ch; - for (ch = 0; ch <= 1; ++ch) { - const int8_t* const top = it->top_derr_[it->x_][ch]; - const int8_t* const left = it->left_derr_[ch]; - int16_t (* const c)[16] = &tmp[ch * 4]; - int err0, err1, err2, err3; - c[0][0] += (C1 * top[0] + C2 * left[0]) >> (DSHIFT - DSCALE); - err0 = QuantizeSingle(&c[0][0], mtx); - c[1][0] += (C1 * top[1] + C2 * err0) >> (DSHIFT - DSCALE); - err1 = QuantizeSingle(&c[1][0], mtx); - c[2][0] += (C1 * err0 + C2 * left[1]) >> (DSHIFT - DSCALE); - err2 = QuantizeSingle(&c[2][0], mtx); - c[3][0] += (C1 * err1 + C2 * err2) >> (DSHIFT - DSCALE); - err3 = QuantizeSingle(&c[3][0], mtx); - // error 'err' is bounded by mtx->q_[0] which is 132 at max. Hence - // err >> DSCALE will fit in an int8_t type if DSCALE>=1. - assert(abs(err1) <= 127 && abs(err2) <= 127 && abs(err3) <= 127); - rd->derr[ch][0] = (int8_t)err1; - rd->derr[ch][1] = (int8_t)err2; - rd->derr[ch][2] = (int8_t)err3; - } -} - -static void StoreDiffusionErrors(VP8EncIterator* const it, - const VP8ModeScore* const rd) { - int ch; - for (ch = 0; ch <= 1; ++ch) { - int8_t* const top = it->top_derr_[it->x_][ch]; - int8_t* const left = it->left_derr_[ch]; - left[0] = rd->derr[ch][0]; // restore err1 - left[1] = 3 * rd->derr[ch][2] >> 2; // ... 3/4th of err3 - top[0] = rd->derr[ch][1]; // ... err2 - top[1] = rd->derr[ch][2] - left[1]; // ... 1/4th of err3. - } -} - -#undef C1 -#undef C2 -#undef DSHIFT -#undef DSCALE - -//------------------------------------------------------------------------------ - -static int ReconstructUV(VP8EncIterator* const it, VP8ModeScore* const rd, - uint8_t* const yuv_out, int mode) { - const VP8Encoder* const enc = it->enc_; - const uint8_t* const ref = it->yuv_p_ + VP8UVModeOffsets[mode]; - const uint8_t* const src = it->yuv_in_ + U_OFF_ENC; - const VP8SegmentInfo* const dqm = &enc->dqm_[it->mb_->segment_]; - int nz = 0; - int n; - int16_t tmp[8][16]; - - for (n = 0; n < 8; n += 2) { - VP8FTransform2(src + VP8ScanUV[n], ref + VP8ScanUV[n], tmp[n]); - } - if (it->top_derr_ != NULL) CorrectDCValues(it, &dqm->uv_, tmp, rd); - - if (DO_TRELLIS_UV && it->do_trellis_) { - int ch, x, y; - for (ch = 0, n = 0; ch <= 2; ch += 2) { - for (y = 0; y < 2; ++y) { - for (x = 0; x < 2; ++x, ++n) { - const int ctx = it->top_nz_[4 + ch + x] + it->left_nz_[4 + ch + y]; - const int non_zero = - TrellisQuantizeBlock(enc, tmp[n], rd->uv_levels[n], ctx, 2, - &dqm->uv_, dqm->lambda_trellis_uv_); - it->top_nz_[4 + ch + x] = it->left_nz_[4 + ch + y] = non_zero; - nz |= non_zero << n; - } - } - } - } else { - for (n = 0; n < 8; n += 2) { - nz |= VP8EncQuantize2Blocks(tmp[n], rd->uv_levels[n], &dqm->uv_) << n; - } - } - - for (n = 0; n < 8; n += 2) { - VP8ITransform(ref + VP8ScanUV[n], tmp[n], yuv_out + VP8ScanUV[n], 1); - } - return (nz << 16); -} - -//------------------------------------------------------------------------------ -// RD-opt decision. Reconstruct each modes, evalue distortion and bit-cost. -// Pick the mode is lower RD-cost = Rate + lambda * Distortion. - -static void StoreMaxDelta(VP8SegmentInfo* const dqm, const int16_t DCs[16]) { - // We look at the first three AC coefficients to determine what is the average - // delta between each sub-4x4 block. - const int v0 = abs(DCs[1]); - const int v1 = abs(DCs[2]); - const int v2 = abs(DCs[4]); - int max_v = (v1 > v0) ? v1 : v0; - max_v = (v2 > max_v) ? v2 : max_v; - if (max_v > dqm->max_edge_) dqm->max_edge_ = max_v; -} - -static void SwapModeScore(VP8ModeScore** a, VP8ModeScore** b) { - VP8ModeScore* const tmp = *a; - *a = *b; - *b = tmp; -} - -static void SwapPtr(uint8_t** a, uint8_t** b) { - uint8_t* const tmp = *a; - *a = *b; - *b = tmp; -} - -static void SwapOut(VP8EncIterator* const it) { - SwapPtr(&it->yuv_out_, &it->yuv_out2_); -} - -static void PickBestIntra16(VP8EncIterator* const it, VP8ModeScore* rd) { - const int kNumBlocks = 16; - VP8SegmentInfo* const dqm = &it->enc_->dqm_[it->mb_->segment_]; - const int lambda = dqm->lambda_i16_; - const int tlambda = dqm->tlambda_; - const uint8_t* const src = it->yuv_in_ + Y_OFF_ENC; - VP8ModeScore rd_tmp; - VP8ModeScore* rd_cur = &rd_tmp; - VP8ModeScore* rd_best = rd; - int mode; - int is_flat = IsFlatSource16(it->yuv_in_ + Y_OFF_ENC); - - rd->mode_i16 = -1; - for (mode = 0; mode < NUM_PRED_MODES; ++mode) { - uint8_t* const tmp_dst = it->yuv_out2_ + Y_OFF_ENC; // scratch buffer - rd_cur->mode_i16 = mode; - - // Reconstruct - rd_cur->nz = ReconstructIntra16(it, rd_cur, tmp_dst, mode); - - // Measure RD-score - rd_cur->D = VP8SSE16x16(src, tmp_dst); - rd_cur->SD = - tlambda ? MULT_8B(tlambda, VP8TDisto16x16(src, tmp_dst, kWeightY)) : 0; - rd_cur->H = VP8FixedCostsI16[mode]; - rd_cur->R = VP8GetCostLuma16(it, rd_cur); - if (is_flat) { - // refine the first impression (which was in pixel space) - is_flat = IsFlat(rd_cur->y_ac_levels[0], kNumBlocks, FLATNESS_LIMIT_I16); - if (is_flat) { - // Block is very flat. We put emphasis on the distortion being very low! - rd_cur->D *= 2; - rd_cur->SD *= 2; - } - } - - // Since we always examine Intra16 first, we can overwrite *rd directly. - SetRDScore(lambda, rd_cur); - if (mode == 0 || rd_cur->score < rd_best->score) { - SwapModeScore(&rd_cur, &rd_best); - SwapOut(it); - } - } - if (rd_best != rd) { - memcpy(rd, rd_best, sizeof(*rd)); - } - SetRDScore(dqm->lambda_mode_, rd); // finalize score for mode decision. - VP8SetIntra16Mode(it, rd->mode_i16); - - // we have a blocky macroblock (only DCs are non-zero) with fairly high - // distortion, record max delta so we can later adjust the minimal filtering - // strength needed to smooth these blocks out. - if ((rd->nz & 0x100ffff) == 0x1000000 && rd->D > dqm->min_disto_) { - StoreMaxDelta(dqm, rd->y_dc_levels); - } -} - -//------------------------------------------------------------------------------ - -// return the cost array corresponding to the surrounding prediction modes. -static const uint16_t* GetCostModeI4(VP8EncIterator* const it, - const uint8_t modes[16]) { - const int preds_w = it->enc_->preds_w_; - const int x = (it->i4_ & 3), y = it->i4_ >> 2; - const int left = (x == 0) ? it->preds_[y * preds_w - 1] : modes[it->i4_ - 1]; - const int top = (y == 0) ? it->preds_[-preds_w + x] : modes[it->i4_ - 4]; - return VP8FixedCostsI4[top][left]; -} - -static int PickBestIntra4(VP8EncIterator* const it, VP8ModeScore* const rd) { - const VP8Encoder* const enc = it->enc_; - const VP8SegmentInfo* const dqm = &enc->dqm_[it->mb_->segment_]; - const int lambda = dqm->lambda_i4_; - const int tlambda = dqm->tlambda_; - const uint8_t* const src0 = it->yuv_in_ + Y_OFF_ENC; - uint8_t* const best_blocks = it->yuv_out2_ + Y_OFF_ENC; - int total_header_bits = 0; - VP8ModeScore rd_best; - - if (enc->max_i4_header_bits_ == 0) { - return 0; - } - - InitScore(&rd_best); - rd_best.H = 211; // '211' is the value of VP8BitCost(0, 145) - SetRDScore(dqm->lambda_mode_, &rd_best); - VP8IteratorStartI4(it); - do { - const int kNumBlocks = 1; - VP8ModeScore rd_i4; - int mode; - int best_mode = -1; - const uint8_t* const src = src0 + VP8Scan[it->i4_]; - const uint16_t* const mode_costs = GetCostModeI4(it, rd->modes_i4); - uint8_t* best_block = best_blocks + VP8Scan[it->i4_]; - uint8_t* tmp_dst = it->yuv_p_ + I4TMP; // scratch buffer. - - InitScore(&rd_i4); - VP8MakeIntra4Preds(it); - for (mode = 0; mode < NUM_BMODES; ++mode) { - VP8ModeScore rd_tmp; - int16_t tmp_levels[16]; - - // Reconstruct - rd_tmp.nz = - ReconstructIntra4(it, tmp_levels, src, tmp_dst, mode) << it->i4_; - - // Compute RD-score - rd_tmp.D = VP8SSE4x4(src, tmp_dst); - rd_tmp.SD = - tlambda ? MULT_8B(tlambda, VP8TDisto4x4(src, tmp_dst, kWeightY)) - : 0; - rd_tmp.H = mode_costs[mode]; - - // Add flatness penalty, to avoid flat area to be mispredicted - // by a complex mode. - if (mode > 0 && IsFlat(tmp_levels, kNumBlocks, FLATNESS_LIMIT_I4)) { - rd_tmp.R = FLATNESS_PENALTY * kNumBlocks; - } else { - rd_tmp.R = 0; - } - - // early-out check - SetRDScore(lambda, &rd_tmp); - if (best_mode >= 0 && rd_tmp.score >= rd_i4.score) continue; - - // finish computing score - rd_tmp.R += VP8GetCostLuma4(it, tmp_levels); - SetRDScore(lambda, &rd_tmp); - - if (best_mode < 0 || rd_tmp.score < rd_i4.score) { - CopyScore(&rd_i4, &rd_tmp); - best_mode = mode; - SwapPtr(&tmp_dst, &best_block); - memcpy(rd_best.y_ac_levels[it->i4_], tmp_levels, - sizeof(rd_best.y_ac_levels[it->i4_])); - } - } - SetRDScore(dqm->lambda_mode_, &rd_i4); - AddScore(&rd_best, &rd_i4); - if (rd_best.score >= rd->score) { - return 0; - } - total_header_bits += (int)rd_i4.H; // <- equal to mode_costs[best_mode]; - if (total_header_bits > enc->max_i4_header_bits_) { - return 0; - } - // Copy selected samples if not in the right place already. - if (best_block != best_blocks + VP8Scan[it->i4_]) { - VP8Copy4x4(best_block, best_blocks + VP8Scan[it->i4_]); - } - rd->modes_i4[it->i4_] = best_mode; - it->top_nz_[it->i4_ & 3] = it->left_nz_[it->i4_ >> 2] = (rd_i4.nz ? 1 : 0); - } while (VP8IteratorRotateI4(it, best_blocks)); - - // finalize state - CopyScore(rd, &rd_best); - VP8SetIntra4Mode(it, rd->modes_i4); - SwapOut(it); - memcpy(rd->y_ac_levels, rd_best.y_ac_levels, sizeof(rd->y_ac_levels)); - return 1; // select intra4x4 over intra16x16 -} - -//------------------------------------------------------------------------------ - -static void PickBestUV(VP8EncIterator* const it, VP8ModeScore* const rd) { - const int kNumBlocks = 8; - const VP8SegmentInfo* const dqm = &it->enc_->dqm_[it->mb_->segment_]; - const int lambda = dqm->lambda_uv_; - const uint8_t* const src = it->yuv_in_ + U_OFF_ENC; - uint8_t* tmp_dst = it->yuv_out2_ + U_OFF_ENC; // scratch buffer - uint8_t* dst0 = it->yuv_out_ + U_OFF_ENC; - uint8_t* dst = dst0; - VP8ModeScore rd_best; - int mode; - - rd->mode_uv = -1; - InitScore(&rd_best); - for (mode = 0; mode < NUM_PRED_MODES; ++mode) { - VP8ModeScore rd_uv; - - // Reconstruct - rd_uv.nz = ReconstructUV(it, &rd_uv, tmp_dst, mode); - - // Compute RD-score - rd_uv.D = VP8SSE16x8(src, tmp_dst); - rd_uv.SD = 0; // not calling TDisto here: it tends to flatten areas. - rd_uv.H = VP8FixedCostsUV[mode]; - rd_uv.R = VP8GetCostUV(it, &rd_uv); - if (mode > 0 && IsFlat(rd_uv.uv_levels[0], kNumBlocks, FLATNESS_LIMIT_UV)) { - rd_uv.R += FLATNESS_PENALTY * kNumBlocks; - } - - SetRDScore(lambda, &rd_uv); - if (mode == 0 || rd_uv.score < rd_best.score) { - CopyScore(&rd_best, &rd_uv); - rd->mode_uv = mode; - memcpy(rd->uv_levels, rd_uv.uv_levels, sizeof(rd->uv_levels)); - if (it->top_derr_ != NULL) { - memcpy(rd->derr, rd_uv.derr, sizeof(rd_uv.derr)); - } - SwapPtr(&dst, &tmp_dst); - } - } - VP8SetIntraUVMode(it, rd->mode_uv); - AddScore(rd, &rd_best); - if (dst != dst0) { // copy 16x8 block if needed - VP8Copy16x8(dst, dst0); - } - if (it->top_derr_ != NULL) { // store diffusion errors for next block - StoreDiffusionErrors(it, rd); - } -} - -//------------------------------------------------------------------------------ -// Final reconstruction and quantization. - -static void SimpleQuantize(VP8EncIterator* const it, VP8ModeScore* const rd) { - const VP8Encoder* const enc = it->enc_; - const int is_i16 = (it->mb_->type_ == 1); - int nz = 0; - - if (is_i16) { - nz = ReconstructIntra16(it, rd, it->yuv_out_ + Y_OFF_ENC, it->preds_[0]); - } else { - VP8IteratorStartI4(it); - do { - const int mode = - it->preds_[(it->i4_ & 3) + (it->i4_ >> 2) * enc->preds_w_]; - const uint8_t* const src = it->yuv_in_ + Y_OFF_ENC + VP8Scan[it->i4_]; - uint8_t* const dst = it->yuv_out_ + Y_OFF_ENC + VP8Scan[it->i4_]; - VP8MakeIntra4Preds(it); - nz |= ReconstructIntra4(it, rd->y_ac_levels[it->i4_], - src, dst, mode) << it->i4_; - } while (VP8IteratorRotateI4(it, it->yuv_out_ + Y_OFF_ENC)); - } - - nz |= ReconstructUV(it, rd, it->yuv_out_ + U_OFF_ENC, it->mb_->uv_mode_); - rd->nz = nz; -} - -// Refine intra16/intra4 sub-modes based on distortion only (not rate). -static void RefineUsingDistortion(VP8EncIterator* const it, - int try_both_modes, int refine_uv_mode, - VP8ModeScore* const rd) { - score_t best_score = MAX_COST; - int nz = 0; - int mode; - int is_i16 = try_both_modes || (it->mb_->type_ == 1); - - const VP8SegmentInfo* const dqm = &it->enc_->dqm_[it->mb_->segment_]; - // Some empiric constants, of approximate order of magnitude. - const int lambda_d_i16 = 106; - const int lambda_d_i4 = 11; - const int lambda_d_uv = 120; - score_t score_i4 = dqm->i4_penalty_; - score_t i4_bit_sum = 0; - const score_t bit_limit = try_both_modes ? it->enc_->mb_header_limit_ - : MAX_COST; // no early-out allowed - - if (is_i16) { // First, evaluate Intra16 distortion - int best_mode = -1; - const uint8_t* const src = it->yuv_in_ + Y_OFF_ENC; - for (mode = 0; mode < NUM_PRED_MODES; ++mode) { - const uint8_t* const ref = it->yuv_p_ + VP8I16ModeOffsets[mode]; - const score_t score = (score_t)VP8SSE16x16(src, ref) * RD_DISTO_MULT - + VP8FixedCostsI16[mode] * lambda_d_i16; - if (mode > 0 && VP8FixedCostsI16[mode] > bit_limit) { - continue; - } - - if (score < best_score) { - best_mode = mode; - best_score = score; - } - } - if (it->x_ == 0 || it->y_ == 0) { - // avoid starting a checkerboard resonance from the border. See bug #432. - if (IsFlatSource16(src)) { - best_mode = (it->x_ == 0) ? 0 : 2; - try_both_modes = 0; // stick to i16 - } - } - VP8SetIntra16Mode(it, best_mode); - // we'll reconstruct later, if i16 mode actually gets selected - } - - // Next, evaluate Intra4 - if (try_both_modes || !is_i16) { - // We don't evaluate the rate here, but just account for it through a - // constant penalty (i4 mode usually needs more bits compared to i16). - is_i16 = 0; - VP8IteratorStartI4(it); - do { - int best_i4_mode = -1; - score_t best_i4_score = MAX_COST; - const uint8_t* const src = it->yuv_in_ + Y_OFF_ENC + VP8Scan[it->i4_]; - const uint16_t* const mode_costs = GetCostModeI4(it, rd->modes_i4); - - VP8MakeIntra4Preds(it); - for (mode = 0; mode < NUM_BMODES; ++mode) { - const uint8_t* const ref = it->yuv_p_ + VP8I4ModeOffsets[mode]; - const score_t score = VP8SSE4x4(src, ref) * RD_DISTO_MULT - + mode_costs[mode] * lambda_d_i4; - if (score < best_i4_score) { - best_i4_mode = mode; - best_i4_score = score; - } - } - i4_bit_sum += mode_costs[best_i4_mode]; - rd->modes_i4[it->i4_] = best_i4_mode; - score_i4 += best_i4_score; - if (score_i4 >= best_score || i4_bit_sum > bit_limit) { - // Intra4 won't be better than Intra16. Bail out and pick Intra16. - is_i16 = 1; - break; - } else { // reconstruct partial block inside yuv_out2_ buffer - uint8_t* const tmp_dst = it->yuv_out2_ + Y_OFF_ENC + VP8Scan[it->i4_]; - nz |= ReconstructIntra4(it, rd->y_ac_levels[it->i4_], - src, tmp_dst, best_i4_mode) << it->i4_; - } - } while (VP8IteratorRotateI4(it, it->yuv_out2_ + Y_OFF_ENC)); - } - - // Final reconstruction, depending on which mode is selected. - if (!is_i16) { - VP8SetIntra4Mode(it, rd->modes_i4); - SwapOut(it); - best_score = score_i4; - } else { - nz = ReconstructIntra16(it, rd, it->yuv_out_ + Y_OFF_ENC, it->preds_[0]); - } - - // ... and UV! - if (refine_uv_mode) { - int best_mode = -1; - score_t best_uv_score = MAX_COST; - const uint8_t* const src = it->yuv_in_ + U_OFF_ENC; - for (mode = 0; mode < NUM_PRED_MODES; ++mode) { - const uint8_t* const ref = it->yuv_p_ + VP8UVModeOffsets[mode]; - const score_t score = VP8SSE16x8(src, ref) * RD_DISTO_MULT - + VP8FixedCostsUV[mode] * lambda_d_uv; - if (score < best_uv_score) { - best_mode = mode; - best_uv_score = score; - } - } - VP8SetIntraUVMode(it, best_mode); - } - nz |= ReconstructUV(it, rd, it->yuv_out_ + U_OFF_ENC, it->mb_->uv_mode_); - - rd->nz = nz; - rd->score = best_score; -} - -//------------------------------------------------------------------------------ -// Entry point - -int VP8Decimate(VP8EncIterator* const it, VP8ModeScore* const rd, - VP8RDLevel rd_opt) { - int is_skipped; - const int method = it->enc_->method_; - - InitScore(rd); - - // We can perform predictions for Luma16x16 and Chroma8x8 already. - // Luma4x4 predictions needs to be done as-we-go. - VP8MakeLuma16Preds(it); - VP8MakeChroma8Preds(it); - - if (rd_opt > RD_OPT_NONE) { - it->do_trellis_ = (rd_opt >= RD_OPT_TRELLIS_ALL); - PickBestIntra16(it, rd); - if (method >= 2) { - PickBestIntra4(it, rd); - } - PickBestUV(it, rd); - if (rd_opt == RD_OPT_TRELLIS) { // finish off with trellis-optim now - it->do_trellis_ = 1; - SimpleQuantize(it, rd); - } - } else { - // At this point we have heuristically decided intra16 / intra4. - // For method >= 2, pick the best intra4/intra16 based on SSE (~tad slower). - // For method <= 1, we don't re-examine the decision but just go ahead with - // quantization/reconstruction. - RefineUsingDistortion(it, (method >= 2), (method >= 1), rd); - } - is_skipped = (rd->nz == 0); - VP8SetSkip(it, is_skipped); - return is_skipped; -} diff --git a/Extended/libwebp/src/enc/syntax_enc.c b/Extended/libwebp/src/enc/syntax_enc.c deleted file mode 100644 index a9e5a6c..0000000 --- a/Extended/libwebp/src/enc/syntax_enc.c +++ /dev/null @@ -1,388 +0,0 @@ -// Copyright 2011 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Header syntax writing -// -// Author: Skal (pascal.massimino@gmail.com) - -#include - -#include "src/utils/utils.h" -#include "src/webp/format_constants.h" // RIFF constants -#include "src/webp/mux_types.h" // ALPHA_FLAG -#include "src/enc/vp8i_enc.h" - -//------------------------------------------------------------------------------ -// Helper functions - -static int IsVP8XNeeded(const VP8Encoder* const enc) { - return !!enc->has_alpha_; // Currently the only case when VP8X is needed. - // This could change in the future. -} - -static int PutPaddingByte(const WebPPicture* const pic) { - const uint8_t pad_byte[1] = { 0 }; - return !!pic->writer(pad_byte, 1, pic); -} - -//------------------------------------------------------------------------------ -// Writers for header's various pieces (in order of appearance) - -static WebPEncodingError PutRIFFHeader(const VP8Encoder* const enc, - size_t riff_size) { - const WebPPicture* const pic = enc->pic_; - uint8_t riff[RIFF_HEADER_SIZE] = { - 'R', 'I', 'F', 'F', 0, 0, 0, 0, 'W', 'E', 'B', 'P' - }; - assert(riff_size == (uint32_t)riff_size); - PutLE32(riff + TAG_SIZE, (uint32_t)riff_size); - if (!pic->writer(riff, sizeof(riff), pic)) { - return VP8_ENC_ERROR_BAD_WRITE; - } - return VP8_ENC_OK; -} - -static WebPEncodingError PutVP8XHeader(const VP8Encoder* const enc) { - const WebPPicture* const pic = enc->pic_; - uint8_t vp8x[CHUNK_HEADER_SIZE + VP8X_CHUNK_SIZE] = { - 'V', 'P', '8', 'X' - }; - uint32_t flags = 0; - - assert(IsVP8XNeeded(enc)); - assert(pic->width >= 1 && pic->height >= 1); - assert(pic->width <= MAX_CANVAS_SIZE && pic->height <= MAX_CANVAS_SIZE); - - if (enc->has_alpha_) { - flags |= ALPHA_FLAG; - } - - PutLE32(vp8x + TAG_SIZE, VP8X_CHUNK_SIZE); - PutLE32(vp8x + CHUNK_HEADER_SIZE, flags); - PutLE24(vp8x + CHUNK_HEADER_SIZE + 4, pic->width - 1); - PutLE24(vp8x + CHUNK_HEADER_SIZE + 7, pic->height - 1); - if (!pic->writer(vp8x, sizeof(vp8x), pic)) { - return VP8_ENC_ERROR_BAD_WRITE; - } - return VP8_ENC_OK; -} - -static WebPEncodingError PutAlphaChunk(const VP8Encoder* const enc) { - const WebPPicture* const pic = enc->pic_; - uint8_t alpha_chunk_hdr[CHUNK_HEADER_SIZE] = { - 'A', 'L', 'P', 'H' - }; - - assert(enc->has_alpha_); - - // Alpha chunk header. - PutLE32(alpha_chunk_hdr + TAG_SIZE, enc->alpha_data_size_); - if (!pic->writer(alpha_chunk_hdr, sizeof(alpha_chunk_hdr), pic)) { - return VP8_ENC_ERROR_BAD_WRITE; - } - - // Alpha chunk data. - if (!pic->writer(enc->alpha_data_, enc->alpha_data_size_, pic)) { - return VP8_ENC_ERROR_BAD_WRITE; - } - - // Padding. - if ((enc->alpha_data_size_ & 1) && !PutPaddingByte(pic)) { - return VP8_ENC_ERROR_BAD_WRITE; - } - return VP8_ENC_OK; -} - -static WebPEncodingError PutVP8Header(const WebPPicture* const pic, - size_t vp8_size) { - uint8_t vp8_chunk_hdr[CHUNK_HEADER_SIZE] = { - 'V', 'P', '8', ' ' - }; - assert(vp8_size == (uint32_t)vp8_size); - PutLE32(vp8_chunk_hdr + TAG_SIZE, (uint32_t)vp8_size); - if (!pic->writer(vp8_chunk_hdr, sizeof(vp8_chunk_hdr), pic)) { - return VP8_ENC_ERROR_BAD_WRITE; - } - return VP8_ENC_OK; -} - -static WebPEncodingError PutVP8FrameHeader(const WebPPicture* const pic, - int profile, size_t size0) { - uint8_t vp8_frm_hdr[VP8_FRAME_HEADER_SIZE]; - uint32_t bits; - - if (size0 >= VP8_MAX_PARTITION0_SIZE) { // partition #0 is too big to fit - return VP8_ENC_ERROR_PARTITION0_OVERFLOW; - } - - // Paragraph 9.1. - bits = 0 // keyframe (1b) - | (profile << 1) // profile (3b) - | (1 << 4) // visible (1b) - | ((uint32_t)size0 << 5); // partition length (19b) - vp8_frm_hdr[0] = (bits >> 0) & 0xff; - vp8_frm_hdr[1] = (bits >> 8) & 0xff; - vp8_frm_hdr[2] = (bits >> 16) & 0xff; - // signature - vp8_frm_hdr[3] = (VP8_SIGNATURE >> 16) & 0xff; - vp8_frm_hdr[4] = (VP8_SIGNATURE >> 8) & 0xff; - vp8_frm_hdr[5] = (VP8_SIGNATURE >> 0) & 0xff; - // dimensions - vp8_frm_hdr[6] = pic->width & 0xff; - vp8_frm_hdr[7] = pic->width >> 8; - vp8_frm_hdr[8] = pic->height & 0xff; - vp8_frm_hdr[9] = pic->height >> 8; - - if (!pic->writer(vp8_frm_hdr, sizeof(vp8_frm_hdr), pic)) { - return VP8_ENC_ERROR_BAD_WRITE; - } - return VP8_ENC_OK; -} - -// WebP Headers. -static int PutWebPHeaders(const VP8Encoder* const enc, size_t size0, - size_t vp8_size, size_t riff_size) { - WebPPicture* const pic = enc->pic_; - WebPEncodingError err = VP8_ENC_OK; - - // RIFF header. - err = PutRIFFHeader(enc, riff_size); - if (err != VP8_ENC_OK) goto Error; - - // VP8X. - if (IsVP8XNeeded(enc)) { - err = PutVP8XHeader(enc); - if (err != VP8_ENC_OK) goto Error; - } - - // Alpha. - if (enc->has_alpha_) { - err = PutAlphaChunk(enc); - if (err != VP8_ENC_OK) goto Error; - } - - // VP8 header. - err = PutVP8Header(pic, vp8_size); - if (err != VP8_ENC_OK) goto Error; - - // VP8 frame header. - err = PutVP8FrameHeader(pic, enc->profile_, size0); - if (err != VP8_ENC_OK) goto Error; - - // All OK. - return 1; - - // Error. - Error: - return WebPEncodingSetError(pic, err); -} - -// Segmentation header -static void PutSegmentHeader(VP8BitWriter* const bw, - const VP8Encoder* const enc) { - const VP8EncSegmentHeader* const hdr = &enc->segment_hdr_; - const VP8EncProba* const proba = &enc->proba_; - if (VP8PutBitUniform(bw, (hdr->num_segments_ > 1))) { - // We always 'update' the quant and filter strength values - const int update_data = 1; - int s; - VP8PutBitUniform(bw, hdr->update_map_); - if (VP8PutBitUniform(bw, update_data)) { - // we always use absolute values, not relative ones - VP8PutBitUniform(bw, 1); // (segment_feature_mode = 1. Paragraph 9.3.) - for (s = 0; s < NUM_MB_SEGMENTS; ++s) { - VP8PutSignedBits(bw, enc->dqm_[s].quant_, 7); - } - for (s = 0; s < NUM_MB_SEGMENTS; ++s) { - VP8PutSignedBits(bw, enc->dqm_[s].fstrength_, 6); - } - } - if (hdr->update_map_) { - for (s = 0; s < 3; ++s) { - if (VP8PutBitUniform(bw, (proba->segments_[s] != 255u))) { - VP8PutBits(bw, proba->segments_[s], 8); - } - } - } - } -} - -// Filtering parameters header -static void PutFilterHeader(VP8BitWriter* const bw, - const VP8EncFilterHeader* const hdr) { - const int use_lf_delta = (hdr->i4x4_lf_delta_ != 0); - VP8PutBitUniform(bw, hdr->simple_); - VP8PutBits(bw, hdr->level_, 6); - VP8PutBits(bw, hdr->sharpness_, 3); - if (VP8PutBitUniform(bw, use_lf_delta)) { - // '0' is the default value for i4x4_lf_delta_ at frame #0. - const int need_update = (hdr->i4x4_lf_delta_ != 0); - if (VP8PutBitUniform(bw, need_update)) { - // we don't use ref_lf_delta => emit four 0 bits - VP8PutBits(bw, 0, 4); - // we use mode_lf_delta for i4x4 - VP8PutSignedBits(bw, hdr->i4x4_lf_delta_, 6); - VP8PutBits(bw, 0, 3); // all others unused - } - } -} - -// Nominal quantization parameters -static void PutQuant(VP8BitWriter* const bw, - const VP8Encoder* const enc) { - VP8PutBits(bw, enc->base_quant_, 7); - VP8PutSignedBits(bw, enc->dq_y1_dc_, 4); - VP8PutSignedBits(bw, enc->dq_y2_dc_, 4); - VP8PutSignedBits(bw, enc->dq_y2_ac_, 4); - VP8PutSignedBits(bw, enc->dq_uv_dc_, 4); - VP8PutSignedBits(bw, enc->dq_uv_ac_, 4); -} - -// Partition sizes -static int EmitPartitionsSize(const VP8Encoder* const enc, - WebPPicture* const pic) { - uint8_t buf[3 * (MAX_NUM_PARTITIONS - 1)]; - int p; - for (p = 0; p < enc->num_parts_ - 1; ++p) { - const size_t part_size = VP8BitWriterSize(enc->parts_ + p); - if (part_size >= VP8_MAX_PARTITION_SIZE) { - return WebPEncodingSetError(pic, VP8_ENC_ERROR_PARTITION_OVERFLOW); - } - buf[3 * p + 0] = (part_size >> 0) & 0xff; - buf[3 * p + 1] = (part_size >> 8) & 0xff; - buf[3 * p + 2] = (part_size >> 16) & 0xff; - } - return p ? pic->writer(buf, 3 * p, pic) : 1; -} - -//------------------------------------------------------------------------------ - -static int GeneratePartition0(VP8Encoder* const enc) { - VP8BitWriter* const bw = &enc->bw_; - const int mb_size = enc->mb_w_ * enc->mb_h_; - uint64_t pos1, pos2, pos3; - - pos1 = VP8BitWriterPos(bw); - if (!VP8BitWriterInit(bw, mb_size * 7 / 8)) { // ~7 bits per macroblock - return WebPEncodingSetError(enc->pic_, VP8_ENC_ERROR_OUT_OF_MEMORY); - } - VP8PutBitUniform(bw, 0); // colorspace - VP8PutBitUniform(bw, 0); // clamp type - - PutSegmentHeader(bw, enc); - PutFilterHeader(bw, &enc->filter_hdr_); - VP8PutBits(bw, enc->num_parts_ == 8 ? 3 : - enc->num_parts_ == 4 ? 2 : - enc->num_parts_ == 2 ? 1 : 0, 2); - PutQuant(bw, enc); - VP8PutBitUniform(bw, 0); // no proba update - VP8WriteProbas(bw, &enc->proba_); - pos2 = VP8BitWriterPos(bw); - VP8CodeIntraModes(enc); - VP8BitWriterFinish(bw); - - pos3 = VP8BitWriterPos(bw); - -#if !defined(WEBP_DISABLE_STATS) - if (enc->pic_->stats) { - enc->pic_->stats->header_bytes[0] = (int)((pos2 - pos1 + 7) >> 3); - enc->pic_->stats->header_bytes[1] = (int)((pos3 - pos2 + 7) >> 3); - enc->pic_->stats->alpha_data_size = (int)enc->alpha_data_size_; - } -#else - (void)pos1; - (void)pos2; - (void)pos3; -#endif - if (bw->error_) { - return WebPEncodingSetError(enc->pic_, VP8_ENC_ERROR_OUT_OF_MEMORY); - } - return 1; -} - -void VP8EncFreeBitWriters(VP8Encoder* const enc) { - int p; - VP8BitWriterWipeOut(&enc->bw_); - for (p = 0; p < enc->num_parts_; ++p) { - VP8BitWriterWipeOut(enc->parts_ + p); - } -} - -int VP8EncWrite(VP8Encoder* const enc) { - WebPPicture* const pic = enc->pic_; - VP8BitWriter* const bw = &enc->bw_; - const int task_percent = 19; - const int percent_per_part = task_percent / enc->num_parts_; - const int final_percent = enc->percent_ + task_percent; - int ok = 0; - size_t vp8_size, pad, riff_size; - int p; - - // Partition #0 with header and partition sizes - ok = GeneratePartition0(enc); - if (!ok) return 0; - - // Compute VP8 size - vp8_size = VP8_FRAME_HEADER_SIZE + - VP8BitWriterSize(bw) + - 3 * (enc->num_parts_ - 1); - for (p = 0; p < enc->num_parts_; ++p) { - vp8_size += VP8BitWriterSize(enc->parts_ + p); - } - pad = vp8_size & 1; - vp8_size += pad; - - // Compute RIFF size - // At the minimum it is: "WEBPVP8 nnnn" + VP8 data size. - riff_size = TAG_SIZE + CHUNK_HEADER_SIZE + vp8_size; - if (IsVP8XNeeded(enc)) { // Add size for: VP8X header + data. - riff_size += CHUNK_HEADER_SIZE + VP8X_CHUNK_SIZE; - } - if (enc->has_alpha_) { // Add size for: ALPH header + data. - const uint32_t padded_alpha_size = enc->alpha_data_size_ + - (enc->alpha_data_size_ & 1); - riff_size += CHUNK_HEADER_SIZE + padded_alpha_size; - } - // Sanity check. - if (riff_size > 0xfffffffeU) { - return WebPEncodingSetError(pic, VP8_ENC_ERROR_FILE_TOO_BIG); - } - - // Emit headers and partition #0 - { - const uint8_t* const part0 = VP8BitWriterBuf(bw); - const size_t size0 = VP8BitWriterSize(bw); - ok = ok && PutWebPHeaders(enc, size0, vp8_size, riff_size) - && pic->writer(part0, size0, pic) - && EmitPartitionsSize(enc, pic); - VP8BitWriterWipeOut(bw); // will free the internal buffer. - } - - // Token partitions - for (p = 0; p < enc->num_parts_; ++p) { - const uint8_t* const buf = VP8BitWriterBuf(enc->parts_ + p); - const size_t size = VP8BitWriterSize(enc->parts_ + p); - if (size) ok = ok && pic->writer(buf, size, pic); - VP8BitWriterWipeOut(enc->parts_ + p); // will free the internal buffer. - ok = ok && WebPReportProgress(pic, enc->percent_ + percent_per_part, - &enc->percent_); - } - - // Padding byte - if (ok && pad) { - ok = PutPaddingByte(pic); - } - - enc->coded_size_ = (int)(CHUNK_HEADER_SIZE + riff_size); - ok = ok && WebPReportProgress(pic, final_percent, &enc->percent_); - return ok; -} - -//------------------------------------------------------------------------------ - diff --git a/Extended/libwebp/src/enc/token_enc.c b/Extended/libwebp/src/enc/token_enc.c deleted file mode 100644 index 3a2192a..0000000 --- a/Extended/libwebp/src/enc/token_enc.c +++ /dev/null @@ -1,262 +0,0 @@ -// Copyright 2011 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Paginated token buffer -// -// A 'token' is a bit value associated with a probability, either fixed -// or a later-to-be-determined after statistics have been collected. -// For dynamic probability, we just record the slot id (idx) for the probability -// value in the final probability array (uint8_t* probas in VP8EmitTokens). -// -// Author: Skal (pascal.massimino@gmail.com) - -#include -#include -#include - -#include "src/enc/cost_enc.h" -#include "src/enc/vp8i_enc.h" -#include "src/utils/utils.h" - -#if !defined(DISABLE_TOKEN_BUFFER) - -// we use pages to reduce the number of memcpy() -#define MIN_PAGE_SIZE 8192 // minimum number of token per page -#define FIXED_PROBA_BIT (1u << 14) - -typedef uint16_t token_t; // bit #15: bit value - // bit #14: flags for constant proba or idx - // bits #0..13: slot or constant proba -struct VP8Tokens { - VP8Tokens* next_; // pointer to next page -}; -// Token data is located in memory just after the next_ field. -// This macro is used to return their address and hide the trick. -#define TOKEN_DATA(p) ((const token_t*)&(p)[1]) - -//------------------------------------------------------------------------------ - -void VP8TBufferInit(VP8TBuffer* const b, int page_size) { - b->tokens_ = NULL; - b->pages_ = NULL; - b->last_page_ = &b->pages_; - b->left_ = 0; - b->page_size_ = (page_size < MIN_PAGE_SIZE) ? MIN_PAGE_SIZE : page_size; - b->error_ = 0; -} - -void VP8TBufferClear(VP8TBuffer* const b) { - if (b != NULL) { - VP8Tokens* p = b->pages_; - while (p != NULL) { - VP8Tokens* const next = p->next_; - WebPSafeFree(p); - p = next; - } - VP8TBufferInit(b, b->page_size_); - } -} - -static int TBufferNewPage(VP8TBuffer* const b) { - VP8Tokens* page = NULL; - if (!b->error_) { - const size_t size = sizeof(*page) + b->page_size_ * sizeof(token_t); - page = (VP8Tokens*)WebPSafeMalloc(1ULL, size); - } - if (page == NULL) { - b->error_ = 1; - return 0; - } - page->next_ = NULL; - - *b->last_page_ = page; - b->last_page_ = &page->next_; - b->left_ = b->page_size_; - b->tokens_ = (token_t*)TOKEN_DATA(page); - return 1; -} - -//------------------------------------------------------------------------------ - -#define TOKEN_ID(t, b, ctx) \ - (NUM_PROBAS * ((ctx) + NUM_CTX * ((b) + NUM_BANDS * (t)))) - -static WEBP_INLINE uint32_t AddToken(VP8TBuffer* const b, uint32_t bit, - uint32_t proba_idx, - proba_t* const stats) { - assert(proba_idx < FIXED_PROBA_BIT); - assert(bit <= 1); - if (b->left_ > 0 || TBufferNewPage(b)) { - const int slot = --b->left_; - b->tokens_[slot] = (bit << 15) | proba_idx; - } - VP8RecordStats(bit, stats); - return bit; -} - -static WEBP_INLINE void AddConstantToken(VP8TBuffer* const b, - uint32_t bit, uint32_t proba) { - assert(proba < 256); - assert(bit <= 1); - if (b->left_ > 0 || TBufferNewPage(b)) { - const int slot = --b->left_; - b->tokens_[slot] = (bit << 15) | FIXED_PROBA_BIT | proba; - } -} - -int VP8RecordCoeffTokens(int ctx, const struct VP8Residual* const res, - VP8TBuffer* const tokens) { - const int16_t* const coeffs = res->coeffs; - const int coeff_type = res->coeff_type; - const int last = res->last; - int n = res->first; - uint32_t base_id = TOKEN_ID(coeff_type, n, ctx); - // should be stats[VP8EncBands[n]], but it's equivalent for n=0 or 1 - proba_t* s = res->stats[n][ctx]; - if (!AddToken(tokens, last >= 0, base_id + 0, s + 0)) { - return 0; - } - - while (n < 16) { - const int c = coeffs[n++]; - const int sign = c < 0; - const uint32_t v = sign ? -c : c; - if (!AddToken(tokens, v != 0, base_id + 1, s + 1)) { - base_id = TOKEN_ID(coeff_type, VP8EncBands[n], 0); // ctx=0 - s = res->stats[VP8EncBands[n]][0]; - continue; - } - if (!AddToken(tokens, v > 1, base_id + 2, s + 2)) { - base_id = TOKEN_ID(coeff_type, VP8EncBands[n], 1); // ctx=1 - s = res->stats[VP8EncBands[n]][1]; - } else { - if (!AddToken(tokens, v > 4, base_id + 3, s + 3)) { - if (AddToken(tokens, v != 2, base_id + 4, s + 4)) { - AddToken(tokens, v == 4, base_id + 5, s + 5); - } - } else if (!AddToken(tokens, v > 10, base_id + 6, s + 6)) { - if (!AddToken(tokens, v > 6, base_id + 7, s + 7)) { - AddConstantToken(tokens, v == 6, 159); - } else { - AddConstantToken(tokens, v >= 9, 165); - AddConstantToken(tokens, !(v & 1), 145); - } - } else { - int mask; - const uint8_t* tab; - uint32_t residue = v - 3; - if (residue < (8 << 1)) { // VP8Cat3 (3b) - AddToken(tokens, 0, base_id + 8, s + 8); - AddToken(tokens, 0, base_id + 9, s + 9); - residue -= (8 << 0); - mask = 1 << 2; - tab = VP8Cat3; - } else if (residue < (8 << 2)) { // VP8Cat4 (4b) - AddToken(tokens, 0, base_id + 8, s + 8); - AddToken(tokens, 1, base_id + 9, s + 9); - residue -= (8 << 1); - mask = 1 << 3; - tab = VP8Cat4; - } else if (residue < (8 << 3)) { // VP8Cat5 (5b) - AddToken(tokens, 1, base_id + 8, s + 8); - AddToken(tokens, 0, base_id + 10, s + 9); - residue -= (8 << 2); - mask = 1 << 4; - tab = VP8Cat5; - } else { // VP8Cat6 (11b) - AddToken(tokens, 1, base_id + 8, s + 8); - AddToken(tokens, 1, base_id + 10, s + 9); - residue -= (8 << 3); - mask = 1 << 10; - tab = VP8Cat6; - } - while (mask) { - AddConstantToken(tokens, !!(residue & mask), *tab++); - mask >>= 1; - } - } - base_id = TOKEN_ID(coeff_type, VP8EncBands[n], 2); // ctx=2 - s = res->stats[VP8EncBands[n]][2]; - } - AddConstantToken(tokens, sign, 128); - if (n == 16 || !AddToken(tokens, n <= last, base_id + 0, s + 0)) { - return 1; // EOB - } - } - return 1; -} - -#undef TOKEN_ID - -//------------------------------------------------------------------------------ -// Final coding pass, with known probabilities - -int VP8EmitTokens(VP8TBuffer* const b, VP8BitWriter* const bw, - const uint8_t* const probas, int final_pass) { - const VP8Tokens* p = b->pages_; - assert(!b->error_); - while (p != NULL) { - const VP8Tokens* const next = p->next_; - const int N = (next == NULL) ? b->left_ : 0; - int n = b->page_size_; - const token_t* const tokens = TOKEN_DATA(p); - while (n-- > N) { - const token_t token = tokens[n]; - const int bit = (token >> 15) & 1; - if (token & FIXED_PROBA_BIT) { - VP8PutBit(bw, bit, token & 0xffu); // constant proba - } else { - VP8PutBit(bw, bit, probas[token & 0x3fffu]); - } - } - if (final_pass) WebPSafeFree((void*)p); - p = next; - } - if (final_pass) b->pages_ = NULL; - return 1; -} - -// Size estimation -size_t VP8EstimateTokenSize(VP8TBuffer* const b, const uint8_t* const probas) { - size_t size = 0; - const VP8Tokens* p = b->pages_; - assert(!b->error_); - while (p != NULL) { - const VP8Tokens* const next = p->next_; - const int N = (next == NULL) ? b->left_ : 0; - int n = b->page_size_; - const token_t* const tokens = TOKEN_DATA(p); - while (n-- > N) { - const token_t token = tokens[n]; - const int bit = token & (1 << 15); - if (token & FIXED_PROBA_BIT) { - size += VP8BitCost(bit, token & 0xffu); - } else { - size += VP8BitCost(bit, probas[token & 0x3fffu]); - } - } - p = next; - } - return size; -} - -//------------------------------------------------------------------------------ - -#else // DISABLE_TOKEN_BUFFER - -void VP8TBufferInit(VP8TBuffer* const b, int page_size) { - (void)b; - (void)page_size; -} -void VP8TBufferClear(VP8TBuffer* const b) { - (void)b; -} - -#endif // !DISABLE_TOKEN_BUFFER - diff --git a/Extended/libwebp/src/enc/tree_enc.c b/Extended/libwebp/src/enc/tree_enc.c deleted file mode 100644 index 64ed283..0000000 --- a/Extended/libwebp/src/enc/tree_enc.c +++ /dev/null @@ -1,504 +0,0 @@ -// Copyright 2011 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Coding of token probabilities, intra modes and segments. -// -// Author: Skal (pascal.massimino@gmail.com) - -#include "src/enc/vp8i_enc.h" - -//------------------------------------------------------------------------------ -// Default probabilities - -// Paragraph 13.5 -const uint8_t - VP8CoeffsProba0[NUM_TYPES][NUM_BANDS][NUM_CTX][NUM_PROBAS] = { - { { { 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128 }, - { 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128 }, - { 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128 } - }, - { { 253, 136, 254, 255, 228, 219, 128, 128, 128, 128, 128 }, - { 189, 129, 242, 255, 227, 213, 255, 219, 128, 128, 128 }, - { 106, 126, 227, 252, 214, 209, 255, 255, 128, 128, 128 } - }, - { { 1, 98, 248, 255, 236, 226, 255, 255, 128, 128, 128 }, - { 181, 133, 238, 254, 221, 234, 255, 154, 128, 128, 128 }, - { 78, 134, 202, 247, 198, 180, 255, 219, 128, 128, 128 }, - }, - { { 1, 185, 249, 255, 243, 255, 128, 128, 128, 128, 128 }, - { 184, 150, 247, 255, 236, 224, 128, 128, 128, 128, 128 }, - { 77, 110, 216, 255, 236, 230, 128, 128, 128, 128, 128 }, - }, - { { 1, 101, 251, 255, 241, 255, 128, 128, 128, 128, 128 }, - { 170, 139, 241, 252, 236, 209, 255, 255, 128, 128, 128 }, - { 37, 116, 196, 243, 228, 255, 255, 255, 128, 128, 128 } - }, - { { 1, 204, 254, 255, 245, 255, 128, 128, 128, 128, 128 }, - { 207, 160, 250, 255, 238, 128, 128, 128, 128, 128, 128 }, - { 102, 103, 231, 255, 211, 171, 128, 128, 128, 128, 128 } - }, - { { 1, 152, 252, 255, 240, 255, 128, 128, 128, 128, 128 }, - { 177, 135, 243, 255, 234, 225, 128, 128, 128, 128, 128 }, - { 80, 129, 211, 255, 194, 224, 128, 128, 128, 128, 128 } - }, - { { 1, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128 }, - { 246, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128 }, - { 255, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128 } - } - }, - { { { 198, 35, 237, 223, 193, 187, 162, 160, 145, 155, 62 }, - { 131, 45, 198, 221, 172, 176, 220, 157, 252, 221, 1 }, - { 68, 47, 146, 208, 149, 167, 221, 162, 255, 223, 128 } - }, - { { 1, 149, 241, 255, 221, 224, 255, 255, 128, 128, 128 }, - { 184, 141, 234, 253, 222, 220, 255, 199, 128, 128, 128 }, - { 81, 99, 181, 242, 176, 190, 249, 202, 255, 255, 128 } - }, - { { 1, 129, 232, 253, 214, 197, 242, 196, 255, 255, 128 }, - { 99, 121, 210, 250, 201, 198, 255, 202, 128, 128, 128 }, - { 23, 91, 163, 242, 170, 187, 247, 210, 255, 255, 128 } - }, - { { 1, 200, 246, 255, 234, 255, 128, 128, 128, 128, 128 }, - { 109, 178, 241, 255, 231, 245, 255, 255, 128, 128, 128 }, - { 44, 130, 201, 253, 205, 192, 255, 255, 128, 128, 128 } - }, - { { 1, 132, 239, 251, 219, 209, 255, 165, 128, 128, 128 }, - { 94, 136, 225, 251, 218, 190, 255, 255, 128, 128, 128 }, - { 22, 100, 174, 245, 186, 161, 255, 199, 128, 128, 128 } - }, - { { 1, 182, 249, 255, 232, 235, 128, 128, 128, 128, 128 }, - { 124, 143, 241, 255, 227, 234, 128, 128, 128, 128, 128 }, - { 35, 77, 181, 251, 193, 211, 255, 205, 128, 128, 128 } - }, - { { 1, 157, 247, 255, 236, 231, 255, 255, 128, 128, 128 }, - { 121, 141, 235, 255, 225, 227, 255, 255, 128, 128, 128 }, - { 45, 99, 188, 251, 195, 217, 255, 224, 128, 128, 128 } - }, - { { 1, 1, 251, 255, 213, 255, 128, 128, 128, 128, 128 }, - { 203, 1, 248, 255, 255, 128, 128, 128, 128, 128, 128 }, - { 137, 1, 177, 255, 224, 255, 128, 128, 128, 128, 128 } - } - }, - { { { 253, 9, 248, 251, 207, 208, 255, 192, 128, 128, 128 }, - { 175, 13, 224, 243, 193, 185, 249, 198, 255, 255, 128 }, - { 73, 17, 171, 221, 161, 179, 236, 167, 255, 234, 128 } - }, - { { 1, 95, 247, 253, 212, 183, 255, 255, 128, 128, 128 }, - { 239, 90, 244, 250, 211, 209, 255, 255, 128, 128, 128 }, - { 155, 77, 195, 248, 188, 195, 255, 255, 128, 128, 128 } - }, - { { 1, 24, 239, 251, 218, 219, 255, 205, 128, 128, 128 }, - { 201, 51, 219, 255, 196, 186, 128, 128, 128, 128, 128 }, - { 69, 46, 190, 239, 201, 218, 255, 228, 128, 128, 128 } - }, - { { 1, 191, 251, 255, 255, 128, 128, 128, 128, 128, 128 }, - { 223, 165, 249, 255, 213, 255, 128, 128, 128, 128, 128 }, - { 141, 124, 248, 255, 255, 128, 128, 128, 128, 128, 128 } - }, - { { 1, 16, 248, 255, 255, 128, 128, 128, 128, 128, 128 }, - { 190, 36, 230, 255, 236, 255, 128, 128, 128, 128, 128 }, - { 149, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128 } - }, - { { 1, 226, 255, 128, 128, 128, 128, 128, 128, 128, 128 }, - { 247, 192, 255, 128, 128, 128, 128, 128, 128, 128, 128 }, - { 240, 128, 255, 128, 128, 128, 128, 128, 128, 128, 128 } - }, - { { 1, 134, 252, 255, 255, 128, 128, 128, 128, 128, 128 }, - { 213, 62, 250, 255, 255, 128, 128, 128, 128, 128, 128 }, - { 55, 93, 255, 128, 128, 128, 128, 128, 128, 128, 128 } - }, - { { 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128 }, - { 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128 }, - { 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128 } - } - }, - { { { 202, 24, 213, 235, 186, 191, 220, 160, 240, 175, 255 }, - { 126, 38, 182, 232, 169, 184, 228, 174, 255, 187, 128 }, - { 61, 46, 138, 219, 151, 178, 240, 170, 255, 216, 128 } - }, - { { 1, 112, 230, 250, 199, 191, 247, 159, 255, 255, 128 }, - { 166, 109, 228, 252, 211, 215, 255, 174, 128, 128, 128 }, - { 39, 77, 162, 232, 172, 180, 245, 178, 255, 255, 128 } - }, - { { 1, 52, 220, 246, 198, 199, 249, 220, 255, 255, 128 }, - { 124, 74, 191, 243, 183, 193, 250, 221, 255, 255, 128 }, - { 24, 71, 130, 219, 154, 170, 243, 182, 255, 255, 128 } - }, - { { 1, 182, 225, 249, 219, 240, 255, 224, 128, 128, 128 }, - { 149, 150, 226, 252, 216, 205, 255, 171, 128, 128, 128 }, - { 28, 108, 170, 242, 183, 194, 254, 223, 255, 255, 128 } - }, - { { 1, 81, 230, 252, 204, 203, 255, 192, 128, 128, 128 }, - { 123, 102, 209, 247, 188, 196, 255, 233, 128, 128, 128 }, - { 20, 95, 153, 243, 164, 173, 255, 203, 128, 128, 128 } - }, - { { 1, 222, 248, 255, 216, 213, 128, 128, 128, 128, 128 }, - { 168, 175, 246, 252, 235, 205, 255, 255, 128, 128, 128 }, - { 47, 116, 215, 255, 211, 212, 255, 255, 128, 128, 128 } - }, - { { 1, 121, 236, 253, 212, 214, 255, 255, 128, 128, 128 }, - { 141, 84, 213, 252, 201, 202, 255, 219, 128, 128, 128 }, - { 42, 80, 160, 240, 162, 185, 255, 205, 128, 128, 128 } - }, - { { 1, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128 }, - { 244, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128 }, - { 238, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128 } - } - } -}; - -void VP8DefaultProbas(VP8Encoder* const enc) { - VP8EncProba* const probas = &enc->proba_; - probas->use_skip_proba_ = 0; - memset(probas->segments_, 255u, sizeof(probas->segments_)); - memcpy(probas->coeffs_, VP8CoeffsProba0, sizeof(VP8CoeffsProba0)); - // Note: we could hard-code the level_costs_ corresponding to VP8CoeffsProba0, - // but that's ~11k of static data. Better call VP8CalculateLevelCosts() later. - probas->dirty_ = 1; -} - -// Paragraph 11.5. 900bytes. -static const uint8_t kBModesProba[NUM_BMODES][NUM_BMODES][NUM_BMODES - 1] = { - { { 231, 120, 48, 89, 115, 113, 120, 152, 112 }, - { 152, 179, 64, 126, 170, 118, 46, 70, 95 }, - { 175, 69, 143, 80, 85, 82, 72, 155, 103 }, - { 56, 58, 10, 171, 218, 189, 17, 13, 152 }, - { 114, 26, 17, 163, 44, 195, 21, 10, 173 }, - { 121, 24, 80, 195, 26, 62, 44, 64, 85 }, - { 144, 71, 10, 38, 171, 213, 144, 34, 26 }, - { 170, 46, 55, 19, 136, 160, 33, 206, 71 }, - { 63, 20, 8, 114, 114, 208, 12, 9, 226 }, - { 81, 40, 11, 96, 182, 84, 29, 16, 36 } }, - { { 134, 183, 89, 137, 98, 101, 106, 165, 148 }, - { 72, 187, 100, 130, 157, 111, 32, 75, 80 }, - { 66, 102, 167, 99, 74, 62, 40, 234, 128 }, - { 41, 53, 9, 178, 241, 141, 26, 8, 107 }, - { 74, 43, 26, 146, 73, 166, 49, 23, 157 }, - { 65, 38, 105, 160, 51, 52, 31, 115, 128 }, - { 104, 79, 12, 27, 217, 255, 87, 17, 7 }, - { 87, 68, 71, 44, 114, 51, 15, 186, 23 }, - { 47, 41, 14, 110, 182, 183, 21, 17, 194 }, - { 66, 45, 25, 102, 197, 189, 23, 18, 22 } }, - { { 88, 88, 147, 150, 42, 46, 45, 196, 205 }, - { 43, 97, 183, 117, 85, 38, 35, 179, 61 }, - { 39, 53, 200, 87, 26, 21, 43, 232, 171 }, - { 56, 34, 51, 104, 114, 102, 29, 93, 77 }, - { 39, 28, 85, 171, 58, 165, 90, 98, 64 }, - { 34, 22, 116, 206, 23, 34, 43, 166, 73 }, - { 107, 54, 32, 26, 51, 1, 81, 43, 31 }, - { 68, 25, 106, 22, 64, 171, 36, 225, 114 }, - { 34, 19, 21, 102, 132, 188, 16, 76, 124 }, - { 62, 18, 78, 95, 85, 57, 50, 48, 51 } }, - { { 193, 101, 35, 159, 215, 111, 89, 46, 111 }, - { 60, 148, 31, 172, 219, 228, 21, 18, 111 }, - { 112, 113, 77, 85, 179, 255, 38, 120, 114 }, - { 40, 42, 1, 196, 245, 209, 10, 25, 109 }, - { 88, 43, 29, 140, 166, 213, 37, 43, 154 }, - { 61, 63, 30, 155, 67, 45, 68, 1, 209 }, - { 100, 80, 8, 43, 154, 1, 51, 26, 71 }, - { 142, 78, 78, 16, 255, 128, 34, 197, 171 }, - { 41, 40, 5, 102, 211, 183, 4, 1, 221 }, - { 51, 50, 17, 168, 209, 192, 23, 25, 82 } }, - { { 138, 31, 36, 171, 27, 166, 38, 44, 229 }, - { 67, 87, 58, 169, 82, 115, 26, 59, 179 }, - { 63, 59, 90, 180, 59, 166, 93, 73, 154 }, - { 40, 40, 21, 116, 143, 209, 34, 39, 175 }, - { 47, 15, 16, 183, 34, 223, 49, 45, 183 }, - { 46, 17, 33, 183, 6, 98, 15, 32, 183 }, - { 57, 46, 22, 24, 128, 1, 54, 17, 37 }, - { 65, 32, 73, 115, 28, 128, 23, 128, 205 }, - { 40, 3, 9, 115, 51, 192, 18, 6, 223 }, - { 87, 37, 9, 115, 59, 77, 64, 21, 47 } }, - { { 104, 55, 44, 218, 9, 54, 53, 130, 226 }, - { 64, 90, 70, 205, 40, 41, 23, 26, 57 }, - { 54, 57, 112, 184, 5, 41, 38, 166, 213 }, - { 30, 34, 26, 133, 152, 116, 10, 32, 134 }, - { 39, 19, 53, 221, 26, 114, 32, 73, 255 }, - { 31, 9, 65, 234, 2, 15, 1, 118, 73 }, - { 75, 32, 12, 51, 192, 255, 160, 43, 51 }, - { 88, 31, 35, 67, 102, 85, 55, 186, 85 }, - { 56, 21, 23, 111, 59, 205, 45, 37, 192 }, - { 55, 38, 70, 124, 73, 102, 1, 34, 98 } }, - { { 125, 98, 42, 88, 104, 85, 117, 175, 82 }, - { 95, 84, 53, 89, 128, 100, 113, 101, 45 }, - { 75, 79, 123, 47, 51, 128, 81, 171, 1 }, - { 57, 17, 5, 71, 102, 57, 53, 41, 49 }, - { 38, 33, 13, 121, 57, 73, 26, 1, 85 }, - { 41, 10, 67, 138, 77, 110, 90, 47, 114 }, - { 115, 21, 2, 10, 102, 255, 166, 23, 6 }, - { 101, 29, 16, 10, 85, 128, 101, 196, 26 }, - { 57, 18, 10, 102, 102, 213, 34, 20, 43 }, - { 117, 20, 15, 36, 163, 128, 68, 1, 26 } }, - { { 102, 61, 71, 37, 34, 53, 31, 243, 192 }, - { 69, 60, 71, 38, 73, 119, 28, 222, 37 }, - { 68, 45, 128, 34, 1, 47, 11, 245, 171 }, - { 62, 17, 19, 70, 146, 85, 55, 62, 70 }, - { 37, 43, 37, 154, 100, 163, 85, 160, 1 }, - { 63, 9, 92, 136, 28, 64, 32, 201, 85 }, - { 75, 15, 9, 9, 64, 255, 184, 119, 16 }, - { 86, 6, 28, 5, 64, 255, 25, 248, 1 }, - { 56, 8, 17, 132, 137, 255, 55, 116, 128 }, - { 58, 15, 20, 82, 135, 57, 26, 121, 40 } }, - { { 164, 50, 31, 137, 154, 133, 25, 35, 218 }, - { 51, 103, 44, 131, 131, 123, 31, 6, 158 }, - { 86, 40, 64, 135, 148, 224, 45, 183, 128 }, - { 22, 26, 17, 131, 240, 154, 14, 1, 209 }, - { 45, 16, 21, 91, 64, 222, 7, 1, 197 }, - { 56, 21, 39, 155, 60, 138, 23, 102, 213 }, - { 83, 12, 13, 54, 192, 255, 68, 47, 28 }, - { 85, 26, 85, 85, 128, 128, 32, 146, 171 }, - { 18, 11, 7, 63, 144, 171, 4, 4, 246 }, - { 35, 27, 10, 146, 174, 171, 12, 26, 128 } }, - { { 190, 80, 35, 99, 180, 80, 126, 54, 45 }, - { 85, 126, 47, 87, 176, 51, 41, 20, 32 }, - { 101, 75, 128, 139, 118, 146, 116, 128, 85 }, - { 56, 41, 15, 176, 236, 85, 37, 9, 62 }, - { 71, 30, 17, 119, 118, 255, 17, 18, 138 }, - { 101, 38, 60, 138, 55, 70, 43, 26, 142 }, - { 146, 36, 19, 30, 171, 255, 97, 27, 20 }, - { 138, 45, 61, 62, 219, 1, 81, 188, 64 }, - { 32, 41, 20, 117, 151, 142, 20, 21, 163 }, - { 112, 19, 12, 61, 195, 128, 48, 4, 24 } } -}; - -static int PutI4Mode(VP8BitWriter* const bw, int mode, - const uint8_t* const prob) { - if (VP8PutBit(bw, mode != B_DC_PRED, prob[0])) { - if (VP8PutBit(bw, mode != B_TM_PRED, prob[1])) { - if (VP8PutBit(bw, mode != B_VE_PRED, prob[2])) { - if (!VP8PutBit(bw, mode >= B_LD_PRED, prob[3])) { - if (VP8PutBit(bw, mode != B_HE_PRED, prob[4])) { - VP8PutBit(bw, mode != B_RD_PRED, prob[5]); - } - } else { - if (VP8PutBit(bw, mode != B_LD_PRED, prob[6])) { - if (VP8PutBit(bw, mode != B_VL_PRED, prob[7])) { - VP8PutBit(bw, mode != B_HD_PRED, prob[8]); - } - } - } - } - } - } - return mode; -} - -static void PutI16Mode(VP8BitWriter* const bw, int mode) { - if (VP8PutBit(bw, (mode == TM_PRED || mode == H_PRED), 156)) { - VP8PutBit(bw, mode == TM_PRED, 128); // TM or HE - } else { - VP8PutBit(bw, mode == V_PRED, 163); // VE or DC - } -} - -static void PutUVMode(VP8BitWriter* const bw, int uv_mode) { - if (VP8PutBit(bw, uv_mode != DC_PRED, 142)) { - if (VP8PutBit(bw, uv_mode != V_PRED, 114)) { - VP8PutBit(bw, uv_mode != H_PRED, 183); // else: TM_PRED - } - } -} - -static void PutSegment(VP8BitWriter* const bw, int s, const uint8_t* p) { - if (VP8PutBit(bw, s >= 2, p[0])) p += 1; - VP8PutBit(bw, s & 1, p[1]); -} - -void VP8CodeIntraModes(VP8Encoder* const enc) { - VP8BitWriter* const bw = &enc->bw_; - VP8EncIterator it; - VP8IteratorInit(enc, &it); - do { - const VP8MBInfo* const mb = it.mb_; - const uint8_t* preds = it.preds_; - if (enc->segment_hdr_.update_map_) { - PutSegment(bw, mb->segment_, enc->proba_.segments_); - } - if (enc->proba_.use_skip_proba_) { - VP8PutBit(bw, mb->skip_, enc->proba_.skip_proba_); - } - if (VP8PutBit(bw, (mb->type_ != 0), 145)) { // i16x16 - PutI16Mode(bw, preds[0]); - } else { - const int preds_w = enc->preds_w_; - const uint8_t* top_pred = preds - preds_w; - int x, y; - for (y = 0; y < 4; ++y) { - int left = preds[-1]; - for (x = 0; x < 4; ++x) { - const uint8_t* const probas = kBModesProba[top_pred[x]][left]; - left = PutI4Mode(bw, preds[x], probas); - } - top_pred = preds; - preds += preds_w; - } - } - PutUVMode(bw, mb->uv_mode_); - } while (VP8IteratorNext(&it)); -} - -//------------------------------------------------------------------------------ -// Paragraph 13 - -const uint8_t - VP8CoeffsUpdateProba[NUM_TYPES][NUM_BANDS][NUM_CTX][NUM_PROBAS] = { - { { { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 } - }, - { { 176, 246, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 223, 241, 252, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 249, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255 } - }, - { { 255, 244, 252, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 234, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 } - }, - { { 255, 246, 254, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 239, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 254, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255 } - }, - { { 255, 248, 254, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 251, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 } - }, - { { 255, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 251, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 254, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255 } - }, - { { 255, 254, 253, 255, 254, 255, 255, 255, 255, 255, 255 }, - { 250, 255, 254, 255, 254, 255, 255, 255, 255, 255, 255 }, - { 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 } - }, - { { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 } - } - }, - { { { 217, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 225, 252, 241, 253, 255, 255, 254, 255, 255, 255, 255 }, - { 234, 250, 241, 250, 253, 255, 253, 254, 255, 255, 255 } - }, - { { 255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 223, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 238, 253, 254, 254, 255, 255, 255, 255, 255, 255, 255 } - }, - { { 255, 248, 254, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 249, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 } - }, - { { 255, 253, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 247, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 } - }, - { { 255, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 252, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 } - }, - { { 255, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 } - }, - { { 255, 254, 253, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 250, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 } - }, - { { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 } - } - }, - { { { 186, 251, 250, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 234, 251, 244, 254, 255, 255, 255, 255, 255, 255, 255 }, - { 251, 251, 243, 253, 254, 255, 254, 255, 255, 255, 255 } - }, - { { 255, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 236, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 251, 253, 253, 254, 254, 255, 255, 255, 255, 255, 255 } - }, - { { 255, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 254, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 } - }, - { { 255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 254, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 } - }, - { { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 } - }, - { { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 } - }, - { { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 } - }, - { { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 } - } - }, - { { { 248, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 250, 254, 252, 254, 255, 255, 255, 255, 255, 255, 255 }, - { 248, 254, 249, 253, 255, 255, 255, 255, 255, 255, 255 } - }, - { { 255, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 246, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 252, 254, 251, 254, 254, 255, 255, 255, 255, 255, 255 } - }, - { { 255, 254, 252, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 248, 254, 253, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 253, 255, 254, 254, 255, 255, 255, 255, 255, 255, 255 } - }, - { { 255, 251, 254, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 245, 251, 254, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 253, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255 } - }, - { { 255, 251, 253, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 252, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255 } - }, - { { 255, 252, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 249, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 255, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255 } - }, - { { 255, 255, 253, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 250, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 } - }, - { { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, - { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 } - } - } -}; - -void VP8WriteProbas(VP8BitWriter* const bw, const VP8EncProba* const probas) { - int t, b, c, p; - for (t = 0; t < NUM_TYPES; ++t) { - for (b = 0; b < NUM_BANDS; ++b) { - for (c = 0; c < NUM_CTX; ++c) { - for (p = 0; p < NUM_PROBAS; ++p) { - const uint8_t p0 = probas->coeffs_[t][b][c][p]; - const int update = (p0 != VP8CoeffsProba0[t][b][c][p]); - if (VP8PutBit(bw, update, VP8CoeffsUpdateProba[t][b][c][p])) { - VP8PutBits(bw, p0, 8); - } - } - } - } - } - if (VP8PutBitUniform(bw, probas->use_skip_proba_)) { - VP8PutBits(bw, probas->skip_proba_, 8); - } -} - diff --git a/Extended/libwebp/src/enc/vp8i_enc.h b/Extended/libwebp/src/enc/vp8i_enc.h deleted file mode 100644 index fedcaee..0000000 --- a/Extended/libwebp/src/enc/vp8i_enc.h +++ /dev/null @@ -1,518 +0,0 @@ -// Copyright 2011 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// WebP encoder: internal header. -// -// Author: Skal (pascal.massimino@gmail.com) - -#ifndef WEBP_ENC_VP8I_ENC_H_ -#define WEBP_ENC_VP8I_ENC_H_ - -#include // for memcpy() -#include "src/dec/common_dec.h" -#include "src/dsp/dsp.h" -#include "src/utils/bit_writer_utils.h" -#include "src/utils/thread_utils.h" -#include "src/utils/utils.h" -#include "src/webp/encode.h" - -#ifdef __cplusplus -extern "C" { -#endif - -//------------------------------------------------------------------------------ -// Various defines and enums - -// version numbers -#define ENC_MAJ_VERSION 1 -#define ENC_MIN_VERSION 1 -#define ENC_REV_VERSION 0 - -enum { MAX_LF_LEVELS = 64, // Maximum loop filter level - MAX_VARIABLE_LEVEL = 67, // last (inclusive) level with variable cost - MAX_LEVEL = 2047 // max level (note: max codable is 2047 + 67) - }; - -typedef enum { // Rate-distortion optimization levels - RD_OPT_NONE = 0, // no rd-opt - RD_OPT_BASIC = 1, // basic scoring (no trellis) - RD_OPT_TRELLIS = 2, // perform trellis-quant on the final decision only - RD_OPT_TRELLIS_ALL = 3 // trellis-quant for every scoring (much slower) -} VP8RDLevel; - -// YUV-cache parameters. Cache is 32-bytes wide (= one cacheline). -// The original or reconstructed samples can be accessed using VP8Scan[]. -// The predicted blocks can be accessed using offsets to yuv_p_ and -// the arrays VP8*ModeOffsets[]. -// * YUV Samples area (yuv_in_/yuv_out_/yuv_out2_) -// (see VP8Scan[] for accessing the blocks, along with -// Y_OFF_ENC/U_OFF_ENC/V_OFF_ENC): -// +----+----+ -// Y_OFF_ENC |YYYY|UUVV| -// U_OFF_ENC |YYYY|UUVV| -// V_OFF_ENC |YYYY|....| <- 25% wasted U/V area -// |YYYY|....| -// +----+----+ -// * Prediction area ('yuv_p_', size = PRED_SIZE_ENC) -// Intra16 predictions (16x16 block each, two per row): -// |I16DC16|I16TM16| -// |I16VE16|I16HE16| -// Chroma U/V predictions (16x8 block each, two per row): -// |C8DC8|C8TM8| -// |C8VE8|C8HE8| -// Intra 4x4 predictions (4x4 block each) -// |I4DC4 I4TM4 I4VE4 I4HE4|I4RD4 I4VR4 I4LD4 I4VL4| -// |I4HD4 I4HU4 I4TMP .....|.......................| <- ~31% wasted -#define YUV_SIZE_ENC (BPS * 16) -#define PRED_SIZE_ENC (32 * BPS + 16 * BPS + 8 * BPS) // I16+Chroma+I4 preds -#define Y_OFF_ENC (0) -#define U_OFF_ENC (16) -#define V_OFF_ENC (16 + 8) - -extern const uint16_t VP8Scan[16]; -extern const uint16_t VP8UVModeOffsets[4]; -extern const uint16_t VP8I16ModeOffsets[4]; -extern const uint16_t VP8I4ModeOffsets[NUM_BMODES]; - -// Layout of prediction blocks -// intra 16x16 -#define I16DC16 (0 * 16 * BPS) -#define I16TM16 (I16DC16 + 16) -#define I16VE16 (1 * 16 * BPS) -#define I16HE16 (I16VE16 + 16) -// chroma 8x8, two U/V blocks side by side (hence: 16x8 each) -#define C8DC8 (2 * 16 * BPS) -#define C8TM8 (C8DC8 + 1 * 16) -#define C8VE8 (2 * 16 * BPS + 8 * BPS) -#define C8HE8 (C8VE8 + 1 * 16) -// intra 4x4 -#define I4DC4 (3 * 16 * BPS + 0) -#define I4TM4 (I4DC4 + 4) -#define I4VE4 (I4DC4 + 8) -#define I4HE4 (I4DC4 + 12) -#define I4RD4 (I4DC4 + 16) -#define I4VR4 (I4DC4 + 20) -#define I4LD4 (I4DC4 + 24) -#define I4VL4 (I4DC4 + 28) -#define I4HD4 (3 * 16 * BPS + 4 * BPS) -#define I4HU4 (I4HD4 + 4) -#define I4TMP (I4HD4 + 8) - -typedef int64_t score_t; // type used for scores, rate, distortion -// Note that MAX_COST is not the maximum allowed by sizeof(score_t), -// in order to allow overflowing computations. -#define MAX_COST ((score_t)0x7fffffffffffffLL) - -#define QFIX 17 -#define BIAS(b) ((b) << (QFIX - 8)) -// Fun fact: this is the _only_ line where we're actually being lossy and -// discarding bits. -static WEBP_INLINE int QUANTDIV(uint32_t n, uint32_t iQ, uint32_t B) { - return (int)((n * iQ + B) >> QFIX); -} - -// Uncomment the following to remove token-buffer code: -// #define DISABLE_TOKEN_BUFFER - -// quality below which error-diffusion is enabled -#define ERROR_DIFFUSION_QUALITY 98 - -//------------------------------------------------------------------------------ -// Headers - -typedef uint32_t proba_t; // 16b + 16b -typedef uint8_t ProbaArray[NUM_CTX][NUM_PROBAS]; -typedef proba_t StatsArray[NUM_CTX][NUM_PROBAS]; -typedef uint16_t CostArray[NUM_CTX][MAX_VARIABLE_LEVEL + 1]; -typedef const uint16_t* (*CostArrayPtr)[NUM_CTX]; // for easy casting -typedef const uint16_t* CostArrayMap[16][NUM_CTX]; -typedef double LFStats[NUM_MB_SEGMENTS][MAX_LF_LEVELS]; // filter stats - -typedef struct VP8Encoder VP8Encoder; - -// segment features -typedef struct { - int num_segments_; // Actual number of segments. 1 segment only = unused. - int update_map_; // whether to update the segment map or not. - // must be 0 if there's only 1 segment. - int size_; // bit-cost for transmitting the segment map -} VP8EncSegmentHeader; - -// Struct collecting all frame-persistent probabilities. -typedef struct { - uint8_t segments_[3]; // probabilities for segment tree - uint8_t skip_proba_; // final probability of being skipped. - ProbaArray coeffs_[NUM_TYPES][NUM_BANDS]; // 1056 bytes - StatsArray stats_[NUM_TYPES][NUM_BANDS]; // 4224 bytes - CostArray level_cost_[NUM_TYPES][NUM_BANDS]; // 13056 bytes - CostArrayMap remapped_costs_[NUM_TYPES]; // 1536 bytes - int dirty_; // if true, need to call VP8CalculateLevelCosts() - int use_skip_proba_; // Note: we always use skip_proba for now. - int nb_skip_; // number of skipped blocks -} VP8EncProba; - -// Filter parameters. Not actually used in the code (we don't perform -// the in-loop filtering), but filled from user's config -typedef struct { - int simple_; // filtering type: 0=complex, 1=simple - int level_; // base filter level [0..63] - int sharpness_; // [0..7] - int i4x4_lf_delta_; // delta filter level for i4x4 relative to i16x16 -} VP8EncFilterHeader; - -//------------------------------------------------------------------------------ -// Informations about the macroblocks. - -typedef struct { - // block type - unsigned int type_:2; // 0=i4x4, 1=i16x16 - unsigned int uv_mode_:2; - unsigned int skip_:1; - unsigned int segment_:2; - uint8_t alpha_; // quantization-susceptibility -} VP8MBInfo; - -typedef struct VP8Matrix { - uint16_t q_[16]; // quantizer steps - uint16_t iq_[16]; // reciprocals, fixed point. - uint32_t bias_[16]; // rounding bias - uint32_t zthresh_[16]; // value below which a coefficient is zeroed - uint16_t sharpen_[16]; // frequency boosters for slight sharpening -} VP8Matrix; - -typedef struct { - VP8Matrix y1_, y2_, uv_; // quantization matrices - int alpha_; // quant-susceptibility, range [-127,127]. Zero is neutral. - // Lower values indicate a lower risk of blurriness. - int beta_; // filter-susceptibility, range [0,255]. - int quant_; // final segment quantizer. - int fstrength_; // final in-loop filtering strength - int max_edge_; // max edge delta (for filtering strength) - int min_disto_; // minimum distortion required to trigger filtering record - // reactivities - int lambda_i16_, lambda_i4_, lambda_uv_; - int lambda_mode_, lambda_trellis_, tlambda_; - int lambda_trellis_i16_, lambda_trellis_i4_, lambda_trellis_uv_; - - // lambda values for distortion-based evaluation - score_t i4_penalty_; // penalty for using Intra4 -} VP8SegmentInfo; - -typedef int8_t DError[2 /* u/v */][2 /* top or left */]; - -// Handy transient struct to accumulate score and info during RD-optimization -// and mode evaluation. -typedef struct { - score_t D, SD; // Distortion, spectral distortion - score_t H, R, score; // header bits, rate, score. - int16_t y_dc_levels[16]; // Quantized levels for luma-DC, luma-AC, chroma. - int16_t y_ac_levels[16][16]; - int16_t uv_levels[4 + 4][16]; - int mode_i16; // mode number for intra16 prediction - uint8_t modes_i4[16]; // mode numbers for intra4 predictions - int mode_uv; // mode number of chroma prediction - uint32_t nz; // non-zero blocks - int8_t derr[2][3]; // DC diffusion errors for U/V for blocks #1/2/3 -} VP8ModeScore; - -// Iterator structure to iterate through macroblocks, pointing to the -// right neighbouring data (samples, predictions, contexts, ...) -typedef struct { - int x_, y_; // current macroblock - uint8_t* yuv_in_; // input samples - uint8_t* yuv_out_; // output samples - uint8_t* yuv_out2_; // secondary buffer swapped with yuv_out_. - uint8_t* yuv_p_; // scratch buffer for prediction - VP8Encoder* enc_; // back-pointer - VP8MBInfo* mb_; // current macroblock - VP8BitWriter* bw_; // current bit-writer - uint8_t* preds_; // intra mode predictors (4x4 blocks) - uint32_t* nz_; // non-zero pattern - uint8_t i4_boundary_[37]; // 32+5 boundary samples needed by intra4x4 - uint8_t* i4_top_; // pointer to the current top boundary sample - int i4_; // current intra4x4 mode being tested - int top_nz_[9]; // top-non-zero context. - int left_nz_[9]; // left-non-zero. left_nz[8] is independent. - uint64_t bit_count_[4][3]; // bit counters for coded levels. - uint64_t luma_bits_; // macroblock bit-cost for luma - uint64_t uv_bits_; // macroblock bit-cost for chroma - LFStats* lf_stats_; // filter stats (borrowed from enc_) - int do_trellis_; // if true, perform extra level optimisation - int count_down_; // number of mb still to be processed - int count_down0_; // starting counter value (for progress) - int percent0_; // saved initial progress percent - - DError left_derr_; // left error diffusion (u/v) - DError* top_derr_; // top diffusion error - NULL if disabled - - uint8_t* y_left_; // left luma samples (addressable from index -1 to 15). - uint8_t* u_left_; // left u samples (addressable from index -1 to 7) - uint8_t* v_left_; // left v samples (addressable from index -1 to 7) - - uint8_t* y_top_; // top luma samples at position 'x_' - uint8_t* uv_top_; // top u/v samples at position 'x_', packed as 16 bytes - - // memory for storing y/u/v_left_ - uint8_t yuv_left_mem_[17 + 16 + 16 + 8 + WEBP_ALIGN_CST]; - // memory for yuv_* - uint8_t yuv_mem_[3 * YUV_SIZE_ENC + PRED_SIZE_ENC + WEBP_ALIGN_CST]; -} VP8EncIterator; - - // in iterator.c -// must be called first -void VP8IteratorInit(VP8Encoder* const enc, VP8EncIterator* const it); -// restart a scan -void VP8IteratorReset(VP8EncIterator* const it); -// reset iterator position to row 'y' -void VP8IteratorSetRow(VP8EncIterator* const it, int y); -// set count down (=number of iterations to go) -void VP8IteratorSetCountDown(VP8EncIterator* const it, int count_down); -// return true if iteration is finished -int VP8IteratorIsDone(const VP8EncIterator* const it); -// Import uncompressed samples from source. -// If tmp_32 is not NULL, import boundary samples too. -// tmp_32 is a 32-bytes scratch buffer that must be aligned in memory. -void VP8IteratorImport(VP8EncIterator* const it, uint8_t* const tmp_32); -// export decimated samples -void VP8IteratorExport(const VP8EncIterator* const it); -// go to next macroblock. Returns false if not finished. -int VP8IteratorNext(VP8EncIterator* const it); -// save the yuv_out_ boundary values to top_/left_ arrays for next iterations. -void VP8IteratorSaveBoundary(VP8EncIterator* const it); -// Report progression based on macroblock rows. Return 0 for user-abort request. -int VP8IteratorProgress(const VP8EncIterator* const it, - int final_delta_percent); -// Intra4x4 iterations -void VP8IteratorStartI4(VP8EncIterator* const it); -// returns true if not done. -int VP8IteratorRotateI4(VP8EncIterator* const it, - const uint8_t* const yuv_out); - -// Non-zero context setup/teardown -void VP8IteratorNzToBytes(VP8EncIterator* const it); -void VP8IteratorBytesToNz(VP8EncIterator* const it); - -// Helper functions to set mode properties -void VP8SetIntra16Mode(const VP8EncIterator* const it, int mode); -void VP8SetIntra4Mode(const VP8EncIterator* const it, const uint8_t* modes); -void VP8SetIntraUVMode(const VP8EncIterator* const it, int mode); -void VP8SetSkip(const VP8EncIterator* const it, int skip); -void VP8SetSegment(const VP8EncIterator* const it, int segment); - -//------------------------------------------------------------------------------ -// Paginated token buffer - -typedef struct VP8Tokens VP8Tokens; // struct details in token.c - -typedef struct { -#if !defined(DISABLE_TOKEN_BUFFER) - VP8Tokens* pages_; // first page - VP8Tokens** last_page_; // last page - uint16_t* tokens_; // set to (*last_page_)->tokens_ - int left_; // how many free tokens left before the page is full - int page_size_; // number of tokens per page -#endif - int error_; // true in case of malloc error -} VP8TBuffer; - -// initialize an empty buffer -void VP8TBufferInit(VP8TBuffer* const b, int page_size); -void VP8TBufferClear(VP8TBuffer* const b); // de-allocate pages memory - -#if !defined(DISABLE_TOKEN_BUFFER) - -// Finalizes bitstream when probabilities are known. -// Deletes the allocated token memory if final_pass is true. -int VP8EmitTokens(VP8TBuffer* const b, VP8BitWriter* const bw, - const uint8_t* const probas, int final_pass); - -// record the coding of coefficients without knowing the probabilities yet -int VP8RecordCoeffTokens(int ctx, const struct VP8Residual* const res, - VP8TBuffer* const tokens); - -// Estimate the final coded size given a set of 'probas'. -size_t VP8EstimateTokenSize(VP8TBuffer* const b, const uint8_t* const probas); - -#endif // !DISABLE_TOKEN_BUFFER - -//------------------------------------------------------------------------------ -// VP8Encoder - -struct VP8Encoder { - const WebPConfig* config_; // user configuration and parameters - WebPPicture* pic_; // input / output picture - - // headers - VP8EncFilterHeader filter_hdr_; // filtering information - VP8EncSegmentHeader segment_hdr_; // segment information - - int profile_; // VP8's profile, deduced from Config. - - // dimension, in macroblock units. - int mb_w_, mb_h_; - int preds_w_; // stride of the *preds_ prediction plane (=4*mb_w + 1) - - // number of partitions (1, 2, 4 or 8 = MAX_NUM_PARTITIONS) - int num_parts_; - - // per-partition boolean decoders. - VP8BitWriter bw_; // part0 - VP8BitWriter parts_[MAX_NUM_PARTITIONS]; // token partitions - VP8TBuffer tokens_; // token buffer - - int percent_; // for progress - - // transparency blob - int has_alpha_; - uint8_t* alpha_data_; // non-NULL if transparency is present - uint32_t alpha_data_size_; - WebPWorker alpha_worker_; - - // quantization info (one set of DC/AC dequant factor per segment) - VP8SegmentInfo dqm_[NUM_MB_SEGMENTS]; - int base_quant_; // nominal quantizer value. Only used - // for relative coding of segments' quant. - int alpha_; // global susceptibility (<=> complexity) - int uv_alpha_; // U/V quantization susceptibility - // global offset of quantizers, shared by all segments - int dq_y1_dc_; - int dq_y2_dc_, dq_y2_ac_; - int dq_uv_dc_, dq_uv_ac_; - - // probabilities and statistics - VP8EncProba proba_; - uint64_t sse_[4]; // sum of Y/U/V/A squared errors for all macroblocks - uint64_t sse_count_; // pixel count for the sse_[] stats - int coded_size_; - int residual_bytes_[3][4]; - int block_count_[3]; - - // quality/speed settings - int method_; // 0=fastest, 6=best/slowest. - VP8RDLevel rd_opt_level_; // Deduced from method_. - int max_i4_header_bits_; // partition #0 safeness factor - int mb_header_limit_; // rough limit for header bits per MB - int thread_level_; // derived from config->thread_level - int do_search_; // derived from config->target_XXX - int use_tokens_; // if true, use token buffer - - // Memory - VP8MBInfo* mb_info_; // contextual macroblock infos (mb_w_ + 1) - uint8_t* preds_; // predictions modes: (4*mb_w+1) * (4*mb_h+1) - uint32_t* nz_; // non-zero bit context: mb_w+1 - uint8_t* y_top_; // top luma samples. - uint8_t* uv_top_; // top u/v samples. - // U and V are packed into 16 bytes (8 U + 8 V) - LFStats* lf_stats_; // autofilter stats (if NULL, autofilter is off) - DError* top_derr_; // diffusion error (NULL if disabled) -}; - -//------------------------------------------------------------------------------ -// internal functions. Not public. - - // in tree.c -extern const uint8_t VP8CoeffsProba0[NUM_TYPES][NUM_BANDS][NUM_CTX][NUM_PROBAS]; -extern const uint8_t - VP8CoeffsUpdateProba[NUM_TYPES][NUM_BANDS][NUM_CTX][NUM_PROBAS]; -// Reset the token probabilities to their initial (default) values -void VP8DefaultProbas(VP8Encoder* const enc); -// Write the token probabilities -void VP8WriteProbas(VP8BitWriter* const bw, const VP8EncProba* const probas); -// Writes the partition #0 modes (that is: all intra modes) -void VP8CodeIntraModes(VP8Encoder* const enc); - - // in syntax.c -// Generates the final bitstream by coding the partition0 and headers, -// and appending an assembly of all the pre-coded token partitions. -// Return true if everything is ok. -int VP8EncWrite(VP8Encoder* const enc); -// Release memory allocated for bit-writing in VP8EncLoop & seq. -void VP8EncFreeBitWriters(VP8Encoder* const enc); - - // in frame.c -extern const uint8_t VP8Cat3[]; -extern const uint8_t VP8Cat4[]; -extern const uint8_t VP8Cat5[]; -extern const uint8_t VP8Cat6[]; - -// Form all the four Intra16x16 predictions in the yuv_p_ cache -void VP8MakeLuma16Preds(const VP8EncIterator* const it); -// Form all the four Chroma8x8 predictions in the yuv_p_ cache -void VP8MakeChroma8Preds(const VP8EncIterator* const it); -// Form all the ten Intra4x4 predictions in the yuv_p_ cache -// for the 4x4 block it->i4_ -void VP8MakeIntra4Preds(const VP8EncIterator* const it); -// Rate calculation -int VP8GetCostLuma16(VP8EncIterator* const it, const VP8ModeScore* const rd); -int VP8GetCostLuma4(VP8EncIterator* const it, const int16_t levels[16]); -int VP8GetCostUV(VP8EncIterator* const it, const VP8ModeScore* const rd); -// Main coding calls -int VP8EncLoop(VP8Encoder* const enc); -int VP8EncTokenLoop(VP8Encoder* const enc); - - // in webpenc.c -// Assign an error code to a picture. Return false for convenience. -int WebPEncodingSetError(const WebPPicture* const pic, WebPEncodingError error); -int WebPReportProgress(const WebPPicture* const pic, - int percent, int* const percent_store); - - // in analysis.c -// Main analysis loop. Decides the segmentations and complexity. -// Assigns a first guess for Intra16 and uvmode_ prediction modes. -int VP8EncAnalyze(VP8Encoder* const enc); - - // in quant.c -// Sets up segment's quantization values, base_quant_ and filter strengths. -void VP8SetSegmentParams(VP8Encoder* const enc, float quality); -// Pick best modes and fills the levels. Returns true if skipped. -int VP8Decimate(VP8EncIterator* const it, VP8ModeScore* const rd, - VP8RDLevel rd_opt); - - // in alpha.c -void VP8EncInitAlpha(VP8Encoder* const enc); // initialize alpha compression -int VP8EncStartAlpha(VP8Encoder* const enc); // start alpha coding process -int VP8EncFinishAlpha(VP8Encoder* const enc); // finalize compressed data -int VP8EncDeleteAlpha(VP8Encoder* const enc); // delete compressed data - -// autofilter -void VP8InitFilter(VP8EncIterator* const it); -void VP8StoreFilterStats(VP8EncIterator* const it); -void VP8AdjustFilterStrength(VP8EncIterator* const it); - -// returns the approximate filtering strength needed to smooth a edge -// step of 'delta', given a sharpness parameter 'sharpness'. -int VP8FilterStrengthFromDelta(int sharpness, int delta); - - // misc utils for picture_*.c: - -// Remove reference to the ARGB/YUVA buffer (doesn't free anything). -void WebPPictureResetBuffers(WebPPicture* const picture); - -// Allocates ARGB buffer of given dimension (previous one is always free'd). -// Preserves the YUV(A) buffer. Returns false in case of error (invalid param, -// out-of-memory). -int WebPPictureAllocARGB(WebPPicture* const picture, int width, int height); - -// Allocates YUVA buffer of given dimension (previous one is always free'd). -// Uses picture->csp to determine whether an alpha buffer is needed. -// Preserves the ARGB buffer. -// Returns false in case of error (invalid param, out-of-memory). -int WebPPictureAllocYUVA(WebPPicture* const picture, int width, int height); - -// Clean-up the RGB samples under fully transparent area, to help lossless -// compressibility (no guarantee, though). Assumes that pic->use_argb is true. -void WebPCleanupTransparentAreaLossless(WebPPicture* const pic); - -//------------------------------------------------------------------------------ - -#ifdef __cplusplus -} // extern "C" -#endif - -#endif // WEBP_ENC_VP8I_ENC_H_ diff --git a/Extended/libwebp/src/enc/vp8l_enc.c b/Extended/libwebp/src/enc/vp8l_enc.c deleted file mode 100644 index 2efd403..0000000 --- a/Extended/libwebp/src/enc/vp8l_enc.c +++ /dev/null @@ -1,1917 +0,0 @@ -// Copyright 2012 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// main entry for the lossless encoder. -// -// Author: Vikas Arora (vikaas.arora@gmail.com) -// - -#include -#include - -#include "src/enc/backward_references_enc.h" -#include "src/enc/histogram_enc.h" -#include "src/enc/vp8i_enc.h" -#include "src/enc/vp8li_enc.h" -#include "src/dsp/lossless.h" -#include "src/dsp/lossless_common.h" -#include "src/utils/bit_writer_utils.h" -#include "src/utils/huffman_encode_utils.h" -#include "src/utils/utils.h" -#include "src/webp/format_constants.h" - -// Maximum number of histogram images (sub-blocks). -#define MAX_HUFF_IMAGE_SIZE 2600 - -// Palette reordering for smaller sum of deltas (and for smaller storage). - -static int PaletteCompareColorsForQsort(const void* p1, const void* p2) { - const uint32_t a = WebPMemToUint32((uint8_t*)p1); - const uint32_t b = WebPMemToUint32((uint8_t*)p2); - assert(a != b); - return (a < b) ? -1 : 1; -} - -static WEBP_INLINE uint32_t PaletteComponentDistance(uint32_t v) { - return (v <= 128) ? v : (256 - v); -} - -// Computes a value that is related to the entropy created by the -// palette entry diff. -// -// Note that the last & 0xff is a no-operation in the next statement, but -// removed by most compilers and is here only for regularity of the code. -static WEBP_INLINE uint32_t PaletteColorDistance(uint32_t col1, uint32_t col2) { - const uint32_t diff = VP8LSubPixels(col1, col2); - const int kMoreWeightForRGBThanForAlpha = 9; - uint32_t score; - score = PaletteComponentDistance((diff >> 0) & 0xff); - score += PaletteComponentDistance((diff >> 8) & 0xff); - score += PaletteComponentDistance((diff >> 16) & 0xff); - score *= kMoreWeightForRGBThanForAlpha; - score += PaletteComponentDistance((diff >> 24) & 0xff); - return score; -} - -static WEBP_INLINE void SwapColor(uint32_t* const col1, uint32_t* const col2) { - const uint32_t tmp = *col1; - *col1 = *col2; - *col2 = tmp; -} - -static void GreedyMinimizeDeltas(uint32_t palette[], int num_colors) { - // Find greedily always the closest color of the predicted color to minimize - // deltas in the palette. This reduces storage needs since the - // palette is stored with delta encoding. - uint32_t predict = 0x00000000; - int i, k; - for (i = 0; i < num_colors; ++i) { - int best_ix = i; - uint32_t best_score = ~0U; - for (k = i; k < num_colors; ++k) { - const uint32_t cur_score = PaletteColorDistance(palette[k], predict); - if (best_score > cur_score) { - best_score = cur_score; - best_ix = k; - } - } - SwapColor(&palette[best_ix], &palette[i]); - predict = palette[i]; - } -} - -// The palette has been sorted by alpha. This function checks if the other -// components of the palette have a monotonic development with regards to -// position in the palette. If all have monotonic development, there is -// no benefit to re-organize them greedily. A monotonic development -// would be spotted in green-only situations (like lossy alpha) or gray-scale -// images. -static int PaletteHasNonMonotonousDeltas(uint32_t palette[], int num_colors) { - uint32_t predict = 0x000000; - int i; - uint8_t sign_found = 0x00; - for (i = 0; i < num_colors; ++i) { - const uint32_t diff = VP8LSubPixels(palette[i], predict); - const uint8_t rd = (diff >> 16) & 0xff; - const uint8_t gd = (diff >> 8) & 0xff; - const uint8_t bd = (diff >> 0) & 0xff; - if (rd != 0x00) { - sign_found |= (rd < 0x80) ? 1 : 2; - } - if (gd != 0x00) { - sign_found |= (gd < 0x80) ? 8 : 16; - } - if (bd != 0x00) { - sign_found |= (bd < 0x80) ? 64 : 128; - } - predict = palette[i]; - } - return (sign_found & (sign_found << 1)) != 0; // two consequent signs. -} - -// ----------------------------------------------------------------------------- -// Palette - -// If number of colors in the image is less than or equal to MAX_PALETTE_SIZE, -// creates a palette and returns true, else returns false. -static int AnalyzeAndCreatePalette(const WebPPicture* const pic, - int low_effort, - uint32_t palette[MAX_PALETTE_SIZE], - int* const palette_size) { - const int num_colors = WebPGetColorPalette(pic, palette); - if (num_colors > MAX_PALETTE_SIZE) { - *palette_size = 0; - return 0; - } - *palette_size = num_colors; - qsort(palette, num_colors, sizeof(*palette), PaletteCompareColorsForQsort); - if (!low_effort && PaletteHasNonMonotonousDeltas(palette, num_colors)) { - GreedyMinimizeDeltas(palette, num_colors); - } - return 1; -} - -// These five modes are evaluated and their respective entropy is computed. -typedef enum { - kDirect = 0, - kSpatial = 1, - kSubGreen = 2, - kSpatialSubGreen = 3, - kPalette = 4, - kNumEntropyIx = 5 -} EntropyIx; - -typedef enum { - kHistoAlpha = 0, - kHistoAlphaPred, - kHistoGreen, - kHistoGreenPred, - kHistoRed, - kHistoRedPred, - kHistoBlue, - kHistoBluePred, - kHistoRedSubGreen, - kHistoRedPredSubGreen, - kHistoBlueSubGreen, - kHistoBluePredSubGreen, - kHistoPalette, - kHistoTotal // Must be last. -} HistoIx; - -static void AddSingleSubGreen(int p, uint32_t* const r, uint32_t* const b) { - const int green = p >> 8; // The upper bits are masked away later. - ++r[((p >> 16) - green) & 0xff]; - ++b[((p >> 0) - green) & 0xff]; -} - -static void AddSingle(uint32_t p, - uint32_t* const a, uint32_t* const r, - uint32_t* const g, uint32_t* const b) { - ++a[(p >> 24) & 0xff]; - ++r[(p >> 16) & 0xff]; - ++g[(p >> 8) & 0xff]; - ++b[(p >> 0) & 0xff]; -} - -static WEBP_INLINE uint32_t HashPix(uint32_t pix) { - // Note that masking with 0xffffffffu is for preventing an - // 'unsigned int overflow' warning. Doesn't impact the compiled code. - return ((((uint64_t)pix + (pix >> 19)) * 0x39c5fba7ull) & 0xffffffffu) >> 24; -} - -static int AnalyzeEntropy(const uint32_t* argb, - int width, int height, int argb_stride, - int use_palette, - int palette_size, int transform_bits, - EntropyIx* const min_entropy_ix, - int* const red_and_blue_always_zero) { - // Allocate histogram set with cache_bits = 0. - uint32_t* histo; - - if (use_palette && palette_size <= 16) { - // In the case of small palettes, we pack 2, 4 or 8 pixels together. In - // practice, small palettes are better than any other transform. - *min_entropy_ix = kPalette; - *red_and_blue_always_zero = 1; - return 1; - } - histo = (uint32_t*)WebPSafeCalloc(kHistoTotal, sizeof(*histo) * 256); - if (histo != NULL) { - int i, x, y; - const uint32_t* prev_row = NULL; - const uint32_t* curr_row = argb; - uint32_t pix_prev = argb[0]; // Skip the first pixel. - for (y = 0; y < height; ++y) { - for (x = 0; x < width; ++x) { - const uint32_t pix = curr_row[x]; - const uint32_t pix_diff = VP8LSubPixels(pix, pix_prev); - pix_prev = pix; - if ((pix_diff == 0) || (prev_row != NULL && pix == prev_row[x])) { - continue; - } - AddSingle(pix, - &histo[kHistoAlpha * 256], - &histo[kHistoRed * 256], - &histo[kHistoGreen * 256], - &histo[kHistoBlue * 256]); - AddSingle(pix_diff, - &histo[kHistoAlphaPred * 256], - &histo[kHistoRedPred * 256], - &histo[kHistoGreenPred * 256], - &histo[kHistoBluePred * 256]); - AddSingleSubGreen(pix, - &histo[kHistoRedSubGreen * 256], - &histo[kHistoBlueSubGreen * 256]); - AddSingleSubGreen(pix_diff, - &histo[kHistoRedPredSubGreen * 256], - &histo[kHistoBluePredSubGreen * 256]); - { - // Approximate the palette by the entropy of the multiplicative hash. - const uint32_t hash = HashPix(pix); - ++histo[kHistoPalette * 256 + hash]; - } - } - prev_row = curr_row; - curr_row += argb_stride; - } - { - double entropy_comp[kHistoTotal]; - double entropy[kNumEntropyIx]; - int k; - int last_mode_to_analyze = use_palette ? kPalette : kSpatialSubGreen; - int j; - // Let's add one zero to the predicted histograms. The zeros are removed - // too efficiently by the pix_diff == 0 comparison, at least one of the - // zeros is likely to exist. - ++histo[kHistoRedPredSubGreen * 256]; - ++histo[kHistoBluePredSubGreen * 256]; - ++histo[kHistoRedPred * 256]; - ++histo[kHistoGreenPred * 256]; - ++histo[kHistoBluePred * 256]; - ++histo[kHistoAlphaPred * 256]; - - for (j = 0; j < kHistoTotal; ++j) { - entropy_comp[j] = VP8LBitsEntropy(&histo[j * 256], 256); - } - entropy[kDirect] = entropy_comp[kHistoAlpha] + - entropy_comp[kHistoRed] + - entropy_comp[kHistoGreen] + - entropy_comp[kHistoBlue]; - entropy[kSpatial] = entropy_comp[kHistoAlphaPred] + - entropy_comp[kHistoRedPred] + - entropy_comp[kHistoGreenPred] + - entropy_comp[kHistoBluePred]; - entropy[kSubGreen] = entropy_comp[kHistoAlpha] + - entropy_comp[kHistoRedSubGreen] + - entropy_comp[kHistoGreen] + - entropy_comp[kHistoBlueSubGreen]; - entropy[kSpatialSubGreen] = entropy_comp[kHistoAlphaPred] + - entropy_comp[kHistoRedPredSubGreen] + - entropy_comp[kHistoGreenPred] + - entropy_comp[kHistoBluePredSubGreen]; - entropy[kPalette] = entropy_comp[kHistoPalette]; - - // When including transforms, there is an overhead in bits from - // storing them. This overhead is small but matters for small images. - // For spatial, there are 14 transformations. - entropy[kSpatial] += VP8LSubSampleSize(width, transform_bits) * - VP8LSubSampleSize(height, transform_bits) * - VP8LFastLog2(14); - // For color transforms: 24 as only 3 channels are considered in a - // ColorTransformElement. - entropy[kSpatialSubGreen] += VP8LSubSampleSize(width, transform_bits) * - VP8LSubSampleSize(height, transform_bits) * - VP8LFastLog2(24); - // For palettes, add the cost of storing the palette. - // We empirically estimate the cost of a compressed entry as 8 bits. - // The palette is differential-coded when compressed hence a much - // lower cost than sizeof(uint32_t)*8. - entropy[kPalette] += palette_size * 8; - - *min_entropy_ix = kDirect; - for (k = kDirect + 1; k <= last_mode_to_analyze; ++k) { - if (entropy[*min_entropy_ix] > entropy[k]) { - *min_entropy_ix = (EntropyIx)k; - } - } - assert((int)*min_entropy_ix <= last_mode_to_analyze); - *red_and_blue_always_zero = 1; - // Let's check if the histogram of the chosen entropy mode has - // non-zero red and blue values. If all are zero, we can later skip - // the cross color optimization. - { - static const uint8_t kHistoPairs[5][2] = { - { kHistoRed, kHistoBlue }, - { kHistoRedPred, kHistoBluePred }, - { kHistoRedSubGreen, kHistoBlueSubGreen }, - { kHistoRedPredSubGreen, kHistoBluePredSubGreen }, - { kHistoRed, kHistoBlue } - }; - const uint32_t* const red_histo = - &histo[256 * kHistoPairs[*min_entropy_ix][0]]; - const uint32_t* const blue_histo = - &histo[256 * kHistoPairs[*min_entropy_ix][1]]; - for (i = 1; i < 256; ++i) { - if ((red_histo[i] | blue_histo[i]) != 0) { - *red_and_blue_always_zero = 0; - break; - } - } - } - } - WebPSafeFree(histo); - return 1; - } else { - return 0; - } -} - -static int GetHistoBits(int method, int use_palette, int width, int height) { - // Make tile size a function of encoding method (Range: 0 to 6). - int histo_bits = (use_palette ? 9 : 7) - method; - while (1) { - const int huff_image_size = VP8LSubSampleSize(width, histo_bits) * - VP8LSubSampleSize(height, histo_bits); - if (huff_image_size <= MAX_HUFF_IMAGE_SIZE) break; - ++histo_bits; - } - return (histo_bits < MIN_HUFFMAN_BITS) ? MIN_HUFFMAN_BITS : - (histo_bits > MAX_HUFFMAN_BITS) ? MAX_HUFFMAN_BITS : histo_bits; -} - -static int GetTransformBits(int method, int histo_bits) { - const int max_transform_bits = (method < 4) ? 6 : (method > 4) ? 4 : 5; - const int res = - (histo_bits > max_transform_bits) ? max_transform_bits : histo_bits; - assert(res <= MAX_TRANSFORM_BITS); - return res; -} - -// Set of parameters to be used in each iteration of the cruncher. -#define CRUNCH_CONFIGS_LZ77_MAX 2 -typedef struct { - int entropy_idx_; - int lz77s_types_to_try_[CRUNCH_CONFIGS_LZ77_MAX]; - int lz77s_types_to_try_size_; -} CrunchConfig; - -#define CRUNCH_CONFIGS_MAX kNumEntropyIx - -static int EncoderAnalyze(VP8LEncoder* const enc, - CrunchConfig crunch_configs[CRUNCH_CONFIGS_MAX], - int* const crunch_configs_size, - int* const red_and_blue_always_zero) { - const WebPPicture* const pic = enc->pic_; - const int width = pic->width; - const int height = pic->height; - const WebPConfig* const config = enc->config_; - const int method = config->method; - const int low_effort = (config->method == 0); - int i; - int use_palette; - int n_lz77s; - assert(pic != NULL && pic->argb != NULL); - - use_palette = - AnalyzeAndCreatePalette(pic, low_effort, - enc->palette_, &enc->palette_size_); - - // Empirical bit sizes. - enc->histo_bits_ = GetHistoBits(method, use_palette, - pic->width, pic->height); - enc->transform_bits_ = GetTransformBits(method, enc->histo_bits_); - - if (low_effort) { - // AnalyzeEntropy is somewhat slow. - crunch_configs[0].entropy_idx_ = use_palette ? kPalette : kSpatialSubGreen; - n_lz77s = 1; - *crunch_configs_size = 1; - } else { - EntropyIx min_entropy_ix; - // Try out multiple LZ77 on images with few colors. - n_lz77s = (enc->palette_size_ > 0 && enc->palette_size_ <= 16) ? 2 : 1; - if (!AnalyzeEntropy(pic->argb, width, height, pic->argb_stride, use_palette, - enc->palette_size_, enc->transform_bits_, - &min_entropy_ix, red_and_blue_always_zero)) { - return 0; - } - if (method == 6 && config->quality == 100) { - // Go brute force on all transforms. - *crunch_configs_size = 0; - for (i = 0; i < kNumEntropyIx; ++i) { - if (i != kPalette || use_palette) { - assert(*crunch_configs_size < CRUNCH_CONFIGS_MAX); - crunch_configs[(*crunch_configs_size)++].entropy_idx_ = i; - } - } - } else { - // Only choose the guessed best transform. - *crunch_configs_size = 1; - crunch_configs[0].entropy_idx_ = min_entropy_ix; - } - } - // Fill in the different LZ77s. - assert(n_lz77s <= CRUNCH_CONFIGS_LZ77_MAX); - for (i = 0; i < *crunch_configs_size; ++i) { - int j; - for (j = 0; j < n_lz77s; ++j) { - crunch_configs[i].lz77s_types_to_try_[j] = - (j == 0) ? kLZ77Standard | kLZ77RLE : kLZ77Box; - } - crunch_configs[i].lz77s_types_to_try_size_ = n_lz77s; - } - return 1; -} - -static int EncoderInit(VP8LEncoder* const enc) { - const WebPPicture* const pic = enc->pic_; - const int width = pic->width; - const int height = pic->height; - const int pix_cnt = width * height; - // we round the block size up, so we're guaranteed to have - // at most MAX_REFS_BLOCK_PER_IMAGE blocks used: - const int refs_block_size = (pix_cnt - 1) / MAX_REFS_BLOCK_PER_IMAGE + 1; - int i; - if (!VP8LHashChainInit(&enc->hash_chain_, pix_cnt)) return 0; - - for (i = 0; i < 3; ++i) VP8LBackwardRefsInit(&enc->refs_[i], refs_block_size); - - return 1; -} - -// Returns false in case of memory error. -static int GetHuffBitLengthsAndCodes( - const VP8LHistogramSet* const histogram_image, - HuffmanTreeCode* const huffman_codes) { - int i, k; - int ok = 0; - uint64_t total_length_size = 0; - uint8_t* mem_buf = NULL; - const int histogram_image_size = histogram_image->size; - int max_num_symbols = 0; - uint8_t* buf_rle = NULL; - HuffmanTree* huff_tree = NULL; - - // Iterate over all histograms and get the aggregate number of codes used. - for (i = 0; i < histogram_image_size; ++i) { - const VP8LHistogram* const histo = histogram_image->histograms[i]; - HuffmanTreeCode* const codes = &huffman_codes[5 * i]; - assert(histo != NULL); - for (k = 0; k < 5; ++k) { - const int num_symbols = - (k == 0) ? VP8LHistogramNumCodes(histo->palette_code_bits_) : - (k == 4) ? NUM_DISTANCE_CODES : 256; - codes[k].num_symbols = num_symbols; - total_length_size += num_symbols; - } - } - - // Allocate and Set Huffman codes. - { - uint16_t* codes; - uint8_t* lengths; - mem_buf = (uint8_t*)WebPSafeCalloc(total_length_size, - sizeof(*lengths) + sizeof(*codes)); - if (mem_buf == NULL) goto End; - - codes = (uint16_t*)mem_buf; - lengths = (uint8_t*)&codes[total_length_size]; - for (i = 0; i < 5 * histogram_image_size; ++i) { - const int bit_length = huffman_codes[i].num_symbols; - huffman_codes[i].codes = codes; - huffman_codes[i].code_lengths = lengths; - codes += bit_length; - lengths += bit_length; - if (max_num_symbols < bit_length) { - max_num_symbols = bit_length; - } - } - } - - buf_rle = (uint8_t*)WebPSafeMalloc(1ULL, max_num_symbols); - huff_tree = (HuffmanTree*)WebPSafeMalloc(3ULL * max_num_symbols, - sizeof(*huff_tree)); - if (buf_rle == NULL || huff_tree == NULL) goto End; - - // Create Huffman trees. - for (i = 0; i < histogram_image_size; ++i) { - HuffmanTreeCode* const codes = &huffman_codes[5 * i]; - VP8LHistogram* const histo = histogram_image->histograms[i]; - VP8LCreateHuffmanTree(histo->literal_, 15, buf_rle, huff_tree, codes + 0); - VP8LCreateHuffmanTree(histo->red_, 15, buf_rle, huff_tree, codes + 1); - VP8LCreateHuffmanTree(histo->blue_, 15, buf_rle, huff_tree, codes + 2); - VP8LCreateHuffmanTree(histo->alpha_, 15, buf_rle, huff_tree, codes + 3); - VP8LCreateHuffmanTree(histo->distance_, 15, buf_rle, huff_tree, codes + 4); - } - ok = 1; - End: - WebPSafeFree(huff_tree); - WebPSafeFree(buf_rle); - if (!ok) { - WebPSafeFree(mem_buf); - memset(huffman_codes, 0, 5 * histogram_image_size * sizeof(*huffman_codes)); - } - return ok; -} - -static void StoreHuffmanTreeOfHuffmanTreeToBitMask( - VP8LBitWriter* const bw, const uint8_t* code_length_bitdepth) { - // RFC 1951 will calm you down if you are worried about this funny sequence. - // This sequence is tuned from that, but more weighted for lower symbol count, - // and more spiking histograms. - static const uint8_t kStorageOrder[CODE_LENGTH_CODES] = { - 17, 18, 0, 1, 2, 3, 4, 5, 16, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 - }; - int i; - // Throw away trailing zeros: - int codes_to_store = CODE_LENGTH_CODES; - for (; codes_to_store > 4; --codes_to_store) { - if (code_length_bitdepth[kStorageOrder[codes_to_store - 1]] != 0) { - break; - } - } - VP8LPutBits(bw, codes_to_store - 4, 4); - for (i = 0; i < codes_to_store; ++i) { - VP8LPutBits(bw, code_length_bitdepth[kStorageOrder[i]], 3); - } -} - -static void ClearHuffmanTreeIfOnlyOneSymbol( - HuffmanTreeCode* const huffman_code) { - int k; - int count = 0; - for (k = 0; k < huffman_code->num_symbols; ++k) { - if (huffman_code->code_lengths[k] != 0) { - ++count; - if (count > 1) return; - } - } - for (k = 0; k < huffman_code->num_symbols; ++k) { - huffman_code->code_lengths[k] = 0; - huffman_code->codes[k] = 0; - } -} - -static void StoreHuffmanTreeToBitMask( - VP8LBitWriter* const bw, - const HuffmanTreeToken* const tokens, const int num_tokens, - const HuffmanTreeCode* const huffman_code) { - int i; - for (i = 0; i < num_tokens; ++i) { - const int ix = tokens[i].code; - const int extra_bits = tokens[i].extra_bits; - VP8LPutBits(bw, huffman_code->codes[ix], huffman_code->code_lengths[ix]); - switch (ix) { - case 16: - VP8LPutBits(bw, extra_bits, 2); - break; - case 17: - VP8LPutBits(bw, extra_bits, 3); - break; - case 18: - VP8LPutBits(bw, extra_bits, 7); - break; - } - } -} - -// 'huff_tree' and 'tokens' are pre-alloacted buffers. -static void StoreFullHuffmanCode(VP8LBitWriter* const bw, - HuffmanTree* const huff_tree, - HuffmanTreeToken* const tokens, - const HuffmanTreeCode* const tree) { - uint8_t code_length_bitdepth[CODE_LENGTH_CODES] = { 0 }; - uint16_t code_length_bitdepth_symbols[CODE_LENGTH_CODES] = { 0 }; - const int max_tokens = tree->num_symbols; - int num_tokens; - HuffmanTreeCode huffman_code; - huffman_code.num_symbols = CODE_LENGTH_CODES; - huffman_code.code_lengths = code_length_bitdepth; - huffman_code.codes = code_length_bitdepth_symbols; - - VP8LPutBits(bw, 0, 1); - num_tokens = VP8LCreateCompressedHuffmanTree(tree, tokens, max_tokens); - { - uint32_t histogram[CODE_LENGTH_CODES] = { 0 }; - uint8_t buf_rle[CODE_LENGTH_CODES] = { 0 }; - int i; - for (i = 0; i < num_tokens; ++i) { - ++histogram[tokens[i].code]; - } - - VP8LCreateHuffmanTree(histogram, 7, buf_rle, huff_tree, &huffman_code); - } - - StoreHuffmanTreeOfHuffmanTreeToBitMask(bw, code_length_bitdepth); - ClearHuffmanTreeIfOnlyOneSymbol(&huffman_code); - { - int trailing_zero_bits = 0; - int trimmed_length = num_tokens; - int write_trimmed_length; - int length; - int i = num_tokens; - while (i-- > 0) { - const int ix = tokens[i].code; - if (ix == 0 || ix == 17 || ix == 18) { - --trimmed_length; // discount trailing zeros - trailing_zero_bits += code_length_bitdepth[ix]; - if (ix == 17) { - trailing_zero_bits += 3; - } else if (ix == 18) { - trailing_zero_bits += 7; - } - } else { - break; - } - } - write_trimmed_length = (trimmed_length > 1 && trailing_zero_bits > 12); - length = write_trimmed_length ? trimmed_length : num_tokens; - VP8LPutBits(bw, write_trimmed_length, 1); - if (write_trimmed_length) { - if (trimmed_length == 2) { - VP8LPutBits(bw, 0, 3 + 2); // nbitpairs=1, trimmed_length=2 - } else { - const int nbits = BitsLog2Floor(trimmed_length - 2); - const int nbitpairs = nbits / 2 + 1; - assert(trimmed_length > 2); - assert(nbitpairs - 1 < 8); - VP8LPutBits(bw, nbitpairs - 1, 3); - VP8LPutBits(bw, trimmed_length - 2, nbitpairs * 2); - } - } - StoreHuffmanTreeToBitMask(bw, tokens, length, &huffman_code); - } -} - -// 'huff_tree' and 'tokens' are pre-alloacted buffers. -static void StoreHuffmanCode(VP8LBitWriter* const bw, - HuffmanTree* const huff_tree, - HuffmanTreeToken* const tokens, - const HuffmanTreeCode* const huffman_code) { - int i; - int count = 0; - int symbols[2] = { 0, 0 }; - const int kMaxBits = 8; - const int kMaxSymbol = 1 << kMaxBits; - - // Check whether it's a small tree. - for (i = 0; i < huffman_code->num_symbols && count < 3; ++i) { - if (huffman_code->code_lengths[i] != 0) { - if (count < 2) symbols[count] = i; - ++count; - } - } - - if (count == 0) { // emit minimal tree for empty cases - // bits: small tree marker: 1, count-1: 0, large 8-bit code: 0, code: 0 - VP8LPutBits(bw, 0x01, 4); - } else if (count <= 2 && symbols[0] < kMaxSymbol && symbols[1] < kMaxSymbol) { - VP8LPutBits(bw, 1, 1); // Small tree marker to encode 1 or 2 symbols. - VP8LPutBits(bw, count - 1, 1); - if (symbols[0] <= 1) { - VP8LPutBits(bw, 0, 1); // Code bit for small (1 bit) symbol value. - VP8LPutBits(bw, symbols[0], 1); - } else { - VP8LPutBits(bw, 1, 1); - VP8LPutBits(bw, symbols[0], 8); - } - if (count == 2) { - VP8LPutBits(bw, symbols[1], 8); - } - } else { - StoreFullHuffmanCode(bw, huff_tree, tokens, huffman_code); - } -} - -static WEBP_INLINE void WriteHuffmanCode(VP8LBitWriter* const bw, - const HuffmanTreeCode* const code, - int code_index) { - const int depth = code->code_lengths[code_index]; - const int symbol = code->codes[code_index]; - VP8LPutBits(bw, symbol, depth); -} - -static WEBP_INLINE void WriteHuffmanCodeWithExtraBits( - VP8LBitWriter* const bw, - const HuffmanTreeCode* const code, - int code_index, - int bits, - int n_bits) { - const int depth = code->code_lengths[code_index]; - const int symbol = code->codes[code_index]; - VP8LPutBits(bw, (bits << depth) | symbol, depth + n_bits); -} - -static WebPEncodingError StoreImageToBitMask( - VP8LBitWriter* const bw, int width, int histo_bits, - const VP8LBackwardRefs* const refs, - const uint16_t* histogram_symbols, - const HuffmanTreeCode* const huffman_codes) { - const int histo_xsize = histo_bits ? VP8LSubSampleSize(width, histo_bits) : 1; - const int tile_mask = (histo_bits == 0) ? 0 : -(1 << histo_bits); - // x and y trace the position in the image. - int x = 0; - int y = 0; - int tile_x = x & tile_mask; - int tile_y = y & tile_mask; - int histogram_ix = histogram_symbols[0]; - const HuffmanTreeCode* codes = huffman_codes + 5 * histogram_ix; - VP8LRefsCursor c = VP8LRefsCursorInit(refs); - while (VP8LRefsCursorOk(&c)) { - const PixOrCopy* const v = c.cur_pos; - if ((tile_x != (x & tile_mask)) || (tile_y != (y & tile_mask))) { - tile_x = x & tile_mask; - tile_y = y & tile_mask; - histogram_ix = histogram_symbols[(y >> histo_bits) * histo_xsize + - (x >> histo_bits)]; - codes = huffman_codes + 5 * histogram_ix; - } - if (PixOrCopyIsLiteral(v)) { - static const uint8_t order[] = { 1, 2, 0, 3 }; - int k; - for (k = 0; k < 4; ++k) { - const int code = PixOrCopyLiteral(v, order[k]); - WriteHuffmanCode(bw, codes + k, code); - } - } else if (PixOrCopyIsCacheIdx(v)) { - const int code = PixOrCopyCacheIdx(v); - const int literal_ix = 256 + NUM_LENGTH_CODES + code; - WriteHuffmanCode(bw, codes, literal_ix); - } else { - int bits, n_bits; - int code; - - const int distance = PixOrCopyDistance(v); - VP8LPrefixEncode(v->len, &code, &n_bits, &bits); - WriteHuffmanCodeWithExtraBits(bw, codes, 256 + code, bits, n_bits); - - // Don't write the distance with the extra bits code since - // the distance can be up to 18 bits of extra bits, and the prefix - // 15 bits, totaling to 33, and our PutBits only supports up to 32 bits. - VP8LPrefixEncode(distance, &code, &n_bits, &bits); - WriteHuffmanCode(bw, codes + 4, code); - VP8LPutBits(bw, bits, n_bits); - } - x += PixOrCopyLength(v); - while (x >= width) { - x -= width; - ++y; - } - VP8LRefsCursorNext(&c); - } - return bw->error_ ? VP8_ENC_ERROR_OUT_OF_MEMORY : VP8_ENC_OK; -} - -// Special case of EncodeImageInternal() for cache-bits=0, histo_bits=31 -static WebPEncodingError EncodeImageNoHuffman(VP8LBitWriter* const bw, - const uint32_t* const argb, - VP8LHashChain* const hash_chain, - VP8LBackwardRefs* const refs_tmp1, - VP8LBackwardRefs* const refs_tmp2, - int width, int height, - int quality, int low_effort) { - int i; - int max_tokens = 0; - WebPEncodingError err = VP8_ENC_OK; - VP8LBackwardRefs* refs; - HuffmanTreeToken* tokens = NULL; - HuffmanTreeCode huffman_codes[5] = { { 0, NULL, NULL } }; - const uint16_t histogram_symbols[1] = { 0 }; // only one tree, one symbol - int cache_bits = 0; - VP8LHistogramSet* histogram_image = NULL; - HuffmanTree* const huff_tree = (HuffmanTree*)WebPSafeMalloc( - 3ULL * CODE_LENGTH_CODES, sizeof(*huff_tree)); - if (huff_tree == NULL) { - err = VP8_ENC_ERROR_OUT_OF_MEMORY; - goto Error; - } - - // Calculate backward references from ARGB image. - if (!VP8LHashChainFill(hash_chain, quality, argb, width, height, - low_effort)) { - err = VP8_ENC_ERROR_OUT_OF_MEMORY; - goto Error; - } - refs = VP8LGetBackwardReferences(width, height, argb, quality, 0, - kLZ77Standard | kLZ77RLE, &cache_bits, - hash_chain, refs_tmp1, refs_tmp2); - if (refs == NULL) { - err = VP8_ENC_ERROR_OUT_OF_MEMORY; - goto Error; - } - histogram_image = VP8LAllocateHistogramSet(1, cache_bits); - if (histogram_image == NULL) { - err = VP8_ENC_ERROR_OUT_OF_MEMORY; - goto Error; - } - VP8LHistogramSetClear(histogram_image); - - // Build histogram image and symbols from backward references. - VP8LHistogramStoreRefs(refs, histogram_image->histograms[0]); - - // Create Huffman bit lengths and codes for each histogram image. - assert(histogram_image->size == 1); - if (!GetHuffBitLengthsAndCodes(histogram_image, huffman_codes)) { - err = VP8_ENC_ERROR_OUT_OF_MEMORY; - goto Error; - } - - // No color cache, no Huffman image. - VP8LPutBits(bw, 0, 1); - - // Find maximum number of symbols for the huffman tree-set. - for (i = 0; i < 5; ++i) { - HuffmanTreeCode* const codes = &huffman_codes[i]; - if (max_tokens < codes->num_symbols) { - max_tokens = codes->num_symbols; - } - } - - tokens = (HuffmanTreeToken*)WebPSafeMalloc(max_tokens, sizeof(*tokens)); - if (tokens == NULL) { - err = VP8_ENC_ERROR_OUT_OF_MEMORY; - goto Error; - } - - // Store Huffman codes. - for (i = 0; i < 5; ++i) { - HuffmanTreeCode* const codes = &huffman_codes[i]; - StoreHuffmanCode(bw, huff_tree, tokens, codes); - ClearHuffmanTreeIfOnlyOneSymbol(codes); - } - - // Store actual literals. - err = StoreImageToBitMask(bw, width, 0, refs, histogram_symbols, - huffman_codes); - - Error: - WebPSafeFree(tokens); - WebPSafeFree(huff_tree); - VP8LFreeHistogramSet(histogram_image); - WebPSafeFree(huffman_codes[0].codes); - return err; -} - -static WebPEncodingError EncodeImageInternal( - VP8LBitWriter* const bw, const uint32_t* const argb, - VP8LHashChain* const hash_chain, VP8LBackwardRefs refs_array[3], int width, - int height, int quality, int low_effort, int use_cache, - const CrunchConfig* const config, int* cache_bits, int histogram_bits, - size_t init_byte_position, int* const hdr_size, int* const data_size) { - WebPEncodingError err = VP8_ENC_OK; - const uint32_t histogram_image_xysize = - VP8LSubSampleSize(width, histogram_bits) * - VP8LSubSampleSize(height, histogram_bits); - VP8LHistogramSet* histogram_image = NULL; - VP8LHistogram* tmp_histo = NULL; - int histogram_image_size = 0; - size_t bit_array_size = 0; - HuffmanTree* const huff_tree = (HuffmanTree*)WebPSafeMalloc( - 3ULL * CODE_LENGTH_CODES, sizeof(*huff_tree)); - HuffmanTreeToken* tokens = NULL; - HuffmanTreeCode* huffman_codes = NULL; - VP8LBackwardRefs* refs_best; - VP8LBackwardRefs* refs_tmp; - uint16_t* const histogram_symbols = - (uint16_t*)WebPSafeMalloc(histogram_image_xysize, - sizeof(*histogram_symbols)); - int lz77s_idx; - VP8LBitWriter bw_init = *bw, bw_best; - int hdr_size_tmp; - assert(histogram_bits >= MIN_HUFFMAN_BITS); - assert(histogram_bits <= MAX_HUFFMAN_BITS); - assert(hdr_size != NULL); - assert(data_size != NULL); - - if (histogram_symbols == NULL) { - err = VP8_ENC_ERROR_OUT_OF_MEMORY; - goto Error; - } - - if (use_cache) { - // If the value is different from zero, it has been set during the - // palette analysis. - if (*cache_bits == 0) *cache_bits = MAX_COLOR_CACHE_BITS; - } else { - *cache_bits = 0; - } - // 'best_refs' is the reference to the best backward refs and points to one - // of refs_array[0] or refs_array[1]. - // Calculate backward references from ARGB image. - if (huff_tree == NULL || - !VP8LHashChainFill(hash_chain, quality, argb, width, height, - low_effort) || - !VP8LBitWriterInit(&bw_best, 0) || - (config->lz77s_types_to_try_size_ > 1 && - !VP8LBitWriterClone(bw, &bw_best))) { - err = VP8_ENC_ERROR_OUT_OF_MEMORY; - goto Error; - } - for (lz77s_idx = 0; lz77s_idx < config->lz77s_types_to_try_size_; - ++lz77s_idx) { - refs_best = VP8LGetBackwardReferences( - width, height, argb, quality, low_effort, - config->lz77s_types_to_try_[lz77s_idx], cache_bits, hash_chain, - &refs_array[0], &refs_array[1]); - if (refs_best == NULL) { - err = VP8_ENC_ERROR_OUT_OF_MEMORY; - goto Error; - } - // Keep the best references aside and use the other element from the first - // two as a temporary for later usage. - refs_tmp = &refs_array[refs_best == &refs_array[0] ? 1 : 0]; - - histogram_image = - VP8LAllocateHistogramSet(histogram_image_xysize, *cache_bits); - tmp_histo = VP8LAllocateHistogram(*cache_bits); - if (histogram_image == NULL || tmp_histo == NULL) { - err = VP8_ENC_ERROR_OUT_OF_MEMORY; - goto Error; - } - - // Build histogram image and symbols from backward references. - if (!VP8LGetHistoImageSymbols(width, height, refs_best, quality, low_effort, - histogram_bits, *cache_bits, histogram_image, - tmp_histo, histogram_symbols)) { - err = VP8_ENC_ERROR_OUT_OF_MEMORY; - goto Error; - } - // Create Huffman bit lengths and codes for each histogram image. - histogram_image_size = histogram_image->size; - bit_array_size = 5 * histogram_image_size; - huffman_codes = (HuffmanTreeCode*)WebPSafeCalloc(bit_array_size, - sizeof(*huffman_codes)); - // Note: some histogram_image entries may point to tmp_histos[], so the - // latter need to outlive the following call to GetHuffBitLengthsAndCodes(). - if (huffman_codes == NULL || - !GetHuffBitLengthsAndCodes(histogram_image, huffman_codes)) { - err = VP8_ENC_ERROR_OUT_OF_MEMORY; - goto Error; - } - // Free combined histograms. - VP8LFreeHistogramSet(histogram_image); - histogram_image = NULL; - - // Free scratch histograms. - VP8LFreeHistogram(tmp_histo); - tmp_histo = NULL; - - // Color Cache parameters. - if (*cache_bits > 0) { - VP8LPutBits(bw, 1, 1); - VP8LPutBits(bw, *cache_bits, 4); - } else { - VP8LPutBits(bw, 0, 1); - } - - // Huffman image + meta huffman. - { - const int write_histogram_image = (histogram_image_size > 1); - VP8LPutBits(bw, write_histogram_image, 1); - if (write_histogram_image) { - uint32_t* const histogram_argb = - (uint32_t*)WebPSafeMalloc(histogram_image_xysize, - sizeof(*histogram_argb)); - int max_index = 0; - uint32_t i; - if (histogram_argb == NULL) { - err = VP8_ENC_ERROR_OUT_OF_MEMORY; - goto Error; - } - for (i = 0; i < histogram_image_xysize; ++i) { - const int symbol_index = histogram_symbols[i] & 0xffff; - histogram_argb[i] = (symbol_index << 8); - if (symbol_index >= max_index) { - max_index = symbol_index + 1; - } - } - histogram_image_size = max_index; - - VP8LPutBits(bw, histogram_bits - 2, 3); - err = EncodeImageNoHuffman( - bw, histogram_argb, hash_chain, refs_tmp, &refs_array[2], - VP8LSubSampleSize(width, histogram_bits), - VP8LSubSampleSize(height, histogram_bits), quality, low_effort); - WebPSafeFree(histogram_argb); - if (err != VP8_ENC_OK) goto Error; - } - } - - // Store Huffman codes. - { - int i; - int max_tokens = 0; - // Find maximum number of symbols for the huffman tree-set. - for (i = 0; i < 5 * histogram_image_size; ++i) { - HuffmanTreeCode* const codes = &huffman_codes[i]; - if (max_tokens < codes->num_symbols) { - max_tokens = codes->num_symbols; - } - } - tokens = (HuffmanTreeToken*)WebPSafeMalloc(max_tokens, sizeof(*tokens)); - if (tokens == NULL) { - err = VP8_ENC_ERROR_OUT_OF_MEMORY; - goto Error; - } - for (i = 0; i < 5 * histogram_image_size; ++i) { - HuffmanTreeCode* const codes = &huffman_codes[i]; - StoreHuffmanCode(bw, huff_tree, tokens, codes); - ClearHuffmanTreeIfOnlyOneSymbol(codes); - } - } - // Store actual literals. - hdr_size_tmp = (int)(VP8LBitWriterNumBytes(bw) - init_byte_position); - err = StoreImageToBitMask(bw, width, histogram_bits, refs_best, - histogram_symbols, huffman_codes); - // Keep track of the smallest image so far. - if (lz77s_idx == 0 || - VP8LBitWriterNumBytes(bw) < VP8LBitWriterNumBytes(&bw_best)) { - *hdr_size = hdr_size_tmp; - *data_size = - (int)(VP8LBitWriterNumBytes(bw) - init_byte_position - *hdr_size); - VP8LBitWriterSwap(bw, &bw_best); - } - // Reset the bit writer for the following iteration if any. - if (config->lz77s_types_to_try_size_ > 1) VP8LBitWriterReset(&bw_init, bw); - WebPSafeFree(tokens); - tokens = NULL; - if (huffman_codes != NULL) { - WebPSafeFree(huffman_codes->codes); - WebPSafeFree(huffman_codes); - huffman_codes = NULL; - } - } - VP8LBitWriterSwap(bw, &bw_best); - - Error: - WebPSafeFree(tokens); - WebPSafeFree(huff_tree); - VP8LFreeHistogramSet(histogram_image); - VP8LFreeHistogram(tmp_histo); - if (huffman_codes != NULL) { - WebPSafeFree(huffman_codes->codes); - WebPSafeFree(huffman_codes); - } - WebPSafeFree(histogram_symbols); - VP8LBitWriterWipeOut(&bw_best); - return err; -} - -// ----------------------------------------------------------------------------- -// Transforms - -static void ApplySubtractGreen(VP8LEncoder* const enc, int width, int height, - VP8LBitWriter* const bw) { - VP8LPutBits(bw, TRANSFORM_PRESENT, 1); - VP8LPutBits(bw, SUBTRACT_GREEN, 2); - VP8LSubtractGreenFromBlueAndRed(enc->argb_, width * height); -} - -static WebPEncodingError ApplyPredictFilter(const VP8LEncoder* const enc, - int width, int height, - int quality, int low_effort, - int used_subtract_green, - VP8LBitWriter* const bw) { - const int pred_bits = enc->transform_bits_; - const int transform_width = VP8LSubSampleSize(width, pred_bits); - const int transform_height = VP8LSubSampleSize(height, pred_bits); - // we disable near-lossless quantization if palette is used. - const int near_lossless_strength = enc->use_palette_ ? 100 - : enc->config_->near_lossless; - - VP8LResidualImage(width, height, pred_bits, low_effort, enc->argb_, - enc->argb_scratch_, enc->transform_data_, - near_lossless_strength, enc->config_->exact, - used_subtract_green); - VP8LPutBits(bw, TRANSFORM_PRESENT, 1); - VP8LPutBits(bw, PREDICTOR_TRANSFORM, 2); - assert(pred_bits >= 2); - VP8LPutBits(bw, pred_bits - 2, 3); - return EncodeImageNoHuffman( - bw, enc->transform_data_, (VP8LHashChain*)&enc->hash_chain_, - (VP8LBackwardRefs*)&enc->refs_[0], // cast const away - (VP8LBackwardRefs*)&enc->refs_[1], transform_width, transform_height, - quality, low_effort); -} - -static WebPEncodingError ApplyCrossColorFilter(const VP8LEncoder* const enc, - int width, int height, - int quality, int low_effort, - VP8LBitWriter* const bw) { - const int ccolor_transform_bits = enc->transform_bits_; - const int transform_width = VP8LSubSampleSize(width, ccolor_transform_bits); - const int transform_height = VP8LSubSampleSize(height, ccolor_transform_bits); - - VP8LColorSpaceTransform(width, height, ccolor_transform_bits, quality, - enc->argb_, enc->transform_data_); - VP8LPutBits(bw, TRANSFORM_PRESENT, 1); - VP8LPutBits(bw, CROSS_COLOR_TRANSFORM, 2); - assert(ccolor_transform_bits >= 2); - VP8LPutBits(bw, ccolor_transform_bits - 2, 3); - return EncodeImageNoHuffman( - bw, enc->transform_data_, (VP8LHashChain*)&enc->hash_chain_, - (VP8LBackwardRefs*)&enc->refs_[0], // cast const away - (VP8LBackwardRefs*)&enc->refs_[1], transform_width, transform_height, - quality, low_effort); -} - -// ----------------------------------------------------------------------------- - -static WebPEncodingError WriteRiffHeader(const WebPPicture* const pic, - size_t riff_size, size_t vp8l_size) { - uint8_t riff[RIFF_HEADER_SIZE + CHUNK_HEADER_SIZE + VP8L_SIGNATURE_SIZE] = { - 'R', 'I', 'F', 'F', 0, 0, 0, 0, 'W', 'E', 'B', 'P', - 'V', 'P', '8', 'L', 0, 0, 0, 0, VP8L_MAGIC_BYTE, - }; - PutLE32(riff + TAG_SIZE, (uint32_t)riff_size); - PutLE32(riff + RIFF_HEADER_SIZE + TAG_SIZE, (uint32_t)vp8l_size); - if (!pic->writer(riff, sizeof(riff), pic)) { - return VP8_ENC_ERROR_BAD_WRITE; - } - return VP8_ENC_OK; -} - -static int WriteImageSize(const WebPPicture* const pic, - VP8LBitWriter* const bw) { - const int width = pic->width - 1; - const int height = pic->height - 1; - assert(width < WEBP_MAX_DIMENSION && height < WEBP_MAX_DIMENSION); - - VP8LPutBits(bw, width, VP8L_IMAGE_SIZE_BITS); - VP8LPutBits(bw, height, VP8L_IMAGE_SIZE_BITS); - return !bw->error_; -} - -static int WriteRealAlphaAndVersion(VP8LBitWriter* const bw, int has_alpha) { - VP8LPutBits(bw, has_alpha, 1); - VP8LPutBits(bw, VP8L_VERSION, VP8L_VERSION_BITS); - return !bw->error_; -} - -static WebPEncodingError WriteImage(const WebPPicture* const pic, - VP8LBitWriter* const bw, - size_t* const coded_size) { - WebPEncodingError err = VP8_ENC_OK; - const uint8_t* const webpll_data = VP8LBitWriterFinish(bw); - const size_t webpll_size = VP8LBitWriterNumBytes(bw); - const size_t vp8l_size = VP8L_SIGNATURE_SIZE + webpll_size; - const size_t pad = vp8l_size & 1; - const size_t riff_size = TAG_SIZE + CHUNK_HEADER_SIZE + vp8l_size + pad; - - err = WriteRiffHeader(pic, riff_size, vp8l_size); - if (err != VP8_ENC_OK) goto Error; - - if (!pic->writer(webpll_data, webpll_size, pic)) { - err = VP8_ENC_ERROR_BAD_WRITE; - goto Error; - } - - if (pad) { - const uint8_t pad_byte[1] = { 0 }; - if (!pic->writer(pad_byte, 1, pic)) { - err = VP8_ENC_ERROR_BAD_WRITE; - goto Error; - } - } - *coded_size = CHUNK_HEADER_SIZE + riff_size; - return VP8_ENC_OK; - - Error: - return err; -} - -// ----------------------------------------------------------------------------- - -static void ClearTransformBuffer(VP8LEncoder* const enc) { - WebPSafeFree(enc->transform_mem_); - enc->transform_mem_ = NULL; - enc->transform_mem_size_ = 0; -} - -// Allocates the memory for argb (W x H) buffer, 2 rows of context for -// prediction and transform data. -// Flags influencing the memory allocated: -// enc->transform_bits_ -// enc->use_predict_, enc->use_cross_color_ -static WebPEncodingError AllocateTransformBuffer(VP8LEncoder* const enc, - int width, int height) { - WebPEncodingError err = VP8_ENC_OK; - const uint64_t image_size = width * height; - // VP8LResidualImage needs room for 2 scanlines of uint32 pixels with an extra - // pixel in each, plus 2 regular scanlines of bytes. - // TODO(skal): Clean up by using arithmetic in bytes instead of words. - const uint64_t argb_scratch_size = - enc->use_predict_ - ? (width + 1) * 2 + - (width * 2 + sizeof(uint32_t) - 1) / sizeof(uint32_t) - : 0; - const uint64_t transform_data_size = - (enc->use_predict_ || enc->use_cross_color_) - ? VP8LSubSampleSize(width, enc->transform_bits_) * - VP8LSubSampleSize(height, enc->transform_bits_) - : 0; - const uint64_t max_alignment_in_words = - (WEBP_ALIGN_CST + sizeof(uint32_t) - 1) / sizeof(uint32_t); - const uint64_t mem_size = - image_size + max_alignment_in_words + - argb_scratch_size + max_alignment_in_words + - transform_data_size; - uint32_t* mem = enc->transform_mem_; - if (mem == NULL || mem_size > enc->transform_mem_size_) { - ClearTransformBuffer(enc); - mem = (uint32_t*)WebPSafeMalloc(mem_size, sizeof(*mem)); - if (mem == NULL) { - err = VP8_ENC_ERROR_OUT_OF_MEMORY; - goto Error; - } - enc->transform_mem_ = mem; - enc->transform_mem_size_ = (size_t)mem_size; - enc->argb_content_ = kEncoderNone; - } - enc->argb_ = mem; - mem = (uint32_t*)WEBP_ALIGN(mem + image_size); - enc->argb_scratch_ = mem; - mem = (uint32_t*)WEBP_ALIGN(mem + argb_scratch_size); - enc->transform_data_ = mem; - - enc->current_width_ = width; - Error: - return err; -} - -static WebPEncodingError MakeInputImageCopy(VP8LEncoder* const enc) { - WebPEncodingError err = VP8_ENC_OK; - const WebPPicture* const picture = enc->pic_; - const int width = picture->width; - const int height = picture->height; - - err = AllocateTransformBuffer(enc, width, height); - if (err != VP8_ENC_OK) return err; - if (enc->argb_content_ == kEncoderARGB) return VP8_ENC_OK; - - { - uint32_t* dst = enc->argb_; - const uint32_t* src = picture->argb; - int y; - for (y = 0; y < height; ++y) { - memcpy(dst, src, width * sizeof(*dst)); - dst += width; - src += picture->argb_stride; - } - } - enc->argb_content_ = kEncoderARGB; - assert(enc->current_width_ == width); - return VP8_ENC_OK; -} - -// ----------------------------------------------------------------------------- - -static WEBP_INLINE int SearchColorNoIdx(const uint32_t sorted[], uint32_t color, - int hi) { - int low = 0; - if (sorted[low] == color) return low; // loop invariant: sorted[low] != color - while (1) { - const int mid = (low + hi) >> 1; - if (sorted[mid] == color) { - return mid; - } else if (sorted[mid] < color) { - low = mid; - } else { - hi = mid; - } - } -} - -#define APPLY_PALETTE_GREEDY_MAX 4 - -static WEBP_INLINE uint32_t SearchColorGreedy(const uint32_t palette[], - int palette_size, - uint32_t color) { - (void)palette_size; - assert(palette_size < APPLY_PALETTE_GREEDY_MAX); - assert(3 == APPLY_PALETTE_GREEDY_MAX - 1); - if (color == palette[0]) return 0; - if (color == palette[1]) return 1; - if (color == palette[2]) return 2; - return 3; -} - -static WEBP_INLINE uint32_t ApplyPaletteHash0(uint32_t color) { - // Focus on the green color. - return (color >> 8) & 0xff; -} - -#define PALETTE_INV_SIZE_BITS 11 -#define PALETTE_INV_SIZE (1 << PALETTE_INV_SIZE_BITS) - -static WEBP_INLINE uint32_t ApplyPaletteHash1(uint32_t color) { - // Forget about alpha. - return ((uint32_t)((color & 0x00ffffffu) * 4222244071ull)) >> - (32 - PALETTE_INV_SIZE_BITS); -} - -static WEBP_INLINE uint32_t ApplyPaletteHash2(uint32_t color) { - // Forget about alpha. - return ((uint32_t)((color & 0x00ffffffu) * ((1ull << 31) - 1))) >> - (32 - PALETTE_INV_SIZE_BITS); -} - -// Sort palette in increasing order and prepare an inverse mapping array. -static void PrepareMapToPalette(const uint32_t palette[], int num_colors, - uint32_t sorted[], uint32_t idx_map[]) { - int i; - memcpy(sorted, palette, num_colors * sizeof(*sorted)); - qsort(sorted, num_colors, sizeof(*sorted), PaletteCompareColorsForQsort); - for (i = 0; i < num_colors; ++i) { - idx_map[SearchColorNoIdx(sorted, palette[i], num_colors)] = i; - } -} - -// Use 1 pixel cache for ARGB pixels. -#define APPLY_PALETTE_FOR(COLOR_INDEX) do { \ - uint32_t prev_pix = palette[0]; \ - uint32_t prev_idx = 0; \ - for (y = 0; y < height; ++y) { \ - for (x = 0; x < width; ++x) { \ - const uint32_t pix = src[x]; \ - if (pix != prev_pix) { \ - prev_idx = COLOR_INDEX; \ - prev_pix = pix; \ - } \ - tmp_row[x] = prev_idx; \ - } \ - VP8LBundleColorMap(tmp_row, width, xbits, dst); \ - src += src_stride; \ - dst += dst_stride; \ - } \ -} while (0) - -// Remap argb values in src[] to packed palettes entries in dst[] -// using 'row' as a temporary buffer of size 'width'. -// We assume that all src[] values have a corresponding entry in the palette. -// Note: src[] can be the same as dst[] -static WebPEncodingError ApplyPalette(const uint32_t* src, uint32_t src_stride, - uint32_t* dst, uint32_t dst_stride, - const uint32_t* palette, int palette_size, - int width, int height, int xbits) { - // TODO(skal): this tmp buffer is not needed if VP8LBundleColorMap() can be - // made to work in-place. - uint8_t* const tmp_row = (uint8_t*)WebPSafeMalloc(width, sizeof(*tmp_row)); - int x, y; - - if (tmp_row == NULL) return VP8_ENC_ERROR_OUT_OF_MEMORY; - - if (palette_size < APPLY_PALETTE_GREEDY_MAX) { - APPLY_PALETTE_FOR(SearchColorGreedy(palette, palette_size, pix)); - } else { - int i, j; - uint16_t buffer[PALETTE_INV_SIZE]; - uint32_t (*const hash_functions[])(uint32_t) = { - ApplyPaletteHash0, ApplyPaletteHash1, ApplyPaletteHash2 - }; - - // Try to find a perfect hash function able to go from a color to an index - // within 1 << PALETTE_INV_SIZE_BITS in order to build a hash map to go - // from color to index in palette. - for (i = 0; i < 3; ++i) { - int use_LUT = 1; - // Set each element in buffer to max uint16_t. - memset(buffer, 0xff, sizeof(buffer)); - for (j = 0; j < palette_size; ++j) { - const uint32_t ind = hash_functions[i](palette[j]); - if (buffer[ind] != 0xffffu) { - use_LUT = 0; - break; - } else { - buffer[ind] = j; - } - } - if (use_LUT) break; - } - - if (i == 0) { - APPLY_PALETTE_FOR(buffer[ApplyPaletteHash0(pix)]); - } else if (i == 1) { - APPLY_PALETTE_FOR(buffer[ApplyPaletteHash1(pix)]); - } else if (i == 2) { - APPLY_PALETTE_FOR(buffer[ApplyPaletteHash2(pix)]); - } else { - uint32_t idx_map[MAX_PALETTE_SIZE]; - uint32_t palette_sorted[MAX_PALETTE_SIZE]; - PrepareMapToPalette(palette, palette_size, palette_sorted, idx_map); - APPLY_PALETTE_FOR( - idx_map[SearchColorNoIdx(palette_sorted, pix, palette_size)]); - } - } - WebPSafeFree(tmp_row); - return VP8_ENC_OK; -} -#undef APPLY_PALETTE_FOR -#undef PALETTE_INV_SIZE_BITS -#undef PALETTE_INV_SIZE -#undef APPLY_PALETTE_GREEDY_MAX - -// Note: Expects "enc->palette_" to be set properly. -static WebPEncodingError MapImageFromPalette(VP8LEncoder* const enc, - int in_place) { - WebPEncodingError err = VP8_ENC_OK; - const WebPPicture* const pic = enc->pic_; - const int width = pic->width; - const int height = pic->height; - const uint32_t* const palette = enc->palette_; - const uint32_t* src = in_place ? enc->argb_ : pic->argb; - const int src_stride = in_place ? enc->current_width_ : pic->argb_stride; - const int palette_size = enc->palette_size_; - int xbits; - - // Replace each input pixel by corresponding palette index. - // This is done line by line. - if (palette_size <= 4) { - xbits = (palette_size <= 2) ? 3 : 2; - } else { - xbits = (palette_size <= 16) ? 1 : 0; - } - - err = AllocateTransformBuffer(enc, VP8LSubSampleSize(width, xbits), height); - if (err != VP8_ENC_OK) return err; - - err = ApplyPalette(src, src_stride, - enc->argb_, enc->current_width_, - palette, palette_size, width, height, xbits); - enc->argb_content_ = kEncoderPalette; - return err; -} - -// Save palette_[] to bitstream. -static WebPEncodingError EncodePalette(VP8LBitWriter* const bw, int low_effort, - VP8LEncoder* const enc) { - int i; - uint32_t tmp_palette[MAX_PALETTE_SIZE]; - const int palette_size = enc->palette_size_; - const uint32_t* const palette = enc->palette_; - VP8LPutBits(bw, TRANSFORM_PRESENT, 1); - VP8LPutBits(bw, COLOR_INDEXING_TRANSFORM, 2); - assert(palette_size >= 1 && palette_size <= MAX_PALETTE_SIZE); - VP8LPutBits(bw, palette_size - 1, 8); - for (i = palette_size - 1; i >= 1; --i) { - tmp_palette[i] = VP8LSubPixels(palette[i], palette[i - 1]); - } - tmp_palette[0] = palette[0]; - return EncodeImageNoHuffman(bw, tmp_palette, &enc->hash_chain_, - &enc->refs_[0], &enc->refs_[1], palette_size, 1, - 20 /* quality */, low_effort); -} - -// ----------------------------------------------------------------------------- -// VP8LEncoder - -static VP8LEncoder* VP8LEncoderNew(const WebPConfig* const config, - const WebPPicture* const picture) { - VP8LEncoder* const enc = (VP8LEncoder*)WebPSafeCalloc(1ULL, sizeof(*enc)); - if (enc == NULL) { - WebPEncodingSetError(picture, VP8_ENC_ERROR_OUT_OF_MEMORY); - return NULL; - } - enc->config_ = config; - enc->pic_ = picture; - enc->argb_content_ = kEncoderNone; - - VP8LEncDspInit(); - - return enc; -} - -static void VP8LEncoderDelete(VP8LEncoder* enc) { - if (enc != NULL) { - int i; - VP8LHashChainClear(&enc->hash_chain_); - for (i = 0; i < 3; ++i) VP8LBackwardRefsClear(&enc->refs_[i]); - ClearTransformBuffer(enc); - WebPSafeFree(enc); - } -} - -// ----------------------------------------------------------------------------- -// Main call - -typedef struct { - const WebPConfig* config_; - const WebPPicture* picture_; - VP8LBitWriter* bw_; - VP8LEncoder* enc_; - int use_cache_; - CrunchConfig crunch_configs_[CRUNCH_CONFIGS_MAX]; - int num_crunch_configs_; - int red_and_blue_always_zero_; - WebPEncodingError err_; - WebPAuxStats* stats_; -} StreamEncodeContext; - -static int EncodeStreamHook(void* input, void* data2) { - StreamEncodeContext* const params = (StreamEncodeContext*)input; - const WebPConfig* const config = params->config_; - const WebPPicture* const picture = params->picture_; - VP8LBitWriter* const bw = params->bw_; - VP8LEncoder* const enc = params->enc_; - const int use_cache = params->use_cache_; - const CrunchConfig* const crunch_configs = params->crunch_configs_; - const int num_crunch_configs = params->num_crunch_configs_; - const int red_and_blue_always_zero = params->red_and_blue_always_zero_; -#if !defined(WEBP_DISABLE_STATS) - WebPAuxStats* const stats = params->stats_; -#endif - WebPEncodingError err = VP8_ENC_OK; - const int quality = (int)config->quality; - const int low_effort = (config->method == 0); -#if (WEBP_NEAR_LOSSLESS == 1) - const int width = picture->width; -#endif - const int height = picture->height; - const size_t byte_position = VP8LBitWriterNumBytes(bw); -#if (WEBP_NEAR_LOSSLESS == 1) - int use_near_lossless = 0; -#endif - int hdr_size = 0; - int data_size = 0; - int use_delta_palette = 0; - int idx; - size_t best_size = 0; - VP8LBitWriter bw_init = *bw, bw_best; - (void)data2; - - if (!VP8LBitWriterInit(&bw_best, 0) || - (num_crunch_configs > 1 && !VP8LBitWriterClone(bw, &bw_best))) { - err = VP8_ENC_ERROR_OUT_OF_MEMORY; - goto Error; - } - - for (idx = 0; idx < num_crunch_configs; ++idx) { - const int entropy_idx = crunch_configs[idx].entropy_idx_; - enc->use_palette_ = (entropy_idx == kPalette); - enc->use_subtract_green_ = - (entropy_idx == kSubGreen) || (entropy_idx == kSpatialSubGreen); - enc->use_predict_ = - (entropy_idx == kSpatial) || (entropy_idx == kSpatialSubGreen); - if (low_effort) { - enc->use_cross_color_ = 0; - } else { - enc->use_cross_color_ = red_and_blue_always_zero ? 0 : enc->use_predict_; - } - // Reset any parameter in the encoder that is set in the previous iteration. - enc->cache_bits_ = 0; - VP8LBackwardRefsClear(&enc->refs_[0]); - VP8LBackwardRefsClear(&enc->refs_[1]); - -#if (WEBP_NEAR_LOSSLESS == 1) - // Apply near-lossless preprocessing. - use_near_lossless = (config->near_lossless < 100) && !enc->use_palette_ && - !enc->use_predict_; - if (use_near_lossless) { - err = AllocateTransformBuffer(enc, width, height); - if (err != VP8_ENC_OK) goto Error; - if ((enc->argb_content_ != kEncoderNearLossless) && - !VP8ApplyNearLossless(picture, config->near_lossless, enc->argb_)) { - err = VP8_ENC_ERROR_OUT_OF_MEMORY; - goto Error; - } - enc->argb_content_ = kEncoderNearLossless; - } else { - enc->argb_content_ = kEncoderNone; - } -#else - enc->argb_content_ = kEncoderNone; -#endif - - // Encode palette - if (enc->use_palette_) { - err = EncodePalette(bw, low_effort, enc); - if (err != VP8_ENC_OK) goto Error; - err = MapImageFromPalette(enc, use_delta_palette); - if (err != VP8_ENC_OK) goto Error; - // If using a color cache, do not have it bigger than the number of - // colors. - if (use_cache && enc->palette_size_ < (1 << MAX_COLOR_CACHE_BITS)) { - enc->cache_bits_ = BitsLog2Floor(enc->palette_size_) + 1; - } - } - if (!use_delta_palette) { - // In case image is not packed. - if (enc->argb_content_ != kEncoderNearLossless && - enc->argb_content_ != kEncoderPalette) { - err = MakeInputImageCopy(enc); - if (err != VP8_ENC_OK) goto Error; - } - - // ----------------------------------------------------------------------- - // Apply transforms and write transform data. - - if (enc->use_subtract_green_) { - ApplySubtractGreen(enc, enc->current_width_, height, bw); - } - - if (enc->use_predict_) { - err = ApplyPredictFilter(enc, enc->current_width_, height, quality, - low_effort, enc->use_subtract_green_, bw); - if (err != VP8_ENC_OK) goto Error; - } - - if (enc->use_cross_color_) { - err = ApplyCrossColorFilter(enc, enc->current_width_, height, quality, - low_effort, bw); - if (err != VP8_ENC_OK) goto Error; - } - } - - VP8LPutBits(bw, !TRANSFORM_PRESENT, 1); // No more transforms. - - // ------------------------------------------------------------------------- - // Encode and write the transformed image. - err = EncodeImageInternal(bw, enc->argb_, &enc->hash_chain_, enc->refs_, - enc->current_width_, height, quality, low_effort, - use_cache, &crunch_configs[idx], - &enc->cache_bits_, enc->histo_bits_, - byte_position, &hdr_size, &data_size); - if (err != VP8_ENC_OK) goto Error; - - // If we are better than what we already have. - if (idx == 0 || VP8LBitWriterNumBytes(bw) < best_size) { - best_size = VP8LBitWriterNumBytes(bw); - // Store the BitWriter. - VP8LBitWriterSwap(bw, &bw_best); -#if !defined(WEBP_DISABLE_STATS) - // Update the stats. - if (stats != NULL) { - stats->lossless_features = 0; - if (enc->use_predict_) stats->lossless_features |= 1; - if (enc->use_cross_color_) stats->lossless_features |= 2; - if (enc->use_subtract_green_) stats->lossless_features |= 4; - if (enc->use_palette_) stats->lossless_features |= 8; - stats->histogram_bits = enc->histo_bits_; - stats->transform_bits = enc->transform_bits_; - stats->cache_bits = enc->cache_bits_; - stats->palette_size = enc->palette_size_; - stats->lossless_size = (int)(best_size - byte_position); - stats->lossless_hdr_size = hdr_size; - stats->lossless_data_size = data_size; - } -#endif - } - // Reset the bit writer for the following iteration if any. - if (num_crunch_configs > 1) VP8LBitWriterReset(&bw_init, bw); - } - VP8LBitWriterSwap(&bw_best, bw); - -Error: - VP8LBitWriterWipeOut(&bw_best); - params->err_ = err; - // The hook should return false in case of error. - return (err == VP8_ENC_OK); -} - -WebPEncodingError VP8LEncodeStream(const WebPConfig* const config, - const WebPPicture* const picture, - VP8LBitWriter* const bw_main, - int use_cache) { - WebPEncodingError err = VP8_ENC_OK; - VP8LEncoder* const enc_main = VP8LEncoderNew(config, picture); - VP8LEncoder* enc_side = NULL; - CrunchConfig crunch_configs[CRUNCH_CONFIGS_MAX]; - int num_crunch_configs_main, num_crunch_configs_side = 0; - int idx; - int red_and_blue_always_zero = 0; - WebPWorker worker_main, worker_side; - StreamEncodeContext params_main, params_side; - // The main thread uses picture->stats, the side thread uses stats_side. - WebPAuxStats stats_side; - VP8LBitWriter bw_side; - const WebPWorkerInterface* const worker_interface = WebPGetWorkerInterface(); - int ok_main; - - // Analyze image (entropy, num_palettes etc) - if (enc_main == NULL || - !EncoderAnalyze(enc_main, crunch_configs, &num_crunch_configs_main, - &red_and_blue_always_zero) || - !EncoderInit(enc_main) || !VP8LBitWriterInit(&bw_side, 0)) { - err = VP8_ENC_ERROR_OUT_OF_MEMORY; - goto Error; - } - - // Split the configs between the main and side threads (if any). - if (config->thread_level > 0) { - num_crunch_configs_side = num_crunch_configs_main / 2; - for (idx = 0; idx < num_crunch_configs_side; ++idx) { - params_side.crunch_configs_[idx] = - crunch_configs[num_crunch_configs_main - num_crunch_configs_side + - idx]; - } - params_side.num_crunch_configs_ = num_crunch_configs_side; - } - num_crunch_configs_main -= num_crunch_configs_side; - for (idx = 0; idx < num_crunch_configs_main; ++idx) { - params_main.crunch_configs_[idx] = crunch_configs[idx]; - } - params_main.num_crunch_configs_ = num_crunch_configs_main; - - // Fill in the parameters for the thread workers. - { - const int params_size = (num_crunch_configs_side > 0) ? 2 : 1; - for (idx = 0; idx < params_size; ++idx) { - // Create the parameters for each worker. - WebPWorker* const worker = (idx == 0) ? &worker_main : &worker_side; - StreamEncodeContext* const param = - (idx == 0) ? ¶ms_main : ¶ms_side; - param->config_ = config; - param->picture_ = picture; - param->use_cache_ = use_cache; - param->red_and_blue_always_zero_ = red_and_blue_always_zero; - if (idx == 0) { - param->stats_ = picture->stats; - param->bw_ = bw_main; - param->enc_ = enc_main; - } else { - param->stats_ = (picture->stats == NULL) ? NULL : &stats_side; - // Create a side bit writer. - if (!VP8LBitWriterClone(bw_main, &bw_side)) { - err = VP8_ENC_ERROR_OUT_OF_MEMORY; - goto Error; - } - param->bw_ = &bw_side; - // Create a side encoder. - enc_side = VP8LEncoderNew(config, picture); - if (enc_side == NULL || !EncoderInit(enc_side)) { - err = VP8_ENC_ERROR_OUT_OF_MEMORY; - goto Error; - } - // Copy the values that were computed for the main encoder. - enc_side->histo_bits_ = enc_main->histo_bits_; - enc_side->transform_bits_ = enc_main->transform_bits_; - enc_side->palette_size_ = enc_main->palette_size_; - memcpy(enc_side->palette_, enc_main->palette_, - sizeof(enc_main->palette_)); - param->enc_ = enc_side; - } - // Create the workers. - worker_interface->Init(worker); - worker->data1 = param; - worker->data2 = NULL; - worker->hook = EncodeStreamHook; - } - } - - // Start the second thread if needed. - if (num_crunch_configs_side != 0) { - if (!worker_interface->Reset(&worker_side)) { - err = VP8_ENC_ERROR_OUT_OF_MEMORY; - goto Error; - } -#if !defined(WEBP_DISABLE_STATS) - // This line is here and not in the param initialization above to remove a - // Clang static analyzer warning. - if (picture->stats != NULL) { - memcpy(&stats_side, picture->stats, sizeof(stats_side)); - } -#endif - // This line is only useful to remove a Clang static analyzer warning. - params_side.err_ = VP8_ENC_OK; - worker_interface->Launch(&worker_side); - } - // Execute the main thread. - worker_interface->Execute(&worker_main); - ok_main = worker_interface->Sync(&worker_main); - worker_interface->End(&worker_main); - if (num_crunch_configs_side != 0) { - // Wait for the second thread. - const int ok_side = worker_interface->Sync(&worker_side); - worker_interface->End(&worker_side); - if (!ok_main || !ok_side) { - err = ok_main ? params_side.err_ : params_main.err_; - goto Error; - } - if (VP8LBitWriterNumBytes(&bw_side) < VP8LBitWriterNumBytes(bw_main)) { - VP8LBitWriterSwap(bw_main, &bw_side); -#if !defined(WEBP_DISABLE_STATS) - if (picture->stats != NULL) { - memcpy(picture->stats, &stats_side, sizeof(*picture->stats)); - } -#endif - } - } else { - if (!ok_main) { - err = params_main.err_; - goto Error; - } - } - -Error: - VP8LBitWriterWipeOut(&bw_side); - VP8LEncoderDelete(enc_main); - VP8LEncoderDelete(enc_side); - return err; -} - -#undef CRUNCH_CONFIGS_MAX -#undef CRUNCH_CONFIGS_LZ77_MAX - -int VP8LEncodeImage(const WebPConfig* const config, - const WebPPicture* const picture) { - int width, height; - int has_alpha; - size_t coded_size; - int percent = 0; - int initial_size; - WebPEncodingError err = VP8_ENC_OK; - VP8LBitWriter bw; - - if (picture == NULL) return 0; - - if (config == NULL || picture->argb == NULL) { - err = VP8_ENC_ERROR_NULL_PARAMETER; - WebPEncodingSetError(picture, err); - return 0; - } - - width = picture->width; - height = picture->height; - // Initialize BitWriter with size corresponding to 16 bpp to photo images and - // 8 bpp for graphical images. - initial_size = (config->image_hint == WEBP_HINT_GRAPH) ? - width * height : width * height * 2; - if (!VP8LBitWriterInit(&bw, initial_size)) { - err = VP8_ENC_ERROR_OUT_OF_MEMORY; - goto Error; - } - - if (!WebPReportProgress(picture, 1, &percent)) { - UserAbort: - err = VP8_ENC_ERROR_USER_ABORT; - goto Error; - } - // Reset stats (for pure lossless coding) - if (picture->stats != NULL) { - WebPAuxStats* const stats = picture->stats; - memset(stats, 0, sizeof(*stats)); - stats->PSNR[0] = 99.f; - stats->PSNR[1] = 99.f; - stats->PSNR[2] = 99.f; - stats->PSNR[3] = 99.f; - stats->PSNR[4] = 99.f; - } - - // Write image size. - if (!WriteImageSize(picture, &bw)) { - err = VP8_ENC_ERROR_OUT_OF_MEMORY; - goto Error; - } - - has_alpha = WebPPictureHasTransparency(picture); - // Write the non-trivial Alpha flag and lossless version. - if (!WriteRealAlphaAndVersion(&bw, has_alpha)) { - err = VP8_ENC_ERROR_OUT_OF_MEMORY; - goto Error; - } - - if (!WebPReportProgress(picture, 5, &percent)) goto UserAbort; - - // Encode main image stream. - err = VP8LEncodeStream(config, picture, &bw, 1 /*use_cache*/); - if (err != VP8_ENC_OK) goto Error; - - if (!WebPReportProgress(picture, 90, &percent)) goto UserAbort; - - // Finish the RIFF chunk. - err = WriteImage(picture, &bw, &coded_size); - if (err != VP8_ENC_OK) goto Error; - - if (!WebPReportProgress(picture, 100, &percent)) goto UserAbort; - -#if !defined(WEBP_DISABLE_STATS) - // Save size. - if (picture->stats != NULL) { - picture->stats->coded_size += (int)coded_size; - picture->stats->lossless_size = (int)coded_size; - } -#endif - - if (picture->extra_info != NULL) { - const int mb_w = (width + 15) >> 4; - const int mb_h = (height + 15) >> 4; - memset(picture->extra_info, 0, mb_w * mb_h * sizeof(*picture->extra_info)); - } - - Error: - if (bw.error_) err = VP8_ENC_ERROR_OUT_OF_MEMORY; - VP8LBitWriterWipeOut(&bw); - if (err != VP8_ENC_OK) { - WebPEncodingSetError(picture, err); - return 0; - } - return 1; -} - -//------------------------------------------------------------------------------ diff --git a/Extended/libwebp/src/enc/vp8li_enc.h b/Extended/libwebp/src/enc/vp8li_enc.h deleted file mode 100644 index d2d0fc5..0000000 --- a/Extended/libwebp/src/enc/vp8li_enc.h +++ /dev/null @@ -1,118 +0,0 @@ -// Copyright 2012 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Lossless encoder: internal header. -// -// Author: Vikas Arora (vikaas.arora@gmail.com) - -#ifndef WEBP_ENC_VP8LI_ENC_H_ -#define WEBP_ENC_VP8LI_ENC_H_ - -#ifdef HAVE_CONFIG_H -#include "src/webp/config.h" -#endif -// Either WEBP_NEAR_LOSSLESS is defined as 0 in config.h when compiling to -// disable near-lossless, or it is enabled by default. -#ifndef WEBP_NEAR_LOSSLESS -#define WEBP_NEAR_LOSSLESS 1 -#endif - -#include "src/enc/backward_references_enc.h" -#include "src/enc/histogram_enc.h" -#include "src/utils/bit_writer_utils.h" -#include "src/webp/encode.h" -#include "src/webp/format_constants.h" - -#ifdef __cplusplus -extern "C" { -#endif - -// maximum value of transform_bits_ in VP8LEncoder. -#define MAX_TRANSFORM_BITS 6 - -typedef enum { - kEncoderNone = 0, - kEncoderARGB, - kEncoderNearLossless, - kEncoderPalette -} VP8LEncoderARGBContent; - -typedef struct { - const WebPConfig* config_; // user configuration and parameters - const WebPPicture* pic_; // input picture. - - uint32_t* argb_; // Transformed argb image data. - VP8LEncoderARGBContent argb_content_; // Content type of the argb buffer. - uint32_t* argb_scratch_; // Scratch memory for argb rows - // (used for prediction). - uint32_t* transform_data_; // Scratch memory for transform data. - uint32_t* transform_mem_; // Currently allocated memory. - size_t transform_mem_size_; // Currently allocated memory size. - - int current_width_; // Corresponds to packed image width. - - // Encoding parameters derived from quality parameter. - int histo_bits_; - int transform_bits_; // <= MAX_TRANSFORM_BITS. - int cache_bits_; // If equal to 0, don't use color cache. - - // Encoding parameters derived from image characteristics. - int use_cross_color_; - int use_subtract_green_; - int use_predict_; - int use_palette_; - int palette_size_; - uint32_t palette_[MAX_PALETTE_SIZE]; - - // Some 'scratch' (potentially large) objects. - struct VP8LBackwardRefs refs_[3]; // Backward Refs array for temporaries. - VP8LHashChain hash_chain_; // HashChain data for constructing - // backward references. -} VP8LEncoder; - -//------------------------------------------------------------------------------ -// internal functions. Not public. - -// Encodes the picture. -// Returns 0 if config or picture is NULL or picture doesn't have valid argb -// input. -int VP8LEncodeImage(const WebPConfig* const config, - const WebPPicture* const picture); - -// Encodes the main image stream using the supplied bit writer. -// If 'use_cache' is false, disables the use of color cache. -WebPEncodingError VP8LEncodeStream(const WebPConfig* const config, - const WebPPicture* const picture, - VP8LBitWriter* const bw, int use_cache); - -#if (WEBP_NEAR_LOSSLESS == 1) -// in near_lossless.c -// Near lossless preprocessing in RGB color-space. -int VP8ApplyNearLossless(const WebPPicture* const picture, int quality, - uint32_t* const argb_dst); -#endif - -//------------------------------------------------------------------------------ -// Image transforms in predictor.c. - -void VP8LResidualImage(int width, int height, int bits, int low_effort, - uint32_t* const argb, uint32_t* const argb_scratch, - uint32_t* const image, int near_lossless, int exact, - int used_subtract_green); - -void VP8LColorSpaceTransform(int width, int height, int bits, int quality, - uint32_t* const argb, uint32_t* image); - -//------------------------------------------------------------------------------ - -#ifdef __cplusplus -} // extern "C" -#endif - -#endif // WEBP_ENC_VP8LI_ENC_H_ diff --git a/Extended/libwebp/src/enc/webp_enc.c b/Extended/libwebp/src/enc/webp_enc.c deleted file mode 100644 index 9f4b10c..0000000 --- a/Extended/libwebp/src/enc/webp_enc.c +++ /dev/null @@ -1,410 +0,0 @@ -// Copyright 2011 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// WebP encoder: main entry point -// -// Author: Skal (pascal.massimino@gmail.com) - -#include -#include -#include -#include - -#include "src/enc/cost_enc.h" -#include "src/enc/vp8i_enc.h" -#include "src/enc/vp8li_enc.h" -#include "src/utils/utils.h" - -// #define PRINT_MEMORY_INFO - -#ifdef PRINT_MEMORY_INFO -#include -#endif - -//------------------------------------------------------------------------------ - -int WebPGetEncoderVersion(void) { - return (ENC_MAJ_VERSION << 16) | (ENC_MIN_VERSION << 8) | ENC_REV_VERSION; -} - -//------------------------------------------------------------------------------ -// VP8Encoder -//------------------------------------------------------------------------------ - -static void ResetSegmentHeader(VP8Encoder* const enc) { - VP8EncSegmentHeader* const hdr = &enc->segment_hdr_; - hdr->num_segments_ = enc->config_->segments; - hdr->update_map_ = (hdr->num_segments_ > 1); - hdr->size_ = 0; -} - -static void ResetFilterHeader(VP8Encoder* const enc) { - VP8EncFilterHeader* const hdr = &enc->filter_hdr_; - hdr->simple_ = 1; - hdr->level_ = 0; - hdr->sharpness_ = 0; - hdr->i4x4_lf_delta_ = 0; -} - -static void ResetBoundaryPredictions(VP8Encoder* const enc) { - // init boundary values once for all - // Note: actually, initializing the preds_[] is only needed for intra4. - int i; - uint8_t* const top = enc->preds_ - enc->preds_w_; - uint8_t* const left = enc->preds_ - 1; - for (i = -1; i < 4 * enc->mb_w_; ++i) { - top[i] = B_DC_PRED; - } - for (i = 0; i < 4 * enc->mb_h_; ++i) { - left[i * enc->preds_w_] = B_DC_PRED; - } - enc->nz_[-1] = 0; // constant -} - -// Mapping from config->method_ to coding tools used. -//-------------------+---+---+---+---+---+---+---+ -// Method | 0 | 1 | 2 | 3 |(4)| 5 | 6 | -//-------------------+---+---+---+---+---+---+---+ -// fast probe | x | | | x | | | | -//-------------------+---+---+---+---+---+---+---+ -// dynamic proba | ~ | x | x | x | x | x | x | -//-------------------+---+---+---+---+---+---+---+ -// fast mode analysis|[x]|[x]| | | x | x | x | -//-------------------+---+---+---+---+---+---+---+ -// basic rd-opt | | | | x | x | x | x | -//-------------------+---+---+---+---+---+---+---+ -// disto-refine i4/16| x | x | x | | | | | -//-------------------+---+---+---+---+---+---+---+ -// disto-refine uv | | x | x | | | | | -//-------------------+---+---+---+---+---+---+---+ -// rd-opt i4/16 | | | ~ | x | x | x | x | -//-------------------+---+---+---+---+---+---+---+ -// token buffer (opt)| | | | x | x | x | x | -//-------------------+---+---+---+---+---+---+---+ -// Trellis | | | | | | x |Ful| -//-------------------+---+---+---+---+---+---+---+ -// full-SNS | | | | | x | x | x | -//-------------------+---+---+---+---+---+---+---+ - -static void MapConfigToTools(VP8Encoder* const enc) { - const WebPConfig* const config = enc->config_; - const int method = config->method; - const int limit = 100 - config->partition_limit; - enc->method_ = method; - enc->rd_opt_level_ = (method >= 6) ? RD_OPT_TRELLIS_ALL - : (method >= 5) ? RD_OPT_TRELLIS - : (method >= 3) ? RD_OPT_BASIC - : RD_OPT_NONE; - enc->max_i4_header_bits_ = - 256 * 16 * 16 * // upper bound: up to 16bit per 4x4 block - (limit * limit) / (100 * 100); // ... modulated with a quadratic curve. - - // partition0 = 512k max. - enc->mb_header_limit_ = - (score_t)256 * 510 * 8 * 1024 / (enc->mb_w_ * enc->mb_h_); - - enc->thread_level_ = config->thread_level; - - enc->do_search_ = (config->target_size > 0 || config->target_PSNR > 0); - if (!config->low_memory) { -#if !defined(DISABLE_TOKEN_BUFFER) - enc->use_tokens_ = (enc->rd_opt_level_ >= RD_OPT_BASIC); // need rd stats -#endif - if (enc->use_tokens_) { - enc->num_parts_ = 1; // doesn't work with multi-partition - } - } -} - -// Memory scaling with dimensions: -// memory (bytes) ~= 2.25 * w + 0.0625 * w * h -// -// Typical memory footprint (614x440 picture) -// encoder: 22111 -// info: 4368 -// preds: 17741 -// top samples: 1263 -// non-zero: 175 -// lf-stats: 0 -// total: 45658 -// Transient object sizes: -// VP8EncIterator: 3360 -// VP8ModeScore: 872 -// VP8SegmentInfo: 732 -// VP8EncProba: 18352 -// LFStats: 2048 -// Picture size (yuv): 419328 - -static VP8Encoder* InitVP8Encoder(const WebPConfig* const config, - WebPPicture* const picture) { - VP8Encoder* enc; - const int use_filter = - (config->filter_strength > 0) || (config->autofilter > 0); - const int mb_w = (picture->width + 15) >> 4; - const int mb_h = (picture->height + 15) >> 4; - const int preds_w = 4 * mb_w + 1; - const int preds_h = 4 * mb_h + 1; - const size_t preds_size = preds_w * preds_h * sizeof(*enc->preds_); - const int top_stride = mb_w * 16; - const size_t nz_size = (mb_w + 1) * sizeof(*enc->nz_) + WEBP_ALIGN_CST; - const size_t info_size = mb_w * mb_h * sizeof(*enc->mb_info_); - const size_t samples_size = - 2 * top_stride * sizeof(*enc->y_top_) // top-luma/u/v - + WEBP_ALIGN_CST; // align all - const size_t lf_stats_size = - config->autofilter ? sizeof(*enc->lf_stats_) + WEBP_ALIGN_CST : 0; - const size_t top_derr_size = - (config->quality <= ERROR_DIFFUSION_QUALITY || config->pass > 1) ? - mb_w * sizeof(*enc->top_derr_) : 0; - uint8_t* mem; - const uint64_t size = (uint64_t)sizeof(*enc) // main struct - + WEBP_ALIGN_CST // cache alignment - + info_size // modes info - + preds_size // prediction modes - + samples_size // top/left samples - + top_derr_size // top diffusion error - + nz_size // coeff context bits - + lf_stats_size; // autofilter stats - -#ifdef PRINT_MEMORY_INFO - printf("===================================\n"); - printf("Memory used:\n" - " encoder: %ld\n" - " info: %ld\n" - " preds: %ld\n" - " top samples: %ld\n" - " top diffusion: %ld\n" - " non-zero: %ld\n" - " lf-stats: %ld\n" - " total: %ld\n", - sizeof(*enc) + WEBP_ALIGN_CST, info_size, - preds_size, samples_size, top_derr_size, nz_size, lf_stats_size, size); - printf("Transient object sizes:\n" - " VP8EncIterator: %ld\n" - " VP8ModeScore: %ld\n" - " VP8SegmentInfo: %ld\n" - " VP8EncProba: %ld\n" - " LFStats: %ld\n", - sizeof(VP8EncIterator), sizeof(VP8ModeScore), - sizeof(VP8SegmentInfo), sizeof(VP8EncProba), - sizeof(LFStats)); - printf("Picture size (yuv): %ld\n", - mb_w * mb_h * 384 * sizeof(uint8_t)); - printf("===================================\n"); -#endif - mem = (uint8_t*)WebPSafeMalloc(size, sizeof(*mem)); - if (mem == NULL) { - WebPEncodingSetError(picture, VP8_ENC_ERROR_OUT_OF_MEMORY); - return NULL; - } - enc = (VP8Encoder*)mem; - mem = (uint8_t*)WEBP_ALIGN(mem + sizeof(*enc)); - memset(enc, 0, sizeof(*enc)); - enc->num_parts_ = 1 << config->partitions; - enc->mb_w_ = mb_w; - enc->mb_h_ = mb_h; - enc->preds_w_ = preds_w; - enc->mb_info_ = (VP8MBInfo*)mem; - mem += info_size; - enc->preds_ = mem + 1 + enc->preds_w_; - mem += preds_size; - enc->nz_ = 1 + (uint32_t*)WEBP_ALIGN(mem); - mem += nz_size; - enc->lf_stats_ = lf_stats_size ? (LFStats*)WEBP_ALIGN(mem) : NULL; - mem += lf_stats_size; - - // top samples (all 16-aligned) - mem = (uint8_t*)WEBP_ALIGN(mem); - enc->y_top_ = mem; - enc->uv_top_ = enc->y_top_ + top_stride; - mem += 2 * top_stride; - enc->top_derr_ = top_derr_size ? (DError*)mem : NULL; - mem += top_derr_size; - assert(mem <= (uint8_t*)enc + size); - - enc->config_ = config; - enc->profile_ = use_filter ? ((config->filter_type == 1) ? 0 : 1) : 2; - enc->pic_ = picture; - enc->percent_ = 0; - - MapConfigToTools(enc); - VP8EncDspInit(); - VP8DefaultProbas(enc); - ResetSegmentHeader(enc); - ResetFilterHeader(enc); - ResetBoundaryPredictions(enc); - VP8EncDspCostInit(); - VP8EncInitAlpha(enc); - - // lower quality means smaller output -> we modulate a little the page - // size based on quality. This is just a crude 1rst-order prediction. - { - const float scale = 1.f + config->quality * 5.f / 100.f; // in [1,6] - VP8TBufferInit(&enc->tokens_, (int)(mb_w * mb_h * 4 * scale)); - } - return enc; -} - -static int DeleteVP8Encoder(VP8Encoder* enc) { - int ok = 1; - if (enc != NULL) { - ok = VP8EncDeleteAlpha(enc); - VP8TBufferClear(&enc->tokens_); - WebPSafeFree(enc); - } - return ok; -} - -//------------------------------------------------------------------------------ - -#if !defined(WEBP_DISABLE_STATS) -static double GetPSNR(uint64_t err, uint64_t size) { - return (err > 0 && size > 0) ? 10. * log10(255. * 255. * size / err) : 99.; -} - -static void FinalizePSNR(const VP8Encoder* const enc) { - WebPAuxStats* stats = enc->pic_->stats; - const uint64_t size = enc->sse_count_; - const uint64_t* const sse = enc->sse_; - stats->PSNR[0] = (float)GetPSNR(sse[0], size); - stats->PSNR[1] = (float)GetPSNR(sse[1], size / 4); - stats->PSNR[2] = (float)GetPSNR(sse[2], size / 4); - stats->PSNR[3] = (float)GetPSNR(sse[0] + sse[1] + sse[2], size * 3 / 2); - stats->PSNR[4] = (float)GetPSNR(sse[3], size); -} -#endif // !defined(WEBP_DISABLE_STATS) - -static void StoreStats(VP8Encoder* const enc) { -#if !defined(WEBP_DISABLE_STATS) - WebPAuxStats* const stats = enc->pic_->stats; - if (stats != NULL) { - int i, s; - for (i = 0; i < NUM_MB_SEGMENTS; ++i) { - stats->segment_level[i] = enc->dqm_[i].fstrength_; - stats->segment_quant[i] = enc->dqm_[i].quant_; - for (s = 0; s <= 2; ++s) { - stats->residual_bytes[s][i] = enc->residual_bytes_[s][i]; - } - } - FinalizePSNR(enc); - stats->coded_size = enc->coded_size_; - for (i = 0; i < 3; ++i) { - stats->block_count[i] = enc->block_count_[i]; - } - } -#else // defined(WEBP_DISABLE_STATS) - WebPReportProgress(enc->pic_, 100, &enc->percent_); // done! -#endif // !defined(WEBP_DISABLE_STATS) -} - -int WebPEncodingSetError(const WebPPicture* const pic, - WebPEncodingError error) { - assert((int)error < VP8_ENC_ERROR_LAST); - assert((int)error >= VP8_ENC_OK); - ((WebPPicture*)pic)->error_code = error; - return 0; -} - -int WebPReportProgress(const WebPPicture* const pic, - int percent, int* const percent_store) { - if (percent_store != NULL && percent != *percent_store) { - *percent_store = percent; - if (pic->progress_hook && !pic->progress_hook(percent, pic)) { - // user abort requested - WebPEncodingSetError(pic, VP8_ENC_ERROR_USER_ABORT); - return 0; - } - } - return 1; // ok -} -//------------------------------------------------------------------------------ - -int WebPEncode(const WebPConfig* config, WebPPicture* pic) { - int ok = 0; - if (pic == NULL) return 0; - - WebPEncodingSetError(pic, VP8_ENC_OK); // all ok so far - if (config == NULL) { // bad params - return WebPEncodingSetError(pic, VP8_ENC_ERROR_NULL_PARAMETER); - } - if (!WebPValidateConfig(config)) { - return WebPEncodingSetError(pic, VP8_ENC_ERROR_INVALID_CONFIGURATION); - } - if (pic->width <= 0 || pic->height <= 0) { - return WebPEncodingSetError(pic, VP8_ENC_ERROR_BAD_DIMENSION); - } - if (pic->width > WEBP_MAX_DIMENSION || pic->height > WEBP_MAX_DIMENSION) { - return WebPEncodingSetError(pic, VP8_ENC_ERROR_BAD_DIMENSION); - } - - if (pic->stats != NULL) memset(pic->stats, 0, sizeof(*pic->stats)); - - if (!config->lossless) { - VP8Encoder* enc = NULL; - - if (pic->use_argb || pic->y == NULL || pic->u == NULL || pic->v == NULL) { - // Make sure we have YUVA samples. - if (config->use_sharp_yuv || (config->preprocessing & 4)) { - if (!WebPPictureSharpARGBToYUVA(pic)) { - return 0; - } - } else { - float dithering = 0.f; - if (config->preprocessing & 2) { - const float x = config->quality / 100.f; - const float x2 = x * x; - // slowly decreasing from max dithering at low quality (q->0) - // to 0.5 dithering amplitude at high quality (q->100) - dithering = 1.0f + (0.5f - 1.0f) * x2 * x2; - } - if (!WebPPictureARGBToYUVADithered(pic, WEBP_YUV420, dithering)) { - return 0; - } - } - } - - if (!config->exact) { - WebPCleanupTransparentArea(pic); - } - - enc = InitVP8Encoder(config, pic); - if (enc == NULL) return 0; // pic->error is already set. - // Note: each of the tasks below account for 20% in the progress report. - ok = VP8EncAnalyze(enc); - - // Analysis is done, proceed to actual coding. - ok = ok && VP8EncStartAlpha(enc); // possibly done in parallel - if (!enc->use_tokens_) { - ok = ok && VP8EncLoop(enc); - } else { - ok = ok && VP8EncTokenLoop(enc); - } - ok = ok && VP8EncFinishAlpha(enc); - - ok = ok && VP8EncWrite(enc); - StoreStats(enc); - if (!ok) { - VP8EncFreeBitWriters(enc); - } - ok &= DeleteVP8Encoder(enc); // must always be called, even if !ok - } else { - // Make sure we have ARGB samples. - if (pic->argb == NULL && !WebPPictureYUVAToARGB(pic)) { - return 0; - } - - if (!config->exact) { - WebPCleanupTransparentAreaLossless(pic); - } - - ok = VP8LEncodeImage(config, pic); // Sets pic->error in case of problem. - } - - return ok; -} diff --git a/Extended/libwebp/src/libwebp.pc b/Extended/libwebp/src/libwebp.pc deleted file mode 100644 index d9a1eea..0000000 --- a/Extended/libwebp/src/libwebp.pc +++ /dev/null @@ -1,11 +0,0 @@ -prefix=/usr/local -exec_prefix=${prefix} -libdir=${exec_prefix}/lib -includedir=${prefix}/include - -Name: libwebp -Description: Library for the WebP graphics format -Version: 1.1.0 -Cflags: -I${includedir} -Libs: -L${libdir} -lwebp -Libs.private: -lm -D_THREAD_SAFE -pthread diff --git a/Extended/libwebp/src/libwebp.pc.in b/Extended/libwebp/src/libwebp.pc.in deleted file mode 100644 index 733bb6d..0000000 --- a/Extended/libwebp/src/libwebp.pc.in +++ /dev/null @@ -1,11 +0,0 @@ -prefix=@prefix@ -exec_prefix=@exec_prefix@ -libdir=@libdir@ -includedir=@includedir@ - -Name: libwebp -Description: Library for the WebP graphics format -Version: @PACKAGE_VERSION@ -Cflags: -I${includedir} -Libs: -L${libdir} -lwebp -Libs.private: -lm @PTHREAD_CFLAGS@ @PTHREAD_LIBS@ diff --git a/Extended/libwebp/src/libwebp.rc b/Extended/libwebp/src/libwebp.rc deleted file mode 100644 index 78dccc9..0000000 --- a/Extended/libwebp/src/libwebp.rc +++ /dev/null @@ -1,41 +0,0 @@ -#define APSTUDIO_READONLY_SYMBOLS -#include "winres.h" -#undef APSTUDIO_READONLY_SYMBOLS - -#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) -LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US - -VS_VERSION_INFO VERSIONINFO - FILEVERSION 1,0,1,0 - PRODUCTVERSION 1,0,1,0 - FILEFLAGSMASK 0x3fL -#ifdef _DEBUG - FILEFLAGS 0x1L -#else - FILEFLAGS 0x0L -#endif - FILEOS 0x40004L - FILETYPE 0x2L - FILESUBTYPE 0x0L -BEGIN - BLOCK "StringFileInfo" - BEGIN - BLOCK "040904b0" - BEGIN - VALUE "CompanyName", "Google, Inc." - VALUE "FileDescription", "libwebp DLL" - VALUE "FileVersion", "1.1.0" - VALUE "InternalName", "libwebp.dll" - VALUE "LegalCopyright", "Copyright (C) 2019" - VALUE "OriginalFilename", "libwebp.dll" - VALUE "ProductName", "WebP Image Codec" - VALUE "ProductVersion", "1.1.0" - END - END - BLOCK "VarFileInfo" - BEGIN - VALUE "Translation", 0x409, 1200 - END -END - -#endif // English (United States) resources diff --git a/Extended/libwebp/src/libwebpdecoder.pc b/Extended/libwebp/src/libwebpdecoder.pc deleted file mode 100644 index 71269d7..0000000 --- a/Extended/libwebp/src/libwebpdecoder.pc +++ /dev/null @@ -1,11 +0,0 @@ -prefix=/usr/local -exec_prefix=${prefix} -libdir=${exec_prefix}/lib -includedir=${prefix}/include - -Name: libwebpdecoder -Description: Library for the WebP graphics format (decode only) -Version: 1.1.0 -Cflags: -I${includedir} -Libs: -L${libdir} -lwebpdecoder -Libs.private: -lm -D_THREAD_SAFE -pthread diff --git a/Extended/libwebp/src/libwebpdecoder.pc.in b/Extended/libwebp/src/libwebpdecoder.pc.in deleted file mode 100644 index 3ef647a..0000000 --- a/Extended/libwebp/src/libwebpdecoder.pc.in +++ /dev/null @@ -1,11 +0,0 @@ -prefix=@prefix@ -exec_prefix=@exec_prefix@ -libdir=@libdir@ -includedir=@includedir@ - -Name: libwebpdecoder -Description: Library for the WebP graphics format (decode only) -Version: @PACKAGE_VERSION@ -Cflags: -I${includedir} -Libs: -L${libdir} -lwebpdecoder -Libs.private: -lm @PTHREAD_CFLAGS@ @PTHREAD_LIBS@ diff --git a/Extended/libwebp/src/libwebpdecoder.rc b/Extended/libwebp/src/libwebpdecoder.rc deleted file mode 100644 index bf0cffd..0000000 --- a/Extended/libwebp/src/libwebpdecoder.rc +++ /dev/null @@ -1,41 +0,0 @@ -#define APSTUDIO_READONLY_SYMBOLS -#include "winres.h" -#undef APSTUDIO_READONLY_SYMBOLS - -#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) -LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US - -VS_VERSION_INFO VERSIONINFO - FILEVERSION 1,0,1,0 - PRODUCTVERSION 1,0,1,0 - FILEFLAGSMASK 0x3fL -#ifdef _DEBUG - FILEFLAGS 0x1L -#else - FILEFLAGS 0x0L -#endif - FILEOS 0x40004L - FILETYPE 0x2L - FILESUBTYPE 0x0L -BEGIN - BLOCK "StringFileInfo" - BEGIN - BLOCK "040904b0" - BEGIN - VALUE "CompanyName", "Google, Inc." - VALUE "FileDescription", "libwebpdecoder DLL" - VALUE "FileVersion", "1.1.0" - VALUE "InternalName", "libwebpdecoder.dll" - VALUE "LegalCopyright", "Copyright (C) 2019" - VALUE "OriginalFilename", "libwebpdecoder.dll" - VALUE "ProductName", "WebP Image Decoder" - VALUE "ProductVersion", "1.1.0" - END - END - BLOCK "VarFileInfo" - BEGIN - VALUE "Translation", 0x409, 1200 - END -END - -#endif // English (United States) resources diff --git a/Extended/libwebp/src/mux/.deps/anim_encode.Plo b/Extended/libwebp/src/mux/.deps/anim_encode.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/mux/.deps/anim_encode.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/mux/.deps/muxedit.Plo b/Extended/libwebp/src/mux/.deps/muxedit.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/mux/.deps/muxedit.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/mux/.deps/muxinternal.Plo b/Extended/libwebp/src/mux/.deps/muxinternal.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/mux/.deps/muxinternal.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/mux/.deps/muxread.Plo b/Extended/libwebp/src/mux/.deps/muxread.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/mux/.deps/muxread.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/mux/Makefile b/Extended/libwebp/src/mux/Makefile deleted file mode 100644 index 394fcc3..0000000 --- a/Extended/libwebp/src/mux/Makefile +++ /dev/null @@ -1,755 +0,0 @@ -# Makefile.in generated by automake 1.16.1 from Makefile.am. -# src/mux/Makefile. Generated from Makefile.in by configure. - -# Copyright (C) 1994-2018 Free Software Foundation, Inc. - -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - - - - - - -am__is_gnu_make = { \ - if test -z '$(MAKELEVEL)'; then \ - false; \ - elif test -n '$(MAKE_HOST)'; then \ - true; \ - elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ - true; \ - else \ - false; \ - fi; \ -} -am__make_running_with_option = \ - case $${target_option-} in \ - ?) ;; \ - *) echo "am__make_running_with_option: internal error: invalid" \ - "target option '$${target_option-}' specified" >&2; \ - exit 1;; \ - esac; \ - has_opt=no; \ - sane_makeflags=$$MAKEFLAGS; \ - if $(am__is_gnu_make); then \ - sane_makeflags=$$MFLAGS; \ - else \ - case $$MAKEFLAGS in \ - *\\[\ \ ]*) \ - bs=\\; \ - sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ - | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ - esac; \ - fi; \ - skip_next=no; \ - strip_trailopt () \ - { \ - flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ - }; \ - for flg in $$sane_makeflags; do \ - test $$skip_next = yes && { skip_next=no; continue; }; \ - case $$flg in \ - *=*|--*) continue;; \ - -*I) strip_trailopt 'I'; skip_next=yes;; \ - -*I?*) strip_trailopt 'I';; \ - -*O) strip_trailopt 'O'; skip_next=yes;; \ - -*O?*) strip_trailopt 'O';; \ - -*l) strip_trailopt 'l'; skip_next=yes;; \ - -*l?*) strip_trailopt 'l';; \ - -[dEDm]) skip_next=yes;; \ - -[JT]) skip_next=yes;; \ - esac; \ - case $$flg in \ - *$$target_option*) has_opt=yes; break;; \ - esac; \ - done; \ - test $$has_opt = yes -am__make_dryrun = (target_option=n; $(am__make_running_with_option)) -am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) -pkgdatadir = $(datadir)/libwebp -pkgincludedir = $(includedir)/libwebp -pkglibdir = $(libdir)/libwebp -pkglibexecdir = $(libexecdir)/libwebp -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = x86_64-apple-darwin19.6.0 -host_triplet = x86_64-apple-darwin19.6.0 -subdir = src/mux -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pthread.m4 \ - $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ - $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ - $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -DIST_COMMON = $(srcdir)/Makefile.am $(libwebpmuxinclude_HEADERS) \ - $(noinst_HEADERS) $(am__DIST_COMMON) -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = $(top_builddir)/src/webp/config.h -CONFIG_CLEAN_FILES = libwebpmux.pc -CONFIG_CLEAN_VPATH_FILES = -am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; -am__vpath_adj = case $$p in \ - $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ - *) f=$$p;; \ - esac; -am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; -am__install_max = 40 -am__nobase_strip_setup = \ - srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` -am__nobase_strip = \ - for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" -am__nobase_list = $(am__nobase_strip_setup); \ - for p in $$list; do echo "$$p $$p"; done | \ - sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ - $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ - if (++n[$$2] == $(am__install_max)) \ - { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ - END { for (dir in files) print dir, files[dir] }' -am__base_list = \ - sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ - sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' -am__uninstall_files_from_dir = { \ - test -z "$$files" \ - || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ - || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ - $(am__cd) "$$dir" && rm -f $$files; }; \ - } -am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(pkgconfigdir)" \ - "$(DESTDIR)$(libwebpmuxincludedir)" -LTLIBRARIES = $(lib_LTLIBRARIES) -libwebpmux_la_DEPENDENCIES = ../libwebp.la -am_libwebpmux_la_OBJECTS = anim_encode.lo muxedit.lo muxinternal.lo \ - muxread.lo -libwebpmux_la_OBJECTS = $(am_libwebpmux_la_OBJECTS) -AM_V_lt = $(am__v_lt_$(V)) -am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) -am__v_lt_0 = --silent -am__v_lt_1 = -libwebpmux_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ - $(libwebpmux_la_LDFLAGS) $(LDFLAGS) -o $@ -AM_V_P = $(am__v_P_$(V)) -am__v_P_ = $(am__v_P_$(AM_DEFAULT_VERBOSITY)) -am__v_P_0 = false -am__v_P_1 = : -AM_V_GEN = $(am__v_GEN_$(V)) -am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) -am__v_GEN_0 = @echo " GEN " $@; -am__v_GEN_1 = -AM_V_at = $(am__v_at_$(V)) -am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) -am__v_at_0 = @ -am__v_at_1 = -DEFAULT_INCLUDES = -I. -I$(top_builddir)/src/webp -depcomp = $(SHELL) $(top_srcdir)/depcomp -am__maybe_remake_depfiles = depfiles -am__depfiles_remade = ./$(DEPDIR)/anim_encode.Plo \ - ./$(DEPDIR)/muxedit.Plo ./$(DEPDIR)/muxinternal.Plo \ - ./$(DEPDIR)/muxread.Plo -am__mv = mv -f -COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ - $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CFLAGS) $(CFLAGS) -AM_V_CC = $(am__v_CC_$(V)) -am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) -am__v_CC_0 = @echo " CC " $@; -am__v_CC_1 = -CCLD = $(CC) -LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ - $(AM_LDFLAGS) $(LDFLAGS) -o $@ -AM_V_CCLD = $(am__v_CCLD_$(V)) -am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) -am__v_CCLD_0 = @echo " CCLD " $@; -am__v_CCLD_1 = -SOURCES = $(libwebpmux_la_SOURCES) -DIST_SOURCES = $(libwebpmux_la_SOURCES) -am__can_run_installinfo = \ - case $$AM_UPDATE_INFO_DIR in \ - n|no|NO) false;; \ - *) (install-info --version) >/dev/null 2>&1;; \ - esac -DATA = $(pkgconfig_DATA) -HEADERS = $(libwebpmuxinclude_HEADERS) $(noinst_HEADERS) -am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) -# Read a list of newline-separated strings from the standard input, -# and print each of them once, without duplicates. Input order is -# *not* preserved. -am__uniquify_input = $(AWK) '\ - BEGIN { nonempty = 0; } \ - { items[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in items) print i; }; } \ -' -# Make sure the list of sources is unique. This is necessary because, -# e.g., the same source file might be shared among _SOURCES variables -# for different programs/libraries. -am__define_uniq_tagged_files = \ - list='$(am__tagged_files)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | $(am__uniquify_input)` -ETAGS = etags -CTAGS = ctags -am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/libwebpmux.pc.in \ - $(top_srcdir)/depcomp -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = ${SHELL} /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp/missing aclocal-1.16 -AMTAR = $${TAR-tar} -AM_CFLAGS = -fvisibility=hidden -Wall -Wconstant-conversion -Wdeclaration-after-statement -Wextra -Wfloat-conversion -Wformat -Wformat-nonliteral -Wformat -Wformat-security -Wmissing-declarations -Wmissing-prototypes -Wold-style-definition -Wparentheses-equality -Wshadow -Wshorten-64-to-32 -Wundef -Wunreachable-code -Wunused -Wvla -Wno-deprecated-declarations -AM_CPPFLAGS = -DNDEBUG -I$(top_builddir) -I$(top_srcdir) -AM_DEFAULT_VERBOSITY = 0 -AR = ar -AUTOCONF = ${SHELL} /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp/missing autoconf -AUTOHEADER = ${SHELL} /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp/missing autoheader -AUTOMAKE = ${SHELL} /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp/missing automake-1.16 -AWK = awk -CC = gcc -CCDEPMODE = depmode=gcc3 -CFLAGS = -g -O2 -D_THREAD_SAFE -pthread -CPP = gcc -E -CPPFLAGS = -CYGPATH_W = echo -DEFS = -DHAVE_CONFIG_H -DEPDIR = .deps -DLLTOOL = false -DSYMUTIL = dsymutil -DUMPBIN = -ECHO_C = \c -ECHO_N = -ECHO_T = -EGREP = /usr/bin/grep -E -EXEEXT = -FGREP = /usr/bin/grep -F -GIF_INCLUDES = -GIF_LIBS = -lgif -GL_INCLUDES = -GL_LIBS = -framework GLUT -framework OpenGL -GREP = /usr/bin/grep -INSTALL = /opt/twitter_mde/homebrew_minimal/mde_bin/ginstall -c -INSTALL_DATA = ${INSTALL} -m 644 -INSTALL_PROGRAM = ${INSTALL} -INSTALL_SCRIPT = ${INSTALL} -INSTALL_STRIP_PROGRAM = $(install_sh) -c -s -JPEG_INCLUDES = -DWEBP_HAVE_JPEG -JPEG_LIBS = -ljpeg -LD = /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld -LDFLAGS = -LIBOBJS = -LIBPNG_CONFIG = /opt/twitter_mde/bin/libpng-config -LIBS = -LIBSDL_CONFIG = -LIBTOOL = $(SHELL) $(top_builddir)/libtool -LIPO = lipo -LN_S = ln -s -LTLIBOBJS = -LT_SYS_LIBRARY_PATH = -MAKEINFO = ${SHELL} /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp/missing makeinfo -MANIFEST_TOOL = : -MKDIR_P = /opt/twitter_mde/homebrew_minimal/mde_bin/gmkdir -p -NEON_FLAGS = -NM = /usr/bin/nm -B -NMEDIT = nmedit -OBJDUMP = objdump -OBJEXT = o -OTOOL = otool -OTOOL64 = : -PACKAGE = libwebp -PACKAGE_BUGREPORT = https://bugs.chromium.org/p/webp -PACKAGE_NAME = libwebp -PACKAGE_STRING = libwebp 1.1.0 -PACKAGE_TARNAME = libwebp -PACKAGE_URL = http://developers.google.com/speed/webp -PACKAGE_VERSION = 1.1.0 -PATH_SEPARATOR = : -PNG_INCLUDES = -I/opt/twitter_mde/package/twitter_dev_homebrew/current/Cellar/libpng/1.6.34/include/libpng16 -DWEBP_HAVE_PNG -PNG_LIBS = -L/opt/twitter_mde/package/twitter_dev_homebrew/current/Cellar/libpng/1.6.34/lib -lpng16 -PTHREAD_CC = gcc -PTHREAD_CFLAGS = -D_THREAD_SAFE -pthread -PTHREAD_LIBS = -RANLIB = ranlib -SDL_INCLUDES = -SDL_LIBS = -SED = /usr/bin/sed -SET_MAKE = -SHELL = /bin/sh -SSE2_FLAGS = -msse2 -SSE41_FLAGS = -msse4.1 -STRIP = strip -TIFF_INCLUDES = -DWEBP_HAVE_TIFF -TIFF_LIBS = -ltiff -USE_SWAP_16BIT_CSP = -VERSION = 1.1.0 -abs_builddir = /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp/src/mux -abs_srcdir = /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp/src/mux -abs_top_builddir = /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp -abs_top_srcdir = /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp -ac_ct_AR = ar -ac_ct_CC = gcc -ac_ct_DUMPBIN = -am__include = include -am__leading_dot = . -am__quote = -am__tar = $${TAR-tar} chof - "$$tardir" -am__untar = $${TAR-tar} xf - -ax_pthread_config = -bindir = ${exec_prefix}/bin -build = x86_64-apple-darwin19.6.0 -build_alias = -build_cpu = x86_64 -build_os = darwin19.6.0 -build_vendor = apple -builddir = . -datadir = ${datarootdir} -datarootdir = ${prefix}/share -docdir = ${datarootdir}/doc/${PACKAGE_TARNAME} -dvidir = ${docdir} -exec_prefix = ${prefix} -host = x86_64-apple-darwin19.6.0 -host_alias = -host_cpu = x86_64 -host_os = darwin19.6.0 -host_vendor = apple -htmldir = ${docdir} -includedir = ${prefix}/include -infodir = ${datarootdir}/info -install_sh = ${SHELL} /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp/install-sh -libdir = ${exec_prefix}/lib -libexecdir = ${exec_prefix}/libexec -localedir = ${datarootdir}/locale -localstatedir = ${prefix}/var -mandir = ${datarootdir}/man -mkdir_p = $(MKDIR_P) -oldincludedir = /usr/include -pdfdir = ${docdir} -pkgconfigdir = ${libdir}/pkgconfig -prefix = /usr/local -program_transform_name = s,x,x, -psdir = ${docdir} -runstatedir = ${localstatedir}/run -sbindir = ${exec_prefix}/sbin -sharedstatedir = ${prefix}/com -srcdir = . -sysconfdir = ${prefix}/etc -target_alias = -top_build_prefix = ../../ -top_builddir = ../.. -top_srcdir = ../.. -lib_LTLIBRARIES = libwebpmux.la -libwebpmux_la_SOURCES = anim_encode.c animi.h muxedit.c muxi.h \ - muxinternal.c muxread.c -libwebpmuxinclude_HEADERS = ../webp/mux.h ../webp/mux_types.h \ - ../webp/types.h -noinst_HEADERS = ../webp/format_constants.h -libwebpmux_la_LIBADD = ../libwebp.la -libwebpmux_la_LDFLAGS = -no-undefined -version-info 3:5:0 -lm -libwebpmuxincludedir = $(includedir)/webp -pkgconfig_DATA = libwebpmux.pc -all: all-am - -.SUFFIXES: -.SUFFIXES: .c .lo .o .obj -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ - && { if test -f $@; then exit 0; else break; fi; }; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/mux/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --foreign src/mux/Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(am__aclocal_m4_deps): -libwebpmux.pc: $(top_builddir)/config.status $(srcdir)/libwebpmux.pc.in - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ - -install-libLTLIBRARIES: $(lib_LTLIBRARIES) - @$(NORMAL_INSTALL) - @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ - list2=; for p in $$list; do \ - if test -f $$p; then \ - list2="$$list2 $$p"; \ - else :; fi; \ - done; \ - test -z "$$list2" || { \ - echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ - $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ - echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ - $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ - } - -uninstall-libLTLIBRARIES: - @$(NORMAL_UNINSTALL) - @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ - for p in $$list; do \ - $(am__strip_dir) \ - echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ - $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ - done - -clean-libLTLIBRARIES: - -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) - @list='$(lib_LTLIBRARIES)'; \ - locs=`for p in $$list; do echo $$p; done | \ - sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ - sort -u`; \ - test -z "$$locs" || { \ - echo rm -f $${locs}; \ - rm -f $${locs}; \ - } - -libwebpmux.la: $(libwebpmux_la_OBJECTS) $(libwebpmux_la_DEPENDENCIES) $(EXTRA_libwebpmux_la_DEPENDENCIES) - $(AM_V_CCLD)$(libwebpmux_la_LINK) -rpath $(libdir) $(libwebpmux_la_OBJECTS) $(libwebpmux_la_LIBADD) $(LIBS) - -mostlyclean-compile: - -rm -f *.$(OBJEXT) - -distclean-compile: - -rm -f *.tab.c - -include ./$(DEPDIR)/anim_encode.Plo # am--include-marker -include ./$(DEPDIR)/muxedit.Plo # am--include-marker -include ./$(DEPDIR)/muxinternal.Plo # am--include-marker -include ./$(DEPDIR)/muxread.Plo # am--include-marker - -$(am__depfiles_remade): - @$(MKDIR_P) $(@D) - @echo '# dummy' >$@-t && $(am__mv) $@-t $@ - -am--depfiles: $(am__depfiles_remade) - -.c.o: - $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ - $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ - $(am__mv) $$depbase.Tpo $$depbase.Po -# $(AM_V_CC)source='$<' object='$@' libtool=no \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(COMPILE) -c -o $@ $< - -.c.obj: - $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ - $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ - $(am__mv) $$depbase.Tpo $$depbase.Po -# $(AM_V_CC)source='$<' object='$@' libtool=no \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` - -.c.lo: - $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ - $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ - $(am__mv) $$depbase.Tpo $$depbase.Plo -# $(AM_V_CC)source='$<' object='$@' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LTCOMPILE) -c -o $@ $< - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs -install-pkgconfigDATA: $(pkgconfig_DATA) - @$(NORMAL_INSTALL) - @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ - if test -n "$$list"; then \ - echo " $(MKDIR_P) '$(DESTDIR)$(pkgconfigdir)'"; \ - $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)" || exit 1; \ - fi; \ - for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - echo "$$d$$p"; \ - done | $(am__base_list) | \ - while read files; do \ - echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgconfigdir)'"; \ - $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \ - done - -uninstall-pkgconfigDATA: - @$(NORMAL_UNINSTALL) - @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ - files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ - dir='$(DESTDIR)$(pkgconfigdir)'; $(am__uninstall_files_from_dir) -install-libwebpmuxincludeHEADERS: $(libwebpmuxinclude_HEADERS) - @$(NORMAL_INSTALL) - @list='$(libwebpmuxinclude_HEADERS)'; test -n "$(libwebpmuxincludedir)" || list=; \ - if test -n "$$list"; then \ - echo " $(MKDIR_P) '$(DESTDIR)$(libwebpmuxincludedir)'"; \ - $(MKDIR_P) "$(DESTDIR)$(libwebpmuxincludedir)" || exit 1; \ - fi; \ - for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - echo "$$d$$p"; \ - done | $(am__base_list) | \ - while read files; do \ - echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(libwebpmuxincludedir)'"; \ - $(INSTALL_HEADER) $$files "$(DESTDIR)$(libwebpmuxincludedir)" || exit $$?; \ - done - -uninstall-libwebpmuxincludeHEADERS: - @$(NORMAL_UNINSTALL) - @list='$(libwebpmuxinclude_HEADERS)'; test -n "$(libwebpmuxincludedir)" || list=; \ - files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ - dir='$(DESTDIR)$(libwebpmuxincludedir)'; $(am__uninstall_files_from_dir) - -ID: $(am__tagged_files) - $(am__define_uniq_tagged_files); mkid -fID $$unique -tags: tags-am -TAGS: tags - -tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) - set x; \ - here=`pwd`; \ - $(am__define_uniq_tagged_files); \ - shift; \ - if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ - test -n "$$unique" || unique=$$empty_fix; \ - if test $$# -gt 0; then \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - "$$@" $$unique; \ - else \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$unique; \ - fi; \ - fi -ctags: ctags-am - -CTAGS: ctags -ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) - $(am__define_uniq_tagged_files); \ - test -z "$(CTAGS_ARGS)$$unique" \ - || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$unique - -GTAGS: - here=`$(am__cd) $(top_builddir) && pwd` \ - && $(am__cd) $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) "$$here" -cscopelist: cscopelist-am - -cscopelist-am: $(am__tagged_files) - list='$(am__tagged_files)'; \ - case "$(srcdir)" in \ - [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ - *) sdir=$(subdir)/$(srcdir) ;; \ - esac; \ - for i in $$list; do \ - if test -f "$$i"; then \ - echo "$(subdir)/$$i"; \ - else \ - echo "$$sdir/$$i"; \ - fi; \ - done >> $(top_builddir)/cscope.files - -distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - -distdir: $(BUILT_SOURCES) - $(MAKE) $(AM_MAKEFLAGS) distdir-am - -distdir-am: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - list='$(DISTFILES)'; \ - dist_files=`for file in $$list; do echo $$file; done | \ - sed -e "s|^$$srcdirstrip/||;t" \ - -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ - case $$dist_files in \ - */*) $(MKDIR_P) `echo "$$dist_files" | \ - sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ - sort -u` ;; \ - esac; \ - for file in $$dist_files; do \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - if test -d $$d/$$file; then \ - dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test -d "$(distdir)/$$file"; then \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ - else \ - test -f "$(distdir)/$$file" \ - || cp -p $$d/$$file "$(distdir)/$$file" \ - || exit 1; \ - fi; \ - done -check-am: all-am -check: check-am -all-am: Makefile $(LTLIBRARIES) $(DATA) $(HEADERS) -installdirs: - for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(pkgconfigdir)" "$(DESTDIR)$(libwebpmuxincludedir)"; do \ - test -z "$$dir" || $(MKDIR_P) "$$dir"; \ - done -install: install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-am -install-strip: - if test -z '$(STRIP)'; then \ - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - install; \ - else \ - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ - fi -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-am - -clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ - mostlyclean-am - -distclean: distclean-am - -rm -f ./$(DEPDIR)/anim_encode.Plo - -rm -f ./$(DEPDIR)/muxedit.Plo - -rm -f ./$(DEPDIR)/muxinternal.Plo - -rm -f ./$(DEPDIR)/muxread.Plo - -rm -f Makefile -distclean-am: clean-am distclean-compile distclean-generic \ - distclean-tags - -dvi: dvi-am - -dvi-am: - -html: html-am - -html-am: - -info: info-am - -info-am: - -install-data-am: install-libwebpmuxincludeHEADERS \ - install-pkgconfigDATA - -install-dvi: install-dvi-am - -install-dvi-am: - -install-exec-am: install-libLTLIBRARIES - -install-html: install-html-am - -install-html-am: - -install-info: install-info-am - -install-info-am: - -install-man: - -install-pdf: install-pdf-am - -install-pdf-am: - -install-ps: install-ps-am - -install-ps-am: - -installcheck-am: - -maintainer-clean: maintainer-clean-am - -rm -f ./$(DEPDIR)/anim_encode.Plo - -rm -f ./$(DEPDIR)/muxedit.Plo - -rm -f ./$(DEPDIR)/muxinternal.Plo - -rm -f ./$(DEPDIR)/muxread.Plo - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-compile mostlyclean-generic \ - mostlyclean-libtool - -pdf: pdf-am - -pdf-am: - -ps: ps-am - -ps-am: - -uninstall-am: uninstall-libLTLIBRARIES \ - uninstall-libwebpmuxincludeHEADERS uninstall-pkgconfigDATA - -.MAKE: install-am install-strip - -.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ - clean-generic clean-libLTLIBRARIES clean-libtool cscopelist-am \ - ctags ctags-am distclean distclean-compile distclean-generic \ - distclean-libtool distclean-tags distdir dvi dvi-am html \ - html-am info info-am install install-am install-data \ - install-data-am install-dvi install-dvi-am install-exec \ - install-exec-am install-html install-html-am install-info \ - install-info-am install-libLTLIBRARIES \ - install-libwebpmuxincludeHEADERS install-man install-pdf \ - install-pdf-am install-pkgconfigDATA install-ps install-ps-am \ - install-strip installcheck installcheck-am installdirs \ - maintainer-clean maintainer-clean-generic mostlyclean \ - mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ - pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \ - uninstall-libLTLIBRARIES uninstall-libwebpmuxincludeHEADERS \ - uninstall-pkgconfigDATA - -.PRECIOUS: Makefile - - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/Extended/libwebp/src/mux/Makefile.am b/Extended/libwebp/src/mux/Makefile.am deleted file mode 100644 index 5480296..0000000 --- a/Extended/libwebp/src/mux/Makefile.am +++ /dev/null @@ -1,22 +0,0 @@ -AM_CPPFLAGS += -I$(top_builddir) -I$(top_srcdir) -lib_LTLIBRARIES = libwebpmux.la - -libwebpmux_la_SOURCES = -libwebpmux_la_SOURCES += anim_encode.c -libwebpmux_la_SOURCES += animi.h -libwebpmux_la_SOURCES += muxedit.c -libwebpmux_la_SOURCES += muxi.h -libwebpmux_la_SOURCES += muxinternal.c -libwebpmux_la_SOURCES += muxread.c - -libwebpmuxinclude_HEADERS = -libwebpmuxinclude_HEADERS += ../webp/mux.h -libwebpmuxinclude_HEADERS += ../webp/mux_types.h -libwebpmuxinclude_HEADERS += ../webp/types.h -noinst_HEADERS = -noinst_HEADERS += ../webp/format_constants.h - -libwebpmux_la_LIBADD = ../libwebp.la -libwebpmux_la_LDFLAGS = -no-undefined -version-info 3:5:0 -lm -libwebpmuxincludedir = $(includedir)/webp -pkgconfig_DATA = libwebpmux.pc diff --git a/Extended/libwebp/src/mux/Makefile.in b/Extended/libwebp/src/mux/Makefile.in deleted file mode 100644 index 37f42f2..0000000 --- a/Extended/libwebp/src/mux/Makefile.in +++ /dev/null @@ -1,755 +0,0 @@ -# Makefile.in generated by automake 1.16.1 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994-2018 Free Software Foundation, Inc. - -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -@SET_MAKE@ - - - -VPATH = @srcdir@ -am__is_gnu_make = { \ - if test -z '$(MAKELEVEL)'; then \ - false; \ - elif test -n '$(MAKE_HOST)'; then \ - true; \ - elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ - true; \ - else \ - false; \ - fi; \ -} -am__make_running_with_option = \ - case $${target_option-} in \ - ?) ;; \ - *) echo "am__make_running_with_option: internal error: invalid" \ - "target option '$${target_option-}' specified" >&2; \ - exit 1;; \ - esac; \ - has_opt=no; \ - sane_makeflags=$$MAKEFLAGS; \ - if $(am__is_gnu_make); then \ - sane_makeflags=$$MFLAGS; \ - else \ - case $$MAKEFLAGS in \ - *\\[\ \ ]*) \ - bs=\\; \ - sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ - | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ - esac; \ - fi; \ - skip_next=no; \ - strip_trailopt () \ - { \ - flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ - }; \ - for flg in $$sane_makeflags; do \ - test $$skip_next = yes && { skip_next=no; continue; }; \ - case $$flg in \ - *=*|--*) continue;; \ - -*I) strip_trailopt 'I'; skip_next=yes;; \ - -*I?*) strip_trailopt 'I';; \ - -*O) strip_trailopt 'O'; skip_next=yes;; \ - -*O?*) strip_trailopt 'O';; \ - -*l) strip_trailopt 'l'; skip_next=yes;; \ - -*l?*) strip_trailopt 'l';; \ - -[dEDm]) skip_next=yes;; \ - -[JT]) skip_next=yes;; \ - esac; \ - case $$flg in \ - *$$target_option*) has_opt=yes; break;; \ - esac; \ - done; \ - test $$has_opt = yes -am__make_dryrun = (target_option=n; $(am__make_running_with_option)) -am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) -pkgdatadir = $(datadir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkglibexecdir = $(libexecdir)/@PACKAGE@ -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = @build@ -host_triplet = @host@ -subdir = src/mux -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pthread.m4 \ - $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ - $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ - $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -DIST_COMMON = $(srcdir)/Makefile.am $(libwebpmuxinclude_HEADERS) \ - $(noinst_HEADERS) $(am__DIST_COMMON) -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = $(top_builddir)/src/webp/config.h -CONFIG_CLEAN_FILES = libwebpmux.pc -CONFIG_CLEAN_VPATH_FILES = -am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; -am__vpath_adj = case $$p in \ - $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ - *) f=$$p;; \ - esac; -am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; -am__install_max = 40 -am__nobase_strip_setup = \ - srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` -am__nobase_strip = \ - for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" -am__nobase_list = $(am__nobase_strip_setup); \ - for p in $$list; do echo "$$p $$p"; done | \ - sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ - $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ - if (++n[$$2] == $(am__install_max)) \ - { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ - END { for (dir in files) print dir, files[dir] }' -am__base_list = \ - sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ - sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' -am__uninstall_files_from_dir = { \ - test -z "$$files" \ - || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ - || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ - $(am__cd) "$$dir" && rm -f $$files; }; \ - } -am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(pkgconfigdir)" \ - "$(DESTDIR)$(libwebpmuxincludedir)" -LTLIBRARIES = $(lib_LTLIBRARIES) -libwebpmux_la_DEPENDENCIES = ../libwebp.la -am_libwebpmux_la_OBJECTS = anim_encode.lo muxedit.lo muxinternal.lo \ - muxread.lo -libwebpmux_la_OBJECTS = $(am_libwebpmux_la_OBJECTS) -AM_V_lt = $(am__v_lt_@AM_V@) -am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) -am__v_lt_0 = --silent -am__v_lt_1 = -libwebpmux_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ - $(libwebpmux_la_LDFLAGS) $(LDFLAGS) -o $@ -AM_V_P = $(am__v_P_@AM_V@) -am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) -am__v_P_0 = false -am__v_P_1 = : -AM_V_GEN = $(am__v_GEN_@AM_V@) -am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) -am__v_GEN_0 = @echo " GEN " $@; -am__v_GEN_1 = -AM_V_at = $(am__v_at_@AM_V@) -am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) -am__v_at_0 = @ -am__v_at_1 = -DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/src/webp -depcomp = $(SHELL) $(top_srcdir)/depcomp -am__maybe_remake_depfiles = depfiles -am__depfiles_remade = ./$(DEPDIR)/anim_encode.Plo \ - ./$(DEPDIR)/muxedit.Plo ./$(DEPDIR)/muxinternal.Plo \ - ./$(DEPDIR)/muxread.Plo -am__mv = mv -f -COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ - $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CFLAGS) $(CFLAGS) -AM_V_CC = $(am__v_CC_@AM_V@) -am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) -am__v_CC_0 = @echo " CC " $@; -am__v_CC_1 = -CCLD = $(CC) -LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ - $(AM_LDFLAGS) $(LDFLAGS) -o $@ -AM_V_CCLD = $(am__v_CCLD_@AM_V@) -am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) -am__v_CCLD_0 = @echo " CCLD " $@; -am__v_CCLD_1 = -SOURCES = $(libwebpmux_la_SOURCES) -DIST_SOURCES = $(libwebpmux_la_SOURCES) -am__can_run_installinfo = \ - case $$AM_UPDATE_INFO_DIR in \ - n|no|NO) false;; \ - *) (install-info --version) >/dev/null 2>&1;; \ - esac -DATA = $(pkgconfig_DATA) -HEADERS = $(libwebpmuxinclude_HEADERS) $(noinst_HEADERS) -am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) -# Read a list of newline-separated strings from the standard input, -# and print each of them once, without duplicates. Input order is -# *not* preserved. -am__uniquify_input = $(AWK) '\ - BEGIN { nonempty = 0; } \ - { items[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in items) print i; }; } \ -' -# Make sure the list of sources is unique. This is necessary because, -# e.g., the same source file might be shared among _SOURCES variables -# for different programs/libraries. -am__define_uniq_tagged_files = \ - list='$(am__tagged_files)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | $(am__uniquify_input)` -ETAGS = etags -CTAGS = ctags -am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/libwebpmux.pc.in \ - $(top_srcdir)/depcomp -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = @ACLOCAL@ -AMTAR = @AMTAR@ -AM_CFLAGS = @AM_CFLAGS@ -AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_builddir) -I$(top_srcdir) -AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ -AR = @AR@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -CC = @CC@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -DLLTOOL = @DLLTOOL@ -DSYMUTIL = @DSYMUTIL@ -DUMPBIN = @DUMPBIN@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -FGREP = @FGREP@ -GIF_INCLUDES = @GIF_INCLUDES@ -GIF_LIBS = @GIF_LIBS@ -GL_INCLUDES = @GL_INCLUDES@ -GL_LIBS = @GL_LIBS@ -GREP = @GREP@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -JPEG_INCLUDES = @JPEG_INCLUDES@ -JPEG_LIBS = @JPEG_LIBS@ -LD = @LD@ -LDFLAGS = @LDFLAGS@ -LIBOBJS = @LIBOBJS@ -LIBPNG_CONFIG = @LIBPNG_CONFIG@ -LIBS = @LIBS@ -LIBSDL_CONFIG = @LIBSDL_CONFIG@ -LIBTOOL = @LIBTOOL@ -LIPO = @LIPO@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ -MAKEINFO = @MAKEINFO@ -MANIFEST_TOOL = @MANIFEST_TOOL@ -MKDIR_P = @MKDIR_P@ -NEON_FLAGS = @NEON_FLAGS@ -NM = @NM@ -NMEDIT = @NMEDIT@ -OBJDUMP = @OBJDUMP@ -OBJEXT = @OBJEXT@ -OTOOL = @OTOOL@ -OTOOL64 = @OTOOL64@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_URL = @PACKAGE_URL@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -PNG_INCLUDES = @PNG_INCLUDES@ -PNG_LIBS = @PNG_LIBS@ -PTHREAD_CC = @PTHREAD_CC@ -PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ -PTHREAD_LIBS = @PTHREAD_LIBS@ -RANLIB = @RANLIB@ -SDL_INCLUDES = @SDL_INCLUDES@ -SDL_LIBS = @SDL_LIBS@ -SED = @SED@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -SSE2_FLAGS = @SSE2_FLAGS@ -SSE41_FLAGS = @SSE41_FLAGS@ -STRIP = @STRIP@ -TIFF_INCLUDES = @TIFF_INCLUDES@ -TIFF_LIBS = @TIFF_LIBS@ -USE_SWAP_16BIT_CSP = @USE_SWAP_16BIT_CSP@ -VERSION = @VERSION@ -abs_builddir = @abs_builddir@ -abs_srcdir = @abs_srcdir@ -abs_top_builddir = @abs_top_builddir@ -abs_top_srcdir = @abs_top_srcdir@ -ac_ct_AR = @ac_ct_AR@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ -am__include = @am__include@ -am__leading_dot = @am__leading_dot@ -am__quote = @am__quote@ -am__tar = @am__tar@ -am__untar = @am__untar@ -ax_pthread_config = @ax_pthread_config@ -bindir = @bindir@ -build = @build@ -build_alias = @build_alias@ -build_cpu = @build_cpu@ -build_os = @build_os@ -build_vendor = @build_vendor@ -builddir = @builddir@ -datadir = @datadir@ -datarootdir = @datarootdir@ -docdir = @docdir@ -dvidir = @dvidir@ -exec_prefix = @exec_prefix@ -host = @host@ -host_alias = @host_alias@ -host_cpu = @host_cpu@ -host_os = @host_os@ -host_vendor = @host_vendor@ -htmldir = @htmldir@ -includedir = @includedir@ -infodir = @infodir@ -install_sh = @install_sh@ -libdir = @libdir@ -libexecdir = @libexecdir@ -localedir = @localedir@ -localstatedir = @localstatedir@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -oldincludedir = @oldincludedir@ -pdfdir = @pdfdir@ -pkgconfigdir = @pkgconfigdir@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -psdir = @psdir@ -runstatedir = @runstatedir@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -srcdir = @srcdir@ -sysconfdir = @sysconfdir@ -target_alias = @target_alias@ -top_build_prefix = @top_build_prefix@ -top_builddir = @top_builddir@ -top_srcdir = @top_srcdir@ -lib_LTLIBRARIES = libwebpmux.la -libwebpmux_la_SOURCES = anim_encode.c animi.h muxedit.c muxi.h \ - muxinternal.c muxread.c -libwebpmuxinclude_HEADERS = ../webp/mux.h ../webp/mux_types.h \ - ../webp/types.h -noinst_HEADERS = ../webp/format_constants.h -libwebpmux_la_LIBADD = ../libwebp.la -libwebpmux_la_LDFLAGS = -no-undefined -version-info 3:5:0 -lm -libwebpmuxincludedir = $(includedir)/webp -pkgconfig_DATA = libwebpmux.pc -all: all-am - -.SUFFIXES: -.SUFFIXES: .c .lo .o .obj -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ - && { if test -f $@; then exit 0; else break; fi; }; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/mux/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --foreign src/mux/Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(am__aclocal_m4_deps): -libwebpmux.pc: $(top_builddir)/config.status $(srcdir)/libwebpmux.pc.in - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ - -install-libLTLIBRARIES: $(lib_LTLIBRARIES) - @$(NORMAL_INSTALL) - @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ - list2=; for p in $$list; do \ - if test -f $$p; then \ - list2="$$list2 $$p"; \ - else :; fi; \ - done; \ - test -z "$$list2" || { \ - echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ - $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ - echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ - $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ - } - -uninstall-libLTLIBRARIES: - @$(NORMAL_UNINSTALL) - @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ - for p in $$list; do \ - $(am__strip_dir) \ - echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ - $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ - done - -clean-libLTLIBRARIES: - -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) - @list='$(lib_LTLIBRARIES)'; \ - locs=`for p in $$list; do echo $$p; done | \ - sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ - sort -u`; \ - test -z "$$locs" || { \ - echo rm -f $${locs}; \ - rm -f $${locs}; \ - } - -libwebpmux.la: $(libwebpmux_la_OBJECTS) $(libwebpmux_la_DEPENDENCIES) $(EXTRA_libwebpmux_la_DEPENDENCIES) - $(AM_V_CCLD)$(libwebpmux_la_LINK) -rpath $(libdir) $(libwebpmux_la_OBJECTS) $(libwebpmux_la_LIBADD) $(LIBS) - -mostlyclean-compile: - -rm -f *.$(OBJEXT) - -distclean-compile: - -rm -f *.tab.c - -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/anim_encode.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/muxedit.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/muxinternal.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/muxread.Plo@am__quote@ # am--include-marker - -$(am__depfiles_remade): - @$(MKDIR_P) $(@D) - @echo '# dummy' >$@-t && $(am__mv) $@-t $@ - -am--depfiles: $(am__depfiles_remade) - -.c.o: -@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ -@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ -@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< - -.c.obj: -@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ -@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ -@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` - -.c.lo: -@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ -@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ -@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs -install-pkgconfigDATA: $(pkgconfig_DATA) - @$(NORMAL_INSTALL) - @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ - if test -n "$$list"; then \ - echo " $(MKDIR_P) '$(DESTDIR)$(pkgconfigdir)'"; \ - $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)" || exit 1; \ - fi; \ - for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - echo "$$d$$p"; \ - done | $(am__base_list) | \ - while read files; do \ - echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgconfigdir)'"; \ - $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \ - done - -uninstall-pkgconfigDATA: - @$(NORMAL_UNINSTALL) - @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ - files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ - dir='$(DESTDIR)$(pkgconfigdir)'; $(am__uninstall_files_from_dir) -install-libwebpmuxincludeHEADERS: $(libwebpmuxinclude_HEADERS) - @$(NORMAL_INSTALL) - @list='$(libwebpmuxinclude_HEADERS)'; test -n "$(libwebpmuxincludedir)" || list=; \ - if test -n "$$list"; then \ - echo " $(MKDIR_P) '$(DESTDIR)$(libwebpmuxincludedir)'"; \ - $(MKDIR_P) "$(DESTDIR)$(libwebpmuxincludedir)" || exit 1; \ - fi; \ - for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - echo "$$d$$p"; \ - done | $(am__base_list) | \ - while read files; do \ - echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(libwebpmuxincludedir)'"; \ - $(INSTALL_HEADER) $$files "$(DESTDIR)$(libwebpmuxincludedir)" || exit $$?; \ - done - -uninstall-libwebpmuxincludeHEADERS: - @$(NORMAL_UNINSTALL) - @list='$(libwebpmuxinclude_HEADERS)'; test -n "$(libwebpmuxincludedir)" || list=; \ - files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ - dir='$(DESTDIR)$(libwebpmuxincludedir)'; $(am__uninstall_files_from_dir) - -ID: $(am__tagged_files) - $(am__define_uniq_tagged_files); mkid -fID $$unique -tags: tags-am -TAGS: tags - -tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) - set x; \ - here=`pwd`; \ - $(am__define_uniq_tagged_files); \ - shift; \ - if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ - test -n "$$unique" || unique=$$empty_fix; \ - if test $$# -gt 0; then \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - "$$@" $$unique; \ - else \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$unique; \ - fi; \ - fi -ctags: ctags-am - -CTAGS: ctags -ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) - $(am__define_uniq_tagged_files); \ - test -z "$(CTAGS_ARGS)$$unique" \ - || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$unique - -GTAGS: - here=`$(am__cd) $(top_builddir) && pwd` \ - && $(am__cd) $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) "$$here" -cscopelist: cscopelist-am - -cscopelist-am: $(am__tagged_files) - list='$(am__tagged_files)'; \ - case "$(srcdir)" in \ - [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ - *) sdir=$(subdir)/$(srcdir) ;; \ - esac; \ - for i in $$list; do \ - if test -f "$$i"; then \ - echo "$(subdir)/$$i"; \ - else \ - echo "$$sdir/$$i"; \ - fi; \ - done >> $(top_builddir)/cscope.files - -distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - -distdir: $(BUILT_SOURCES) - $(MAKE) $(AM_MAKEFLAGS) distdir-am - -distdir-am: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - list='$(DISTFILES)'; \ - dist_files=`for file in $$list; do echo $$file; done | \ - sed -e "s|^$$srcdirstrip/||;t" \ - -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ - case $$dist_files in \ - */*) $(MKDIR_P) `echo "$$dist_files" | \ - sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ - sort -u` ;; \ - esac; \ - for file in $$dist_files; do \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - if test -d $$d/$$file; then \ - dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test -d "$(distdir)/$$file"; then \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ - else \ - test -f "$(distdir)/$$file" \ - || cp -p $$d/$$file "$(distdir)/$$file" \ - || exit 1; \ - fi; \ - done -check-am: all-am -check: check-am -all-am: Makefile $(LTLIBRARIES) $(DATA) $(HEADERS) -installdirs: - for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(pkgconfigdir)" "$(DESTDIR)$(libwebpmuxincludedir)"; do \ - test -z "$$dir" || $(MKDIR_P) "$$dir"; \ - done -install: install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-am -install-strip: - if test -z '$(STRIP)'; then \ - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - install; \ - else \ - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ - fi -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-am - -clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ - mostlyclean-am - -distclean: distclean-am - -rm -f ./$(DEPDIR)/anim_encode.Plo - -rm -f ./$(DEPDIR)/muxedit.Plo - -rm -f ./$(DEPDIR)/muxinternal.Plo - -rm -f ./$(DEPDIR)/muxread.Plo - -rm -f Makefile -distclean-am: clean-am distclean-compile distclean-generic \ - distclean-tags - -dvi: dvi-am - -dvi-am: - -html: html-am - -html-am: - -info: info-am - -info-am: - -install-data-am: install-libwebpmuxincludeHEADERS \ - install-pkgconfigDATA - -install-dvi: install-dvi-am - -install-dvi-am: - -install-exec-am: install-libLTLIBRARIES - -install-html: install-html-am - -install-html-am: - -install-info: install-info-am - -install-info-am: - -install-man: - -install-pdf: install-pdf-am - -install-pdf-am: - -install-ps: install-ps-am - -install-ps-am: - -installcheck-am: - -maintainer-clean: maintainer-clean-am - -rm -f ./$(DEPDIR)/anim_encode.Plo - -rm -f ./$(DEPDIR)/muxedit.Plo - -rm -f ./$(DEPDIR)/muxinternal.Plo - -rm -f ./$(DEPDIR)/muxread.Plo - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-compile mostlyclean-generic \ - mostlyclean-libtool - -pdf: pdf-am - -pdf-am: - -ps: ps-am - -ps-am: - -uninstall-am: uninstall-libLTLIBRARIES \ - uninstall-libwebpmuxincludeHEADERS uninstall-pkgconfigDATA - -.MAKE: install-am install-strip - -.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ - clean-generic clean-libLTLIBRARIES clean-libtool cscopelist-am \ - ctags ctags-am distclean distclean-compile distclean-generic \ - distclean-libtool distclean-tags distdir dvi dvi-am html \ - html-am info info-am install install-am install-data \ - install-data-am install-dvi install-dvi-am install-exec \ - install-exec-am install-html install-html-am install-info \ - install-info-am install-libLTLIBRARIES \ - install-libwebpmuxincludeHEADERS install-man install-pdf \ - install-pdf-am install-pkgconfigDATA install-ps install-ps-am \ - install-strip installcheck installcheck-am installdirs \ - maintainer-clean maintainer-clean-generic mostlyclean \ - mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ - pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \ - uninstall-libLTLIBRARIES uninstall-libwebpmuxincludeHEADERS \ - uninstall-pkgconfigDATA - -.PRECIOUS: Makefile - - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/Extended/libwebp/src/mux/anim_encode.c b/Extended/libwebp/src/mux/anim_encode.c deleted file mode 100644 index 7be9906..0000000 --- a/Extended/libwebp/src/mux/anim_encode.c +++ /dev/null @@ -1,1581 +0,0 @@ -// Copyright 2014 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// AnimEncoder implementation. -// - -#include -#include -#include // for pow() -#include -#include // for abs() - -#include "src/mux/animi.h" -#include "src/utils/utils.h" -#include "src/webp/decode.h" -#include "src/webp/encode.h" -#include "src/webp/format_constants.h" -#include "src/webp/mux.h" - -#if defined(_MSC_VER) && _MSC_VER < 1900 -#define snprintf _snprintf -#endif - -#define ERROR_STR_MAX_LENGTH 100 - -//------------------------------------------------------------------------------ -// Internal structs. - -// Stores frame rectangle dimensions. -typedef struct { - int x_offset_, y_offset_, width_, height_; -} FrameRectangle; - -// Used to store two candidates of encoded data for an animation frame. One of -// the two will be chosen later. -typedef struct { - WebPMuxFrameInfo sub_frame_; // Encoded frame rectangle. - WebPMuxFrameInfo key_frame_; // Encoded frame if it is a key-frame. - int is_key_frame_; // True if 'key_frame' has been chosen. -} EncodedFrame; - -struct WebPAnimEncoder { - const int canvas_width_; // Canvas width. - const int canvas_height_; // Canvas height. - const WebPAnimEncoderOptions options_; // Global encoding options. - - FrameRectangle prev_rect_; // Previous WebP frame rectangle. - WebPConfig last_config_; // Cached in case a re-encode is needed. - WebPConfig last_config_reversed_; // If 'last_config_' uses lossless, then - // this config uses lossy and vice versa; - // only valid if 'options_.allow_mixed' - // is true. - - WebPPicture* curr_canvas_; // Only pointer; we don't own memory. - - // Canvas buffers. - WebPPicture curr_canvas_copy_; // Possibly modified current canvas. - int curr_canvas_copy_modified_; // True if pixels in 'curr_canvas_copy_' - // differ from those in 'curr_canvas_'. - - WebPPicture prev_canvas_; // Previous canvas. - WebPPicture prev_canvas_disposed_; // Previous canvas disposed to background. - - // Encoded data. - EncodedFrame* encoded_frames_; // Array of encoded frames. - size_t size_; // Number of allocated frames. - size_t start_; // Frame start index. - size_t count_; // Number of valid frames. - size_t flush_count_; // If >0, 'flush_count' frames starting from - // 'start' are ready to be added to mux. - - // key-frame related. - int64_t best_delta_; // min(canvas size - frame size) over the frames. - // Can be negative in certain cases due to - // transparent pixels in a frame. - int keyframe_; // Index of selected key-frame relative to 'start_'. - int count_since_key_frame_; // Frames seen since the last key-frame. - - int first_timestamp_; // Timestamp of the first frame. - int prev_timestamp_; // Timestamp of the last added frame. - int prev_candidate_undecided_; // True if it's not yet decided if previous - // frame would be a sub-frame or a key-frame. - - // Misc. - int is_first_frame_; // True if first frame is yet to be added/being added. - int got_null_frame_; // True if WebPAnimEncoderAdd() has already been called - // with a NULL frame. - - size_t in_frame_count_; // Number of input frames processed so far. - size_t out_frame_count_; // Number of frames added to mux so far. This may be - // different from 'in_frame_count_' due to merging. - - WebPMux* mux_; // Muxer to assemble the WebP bitstream. - char error_str_[ERROR_STR_MAX_LENGTH]; // Error string. Empty if no error. -}; - -// ----------------------------------------------------------------------------- -// Life of WebPAnimEncoder object. - -#define DELTA_INFINITY (1ULL << 32) -#define KEYFRAME_NONE (-1) - -// Reset the counters in the WebPAnimEncoder. -static void ResetCounters(WebPAnimEncoder* const enc) { - enc->start_ = 0; - enc->count_ = 0; - enc->flush_count_ = 0; - enc->best_delta_ = DELTA_INFINITY; - enc->keyframe_ = KEYFRAME_NONE; -} - -static void DisableKeyframes(WebPAnimEncoderOptions* const enc_options) { - enc_options->kmax = INT_MAX; - enc_options->kmin = enc_options->kmax - 1; -} - -#define MAX_CACHED_FRAMES 30 - -static void SanitizeEncoderOptions(WebPAnimEncoderOptions* const enc_options) { - int print_warning = enc_options->verbose; - - if (enc_options->minimize_size) { - DisableKeyframes(enc_options); - } - - if (enc_options->kmax == 1) { // All frames will be key-frames. - enc_options->kmin = 0; - enc_options->kmax = 0; - return; - } else if (enc_options->kmax <= 0) { - DisableKeyframes(enc_options); - print_warning = 0; - } - - if (enc_options->kmin >= enc_options->kmax) { - enc_options->kmin = enc_options->kmax - 1; - if (print_warning) { - fprintf(stderr, "WARNING: Setting kmin = %d, so that kmin < kmax.\n", - enc_options->kmin); - } - } else { - const int kmin_limit = enc_options->kmax / 2 + 1; - if (enc_options->kmin < kmin_limit && kmin_limit < enc_options->kmax) { - // This ensures that enc.keyframe + kmin >= kmax is always true. So, we - // can flush all the frames in the 'count_since_key_frame == kmax' case. - enc_options->kmin = kmin_limit; - if (print_warning) { - fprintf(stderr, - "WARNING: Setting kmin = %d, so that kmin >= kmax / 2 + 1.\n", - enc_options->kmin); - } - } - } - // Limit the max number of frames that are allocated. - if (enc_options->kmax - enc_options->kmin > MAX_CACHED_FRAMES) { - enc_options->kmin = enc_options->kmax - MAX_CACHED_FRAMES; - if (print_warning) { - fprintf(stderr, - "WARNING: Setting kmin = %d, so that kmax - kmin <= %d.\n", - enc_options->kmin, MAX_CACHED_FRAMES); - } - } - assert(enc_options->kmin < enc_options->kmax); -} - -#undef MAX_CACHED_FRAMES - -static void DefaultEncoderOptions(WebPAnimEncoderOptions* const enc_options) { - enc_options->anim_params.loop_count = 0; - enc_options->anim_params.bgcolor = 0xffffffff; // White. - enc_options->minimize_size = 0; - DisableKeyframes(enc_options); - enc_options->allow_mixed = 0; - enc_options->verbose = 0; -} - -int WebPAnimEncoderOptionsInitInternal(WebPAnimEncoderOptions* enc_options, - int abi_version) { - if (enc_options == NULL || - WEBP_ABI_IS_INCOMPATIBLE(abi_version, WEBP_MUX_ABI_VERSION)) { - return 0; - } - DefaultEncoderOptions(enc_options); - return 1; -} - -// This starting value is more fit to WebPCleanupTransparentAreaLossless(). -#define TRANSPARENT_COLOR 0x00000000 - -static void ClearRectangle(WebPPicture* const picture, - int left, int top, int width, int height) { - int j; - for (j = top; j < top + height; ++j) { - uint32_t* const dst = picture->argb + j * picture->argb_stride; - int i; - for (i = left; i < left + width; ++i) { - dst[i] = TRANSPARENT_COLOR; - } - } -} - -static void WebPUtilClearPic(WebPPicture* const picture, - const FrameRectangle* const rect) { - if (rect != NULL) { - ClearRectangle(picture, rect->x_offset_, rect->y_offset_, - rect->width_, rect->height_); - } else { - ClearRectangle(picture, 0, 0, picture->width, picture->height); - } -} - -static void MarkNoError(WebPAnimEncoder* const enc) { - enc->error_str_[0] = '\0'; // Empty string. -} - -static void MarkError(WebPAnimEncoder* const enc, const char* str) { - if (snprintf(enc->error_str_, ERROR_STR_MAX_LENGTH, "%s.", str) < 0) { - assert(0); // FIX ME! - } -} - -static void MarkError2(WebPAnimEncoder* const enc, - const char* str, int error_code) { - if (snprintf(enc->error_str_, ERROR_STR_MAX_LENGTH, "%s: %d.", str, - error_code) < 0) { - assert(0); // FIX ME! - } -} - -WebPAnimEncoder* WebPAnimEncoderNewInternal( - int width, int height, const WebPAnimEncoderOptions* enc_options, - int abi_version) { - WebPAnimEncoder* enc; - - if (WEBP_ABI_IS_INCOMPATIBLE(abi_version, WEBP_MUX_ABI_VERSION)) { - return NULL; - } - if (width <= 0 || height <= 0 || - (width * (uint64_t)height) >= MAX_IMAGE_AREA) { - return NULL; - } - - enc = (WebPAnimEncoder*)WebPSafeCalloc(1, sizeof(*enc)); - if (enc == NULL) return NULL; - // sanity inits, so we can call WebPAnimEncoderDelete(): - enc->encoded_frames_ = NULL; - enc->mux_ = NULL; - MarkNoError(enc); - - // Dimensions and options. - *(int*)&enc->canvas_width_ = width; - *(int*)&enc->canvas_height_ = height; - if (enc_options != NULL) { - *(WebPAnimEncoderOptions*)&enc->options_ = *enc_options; - SanitizeEncoderOptions((WebPAnimEncoderOptions*)&enc->options_); - } else { - DefaultEncoderOptions((WebPAnimEncoderOptions*)&enc->options_); - } - - // Canvas buffers. - if (!WebPPictureInit(&enc->curr_canvas_copy_) || - !WebPPictureInit(&enc->prev_canvas_) || - !WebPPictureInit(&enc->prev_canvas_disposed_)) { - goto Err; - } - enc->curr_canvas_copy_.width = width; - enc->curr_canvas_copy_.height = height; - enc->curr_canvas_copy_.use_argb = 1; - if (!WebPPictureAlloc(&enc->curr_canvas_copy_) || - !WebPPictureCopy(&enc->curr_canvas_copy_, &enc->prev_canvas_) || - !WebPPictureCopy(&enc->curr_canvas_copy_, &enc->prev_canvas_disposed_)) { - goto Err; - } - WebPUtilClearPic(&enc->prev_canvas_, NULL); - enc->curr_canvas_copy_modified_ = 1; - - // Encoded frames. - ResetCounters(enc); - // Note: one extra storage is for the previous frame. - enc->size_ = enc->options_.kmax - enc->options_.kmin + 1; - // We need space for at least 2 frames. But when kmin, kmax are both zero, - // enc->size_ will be 1. So we handle that special case below. - if (enc->size_ < 2) enc->size_ = 2; - enc->encoded_frames_ = - (EncodedFrame*)WebPSafeCalloc(enc->size_, sizeof(*enc->encoded_frames_)); - if (enc->encoded_frames_ == NULL) goto Err; - - enc->mux_ = WebPMuxNew(); - if (enc->mux_ == NULL) goto Err; - - enc->count_since_key_frame_ = 0; - enc->first_timestamp_ = 0; - enc->prev_timestamp_ = 0; - enc->prev_candidate_undecided_ = 0; - enc->is_first_frame_ = 1; - enc->got_null_frame_ = 0; - - return enc; // All OK. - - Err: - WebPAnimEncoderDelete(enc); - return NULL; -} - -// Release the data contained by 'encoded_frame'. -static void FrameRelease(EncodedFrame* const encoded_frame) { - if (encoded_frame != NULL) { - WebPDataClear(&encoded_frame->sub_frame_.bitstream); - WebPDataClear(&encoded_frame->key_frame_.bitstream); - memset(encoded_frame, 0, sizeof(*encoded_frame)); - } -} - -void WebPAnimEncoderDelete(WebPAnimEncoder* enc) { - if (enc != NULL) { - WebPPictureFree(&enc->curr_canvas_copy_); - WebPPictureFree(&enc->prev_canvas_); - WebPPictureFree(&enc->prev_canvas_disposed_); - if (enc->encoded_frames_ != NULL) { - size_t i; - for (i = 0; i < enc->size_; ++i) { - FrameRelease(&enc->encoded_frames_[i]); - } - WebPSafeFree(enc->encoded_frames_); - } - WebPMuxDelete(enc->mux_); - WebPSafeFree(enc); - } -} - -// ----------------------------------------------------------------------------- -// Frame addition. - -// Returns cached frame at the given 'position'. -static EncodedFrame* GetFrame(const WebPAnimEncoder* const enc, - size_t position) { - assert(enc->start_ + position < enc->size_); - return &enc->encoded_frames_[enc->start_ + position]; -} - -typedef int (*ComparePixelsFunc)(const uint32_t*, int, const uint32_t*, int, - int, int); - -// Returns true if 'length' number of pixels in 'src' and 'dst' are equal, -// assuming the given step sizes between pixels. -// 'max_allowed_diff' is unused and only there to allow function pointer use. -static WEBP_INLINE int ComparePixelsLossless(const uint32_t* src, int src_step, - const uint32_t* dst, int dst_step, - int length, int max_allowed_diff) { - (void)max_allowed_diff; - assert(length > 0); - while (length-- > 0) { - if (*src != *dst) { - return 0; - } - src += src_step; - dst += dst_step; - } - return 1; -} - -// Helper to check if each channel in 'src' and 'dst' is at most off by -// 'max_allowed_diff'. -static WEBP_INLINE int PixelsAreSimilar(uint32_t src, uint32_t dst, - int max_allowed_diff) { - const int src_a = (src >> 24) & 0xff; - const int src_r = (src >> 16) & 0xff; - const int src_g = (src >> 8) & 0xff; - const int src_b = (src >> 0) & 0xff; - const int dst_a = (dst >> 24) & 0xff; - const int dst_r = (dst >> 16) & 0xff; - const int dst_g = (dst >> 8) & 0xff; - const int dst_b = (dst >> 0) & 0xff; - - return (src_a == dst_a) && - (abs(src_r - dst_r) * dst_a <= (max_allowed_diff * 255)) && - (abs(src_g - dst_g) * dst_a <= (max_allowed_diff * 255)) && - (abs(src_b - dst_b) * dst_a <= (max_allowed_diff * 255)); -} - -// Returns true if 'length' number of pixels in 'src' and 'dst' are within an -// error bound, assuming the given step sizes between pixels. -static WEBP_INLINE int ComparePixelsLossy(const uint32_t* src, int src_step, - const uint32_t* dst, int dst_step, - int length, int max_allowed_diff) { - assert(length > 0); - while (length-- > 0) { - if (!PixelsAreSimilar(*src, *dst, max_allowed_diff)) { - return 0; - } - src += src_step; - dst += dst_step; - } - return 1; -} - -static int IsEmptyRect(const FrameRectangle* const rect) { - return (rect->width_ == 0) || (rect->height_ == 0); -} - -static int QualityToMaxDiff(float quality) { - const double val = pow(quality / 100., 0.5); - const double max_diff = 31 * (1 - val) + 1 * val; - return (int)(max_diff + 0.5); -} - -// Assumes that an initial valid guess of change rectangle 'rect' is passed. -static void MinimizeChangeRectangle(const WebPPicture* const src, - const WebPPicture* const dst, - FrameRectangle* const rect, - int is_lossless, float quality) { - int i, j; - const ComparePixelsFunc compare_pixels = - is_lossless ? ComparePixelsLossless : ComparePixelsLossy; - const int max_allowed_diff_lossy = QualityToMaxDiff(quality); - const int max_allowed_diff = is_lossless ? 0 : max_allowed_diff_lossy; - - // Sanity checks. - assert(src->width == dst->width && src->height == dst->height); - assert(rect->x_offset_ + rect->width_ <= dst->width); - assert(rect->y_offset_ + rect->height_ <= dst->height); - - // Left boundary. - for (i = rect->x_offset_; i < rect->x_offset_ + rect->width_; ++i) { - const uint32_t* const src_argb = - &src->argb[rect->y_offset_ * src->argb_stride + i]; - const uint32_t* const dst_argb = - &dst->argb[rect->y_offset_ * dst->argb_stride + i]; - if (compare_pixels(src_argb, src->argb_stride, dst_argb, dst->argb_stride, - rect->height_, max_allowed_diff)) { - --rect->width_; // Redundant column. - ++rect->x_offset_; - } else { - break; - } - } - if (rect->width_ == 0) goto NoChange; - - // Right boundary. - for (i = rect->x_offset_ + rect->width_ - 1; i >= rect->x_offset_; --i) { - const uint32_t* const src_argb = - &src->argb[rect->y_offset_ * src->argb_stride + i]; - const uint32_t* const dst_argb = - &dst->argb[rect->y_offset_ * dst->argb_stride + i]; - if (compare_pixels(src_argb, src->argb_stride, dst_argb, dst->argb_stride, - rect->height_, max_allowed_diff)) { - --rect->width_; // Redundant column. - } else { - break; - } - } - if (rect->width_ == 0) goto NoChange; - - // Top boundary. - for (j = rect->y_offset_; j < rect->y_offset_ + rect->height_; ++j) { - const uint32_t* const src_argb = - &src->argb[j * src->argb_stride + rect->x_offset_]; - const uint32_t* const dst_argb = - &dst->argb[j * dst->argb_stride + rect->x_offset_]; - if (compare_pixels(src_argb, 1, dst_argb, 1, rect->width_, - max_allowed_diff)) { - --rect->height_; // Redundant row. - ++rect->y_offset_; - } else { - break; - } - } - if (rect->height_ == 0) goto NoChange; - - // Bottom boundary. - for (j = rect->y_offset_ + rect->height_ - 1; j >= rect->y_offset_; --j) { - const uint32_t* const src_argb = - &src->argb[j * src->argb_stride + rect->x_offset_]; - const uint32_t* const dst_argb = - &dst->argb[j * dst->argb_stride + rect->x_offset_]; - if (compare_pixels(src_argb, 1, dst_argb, 1, rect->width_, - max_allowed_diff)) { - --rect->height_; // Redundant row. - } else { - break; - } - } - if (rect->height_ == 0) goto NoChange; - - if (IsEmptyRect(rect)) { - NoChange: - rect->x_offset_ = 0; - rect->y_offset_ = 0; - rect->width_ = 0; - rect->height_ = 0; - } -} - -// Snap rectangle to even offsets (and adjust dimensions if needed). -static WEBP_INLINE void SnapToEvenOffsets(FrameRectangle* const rect) { - rect->width_ += (rect->x_offset_ & 1); - rect->height_ += (rect->y_offset_ & 1); - rect->x_offset_ &= ~1; - rect->y_offset_ &= ~1; -} - -typedef struct { - int should_try_; // Should try this set of parameters. - int empty_rect_allowed_; // Frame with empty rectangle can be skipped. - FrameRectangle rect_ll_; // Frame rectangle for lossless compression. - WebPPicture sub_frame_ll_; // Sub-frame pic for lossless compression. - FrameRectangle rect_lossy_; // Frame rectangle for lossy compression. - // Could be smaller than rect_ll_ as pixels - // with small diffs can be ignored. - WebPPicture sub_frame_lossy_; // Sub-frame pic for lossless compression. -} SubFrameParams; - -static int SubFrameParamsInit(SubFrameParams* const params, - int should_try, int empty_rect_allowed) { - params->should_try_ = should_try; - params->empty_rect_allowed_ = empty_rect_allowed; - if (!WebPPictureInit(¶ms->sub_frame_ll_) || - !WebPPictureInit(¶ms->sub_frame_lossy_)) { - return 0; - } - return 1; -} - -static void SubFrameParamsFree(SubFrameParams* const params) { - WebPPictureFree(¶ms->sub_frame_ll_); - WebPPictureFree(¶ms->sub_frame_lossy_); -} - -// Given previous and current canvas, picks the optimal rectangle for the -// current frame based on 'is_lossless' and other parameters. Assumes that the -// initial guess 'rect' is valid. -static int GetSubRect(const WebPPicture* const prev_canvas, - const WebPPicture* const curr_canvas, int is_key_frame, - int is_first_frame, int empty_rect_allowed, - int is_lossless, float quality, - FrameRectangle* const rect, - WebPPicture* const sub_frame) { - if (!is_key_frame || is_first_frame) { // Optimize frame rectangle. - // Note: This behaves as expected for first frame, as 'prev_canvas' is - // initialized to a fully transparent canvas in the beginning. - MinimizeChangeRectangle(prev_canvas, curr_canvas, rect, - is_lossless, quality); - } - - if (IsEmptyRect(rect)) { - if (empty_rect_allowed) { // No need to get 'sub_frame'. - return 1; - } else { // Force a 1x1 rectangle. - rect->width_ = 1; - rect->height_ = 1; - assert(rect->x_offset_ == 0); - assert(rect->y_offset_ == 0); - } - } - - SnapToEvenOffsets(rect); - return WebPPictureView(curr_canvas, rect->x_offset_, rect->y_offset_, - rect->width_, rect->height_, sub_frame); -} - -// Picks optimal frame rectangle for both lossless and lossy compression. The -// initial guess for frame rectangles will be the full canvas. -static int GetSubRects(const WebPPicture* const prev_canvas, - const WebPPicture* const curr_canvas, int is_key_frame, - int is_first_frame, float quality, - SubFrameParams* const params) { - // Lossless frame rectangle. - params->rect_ll_.x_offset_ = 0; - params->rect_ll_.y_offset_ = 0; - params->rect_ll_.width_ = curr_canvas->width; - params->rect_ll_.height_ = curr_canvas->height; - if (!GetSubRect(prev_canvas, curr_canvas, is_key_frame, is_first_frame, - params->empty_rect_allowed_, 1, quality, - ¶ms->rect_ll_, ¶ms->sub_frame_ll_)) { - return 0; - } - // Lossy frame rectangle. - params->rect_lossy_ = params->rect_ll_; // seed with lossless rect. - return GetSubRect(prev_canvas, curr_canvas, is_key_frame, is_first_frame, - params->empty_rect_allowed_, 0, quality, - ¶ms->rect_lossy_, ¶ms->sub_frame_lossy_); -} - -static WEBP_INLINE int clip(int v, int min_v, int max_v) { - return (v < min_v) ? min_v : (v > max_v) ? max_v : v; -} - -int WebPAnimEncoderRefineRect( - const WebPPicture* const prev_canvas, const WebPPicture* const curr_canvas, - int is_lossless, float quality, int* const x_offset, int* const y_offset, - int* const width, int* const height) { - FrameRectangle rect; - const int right = clip(*x_offset + *width, 0, curr_canvas->width); - const int left = clip(*x_offset, 0, curr_canvas->width - 1); - const int bottom = clip(*y_offset + *height, 0, curr_canvas->height); - const int top = clip(*y_offset, 0, curr_canvas->height - 1); - if (prev_canvas == NULL || curr_canvas == NULL || - prev_canvas->width != curr_canvas->width || - prev_canvas->height != curr_canvas->height || - !prev_canvas->use_argb || !curr_canvas->use_argb) { - return 0; - } - rect.x_offset_ = left; - rect.y_offset_ = top; - rect.width_ = clip(right - left, 0, curr_canvas->width - rect.x_offset_); - rect.height_ = clip(bottom - top, 0, curr_canvas->height - rect.y_offset_); - MinimizeChangeRectangle(prev_canvas, curr_canvas, &rect, is_lossless, - quality); - SnapToEvenOffsets(&rect); - *x_offset = rect.x_offset_; - *y_offset = rect.y_offset_; - *width = rect.width_; - *height = rect.height_; - return 1; -} - -static void DisposeFrameRectangle(int dispose_method, - const FrameRectangle* const rect, - WebPPicture* const curr_canvas) { - assert(rect != NULL); - if (dispose_method == WEBP_MUX_DISPOSE_BACKGROUND) { - WebPUtilClearPic(curr_canvas, rect); - } -} - -static uint32_t RectArea(const FrameRectangle* const rect) { - return (uint32_t)rect->width_ * rect->height_; -} - -static int IsLosslessBlendingPossible(const WebPPicture* const src, - const WebPPicture* const dst, - const FrameRectangle* const rect) { - int i, j; - assert(src->width == dst->width && src->height == dst->height); - assert(rect->x_offset_ + rect->width_ <= dst->width); - assert(rect->y_offset_ + rect->height_ <= dst->height); - for (j = rect->y_offset_; j < rect->y_offset_ + rect->height_; ++j) { - for (i = rect->x_offset_; i < rect->x_offset_ + rect->width_; ++i) { - const uint32_t src_pixel = src->argb[j * src->argb_stride + i]; - const uint32_t dst_pixel = dst->argb[j * dst->argb_stride + i]; - const uint32_t dst_alpha = dst_pixel >> 24; - if (dst_alpha != 0xff && src_pixel != dst_pixel) { - // In this case, if we use blending, we can't attain the desired - // 'dst_pixel' value for this pixel. So, blending is not possible. - return 0; - } - } - } - return 1; -} - -static int IsLossyBlendingPossible(const WebPPicture* const src, - const WebPPicture* const dst, - const FrameRectangle* const rect, - float quality) { - const int max_allowed_diff_lossy = QualityToMaxDiff(quality); - int i, j; - assert(src->width == dst->width && src->height == dst->height); - assert(rect->x_offset_ + rect->width_ <= dst->width); - assert(rect->y_offset_ + rect->height_ <= dst->height); - for (j = rect->y_offset_; j < rect->y_offset_ + rect->height_; ++j) { - for (i = rect->x_offset_; i < rect->x_offset_ + rect->width_; ++i) { - const uint32_t src_pixel = src->argb[j * src->argb_stride + i]; - const uint32_t dst_pixel = dst->argb[j * dst->argb_stride + i]; - const uint32_t dst_alpha = dst_pixel >> 24; - if (dst_alpha != 0xff && - !PixelsAreSimilar(src_pixel, dst_pixel, max_allowed_diff_lossy)) { - // In this case, if we use blending, we can't attain the desired - // 'dst_pixel' value for this pixel. So, blending is not possible. - return 0; - } - } - } - return 1; -} - -// For pixels in 'rect', replace those pixels in 'dst' that are same as 'src' by -// transparent pixels. -// Returns true if at least one pixel gets modified. -static int IncreaseTransparency(const WebPPicture* const src, - const FrameRectangle* const rect, - WebPPicture* const dst) { - int i, j; - int modified = 0; - assert(src != NULL && dst != NULL && rect != NULL); - assert(src->width == dst->width && src->height == dst->height); - for (j = rect->y_offset_; j < rect->y_offset_ + rect->height_; ++j) { - const uint32_t* const psrc = src->argb + j * src->argb_stride; - uint32_t* const pdst = dst->argb + j * dst->argb_stride; - for (i = rect->x_offset_; i < rect->x_offset_ + rect->width_; ++i) { - if (psrc[i] == pdst[i] && pdst[i] != TRANSPARENT_COLOR) { - pdst[i] = TRANSPARENT_COLOR; - modified = 1; - } - } - } - return modified; -} - -#undef TRANSPARENT_COLOR - -// Replace similar blocks of pixels by a 'see-through' transparent block -// with uniform average color. -// Assumes lossy compression is being used. -// Returns true if at least one pixel gets modified. -static int FlattenSimilarBlocks(const WebPPicture* const src, - const FrameRectangle* const rect, - WebPPicture* const dst, float quality) { - const int max_allowed_diff_lossy = QualityToMaxDiff(quality); - int i, j; - int modified = 0; - const int block_size = 8; - const int y_start = (rect->y_offset_ + block_size) & ~(block_size - 1); - const int y_end = (rect->y_offset_ + rect->height_) & ~(block_size - 1); - const int x_start = (rect->x_offset_ + block_size) & ~(block_size - 1); - const int x_end = (rect->x_offset_ + rect->width_) & ~(block_size - 1); - assert(src != NULL && dst != NULL && rect != NULL); - assert(src->width == dst->width && src->height == dst->height); - assert((block_size & (block_size - 1)) == 0); // must be a power of 2 - // Iterate over each block and count similar pixels. - for (j = y_start; j < y_end; j += block_size) { - for (i = x_start; i < x_end; i += block_size) { - int cnt = 0; - int avg_r = 0, avg_g = 0, avg_b = 0; - int x, y; - const uint32_t* const psrc = src->argb + j * src->argb_stride + i; - uint32_t* const pdst = dst->argb + j * dst->argb_stride + i; - for (y = 0; y < block_size; ++y) { - for (x = 0; x < block_size; ++x) { - const uint32_t src_pixel = psrc[x + y * src->argb_stride]; - const int alpha = src_pixel >> 24; - if (alpha == 0xff && - PixelsAreSimilar(src_pixel, pdst[x + y * dst->argb_stride], - max_allowed_diff_lossy)) { - ++cnt; - avg_r += (src_pixel >> 16) & 0xff; - avg_g += (src_pixel >> 8) & 0xff; - avg_b += (src_pixel >> 0) & 0xff; - } - } - } - // If we have a fully similar block, we replace it with an - // average transparent block. This compresses better in lossy mode. - if (cnt == block_size * block_size) { - const uint32_t color = (0x00 << 24) | - ((avg_r / cnt) << 16) | - ((avg_g / cnt) << 8) | - ((avg_b / cnt) << 0); - for (y = 0; y < block_size; ++y) { - for (x = 0; x < block_size; ++x) { - pdst[x + y * dst->argb_stride] = color; - } - } - modified = 1; - } - } - } - return modified; -} - -static int EncodeFrame(const WebPConfig* const config, WebPPicture* const pic, - WebPMemoryWriter* const memory) { - pic->use_argb = 1; - pic->writer = WebPMemoryWrite; - pic->custom_ptr = memory; - if (!WebPEncode(config, pic)) { - return 0; - } - return 1; -} - -// Struct representing a candidate encoded frame including its metadata. -typedef struct { - WebPMemoryWriter mem_; - WebPMuxFrameInfo info_; - FrameRectangle rect_; - int evaluate_; // True if this candidate should be evaluated. -} Candidate; - -// Generates a candidate encoded frame given a picture and metadata. -static WebPEncodingError EncodeCandidate(WebPPicture* const sub_frame, - const FrameRectangle* const rect, - const WebPConfig* const encoder_config, - int use_blending, - Candidate* const candidate) { - WebPConfig config = *encoder_config; - WebPEncodingError error_code = VP8_ENC_OK; - assert(candidate != NULL); - memset(candidate, 0, sizeof(*candidate)); - - // Set frame rect and info. - candidate->rect_ = *rect; - candidate->info_.id = WEBP_CHUNK_ANMF; - candidate->info_.x_offset = rect->x_offset_; - candidate->info_.y_offset = rect->y_offset_; - candidate->info_.dispose_method = WEBP_MUX_DISPOSE_NONE; // Set later. - candidate->info_.blend_method = - use_blending ? WEBP_MUX_BLEND : WEBP_MUX_NO_BLEND; - candidate->info_.duration = 0; // Set in next call to WebPAnimEncoderAdd(). - - // Encode picture. - WebPMemoryWriterInit(&candidate->mem_); - - if (!config.lossless && use_blending) { - // Disable filtering to avoid blockiness in reconstructed frames at the - // time of decoding. - config.autofilter = 0; - config.filter_strength = 0; - } - if (!EncodeFrame(&config, sub_frame, &candidate->mem_)) { - error_code = sub_frame->error_code; - goto Err; - } - - candidate->evaluate_ = 1; - return error_code; - - Err: - WebPMemoryWriterClear(&candidate->mem_); - return error_code; -} - -static void CopyCurrentCanvas(WebPAnimEncoder* const enc) { - if (enc->curr_canvas_copy_modified_) { - WebPCopyPixels(enc->curr_canvas_, &enc->curr_canvas_copy_); - enc->curr_canvas_copy_.progress_hook = enc->curr_canvas_->progress_hook; - enc->curr_canvas_copy_.user_data = enc->curr_canvas_->user_data; - enc->curr_canvas_copy_modified_ = 0; - } -} - -enum { - LL_DISP_NONE = 0, - LL_DISP_BG, - LOSSY_DISP_NONE, - LOSSY_DISP_BG, - CANDIDATE_COUNT -}; - -#define MIN_COLORS_LOSSY 31 // Don't try lossy below this threshold. -#define MAX_COLORS_LOSSLESS 194 // Don't try lossless above this threshold. - -// Generates candidates for a given dispose method given pre-filled sub-frame -// 'params'. -static WebPEncodingError GenerateCandidates( - WebPAnimEncoder* const enc, Candidate candidates[CANDIDATE_COUNT], - WebPMuxAnimDispose dispose_method, int is_lossless, int is_key_frame, - SubFrameParams* const params, - const WebPConfig* const config_ll, const WebPConfig* const config_lossy) { - WebPEncodingError error_code = VP8_ENC_OK; - const int is_dispose_none = (dispose_method == WEBP_MUX_DISPOSE_NONE); - Candidate* const candidate_ll = - is_dispose_none ? &candidates[LL_DISP_NONE] : &candidates[LL_DISP_BG]; - Candidate* const candidate_lossy = is_dispose_none - ? &candidates[LOSSY_DISP_NONE] - : &candidates[LOSSY_DISP_BG]; - WebPPicture* const curr_canvas = &enc->curr_canvas_copy_; - const WebPPicture* const prev_canvas = - is_dispose_none ? &enc->prev_canvas_ : &enc->prev_canvas_disposed_; - int use_blending_ll, use_blending_lossy; - int evaluate_ll, evaluate_lossy; - - CopyCurrentCanvas(enc); - use_blending_ll = - !is_key_frame && - IsLosslessBlendingPossible(prev_canvas, curr_canvas, ¶ms->rect_ll_); - use_blending_lossy = - !is_key_frame && - IsLossyBlendingPossible(prev_canvas, curr_canvas, ¶ms->rect_lossy_, - config_lossy->quality); - - // Pick candidates to be tried. - if (!enc->options_.allow_mixed) { - evaluate_ll = is_lossless; - evaluate_lossy = !is_lossless; - } else if (enc->options_.minimize_size) { - evaluate_ll = 1; - evaluate_lossy = 1; - } else { // Use a heuristic for trying lossless and/or lossy compression. - const int num_colors = WebPGetColorPalette(¶ms->sub_frame_ll_, NULL); - evaluate_ll = (num_colors < MAX_COLORS_LOSSLESS); - evaluate_lossy = (num_colors >= MIN_COLORS_LOSSY); - } - - // Generate candidates. - if (evaluate_ll) { - CopyCurrentCanvas(enc); - if (use_blending_ll) { - enc->curr_canvas_copy_modified_ = - IncreaseTransparency(prev_canvas, ¶ms->rect_ll_, curr_canvas); - } - error_code = EncodeCandidate(¶ms->sub_frame_ll_, ¶ms->rect_ll_, - config_ll, use_blending_ll, candidate_ll); - if (error_code != VP8_ENC_OK) return error_code; - } - if (evaluate_lossy) { - CopyCurrentCanvas(enc); - if (use_blending_lossy) { - enc->curr_canvas_copy_modified_ = - FlattenSimilarBlocks(prev_canvas, ¶ms->rect_lossy_, curr_canvas, - config_lossy->quality); - } - error_code = - EncodeCandidate(¶ms->sub_frame_lossy_, ¶ms->rect_lossy_, - config_lossy, use_blending_lossy, candidate_lossy); - if (error_code != VP8_ENC_OK) return error_code; - enc->curr_canvas_copy_modified_ = 1; - } - return error_code; -} - -#undef MIN_COLORS_LOSSY -#undef MAX_COLORS_LOSSLESS - -static void GetEncodedData(const WebPMemoryWriter* const memory, - WebPData* const encoded_data) { - encoded_data->bytes = memory->mem; - encoded_data->size = memory->size; -} - -// Sets dispose method of the previous frame to be 'dispose_method'. -static void SetPreviousDisposeMethod(WebPAnimEncoder* const enc, - WebPMuxAnimDispose dispose_method) { - const size_t position = enc->count_ - 2; - EncodedFrame* const prev_enc_frame = GetFrame(enc, position); - assert(enc->count_ >= 2); // As current and previous frames are in enc. - - if (enc->prev_candidate_undecided_) { - assert(dispose_method == WEBP_MUX_DISPOSE_NONE); - prev_enc_frame->sub_frame_.dispose_method = dispose_method; - prev_enc_frame->key_frame_.dispose_method = dispose_method; - } else { - WebPMuxFrameInfo* const prev_info = prev_enc_frame->is_key_frame_ - ? &prev_enc_frame->key_frame_ - : &prev_enc_frame->sub_frame_; - prev_info->dispose_method = dispose_method; - } -} - -static int IncreasePreviousDuration(WebPAnimEncoder* const enc, int duration) { - const size_t position = enc->count_ - 1; - EncodedFrame* const prev_enc_frame = GetFrame(enc, position); - int new_duration; - - assert(enc->count_ >= 1); - assert(prev_enc_frame->sub_frame_.duration == - prev_enc_frame->key_frame_.duration); - assert(prev_enc_frame->sub_frame_.duration == - (prev_enc_frame->sub_frame_.duration & (MAX_DURATION - 1))); - assert(duration == (duration & (MAX_DURATION - 1))); - - new_duration = prev_enc_frame->sub_frame_.duration + duration; - if (new_duration >= MAX_DURATION) { // Special case. - // Separate out previous frame from earlier merged frames to avoid overflow. - // We add a 1x1 transparent frame for the previous frame, with blending on. - const FrameRectangle rect = { 0, 0, 1, 1 }; - const uint8_t lossless_1x1_bytes[] = { - 0x52, 0x49, 0x46, 0x46, 0x14, 0x00, 0x00, 0x00, 0x57, 0x45, 0x42, 0x50, - 0x56, 0x50, 0x38, 0x4c, 0x08, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, - 0x10, 0x88, 0x88, 0x08 - }; - const WebPData lossless_1x1 = { - lossless_1x1_bytes, sizeof(lossless_1x1_bytes) - }; - const uint8_t lossy_1x1_bytes[] = { - 0x52, 0x49, 0x46, 0x46, 0x40, 0x00, 0x00, 0x00, 0x57, 0x45, 0x42, 0x50, - 0x56, 0x50, 0x38, 0x58, 0x0a, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x4c, 0x50, 0x48, 0x02, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x56, 0x50, 0x38, 0x20, 0x18, 0x00, 0x00, 0x00, - 0x30, 0x01, 0x00, 0x9d, 0x01, 0x2a, 0x01, 0x00, 0x01, 0x00, 0x02, 0x00, - 0x34, 0x25, 0xa4, 0x00, 0x03, 0x70, 0x00, 0xfe, 0xfb, 0xfd, 0x50, 0x00 - }; - const WebPData lossy_1x1 = { lossy_1x1_bytes, sizeof(lossy_1x1_bytes) }; - const int can_use_lossless = - (enc->last_config_.lossless || enc->options_.allow_mixed); - EncodedFrame* const curr_enc_frame = GetFrame(enc, enc->count_); - curr_enc_frame->is_key_frame_ = 0; - curr_enc_frame->sub_frame_.id = WEBP_CHUNK_ANMF; - curr_enc_frame->sub_frame_.x_offset = 0; - curr_enc_frame->sub_frame_.y_offset = 0; - curr_enc_frame->sub_frame_.dispose_method = WEBP_MUX_DISPOSE_NONE; - curr_enc_frame->sub_frame_.blend_method = WEBP_MUX_BLEND; - curr_enc_frame->sub_frame_.duration = duration; - if (!WebPDataCopy(can_use_lossless ? &lossless_1x1 : &lossy_1x1, - &curr_enc_frame->sub_frame_.bitstream)) { - return 0; - } - ++enc->count_; - ++enc->count_since_key_frame_; - enc->flush_count_ = enc->count_ - 1; - enc->prev_candidate_undecided_ = 0; - enc->prev_rect_ = rect; - } else { // Regular case. - // Increase duration of the previous frame by 'duration'. - prev_enc_frame->sub_frame_.duration = new_duration; - prev_enc_frame->key_frame_.duration = new_duration; - } - return 1; -} - -// Pick the candidate encoded frame with smallest size and release other -// candidates. -// TODO(later): Perhaps a rough SSIM/PSNR produced by the encoder should -// also be a criteria, in addition to sizes. -static void PickBestCandidate(WebPAnimEncoder* const enc, - Candidate* const candidates, int is_key_frame, - EncodedFrame* const encoded_frame) { - int i; - int best_idx = -1; - size_t best_size = ~0; - for (i = 0; i < CANDIDATE_COUNT; ++i) { - if (candidates[i].evaluate_) { - const size_t candidate_size = candidates[i].mem_.size; - if (candidate_size < best_size) { - best_idx = i; - best_size = candidate_size; - } - } - } - assert(best_idx != -1); - for (i = 0; i < CANDIDATE_COUNT; ++i) { - if (candidates[i].evaluate_) { - if (i == best_idx) { - WebPMuxFrameInfo* const dst = is_key_frame - ? &encoded_frame->key_frame_ - : &encoded_frame->sub_frame_; - *dst = candidates[i].info_; - GetEncodedData(&candidates[i].mem_, &dst->bitstream); - if (!is_key_frame) { - // Note: Previous dispose method only matters for non-keyframes. - // Also, we don't want to modify previous dispose method that was - // selected when a non key-frame was assumed. - const WebPMuxAnimDispose prev_dispose_method = - (best_idx == LL_DISP_NONE || best_idx == LOSSY_DISP_NONE) - ? WEBP_MUX_DISPOSE_NONE - : WEBP_MUX_DISPOSE_BACKGROUND; - SetPreviousDisposeMethod(enc, prev_dispose_method); - } - enc->prev_rect_ = candidates[i].rect_; // save for next frame. - } else { - WebPMemoryWriterClear(&candidates[i].mem_); - candidates[i].evaluate_ = 0; - } - } - } -} - -// Depending on the configuration, tries different compressions -// (lossy/lossless), dispose methods, blending methods etc to encode the current -// frame and outputs the best one in 'encoded_frame'. -// 'frame_skipped' will be set to true if this frame should actually be skipped. -static WebPEncodingError SetFrame(WebPAnimEncoder* const enc, - const WebPConfig* const config, - int is_key_frame, - EncodedFrame* const encoded_frame, - int* const frame_skipped) { - int i; - WebPEncodingError error_code = VP8_ENC_OK; - const WebPPicture* const curr_canvas = &enc->curr_canvas_copy_; - const WebPPicture* const prev_canvas = &enc->prev_canvas_; - Candidate candidates[CANDIDATE_COUNT]; - const int is_lossless = config->lossless; - const int consider_lossless = is_lossless || enc->options_.allow_mixed; - const int consider_lossy = !is_lossless || enc->options_.allow_mixed; - const int is_first_frame = enc->is_first_frame_; - - // First frame cannot be skipped as there is no 'previous frame' to merge it - // to. So, empty rectangle is not allowed for the first frame. - const int empty_rect_allowed_none = !is_first_frame; - - // Even if there is exact pixel match between 'disposed previous canvas' and - // 'current canvas', we can't skip current frame, as there may not be exact - // pixel match between 'previous canvas' and 'current canvas'. So, we don't - // allow empty rectangle in this case. - const int empty_rect_allowed_bg = 0; - - // If current frame is a key-frame, dispose method of previous frame doesn't - // matter, so we don't try dispose to background. - // Also, if key-frame insertion is on, and previous frame could be picked as - // either a sub-frame or a key-frame, then we can't be sure about what frame - // rectangle would be disposed. In that case too, we don't try dispose to - // background. - const int dispose_bg_possible = - !is_key_frame && !enc->prev_candidate_undecided_; - - SubFrameParams dispose_none_params; - SubFrameParams dispose_bg_params; - - WebPConfig config_ll = *config; - WebPConfig config_lossy = *config; - config_ll.lossless = 1; - config_lossy.lossless = 0; - enc->last_config_ = *config; - enc->last_config_reversed_ = config->lossless ? config_lossy : config_ll; - *frame_skipped = 0; - - if (!SubFrameParamsInit(&dispose_none_params, 1, empty_rect_allowed_none) || - !SubFrameParamsInit(&dispose_bg_params, 0, empty_rect_allowed_bg)) { - return VP8_ENC_ERROR_INVALID_CONFIGURATION; - } - - memset(candidates, 0, sizeof(candidates)); - - // Change-rectangle assuming previous frame was DISPOSE_NONE. - if (!GetSubRects(prev_canvas, curr_canvas, is_key_frame, is_first_frame, - config_lossy.quality, &dispose_none_params)) { - error_code = VP8_ENC_ERROR_INVALID_CONFIGURATION; - goto Err; - } - - if ((consider_lossless && IsEmptyRect(&dispose_none_params.rect_ll_)) || - (consider_lossy && IsEmptyRect(&dispose_none_params.rect_lossy_))) { - // Don't encode the frame at all. Instead, the duration of the previous - // frame will be increased later. - assert(empty_rect_allowed_none); - *frame_skipped = 1; - goto End; - } - - if (dispose_bg_possible) { - // Change-rectangle assuming previous frame was DISPOSE_BACKGROUND. - WebPPicture* const prev_canvas_disposed = &enc->prev_canvas_disposed_; - WebPCopyPixels(prev_canvas, prev_canvas_disposed); - DisposeFrameRectangle(WEBP_MUX_DISPOSE_BACKGROUND, &enc->prev_rect_, - prev_canvas_disposed); - - if (!GetSubRects(prev_canvas_disposed, curr_canvas, is_key_frame, - is_first_frame, config_lossy.quality, - &dispose_bg_params)) { - error_code = VP8_ENC_ERROR_INVALID_CONFIGURATION; - goto Err; - } - assert(!IsEmptyRect(&dispose_bg_params.rect_ll_)); - assert(!IsEmptyRect(&dispose_bg_params.rect_lossy_)); - - if (enc->options_.minimize_size) { // Try both dispose methods. - dispose_bg_params.should_try_ = 1; - dispose_none_params.should_try_ = 1; - } else if ((is_lossless && - RectArea(&dispose_bg_params.rect_ll_) < - RectArea(&dispose_none_params.rect_ll_)) || - (!is_lossless && - RectArea(&dispose_bg_params.rect_lossy_) < - RectArea(&dispose_none_params.rect_lossy_))) { - dispose_bg_params.should_try_ = 1; // Pick DISPOSE_BACKGROUND. - dispose_none_params.should_try_ = 0; - } - } - - if (dispose_none_params.should_try_) { - error_code = GenerateCandidates( - enc, candidates, WEBP_MUX_DISPOSE_NONE, is_lossless, is_key_frame, - &dispose_none_params, &config_ll, &config_lossy); - if (error_code != VP8_ENC_OK) goto Err; - } - - if (dispose_bg_params.should_try_) { - assert(!enc->is_first_frame_); - assert(dispose_bg_possible); - error_code = GenerateCandidates( - enc, candidates, WEBP_MUX_DISPOSE_BACKGROUND, is_lossless, is_key_frame, - &dispose_bg_params, &config_ll, &config_lossy); - if (error_code != VP8_ENC_OK) goto Err; - } - - PickBestCandidate(enc, candidates, is_key_frame, encoded_frame); - - goto End; - - Err: - for (i = 0; i < CANDIDATE_COUNT; ++i) { - if (candidates[i].evaluate_) { - WebPMemoryWriterClear(&candidates[i].mem_); - } - } - - End: - SubFrameParamsFree(&dispose_none_params); - SubFrameParamsFree(&dispose_bg_params); - return error_code; -} - -// Calculate the penalty incurred if we encode given frame as a key frame -// instead of a sub-frame. -static int64_t KeyFramePenalty(const EncodedFrame* const encoded_frame) { - return ((int64_t)encoded_frame->key_frame_.bitstream.size - - encoded_frame->sub_frame_.bitstream.size); -} - -static int CacheFrame(WebPAnimEncoder* const enc, - const WebPConfig* const config) { - int ok = 0; - int frame_skipped = 0; - WebPEncodingError error_code = VP8_ENC_OK; - const size_t position = enc->count_; - EncodedFrame* const encoded_frame = GetFrame(enc, position); - - ++enc->count_; - - if (enc->is_first_frame_) { // Add this as a key-frame. - error_code = SetFrame(enc, config, 1, encoded_frame, &frame_skipped); - if (error_code != VP8_ENC_OK) goto End; - assert(frame_skipped == 0); // First frame can't be skipped, even if empty. - assert(position == 0 && enc->count_ == 1); - encoded_frame->is_key_frame_ = 1; - enc->flush_count_ = 0; - enc->count_since_key_frame_ = 0; - enc->prev_candidate_undecided_ = 0; - } else { - ++enc->count_since_key_frame_; - if (enc->count_since_key_frame_ <= enc->options_.kmin) { - // Add this as a frame rectangle. - error_code = SetFrame(enc, config, 0, encoded_frame, &frame_skipped); - if (error_code != VP8_ENC_OK) goto End; - if (frame_skipped) goto Skip; - encoded_frame->is_key_frame_ = 0; - enc->flush_count_ = enc->count_ - 1; - enc->prev_candidate_undecided_ = 0; - } else { - int64_t curr_delta; - FrameRectangle prev_rect_key, prev_rect_sub; - - // Add this as a frame rectangle to enc. - error_code = SetFrame(enc, config, 0, encoded_frame, &frame_skipped); - if (error_code != VP8_ENC_OK) goto End; - if (frame_skipped) goto Skip; - prev_rect_sub = enc->prev_rect_; - - - // Add this as a key-frame to enc, too. - error_code = SetFrame(enc, config, 1, encoded_frame, &frame_skipped); - if (error_code != VP8_ENC_OK) goto End; - assert(frame_skipped == 0); // Key-frame cannot be an empty rectangle. - prev_rect_key = enc->prev_rect_; - - // Analyze size difference of the two variants. - curr_delta = KeyFramePenalty(encoded_frame); - if (curr_delta <= enc->best_delta_) { // Pick this as the key-frame. - if (enc->keyframe_ != KEYFRAME_NONE) { - EncodedFrame* const old_keyframe = GetFrame(enc, enc->keyframe_); - assert(old_keyframe->is_key_frame_); - old_keyframe->is_key_frame_ = 0; - } - encoded_frame->is_key_frame_ = 1; - enc->prev_candidate_undecided_ = 1; - enc->keyframe_ = (int)position; - enc->best_delta_ = curr_delta; - enc->flush_count_ = enc->count_ - 1; // We can flush previous frames. - } else { - encoded_frame->is_key_frame_ = 0; - enc->prev_candidate_undecided_ = 0; - } - // Note: We need '>=' below because when kmin and kmax are both zero, - // count_since_key_frame will always be > kmax. - if (enc->count_since_key_frame_ >= enc->options_.kmax) { - enc->flush_count_ = enc->count_ - 1; - enc->count_since_key_frame_ = 0; - enc->keyframe_ = KEYFRAME_NONE; - enc->best_delta_ = DELTA_INFINITY; - } - if (!enc->prev_candidate_undecided_) { - enc->prev_rect_ = - encoded_frame->is_key_frame_ ? prev_rect_key : prev_rect_sub; - } - } - } - - // Update previous to previous and previous canvases for next call. - WebPCopyPixels(enc->curr_canvas_, &enc->prev_canvas_); - enc->is_first_frame_ = 0; - - Skip: - ok = 1; - ++enc->in_frame_count_; - - End: - if (!ok || frame_skipped) { - FrameRelease(encoded_frame); - // We reset some counters, as the frame addition failed/was skipped. - --enc->count_; - if (!enc->is_first_frame_) --enc->count_since_key_frame_; - if (!ok) { - MarkError2(enc, "ERROR adding frame. WebPEncodingError", error_code); - } - } - enc->curr_canvas_->error_code = error_code; // report error_code - assert(ok || error_code != VP8_ENC_OK); - return ok; -} - -static int FlushFrames(WebPAnimEncoder* const enc) { - while (enc->flush_count_ > 0) { - WebPMuxError err; - EncodedFrame* const curr = GetFrame(enc, 0); - const WebPMuxFrameInfo* const info = - curr->is_key_frame_ ? &curr->key_frame_ : &curr->sub_frame_; - assert(enc->mux_ != NULL); - err = WebPMuxPushFrame(enc->mux_, info, 1); - if (err != WEBP_MUX_OK) { - MarkError2(enc, "ERROR adding frame. WebPMuxError", err); - return 0; - } - if (enc->options_.verbose) { - fprintf(stderr, "INFO: Added frame. offset:%d,%d dispose:%d blend:%d\n", - info->x_offset, info->y_offset, info->dispose_method, - info->blend_method); - } - ++enc->out_frame_count_; - FrameRelease(curr); - ++enc->start_; - --enc->flush_count_; - --enc->count_; - if (enc->keyframe_ != KEYFRAME_NONE) --enc->keyframe_; - } - - if (enc->count_ == 1 && enc->start_ != 0) { - // Move enc->start to index 0. - const int enc_start_tmp = (int)enc->start_; - EncodedFrame temp = enc->encoded_frames_[0]; - enc->encoded_frames_[0] = enc->encoded_frames_[enc_start_tmp]; - enc->encoded_frames_[enc_start_tmp] = temp; - FrameRelease(&enc->encoded_frames_[enc_start_tmp]); - enc->start_ = 0; - } - return 1; -} - -#undef DELTA_INFINITY -#undef KEYFRAME_NONE - -int WebPAnimEncoderAdd(WebPAnimEncoder* enc, WebPPicture* frame, int timestamp, - const WebPConfig* encoder_config) { - WebPConfig config; - int ok; - - if (enc == NULL) { - return 0; - } - MarkNoError(enc); - - if (!enc->is_first_frame_) { - // Make sure timestamps are non-decreasing (integer wrap-around is OK). - const uint32_t prev_frame_duration = - (uint32_t)timestamp - enc->prev_timestamp_; - if (prev_frame_duration >= MAX_DURATION) { - if (frame != NULL) { - frame->error_code = VP8_ENC_ERROR_INVALID_CONFIGURATION; - } - MarkError(enc, "ERROR adding frame: timestamps must be non-decreasing"); - return 0; - } - if (!IncreasePreviousDuration(enc, (int)prev_frame_duration)) { - return 0; - } - } else { - enc->first_timestamp_ = timestamp; - } - - if (frame == NULL) { // Special: last call. - enc->got_null_frame_ = 1; - enc->prev_timestamp_ = timestamp; - return 1; - } - - if (frame->width != enc->canvas_width_ || - frame->height != enc->canvas_height_) { - frame->error_code = VP8_ENC_ERROR_INVALID_CONFIGURATION; - MarkError(enc, "ERROR adding frame: Invalid frame dimensions"); - return 0; - } - - if (!frame->use_argb) { // Convert frame from YUV(A) to ARGB. - if (enc->options_.verbose) { - fprintf(stderr, "WARNING: Converting frame from YUV(A) to ARGB format; " - "this incurs a small loss.\n"); - } - if (!WebPPictureYUVAToARGB(frame)) { - MarkError(enc, "ERROR converting frame from YUV(A) to ARGB"); - return 0; - } - } - - if (encoder_config != NULL) { - if (!WebPValidateConfig(encoder_config)) { - MarkError(enc, "ERROR adding frame: Invalid WebPConfig"); - return 0; - } - config = *encoder_config; - } else { - WebPConfigInit(&config); - config.lossless = 1; - } - assert(enc->curr_canvas_ == NULL); - enc->curr_canvas_ = frame; // Store reference. - assert(enc->curr_canvas_copy_modified_ == 1); - CopyCurrentCanvas(enc); - - ok = CacheFrame(enc, &config) && FlushFrames(enc); - - enc->curr_canvas_ = NULL; - enc->curr_canvas_copy_modified_ = 1; - if (ok) { - enc->prev_timestamp_ = timestamp; - } - return ok; -} - -// ----------------------------------------------------------------------------- -// Bitstream assembly. - -static int DecodeFrameOntoCanvas(const WebPMuxFrameInfo* const frame, - WebPPicture* const canvas) { - const WebPData* const image = &frame->bitstream; - WebPPicture sub_image; - WebPDecoderConfig config; - WebPInitDecoderConfig(&config); - WebPUtilClearPic(canvas, NULL); - if (WebPGetFeatures(image->bytes, image->size, &config.input) != - VP8_STATUS_OK) { - return 0; - } - if (!WebPPictureView(canvas, frame->x_offset, frame->y_offset, - config.input.width, config.input.height, &sub_image)) { - return 0; - } - config.output.is_external_memory = 1; - config.output.colorspace = MODE_BGRA; - config.output.u.RGBA.rgba = (uint8_t*)sub_image.argb; - config.output.u.RGBA.stride = sub_image.argb_stride * 4; - config.output.u.RGBA.size = config.output.u.RGBA.stride * sub_image.height; - - if (WebPDecode(image->bytes, image->size, &config) != VP8_STATUS_OK) { - return 0; - } - return 1; -} - -static int FrameToFullCanvas(WebPAnimEncoder* const enc, - const WebPMuxFrameInfo* const frame, - WebPData* const full_image) { - WebPPicture* const canvas_buf = &enc->curr_canvas_copy_; - WebPMemoryWriter mem1, mem2; - WebPMemoryWriterInit(&mem1); - WebPMemoryWriterInit(&mem2); - - if (!DecodeFrameOntoCanvas(frame, canvas_buf)) goto Err; - if (!EncodeFrame(&enc->last_config_, canvas_buf, &mem1)) goto Err; - GetEncodedData(&mem1, full_image); - - if (enc->options_.allow_mixed) { - if (!EncodeFrame(&enc->last_config_reversed_, canvas_buf, &mem2)) goto Err; - if (mem2.size < mem1.size) { - GetEncodedData(&mem2, full_image); - WebPMemoryWriterClear(&mem1); - } else { - WebPMemoryWriterClear(&mem2); - } - } - return 1; - - Err: - WebPMemoryWriterClear(&mem1); - WebPMemoryWriterClear(&mem2); - return 0; -} - -// Convert a single-frame animation to a non-animated image if appropriate. -// TODO(urvang): Can we pick one of the two heuristically (based on frame -// rectangle and/or presence of alpha)? -static WebPMuxError OptimizeSingleFrame(WebPAnimEncoder* const enc, - WebPData* const webp_data) { - WebPMuxError err = WEBP_MUX_OK; - int canvas_width, canvas_height; - WebPMuxFrameInfo frame; - WebPData full_image; - WebPData webp_data2; - WebPMux* const mux = WebPMuxCreate(webp_data, 0); - if (mux == NULL) return WEBP_MUX_BAD_DATA; - assert(enc->out_frame_count_ == 1); - WebPDataInit(&frame.bitstream); - WebPDataInit(&full_image); - WebPDataInit(&webp_data2); - - err = WebPMuxGetFrame(mux, 1, &frame); - if (err != WEBP_MUX_OK) goto End; - if (frame.id != WEBP_CHUNK_ANMF) goto End; // Non-animation: nothing to do. - err = WebPMuxGetCanvasSize(mux, &canvas_width, &canvas_height); - if (err != WEBP_MUX_OK) goto End; - if (!FrameToFullCanvas(enc, &frame, &full_image)) { - err = WEBP_MUX_BAD_DATA; - goto End; - } - err = WebPMuxSetImage(mux, &full_image, 1); - if (err != WEBP_MUX_OK) goto End; - err = WebPMuxAssemble(mux, &webp_data2); - if (err != WEBP_MUX_OK) goto End; - - if (webp_data2.size < webp_data->size) { // Pick 'webp_data2' if smaller. - WebPDataClear(webp_data); - *webp_data = webp_data2; - WebPDataInit(&webp_data2); - } - - End: - WebPDataClear(&frame.bitstream); - WebPDataClear(&full_image); - WebPMuxDelete(mux); - WebPDataClear(&webp_data2); - return err; -} - -int WebPAnimEncoderAssemble(WebPAnimEncoder* enc, WebPData* webp_data) { - WebPMux* mux; - WebPMuxError err; - - if (enc == NULL) { - return 0; - } - MarkNoError(enc); - - if (webp_data == NULL) { - MarkError(enc, "ERROR assembling: NULL input"); - return 0; - } - - if (enc->in_frame_count_ == 0) { - MarkError(enc, "ERROR: No frames to assemble"); - return 0; - } - - if (!enc->got_null_frame_ && enc->in_frame_count_ > 1 && enc->count_ > 0) { - // set duration of the last frame to be avg of durations of previous frames. - const double delta_time = - (uint32_t)enc->prev_timestamp_ - enc->first_timestamp_; - const int average_duration = (int)(delta_time / (enc->in_frame_count_ - 1)); - if (!IncreasePreviousDuration(enc, average_duration)) { - return 0; - } - } - - // Flush any remaining frames. - enc->flush_count_ = enc->count_; - if (!FlushFrames(enc)) { - return 0; - } - - // Set definitive canvas size. - mux = enc->mux_; - err = WebPMuxSetCanvasSize(mux, enc->canvas_width_, enc->canvas_height_); - if (err != WEBP_MUX_OK) goto Err; - - err = WebPMuxSetAnimationParams(mux, &enc->options_.anim_params); - if (err != WEBP_MUX_OK) goto Err; - - // Assemble into a WebP bitstream. - err = WebPMuxAssemble(mux, webp_data); - if (err != WEBP_MUX_OK) goto Err; - - if (enc->out_frame_count_ == 1) { - err = OptimizeSingleFrame(enc, webp_data); - if (err != WEBP_MUX_OK) goto Err; - } - return 1; - - Err: - MarkError2(enc, "ERROR assembling WebP", err); - return 0; -} - -const char* WebPAnimEncoderGetError(WebPAnimEncoder* enc) { - if (enc == NULL) return NULL; - return enc->error_str_; -} - -// ----------------------------------------------------------------------------- diff --git a/Extended/libwebp/src/mux/animi.h b/Extended/libwebp/src/mux/animi.h deleted file mode 100644 index 34c45ba..0000000 --- a/Extended/libwebp/src/mux/animi.h +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright 2016 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Internal header for animation related functions. -// -// Author: Hui Su (huisu@google.com) - -#ifndef WEBP_MUX_ANIMI_H_ -#define WEBP_MUX_ANIMI_H_ - -#include "src/webp/mux.h" - -#ifdef __cplusplus -extern "C" { -#endif - -// Picks the optimal rectangle between two pictures, starting with initial -// values of offsets and dimensions that are passed in. The initial -// values will be clipped, if necessary, to make sure the rectangle is -// within the canvas. "use_argb" must be true for both pictures. -// Parameters: -// prev_canvas, curr_canvas - (in) two input pictures to compare. -// is_lossless, quality - (in) encoding settings. -// x_offset, y_offset, width, height - (in/out) rectangle between the two -// input pictures. -// Returns true on success. -int WebPAnimEncoderRefineRect( - const struct WebPPicture* const prev_canvas, - const struct WebPPicture* const curr_canvas, - int is_lossless, float quality, int* const x_offset, int* const y_offset, - int* const width, int* const height); - -#ifdef __cplusplus -} // extern "C" -#endif - -#endif // WEBP_MUX_ANIMI_H_ diff --git a/Extended/libwebp/src/mux/libwebpmux.pc b/Extended/libwebp/src/mux/libwebpmux.pc deleted file mode 100644 index 8398cb6..0000000 --- a/Extended/libwebp/src/mux/libwebpmux.pc +++ /dev/null @@ -1,12 +0,0 @@ -prefix=/usr/local -exec_prefix=${prefix} -libdir=${exec_prefix}/lib -includedir=${prefix}/include - -Name: libwebpmux -Description: Library for manipulating the WebP graphics format container -Version: 1.1.0 -Requires: libwebp >= 0.2.0 -Cflags: -I${includedir} -Libs: -L${libdir} -lwebpmux -Libs.private: -lm diff --git a/Extended/libwebp/src/mux/libwebpmux.pc.in b/Extended/libwebp/src/mux/libwebpmux.pc.in deleted file mode 100644 index a96fac7..0000000 --- a/Extended/libwebp/src/mux/libwebpmux.pc.in +++ /dev/null @@ -1,12 +0,0 @@ -prefix=@prefix@ -exec_prefix=@exec_prefix@ -libdir=@libdir@ -includedir=@includedir@ - -Name: libwebpmux -Description: Library for manipulating the WebP graphics format container -Version: @PACKAGE_VERSION@ -Requires: libwebp >= 0.2.0 -Cflags: -I${includedir} -Libs: -L${libdir} -lwebpmux -Libs.private: -lm diff --git a/Extended/libwebp/src/mux/libwebpmux.rc b/Extended/libwebp/src/mux/libwebpmux.rc deleted file mode 100644 index 84503cb..0000000 --- a/Extended/libwebp/src/mux/libwebpmux.rc +++ /dev/null @@ -1,41 +0,0 @@ -#define APSTUDIO_READONLY_SYMBOLS -#include "winres.h" -#undef APSTUDIO_READONLY_SYMBOLS - -#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) -LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US - -VS_VERSION_INFO VERSIONINFO - FILEVERSION 1,0,1,0 - PRODUCTVERSION 1,0,1,0 - FILEFLAGSMASK 0x3fL -#ifdef _DEBUG - FILEFLAGS 0x1L -#else - FILEFLAGS 0x0L -#endif - FILEOS 0x40004L - FILETYPE 0x2L - FILESUBTYPE 0x0L -BEGIN - BLOCK "StringFileInfo" - BEGIN - BLOCK "040904b0" - BEGIN - VALUE "CompanyName", "Google, Inc." - VALUE "FileDescription", "libwebpmux DLL" - VALUE "FileVersion", "1.1.0" - VALUE "InternalName", "libwebpmux.dll" - VALUE "LegalCopyright", "Copyright (C) 2019" - VALUE "OriginalFilename", "libwebpmux.dll" - VALUE "ProductName", "WebP Image Muxer" - VALUE "ProductVersion", "1.1.0" - END - END - BLOCK "VarFileInfo" - BEGIN - VALUE "Translation", 0x409, 1200 - END -END - -#endif // English (United States) resources diff --git a/Extended/libwebp/src/mux/muxedit.c b/Extended/libwebp/src/mux/muxedit.c deleted file mode 100644 index ccf14b2..0000000 --- a/Extended/libwebp/src/mux/muxedit.c +++ /dev/null @@ -1,657 +0,0 @@ -// Copyright 2011 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Set and delete APIs for mux. -// -// Authors: Urvang (urvang@google.com) -// Vikas (vikasa@google.com) - -#include -#include "src/mux/muxi.h" -#include "src/utils/utils.h" - -//------------------------------------------------------------------------------ -// Life of a mux object. - -static void MuxInit(WebPMux* const mux) { - assert(mux != NULL); - memset(mux, 0, sizeof(*mux)); - mux->canvas_width_ = 0; // just to be explicit - mux->canvas_height_ = 0; -} - -WebPMux* WebPNewInternal(int version) { - if (WEBP_ABI_IS_INCOMPATIBLE(version, WEBP_MUX_ABI_VERSION)) { - return NULL; - } else { - WebPMux* const mux = (WebPMux*)WebPSafeMalloc(1ULL, sizeof(WebPMux)); - if (mux != NULL) MuxInit(mux); - return mux; - } -} - -// Delete all images in 'wpi_list'. -static void DeleteAllImages(WebPMuxImage** const wpi_list) { - while (*wpi_list != NULL) { - *wpi_list = MuxImageDelete(*wpi_list); - } -} - -static void MuxRelease(WebPMux* const mux) { - assert(mux != NULL); - DeleteAllImages(&mux->images_); - ChunkListDelete(&mux->vp8x_); - ChunkListDelete(&mux->iccp_); - ChunkListDelete(&mux->anim_); - ChunkListDelete(&mux->exif_); - ChunkListDelete(&mux->xmp_); - ChunkListDelete(&mux->unknown_); -} - -void WebPMuxDelete(WebPMux* mux) { - if (mux != NULL) { - MuxRelease(mux); - WebPSafeFree(mux); - } -} - -//------------------------------------------------------------------------------ -// Helper method(s). - -// Handy MACRO, makes MuxSet() very symmetric to MuxGet(). -#define SWITCH_ID_LIST(INDEX, LIST) \ - if (idx == (INDEX)) { \ - err = ChunkAssignData(&chunk, data, copy_data, tag); \ - if (err == WEBP_MUX_OK) { \ - err = ChunkSetHead(&chunk, (LIST)); \ - } \ - return err; \ - } - -static WebPMuxError MuxSet(WebPMux* const mux, uint32_t tag, - const WebPData* const data, int copy_data) { - WebPChunk chunk; - WebPMuxError err = WEBP_MUX_NOT_FOUND; - const CHUNK_INDEX idx = ChunkGetIndexFromTag(tag); - assert(mux != NULL); - assert(!IsWPI(kChunks[idx].id)); - - ChunkInit(&chunk); - SWITCH_ID_LIST(IDX_VP8X, &mux->vp8x_); - SWITCH_ID_LIST(IDX_ICCP, &mux->iccp_); - SWITCH_ID_LIST(IDX_ANIM, &mux->anim_); - SWITCH_ID_LIST(IDX_EXIF, &mux->exif_); - SWITCH_ID_LIST(IDX_XMP, &mux->xmp_); - SWITCH_ID_LIST(IDX_UNKNOWN, &mux->unknown_); - return err; -} -#undef SWITCH_ID_LIST - -// Create data for frame given image data, offsets and duration. -static WebPMuxError CreateFrameData( - int width, int height, const WebPMuxFrameInfo* const info, - WebPData* const frame) { - uint8_t* frame_bytes; - const size_t frame_size = kChunks[IDX_ANMF].size; - - assert(width > 0 && height > 0 && info->duration >= 0); - assert(info->dispose_method == (info->dispose_method & 1)); - // Note: assertion on upper bounds is done in PutLE24(). - - frame_bytes = (uint8_t*)WebPSafeMalloc(1ULL, frame_size); - if (frame_bytes == NULL) return WEBP_MUX_MEMORY_ERROR; - - PutLE24(frame_bytes + 0, info->x_offset / 2); - PutLE24(frame_bytes + 3, info->y_offset / 2); - - PutLE24(frame_bytes + 6, width - 1); - PutLE24(frame_bytes + 9, height - 1); - PutLE24(frame_bytes + 12, info->duration); - frame_bytes[15] = - (info->blend_method == WEBP_MUX_NO_BLEND ? 2 : 0) | - (info->dispose_method == WEBP_MUX_DISPOSE_BACKGROUND ? 1 : 0); - - frame->bytes = frame_bytes; - frame->size = frame_size; - return WEBP_MUX_OK; -} - -// Outputs image data given a bitstream. The bitstream can either be a -// single-image WebP file or raw VP8/VP8L data. -// Also outputs 'is_lossless' to be true if the given bitstream is lossless. -static WebPMuxError GetImageData(const WebPData* const bitstream, - WebPData* const image, WebPData* const alpha, - int* const is_lossless) { - WebPDataInit(alpha); // Default: no alpha. - if (bitstream->size < TAG_SIZE || - memcmp(bitstream->bytes, "RIFF", TAG_SIZE)) { - // It is NOT webp file data. Return input data as is. - *image = *bitstream; - } else { - // It is webp file data. Extract image data from it. - const WebPMuxImage* wpi; - WebPMux* const mux = WebPMuxCreate(bitstream, 0); - if (mux == NULL) return WEBP_MUX_BAD_DATA; - wpi = mux->images_; - assert(wpi != NULL && wpi->img_ != NULL); - *image = wpi->img_->data_; - if (wpi->alpha_ != NULL) { - *alpha = wpi->alpha_->data_; - } - WebPMuxDelete(mux); - } - *is_lossless = VP8LCheckSignature(image->bytes, image->size); - return WEBP_MUX_OK; -} - -static WebPMuxError DeleteChunks(WebPChunk** chunk_list, uint32_t tag) { - WebPMuxError err = WEBP_MUX_NOT_FOUND; - assert(chunk_list); - while (*chunk_list) { - WebPChunk* const chunk = *chunk_list; - if (chunk->tag_ == tag) { - *chunk_list = ChunkDelete(chunk); - err = WEBP_MUX_OK; - } else { - chunk_list = &chunk->next_; - } - } - return err; -} - -static WebPMuxError MuxDeleteAllNamedData(WebPMux* const mux, uint32_t tag) { - const WebPChunkId id = ChunkGetIdFromTag(tag); - assert(mux != NULL); - if (IsWPI(id)) return WEBP_MUX_INVALID_ARGUMENT; - return DeleteChunks(MuxGetChunkListFromId(mux, id), tag); -} - -//------------------------------------------------------------------------------ -// Set API(s). - -WebPMuxError WebPMuxSetChunk(WebPMux* mux, const char fourcc[4], - const WebPData* chunk_data, int copy_data) { - uint32_t tag; - WebPMuxError err; - if (mux == NULL || fourcc == NULL || chunk_data == NULL || - chunk_data->bytes == NULL || chunk_data->size > MAX_CHUNK_PAYLOAD) { - return WEBP_MUX_INVALID_ARGUMENT; - } - tag = ChunkGetTagFromFourCC(fourcc); - - // Delete existing chunk(s) with the same 'fourcc'. - err = MuxDeleteAllNamedData(mux, tag); - if (err != WEBP_MUX_OK && err != WEBP_MUX_NOT_FOUND) return err; - - // Add the given chunk. - return MuxSet(mux, tag, chunk_data, copy_data); -} - -// Creates a chunk from given 'data' and sets it as 1st chunk in 'chunk_list'. -static WebPMuxError AddDataToChunkList( - const WebPData* const data, int copy_data, uint32_t tag, - WebPChunk** chunk_list) { - WebPChunk chunk; - WebPMuxError err; - ChunkInit(&chunk); - err = ChunkAssignData(&chunk, data, copy_data, tag); - if (err != WEBP_MUX_OK) goto Err; - err = ChunkSetHead(&chunk, chunk_list); - if (err != WEBP_MUX_OK) goto Err; - return WEBP_MUX_OK; - Err: - ChunkRelease(&chunk); - return err; -} - -// Extracts image & alpha data from the given bitstream and then sets wpi.alpha_ -// and wpi.img_ appropriately. -static WebPMuxError SetAlphaAndImageChunks( - const WebPData* const bitstream, int copy_data, WebPMuxImage* const wpi) { - int is_lossless = 0; - WebPData image, alpha; - WebPMuxError err = GetImageData(bitstream, &image, &alpha, &is_lossless); - const int image_tag = - is_lossless ? kChunks[IDX_VP8L].tag : kChunks[IDX_VP8].tag; - if (err != WEBP_MUX_OK) return err; - if (alpha.bytes != NULL) { - err = AddDataToChunkList(&alpha, copy_data, kChunks[IDX_ALPHA].tag, - &wpi->alpha_); - if (err != WEBP_MUX_OK) return err; - } - err = AddDataToChunkList(&image, copy_data, image_tag, &wpi->img_); - if (err != WEBP_MUX_OK) return err; - return MuxImageFinalize(wpi) ? WEBP_MUX_OK : WEBP_MUX_INVALID_ARGUMENT; -} - -WebPMuxError WebPMuxSetImage(WebPMux* mux, const WebPData* bitstream, - int copy_data) { - WebPMuxImage wpi; - WebPMuxError err; - - // Sanity checks. - if (mux == NULL || bitstream == NULL || bitstream->bytes == NULL || - bitstream->size > MAX_CHUNK_PAYLOAD) { - return WEBP_MUX_INVALID_ARGUMENT; - } - - if (mux->images_ != NULL) { - // Only one 'simple image' can be added in mux. So, remove present images. - DeleteAllImages(&mux->images_); - } - - MuxImageInit(&wpi); - err = SetAlphaAndImageChunks(bitstream, copy_data, &wpi); - if (err != WEBP_MUX_OK) goto Err; - - // Add this WebPMuxImage to mux. - err = MuxImagePush(&wpi, &mux->images_); - if (err != WEBP_MUX_OK) goto Err; - - // All is well. - return WEBP_MUX_OK; - - Err: // Something bad happened. - MuxImageRelease(&wpi); - return err; -} - -WebPMuxError WebPMuxPushFrame(WebPMux* mux, const WebPMuxFrameInfo* info, - int copy_data) { - WebPMuxImage wpi; - WebPMuxError err; - - // Sanity checks. - if (mux == NULL || info == NULL) return WEBP_MUX_INVALID_ARGUMENT; - - if (info->id != WEBP_CHUNK_ANMF) return WEBP_MUX_INVALID_ARGUMENT; - - if (info->bitstream.bytes == NULL || - info->bitstream.size > MAX_CHUNK_PAYLOAD) { - return WEBP_MUX_INVALID_ARGUMENT; - } - - if (mux->images_ != NULL) { - const WebPMuxImage* const image = mux->images_; - const uint32_t image_id = (image->header_ != NULL) ? - ChunkGetIdFromTag(image->header_->tag_) : WEBP_CHUNK_IMAGE; - if (image_id != info->id) { - return WEBP_MUX_INVALID_ARGUMENT; // Conflicting frame types. - } - } - - MuxImageInit(&wpi); - err = SetAlphaAndImageChunks(&info->bitstream, copy_data, &wpi); - if (err != WEBP_MUX_OK) goto Err; - assert(wpi.img_ != NULL); // As SetAlphaAndImageChunks() was successful. - - { - WebPData frame; - const uint32_t tag = kChunks[IDX_ANMF].tag; - WebPMuxFrameInfo tmp = *info; - tmp.x_offset &= ~1; // Snap offsets to even. - tmp.y_offset &= ~1; - if (tmp.x_offset < 0 || tmp.x_offset >= MAX_POSITION_OFFSET || - tmp.y_offset < 0 || tmp.y_offset >= MAX_POSITION_OFFSET || - (tmp.duration < 0 || tmp.duration >= MAX_DURATION) || - tmp.dispose_method != (tmp.dispose_method & 1)) { - err = WEBP_MUX_INVALID_ARGUMENT; - goto Err; - } - err = CreateFrameData(wpi.width_, wpi.height_, &tmp, &frame); - if (err != WEBP_MUX_OK) goto Err; - // Add frame chunk (with copy_data = 1). - err = AddDataToChunkList(&frame, 1, tag, &wpi.header_); - WebPDataClear(&frame); // frame owned by wpi.header_ now. - if (err != WEBP_MUX_OK) goto Err; - } - - // Add this WebPMuxImage to mux. - err = MuxImagePush(&wpi, &mux->images_); - if (err != WEBP_MUX_OK) goto Err; - - // All is well. - return WEBP_MUX_OK; - - Err: // Something bad happened. - MuxImageRelease(&wpi); - return err; -} - -WebPMuxError WebPMuxSetAnimationParams(WebPMux* mux, - const WebPMuxAnimParams* params) { - WebPMuxError err; - uint8_t data[ANIM_CHUNK_SIZE]; - const WebPData anim = { data, ANIM_CHUNK_SIZE }; - - if (mux == NULL || params == NULL) return WEBP_MUX_INVALID_ARGUMENT; - if (params->loop_count < 0 || params->loop_count >= MAX_LOOP_COUNT) { - return WEBP_MUX_INVALID_ARGUMENT; - } - - // Delete any existing ANIM chunk(s). - err = MuxDeleteAllNamedData(mux, kChunks[IDX_ANIM].tag); - if (err != WEBP_MUX_OK && err != WEBP_MUX_NOT_FOUND) return err; - - // Set the animation parameters. - PutLE32(data, params->bgcolor); - PutLE16(data + 4, params->loop_count); - return MuxSet(mux, kChunks[IDX_ANIM].tag, &anim, 1); -} - -WebPMuxError WebPMuxSetCanvasSize(WebPMux* mux, - int width, int height) { - WebPMuxError err; - if (mux == NULL) { - return WEBP_MUX_INVALID_ARGUMENT; - } - if (width < 0 || height < 0 || - width > MAX_CANVAS_SIZE || height > MAX_CANVAS_SIZE) { - return WEBP_MUX_INVALID_ARGUMENT; - } - if (width * (uint64_t)height >= MAX_IMAGE_AREA) { - return WEBP_MUX_INVALID_ARGUMENT; - } - if ((width * height) == 0 && (width | height) != 0) { - // one of width / height is zero, but not both -> invalid! - return WEBP_MUX_INVALID_ARGUMENT; - } - // If we already assembled a VP8X chunk, invalidate it. - err = MuxDeleteAllNamedData(mux, kChunks[IDX_VP8X].tag); - if (err != WEBP_MUX_OK && err != WEBP_MUX_NOT_FOUND) return err; - - mux->canvas_width_ = width; - mux->canvas_height_ = height; - return WEBP_MUX_OK; -} - -//------------------------------------------------------------------------------ -// Delete API(s). - -WebPMuxError WebPMuxDeleteChunk(WebPMux* mux, const char fourcc[4]) { - if (mux == NULL || fourcc == NULL) return WEBP_MUX_INVALID_ARGUMENT; - return MuxDeleteAllNamedData(mux, ChunkGetTagFromFourCC(fourcc)); -} - -WebPMuxError WebPMuxDeleteFrame(WebPMux* mux, uint32_t nth) { - if (mux == NULL) return WEBP_MUX_INVALID_ARGUMENT; - return MuxImageDeleteNth(&mux->images_, nth); -} - -//------------------------------------------------------------------------------ -// Assembly of the WebP RIFF file. - -static WebPMuxError GetFrameInfo( - const WebPChunk* const frame_chunk, - int* const x_offset, int* const y_offset, int* const duration) { - const WebPData* const data = &frame_chunk->data_; - const size_t expected_data_size = ANMF_CHUNK_SIZE; - assert(frame_chunk->tag_ == kChunks[IDX_ANMF].tag); - assert(frame_chunk != NULL); - if (data->size != expected_data_size) return WEBP_MUX_INVALID_ARGUMENT; - - *x_offset = 2 * GetLE24(data->bytes + 0); - *y_offset = 2 * GetLE24(data->bytes + 3); - *duration = GetLE24(data->bytes + 12); - return WEBP_MUX_OK; -} - -static WebPMuxError GetImageInfo(const WebPMuxImage* const wpi, - int* const x_offset, int* const y_offset, - int* const duration, - int* const width, int* const height) { - const WebPChunk* const frame_chunk = wpi->header_; - WebPMuxError err; - assert(wpi != NULL); - assert(frame_chunk != NULL); - - // Get offsets and duration from ANMF chunk. - err = GetFrameInfo(frame_chunk, x_offset, y_offset, duration); - if (err != WEBP_MUX_OK) return err; - - // Get width and height from VP8/VP8L chunk. - if (width != NULL) *width = wpi->width_; - if (height != NULL) *height = wpi->height_; - return WEBP_MUX_OK; -} - -// Returns the tightest dimension for the canvas considering the image list. -static WebPMuxError GetAdjustedCanvasSize(const WebPMux* const mux, - int* const width, int* const height) { - WebPMuxImage* wpi = NULL; - assert(mux != NULL); - assert(width != NULL && height != NULL); - - wpi = mux->images_; - assert(wpi != NULL); - assert(wpi->img_ != NULL); - - if (wpi->next_ != NULL) { - int max_x = 0, max_y = 0; - // if we have a chain of wpi's, header_ is necessarily set - assert(wpi->header_ != NULL); - // Aggregate the bounding box for animation frames. - for (; wpi != NULL; wpi = wpi->next_) { - int x_offset = 0, y_offset = 0, duration = 0, w = 0, h = 0; - const WebPMuxError err = GetImageInfo(wpi, &x_offset, &y_offset, - &duration, &w, &h); - const int max_x_pos = x_offset + w; - const int max_y_pos = y_offset + h; - if (err != WEBP_MUX_OK) return err; - assert(x_offset < MAX_POSITION_OFFSET); - assert(y_offset < MAX_POSITION_OFFSET); - - if (max_x_pos > max_x) max_x = max_x_pos; - if (max_y_pos > max_y) max_y = max_y_pos; - } - *width = max_x; - *height = max_y; - } else { - // For a single image, canvas dimensions are same as image dimensions. - *width = wpi->width_; - *height = wpi->height_; - } - return WEBP_MUX_OK; -} - -// VP8X format: -// Total Size : 10, -// Flags : 4 bytes, -// Width : 3 bytes, -// Height : 3 bytes. -static WebPMuxError CreateVP8XChunk(WebPMux* const mux) { - WebPMuxError err = WEBP_MUX_OK; - uint32_t flags = 0; - int width = 0; - int height = 0; - uint8_t data[VP8X_CHUNK_SIZE]; - const WebPData vp8x = { data, VP8X_CHUNK_SIZE }; - const WebPMuxImage* images = NULL; - - assert(mux != NULL); - images = mux->images_; // First image. - if (images == NULL || images->img_ == NULL || - images->img_->data_.bytes == NULL) { - return WEBP_MUX_INVALID_ARGUMENT; - } - - // If VP8X chunk(s) is(are) already present, remove them (and later add new - // VP8X chunk with updated flags). - err = MuxDeleteAllNamedData(mux, kChunks[IDX_VP8X].tag); - if (err != WEBP_MUX_OK && err != WEBP_MUX_NOT_FOUND) return err; - - // Set flags. - if (mux->iccp_ != NULL && mux->iccp_->data_.bytes != NULL) { - flags |= ICCP_FLAG; - } - if (mux->exif_ != NULL && mux->exif_->data_.bytes != NULL) { - flags |= EXIF_FLAG; - } - if (mux->xmp_ != NULL && mux->xmp_->data_.bytes != NULL) { - flags |= XMP_FLAG; - } - if (images->header_ != NULL) { - if (images->header_->tag_ == kChunks[IDX_ANMF].tag) { - // This is an image with animation. - flags |= ANIMATION_FLAG; - } - } - if (MuxImageCount(images, WEBP_CHUNK_ALPHA) > 0) { - flags |= ALPHA_FLAG; // Some images have an alpha channel. - } - - err = GetAdjustedCanvasSize(mux, &width, &height); - if (err != WEBP_MUX_OK) return err; - - if (width <= 0 || height <= 0) { - return WEBP_MUX_INVALID_ARGUMENT; - } - if (width > MAX_CANVAS_SIZE || height > MAX_CANVAS_SIZE) { - return WEBP_MUX_INVALID_ARGUMENT; - } - - if (mux->canvas_width_ != 0 || mux->canvas_height_ != 0) { - if (width > mux->canvas_width_ || height > mux->canvas_height_) { - return WEBP_MUX_INVALID_ARGUMENT; - } - width = mux->canvas_width_; - height = mux->canvas_height_; - } - - if (flags == 0 && mux->unknown_ == NULL) { - // For simple file format, VP8X chunk should not be added. - return WEBP_MUX_OK; - } - - if (MuxHasAlpha(images)) { - // This means some frames explicitly/implicitly contain alpha. - // Note: This 'flags' update must NOT be done for a lossless image - // without a VP8X chunk! - flags |= ALPHA_FLAG; - } - - PutLE32(data + 0, flags); // VP8X chunk flags. - PutLE24(data + 4, width - 1); // canvas width. - PutLE24(data + 7, height - 1); // canvas height. - - return MuxSet(mux, kChunks[IDX_VP8X].tag, &vp8x, 1); -} - -// Cleans up 'mux' by removing any unnecessary chunks. -static WebPMuxError MuxCleanup(WebPMux* const mux) { - int num_frames; - int num_anim_chunks; - - // If we have an image with a single frame, and its rectangle - // covers the whole canvas, convert it to a non-animated image - // (to avoid writing ANMF chunk unnecessarily). - WebPMuxError err = WebPMuxNumChunks(mux, kChunks[IDX_ANMF].id, &num_frames); - if (err != WEBP_MUX_OK) return err; - if (num_frames == 1) { - WebPMuxImage* frame = NULL; - err = MuxImageGetNth((const WebPMuxImage**)&mux->images_, 1, &frame); - assert(err == WEBP_MUX_OK); // We know that one frame does exist. - assert(frame != NULL); - if (frame->header_ != NULL && - ((mux->canvas_width_ == 0 && mux->canvas_height_ == 0) || - (frame->width_ == mux->canvas_width_ && - frame->height_ == mux->canvas_height_))) { - assert(frame->header_->tag_ == kChunks[IDX_ANMF].tag); - ChunkDelete(frame->header_); // Removes ANMF chunk. - frame->header_ = NULL; - num_frames = 0; - } - } - // Remove ANIM chunk if this is a non-animated image. - err = WebPMuxNumChunks(mux, kChunks[IDX_ANIM].id, &num_anim_chunks); - if (err != WEBP_MUX_OK) return err; - if (num_anim_chunks >= 1 && num_frames == 0) { - err = MuxDeleteAllNamedData(mux, kChunks[IDX_ANIM].tag); - if (err != WEBP_MUX_OK) return err; - } - return WEBP_MUX_OK; -} - -// Total size of a list of images. -static size_t ImageListDiskSize(const WebPMuxImage* wpi_list) { - size_t size = 0; - while (wpi_list != NULL) { - size += MuxImageDiskSize(wpi_list); - wpi_list = wpi_list->next_; - } - return size; -} - -// Write out the given list of images into 'dst'. -static uint8_t* ImageListEmit(const WebPMuxImage* wpi_list, uint8_t* dst) { - while (wpi_list != NULL) { - dst = MuxImageEmit(wpi_list, dst); - wpi_list = wpi_list->next_; - } - return dst; -} - -WebPMuxError WebPMuxAssemble(WebPMux* mux, WebPData* assembled_data) { - size_t size = 0; - uint8_t* data = NULL; - uint8_t* dst = NULL; - WebPMuxError err; - - if (assembled_data == NULL) { - return WEBP_MUX_INVALID_ARGUMENT; - } - // Clean up returned data, in case something goes wrong. - memset(assembled_data, 0, sizeof(*assembled_data)); - - if (mux == NULL) { - return WEBP_MUX_INVALID_ARGUMENT; - } - - // Finalize mux. - err = MuxCleanup(mux); - if (err != WEBP_MUX_OK) return err; - err = CreateVP8XChunk(mux); - if (err != WEBP_MUX_OK) return err; - - // Allocate data. - size = ChunkListDiskSize(mux->vp8x_) + ChunkListDiskSize(mux->iccp_) - + ChunkListDiskSize(mux->anim_) + ImageListDiskSize(mux->images_) - + ChunkListDiskSize(mux->exif_) + ChunkListDiskSize(mux->xmp_) - + ChunkListDiskSize(mux->unknown_) + RIFF_HEADER_SIZE; - - data = (uint8_t*)WebPSafeMalloc(1ULL, size); - if (data == NULL) return WEBP_MUX_MEMORY_ERROR; - - // Emit header & chunks. - dst = MuxEmitRiffHeader(data, size); - dst = ChunkListEmit(mux->vp8x_, dst); - dst = ChunkListEmit(mux->iccp_, dst); - dst = ChunkListEmit(mux->anim_, dst); - dst = ImageListEmit(mux->images_, dst); - dst = ChunkListEmit(mux->exif_, dst); - dst = ChunkListEmit(mux->xmp_, dst); - dst = ChunkListEmit(mux->unknown_, dst); - assert(dst == data + size); - - // Validate mux. - err = MuxValidate(mux); - if (err != WEBP_MUX_OK) { - WebPSafeFree(data); - data = NULL; - size = 0; - } - - // Finalize data. - assembled_data->bytes = data; - assembled_data->size = size; - - return err; -} - -//------------------------------------------------------------------------------ diff --git a/Extended/libwebp/src/mux/muxi.h b/Extended/libwebp/src/mux/muxi.h deleted file mode 100644 index ad3e1bd..0000000 --- a/Extended/libwebp/src/mux/muxi.h +++ /dev/null @@ -1,234 +0,0 @@ -// Copyright 2011 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Internal header for mux library. -// -// Author: Urvang (urvang@google.com) - -#ifndef WEBP_MUX_MUXI_H_ -#define WEBP_MUX_MUXI_H_ - -#include -#include -#include "src/dec/vp8i_dec.h" -#include "src/dec/vp8li_dec.h" -#include "src/webp/mux.h" - -#ifdef __cplusplus -extern "C" { -#endif - -//------------------------------------------------------------------------------ -// Defines and constants. - -#define MUX_MAJ_VERSION 1 -#define MUX_MIN_VERSION 1 -#define MUX_REV_VERSION 0 - -// Chunk object. -typedef struct WebPChunk WebPChunk; -struct WebPChunk { - uint32_t tag_; - int owner_; // True if *data_ memory is owned internally. - // VP8X, ANIM, and other internally created chunks - // like ANMF are always owned. - WebPData data_; - WebPChunk* next_; -}; - -// MuxImage object. Store a full WebP image (including ANMF chunk, ALPH -// chunk and VP8/VP8L chunk), -typedef struct WebPMuxImage WebPMuxImage; -struct WebPMuxImage { - WebPChunk* header_; // Corresponds to WEBP_CHUNK_ANMF. - WebPChunk* alpha_; // Corresponds to WEBP_CHUNK_ALPHA. - WebPChunk* img_; // Corresponds to WEBP_CHUNK_IMAGE. - WebPChunk* unknown_; // Corresponds to WEBP_CHUNK_UNKNOWN. - int width_; - int height_; - int has_alpha_; // Through ALPH chunk or as part of VP8L. - int is_partial_; // True if only some of the chunks are filled. - WebPMuxImage* next_; -}; - -// Main mux object. Stores data chunks. -struct WebPMux { - WebPMuxImage* images_; - WebPChunk* iccp_; - WebPChunk* exif_; - WebPChunk* xmp_; - WebPChunk* anim_; - WebPChunk* vp8x_; - - WebPChunk* unknown_; - int canvas_width_; - int canvas_height_; -}; - -// CHUNK_INDEX enum: used for indexing within 'kChunks' (defined below) only. -// Note: the reason for having two enums ('WebPChunkId' and 'CHUNK_INDEX') is to -// allow two different chunks to have the same id (e.g. WebPChunkId -// 'WEBP_CHUNK_IMAGE' can correspond to CHUNK_INDEX 'IDX_VP8' or 'IDX_VP8L'). -typedef enum { - IDX_VP8X = 0, - IDX_ICCP, - IDX_ANIM, - IDX_ANMF, - IDX_ALPHA, - IDX_VP8, - IDX_VP8L, - IDX_EXIF, - IDX_XMP, - IDX_UNKNOWN, - - IDX_NIL, - IDX_LAST_CHUNK -} CHUNK_INDEX; - -#define NIL_TAG 0x00000000u // To signal void chunk. - -typedef struct { - uint32_t tag; - WebPChunkId id; - uint32_t size; -} ChunkInfo; - -extern const ChunkInfo kChunks[IDX_LAST_CHUNK]; - -//------------------------------------------------------------------------------ -// Chunk object management. - -// Initialize. -void ChunkInit(WebPChunk* const chunk); - -// Get chunk index from chunk tag. Returns IDX_UNKNOWN if not found. -CHUNK_INDEX ChunkGetIndexFromTag(uint32_t tag); - -// Get chunk id from chunk tag. Returns WEBP_CHUNK_UNKNOWN if not found. -WebPChunkId ChunkGetIdFromTag(uint32_t tag); - -// Convert a fourcc string to a tag. -uint32_t ChunkGetTagFromFourCC(const char fourcc[4]); - -// Get chunk index from fourcc. Returns IDX_UNKNOWN if given fourcc is unknown. -CHUNK_INDEX ChunkGetIndexFromFourCC(const char fourcc[4]); - -// Search for nth chunk with given 'tag' in the chunk list. -// nth = 0 means "last of the list". -WebPChunk* ChunkSearchList(WebPChunk* first, uint32_t nth, uint32_t tag); - -// Fill the chunk with the given data. -WebPMuxError ChunkAssignData(WebPChunk* chunk, const WebPData* const data, - int copy_data, uint32_t tag); - -// Sets 'chunk' as the only element in 'chunk_list' if it is empty. -// On success ownership is transferred from 'chunk' to the 'chunk_list'. -WebPMuxError ChunkSetHead(WebPChunk* const chunk, WebPChunk** const chunk_list); -// Sets 'chunk' at last position in the 'chunk_list'. -// On success ownership is transferred from 'chunk' to the 'chunk_list'. -// *chunk_list also points towards the last valid element of the initial -// *chunk_list. -WebPMuxError ChunkAppend(WebPChunk* const chunk, WebPChunk*** const chunk_list); - -// Releases chunk and returns chunk->next_. -WebPChunk* ChunkRelease(WebPChunk* const chunk); - -// Deletes given chunk & returns chunk->next_. -WebPChunk* ChunkDelete(WebPChunk* const chunk); - -// Deletes all chunks in the given chunk list. -void ChunkListDelete(WebPChunk** const chunk_list); - -// Returns size of the chunk including chunk header and padding byte (if any). -static WEBP_INLINE size_t SizeWithPadding(size_t chunk_size) { - assert(chunk_size <= MAX_CHUNK_PAYLOAD); - return CHUNK_HEADER_SIZE + ((chunk_size + 1) & ~1U); -} - -// Size of a chunk including header and padding. -static WEBP_INLINE size_t ChunkDiskSize(const WebPChunk* chunk) { - const size_t data_size = chunk->data_.size; - return SizeWithPadding(data_size); -} - -// Total size of a list of chunks. -size_t ChunkListDiskSize(const WebPChunk* chunk_list); - -// Write out the given list of chunks into 'dst'. -uint8_t* ChunkListEmit(const WebPChunk* chunk_list, uint8_t* dst); - -//------------------------------------------------------------------------------ -// MuxImage object management. - -// Initialize. -void MuxImageInit(WebPMuxImage* const wpi); - -// Releases image 'wpi' and returns wpi->next. -WebPMuxImage* MuxImageRelease(WebPMuxImage* const wpi); - -// Delete image 'wpi' and return the next image in the list or NULL. -// 'wpi' can be NULL. -WebPMuxImage* MuxImageDelete(WebPMuxImage* const wpi); - -// Count number of images matching the given tag id in the 'wpi_list'. -// If id == WEBP_CHUNK_NIL, all images will be matched. -int MuxImageCount(const WebPMuxImage* wpi_list, WebPChunkId id); - -// Update width/height/has_alpha info from chunks within wpi. -// Also remove ALPH chunk if not needed. -int MuxImageFinalize(WebPMuxImage* const wpi); - -// Check if given ID corresponds to an image related chunk. -static WEBP_INLINE int IsWPI(WebPChunkId id) { - switch (id) { - case WEBP_CHUNK_ANMF: - case WEBP_CHUNK_ALPHA: - case WEBP_CHUNK_IMAGE: return 1; - default: return 0; - } -} - -// Pushes 'wpi' at the end of 'wpi_list'. -WebPMuxError MuxImagePush(const WebPMuxImage* wpi, WebPMuxImage** wpi_list); - -// Delete nth image in the image list. -WebPMuxError MuxImageDeleteNth(WebPMuxImage** wpi_list, uint32_t nth); - -// Get nth image in the image list. -WebPMuxError MuxImageGetNth(const WebPMuxImage** wpi_list, uint32_t nth, - WebPMuxImage** wpi); - -// Total size of the given image. -size_t MuxImageDiskSize(const WebPMuxImage* const wpi); - -// Write out the given image into 'dst'. -uint8_t* MuxImageEmit(const WebPMuxImage* const wpi, uint8_t* dst); - -//------------------------------------------------------------------------------ -// Helper methods for mux. - -// Checks if the given image list contains at least one image with alpha. -int MuxHasAlpha(const WebPMuxImage* images); - -// Write out RIFF header into 'data', given total data size 'size'. -uint8_t* MuxEmitRiffHeader(uint8_t* const data, size_t size); - -// Returns the list where chunk with given ID is to be inserted in mux. -WebPChunk** MuxGetChunkListFromId(const WebPMux* mux, WebPChunkId id); - -// Validates the given mux object. -WebPMuxError MuxValidate(const WebPMux* const mux); - -//------------------------------------------------------------------------------ - -#ifdef __cplusplus -} // extern "C" -#endif - -#endif // WEBP_MUX_MUXI_H_ diff --git a/Extended/libwebp/src/mux/muxinternal.c b/Extended/libwebp/src/mux/muxinternal.c deleted file mode 100644 index b9ee671..0000000 --- a/Extended/libwebp/src/mux/muxinternal.c +++ /dev/null @@ -1,548 +0,0 @@ -// Copyright 2011 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Internal objects and utils for mux. -// -// Authors: Urvang (urvang@google.com) -// Vikas (vikasa@google.com) - -#include -#include "src/mux/muxi.h" -#include "src/utils/utils.h" - -#define UNDEFINED_CHUNK_SIZE ((uint32_t)(-1)) - -const ChunkInfo kChunks[] = { - { MKFOURCC('V', 'P', '8', 'X'), WEBP_CHUNK_VP8X, VP8X_CHUNK_SIZE }, - { MKFOURCC('I', 'C', 'C', 'P'), WEBP_CHUNK_ICCP, UNDEFINED_CHUNK_SIZE }, - { MKFOURCC('A', 'N', 'I', 'M'), WEBP_CHUNK_ANIM, ANIM_CHUNK_SIZE }, - { MKFOURCC('A', 'N', 'M', 'F'), WEBP_CHUNK_ANMF, ANMF_CHUNK_SIZE }, - { MKFOURCC('A', 'L', 'P', 'H'), WEBP_CHUNK_ALPHA, UNDEFINED_CHUNK_SIZE }, - { MKFOURCC('V', 'P', '8', ' '), WEBP_CHUNK_IMAGE, UNDEFINED_CHUNK_SIZE }, - { MKFOURCC('V', 'P', '8', 'L'), WEBP_CHUNK_IMAGE, UNDEFINED_CHUNK_SIZE }, - { MKFOURCC('E', 'X', 'I', 'F'), WEBP_CHUNK_EXIF, UNDEFINED_CHUNK_SIZE }, - { MKFOURCC('X', 'M', 'P', ' '), WEBP_CHUNK_XMP, UNDEFINED_CHUNK_SIZE }, - { NIL_TAG, WEBP_CHUNK_UNKNOWN, UNDEFINED_CHUNK_SIZE }, - - { NIL_TAG, WEBP_CHUNK_NIL, UNDEFINED_CHUNK_SIZE } -}; - -//------------------------------------------------------------------------------ - -int WebPGetMuxVersion(void) { - return (MUX_MAJ_VERSION << 16) | (MUX_MIN_VERSION << 8) | MUX_REV_VERSION; -} - -//------------------------------------------------------------------------------ -// Life of a chunk object. - -void ChunkInit(WebPChunk* const chunk) { - assert(chunk); - memset(chunk, 0, sizeof(*chunk)); - chunk->tag_ = NIL_TAG; -} - -WebPChunk* ChunkRelease(WebPChunk* const chunk) { - WebPChunk* next; - if (chunk == NULL) return NULL; - if (chunk->owner_) { - WebPDataClear(&chunk->data_); - } - next = chunk->next_; - ChunkInit(chunk); - return next; -} - -//------------------------------------------------------------------------------ -// Chunk misc methods. - -CHUNK_INDEX ChunkGetIndexFromTag(uint32_t tag) { - int i; - for (i = 0; kChunks[i].tag != NIL_TAG; ++i) { - if (tag == kChunks[i].tag) return (CHUNK_INDEX)i; - } - return IDX_UNKNOWN; -} - -WebPChunkId ChunkGetIdFromTag(uint32_t tag) { - int i; - for (i = 0; kChunks[i].tag != NIL_TAG; ++i) { - if (tag == kChunks[i].tag) return kChunks[i].id; - } - return WEBP_CHUNK_UNKNOWN; -} - -uint32_t ChunkGetTagFromFourCC(const char fourcc[4]) { - return MKFOURCC(fourcc[0], fourcc[1], fourcc[2], fourcc[3]); -} - -CHUNK_INDEX ChunkGetIndexFromFourCC(const char fourcc[4]) { - const uint32_t tag = ChunkGetTagFromFourCC(fourcc); - return ChunkGetIndexFromTag(tag); -} - -//------------------------------------------------------------------------------ -// Chunk search methods. - -// Returns next chunk in the chunk list with the given tag. -static WebPChunk* ChunkSearchNextInList(WebPChunk* chunk, uint32_t tag) { - while (chunk != NULL && chunk->tag_ != tag) { - chunk = chunk->next_; - } - return chunk; -} - -WebPChunk* ChunkSearchList(WebPChunk* first, uint32_t nth, uint32_t tag) { - uint32_t iter = nth; - first = ChunkSearchNextInList(first, tag); - if (first == NULL) return NULL; - - while (--iter != 0) { - WebPChunk* next_chunk = ChunkSearchNextInList(first->next_, tag); - if (next_chunk == NULL) break; - first = next_chunk; - } - return ((nth > 0) && (iter > 0)) ? NULL : first; -} - -//------------------------------------------------------------------------------ -// Chunk writer methods. - -WebPMuxError ChunkAssignData(WebPChunk* chunk, const WebPData* const data, - int copy_data, uint32_t tag) { - // For internally allocated chunks, always copy data & make it owner of data. - if (tag == kChunks[IDX_VP8X].tag || tag == kChunks[IDX_ANIM].tag) { - copy_data = 1; - } - - ChunkRelease(chunk); - - if (data != NULL) { - if (copy_data) { // Copy data. - if (!WebPDataCopy(data, &chunk->data_)) return WEBP_MUX_MEMORY_ERROR; - chunk->owner_ = 1; // Chunk is owner of data. - } else { // Don't copy data. - chunk->data_ = *data; - } - } - chunk->tag_ = tag; - return WEBP_MUX_OK; -} - -WebPMuxError ChunkSetHead(WebPChunk* const chunk, - WebPChunk** const chunk_list) { - WebPChunk* new_chunk; - - assert(chunk_list != NULL); - if (*chunk_list != NULL) { - return WEBP_MUX_NOT_FOUND; - } - - new_chunk = (WebPChunk*)WebPSafeMalloc(1ULL, sizeof(*new_chunk)); - if (new_chunk == NULL) return WEBP_MUX_MEMORY_ERROR; - *new_chunk = *chunk; - chunk->owner_ = 0; - new_chunk->next_ = NULL; - *chunk_list = new_chunk; - return WEBP_MUX_OK; -} - -WebPMuxError ChunkAppend(WebPChunk* const chunk, - WebPChunk*** const chunk_list) { - assert(chunk_list != NULL && *chunk_list != NULL); - - if (**chunk_list == NULL) { - ChunkSetHead(chunk, *chunk_list); - } else { - WebPChunk* last_chunk = **chunk_list; - while (last_chunk->next_ != NULL) last_chunk = last_chunk->next_; - ChunkSetHead(chunk, &last_chunk->next_); - *chunk_list = &last_chunk->next_; - } - return WEBP_MUX_OK; -} - -//------------------------------------------------------------------------------ -// Chunk deletion method(s). - -WebPChunk* ChunkDelete(WebPChunk* const chunk) { - WebPChunk* const next = ChunkRelease(chunk); - WebPSafeFree(chunk); - return next; -} - -void ChunkListDelete(WebPChunk** const chunk_list) { - while (*chunk_list != NULL) { - *chunk_list = ChunkDelete(*chunk_list); - } -} - -//------------------------------------------------------------------------------ -// Chunk serialization methods. - -static uint8_t* ChunkEmit(const WebPChunk* const chunk, uint8_t* dst) { - const size_t chunk_size = chunk->data_.size; - assert(chunk); - assert(chunk->tag_ != NIL_TAG); - PutLE32(dst + 0, chunk->tag_); - PutLE32(dst + TAG_SIZE, (uint32_t)chunk_size); - assert(chunk_size == (uint32_t)chunk_size); - memcpy(dst + CHUNK_HEADER_SIZE, chunk->data_.bytes, chunk_size); - if (chunk_size & 1) - dst[CHUNK_HEADER_SIZE + chunk_size] = 0; // Add padding. - return dst + ChunkDiskSize(chunk); -} - -uint8_t* ChunkListEmit(const WebPChunk* chunk_list, uint8_t* dst) { - while (chunk_list != NULL) { - dst = ChunkEmit(chunk_list, dst); - chunk_list = chunk_list->next_; - } - return dst; -} - -size_t ChunkListDiskSize(const WebPChunk* chunk_list) { - size_t size = 0; - while (chunk_list != NULL) { - size += ChunkDiskSize(chunk_list); - chunk_list = chunk_list->next_; - } - return size; -} - -//------------------------------------------------------------------------------ -// Life of a MuxImage object. - -void MuxImageInit(WebPMuxImage* const wpi) { - assert(wpi); - memset(wpi, 0, sizeof(*wpi)); -} - -WebPMuxImage* MuxImageRelease(WebPMuxImage* const wpi) { - WebPMuxImage* next; - if (wpi == NULL) return NULL; - // There should be at most one chunk of header_, alpha_, img_ but we call - // ChunkListDelete to be safe - ChunkListDelete(&wpi->header_); - ChunkListDelete(&wpi->alpha_); - ChunkListDelete(&wpi->img_); - ChunkListDelete(&wpi->unknown_); - - next = wpi->next_; - MuxImageInit(wpi); - return next; -} - -//------------------------------------------------------------------------------ -// MuxImage search methods. - -// Get a reference to appropriate chunk list within an image given chunk tag. -static WebPChunk** GetChunkListFromId(const WebPMuxImage* const wpi, - WebPChunkId id) { - assert(wpi != NULL); - switch (id) { - case WEBP_CHUNK_ANMF: return (WebPChunk**)&wpi->header_; - case WEBP_CHUNK_ALPHA: return (WebPChunk**)&wpi->alpha_; - case WEBP_CHUNK_IMAGE: return (WebPChunk**)&wpi->img_; - default: return NULL; - } -} - -int MuxImageCount(const WebPMuxImage* wpi_list, WebPChunkId id) { - int count = 0; - const WebPMuxImage* current; - for (current = wpi_list; current != NULL; current = current->next_) { - if (id == WEBP_CHUNK_NIL) { - ++count; // Special case: count all images. - } else { - const WebPChunk* const wpi_chunk = *GetChunkListFromId(current, id); - if (wpi_chunk != NULL) { - const WebPChunkId wpi_chunk_id = ChunkGetIdFromTag(wpi_chunk->tag_); - if (wpi_chunk_id == id) ++count; // Count images with a matching 'id'. - } - } - } - return count; -} - -// Outputs a pointer to 'prev_wpi->next_', -// where 'prev_wpi' is the pointer to the image at position (nth - 1). -// Returns true if nth image was found. -static int SearchImageToGetOrDelete(WebPMuxImage** wpi_list, uint32_t nth, - WebPMuxImage*** const location) { - uint32_t count = 0; - assert(wpi_list); - *location = wpi_list; - - if (nth == 0) { - nth = MuxImageCount(*wpi_list, WEBP_CHUNK_NIL); - if (nth == 0) return 0; // Not found. - } - - while (*wpi_list != NULL) { - WebPMuxImage* const cur_wpi = *wpi_list; - ++count; - if (count == nth) return 1; // Found. - wpi_list = &cur_wpi->next_; - *location = wpi_list; - } - return 0; // Not found. -} - -//------------------------------------------------------------------------------ -// MuxImage writer methods. - -WebPMuxError MuxImagePush(const WebPMuxImage* wpi, WebPMuxImage** wpi_list) { - WebPMuxImage* new_wpi; - - while (*wpi_list != NULL) { - WebPMuxImage* const cur_wpi = *wpi_list; - if (cur_wpi->next_ == NULL) break; - wpi_list = &cur_wpi->next_; - } - - new_wpi = (WebPMuxImage*)WebPSafeMalloc(1ULL, sizeof(*new_wpi)); - if (new_wpi == NULL) return WEBP_MUX_MEMORY_ERROR; - *new_wpi = *wpi; - new_wpi->next_ = NULL; - - if (*wpi_list != NULL) { - (*wpi_list)->next_ = new_wpi; - } else { - *wpi_list = new_wpi; - } - return WEBP_MUX_OK; -} - -//------------------------------------------------------------------------------ -// MuxImage deletion methods. - -WebPMuxImage* MuxImageDelete(WebPMuxImage* const wpi) { - // Delete the components of wpi. If wpi is NULL this is a noop. - WebPMuxImage* const next = MuxImageRelease(wpi); - WebPSafeFree(wpi); - return next; -} - -WebPMuxError MuxImageDeleteNth(WebPMuxImage** wpi_list, uint32_t nth) { - assert(wpi_list); - if (!SearchImageToGetOrDelete(wpi_list, nth, &wpi_list)) { - return WEBP_MUX_NOT_FOUND; - } - *wpi_list = MuxImageDelete(*wpi_list); - return WEBP_MUX_OK; -} - -//------------------------------------------------------------------------------ -// MuxImage reader methods. - -WebPMuxError MuxImageGetNth(const WebPMuxImage** wpi_list, uint32_t nth, - WebPMuxImage** wpi) { - assert(wpi_list); - assert(wpi); - if (!SearchImageToGetOrDelete((WebPMuxImage**)wpi_list, nth, - (WebPMuxImage***)&wpi_list)) { - return WEBP_MUX_NOT_FOUND; - } - *wpi = (WebPMuxImage*)*wpi_list; - return WEBP_MUX_OK; -} - -//------------------------------------------------------------------------------ -// MuxImage serialization methods. - -// Size of an image. -size_t MuxImageDiskSize(const WebPMuxImage* const wpi) { - size_t size = 0; - if (wpi->header_ != NULL) size += ChunkDiskSize(wpi->header_); - if (wpi->alpha_ != NULL) size += ChunkDiskSize(wpi->alpha_); - if (wpi->img_ != NULL) size += ChunkDiskSize(wpi->img_); - if (wpi->unknown_ != NULL) size += ChunkListDiskSize(wpi->unknown_); - return size; -} - -// Special case as ANMF chunk encapsulates other image chunks. -static uint8_t* ChunkEmitSpecial(const WebPChunk* const header, - size_t total_size, uint8_t* dst) { - const size_t header_size = header->data_.size; - const size_t offset_to_next = total_size - CHUNK_HEADER_SIZE; - assert(header->tag_ == kChunks[IDX_ANMF].tag); - PutLE32(dst + 0, header->tag_); - PutLE32(dst + TAG_SIZE, (uint32_t)offset_to_next); - assert(header_size == (uint32_t)header_size); - memcpy(dst + CHUNK_HEADER_SIZE, header->data_.bytes, header_size); - if (header_size & 1) { - dst[CHUNK_HEADER_SIZE + header_size] = 0; // Add padding. - } - return dst + ChunkDiskSize(header); -} - -uint8_t* MuxImageEmit(const WebPMuxImage* const wpi, uint8_t* dst) { - // Ordering of chunks to be emitted is strictly as follows: - // 1. ANMF chunk (if present). - // 2. ALPH chunk (if present). - // 3. VP8/VP8L chunk. - assert(wpi); - if (wpi->header_ != NULL) { - dst = ChunkEmitSpecial(wpi->header_, MuxImageDiskSize(wpi), dst); - } - if (wpi->alpha_ != NULL) dst = ChunkEmit(wpi->alpha_, dst); - if (wpi->img_ != NULL) dst = ChunkEmit(wpi->img_, dst); - if (wpi->unknown_ != NULL) dst = ChunkListEmit(wpi->unknown_, dst); - return dst; -} - -//------------------------------------------------------------------------------ -// Helper methods for mux. - -int MuxHasAlpha(const WebPMuxImage* images) { - while (images != NULL) { - if (images->has_alpha_) return 1; - images = images->next_; - } - return 0; -} - -uint8_t* MuxEmitRiffHeader(uint8_t* const data, size_t size) { - PutLE32(data + 0, MKFOURCC('R', 'I', 'F', 'F')); - PutLE32(data + TAG_SIZE, (uint32_t)size - CHUNK_HEADER_SIZE); - assert(size == (uint32_t)size); - PutLE32(data + TAG_SIZE + CHUNK_SIZE_BYTES, MKFOURCC('W', 'E', 'B', 'P')); - return data + RIFF_HEADER_SIZE; -} - -WebPChunk** MuxGetChunkListFromId(const WebPMux* mux, WebPChunkId id) { - assert(mux != NULL); - switch (id) { - case WEBP_CHUNK_VP8X: return (WebPChunk**)&mux->vp8x_; - case WEBP_CHUNK_ICCP: return (WebPChunk**)&mux->iccp_; - case WEBP_CHUNK_ANIM: return (WebPChunk**)&mux->anim_; - case WEBP_CHUNK_EXIF: return (WebPChunk**)&mux->exif_; - case WEBP_CHUNK_XMP: return (WebPChunk**)&mux->xmp_; - default: return (WebPChunk**)&mux->unknown_; - } -} - -static int IsNotCompatible(int feature, int num_items) { - return (feature != 0) != (num_items > 0); -} - -#define NO_FLAG ((WebPFeatureFlags)0) - -// Test basic constraints: -// retrieval, maximum number of chunks by index (use -1 to skip) -// and feature incompatibility (use NO_FLAG to skip). -// On success returns WEBP_MUX_OK and stores the chunk count in *num. -static WebPMuxError ValidateChunk(const WebPMux* const mux, CHUNK_INDEX idx, - WebPFeatureFlags feature, - uint32_t vp8x_flags, - int max, int* num) { - const WebPMuxError err = - WebPMuxNumChunks(mux, kChunks[idx].id, num); - if (err != WEBP_MUX_OK) return err; - if (max > -1 && *num > max) return WEBP_MUX_INVALID_ARGUMENT; - if (feature != NO_FLAG && IsNotCompatible(vp8x_flags & feature, *num)) { - return WEBP_MUX_INVALID_ARGUMENT; - } - return WEBP_MUX_OK; -} - -WebPMuxError MuxValidate(const WebPMux* const mux) { - int num_iccp; - int num_exif; - int num_xmp; - int num_anim; - int num_frames; - int num_vp8x; - int num_images; - int num_alpha; - uint32_t flags; - WebPMuxError err; - - // Verify mux is not NULL. - if (mux == NULL) return WEBP_MUX_INVALID_ARGUMENT; - - // Verify mux has at least one image. - if (mux->images_ == NULL) return WEBP_MUX_INVALID_ARGUMENT; - - err = WebPMuxGetFeatures(mux, &flags); - if (err != WEBP_MUX_OK) return err; - - // At most one color profile chunk. - err = ValidateChunk(mux, IDX_ICCP, ICCP_FLAG, flags, 1, &num_iccp); - if (err != WEBP_MUX_OK) return err; - - // At most one EXIF metadata. - err = ValidateChunk(mux, IDX_EXIF, EXIF_FLAG, flags, 1, &num_exif); - if (err != WEBP_MUX_OK) return err; - - // At most one XMP metadata. - err = ValidateChunk(mux, IDX_XMP, XMP_FLAG, flags, 1, &num_xmp); - if (err != WEBP_MUX_OK) return err; - - // Animation: ANIMATION_FLAG, ANIM chunk and ANMF chunk(s) are consistent. - // At most one ANIM chunk. - err = ValidateChunk(mux, IDX_ANIM, NO_FLAG, flags, 1, &num_anim); - if (err != WEBP_MUX_OK) return err; - err = ValidateChunk(mux, IDX_ANMF, NO_FLAG, flags, -1, &num_frames); - if (err != WEBP_MUX_OK) return err; - - { - const int has_animation = !!(flags & ANIMATION_FLAG); - if (has_animation && (num_anim == 0 || num_frames == 0)) { - return WEBP_MUX_INVALID_ARGUMENT; - } - if (!has_animation && (num_anim == 1 || num_frames > 0)) { - return WEBP_MUX_INVALID_ARGUMENT; - } - if (!has_animation) { - const WebPMuxImage* images = mux->images_; - // There can be only one image. - if (images == NULL || images->next_ != NULL) { - return WEBP_MUX_INVALID_ARGUMENT; - } - // Size must match. - if (mux->canvas_width_ > 0) { - if (images->width_ != mux->canvas_width_ || - images->height_ != mux->canvas_height_) { - return WEBP_MUX_INVALID_ARGUMENT; - } - } - } - } - - // Verify either VP8X chunk is present OR there is only one elem in - // mux->images_. - err = ValidateChunk(mux, IDX_VP8X, NO_FLAG, flags, 1, &num_vp8x); - if (err != WEBP_MUX_OK) return err; - err = ValidateChunk(mux, IDX_VP8, NO_FLAG, flags, -1, &num_images); - if (err != WEBP_MUX_OK) return err; - if (num_vp8x == 0 && num_images != 1) return WEBP_MUX_INVALID_ARGUMENT; - - // ALPHA_FLAG & alpha chunk(s) are consistent. - // Note: ALPHA_FLAG can be set when there is actually no Alpha data present. - if (MuxHasAlpha(mux->images_)) { - if (num_vp8x > 0) { - // VP8X chunk is present, so it should contain ALPHA_FLAG. - if (!(flags & ALPHA_FLAG)) return WEBP_MUX_INVALID_ARGUMENT; - } else { - // VP8X chunk is not present, so ALPH chunks should NOT be present either. - err = WebPMuxNumChunks(mux, WEBP_CHUNK_ALPHA, &num_alpha); - if (err != WEBP_MUX_OK) return err; - if (num_alpha > 0) return WEBP_MUX_INVALID_ARGUMENT; - } - } - - return WEBP_MUX_OK; -} - -#undef NO_FLAG - -//------------------------------------------------------------------------------ - diff --git a/Extended/libwebp/src/mux/muxread.c b/Extended/libwebp/src/mux/muxread.c deleted file mode 100644 index ae3b876..0000000 --- a/Extended/libwebp/src/mux/muxread.c +++ /dev/null @@ -1,558 +0,0 @@ -// Copyright 2011 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Read APIs for mux. -// -// Authors: Urvang (urvang@google.com) -// Vikas (vikasa@google.com) - -#include -#include "src/mux/muxi.h" -#include "src/utils/utils.h" - -//------------------------------------------------------------------------------ -// Helper method(s). - -// Handy MACRO. -#define SWITCH_ID_LIST(INDEX, LIST) \ - if (idx == (INDEX)) { \ - const WebPChunk* const chunk = ChunkSearchList((LIST), nth, \ - kChunks[(INDEX)].tag); \ - if (chunk) { \ - *data = chunk->data_; \ - return WEBP_MUX_OK; \ - } else { \ - return WEBP_MUX_NOT_FOUND; \ - } \ - } - -static WebPMuxError MuxGet(const WebPMux* const mux, CHUNK_INDEX idx, - uint32_t nth, WebPData* const data) { - assert(mux != NULL); - assert(!IsWPI(kChunks[idx].id)); - WebPDataInit(data); - - SWITCH_ID_LIST(IDX_VP8X, mux->vp8x_); - SWITCH_ID_LIST(IDX_ICCP, mux->iccp_); - SWITCH_ID_LIST(IDX_ANIM, mux->anim_); - SWITCH_ID_LIST(IDX_EXIF, mux->exif_); - SWITCH_ID_LIST(IDX_XMP, mux->xmp_); - assert(idx != IDX_UNKNOWN); - return WEBP_MUX_NOT_FOUND; -} -#undef SWITCH_ID_LIST - -// Fill the chunk with the given data (includes chunk header bytes), after some -// verifications. -static WebPMuxError ChunkVerifyAndAssign(WebPChunk* chunk, - const uint8_t* data, size_t data_size, - size_t riff_size, int copy_data) { - uint32_t chunk_size; - WebPData chunk_data; - - // Sanity checks. - if (data_size < CHUNK_HEADER_SIZE) return WEBP_MUX_NOT_ENOUGH_DATA; - chunk_size = GetLE32(data + TAG_SIZE); - if (chunk_size > MAX_CHUNK_PAYLOAD) return WEBP_MUX_BAD_DATA; - - { - const size_t chunk_disk_size = SizeWithPadding(chunk_size); - if (chunk_disk_size > riff_size) return WEBP_MUX_BAD_DATA; - if (chunk_disk_size > data_size) return WEBP_MUX_NOT_ENOUGH_DATA; - } - - // Data assignment. - chunk_data.bytes = data + CHUNK_HEADER_SIZE; - chunk_data.size = chunk_size; - return ChunkAssignData(chunk, &chunk_data, copy_data, GetLE32(data + 0)); -} - -int MuxImageFinalize(WebPMuxImage* const wpi) { - const WebPChunk* const img = wpi->img_; - const WebPData* const image = &img->data_; - const int is_lossless = (img->tag_ == kChunks[IDX_VP8L].tag); - int w, h; - int vp8l_has_alpha = 0; - const int ok = is_lossless ? - VP8LGetInfo(image->bytes, image->size, &w, &h, &vp8l_has_alpha) : - VP8GetInfo(image->bytes, image->size, image->size, &w, &h); - assert(img != NULL); - if (ok) { - // Ignore ALPH chunk accompanying VP8L. - if (is_lossless && (wpi->alpha_ != NULL)) { - ChunkDelete(wpi->alpha_); - wpi->alpha_ = NULL; - } - wpi->width_ = w; - wpi->height_ = h; - wpi->has_alpha_ = vp8l_has_alpha || (wpi->alpha_ != NULL); - } - return ok; -} - -static int MuxImageParse(const WebPChunk* const chunk, int copy_data, - WebPMuxImage* const wpi) { - const uint8_t* bytes = chunk->data_.bytes; - size_t size = chunk->data_.size; - const uint8_t* const last = (bytes == NULL) ? NULL : bytes + size; - WebPChunk subchunk; - size_t subchunk_size; - WebPChunk** unknown_chunk_list = &wpi->unknown_; - ChunkInit(&subchunk); - - assert(chunk->tag_ == kChunks[IDX_ANMF].tag); - assert(!wpi->is_partial_); - - // ANMF. - { - const size_t hdr_size = ANMF_CHUNK_SIZE; - const WebPData temp = { bytes, hdr_size }; - // Each of ANMF chunk contain a header at the beginning. So, its size should - // be at least 'hdr_size'. - if (size < hdr_size) goto Fail; - ChunkAssignData(&subchunk, &temp, copy_data, chunk->tag_); - } - ChunkSetHead(&subchunk, &wpi->header_); - wpi->is_partial_ = 1; // Waiting for ALPH and/or VP8/VP8L chunks. - - // Rest of the chunks. - subchunk_size = ChunkDiskSize(&subchunk) - CHUNK_HEADER_SIZE; - bytes += subchunk_size; - size -= subchunk_size; - - while (bytes != last) { - ChunkInit(&subchunk); - if (ChunkVerifyAndAssign(&subchunk, bytes, size, size, - copy_data) != WEBP_MUX_OK) { - goto Fail; - } - switch (ChunkGetIdFromTag(subchunk.tag_)) { - case WEBP_CHUNK_ALPHA: - if (wpi->alpha_ != NULL) goto Fail; // Consecutive ALPH chunks. - if (ChunkSetHead(&subchunk, &wpi->alpha_) != WEBP_MUX_OK) goto Fail; - wpi->is_partial_ = 1; // Waiting for a VP8 chunk. - break; - case WEBP_CHUNK_IMAGE: - if (wpi->img_ != NULL) goto Fail; // Only 1 image chunk allowed. - if (ChunkSetHead(&subchunk, &wpi->img_) != WEBP_MUX_OK) goto Fail; - if (!MuxImageFinalize(wpi)) goto Fail; - wpi->is_partial_ = 0; // wpi is completely filled. - break; - case WEBP_CHUNK_UNKNOWN: - if (wpi->is_partial_) { - goto Fail; // Encountered an unknown chunk - // before some image chunks. - } - if (ChunkAppend(&subchunk, &unknown_chunk_list) != WEBP_MUX_OK) { - goto Fail; - } - break; - default: - goto Fail; - break; - } - subchunk_size = ChunkDiskSize(&subchunk); - bytes += subchunk_size; - size -= subchunk_size; - } - if (wpi->is_partial_) goto Fail; - return 1; - - Fail: - ChunkRelease(&subchunk); - return 0; -} - -//------------------------------------------------------------------------------ -// Create a mux object from WebP-RIFF data. - -WebPMux* WebPMuxCreateInternal(const WebPData* bitstream, int copy_data, - int version) { - size_t riff_size; - uint32_t tag; - const uint8_t* end; - WebPMux* mux = NULL; - WebPMuxImage* wpi = NULL; - const uint8_t* data; - size_t size; - WebPChunk chunk; - // Stores the end of the chunk lists so that it is faster to append data to - // their ends. - WebPChunk** chunk_list_ends[WEBP_CHUNK_NIL + 1] = { NULL }; - ChunkInit(&chunk); - - // Sanity checks. - if (WEBP_ABI_IS_INCOMPATIBLE(version, WEBP_MUX_ABI_VERSION)) { - return NULL; // version mismatch - } - if (bitstream == NULL) return NULL; - - data = bitstream->bytes; - size = bitstream->size; - - if (data == NULL) return NULL; - if (size < RIFF_HEADER_SIZE + CHUNK_HEADER_SIZE) return NULL; - if (GetLE32(data + 0) != MKFOURCC('R', 'I', 'F', 'F') || - GetLE32(data + CHUNK_HEADER_SIZE) != MKFOURCC('W', 'E', 'B', 'P')) { - return NULL; - } - - mux = WebPMuxNew(); - if (mux == NULL) return NULL; - - tag = GetLE32(data + RIFF_HEADER_SIZE); - if (tag != kChunks[IDX_VP8].tag && - tag != kChunks[IDX_VP8L].tag && - tag != kChunks[IDX_VP8X].tag) { - goto Err; // First chunk should be VP8, VP8L or VP8X. - } - - riff_size = GetLE32(data + TAG_SIZE); - if (riff_size > MAX_CHUNK_PAYLOAD) goto Err; - - // Note this padding is historical and differs from demux.c which does not - // pad the file size. - riff_size = SizeWithPadding(riff_size); - if (riff_size < CHUNK_HEADER_SIZE) goto Err; - if (riff_size > size) goto Err; - // There's no point in reading past the end of the RIFF chunk. - if (size > riff_size + CHUNK_HEADER_SIZE) { - size = riff_size + CHUNK_HEADER_SIZE; - } - - end = data + size; - data += RIFF_HEADER_SIZE; - size -= RIFF_HEADER_SIZE; - - wpi = (WebPMuxImage*)WebPSafeMalloc(1ULL, sizeof(*wpi)); - if (wpi == NULL) goto Err; - MuxImageInit(wpi); - - // Loop over chunks. - while (data != end) { - size_t data_size; - WebPChunkId id; - if (ChunkVerifyAndAssign(&chunk, data, size, riff_size, - copy_data) != WEBP_MUX_OK) { - goto Err; - } - data_size = ChunkDiskSize(&chunk); - id = ChunkGetIdFromTag(chunk.tag_); - switch (id) { - case WEBP_CHUNK_ALPHA: - if (wpi->alpha_ != NULL) goto Err; // Consecutive ALPH chunks. - if (ChunkSetHead(&chunk, &wpi->alpha_) != WEBP_MUX_OK) goto Err; - wpi->is_partial_ = 1; // Waiting for a VP8 chunk. - break; - case WEBP_CHUNK_IMAGE: - if (ChunkSetHead(&chunk, &wpi->img_) != WEBP_MUX_OK) goto Err; - if (!MuxImageFinalize(wpi)) goto Err; - wpi->is_partial_ = 0; // wpi is completely filled. - PushImage: - // Add this to mux->images_ list. - if (MuxImagePush(wpi, &mux->images_) != WEBP_MUX_OK) goto Err; - MuxImageInit(wpi); // Reset for reading next image. - break; - case WEBP_CHUNK_ANMF: - if (wpi->is_partial_) goto Err; // Previous wpi is still incomplete. - if (!MuxImageParse(&chunk, copy_data, wpi)) goto Err; - ChunkRelease(&chunk); - goto PushImage; - break; - default: // A non-image chunk. - if (wpi->is_partial_) goto Err; // Encountered a non-image chunk before - // getting all chunks of an image. - if (chunk_list_ends[id] == NULL) { - chunk_list_ends[id] = - MuxGetChunkListFromId(mux, id); // List to add this chunk. - } - if (ChunkAppend(&chunk, &chunk_list_ends[id]) != WEBP_MUX_OK) goto Err; - if (id == WEBP_CHUNK_VP8X) { // grab global specs - if (data_size < CHUNK_HEADER_SIZE + VP8X_CHUNK_SIZE) goto Err; - mux->canvas_width_ = GetLE24(data + 12) + 1; - mux->canvas_height_ = GetLE24(data + 15) + 1; - } - break; - } - data += data_size; - size -= data_size; - ChunkInit(&chunk); - } - - // Incomplete image. - if (wpi->is_partial_) goto Err; - - // Validate mux if complete. - if (MuxValidate(mux) != WEBP_MUX_OK) goto Err; - - MuxImageDelete(wpi); - return mux; // All OK; - - Err: // Something bad happened. - ChunkRelease(&chunk); - MuxImageDelete(wpi); - WebPMuxDelete(mux); - return NULL; -} - -//------------------------------------------------------------------------------ -// Get API(s). - -// Validates that the given mux has a single image. -static WebPMuxError ValidateForSingleImage(const WebPMux* const mux) { - const int num_images = MuxImageCount(mux->images_, WEBP_CHUNK_IMAGE); - const int num_frames = MuxImageCount(mux->images_, WEBP_CHUNK_ANMF); - - if (num_images == 0) { - // No images in mux. - return WEBP_MUX_NOT_FOUND; - } else if (num_images == 1 && num_frames == 0) { - // Valid case (single image). - return WEBP_MUX_OK; - } else { - // Frame case OR an invalid mux. - return WEBP_MUX_INVALID_ARGUMENT; - } -} - -// Get the canvas width, height and flags after validating that VP8X/VP8/VP8L -// chunk and canvas size are valid. -static WebPMuxError MuxGetCanvasInfo(const WebPMux* const mux, - int* width, int* height, uint32_t* flags) { - int w, h; - uint32_t f = 0; - WebPData data; - assert(mux != NULL); - - // Check if VP8X chunk is present. - if (MuxGet(mux, IDX_VP8X, 1, &data) == WEBP_MUX_OK) { - if (data.size < VP8X_CHUNK_SIZE) return WEBP_MUX_BAD_DATA; - f = GetLE32(data.bytes + 0); - w = GetLE24(data.bytes + 4) + 1; - h = GetLE24(data.bytes + 7) + 1; - } else { - const WebPMuxImage* const wpi = mux->images_; - // Grab user-forced canvas size as default. - w = mux->canvas_width_; - h = mux->canvas_height_; - if (w == 0 && h == 0 && ValidateForSingleImage(mux) == WEBP_MUX_OK) { - // single image and not forced canvas size => use dimension of first frame - assert(wpi != NULL); - w = wpi->width_; - h = wpi->height_; - } - if (wpi != NULL) { - if (wpi->has_alpha_) f |= ALPHA_FLAG; - } - } - if (w * (uint64_t)h >= MAX_IMAGE_AREA) return WEBP_MUX_BAD_DATA; - - if (width != NULL) *width = w; - if (height != NULL) *height = h; - if (flags != NULL) *flags = f; - return WEBP_MUX_OK; -} - -WebPMuxError WebPMuxGetCanvasSize(const WebPMux* mux, int* width, int* height) { - if (mux == NULL || width == NULL || height == NULL) { - return WEBP_MUX_INVALID_ARGUMENT; - } - return MuxGetCanvasInfo(mux, width, height, NULL); -} - -WebPMuxError WebPMuxGetFeatures(const WebPMux* mux, uint32_t* flags) { - if (mux == NULL || flags == NULL) return WEBP_MUX_INVALID_ARGUMENT; - return MuxGetCanvasInfo(mux, NULL, NULL, flags); -} - -static uint8_t* EmitVP8XChunk(uint8_t* const dst, int width, - int height, uint32_t flags) { - const size_t vp8x_size = CHUNK_HEADER_SIZE + VP8X_CHUNK_SIZE; - assert(width >= 1 && height >= 1); - assert(width <= MAX_CANVAS_SIZE && height <= MAX_CANVAS_SIZE); - assert(width * (uint64_t)height < MAX_IMAGE_AREA); - PutLE32(dst, MKFOURCC('V', 'P', '8', 'X')); - PutLE32(dst + TAG_SIZE, VP8X_CHUNK_SIZE); - PutLE32(dst + CHUNK_HEADER_SIZE, flags); - PutLE24(dst + CHUNK_HEADER_SIZE + 4, width - 1); - PutLE24(dst + CHUNK_HEADER_SIZE + 7, height - 1); - return dst + vp8x_size; -} - -// Assemble a single image WebP bitstream from 'wpi'. -static WebPMuxError SynthesizeBitstream(const WebPMuxImage* const wpi, - WebPData* const bitstream) { - uint8_t* dst; - - // Allocate data. - const int need_vp8x = (wpi->alpha_ != NULL); - const size_t vp8x_size = need_vp8x ? CHUNK_HEADER_SIZE + VP8X_CHUNK_SIZE : 0; - const size_t alpha_size = need_vp8x ? ChunkDiskSize(wpi->alpha_) : 0; - // Note: No need to output ANMF chunk for a single image. - const size_t size = RIFF_HEADER_SIZE + vp8x_size + alpha_size + - ChunkDiskSize(wpi->img_); - uint8_t* const data = (uint8_t*)WebPSafeMalloc(1ULL, size); - if (data == NULL) return WEBP_MUX_MEMORY_ERROR; - - // There should be at most one alpha_ chunk and exactly one img_ chunk. - assert(wpi->alpha_ == NULL || wpi->alpha_->next_ == NULL); - assert(wpi->img_ != NULL && wpi->img_->next_ == NULL); - - // Main RIFF header. - dst = MuxEmitRiffHeader(data, size); - - if (need_vp8x) { - dst = EmitVP8XChunk(dst, wpi->width_, wpi->height_, ALPHA_FLAG); // VP8X. - dst = ChunkListEmit(wpi->alpha_, dst); // ALPH. - } - - // Bitstream. - dst = ChunkListEmit(wpi->img_, dst); - assert(dst == data + size); - - // Output. - bitstream->bytes = data; - bitstream->size = size; - return WEBP_MUX_OK; -} - -WebPMuxError WebPMuxGetChunk(const WebPMux* mux, const char fourcc[4], - WebPData* chunk_data) { - CHUNK_INDEX idx; - if (mux == NULL || fourcc == NULL || chunk_data == NULL) { - return WEBP_MUX_INVALID_ARGUMENT; - } - idx = ChunkGetIndexFromFourCC(fourcc); - if (IsWPI(kChunks[idx].id)) { // An image chunk. - return WEBP_MUX_INVALID_ARGUMENT; - } else if (idx != IDX_UNKNOWN) { // A known chunk type. - return MuxGet(mux, idx, 1, chunk_data); - } else { // An unknown chunk type. - const WebPChunk* const chunk = - ChunkSearchList(mux->unknown_, 1, ChunkGetTagFromFourCC(fourcc)); - if (chunk == NULL) return WEBP_MUX_NOT_FOUND; - *chunk_data = chunk->data_; - return WEBP_MUX_OK; - } -} - -static WebPMuxError MuxGetImageInternal(const WebPMuxImage* const wpi, - WebPMuxFrameInfo* const info) { - // Set some defaults for unrelated fields. - info->x_offset = 0; - info->y_offset = 0; - info->duration = 1; - info->dispose_method = WEBP_MUX_DISPOSE_NONE; - info->blend_method = WEBP_MUX_BLEND; - // Extract data for related fields. - info->id = ChunkGetIdFromTag(wpi->img_->tag_); - return SynthesizeBitstream(wpi, &info->bitstream); -} - -static WebPMuxError MuxGetFrameInternal(const WebPMuxImage* const wpi, - WebPMuxFrameInfo* const frame) { - const int is_frame = (wpi->header_->tag_ == kChunks[IDX_ANMF].tag); - const WebPData* frame_data; - if (!is_frame) return WEBP_MUX_INVALID_ARGUMENT; - assert(wpi->header_ != NULL); // Already checked by WebPMuxGetFrame(). - // Get frame chunk. - frame_data = &wpi->header_->data_; - if (frame_data->size < kChunks[IDX_ANMF].size) return WEBP_MUX_BAD_DATA; - // Extract info. - frame->x_offset = 2 * GetLE24(frame_data->bytes + 0); - frame->y_offset = 2 * GetLE24(frame_data->bytes + 3); - { - const uint8_t bits = frame_data->bytes[15]; - frame->duration = GetLE24(frame_data->bytes + 12); - frame->dispose_method = - (bits & 1) ? WEBP_MUX_DISPOSE_BACKGROUND : WEBP_MUX_DISPOSE_NONE; - frame->blend_method = (bits & 2) ? WEBP_MUX_NO_BLEND : WEBP_MUX_BLEND; - } - frame->id = ChunkGetIdFromTag(wpi->header_->tag_); - return SynthesizeBitstream(wpi, &frame->bitstream); -} - -WebPMuxError WebPMuxGetFrame( - const WebPMux* mux, uint32_t nth, WebPMuxFrameInfo* frame) { - WebPMuxError err; - WebPMuxImage* wpi; - - // Sanity checks. - if (mux == NULL || frame == NULL) { - return WEBP_MUX_INVALID_ARGUMENT; - } - - // Get the nth WebPMuxImage. - err = MuxImageGetNth((const WebPMuxImage**)&mux->images_, nth, &wpi); - if (err != WEBP_MUX_OK) return err; - - // Get frame info. - if (wpi->header_ == NULL) { - return MuxGetImageInternal(wpi, frame); - } else { - return MuxGetFrameInternal(wpi, frame); - } -} - -WebPMuxError WebPMuxGetAnimationParams(const WebPMux* mux, - WebPMuxAnimParams* params) { - WebPData anim; - WebPMuxError err; - - if (mux == NULL || params == NULL) return WEBP_MUX_INVALID_ARGUMENT; - - err = MuxGet(mux, IDX_ANIM, 1, &anim); - if (err != WEBP_MUX_OK) return err; - if (anim.size < kChunks[WEBP_CHUNK_ANIM].size) return WEBP_MUX_BAD_DATA; - params->bgcolor = GetLE32(anim.bytes); - params->loop_count = GetLE16(anim.bytes + 4); - - return WEBP_MUX_OK; -} - -// Get chunk index from chunk id. Returns IDX_NIL if not found. -static CHUNK_INDEX ChunkGetIndexFromId(WebPChunkId id) { - int i; - for (i = 0; kChunks[i].id != WEBP_CHUNK_NIL; ++i) { - if (id == kChunks[i].id) return (CHUNK_INDEX)i; - } - return IDX_NIL; -} - -// Count number of chunks matching 'tag' in the 'chunk_list'. -// If tag == NIL_TAG, any tag will be matched. -static int CountChunks(const WebPChunk* const chunk_list, uint32_t tag) { - int count = 0; - const WebPChunk* current; - for (current = chunk_list; current != NULL; current = current->next_) { - if (tag == NIL_TAG || current->tag_ == tag) { - count++; // Count chunks whose tags match. - } - } - return count; -} - -WebPMuxError WebPMuxNumChunks(const WebPMux* mux, - WebPChunkId id, int* num_elements) { - if (mux == NULL || num_elements == NULL) { - return WEBP_MUX_INVALID_ARGUMENT; - } - - if (IsWPI(id)) { - *num_elements = MuxImageCount(mux->images_, id); - } else { - WebPChunk* const* chunk_list = MuxGetChunkListFromId(mux, id); - const CHUNK_INDEX idx = ChunkGetIndexFromId(id); - *num_elements = CountChunks(*chunk_list, kChunks[idx].tag); - } - - return WEBP_MUX_OK; -} - -//------------------------------------------------------------------------------ diff --git a/Extended/libwebp/src/utils/.deps/bit_reader_utils.Plo b/Extended/libwebp/src/utils/.deps/bit_reader_utils.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/utils/.deps/bit_reader_utils.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/utils/.deps/bit_writer_utils.Plo b/Extended/libwebp/src/utils/.deps/bit_writer_utils.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/utils/.deps/bit_writer_utils.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/utils/.deps/color_cache_utils.Plo b/Extended/libwebp/src/utils/.deps/color_cache_utils.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/utils/.deps/color_cache_utils.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/utils/.deps/filters_utils.Plo b/Extended/libwebp/src/utils/.deps/filters_utils.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/utils/.deps/filters_utils.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/utils/.deps/huffman_encode_utils.Plo b/Extended/libwebp/src/utils/.deps/huffman_encode_utils.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/utils/.deps/huffman_encode_utils.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/utils/.deps/huffman_utils.Plo b/Extended/libwebp/src/utils/.deps/huffman_utils.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/utils/.deps/huffman_utils.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/utils/.deps/quant_levels_dec_utils.Plo b/Extended/libwebp/src/utils/.deps/quant_levels_dec_utils.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/utils/.deps/quant_levels_dec_utils.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/utils/.deps/quant_levels_utils.Plo b/Extended/libwebp/src/utils/.deps/quant_levels_utils.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/utils/.deps/quant_levels_utils.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/utils/.deps/random_utils.Plo b/Extended/libwebp/src/utils/.deps/random_utils.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/utils/.deps/random_utils.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/utils/.deps/rescaler_utils.Plo b/Extended/libwebp/src/utils/.deps/rescaler_utils.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/utils/.deps/rescaler_utils.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/utils/.deps/thread_utils.Plo b/Extended/libwebp/src/utils/.deps/thread_utils.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/utils/.deps/thread_utils.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/utils/.deps/utils.Plo b/Extended/libwebp/src/utils/.deps/utils.Plo deleted file mode 100644 index 9ce06a8..0000000 --- a/Extended/libwebp/src/utils/.deps/utils.Plo +++ /dev/null @@ -1 +0,0 @@ -# dummy diff --git a/Extended/libwebp/src/utils/Makefile b/Extended/libwebp/src/utils/Makefile deleted file mode 100644 index 7a342d7..0000000 --- a/Extended/libwebp/src/utils/Makefile +++ /dev/null @@ -1,756 +0,0 @@ -# Makefile.in generated by automake 1.16.1 from Makefile.am. -# src/utils/Makefile. Generated from Makefile.in by configure. - -# Copyright (C) 1994-2018 Free Software Foundation, Inc. - -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - - - - - -am__is_gnu_make = { \ - if test -z '$(MAKELEVEL)'; then \ - false; \ - elif test -n '$(MAKE_HOST)'; then \ - true; \ - elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ - true; \ - else \ - false; \ - fi; \ -} -am__make_running_with_option = \ - case $${target_option-} in \ - ?) ;; \ - *) echo "am__make_running_with_option: internal error: invalid" \ - "target option '$${target_option-}' specified" >&2; \ - exit 1;; \ - esac; \ - has_opt=no; \ - sane_makeflags=$$MAKEFLAGS; \ - if $(am__is_gnu_make); then \ - sane_makeflags=$$MFLAGS; \ - else \ - case $$MAKEFLAGS in \ - *\\[\ \ ]*) \ - bs=\\; \ - sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ - | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ - esac; \ - fi; \ - skip_next=no; \ - strip_trailopt () \ - { \ - flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ - }; \ - for flg in $$sane_makeflags; do \ - test $$skip_next = yes && { skip_next=no; continue; }; \ - case $$flg in \ - *=*|--*) continue;; \ - -*I) strip_trailopt 'I'; skip_next=yes;; \ - -*I?*) strip_trailopt 'I';; \ - -*O) strip_trailopt 'O'; skip_next=yes;; \ - -*O?*) strip_trailopt 'O';; \ - -*l) strip_trailopt 'l'; skip_next=yes;; \ - -*l?*) strip_trailopt 'l';; \ - -[dEDm]) skip_next=yes;; \ - -[JT]) skip_next=yes;; \ - esac; \ - case $$flg in \ - *$$target_option*) has_opt=yes; break;; \ - esac; \ - done; \ - test $$has_opt = yes -am__make_dryrun = (target_option=n; $(am__make_running_with_option)) -am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) -pkgdatadir = $(datadir)/libwebp -pkgincludedir = $(includedir)/libwebp -pkglibdir = $(libdir)/libwebp -pkglibexecdir = $(libexecdir)/libwebp -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = x86_64-apple-darwin19.6.0 -host_triplet = x86_64-apple-darwin19.6.0 -#am__append_1 = libwebputilsdecode.la -subdir = src/utils -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pthread.m4 \ - $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ - $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ - $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -DIST_COMMON = $(srcdir)/Makefile.am $(common_HEADERS) \ - $(noinst_HEADERS) $(am__DIST_COMMON) -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = $(top_builddir)/src/webp/config.h -CONFIG_CLEAN_FILES = -CONFIG_CLEAN_VPATH_FILES = -LTLIBRARIES = $(noinst_LTLIBRARIES) -libwebputils_la_LIBADD = -am__objects_1 = bit_reader_utils.lo color_cache_utils.lo \ - filters_utils.lo huffman_utils.lo quant_levels_dec_utils.lo \ - rescaler_utils.lo random_utils.lo thread_utils.lo utils.lo -am__objects_2 = bit_writer_utils.lo huffman_encode_utils.lo \ - quant_levels_utils.lo -am_libwebputils_la_OBJECTS = $(am__objects_1) $(am__objects_2) -libwebputils_la_OBJECTS = $(am_libwebputils_la_OBJECTS) -AM_V_lt = $(am__v_lt_$(V)) -am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) -am__v_lt_0 = --silent -am__v_lt_1 = -libwebputilsdecode_la_LIBADD = -am__libwebputilsdecode_la_SOURCES_DIST = bit_reader_utils.c \ - bit_reader_utils.h bit_reader_inl_utils.h color_cache_utils.c \ - color_cache_utils.h endian_inl_utils.h filters_utils.c \ - filters_utils.h huffman_utils.c huffman_utils.h \ - quant_levels_dec_utils.c quant_levels_dec_utils.h \ - rescaler_utils.c rescaler_utils.h random_utils.c \ - random_utils.h thread_utils.c thread_utils.h utils.c utils.h -#am_libwebputilsdecode_la_OBJECTS = \ -# $(am__objects_1) -libwebputilsdecode_la_OBJECTS = $(am_libwebputilsdecode_la_OBJECTS) -#am_libwebputilsdecode_la_rpath = -AM_V_P = $(am__v_P_$(V)) -am__v_P_ = $(am__v_P_$(AM_DEFAULT_VERBOSITY)) -am__v_P_0 = false -am__v_P_1 = : -AM_V_GEN = $(am__v_GEN_$(V)) -am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) -am__v_GEN_0 = @echo " GEN " $@; -am__v_GEN_1 = -AM_V_at = $(am__v_at_$(V)) -am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) -am__v_at_0 = @ -am__v_at_1 = -DEFAULT_INCLUDES = -I. -I$(top_builddir)/src/webp -depcomp = $(SHELL) $(top_srcdir)/depcomp -am__maybe_remake_depfiles = depfiles -am__depfiles_remade = ./$(DEPDIR)/bit_reader_utils.Plo \ - ./$(DEPDIR)/bit_writer_utils.Plo \ - ./$(DEPDIR)/color_cache_utils.Plo \ - ./$(DEPDIR)/filters_utils.Plo \ - ./$(DEPDIR)/huffman_encode_utils.Plo \ - ./$(DEPDIR)/huffman_utils.Plo \ - ./$(DEPDIR)/quant_levels_dec_utils.Plo \ - ./$(DEPDIR)/quant_levels_utils.Plo \ - ./$(DEPDIR)/random_utils.Plo ./$(DEPDIR)/rescaler_utils.Plo \ - ./$(DEPDIR)/thread_utils.Plo ./$(DEPDIR)/utils.Plo -am__mv = mv -f -COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ - $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CFLAGS) $(CFLAGS) -AM_V_CC = $(am__v_CC_$(V)) -am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) -am__v_CC_0 = @echo " CC " $@; -am__v_CC_1 = -CCLD = $(CC) -LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ - $(AM_LDFLAGS) $(LDFLAGS) -o $@ -AM_V_CCLD = $(am__v_CCLD_$(V)) -am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) -am__v_CCLD_0 = @echo " CCLD " $@; -am__v_CCLD_1 = -SOURCES = $(libwebputils_la_SOURCES) $(libwebputilsdecode_la_SOURCES) -DIST_SOURCES = $(libwebputils_la_SOURCES) \ - $(am__libwebputilsdecode_la_SOURCES_DIST) -am__can_run_installinfo = \ - case $$AM_UPDATE_INFO_DIR in \ - n|no|NO) false;; \ - *) (install-info --version) >/dev/null 2>&1;; \ - esac -am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; -am__vpath_adj = case $$p in \ - $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ - *) f=$$p;; \ - esac; -am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; -am__install_max = 40 -am__nobase_strip_setup = \ - srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` -am__nobase_strip = \ - for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" -am__nobase_list = $(am__nobase_strip_setup); \ - for p in $$list; do echo "$$p $$p"; done | \ - sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ - $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ - if (++n[$$2] == $(am__install_max)) \ - { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ - END { for (dir in files) print dir, files[dir] }' -am__base_list = \ - sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ - sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' -am__uninstall_files_from_dir = { \ - test -z "$$files" \ - || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ - || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ - $(am__cd) "$$dir" && rm -f $$files; }; \ - } -am__installdirs = "$(DESTDIR)$(commondir)" -HEADERS = $(common_HEADERS) $(noinst_HEADERS) -am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) -# Read a list of newline-separated strings from the standard input, -# and print each of them once, without duplicates. Input order is -# *not* preserved. -am__uniquify_input = $(AWK) '\ - BEGIN { nonempty = 0; } \ - { items[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in items) print i; }; } \ -' -# Make sure the list of sources is unique. This is necessary because, -# e.g., the same source file might be shared among _SOURCES variables -# for different programs/libraries. -am__define_uniq_tagged_files = \ - list='$(am__tagged_files)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | $(am__uniquify_input)` -ETAGS = etags -CTAGS = ctags -am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = ${SHELL} /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp/missing aclocal-1.16 -AMTAR = $${TAR-tar} -AM_CFLAGS = -fvisibility=hidden -Wall -Wconstant-conversion -Wdeclaration-after-statement -Wextra -Wfloat-conversion -Wformat -Wformat-nonliteral -Wformat -Wformat-security -Wmissing-declarations -Wmissing-prototypes -Wold-style-definition -Wparentheses-equality -Wshadow -Wshorten-64-to-32 -Wundef -Wunreachable-code -Wunused -Wvla -Wno-deprecated-declarations -AM_CPPFLAGS = -DNDEBUG -I$(top_builddir) -I$(top_srcdir) -AM_DEFAULT_VERBOSITY = 0 -AR = ar -AUTOCONF = ${SHELL} /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp/missing autoconf -AUTOHEADER = ${SHELL} /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp/missing autoheader -AUTOMAKE = ${SHELL} /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp/missing automake-1.16 -AWK = awk -CC = gcc -CCDEPMODE = depmode=gcc3 -CFLAGS = -g -O2 -D_THREAD_SAFE -pthread -CPP = gcc -E -CPPFLAGS = -CYGPATH_W = echo -DEFS = -DHAVE_CONFIG_H -DEPDIR = .deps -DLLTOOL = false -DSYMUTIL = dsymutil -DUMPBIN = -ECHO_C = \c -ECHO_N = -ECHO_T = -EGREP = /usr/bin/grep -E -EXEEXT = -FGREP = /usr/bin/grep -F -GIF_INCLUDES = -GIF_LIBS = -lgif -GL_INCLUDES = -GL_LIBS = -framework GLUT -framework OpenGL -GREP = /usr/bin/grep -INSTALL = /opt/twitter_mde/homebrew_minimal/mde_bin/ginstall -c -INSTALL_DATA = ${INSTALL} -m 644 -INSTALL_PROGRAM = ${INSTALL} -INSTALL_SCRIPT = ${INSTALL} -INSTALL_STRIP_PROGRAM = $(install_sh) -c -s -JPEG_INCLUDES = -DWEBP_HAVE_JPEG -JPEG_LIBS = -ljpeg -LD = /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld -LDFLAGS = -LIBOBJS = -LIBPNG_CONFIG = /opt/twitter_mde/bin/libpng-config -LIBS = -LIBSDL_CONFIG = -LIBTOOL = $(SHELL) $(top_builddir)/libtool -LIPO = lipo -LN_S = ln -s -LTLIBOBJS = -LT_SYS_LIBRARY_PATH = -MAKEINFO = ${SHELL} /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp/missing makeinfo -MANIFEST_TOOL = : -MKDIR_P = /opt/twitter_mde/homebrew_minimal/mde_bin/gmkdir -p -NEON_FLAGS = -NM = /usr/bin/nm -B -NMEDIT = nmedit -OBJDUMP = objdump -OBJEXT = o -OTOOL = otool -OTOOL64 = : -PACKAGE = libwebp -PACKAGE_BUGREPORT = https://bugs.chromium.org/p/webp -PACKAGE_NAME = libwebp -PACKAGE_STRING = libwebp 1.1.0 -PACKAGE_TARNAME = libwebp -PACKAGE_URL = http://developers.google.com/speed/webp -PACKAGE_VERSION = 1.1.0 -PATH_SEPARATOR = : -PNG_INCLUDES = -I/opt/twitter_mde/package/twitter_dev_homebrew/current/Cellar/libpng/1.6.34/include/libpng16 -DWEBP_HAVE_PNG -PNG_LIBS = -L/opt/twitter_mde/package/twitter_dev_homebrew/current/Cellar/libpng/1.6.34/lib -lpng16 -PTHREAD_CC = gcc -PTHREAD_CFLAGS = -D_THREAD_SAFE -pthread -PTHREAD_LIBS = -RANLIB = ranlib -SDL_INCLUDES = -SDL_LIBS = -SED = /usr/bin/sed -SET_MAKE = -SHELL = /bin/sh -SSE2_FLAGS = -msse2 -SSE41_FLAGS = -msse4.1 -STRIP = strip -TIFF_INCLUDES = -DWEBP_HAVE_TIFF -TIFF_LIBS = -ltiff -USE_SWAP_16BIT_CSP = -VERSION = 1.1.0 -abs_builddir = /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp/src/utils -abs_srcdir = /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp/src/utils -abs_top_builddir = /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp -abs_top_srcdir = /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp -ac_ct_AR = ar -ac_ct_CC = gcc -ac_ct_DUMPBIN = -am__include = include -am__leading_dot = . -am__quote = -am__tar = $${TAR-tar} chof - "$$tardir" -am__untar = $${TAR-tar} xf - -ax_pthread_config = -bindir = ${exec_prefix}/bin -build = x86_64-apple-darwin19.6.0 -build_alias = -build_cpu = x86_64 -build_os = darwin19.6.0 -build_vendor = apple -builddir = . -datadir = ${datarootdir} -datarootdir = ${prefix}/share -docdir = ${datarootdir}/doc/${PACKAGE_TARNAME} -dvidir = ${docdir} -exec_prefix = ${prefix} -host = x86_64-apple-darwin19.6.0 -host_alias = -host_cpu = x86_64 -host_os = darwin19.6.0 -host_vendor = apple -htmldir = ${docdir} -includedir = ${prefix}/include -infodir = ${datarootdir}/info -install_sh = ${SHELL} /Users/nobrien/workspace/twitter-ios/Frameworks/TwitterImagePipeline/Extended/libwebp/install-sh -libdir = ${exec_prefix}/lib -libexecdir = ${exec_prefix}/libexec -localedir = ${datarootdir}/locale -localstatedir = ${prefix}/var -mandir = ${datarootdir}/man -mkdir_p = $(MKDIR_P) -oldincludedir = /usr/include -pdfdir = ${docdir} -pkgconfigdir = ${libdir}/pkgconfig -prefix = /usr/local -program_transform_name = s,x,x, -psdir = ${docdir} -runstatedir = ${localstatedir}/run -sbindir = ${exec_prefix}/sbin -sharedstatedir = ${prefix}/com -srcdir = . -sysconfdir = ${prefix}/etc -target_alias = -top_build_prefix = ../../ -top_builddir = ../.. -top_srcdir = ../.. -noinst_LTLIBRARIES = libwebputils.la $(am__append_1) -common_HEADERS = ../webp/types.h -commondir = $(includedir)/webp -noinst_HEADERS = ../dsp/dsp.h ../webp/decode.h ../webp/encode.h \ - ../webp/format_constants.h -COMMON_SOURCES = bit_reader_utils.c bit_reader_utils.h \ - bit_reader_inl_utils.h color_cache_utils.c color_cache_utils.h \ - endian_inl_utils.h filters_utils.c filters_utils.h \ - huffman_utils.c huffman_utils.h quant_levels_dec_utils.c \ - quant_levels_dec_utils.h rescaler_utils.c rescaler_utils.h \ - random_utils.c random_utils.h thread_utils.c thread_utils.h \ - utils.c utils.h -ENC_SOURCES = bit_writer_utils.c bit_writer_utils.h \ - huffman_encode_utils.c huffman_encode_utils.h \ - quant_levels_utils.c quant_levels_utils.h -libwebputils_la_SOURCES = $(COMMON_SOURCES) $(ENC_SOURCES) -#libwebputilsdecode_la_SOURCES = $(COMMON_SOURCES) -all: all-am - -.SUFFIXES: -.SUFFIXES: .c .lo .o .obj -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ - && { if test -f $@; then exit 0; else break; fi; }; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/utils/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --foreign src/utils/Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(am__aclocal_m4_deps): - -clean-noinstLTLIBRARIES: - -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) - @list='$(noinst_LTLIBRARIES)'; \ - locs=`for p in $$list; do echo $$p; done | \ - sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ - sort -u`; \ - test -z "$$locs" || { \ - echo rm -f $${locs}; \ - rm -f $${locs}; \ - } - -libwebputils.la: $(libwebputils_la_OBJECTS) $(libwebputils_la_DEPENDENCIES) $(EXTRA_libwebputils_la_DEPENDENCIES) - $(AM_V_CCLD)$(LINK) $(libwebputils_la_OBJECTS) $(libwebputils_la_LIBADD) $(LIBS) - -libwebputilsdecode.la: $(libwebputilsdecode_la_OBJECTS) $(libwebputilsdecode_la_DEPENDENCIES) $(EXTRA_libwebputilsdecode_la_DEPENDENCIES) - $(AM_V_CCLD)$(LINK) $(am_libwebputilsdecode_la_rpath) $(libwebputilsdecode_la_OBJECTS) $(libwebputilsdecode_la_LIBADD) $(LIBS) - -mostlyclean-compile: - -rm -f *.$(OBJEXT) - -distclean-compile: - -rm -f *.tab.c - -include ./$(DEPDIR)/bit_reader_utils.Plo # am--include-marker -include ./$(DEPDIR)/bit_writer_utils.Plo # am--include-marker -include ./$(DEPDIR)/color_cache_utils.Plo # am--include-marker -include ./$(DEPDIR)/filters_utils.Plo # am--include-marker -include ./$(DEPDIR)/huffman_encode_utils.Plo # am--include-marker -include ./$(DEPDIR)/huffman_utils.Plo # am--include-marker -include ./$(DEPDIR)/quant_levels_dec_utils.Plo # am--include-marker -include ./$(DEPDIR)/quant_levels_utils.Plo # am--include-marker -include ./$(DEPDIR)/random_utils.Plo # am--include-marker -include ./$(DEPDIR)/rescaler_utils.Plo # am--include-marker -include ./$(DEPDIR)/thread_utils.Plo # am--include-marker -include ./$(DEPDIR)/utils.Plo # am--include-marker - -$(am__depfiles_remade): - @$(MKDIR_P) $(@D) - @echo '# dummy' >$@-t && $(am__mv) $@-t $@ - -am--depfiles: $(am__depfiles_remade) - -.c.o: - $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ - $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ - $(am__mv) $$depbase.Tpo $$depbase.Po -# $(AM_V_CC)source='$<' object='$@' libtool=no \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(COMPILE) -c -o $@ $< - -.c.obj: - $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ - $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ - $(am__mv) $$depbase.Tpo $$depbase.Po -# $(AM_V_CC)source='$<' object='$@' libtool=no \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` - -.c.lo: - $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ - $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ - $(am__mv) $$depbase.Tpo $$depbase.Plo -# $(AM_V_CC)source='$<' object='$@' libtool=yes \ -# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ -# $(AM_V_CC_no)$(LTCOMPILE) -c -o $@ $< - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs -install-commonHEADERS: $(common_HEADERS) - @$(NORMAL_INSTALL) - @list='$(common_HEADERS)'; test -n "$(commondir)" || list=; \ - if test -n "$$list"; then \ - echo " $(MKDIR_P) '$(DESTDIR)$(commondir)'"; \ - $(MKDIR_P) "$(DESTDIR)$(commondir)" || exit 1; \ - fi; \ - for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - echo "$$d$$p"; \ - done | $(am__base_list) | \ - while read files; do \ - echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(commondir)'"; \ - $(INSTALL_HEADER) $$files "$(DESTDIR)$(commondir)" || exit $$?; \ - done - -uninstall-commonHEADERS: - @$(NORMAL_UNINSTALL) - @list='$(common_HEADERS)'; test -n "$(commondir)" || list=; \ - files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ - dir='$(DESTDIR)$(commondir)'; $(am__uninstall_files_from_dir) - -ID: $(am__tagged_files) - $(am__define_uniq_tagged_files); mkid -fID $$unique -tags: tags-am -TAGS: tags - -tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) - set x; \ - here=`pwd`; \ - $(am__define_uniq_tagged_files); \ - shift; \ - if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ - test -n "$$unique" || unique=$$empty_fix; \ - if test $$# -gt 0; then \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - "$$@" $$unique; \ - else \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$unique; \ - fi; \ - fi -ctags: ctags-am - -CTAGS: ctags -ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) - $(am__define_uniq_tagged_files); \ - test -z "$(CTAGS_ARGS)$$unique" \ - || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$unique - -GTAGS: - here=`$(am__cd) $(top_builddir) && pwd` \ - && $(am__cd) $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) "$$here" -cscopelist: cscopelist-am - -cscopelist-am: $(am__tagged_files) - list='$(am__tagged_files)'; \ - case "$(srcdir)" in \ - [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ - *) sdir=$(subdir)/$(srcdir) ;; \ - esac; \ - for i in $$list; do \ - if test -f "$$i"; then \ - echo "$(subdir)/$$i"; \ - else \ - echo "$$sdir/$$i"; \ - fi; \ - done >> $(top_builddir)/cscope.files - -distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - -distdir: $(BUILT_SOURCES) - $(MAKE) $(AM_MAKEFLAGS) distdir-am - -distdir-am: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - list='$(DISTFILES)'; \ - dist_files=`for file in $$list; do echo $$file; done | \ - sed -e "s|^$$srcdirstrip/||;t" \ - -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ - case $$dist_files in \ - */*) $(MKDIR_P) `echo "$$dist_files" | \ - sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ - sort -u` ;; \ - esac; \ - for file in $$dist_files; do \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - if test -d $$d/$$file; then \ - dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test -d "$(distdir)/$$file"; then \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ - else \ - test -f "$(distdir)/$$file" \ - || cp -p $$d/$$file "$(distdir)/$$file" \ - || exit 1; \ - fi; \ - done -check-am: all-am -check: check-am -all-am: Makefile $(LTLIBRARIES) $(HEADERS) -installdirs: - for dir in "$(DESTDIR)$(commondir)"; do \ - test -z "$$dir" || $(MKDIR_P) "$$dir"; \ - done -install: install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-am -install-strip: - if test -z '$(STRIP)'; then \ - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - install; \ - else \ - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ - fi -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-am - -clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ - mostlyclean-am - -distclean: distclean-am - -rm -f ./$(DEPDIR)/bit_reader_utils.Plo - -rm -f ./$(DEPDIR)/bit_writer_utils.Plo - -rm -f ./$(DEPDIR)/color_cache_utils.Plo - -rm -f ./$(DEPDIR)/filters_utils.Plo - -rm -f ./$(DEPDIR)/huffman_encode_utils.Plo - -rm -f ./$(DEPDIR)/huffman_utils.Plo - -rm -f ./$(DEPDIR)/quant_levels_dec_utils.Plo - -rm -f ./$(DEPDIR)/quant_levels_utils.Plo - -rm -f ./$(DEPDIR)/random_utils.Plo - -rm -f ./$(DEPDIR)/rescaler_utils.Plo - -rm -f ./$(DEPDIR)/thread_utils.Plo - -rm -f ./$(DEPDIR)/utils.Plo - -rm -f Makefile -distclean-am: clean-am distclean-compile distclean-generic \ - distclean-tags - -dvi: dvi-am - -dvi-am: - -html: html-am - -html-am: - -info: info-am - -info-am: - -install-data-am: install-commonHEADERS - -install-dvi: install-dvi-am - -install-dvi-am: - -install-exec-am: - -install-html: install-html-am - -install-html-am: - -install-info: install-info-am - -install-info-am: - -install-man: - -install-pdf: install-pdf-am - -install-pdf-am: - -install-ps: install-ps-am - -install-ps-am: - -installcheck-am: - -maintainer-clean: maintainer-clean-am - -rm -f ./$(DEPDIR)/bit_reader_utils.Plo - -rm -f ./$(DEPDIR)/bit_writer_utils.Plo - -rm -f ./$(DEPDIR)/color_cache_utils.Plo - -rm -f ./$(DEPDIR)/filters_utils.Plo - -rm -f ./$(DEPDIR)/huffman_encode_utils.Plo - -rm -f ./$(DEPDIR)/huffman_utils.Plo - -rm -f ./$(DEPDIR)/quant_levels_dec_utils.Plo - -rm -f ./$(DEPDIR)/quant_levels_utils.Plo - -rm -f ./$(DEPDIR)/random_utils.Plo - -rm -f ./$(DEPDIR)/rescaler_utils.Plo - -rm -f ./$(DEPDIR)/thread_utils.Plo - -rm -f ./$(DEPDIR)/utils.Plo - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-compile mostlyclean-generic \ - mostlyclean-libtool - -pdf: pdf-am - -pdf-am: - -ps: ps-am - -ps-am: - -uninstall-am: uninstall-commonHEADERS - -.MAKE: install-am install-strip - -.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ - clean-generic clean-libtool clean-noinstLTLIBRARIES \ - cscopelist-am ctags ctags-am distclean distclean-compile \ - distclean-generic distclean-libtool distclean-tags distdir dvi \ - dvi-am html html-am info info-am install install-am \ - install-commonHEADERS install-data install-data-am install-dvi \ - install-dvi-am install-exec install-exec-am install-html \ - install-html-am install-info install-info-am install-man \ - install-pdf install-pdf-am install-ps install-ps-am \ - install-strip installcheck installcheck-am installdirs \ - maintainer-clean maintainer-clean-generic mostlyclean \ - mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ - pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \ - uninstall-commonHEADERS - -.PRECIOUS: Makefile - - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/Extended/libwebp/src/utils/Makefile.am b/Extended/libwebp/src/utils/Makefile.am deleted file mode 100644 index fbb0fe7..0000000 --- a/Extended/libwebp/src/utils/Makefile.am +++ /dev/null @@ -1,51 +0,0 @@ -AM_CPPFLAGS += -I$(top_builddir) -I$(top_srcdir) -noinst_LTLIBRARIES = libwebputils.la - -if BUILD_LIBWEBPDECODER - noinst_LTLIBRARIES += libwebputilsdecode.la -endif - -common_HEADERS = ../webp/types.h -commondir = $(includedir)/webp - -noinst_HEADERS = -noinst_HEADERS += ../dsp/dsp.h -noinst_HEADERS += ../webp/decode.h -noinst_HEADERS += ../webp/encode.h -noinst_HEADERS += ../webp/format_constants.h - -COMMON_SOURCES = -COMMON_SOURCES += bit_reader_utils.c -COMMON_SOURCES += bit_reader_utils.h -COMMON_SOURCES += bit_reader_inl_utils.h -COMMON_SOURCES += color_cache_utils.c -COMMON_SOURCES += color_cache_utils.h -COMMON_SOURCES += endian_inl_utils.h -COMMON_SOURCES += filters_utils.c -COMMON_SOURCES += filters_utils.h -COMMON_SOURCES += huffman_utils.c -COMMON_SOURCES += huffman_utils.h -COMMON_SOURCES += quant_levels_dec_utils.c -COMMON_SOURCES += quant_levels_dec_utils.h -COMMON_SOURCES += rescaler_utils.c -COMMON_SOURCES += rescaler_utils.h -COMMON_SOURCES += random_utils.c -COMMON_SOURCES += random_utils.h -COMMON_SOURCES += thread_utils.c -COMMON_SOURCES += thread_utils.h -COMMON_SOURCES += utils.c -COMMON_SOURCES += utils.h - -ENC_SOURCES = -ENC_SOURCES += bit_writer_utils.c -ENC_SOURCES += bit_writer_utils.h -ENC_SOURCES += huffman_encode_utils.c -ENC_SOURCES += huffman_encode_utils.h -ENC_SOURCES += quant_levels_utils.c -ENC_SOURCES += quant_levels_utils.h - -libwebputils_la_SOURCES = $(COMMON_SOURCES) $(ENC_SOURCES) - -if BUILD_LIBWEBPDECODER - libwebputilsdecode_la_SOURCES = $(COMMON_SOURCES) -endif diff --git a/Extended/libwebp/src/utils/Makefile.in b/Extended/libwebp/src/utils/Makefile.in deleted file mode 100644 index edd7379..0000000 --- a/Extended/libwebp/src/utils/Makefile.in +++ /dev/null @@ -1,756 +0,0 @@ -# Makefile.in generated by automake 1.16.1 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994-2018 Free Software Foundation, Inc. - -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -@SET_MAKE@ - - -VPATH = @srcdir@ -am__is_gnu_make = { \ - if test -z '$(MAKELEVEL)'; then \ - false; \ - elif test -n '$(MAKE_HOST)'; then \ - true; \ - elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ - true; \ - else \ - false; \ - fi; \ -} -am__make_running_with_option = \ - case $${target_option-} in \ - ?) ;; \ - *) echo "am__make_running_with_option: internal error: invalid" \ - "target option '$${target_option-}' specified" >&2; \ - exit 1;; \ - esac; \ - has_opt=no; \ - sane_makeflags=$$MAKEFLAGS; \ - if $(am__is_gnu_make); then \ - sane_makeflags=$$MFLAGS; \ - else \ - case $$MAKEFLAGS in \ - *\\[\ \ ]*) \ - bs=\\; \ - sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ - | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ - esac; \ - fi; \ - skip_next=no; \ - strip_trailopt () \ - { \ - flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ - }; \ - for flg in $$sane_makeflags; do \ - test $$skip_next = yes && { skip_next=no; continue; }; \ - case $$flg in \ - *=*|--*) continue;; \ - -*I) strip_trailopt 'I'; skip_next=yes;; \ - -*I?*) strip_trailopt 'I';; \ - -*O) strip_trailopt 'O'; skip_next=yes;; \ - -*O?*) strip_trailopt 'O';; \ - -*l) strip_trailopt 'l'; skip_next=yes;; \ - -*l?*) strip_trailopt 'l';; \ - -[dEDm]) skip_next=yes;; \ - -[JT]) skip_next=yes;; \ - esac; \ - case $$flg in \ - *$$target_option*) has_opt=yes; break;; \ - esac; \ - done; \ - test $$has_opt = yes -am__make_dryrun = (target_option=n; $(am__make_running_with_option)) -am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) -pkgdatadir = $(datadir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkglibexecdir = $(libexecdir)/@PACKAGE@ -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = @build@ -host_triplet = @host@ -@BUILD_LIBWEBPDECODER_TRUE@am__append_1 = libwebputilsdecode.la -subdir = src/utils -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pthread.m4 \ - $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ - $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ - $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -DIST_COMMON = $(srcdir)/Makefile.am $(common_HEADERS) \ - $(noinst_HEADERS) $(am__DIST_COMMON) -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = $(top_builddir)/src/webp/config.h -CONFIG_CLEAN_FILES = -CONFIG_CLEAN_VPATH_FILES = -LTLIBRARIES = $(noinst_LTLIBRARIES) -libwebputils_la_LIBADD = -am__objects_1 = bit_reader_utils.lo color_cache_utils.lo \ - filters_utils.lo huffman_utils.lo quant_levels_dec_utils.lo \ - rescaler_utils.lo random_utils.lo thread_utils.lo utils.lo -am__objects_2 = bit_writer_utils.lo huffman_encode_utils.lo \ - quant_levels_utils.lo -am_libwebputils_la_OBJECTS = $(am__objects_1) $(am__objects_2) -libwebputils_la_OBJECTS = $(am_libwebputils_la_OBJECTS) -AM_V_lt = $(am__v_lt_@AM_V@) -am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) -am__v_lt_0 = --silent -am__v_lt_1 = -libwebputilsdecode_la_LIBADD = -am__libwebputilsdecode_la_SOURCES_DIST = bit_reader_utils.c \ - bit_reader_utils.h bit_reader_inl_utils.h color_cache_utils.c \ - color_cache_utils.h endian_inl_utils.h filters_utils.c \ - filters_utils.h huffman_utils.c huffman_utils.h \ - quant_levels_dec_utils.c quant_levels_dec_utils.h \ - rescaler_utils.c rescaler_utils.h random_utils.c \ - random_utils.h thread_utils.c thread_utils.h utils.c utils.h -@BUILD_LIBWEBPDECODER_TRUE@am_libwebputilsdecode_la_OBJECTS = \ -@BUILD_LIBWEBPDECODER_TRUE@ $(am__objects_1) -libwebputilsdecode_la_OBJECTS = $(am_libwebputilsdecode_la_OBJECTS) -@BUILD_LIBWEBPDECODER_TRUE@am_libwebputilsdecode_la_rpath = -AM_V_P = $(am__v_P_@AM_V@) -am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) -am__v_P_0 = false -am__v_P_1 = : -AM_V_GEN = $(am__v_GEN_@AM_V@) -am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) -am__v_GEN_0 = @echo " GEN " $@; -am__v_GEN_1 = -AM_V_at = $(am__v_at_@AM_V@) -am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) -am__v_at_0 = @ -am__v_at_1 = -DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/src/webp -depcomp = $(SHELL) $(top_srcdir)/depcomp -am__maybe_remake_depfiles = depfiles -am__depfiles_remade = ./$(DEPDIR)/bit_reader_utils.Plo \ - ./$(DEPDIR)/bit_writer_utils.Plo \ - ./$(DEPDIR)/color_cache_utils.Plo \ - ./$(DEPDIR)/filters_utils.Plo \ - ./$(DEPDIR)/huffman_encode_utils.Plo \ - ./$(DEPDIR)/huffman_utils.Plo \ - ./$(DEPDIR)/quant_levels_dec_utils.Plo \ - ./$(DEPDIR)/quant_levels_utils.Plo \ - ./$(DEPDIR)/random_utils.Plo ./$(DEPDIR)/rescaler_utils.Plo \ - ./$(DEPDIR)/thread_utils.Plo ./$(DEPDIR)/utils.Plo -am__mv = mv -f -COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ - $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CFLAGS) $(CFLAGS) -AM_V_CC = $(am__v_CC_@AM_V@) -am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) -am__v_CC_0 = @echo " CC " $@; -am__v_CC_1 = -CCLD = $(CC) -LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ - $(AM_LDFLAGS) $(LDFLAGS) -o $@ -AM_V_CCLD = $(am__v_CCLD_@AM_V@) -am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) -am__v_CCLD_0 = @echo " CCLD " $@; -am__v_CCLD_1 = -SOURCES = $(libwebputils_la_SOURCES) $(libwebputilsdecode_la_SOURCES) -DIST_SOURCES = $(libwebputils_la_SOURCES) \ - $(am__libwebputilsdecode_la_SOURCES_DIST) -am__can_run_installinfo = \ - case $$AM_UPDATE_INFO_DIR in \ - n|no|NO) false;; \ - *) (install-info --version) >/dev/null 2>&1;; \ - esac -am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; -am__vpath_adj = case $$p in \ - $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ - *) f=$$p;; \ - esac; -am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; -am__install_max = 40 -am__nobase_strip_setup = \ - srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` -am__nobase_strip = \ - for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" -am__nobase_list = $(am__nobase_strip_setup); \ - for p in $$list; do echo "$$p $$p"; done | \ - sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ - $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ - if (++n[$$2] == $(am__install_max)) \ - { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ - END { for (dir in files) print dir, files[dir] }' -am__base_list = \ - sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ - sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' -am__uninstall_files_from_dir = { \ - test -z "$$files" \ - || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ - || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ - $(am__cd) "$$dir" && rm -f $$files; }; \ - } -am__installdirs = "$(DESTDIR)$(commondir)" -HEADERS = $(common_HEADERS) $(noinst_HEADERS) -am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) -# Read a list of newline-separated strings from the standard input, -# and print each of them once, without duplicates. Input order is -# *not* preserved. -am__uniquify_input = $(AWK) '\ - BEGIN { nonempty = 0; } \ - { items[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in items) print i; }; } \ -' -# Make sure the list of sources is unique. This is necessary because, -# e.g., the same source file might be shared among _SOURCES variables -# for different programs/libraries. -am__define_uniq_tagged_files = \ - list='$(am__tagged_files)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | $(am__uniquify_input)` -ETAGS = etags -CTAGS = ctags -am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = @ACLOCAL@ -AMTAR = @AMTAR@ -AM_CFLAGS = @AM_CFLAGS@ -AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_builddir) -I$(top_srcdir) -AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ -AR = @AR@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -CC = @CC@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -DLLTOOL = @DLLTOOL@ -DSYMUTIL = @DSYMUTIL@ -DUMPBIN = @DUMPBIN@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -FGREP = @FGREP@ -GIF_INCLUDES = @GIF_INCLUDES@ -GIF_LIBS = @GIF_LIBS@ -GL_INCLUDES = @GL_INCLUDES@ -GL_LIBS = @GL_LIBS@ -GREP = @GREP@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -JPEG_INCLUDES = @JPEG_INCLUDES@ -JPEG_LIBS = @JPEG_LIBS@ -LD = @LD@ -LDFLAGS = @LDFLAGS@ -LIBOBJS = @LIBOBJS@ -LIBPNG_CONFIG = @LIBPNG_CONFIG@ -LIBS = @LIBS@ -LIBSDL_CONFIG = @LIBSDL_CONFIG@ -LIBTOOL = @LIBTOOL@ -LIPO = @LIPO@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ -MAKEINFO = @MAKEINFO@ -MANIFEST_TOOL = @MANIFEST_TOOL@ -MKDIR_P = @MKDIR_P@ -NEON_FLAGS = @NEON_FLAGS@ -NM = @NM@ -NMEDIT = @NMEDIT@ -OBJDUMP = @OBJDUMP@ -OBJEXT = @OBJEXT@ -OTOOL = @OTOOL@ -OTOOL64 = @OTOOL64@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_URL = @PACKAGE_URL@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -PNG_INCLUDES = @PNG_INCLUDES@ -PNG_LIBS = @PNG_LIBS@ -PTHREAD_CC = @PTHREAD_CC@ -PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ -PTHREAD_LIBS = @PTHREAD_LIBS@ -RANLIB = @RANLIB@ -SDL_INCLUDES = @SDL_INCLUDES@ -SDL_LIBS = @SDL_LIBS@ -SED = @SED@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -SSE2_FLAGS = @SSE2_FLAGS@ -SSE41_FLAGS = @SSE41_FLAGS@ -STRIP = @STRIP@ -TIFF_INCLUDES = @TIFF_INCLUDES@ -TIFF_LIBS = @TIFF_LIBS@ -USE_SWAP_16BIT_CSP = @USE_SWAP_16BIT_CSP@ -VERSION = @VERSION@ -abs_builddir = @abs_builddir@ -abs_srcdir = @abs_srcdir@ -abs_top_builddir = @abs_top_builddir@ -abs_top_srcdir = @abs_top_srcdir@ -ac_ct_AR = @ac_ct_AR@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ -am__include = @am__include@ -am__leading_dot = @am__leading_dot@ -am__quote = @am__quote@ -am__tar = @am__tar@ -am__untar = @am__untar@ -ax_pthread_config = @ax_pthread_config@ -bindir = @bindir@ -build = @build@ -build_alias = @build_alias@ -build_cpu = @build_cpu@ -build_os = @build_os@ -build_vendor = @build_vendor@ -builddir = @builddir@ -datadir = @datadir@ -datarootdir = @datarootdir@ -docdir = @docdir@ -dvidir = @dvidir@ -exec_prefix = @exec_prefix@ -host = @host@ -host_alias = @host_alias@ -host_cpu = @host_cpu@ -host_os = @host_os@ -host_vendor = @host_vendor@ -htmldir = @htmldir@ -includedir = @includedir@ -infodir = @infodir@ -install_sh = @install_sh@ -libdir = @libdir@ -libexecdir = @libexecdir@ -localedir = @localedir@ -localstatedir = @localstatedir@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -oldincludedir = @oldincludedir@ -pdfdir = @pdfdir@ -pkgconfigdir = @pkgconfigdir@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -psdir = @psdir@ -runstatedir = @runstatedir@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -srcdir = @srcdir@ -sysconfdir = @sysconfdir@ -target_alias = @target_alias@ -top_build_prefix = @top_build_prefix@ -top_builddir = @top_builddir@ -top_srcdir = @top_srcdir@ -noinst_LTLIBRARIES = libwebputils.la $(am__append_1) -common_HEADERS = ../webp/types.h -commondir = $(includedir)/webp -noinst_HEADERS = ../dsp/dsp.h ../webp/decode.h ../webp/encode.h \ - ../webp/format_constants.h -COMMON_SOURCES = bit_reader_utils.c bit_reader_utils.h \ - bit_reader_inl_utils.h color_cache_utils.c color_cache_utils.h \ - endian_inl_utils.h filters_utils.c filters_utils.h \ - huffman_utils.c huffman_utils.h quant_levels_dec_utils.c \ - quant_levels_dec_utils.h rescaler_utils.c rescaler_utils.h \ - random_utils.c random_utils.h thread_utils.c thread_utils.h \ - utils.c utils.h -ENC_SOURCES = bit_writer_utils.c bit_writer_utils.h \ - huffman_encode_utils.c huffman_encode_utils.h \ - quant_levels_utils.c quant_levels_utils.h -libwebputils_la_SOURCES = $(COMMON_SOURCES) $(ENC_SOURCES) -@BUILD_LIBWEBPDECODER_TRUE@libwebputilsdecode_la_SOURCES = $(COMMON_SOURCES) -all: all-am - -.SUFFIXES: -.SUFFIXES: .c .lo .o .obj -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ - && { if test -f $@; then exit 0; else break; fi; }; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/utils/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --foreign src/utils/Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(am__aclocal_m4_deps): - -clean-noinstLTLIBRARIES: - -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) - @list='$(noinst_LTLIBRARIES)'; \ - locs=`for p in $$list; do echo $$p; done | \ - sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ - sort -u`; \ - test -z "$$locs" || { \ - echo rm -f $${locs}; \ - rm -f $${locs}; \ - } - -libwebputils.la: $(libwebputils_la_OBJECTS) $(libwebputils_la_DEPENDENCIES) $(EXTRA_libwebputils_la_DEPENDENCIES) - $(AM_V_CCLD)$(LINK) $(libwebputils_la_OBJECTS) $(libwebputils_la_LIBADD) $(LIBS) - -libwebputilsdecode.la: $(libwebputilsdecode_la_OBJECTS) $(libwebputilsdecode_la_DEPENDENCIES) $(EXTRA_libwebputilsdecode_la_DEPENDENCIES) - $(AM_V_CCLD)$(LINK) $(am_libwebputilsdecode_la_rpath) $(libwebputilsdecode_la_OBJECTS) $(libwebputilsdecode_la_LIBADD) $(LIBS) - -mostlyclean-compile: - -rm -f *.$(OBJEXT) - -distclean-compile: - -rm -f *.tab.c - -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bit_reader_utils.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bit_writer_utils.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/color_cache_utils.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/filters_utils.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/huffman_encode_utils.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/huffman_utils.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/quant_levels_dec_utils.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/quant_levels_utils.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/random_utils.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rescaler_utils.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/thread_utils.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/utils.Plo@am__quote@ # am--include-marker - -$(am__depfiles_remade): - @$(MKDIR_P) $(@D) - @echo '# dummy' >$@-t && $(am__mv) $@-t $@ - -am--depfiles: $(am__depfiles_remade) - -.c.o: -@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ -@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ -@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< - -.c.obj: -@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ -@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ -@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` - -.c.lo: -@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ -@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ -@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs -install-commonHEADERS: $(common_HEADERS) - @$(NORMAL_INSTALL) - @list='$(common_HEADERS)'; test -n "$(commondir)" || list=; \ - if test -n "$$list"; then \ - echo " $(MKDIR_P) '$(DESTDIR)$(commondir)'"; \ - $(MKDIR_P) "$(DESTDIR)$(commondir)" || exit 1; \ - fi; \ - for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - echo "$$d$$p"; \ - done | $(am__base_list) | \ - while read files; do \ - echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(commondir)'"; \ - $(INSTALL_HEADER) $$files "$(DESTDIR)$(commondir)" || exit $$?; \ - done - -uninstall-commonHEADERS: - @$(NORMAL_UNINSTALL) - @list='$(common_HEADERS)'; test -n "$(commondir)" || list=; \ - files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ - dir='$(DESTDIR)$(commondir)'; $(am__uninstall_files_from_dir) - -ID: $(am__tagged_files) - $(am__define_uniq_tagged_files); mkid -fID $$unique -tags: tags-am -TAGS: tags - -tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) - set x; \ - here=`pwd`; \ - $(am__define_uniq_tagged_files); \ - shift; \ - if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ - test -n "$$unique" || unique=$$empty_fix; \ - if test $$# -gt 0; then \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - "$$@" $$unique; \ - else \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$unique; \ - fi; \ - fi -ctags: ctags-am - -CTAGS: ctags -ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) - $(am__define_uniq_tagged_files); \ - test -z "$(CTAGS_ARGS)$$unique" \ - || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$unique - -GTAGS: - here=`$(am__cd) $(top_builddir) && pwd` \ - && $(am__cd) $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) "$$here" -cscopelist: cscopelist-am - -cscopelist-am: $(am__tagged_files) - list='$(am__tagged_files)'; \ - case "$(srcdir)" in \ - [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ - *) sdir=$(subdir)/$(srcdir) ;; \ - esac; \ - for i in $$list; do \ - if test -f "$$i"; then \ - echo "$(subdir)/$$i"; \ - else \ - echo "$$sdir/$$i"; \ - fi; \ - done >> $(top_builddir)/cscope.files - -distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - -distdir: $(BUILT_SOURCES) - $(MAKE) $(AM_MAKEFLAGS) distdir-am - -distdir-am: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - list='$(DISTFILES)'; \ - dist_files=`for file in $$list; do echo $$file; done | \ - sed -e "s|^$$srcdirstrip/||;t" \ - -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ - case $$dist_files in \ - */*) $(MKDIR_P) `echo "$$dist_files" | \ - sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ - sort -u` ;; \ - esac; \ - for file in $$dist_files; do \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - if test -d $$d/$$file; then \ - dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test -d "$(distdir)/$$file"; then \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ - else \ - test -f "$(distdir)/$$file" \ - || cp -p $$d/$$file "$(distdir)/$$file" \ - || exit 1; \ - fi; \ - done -check-am: all-am -check: check-am -all-am: Makefile $(LTLIBRARIES) $(HEADERS) -installdirs: - for dir in "$(DESTDIR)$(commondir)"; do \ - test -z "$$dir" || $(MKDIR_P) "$$dir"; \ - done -install: install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-am -install-strip: - if test -z '$(STRIP)'; then \ - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - install; \ - else \ - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ - fi -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-am - -clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ - mostlyclean-am - -distclean: distclean-am - -rm -f ./$(DEPDIR)/bit_reader_utils.Plo - -rm -f ./$(DEPDIR)/bit_writer_utils.Plo - -rm -f ./$(DEPDIR)/color_cache_utils.Plo - -rm -f ./$(DEPDIR)/filters_utils.Plo - -rm -f ./$(DEPDIR)/huffman_encode_utils.Plo - -rm -f ./$(DEPDIR)/huffman_utils.Plo - -rm -f ./$(DEPDIR)/quant_levels_dec_utils.Plo - -rm -f ./$(DEPDIR)/quant_levels_utils.Plo - -rm -f ./$(DEPDIR)/random_utils.Plo - -rm -f ./$(DEPDIR)/rescaler_utils.Plo - -rm -f ./$(DEPDIR)/thread_utils.Plo - -rm -f ./$(DEPDIR)/utils.Plo - -rm -f Makefile -distclean-am: clean-am distclean-compile distclean-generic \ - distclean-tags - -dvi: dvi-am - -dvi-am: - -html: html-am - -html-am: - -info: info-am - -info-am: - -install-data-am: install-commonHEADERS - -install-dvi: install-dvi-am - -install-dvi-am: - -install-exec-am: - -install-html: install-html-am - -install-html-am: - -install-info: install-info-am - -install-info-am: - -install-man: - -install-pdf: install-pdf-am - -install-pdf-am: - -install-ps: install-ps-am - -install-ps-am: - -installcheck-am: - -maintainer-clean: maintainer-clean-am - -rm -f ./$(DEPDIR)/bit_reader_utils.Plo - -rm -f ./$(DEPDIR)/bit_writer_utils.Plo - -rm -f ./$(DEPDIR)/color_cache_utils.Plo - -rm -f ./$(DEPDIR)/filters_utils.Plo - -rm -f ./$(DEPDIR)/huffman_encode_utils.Plo - -rm -f ./$(DEPDIR)/huffman_utils.Plo - -rm -f ./$(DEPDIR)/quant_levels_dec_utils.Plo - -rm -f ./$(DEPDIR)/quant_levels_utils.Plo - -rm -f ./$(DEPDIR)/random_utils.Plo - -rm -f ./$(DEPDIR)/rescaler_utils.Plo - -rm -f ./$(DEPDIR)/thread_utils.Plo - -rm -f ./$(DEPDIR)/utils.Plo - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-compile mostlyclean-generic \ - mostlyclean-libtool - -pdf: pdf-am - -pdf-am: - -ps: ps-am - -ps-am: - -uninstall-am: uninstall-commonHEADERS - -.MAKE: install-am install-strip - -.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ - clean-generic clean-libtool clean-noinstLTLIBRARIES \ - cscopelist-am ctags ctags-am distclean distclean-compile \ - distclean-generic distclean-libtool distclean-tags distdir dvi \ - dvi-am html html-am info info-am install install-am \ - install-commonHEADERS install-data install-data-am install-dvi \ - install-dvi-am install-exec install-exec-am install-html \ - install-html-am install-info install-info-am install-man \ - install-pdf install-pdf-am install-ps install-ps-am \ - install-strip installcheck installcheck-am installdirs \ - maintainer-clean maintainer-clean-generic mostlyclean \ - mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ - pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \ - uninstall-commonHEADERS - -.PRECIOUS: Makefile - - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/Extended/libwebp/src/utils/bit_reader_inl_utils.h b/Extended/libwebp/src/utils/bit_reader_inl_utils.h deleted file mode 100644 index 46b3880..0000000 --- a/Extended/libwebp/src/utils/bit_reader_inl_utils.h +++ /dev/null @@ -1,195 +0,0 @@ -// Copyright 2014 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Specific inlined methods for boolean decoder [VP8GetBit() ...] -// This file should be included by the .c sources that actually need to call -// these methods. -// -// Author: Skal (pascal.massimino@gmail.com) - -#ifndef WEBP_UTILS_BIT_READER_INL_UTILS_H_ -#define WEBP_UTILS_BIT_READER_INL_UTILS_H_ - -#ifdef HAVE_CONFIG_H -#include "src/webp/config.h" -#endif - -#include // for memcpy - -#include "src/dsp/dsp.h" -#include "src/utils/bit_reader_utils.h" -#include "src/utils/endian_inl_utils.h" -#include "src/utils/utils.h" - -#ifdef __cplusplus -extern "C" { -#endif - -//------------------------------------------------------------------------------ -// Derived type lbit_t = natural type for memory I/O - -#if (BITS > 32) -typedef uint64_t lbit_t; -#elif (BITS > 16) -typedef uint32_t lbit_t; -#elif (BITS > 8) -typedef uint16_t lbit_t; -#else -typedef uint8_t lbit_t; -#endif - -extern const uint8_t kVP8Log2Range[128]; -extern const uint8_t kVP8NewRange[128]; - -// special case for the tail byte-reading -void VP8LoadFinalBytes(VP8BitReader* const br); - -//------------------------------------------------------------------------------ -// Inlined critical functions - -// makes sure br->value_ has at least BITS bits worth of data -static WEBP_UBSAN_IGNORE_UNDEF WEBP_INLINE -void VP8LoadNewBytes(VP8BitReader* const br) { - assert(br != NULL && br->buf_ != NULL); - // Read 'BITS' bits at a time if possible. - if (br->buf_ < br->buf_max_) { - // convert memory type to register type (with some zero'ing!) - bit_t bits; -#if defined(WEBP_USE_MIPS32) - // This is needed because of un-aligned read. - lbit_t in_bits; - lbit_t* p_buf_ = (lbit_t*)br->buf_; - __asm__ volatile( - ".set push \n\t" - ".set at \n\t" - ".set macro \n\t" - "ulw %[in_bits], 0(%[p_buf_]) \n\t" - ".set pop \n\t" - : [in_bits]"=r"(in_bits) - : [p_buf_]"r"(p_buf_) - : "memory", "at" - ); -#else - lbit_t in_bits; - memcpy(&in_bits, br->buf_, sizeof(in_bits)); -#endif - br->buf_ += BITS >> 3; -#if !defined(WORDS_BIGENDIAN) -#if (BITS > 32) - bits = BSwap64(in_bits); - bits >>= 64 - BITS; -#elif (BITS >= 24) - bits = BSwap32(in_bits); - bits >>= (32 - BITS); -#elif (BITS == 16) - bits = BSwap16(in_bits); -#else // BITS == 8 - bits = (bit_t)in_bits; -#endif // BITS > 32 -#else // WORDS_BIGENDIAN - bits = (bit_t)in_bits; - if (BITS != 8 * sizeof(bit_t)) bits >>= (8 * sizeof(bit_t) - BITS); -#endif - br->value_ = bits | (br->value_ << BITS); - br->bits_ += BITS; - } else { - VP8LoadFinalBytes(br); // no need to be inlined - } -} - -// Read a bit with proba 'prob'. Speed-critical function! -static WEBP_INLINE int VP8GetBit(VP8BitReader* const br, - int prob, const char label[]) { - // Don't move this declaration! It makes a big speed difference to store - // 'range' *before* calling VP8LoadNewBytes(), even if this function doesn't - // alter br->range_ value. - range_t range = br->range_; - if (br->bits_ < 0) { - VP8LoadNewBytes(br); - } - { - const int pos = br->bits_; - const range_t split = (range * prob) >> 8; - const range_t value = (range_t)(br->value_ >> pos); - const int bit = (value > split); - if (bit) { - range -= split; - br->value_ -= (bit_t)(split + 1) << pos; - } else { - range = split + 1; - } - { - const int shift = 7 ^ BitsLog2Floor(range); - range <<= shift; - br->bits_ -= shift; - } - br->range_ = range - 1; - BT_TRACK(br); - return bit; - } -} - -// simplified version of VP8GetBit() for prob=0x80 (note shift is always 1 here) -static WEBP_UBSAN_IGNORE_UNSIGNED_OVERFLOW WEBP_INLINE -int VP8GetSigned(VP8BitReader* const br, int v, const char label[]) { - if (br->bits_ < 0) { - VP8LoadNewBytes(br); - } - { - const int pos = br->bits_; - const range_t split = br->range_ >> 1; - const range_t value = (range_t)(br->value_ >> pos); - const int32_t mask = (int32_t)(split - value) >> 31; // -1 or 0 - br->bits_ -= 1; - br->range_ += mask; - br->range_ |= 1; - br->value_ -= (bit_t)((split + 1) & mask) << pos; - BT_TRACK(br); - return (v ^ mask) - mask; - } -} - -static WEBP_INLINE int VP8GetBitAlt(VP8BitReader* const br, - int prob, const char label[]) { - // Don't move this declaration! It makes a big speed difference to store - // 'range' *before* calling VP8LoadNewBytes(), even if this function doesn't - // alter br->range_ value. - range_t range = br->range_; - if (br->bits_ < 0) { - VP8LoadNewBytes(br); - } - { - const int pos = br->bits_; - const range_t split = (range * prob) >> 8; - const range_t value = (range_t)(br->value_ >> pos); - int bit; // Don't use 'const int bit = (value > split);", it's slower. - if (value > split) { - range -= split + 1; - br->value_ -= (bit_t)(split + 1) << pos; - bit = 1; - } else { - range = split; - bit = 0; - } - if (range <= (range_t)0x7e) { - const int shift = kVP8Log2Range[range]; - range = kVP8NewRange[range]; - br->bits_ -= shift; - } - br->range_ = range; - BT_TRACK(br); - return bit; - } -} - -#ifdef __cplusplus -} // extern "C" -#endif - -#endif // WEBP_UTILS_BIT_READER_INL_UTILS_H_ diff --git a/Extended/libwebp/src/utils/bit_reader_utils.c b/Extended/libwebp/src/utils/bit_reader_utils.c deleted file mode 100644 index 857cd60..0000000 --- a/Extended/libwebp/src/utils/bit_reader_utils.c +++ /dev/null @@ -1,298 +0,0 @@ -// Copyright 2010 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Boolean decoder non-inlined methods -// -// Author: Skal (pascal.massimino@gmail.com) - -#ifdef HAVE_CONFIG_H -#include "src/webp/config.h" -#endif - -#include "src/utils/bit_reader_inl_utils.h" -#include "src/utils/utils.h" - -//------------------------------------------------------------------------------ -// VP8BitReader - -void VP8BitReaderSetBuffer(VP8BitReader* const br, - const uint8_t* const start, - size_t size) { - br->buf_ = start; - br->buf_end_ = start + size; - br->buf_max_ = - (size >= sizeof(lbit_t)) ? start + size - sizeof(lbit_t) + 1 - : start; -} - -void VP8InitBitReader(VP8BitReader* const br, - const uint8_t* const start, size_t size) { - assert(br != NULL); - assert(start != NULL); - assert(size < (1u << 31)); // limit ensured by format and upstream checks - br->range_ = 255 - 1; - br->value_ = 0; - br->bits_ = -8; // to load the very first 8bits - br->eof_ = 0; - VP8BitReaderSetBuffer(br, start, size); - VP8LoadNewBytes(br); -} - -void VP8RemapBitReader(VP8BitReader* const br, ptrdiff_t offset) { - if (br->buf_ != NULL) { - br->buf_ += offset; - br->buf_end_ += offset; - br->buf_max_ += offset; - } -} - -const uint8_t kVP8Log2Range[128] = { - 7, 6, 6, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 0 -}; - -// range = ((range - 1) << kVP8Log2Range[range]) + 1 -const uint8_t kVP8NewRange[128] = { - 127, 127, 191, 127, 159, 191, 223, 127, - 143, 159, 175, 191, 207, 223, 239, 127, - 135, 143, 151, 159, 167, 175, 183, 191, - 199, 207, 215, 223, 231, 239, 247, 127, - 131, 135, 139, 143, 147, 151, 155, 159, - 163, 167, 171, 175, 179, 183, 187, 191, - 195, 199, 203, 207, 211, 215, 219, 223, - 227, 231, 235, 239, 243, 247, 251, 127, - 129, 131, 133, 135, 137, 139, 141, 143, - 145, 147, 149, 151, 153, 155, 157, 159, - 161, 163, 165, 167, 169, 171, 173, 175, - 177, 179, 181, 183, 185, 187, 189, 191, - 193, 195, 197, 199, 201, 203, 205, 207, - 209, 211, 213, 215, 217, 219, 221, 223, - 225, 227, 229, 231, 233, 235, 237, 239, - 241, 243, 245, 247, 249, 251, 253, 127 -}; - -void VP8LoadFinalBytes(VP8BitReader* const br) { - assert(br != NULL && br->buf_ != NULL); - // Only read 8bits at a time - if (br->buf_ < br->buf_end_) { - br->bits_ += 8; - br->value_ = (bit_t)(*br->buf_++) | (br->value_ << 8); - } else if (!br->eof_) { - br->value_ <<= 8; - br->bits_ += 8; - br->eof_ = 1; - } else { - br->bits_ = 0; // This is to avoid undefined behaviour with shifts. - } -} - -//------------------------------------------------------------------------------ -// Higher-level calls - -uint32_t VP8GetValue(VP8BitReader* const br, int bits, const char label[]) { - uint32_t v = 0; - while (bits-- > 0) { - v |= VP8GetBit(br, 0x80, label) << bits; - } - return v; -} - -int32_t VP8GetSignedValue(VP8BitReader* const br, int bits, - const char label[]) { - const int value = VP8GetValue(br, bits, label); - return VP8Get(br, label) ? -value : value; -} - -//------------------------------------------------------------------------------ -// VP8LBitReader - -#define VP8L_LOG8_WBITS 4 // Number of bytes needed to store VP8L_WBITS bits. - -#if defined(__arm__) || defined(_M_ARM) || defined(__aarch64__) || \ - defined(__i386__) || defined(_M_IX86) || \ - defined(__x86_64__) || defined(_M_X64) -#define VP8L_USE_FAST_LOAD -#endif - -static const uint32_t kBitMask[VP8L_MAX_NUM_BIT_READ + 1] = { - 0, - 0x000001, 0x000003, 0x000007, 0x00000f, - 0x00001f, 0x00003f, 0x00007f, 0x0000ff, - 0x0001ff, 0x0003ff, 0x0007ff, 0x000fff, - 0x001fff, 0x003fff, 0x007fff, 0x00ffff, - 0x01ffff, 0x03ffff, 0x07ffff, 0x0fffff, - 0x1fffff, 0x3fffff, 0x7fffff, 0xffffff -}; - -void VP8LInitBitReader(VP8LBitReader* const br, const uint8_t* const start, - size_t length) { - size_t i; - vp8l_val_t value = 0; - assert(br != NULL); - assert(start != NULL); - assert(length < 0xfffffff8u); // can't happen with a RIFF chunk. - - br->len_ = length; - br->val_ = 0; - br->bit_pos_ = 0; - br->eos_ = 0; - - if (length > sizeof(br->val_)) { - length = sizeof(br->val_); - } - for (i = 0; i < length; ++i) { - value |= (vp8l_val_t)start[i] << (8 * i); - } - br->val_ = value; - br->pos_ = length; - br->buf_ = start; -} - -void VP8LBitReaderSetBuffer(VP8LBitReader* const br, - const uint8_t* const buf, size_t len) { - assert(br != NULL); - assert(buf != NULL); - assert(len < 0xfffffff8u); // can't happen with a RIFF chunk. - br->buf_ = buf; - br->len_ = len; - // pos_ > len_ should be considered a param error. - br->eos_ = (br->pos_ > br->len_) || VP8LIsEndOfStream(br); -} - -static void VP8LSetEndOfStream(VP8LBitReader* const br) { - br->eos_ = 1; - br->bit_pos_ = 0; // To avoid undefined behaviour with shifts. -} - -// If not at EOS, reload up to VP8L_LBITS byte-by-byte -static void ShiftBytes(VP8LBitReader* const br) { - while (br->bit_pos_ >= 8 && br->pos_ < br->len_) { - br->val_ >>= 8; - br->val_ |= ((vp8l_val_t)br->buf_[br->pos_]) << (VP8L_LBITS - 8); - ++br->pos_; - br->bit_pos_ -= 8; - } - if (VP8LIsEndOfStream(br)) { - VP8LSetEndOfStream(br); - } -} - -void VP8LDoFillBitWindow(VP8LBitReader* const br) { - assert(br->bit_pos_ >= VP8L_WBITS); -#if defined(VP8L_USE_FAST_LOAD) - if (br->pos_ + sizeof(br->val_) < br->len_) { - br->val_ >>= VP8L_WBITS; - br->bit_pos_ -= VP8L_WBITS; - br->val_ |= (vp8l_val_t)HToLE32(WebPMemToUint32(br->buf_ + br->pos_)) << - (VP8L_LBITS - VP8L_WBITS); - br->pos_ += VP8L_LOG8_WBITS; - return; - } -#endif - ShiftBytes(br); // Slow path. -} - -uint32_t VP8LReadBits(VP8LBitReader* const br, int n_bits) { - assert(n_bits >= 0); - // Flag an error if end_of_stream or n_bits is more than allowed limit. - if (!br->eos_ && n_bits <= VP8L_MAX_NUM_BIT_READ) { - const uint32_t val = VP8LPrefetchBits(br) & kBitMask[n_bits]; - const int new_bits = br->bit_pos_ + n_bits; - br->bit_pos_ = new_bits; - ShiftBytes(br); - return val; - } else { - VP8LSetEndOfStream(br); - return 0; - } -} - -//------------------------------------------------------------------------------ -// Bit-tracing tool - -#if (BITTRACE > 0) - -#include // for atexit() -#include -#include - -#define MAX_NUM_LABELS 32 -static struct { - const char* label; - int size; - int count; -} kLabels[MAX_NUM_LABELS]; - -static int last_label = 0; -static int last_pos = 0; -static const uint8_t* buf_start = NULL; -static int init_done = 0; - -static void PrintBitTraces(void) { - int i; - int scale = 1; - int total = 0; - const char* units = "bits"; -#if (BITTRACE == 2) - scale = 8; - units = "bytes"; -#endif - for (i = 0; i < last_label; ++i) total += kLabels[i].size; - if (total < 1) total = 1; // avoid rounding errors - printf("=== Bit traces ===\n"); - for (i = 0; i < last_label; ++i) { - const int skip = 16 - (int)strlen(kLabels[i].label); - const int value = (kLabels[i].size + scale - 1) / scale; - assert(skip > 0); - printf("%s \%*s: %6d %s \t[%5.2f%%] [count: %7d]\n", - kLabels[i].label, skip, "", value, units, - 100.f * kLabels[i].size / total, - kLabels[i].count); - } - total = (total + scale - 1) / scale; - printf("Total: %d %s\n", total, units); -} - -void BitTrace(const struct VP8BitReader* const br, const char label[]) { - int i, pos; - if (!init_done) { - memset(kLabels, 0, sizeof(kLabels)); - atexit(PrintBitTraces); - buf_start = br->buf_; - init_done = 1; - } - pos = (int)(br->buf_ - buf_start) * 8 - br->bits_; - // if there's a too large jump, we've changed partition -> reset counter - if (abs(pos - last_pos) > 32) { - buf_start = br->buf_; - pos = 0; - last_pos = 0; - } - if (br->range_ >= 0x7f) pos += kVP8Log2Range[br->range_ - 0x7f]; - for (i = 0; i < last_label; ++i) { - if (!strcmp(label, kLabels[i].label)) break; - } - if (i == MAX_NUM_LABELS) abort(); // overflow! - kLabels[i].label = label; - kLabels[i].size += pos - last_pos; - kLabels[i].count += 1; - if (i == last_label) ++last_label; - last_pos = pos; -} - -#endif // BITTRACE > 0 - -//------------------------------------------------------------------------------ diff --git a/Extended/libwebp/src/utils/bit_reader_utils.h b/Extended/libwebp/src/utils/bit_reader_utils.h deleted file mode 100644 index e64156e..0000000 --- a/Extended/libwebp/src/utils/bit_reader_utils.h +++ /dev/null @@ -1,194 +0,0 @@ -// Copyright 2010 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Boolean decoder -// -// Author: Skal (pascal.massimino@gmail.com) -// Vikas Arora (vikaas.arora@gmail.com) - -#ifndef WEBP_UTILS_BIT_READER_UTILS_H_ -#define WEBP_UTILS_BIT_READER_UTILS_H_ - -#include -#ifdef _MSC_VER -#include // _byteswap_ulong -#endif -#include "src/webp/types.h" - -// Warning! This macro triggers quite some MACRO wizardry around func signature! -#if !defined(BITTRACE) -#define BITTRACE 0 // 0 = off, 1 = print bits, 2 = print bytes -#endif - -#if (BITTRACE > 0) -struct VP8BitReader; -extern void BitTrace(const struct VP8BitReader* const br, const char label[]); -#define BT_TRACK(br) BitTrace(br, label) -#define VP8Get(BR, L) VP8GetValue(BR, 1, L) -#else -#define BT_TRACK(br) -// We'll REMOVE the 'const char label[]' from all signatures and calls (!!): -#define VP8GetValue(BR, N, L) VP8GetValue(BR, N) -#define VP8Get(BR, L) VP8GetValue(BR, 1, L) -#define VP8GetSignedValue(BR, N, L) VP8GetSignedValue(BR, N) -#define VP8GetBit(BR, P, L) VP8GetBit(BR, P) -#define VP8GetBitAlt(BR, P, L) VP8GetBitAlt(BR, P) -#define VP8GetSigned(BR, V, L) VP8GetSigned(BR, V) -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -// The Boolean decoder needs to maintain infinite precision on the value_ field. -// However, since range_ is only 8bit, we only need an active window of 8 bits -// for value_. Left bits (MSB) gets zeroed and shifted away when value_ falls -// below 128, range_ is updated, and fresh bits read from the bitstream are -// brought in as LSB. To avoid reading the fresh bits one by one (slow), we -// cache BITS of them ahead. The total of (BITS + 8) bits must fit into a -// natural register (with type bit_t). To fetch BITS bits from bitstream we -// use a type lbit_t. -// -// BITS can be any multiple of 8 from 8 to 56 (inclusive). -// Pick values that fit natural register size. - -#if defined(__i386__) || defined(_M_IX86) // x86 32bit -#define BITS 24 -#elif defined(__x86_64__) || defined(_M_X64) // x86 64bit -#define BITS 56 -#elif defined(__arm__) || defined(_M_ARM) // ARM -#define BITS 24 -#elif defined(__aarch64__) // ARM 64bit -#define BITS 56 -#elif defined(__mips__) // MIPS -#define BITS 24 -#else // reasonable default -#define BITS 24 -#endif - -//------------------------------------------------------------------------------ -// Derived types and constants: -// bit_t = natural register type for storing 'value_' (which is BITS+8 bits) -// range_t = register for 'range_' (which is 8bits only) - -#if (BITS > 24) -typedef uint64_t bit_t; -#else -typedef uint32_t bit_t; -#endif - -typedef uint32_t range_t; - -//------------------------------------------------------------------------------ -// Bitreader - -typedef struct VP8BitReader VP8BitReader; -struct VP8BitReader { - // boolean decoder (keep the field ordering as is!) - bit_t value_; // current value - range_t range_; // current range minus 1. In [127, 254] interval. - int bits_; // number of valid bits left - // read buffer - const uint8_t* buf_; // next byte to be read - const uint8_t* buf_end_; // end of read buffer - const uint8_t* buf_max_; // max packed-read position on buffer - int eof_; // true if input is exhausted -}; - -// Initialize the bit reader and the boolean decoder. -void VP8InitBitReader(VP8BitReader* const br, - const uint8_t* const start, size_t size); -// Sets the working read buffer. -void VP8BitReaderSetBuffer(VP8BitReader* const br, - const uint8_t* const start, size_t size); - -// Update internal pointers to displace the byte buffer by the -// relative offset 'offset'. -void VP8RemapBitReader(VP8BitReader* const br, ptrdiff_t offset); - -// return the next value made of 'num_bits' bits -uint32_t VP8GetValue(VP8BitReader* const br, int num_bits, const char label[]); - -// return the next value with sign-extension. -int32_t VP8GetSignedValue(VP8BitReader* const br, int num_bits, - const char label[]); - -// bit_reader_inl.h will implement the following methods: -// static WEBP_INLINE int VP8GetBit(VP8BitReader* const br, int prob, ...) -// static WEBP_INLINE int VP8GetSigned(VP8BitReader* const br, int v, ...) -// and should be included by the .c files that actually need them. -// This is to avoid recompiling the whole library whenever this file is touched, -// and also allowing platform-specific ad-hoc hacks. - -// ----------------------------------------------------------------------------- -// Bitreader for lossless format - -// maximum number of bits (inclusive) the bit-reader can handle: -#define VP8L_MAX_NUM_BIT_READ 24 - -#define VP8L_LBITS 64 // Number of bits prefetched (= bit-size of vp8l_val_t). -#define VP8L_WBITS 32 // Minimum number of bytes ready after VP8LFillBitWindow. - -typedef uint64_t vp8l_val_t; // right now, this bit-reader can only use 64bit. - -typedef struct { - vp8l_val_t val_; // pre-fetched bits - const uint8_t* buf_; // input byte buffer - size_t len_; // buffer length - size_t pos_; // byte position in buf_ - int bit_pos_; // current bit-reading position in val_ - int eos_; // true if a bit was read past the end of buffer -} VP8LBitReader; - -void VP8LInitBitReader(VP8LBitReader* const br, - const uint8_t* const start, - size_t length); - -// Sets a new data buffer. -void VP8LBitReaderSetBuffer(VP8LBitReader* const br, - const uint8_t* const buffer, size_t length); - -// Reads the specified number of bits from read buffer. -// Flags an error in case end_of_stream or n_bits is more than the allowed limit -// of VP8L_MAX_NUM_BIT_READ (inclusive). -// Flags eos_ if this read attempt is going to cross the read buffer. -uint32_t VP8LReadBits(VP8LBitReader* const br, int n_bits); - -// Return the prefetched bits, so they can be looked up. -static WEBP_INLINE uint32_t VP8LPrefetchBits(VP8LBitReader* const br) { - return (uint32_t)(br->val_ >> (br->bit_pos_ & (VP8L_LBITS - 1))); -} - -// Returns true if there was an attempt at reading bit past the end of -// the buffer. Doesn't set br->eos_ flag. -static WEBP_INLINE int VP8LIsEndOfStream(const VP8LBitReader* const br) { - assert(br->pos_ <= br->len_); - return br->eos_ || ((br->pos_ == br->len_) && (br->bit_pos_ > VP8L_LBITS)); -} - -// For jumping over a number of bits in the bit stream when accessed with -// VP8LPrefetchBits and VP8LFillBitWindow. -// This function does *not* set br->eos_, since it's speed-critical. -// Use with extreme care! -static WEBP_INLINE void VP8LSetBitPos(VP8LBitReader* const br, int val) { - br->bit_pos_ = val; -} - -// Advances the read buffer by 4 bytes to make room for reading next 32 bits. -// Speed critical, but infrequent part of the code can be non-inlined. -extern void VP8LDoFillBitWindow(VP8LBitReader* const br); -static WEBP_INLINE void VP8LFillBitWindow(VP8LBitReader* const br) { - if (br->bit_pos_ >= VP8L_WBITS) VP8LDoFillBitWindow(br); -} - -#ifdef __cplusplus -} // extern "C" -#endif - -#endif // WEBP_UTILS_BIT_READER_UTILS_H_ diff --git a/Extended/libwebp/src/utils/bit_writer_utils.c b/Extended/libwebp/src/utils/bit_writer_utils.c deleted file mode 100644 index bef0e31..0000000 --- a/Extended/libwebp/src/utils/bit_writer_utils.c +++ /dev/null @@ -1,347 +0,0 @@ -// Copyright 2011 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Bit writing and boolean coder -// -// Author: Skal (pascal.massimino@gmail.com) -// Vikas Arora (vikaas.arora@gmail.com) - -#include -#include // for memcpy() -#include - -#include "src/utils/bit_writer_utils.h" -#include "src/utils/endian_inl_utils.h" -#include "src/utils/utils.h" - -//------------------------------------------------------------------------------ -// VP8BitWriter - -static int BitWriterResize(VP8BitWriter* const bw, size_t extra_size) { - uint8_t* new_buf; - size_t new_size; - const uint64_t needed_size_64b = (uint64_t)bw->pos_ + extra_size; - const size_t needed_size = (size_t)needed_size_64b; - if (needed_size_64b != needed_size) { - bw->error_ = 1; - return 0; - } - if (needed_size <= bw->max_pos_) return 1; - // If the following line wraps over 32bit, the test just after will catch it. - new_size = 2 * bw->max_pos_; - if (new_size < needed_size) new_size = needed_size; - if (new_size < 1024) new_size = 1024; - new_buf = (uint8_t*)WebPSafeMalloc(1ULL, new_size); - if (new_buf == NULL) { - bw->error_ = 1; - return 0; - } - if (bw->pos_ > 0) { - assert(bw->buf_ != NULL); - memcpy(new_buf, bw->buf_, bw->pos_); - } - WebPSafeFree(bw->buf_); - bw->buf_ = new_buf; - bw->max_pos_ = new_size; - return 1; -} - -static void Flush(VP8BitWriter* const bw) { - const int s = 8 + bw->nb_bits_; - const int32_t bits = bw->value_ >> s; - assert(bw->nb_bits_ >= 0); - bw->value_ -= bits << s; - bw->nb_bits_ -= 8; - if ((bits & 0xff) != 0xff) { - size_t pos = bw->pos_; - if (!BitWriterResize(bw, bw->run_ + 1)) { - return; - } - if (bits & 0x100) { // overflow -> propagate carry over pending 0xff's - if (pos > 0) bw->buf_[pos - 1]++; - } - if (bw->run_ > 0) { - const int value = (bits & 0x100) ? 0x00 : 0xff; - for (; bw->run_ > 0; --bw->run_) bw->buf_[pos++] = value; - } - bw->buf_[pos++] = bits & 0xff; - bw->pos_ = pos; - } else { - bw->run_++; // delay writing of bytes 0xff, pending eventual carry. - } -} - -//------------------------------------------------------------------------------ -// renormalization - -static const uint8_t kNorm[128] = { // renorm_sizes[i] = 8 - log2(i) - 7, 6, 6, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 0 -}; - -// range = ((range + 1) << kVP8Log2Range[range]) - 1 -static const uint8_t kNewRange[128] = { - 127, 127, 191, 127, 159, 191, 223, 127, 143, 159, 175, 191, 207, 223, 239, - 127, 135, 143, 151, 159, 167, 175, 183, 191, 199, 207, 215, 223, 231, 239, - 247, 127, 131, 135, 139, 143, 147, 151, 155, 159, 163, 167, 171, 175, 179, - 183, 187, 191, 195, 199, 203, 207, 211, 215, 219, 223, 227, 231, 235, 239, - 243, 247, 251, 127, 129, 131, 133, 135, 137, 139, 141, 143, 145, 147, 149, - 151, 153, 155, 157, 159, 161, 163, 165, 167, 169, 171, 173, 175, 177, 179, - 181, 183, 185, 187, 189, 191, 193, 195, 197, 199, 201, 203, 205, 207, 209, - 211, 213, 215, 217, 219, 221, 223, 225, 227, 229, 231, 233, 235, 237, 239, - 241, 243, 245, 247, 249, 251, 253, 127 -}; - -int VP8PutBit(VP8BitWriter* const bw, int bit, int prob) { - const int split = (bw->range_ * prob) >> 8; - if (bit) { - bw->value_ += split + 1; - bw->range_ -= split + 1; - } else { - bw->range_ = split; - } - if (bw->range_ < 127) { // emit 'shift' bits out and renormalize - const int shift = kNorm[bw->range_]; - bw->range_ = kNewRange[bw->range_]; - bw->value_ <<= shift; - bw->nb_bits_ += shift; - if (bw->nb_bits_ > 0) Flush(bw); - } - return bit; -} - -int VP8PutBitUniform(VP8BitWriter* const bw, int bit) { - const int split = bw->range_ >> 1; - if (bit) { - bw->value_ += split + 1; - bw->range_ -= split + 1; - } else { - bw->range_ = split; - } - if (bw->range_ < 127) { - bw->range_ = kNewRange[bw->range_]; - bw->value_ <<= 1; - bw->nb_bits_ += 1; - if (bw->nb_bits_ > 0) Flush(bw); - } - return bit; -} - -void VP8PutBits(VP8BitWriter* const bw, uint32_t value, int nb_bits) { - uint32_t mask; - assert(nb_bits > 0 && nb_bits < 32); - for (mask = 1u << (nb_bits - 1); mask; mask >>= 1) { - VP8PutBitUniform(bw, value & mask); - } -} - -void VP8PutSignedBits(VP8BitWriter* const bw, int value, int nb_bits) { - if (!VP8PutBitUniform(bw, value != 0)) return; - if (value < 0) { - VP8PutBits(bw, ((-value) << 1) | 1, nb_bits + 1); - } else { - VP8PutBits(bw, value << 1, nb_bits + 1); - } -} - -//------------------------------------------------------------------------------ - -int VP8BitWriterInit(VP8BitWriter* const bw, size_t expected_size) { - bw->range_ = 255 - 1; - bw->value_ = 0; - bw->run_ = 0; - bw->nb_bits_ = -8; - bw->pos_ = 0; - bw->max_pos_ = 0; - bw->error_ = 0; - bw->buf_ = NULL; - return (expected_size > 0) ? BitWriterResize(bw, expected_size) : 1; -} - -uint8_t* VP8BitWriterFinish(VP8BitWriter* const bw) { - VP8PutBits(bw, 0, 9 - bw->nb_bits_); - bw->nb_bits_ = 0; // pad with zeroes - Flush(bw); - return bw->buf_; -} - -int VP8BitWriterAppend(VP8BitWriter* const bw, - const uint8_t* data, size_t size) { - assert(data != NULL); - if (bw->nb_bits_ != -8) return 0; // Flush() must have been called - if (!BitWriterResize(bw, size)) return 0; - memcpy(bw->buf_ + bw->pos_, data, size); - bw->pos_ += size; - return 1; -} - -void VP8BitWriterWipeOut(VP8BitWriter* const bw) { - if (bw != NULL) { - WebPSafeFree(bw->buf_); - memset(bw, 0, sizeof(*bw)); - } -} - -//------------------------------------------------------------------------------ -// VP8LBitWriter - -// This is the minimum amount of size the memory buffer is guaranteed to grow -// when extra space is needed. -#define MIN_EXTRA_SIZE (32768ULL) - -// Returns 1 on success. -static int VP8LBitWriterResize(VP8LBitWriter* const bw, size_t extra_size) { - uint8_t* allocated_buf; - size_t allocated_size; - const size_t max_bytes = bw->end_ - bw->buf_; - const size_t current_size = bw->cur_ - bw->buf_; - const uint64_t size_required_64b = (uint64_t)current_size + extra_size; - const size_t size_required = (size_t)size_required_64b; - if (size_required != size_required_64b) { - bw->error_ = 1; - return 0; - } - if (max_bytes > 0 && size_required <= max_bytes) return 1; - allocated_size = (3 * max_bytes) >> 1; - if (allocated_size < size_required) allocated_size = size_required; - // make allocated size multiple of 1k - allocated_size = (((allocated_size >> 10) + 1) << 10); - allocated_buf = (uint8_t*)WebPSafeMalloc(1ULL, allocated_size); - if (allocated_buf == NULL) { - bw->error_ = 1; - return 0; - } - if (current_size > 0) { - memcpy(allocated_buf, bw->buf_, current_size); - } - WebPSafeFree(bw->buf_); - bw->buf_ = allocated_buf; - bw->cur_ = bw->buf_ + current_size; - bw->end_ = bw->buf_ + allocated_size; - return 1; -} - -int VP8LBitWriterInit(VP8LBitWriter* const bw, size_t expected_size) { - memset(bw, 0, sizeof(*bw)); - return VP8LBitWriterResize(bw, expected_size); -} - -int VP8LBitWriterClone(const VP8LBitWriter* const src, - VP8LBitWriter* const dst) { - const size_t current_size = src->cur_ - src->buf_; - assert(src->cur_ >= src->buf_ && src->cur_ <= src->end_); - if (!VP8LBitWriterResize(dst, current_size)) return 0; - memcpy(dst->buf_, src->buf_, current_size); - dst->bits_ = src->bits_; - dst->used_ = src->used_; - dst->error_ = src->error_; - dst->cur_ = dst->buf_ + current_size; - return 1; -} - -void VP8LBitWriterWipeOut(VP8LBitWriter* const bw) { - if (bw != NULL) { - WebPSafeFree(bw->buf_); - memset(bw, 0, sizeof(*bw)); - } -} - -void VP8LBitWriterReset(const VP8LBitWriter* const bw_init, - VP8LBitWriter* const bw) { - bw->bits_ = bw_init->bits_; - bw->used_ = bw_init->used_; - bw->cur_ = bw->buf_ + (bw_init->cur_ - bw_init->buf_); - assert(bw->cur_ <= bw->end_); - bw->error_ = bw_init->error_; -} - -void VP8LBitWriterSwap(VP8LBitWriter* const src, VP8LBitWriter* const dst) { - const VP8LBitWriter tmp = *src; - *src = *dst; - *dst = tmp; -} - -void VP8LPutBitsFlushBits(VP8LBitWriter* const bw) { - // If needed, make some room by flushing some bits out. - if (bw->cur_ + VP8L_WRITER_BYTES > bw->end_) { - const uint64_t extra_size = (bw->end_ - bw->buf_) + MIN_EXTRA_SIZE; - if (extra_size != (size_t)extra_size || - !VP8LBitWriterResize(bw, (size_t)extra_size)) { - bw->cur_ = bw->buf_; - bw->error_ = 1; - return; - } - } - *(vp8l_wtype_t*)bw->cur_ = (vp8l_wtype_t)WSWAP((vp8l_wtype_t)bw->bits_); - bw->cur_ += VP8L_WRITER_BYTES; - bw->bits_ >>= VP8L_WRITER_BITS; - bw->used_ -= VP8L_WRITER_BITS; -} - -void VP8LPutBitsInternal(VP8LBitWriter* const bw, uint32_t bits, int n_bits) { - assert(n_bits <= 32); - // That's the max we can handle: - assert(sizeof(vp8l_wtype_t) == 2); - if (n_bits > 0) { - vp8l_atype_t lbits = bw->bits_; - int used = bw->used_; - // Special case of overflow handling for 32bit accumulator (2-steps flush). -#if VP8L_WRITER_BITS == 16 - if (used + n_bits >= VP8L_WRITER_MAX_BITS) { - // Fill up all the VP8L_WRITER_MAX_BITS so it can be flushed out below. - const int shift = VP8L_WRITER_MAX_BITS - used; - lbits |= (vp8l_atype_t)bits << used; - used = VP8L_WRITER_MAX_BITS; - n_bits -= shift; - bits >>= shift; - assert(n_bits <= VP8L_WRITER_MAX_BITS); - } -#endif - // If needed, make some room by flushing some bits out. - while (used >= VP8L_WRITER_BITS) { - if (bw->cur_ + VP8L_WRITER_BYTES > bw->end_) { - const uint64_t extra_size = (bw->end_ - bw->buf_) + MIN_EXTRA_SIZE; - if (extra_size != (size_t)extra_size || - !VP8LBitWriterResize(bw, (size_t)extra_size)) { - bw->cur_ = bw->buf_; - bw->error_ = 1; - return; - } - } - *(vp8l_wtype_t*)bw->cur_ = (vp8l_wtype_t)WSWAP((vp8l_wtype_t)lbits); - bw->cur_ += VP8L_WRITER_BYTES; - lbits >>= VP8L_WRITER_BITS; - used -= VP8L_WRITER_BITS; - } - bw->bits_ = lbits | ((vp8l_atype_t)bits << used); - bw->used_ = used + n_bits; - } -} - -uint8_t* VP8LBitWriterFinish(VP8LBitWriter* const bw) { - // flush leftover bits - if (VP8LBitWriterResize(bw, (bw->used_ + 7) >> 3)) { - while (bw->used_ > 0) { - *bw->cur_++ = (uint8_t)bw->bits_; - bw->bits_ >>= 8; - bw->used_ -= 8; - } - bw->used_ = 0; - } - return bw->buf_; -} - -//------------------------------------------------------------------------------ diff --git a/Extended/libwebp/src/utils/bit_writer_utils.h b/Extended/libwebp/src/utils/bit_writer_utils.h deleted file mode 100644 index b9d5102..0000000 --- a/Extended/libwebp/src/utils/bit_writer_utils.h +++ /dev/null @@ -1,154 +0,0 @@ -// Copyright 2011 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Bit writing and boolean coder -// -// Author: Skal (pascal.massimino@gmail.com) - -#ifndef WEBP_UTILS_BIT_WRITER_UTILS_H_ -#define WEBP_UTILS_BIT_WRITER_UTILS_H_ - -#include "src/webp/types.h" - -#ifdef __cplusplus -extern "C" { -#endif - -//------------------------------------------------------------------------------ -// Bit-writing - -typedef struct VP8BitWriter VP8BitWriter; -struct VP8BitWriter { - int32_t range_; // range-1 - int32_t value_; - int run_; // number of outstanding bits - int nb_bits_; // number of pending bits - uint8_t* buf_; // internal buffer. Re-allocated regularly. Not owned. - size_t pos_; - size_t max_pos_; - int error_; // true in case of error -}; - -// Initialize the object. Allocates some initial memory based on expected_size. -int VP8BitWriterInit(VP8BitWriter* const bw, size_t expected_size); -// Finalize the bitstream coding. Returns a pointer to the internal buffer. -uint8_t* VP8BitWriterFinish(VP8BitWriter* const bw); -// Release any pending memory and zeroes the object. Not a mandatory call. -// Only useful in case of error, when the internal buffer hasn't been grabbed! -void VP8BitWriterWipeOut(VP8BitWriter* const bw); - -int VP8PutBit(VP8BitWriter* const bw, int bit, int prob); -int VP8PutBitUniform(VP8BitWriter* const bw, int bit); -void VP8PutBits(VP8BitWriter* const bw, uint32_t value, int nb_bits); -void VP8PutSignedBits(VP8BitWriter* const bw, int value, int nb_bits); - -// Appends some bytes to the internal buffer. Data is copied. -int VP8BitWriterAppend(VP8BitWriter* const bw, - const uint8_t* data, size_t size); - -// return approximate write position (in bits) -static WEBP_INLINE uint64_t VP8BitWriterPos(const VP8BitWriter* const bw) { - const uint64_t nb_bits = 8 + bw->nb_bits_; // bw->nb_bits_ is <= 0, note - return (bw->pos_ + bw->run_) * 8 + nb_bits; -} - -// Returns a pointer to the internal buffer. -static WEBP_INLINE uint8_t* VP8BitWriterBuf(const VP8BitWriter* const bw) { - return bw->buf_; -} -// Returns the size of the internal buffer. -static WEBP_INLINE size_t VP8BitWriterSize(const VP8BitWriter* const bw) { - return bw->pos_; -} - -//------------------------------------------------------------------------------ -// VP8LBitWriter - -#if defined(__x86_64__) || defined(_M_X64) // 64bit -typedef uint64_t vp8l_atype_t; // accumulator type -typedef uint32_t vp8l_wtype_t; // writing type -#define WSWAP HToLE32 -#define VP8L_WRITER_BYTES 4 // sizeof(vp8l_wtype_t) -#define VP8L_WRITER_BITS 32 // 8 * sizeof(vp8l_wtype_t) -#define VP8L_WRITER_MAX_BITS 64 // 8 * sizeof(vp8l_atype_t) -#else -typedef uint32_t vp8l_atype_t; -typedef uint16_t vp8l_wtype_t; -#define WSWAP HToLE16 -#define VP8L_WRITER_BYTES 2 -#define VP8L_WRITER_BITS 16 -#define VP8L_WRITER_MAX_BITS 32 -#endif - -typedef struct { - vp8l_atype_t bits_; // bit accumulator - int used_; // number of bits used in accumulator - uint8_t* buf_; // start of buffer - uint8_t* cur_; // current write position - uint8_t* end_; // end of buffer - - // After all bits are written (VP8LBitWriterFinish()), the caller must observe - // the state of error_. A value of 1 indicates that a memory allocation - // failure has happened during bit writing. A value of 0 indicates successful - // writing of bits. - int error_; -} VP8LBitWriter; - -static WEBP_INLINE size_t VP8LBitWriterNumBytes(const VP8LBitWriter* const bw) { - return (bw->cur_ - bw->buf_) + ((bw->used_ + 7) >> 3); -} - -// Returns false in case of memory allocation error. -int VP8LBitWriterInit(VP8LBitWriter* const bw, size_t expected_size); -// Returns false in case of memory allocation error. -int VP8LBitWriterClone(const VP8LBitWriter* const src, - VP8LBitWriter* const dst); -// Finalize the bitstream coding. Returns a pointer to the internal buffer. -uint8_t* VP8LBitWriterFinish(VP8LBitWriter* const bw); -// Release any pending memory and zeroes the object. -void VP8LBitWriterWipeOut(VP8LBitWriter* const bw); -// Resets the cursor of the BitWriter bw to when it was like in bw_init. -void VP8LBitWriterReset(const VP8LBitWriter* const bw_init, - VP8LBitWriter* const bw); -// Swaps the memory held by two BitWriters. -void VP8LBitWriterSwap(VP8LBitWriter* const src, VP8LBitWriter* const dst); - -// Internal function for VP8LPutBits flushing 32 bits from the written state. -void VP8LPutBitsFlushBits(VP8LBitWriter* const bw); - -// PutBits internal function used in the 16 bit vp8l_wtype_t case. -void VP8LPutBitsInternal(VP8LBitWriter* const bw, uint32_t bits, int n_bits); - -// This function writes bits into bytes in increasing addresses (little endian), -// and within a byte least-significant-bit first. -// This function can write up to 32 bits in one go, but VP8LBitReader can only -// read 24 bits max (VP8L_MAX_NUM_BIT_READ). -// VP8LBitWriter's error_ flag is set in case of memory allocation error. -static WEBP_INLINE void VP8LPutBits(VP8LBitWriter* const bw, - uint32_t bits, int n_bits) { - if (sizeof(vp8l_wtype_t) == 4) { - if (n_bits > 0) { - if (bw->used_ >= 32) { - VP8LPutBitsFlushBits(bw); - } - bw->bits_ |= (vp8l_atype_t)bits << bw->used_; - bw->used_ += n_bits; - } - } else { - VP8LPutBitsInternal(bw, bits, n_bits); - } -} - -//------------------------------------------------------------------------------ - -#ifdef __cplusplus -} // extern "C" -#endif - -#endif // WEBP_UTILS_BIT_WRITER_UTILS_H_ diff --git a/Extended/libwebp/src/utils/color_cache_utils.c b/Extended/libwebp/src/utils/color_cache_utils.c deleted file mode 100644 index b09f538..0000000 --- a/Extended/libwebp/src/utils/color_cache_utils.c +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2012 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Color Cache for WebP Lossless -// -// Author: Jyrki Alakuijala (jyrki@google.com) - -#include -#include -#include -#include "src/utils/color_cache_utils.h" -#include "src/utils/utils.h" - -//------------------------------------------------------------------------------ -// VP8LColorCache. - -int VP8LColorCacheInit(VP8LColorCache* const cc, int hash_bits) { - const int hash_size = 1 << hash_bits; - assert(cc != NULL); - assert(hash_bits > 0); - cc->colors_ = (uint32_t*)WebPSafeCalloc((uint64_t)hash_size, - sizeof(*cc->colors_)); - if (cc->colors_ == NULL) return 0; - cc->hash_shift_ = 32 - hash_bits; - cc->hash_bits_ = hash_bits; - return 1; -} - -void VP8LColorCacheClear(VP8LColorCache* const cc) { - if (cc != NULL) { - WebPSafeFree(cc->colors_); - cc->colors_ = NULL; - } -} - -void VP8LColorCacheCopy(const VP8LColorCache* const src, - VP8LColorCache* const dst) { - assert(src != NULL); - assert(dst != NULL); - assert(src->hash_bits_ == dst->hash_bits_); - memcpy(dst->colors_, src->colors_, - ((size_t)1u << dst->hash_bits_) * sizeof(*dst->colors_)); -} diff --git a/Extended/libwebp/src/utils/color_cache_utils.h b/Extended/libwebp/src/utils/color_cache_utils.h deleted file mode 100644 index b45d47c..0000000 --- a/Extended/libwebp/src/utils/color_cache_utils.h +++ /dev/null @@ -1,89 +0,0 @@ -// Copyright 2012 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Color Cache for WebP Lossless -// -// Authors: Jyrki Alakuijala (jyrki@google.com) -// Urvang Joshi (urvang@google.com) - -#ifndef WEBP_UTILS_COLOR_CACHE_UTILS_H_ -#define WEBP_UTILS_COLOR_CACHE_UTILS_H_ - -#include - -#include "src/dsp/dsp.h" -#include "src/webp/types.h" - -#ifdef __cplusplus -extern "C" { -#endif - -// Main color cache struct. -typedef struct { - uint32_t* colors_; // color entries - int hash_shift_; // Hash shift: 32 - hash_bits_. - int hash_bits_; -} VP8LColorCache; - -static const uint32_t kHashMul = 0x1e35a7bdu; - -static WEBP_UBSAN_IGNORE_UNSIGNED_OVERFLOW WEBP_INLINE -int VP8LHashPix(uint32_t argb, int shift) { - return (int)((argb * kHashMul) >> shift); -} - -static WEBP_INLINE uint32_t VP8LColorCacheLookup( - const VP8LColorCache* const cc, uint32_t key) { - assert((key >> cc->hash_bits_) == 0u); - return cc->colors_[key]; -} - -static WEBP_INLINE void VP8LColorCacheSet(const VP8LColorCache* const cc, - uint32_t key, uint32_t argb) { - assert((key >> cc->hash_bits_) == 0u); - cc->colors_[key] = argb; -} - -static WEBP_INLINE void VP8LColorCacheInsert(const VP8LColorCache* const cc, - uint32_t argb) { - const int key = VP8LHashPix(argb, cc->hash_shift_); - cc->colors_[key] = argb; -} - -static WEBP_INLINE int VP8LColorCacheGetIndex(const VP8LColorCache* const cc, - uint32_t argb) { - return VP8LHashPix(argb, cc->hash_shift_); -} - -// Return the key if cc contains argb, and -1 otherwise. -static WEBP_INLINE int VP8LColorCacheContains(const VP8LColorCache* const cc, - uint32_t argb) { - const int key = VP8LHashPix(argb, cc->hash_shift_); - return (cc->colors_[key] == argb) ? key : -1; -} - -//------------------------------------------------------------------------------ - -// Initializes the color cache with 'hash_bits' bits for the keys. -// Returns false in case of memory error. -int VP8LColorCacheInit(VP8LColorCache* const color_cache, int hash_bits); - -void VP8LColorCacheCopy(const VP8LColorCache* const src, - VP8LColorCache* const dst); - -// Delete the memory associated to color cache. -void VP8LColorCacheClear(VP8LColorCache* const color_cache); - -//------------------------------------------------------------------------------ - -#ifdef __cplusplus -} -#endif - -#endif // WEBP_UTILS_COLOR_CACHE_UTILS_H_ diff --git a/Extended/libwebp/src/utils/endian_inl_utils.h b/Extended/libwebp/src/utils/endian_inl_utils.h deleted file mode 100644 index 3630a29..0000000 --- a/Extended/libwebp/src/utils/endian_inl_utils.h +++ /dev/null @@ -1,93 +0,0 @@ -// Copyright 2014 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Endian related functions. - -#ifndef WEBP_UTILS_ENDIAN_INL_UTILS_H_ -#define WEBP_UTILS_ENDIAN_INL_UTILS_H_ - -#ifdef HAVE_CONFIG_H -#include "src/webp/config.h" -#endif - -#include "src/dsp/dsp.h" -#include "src/webp/types.h" - -#if defined(WORDS_BIGENDIAN) -#define HToLE32 BSwap32 -#define HToLE16 BSwap16 -#else -#define HToLE32(x) (x) -#define HToLE16(x) (x) -#endif - -#if !defined(HAVE_CONFIG_H) -#if LOCAL_GCC_PREREQ(4,8) || __has_builtin(__builtin_bswap16) -#define HAVE_BUILTIN_BSWAP16 -#endif -#if LOCAL_GCC_PREREQ(4,3) || __has_builtin(__builtin_bswap32) -#define HAVE_BUILTIN_BSWAP32 -#endif -#if LOCAL_GCC_PREREQ(4,3) || __has_builtin(__builtin_bswap64) -#define HAVE_BUILTIN_BSWAP64 -#endif -#endif // !HAVE_CONFIG_H - -static WEBP_INLINE uint16_t BSwap16(uint16_t x) { -#if defined(HAVE_BUILTIN_BSWAP16) - return __builtin_bswap16(x); -#elif defined(_MSC_VER) - return _byteswap_ushort(x); -#else - // gcc will recognize a 'rorw $8, ...' here: - return (x >> 8) | ((x & 0xff) << 8); -#endif // HAVE_BUILTIN_BSWAP16 -} - -static WEBP_INLINE uint32_t BSwap32(uint32_t x) { -#if defined(WEBP_USE_MIPS32_R2) - uint32_t ret; - __asm__ volatile ( - "wsbh %[ret], %[x] \n\t" - "rotr %[ret], %[ret], 16 \n\t" - : [ret]"=r"(ret) - : [x]"r"(x) - ); - return ret; -#elif defined(HAVE_BUILTIN_BSWAP32) - return __builtin_bswap32(x); -#elif defined(__i386__) || defined(__x86_64__) - uint32_t swapped_bytes; - __asm__ volatile("bswap %0" : "=r"(swapped_bytes) : "0"(x)); - return swapped_bytes; -#elif defined(_MSC_VER) - return (uint32_t)_byteswap_ulong(x); -#else - return (x >> 24) | ((x >> 8) & 0xff00) | ((x << 8) & 0xff0000) | (x << 24); -#endif // HAVE_BUILTIN_BSWAP32 -} - -static WEBP_INLINE uint64_t BSwap64(uint64_t x) { -#if defined(HAVE_BUILTIN_BSWAP64) - return __builtin_bswap64(x); -#elif defined(__x86_64__) - uint64_t swapped_bytes; - __asm__ volatile("bswapq %0" : "=r"(swapped_bytes) : "0"(x)); - return swapped_bytes; -#elif defined(_MSC_VER) - return (uint64_t)_byteswap_uint64(x); -#else // generic code for swapping 64-bit values (suggested by bdb@) - x = ((x & 0xffffffff00000000ull) >> 32) | ((x & 0x00000000ffffffffull) << 32); - x = ((x & 0xffff0000ffff0000ull) >> 16) | ((x & 0x0000ffff0000ffffull) << 16); - x = ((x & 0xff00ff00ff00ff00ull) >> 8) | ((x & 0x00ff00ff00ff00ffull) << 8); - return x; -#endif // HAVE_BUILTIN_BSWAP64 -} - -#endif // WEBP_UTILS_ENDIAN_INL_UTILS_H_ diff --git a/Extended/libwebp/src/utils/filters_utils.c b/Extended/libwebp/src/utils/filters_utils.c deleted file mode 100644 index bbc2c34..0000000 --- a/Extended/libwebp/src/utils/filters_utils.c +++ /dev/null @@ -1,76 +0,0 @@ -// Copyright 2011 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// filter estimation -// -// Author: Urvang (urvang@google.com) - -#include "src/utils/filters_utils.h" -#include -#include - -// ----------------------------------------------------------------------------- -// Quick estimate of a potentially interesting filter mode to try. - -#define SMAX 16 -#define SDIFF(a, b) (abs((a) - (b)) >> 4) // Scoring diff, in [0..SMAX) - -static WEBP_INLINE int GradientPredictor(uint8_t a, uint8_t b, uint8_t c) { - const int g = a + b - c; - return ((g & ~0xff) == 0) ? g : (g < 0) ? 0 : 255; // clip to 8bit -} - -WEBP_FILTER_TYPE WebPEstimateBestFilter(const uint8_t* data, - int width, int height, int stride) { - int i, j; - int bins[WEBP_FILTER_LAST][SMAX]; - memset(bins, 0, sizeof(bins)); - - // We only sample every other pixels. That's enough. - for (j = 2; j < height - 1; j += 2) { - const uint8_t* const p = data + j * stride; - int mean = p[0]; - for (i = 2; i < width - 1; i += 2) { - const int diff0 = SDIFF(p[i], mean); - const int diff1 = SDIFF(p[i], p[i - 1]); - const int diff2 = SDIFF(p[i], p[i - width]); - const int grad_pred = - GradientPredictor(p[i - 1], p[i - width], p[i - width - 1]); - const int diff3 = SDIFF(p[i], grad_pred); - bins[WEBP_FILTER_NONE][diff0] = 1; - bins[WEBP_FILTER_HORIZONTAL][diff1] = 1; - bins[WEBP_FILTER_VERTICAL][diff2] = 1; - bins[WEBP_FILTER_GRADIENT][diff3] = 1; - mean = (3 * mean + p[i] + 2) >> 2; - } - } - { - int filter; - WEBP_FILTER_TYPE best_filter = WEBP_FILTER_NONE; - int best_score = 0x7fffffff; - for (filter = WEBP_FILTER_NONE; filter < WEBP_FILTER_LAST; ++filter) { - int score = 0; - for (i = 0; i < SMAX; ++i) { - if (bins[filter][i] > 0) { - score += i; - } - } - if (score < best_score) { - best_score = score; - best_filter = (WEBP_FILTER_TYPE)filter; - } - } - return best_filter; - } -} - -#undef SMAX -#undef SDIFF - -//------------------------------------------------------------------------------ diff --git a/Extended/libwebp/src/utils/filters_utils.h b/Extended/libwebp/src/utils/filters_utils.h deleted file mode 100644 index 61da66e..0000000 --- a/Extended/libwebp/src/utils/filters_utils.h +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright 2011 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Spatial prediction using various filters -// -// Author: Urvang (urvang@google.com) - -#ifndef WEBP_UTILS_FILTERS_UTILS_H_ -#define WEBP_UTILS_FILTERS_UTILS_H_ - -#include "src/webp/types.h" -#include "src/dsp/dsp.h" - -#ifdef __cplusplus -extern "C" { -#endif - -// Fast estimate of a potentially good filter. -WEBP_FILTER_TYPE WebPEstimateBestFilter(const uint8_t* data, - int width, int height, int stride); - -#ifdef __cplusplus -} // extern "C" -#endif - -#endif // WEBP_UTILS_FILTERS_UTILS_H_ diff --git a/Extended/libwebp/src/utils/huffman_encode_utils.c b/Extended/libwebp/src/utils/huffman_encode_utils.c deleted file mode 100644 index 6f3b1bb..0000000 --- a/Extended/libwebp/src/utils/huffman_encode_utils.c +++ /dev/null @@ -1,417 +0,0 @@ -// Copyright 2011 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Author: Jyrki Alakuijala (jyrki@google.com) -// -// Entropy encoding (Huffman) for webp lossless. - -#include -#include -#include -#include "src/utils/huffman_encode_utils.h" -#include "src/utils/utils.h" -#include "src/webp/format_constants.h" - -// ----------------------------------------------------------------------------- -// Util function to optimize the symbol map for RLE coding - -// Heuristics for selecting the stride ranges to collapse. -static int ValuesShouldBeCollapsedToStrideAverage(int a, int b) { - return abs(a - b) < 4; -} - -// Change the population counts in a way that the consequent -// Huffman tree compression, especially its RLE-part, give smaller output. -static void OptimizeHuffmanForRle(int length, uint8_t* const good_for_rle, - uint32_t* const counts) { - // 1) Let's make the Huffman code more compatible with rle encoding. - int i; - for (; length >= 0; --length) { - if (length == 0) { - return; // All zeros. - } - if (counts[length - 1] != 0) { - // Now counts[0..length - 1] does not have trailing zeros. - break; - } - } - // 2) Let's mark all population counts that already can be encoded - // with an rle code. - { - // Let's not spoil any of the existing good rle codes. - // Mark any seq of 0's that is longer as 5 as a good_for_rle. - // Mark any seq of non-0's that is longer as 7 as a good_for_rle. - uint32_t symbol = counts[0]; - int stride = 0; - for (i = 0; i < length + 1; ++i) { - if (i == length || counts[i] != symbol) { - if ((symbol == 0 && stride >= 5) || - (symbol != 0 && stride >= 7)) { - int k; - for (k = 0; k < stride; ++k) { - good_for_rle[i - k - 1] = 1; - } - } - stride = 1; - if (i != length) { - symbol = counts[i]; - } - } else { - ++stride; - } - } - } - // 3) Let's replace those population counts that lead to more rle codes. - { - uint32_t stride = 0; - uint32_t limit = counts[0]; - uint32_t sum = 0; - for (i = 0; i < length + 1; ++i) { - if (i == length || good_for_rle[i] || - (i != 0 && good_for_rle[i - 1]) || - !ValuesShouldBeCollapsedToStrideAverage(counts[i], limit)) { - if (stride >= 4 || (stride >= 3 && sum == 0)) { - uint32_t k; - // The stride must end, collapse what we have, if we have enough (4). - uint32_t count = (sum + stride / 2) / stride; - if (count < 1) { - count = 1; - } - if (sum == 0) { - // Don't make an all zeros stride to be upgraded to ones. - count = 0; - } - for (k = 0; k < stride; ++k) { - // We don't want to change value at counts[i], - // that is already belonging to the next stride. Thus - 1. - counts[i - k - 1] = count; - } - } - stride = 0; - sum = 0; - if (i < length - 3) { - // All interesting strides have a count of at least 4, - // at least when non-zeros. - limit = (counts[i] + counts[i + 1] + - counts[i + 2] + counts[i + 3] + 2) / 4; - } else if (i < length) { - limit = counts[i]; - } else { - limit = 0; - } - } - ++stride; - if (i != length) { - sum += counts[i]; - if (stride >= 4) { - limit = (sum + stride / 2) / stride; - } - } - } - } -} - -// A comparer function for two Huffman trees: sorts first by 'total count' -// (more comes first), and then by 'value' (more comes first). -static int CompareHuffmanTrees(const void* ptr1, const void* ptr2) { - const HuffmanTree* const t1 = (const HuffmanTree*)ptr1; - const HuffmanTree* const t2 = (const HuffmanTree*)ptr2; - if (t1->total_count_ > t2->total_count_) { - return -1; - } else if (t1->total_count_ < t2->total_count_) { - return 1; - } else { - assert(t1->value_ != t2->value_); - return (t1->value_ < t2->value_) ? -1 : 1; - } -} - -static void SetBitDepths(const HuffmanTree* const tree, - const HuffmanTree* const pool, - uint8_t* const bit_depths, int level) { - if (tree->pool_index_left_ >= 0) { - SetBitDepths(&pool[tree->pool_index_left_], pool, bit_depths, level + 1); - SetBitDepths(&pool[tree->pool_index_right_], pool, bit_depths, level + 1); - } else { - bit_depths[tree->value_] = level; - } -} - -// Create an optimal Huffman tree. -// -// (data,length): population counts. -// tree_limit: maximum bit depth (inclusive) of the codes. -// bit_depths[]: how many bits are used for the symbol. -// -// Returns 0 when an error has occurred. -// -// The catch here is that the tree cannot be arbitrarily deep -// -// count_limit is the value that is to be faked as the minimum value -// and this minimum value is raised until the tree matches the -// maximum length requirement. -// -// This algorithm is not of excellent performance for very long data blocks, -// especially when population counts are longer than 2**tree_limit, but -// we are not planning to use this with extremely long blocks. -// -// See http://en.wikipedia.org/wiki/Huffman_coding -static void GenerateOptimalTree(const uint32_t* const histogram, - int histogram_size, - HuffmanTree* tree, int tree_depth_limit, - uint8_t* const bit_depths) { - uint32_t count_min; - HuffmanTree* tree_pool; - int tree_size_orig = 0; - int i; - - for (i = 0; i < histogram_size; ++i) { - if (histogram[i] != 0) { - ++tree_size_orig; - } - } - - if (tree_size_orig == 0) { // pretty optimal already! - return; - } - - tree_pool = tree + tree_size_orig; - - // For block sizes with less than 64k symbols we never need to do a - // second iteration of this loop. - // If we actually start running inside this loop a lot, we would perhaps - // be better off with the Katajainen algorithm. - assert(tree_size_orig <= (1 << (tree_depth_limit - 1))); - for (count_min = 1; ; count_min *= 2) { - int tree_size = tree_size_orig; - // We need to pack the Huffman tree in tree_depth_limit bits. - // So, we try by faking histogram entries to be at least 'count_min'. - int idx = 0; - int j; - for (j = 0; j < histogram_size; ++j) { - if (histogram[j] != 0) { - const uint32_t count = - (histogram[j] < count_min) ? count_min : histogram[j]; - tree[idx].total_count_ = count; - tree[idx].value_ = j; - tree[idx].pool_index_left_ = -1; - tree[idx].pool_index_right_ = -1; - ++idx; - } - } - - // Build the Huffman tree. - qsort(tree, tree_size, sizeof(*tree), CompareHuffmanTrees); - - if (tree_size > 1) { // Normal case. - int tree_pool_size = 0; - while (tree_size > 1) { // Finish when we have only one root. - uint32_t count; - tree_pool[tree_pool_size++] = tree[tree_size - 1]; - tree_pool[tree_pool_size++] = tree[tree_size - 2]; - count = tree_pool[tree_pool_size - 1].total_count_ + - tree_pool[tree_pool_size - 2].total_count_; - tree_size -= 2; - { - // Search for the insertion point. - int k; - for (k = 0; k < tree_size; ++k) { - if (tree[k].total_count_ <= count) { - break; - } - } - memmove(tree + (k + 1), tree + k, (tree_size - k) * sizeof(*tree)); - tree[k].total_count_ = count; - tree[k].value_ = -1; - - tree[k].pool_index_left_ = tree_pool_size - 1; - tree[k].pool_index_right_ = tree_pool_size - 2; - tree_size = tree_size + 1; - } - } - SetBitDepths(&tree[0], tree_pool, bit_depths, 0); - } else if (tree_size == 1) { // Trivial case: only one element. - bit_depths[tree[0].value_] = 1; - } - - { - // Test if this Huffman tree satisfies our 'tree_depth_limit' criteria. - int max_depth = bit_depths[0]; - for (j = 1; j < histogram_size; ++j) { - if (max_depth < bit_depths[j]) { - max_depth = bit_depths[j]; - } - } - if (max_depth <= tree_depth_limit) { - break; - } - } - } -} - -// ----------------------------------------------------------------------------- -// Coding of the Huffman tree values - -static HuffmanTreeToken* CodeRepeatedValues(int repetitions, - HuffmanTreeToken* tokens, - int value, int prev_value) { - assert(value <= MAX_ALLOWED_CODE_LENGTH); - if (value != prev_value) { - tokens->code = value; - tokens->extra_bits = 0; - ++tokens; - --repetitions; - } - while (repetitions >= 1) { - if (repetitions < 3) { - int i; - for (i = 0; i < repetitions; ++i) { - tokens->code = value; - tokens->extra_bits = 0; - ++tokens; - } - break; - } else if (repetitions < 7) { - tokens->code = 16; - tokens->extra_bits = repetitions - 3; - ++tokens; - break; - } else { - tokens->code = 16; - tokens->extra_bits = 3; - ++tokens; - repetitions -= 6; - } - } - return tokens; -} - -static HuffmanTreeToken* CodeRepeatedZeros(int repetitions, - HuffmanTreeToken* tokens) { - while (repetitions >= 1) { - if (repetitions < 3) { - int i; - for (i = 0; i < repetitions; ++i) { - tokens->code = 0; // 0-value - tokens->extra_bits = 0; - ++tokens; - } - break; - } else if (repetitions < 11) { - tokens->code = 17; - tokens->extra_bits = repetitions - 3; - ++tokens; - break; - } else if (repetitions < 139) { - tokens->code = 18; - tokens->extra_bits = repetitions - 11; - ++tokens; - break; - } else { - tokens->code = 18; - tokens->extra_bits = 0x7f; // 138 repeated 0s - ++tokens; - repetitions -= 138; - } - } - return tokens; -} - -int VP8LCreateCompressedHuffmanTree(const HuffmanTreeCode* const tree, - HuffmanTreeToken* tokens, int max_tokens) { - HuffmanTreeToken* const starting_token = tokens; - HuffmanTreeToken* const ending_token = tokens + max_tokens; - const int depth_size = tree->num_symbols; - int prev_value = 8; // 8 is the initial value for rle. - int i = 0; - assert(tokens != NULL); - while (i < depth_size) { - const int value = tree->code_lengths[i]; - int k = i + 1; - int runs; - while (k < depth_size && tree->code_lengths[k] == value) ++k; - runs = k - i; - if (value == 0) { - tokens = CodeRepeatedZeros(runs, tokens); - } else { - tokens = CodeRepeatedValues(runs, tokens, value, prev_value); - prev_value = value; - } - i += runs; - assert(tokens <= ending_token); - } - (void)ending_token; // suppress 'unused variable' warning - return (int)(tokens - starting_token); -} - -// ----------------------------------------------------------------------------- - -// Pre-reversed 4-bit values. -static const uint8_t kReversedBits[16] = { - 0x0, 0x8, 0x4, 0xc, 0x2, 0xa, 0x6, 0xe, - 0x1, 0x9, 0x5, 0xd, 0x3, 0xb, 0x7, 0xf -}; - -static uint32_t ReverseBits(int num_bits, uint32_t bits) { - uint32_t retval = 0; - int i = 0; - while (i < num_bits) { - i += 4; - retval |= kReversedBits[bits & 0xf] << (MAX_ALLOWED_CODE_LENGTH + 1 - i); - bits >>= 4; - } - retval >>= (MAX_ALLOWED_CODE_LENGTH + 1 - num_bits); - return retval; -} - -// Get the actual bit values for a tree of bit depths. -static void ConvertBitDepthsToSymbols(HuffmanTreeCode* const tree) { - // 0 bit-depth means that the symbol does not exist. - int i; - int len; - uint32_t next_code[MAX_ALLOWED_CODE_LENGTH + 1]; - int depth_count[MAX_ALLOWED_CODE_LENGTH + 1] = { 0 }; - - assert(tree != NULL); - len = tree->num_symbols; - for (i = 0; i < len; ++i) { - const int code_length = tree->code_lengths[i]; - assert(code_length <= MAX_ALLOWED_CODE_LENGTH); - ++depth_count[code_length]; - } - depth_count[0] = 0; // ignore unused symbol - next_code[0] = 0; - { - uint32_t code = 0; - for (i = 1; i <= MAX_ALLOWED_CODE_LENGTH; ++i) { - code = (code + depth_count[i - 1]) << 1; - next_code[i] = code; - } - } - for (i = 0; i < len; ++i) { - const int code_length = tree->code_lengths[i]; - tree->codes[i] = ReverseBits(code_length, next_code[code_length]++); - } -} - -// ----------------------------------------------------------------------------- -// Main entry point - -void VP8LCreateHuffmanTree(uint32_t* const histogram, int tree_depth_limit, - uint8_t* const buf_rle, - HuffmanTree* const huff_tree, - HuffmanTreeCode* const huff_code) { - const int num_symbols = huff_code->num_symbols; - memset(buf_rle, 0, num_symbols * sizeof(*buf_rle)); - OptimizeHuffmanForRle(num_symbols, buf_rle, histogram); - GenerateOptimalTree(histogram, num_symbols, huff_tree, tree_depth_limit, - huff_code->code_lengths); - // Create the actual bit codes for the bit lengths. - ConvertBitDepthsToSymbols(huff_code); -} diff --git a/Extended/libwebp/src/utils/huffman_encode_utils.h b/Extended/libwebp/src/utils/huffman_encode_utils.h deleted file mode 100644 index 3e6763c..0000000 --- a/Extended/libwebp/src/utils/huffman_encode_utils.h +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright 2011 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Author: Jyrki Alakuijala (jyrki@google.com) -// -// Entropy encoding (Huffman) for webp lossless - -#ifndef WEBP_UTILS_HUFFMAN_ENCODE_UTILS_H_ -#define WEBP_UTILS_HUFFMAN_ENCODE_UTILS_H_ - -#include "src/webp/types.h" - -#ifdef __cplusplus -extern "C" { -#endif - -// Struct for holding the tree header in coded form. -typedef struct { - uint8_t code; // value (0..15) or escape code (16,17,18) - uint8_t extra_bits; // extra bits for escape codes -} HuffmanTreeToken; - -// Struct to represent the tree codes (depth and bits array). -typedef struct { - int num_symbols; // Number of symbols. - uint8_t* code_lengths; // Code lengths of the symbols. - uint16_t* codes; // Symbol Codes. -} HuffmanTreeCode; - -// Struct to represent the Huffman tree. -typedef struct { - uint32_t total_count_; // Symbol frequency. - int value_; // Symbol value. - int pool_index_left_; // Index for the left sub-tree. - int pool_index_right_; // Index for the right sub-tree. -} HuffmanTree; - -// Turn the Huffman tree into a token sequence. -// Returns the number of tokens used. -int VP8LCreateCompressedHuffmanTree(const HuffmanTreeCode* const tree, - HuffmanTreeToken* tokens, int max_tokens); - -// Create an optimized tree, and tokenize it. -// 'buf_rle' and 'huff_tree' are pre-allocated and the 'tree' is the constructed -// huffman code tree. -void VP8LCreateHuffmanTree(uint32_t* const histogram, int tree_depth_limit, - uint8_t* const buf_rle, HuffmanTree* const huff_tree, - HuffmanTreeCode* const tree); - -#ifdef __cplusplus -} -#endif - -#endif // WEBP_UTILS_HUFFMAN_ENCODE_UTILS_H_ diff --git a/Extended/libwebp/src/utils/huffman_utils.c b/Extended/libwebp/src/utils/huffman_utils.c deleted file mode 100644 index 0cba0fb..0000000 --- a/Extended/libwebp/src/utils/huffman_utils.c +++ /dev/null @@ -1,235 +0,0 @@ -// Copyright 2012 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Utilities for building and looking up Huffman trees. -// -// Author: Urvang Joshi (urvang@google.com) - -#include -#include -#include -#include "src/utils/huffman_utils.h" -#include "src/utils/utils.h" -#include "src/webp/format_constants.h" - -// Huffman data read via DecodeImageStream is represented in two (red and green) -// bytes. -#define MAX_HTREE_GROUPS 0x10000 - -HTreeGroup* VP8LHtreeGroupsNew(int num_htree_groups) { - HTreeGroup* const htree_groups = - (HTreeGroup*)WebPSafeMalloc(num_htree_groups, sizeof(*htree_groups)); - if (htree_groups == NULL) { - return NULL; - } - assert(num_htree_groups <= MAX_HTREE_GROUPS); - return htree_groups; -} - -void VP8LHtreeGroupsFree(HTreeGroup* const htree_groups) { - if (htree_groups != NULL) { - WebPSafeFree(htree_groups); - } -} - -// Returns reverse(reverse(key, len) + 1, len), where reverse(key, len) is the -// bit-wise reversal of the len least significant bits of key. -static WEBP_INLINE uint32_t GetNextKey(uint32_t key, int len) { - uint32_t step = 1 << (len - 1); - while (key & step) { - step >>= 1; - } - return step ? (key & (step - 1)) + step : key; -} - -// Stores code in table[0], table[step], table[2*step], ..., table[end]. -// Assumes that end is an integer multiple of step. -static WEBP_INLINE void ReplicateValue(HuffmanCode* table, - int step, int end, - HuffmanCode code) { - assert(end % step == 0); - do { - end -= step; - table[end] = code; - } while (end > 0); -} - -// Returns the table width of the next 2nd level table. count is the histogram -// of bit lengths for the remaining symbols, len is the code length of the next -// processed symbol -static WEBP_INLINE int NextTableBitSize(const int* const count, - int len, int root_bits) { - int left = 1 << (len - root_bits); - while (len < MAX_ALLOWED_CODE_LENGTH) { - left -= count[len]; - if (left <= 0) break; - ++len; - left <<= 1; - } - return len - root_bits; -} - -// sorted[code_lengths_size] is a pre-allocated array for sorting symbols -// by code length. -static int BuildHuffmanTable(HuffmanCode* const root_table, int root_bits, - const int code_lengths[], int code_lengths_size, - uint16_t sorted[]) { - HuffmanCode* table = root_table; // next available space in table - int total_size = 1 << root_bits; // total size root table + 2nd level table - int len; // current code length - int symbol; // symbol index in original or sorted table - // number of codes of each length: - int count[MAX_ALLOWED_CODE_LENGTH + 1] = { 0 }; - // offsets in sorted table for each length: - int offset[MAX_ALLOWED_CODE_LENGTH + 1]; - - assert(code_lengths_size != 0); - assert(code_lengths != NULL); - assert((root_table != NULL && sorted != NULL) || - (root_table == NULL && sorted == NULL)); - assert(root_bits > 0); - - // Build histogram of code lengths. - for (symbol = 0; symbol < code_lengths_size; ++symbol) { - if (code_lengths[symbol] > MAX_ALLOWED_CODE_LENGTH) { - return 0; - } - ++count[code_lengths[symbol]]; - } - - // Error, all code lengths are zeros. - if (count[0] == code_lengths_size) { - return 0; - } - - // Generate offsets into sorted symbol table by code length. - offset[1] = 0; - for (len = 1; len < MAX_ALLOWED_CODE_LENGTH; ++len) { - if (count[len] > (1 << len)) { - return 0; - } - offset[len + 1] = offset[len] + count[len]; - } - - // Sort symbols by length, by symbol order within each length. - for (symbol = 0; symbol < code_lengths_size; ++symbol) { - const int symbol_code_length = code_lengths[symbol]; - if (code_lengths[symbol] > 0) { - if (sorted != NULL) { - sorted[offset[symbol_code_length]++] = symbol; - } else { - offset[symbol_code_length]++; - } - } - } - - // Special case code with only one value. - if (offset[MAX_ALLOWED_CODE_LENGTH] == 1) { - if (sorted != NULL) { - HuffmanCode code; - code.bits = 0; - code.value = (uint16_t)sorted[0]; - ReplicateValue(table, 1, total_size, code); - } - return total_size; - } - - { - int step; // step size to replicate values in current table - uint32_t low = -1; // low bits for current root entry - uint32_t mask = total_size - 1; // mask for low bits - uint32_t key = 0; // reversed prefix code - int num_nodes = 1; // number of Huffman tree nodes - int num_open = 1; // number of open branches in current tree level - int table_bits = root_bits; // key length of current table - int table_size = 1 << table_bits; // size of current table - symbol = 0; - // Fill in root table. - for (len = 1, step = 2; len <= root_bits; ++len, step <<= 1) { - num_open <<= 1; - num_nodes += num_open; - num_open -= count[len]; - if (num_open < 0) { - return 0; - } - if (root_table == NULL) continue; - for (; count[len] > 0; --count[len]) { - HuffmanCode code; - code.bits = (uint8_t)len; - code.value = (uint16_t)sorted[symbol++]; - ReplicateValue(&table[key], step, table_size, code); - key = GetNextKey(key, len); - } - } - - // Fill in 2nd level tables and add pointers to root table. - for (len = root_bits + 1, step = 2; len <= MAX_ALLOWED_CODE_LENGTH; - ++len, step <<= 1) { - num_open <<= 1; - num_nodes += num_open; - num_open -= count[len]; - if (num_open < 0) { - return 0; - } - if (root_table == NULL) continue; - for (; count[len] > 0; --count[len]) { - HuffmanCode code; - if ((key & mask) != low) { - table += table_size; - table_bits = NextTableBitSize(count, len, root_bits); - table_size = 1 << table_bits; - total_size += table_size; - low = key & mask; - root_table[low].bits = (uint8_t)(table_bits + root_bits); - root_table[low].value = (uint16_t)((table - root_table) - low); - } - code.bits = (uint8_t)(len - root_bits); - code.value = (uint16_t)sorted[symbol++]; - ReplicateValue(&table[key >> root_bits], step, table_size, code); - key = GetNextKey(key, len); - } - } - - // Check if tree is full. - if (num_nodes != 2 * offset[MAX_ALLOWED_CODE_LENGTH] - 1) { - return 0; - } - } - - return total_size; -} - -// Maximum code_lengths_size is 2328 (reached for 11-bit color_cache_bits). -// More commonly, the value is around ~280. -#define MAX_CODE_LENGTHS_SIZE \ - ((1 << MAX_CACHE_BITS) + NUM_LITERAL_CODES + NUM_LENGTH_CODES) -// Cut-off value for switching between heap and stack allocation. -#define SORTED_SIZE_CUTOFF 512 -int VP8LBuildHuffmanTable(HuffmanCode* const root_table, int root_bits, - const int code_lengths[], int code_lengths_size) { - int total_size; - assert(code_lengths_size <= MAX_CODE_LENGTHS_SIZE); - if (root_table == NULL) { - total_size = BuildHuffmanTable(NULL, root_bits, - code_lengths, code_lengths_size, NULL); - } else if (code_lengths_size <= SORTED_SIZE_CUTOFF) { - // use local stack-allocated array. - uint16_t sorted[SORTED_SIZE_CUTOFF]; - total_size = BuildHuffmanTable(root_table, root_bits, - code_lengths, code_lengths_size, sorted); - } else { // rare case. Use heap allocation. - uint16_t* const sorted = - (uint16_t*)WebPSafeMalloc(code_lengths_size, sizeof(*sorted)); - if (sorted == NULL) return 0; - total_size = BuildHuffmanTable(root_table, root_bits, - code_lengths, code_lengths_size, sorted); - WebPSafeFree(sorted); - } - return total_size; -} diff --git a/Extended/libwebp/src/utils/huffman_utils.h b/Extended/libwebp/src/utils/huffman_utils.h deleted file mode 100644 index 13b7ad1..0000000 --- a/Extended/libwebp/src/utils/huffman_utils.h +++ /dev/null @@ -1,90 +0,0 @@ -// Copyright 2012 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Utilities for building and looking up Huffman trees. -// -// Author: Urvang Joshi (urvang@google.com) - -#ifndef WEBP_UTILS_HUFFMAN_UTILS_H_ -#define WEBP_UTILS_HUFFMAN_UTILS_H_ - -#include -#include "src/webp/format_constants.h" -#include "src/webp/types.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#define HUFFMAN_TABLE_BITS 8 -#define HUFFMAN_TABLE_MASK ((1 << HUFFMAN_TABLE_BITS) - 1) - -#define LENGTHS_TABLE_BITS 7 -#define LENGTHS_TABLE_MASK ((1 << LENGTHS_TABLE_BITS) - 1) - - -// Huffman lookup table entry -typedef struct { - uint8_t bits; // number of bits used for this symbol - uint16_t value; // symbol value or table offset -} HuffmanCode; - -// long version for holding 32b values -typedef struct { - int bits; // number of bits used for this symbol, - // or an impossible value if not a literal code. - uint32_t value; // 32b packed ARGB value if literal, - // or non-literal symbol otherwise -} HuffmanCode32; - -#define HUFFMAN_PACKED_BITS 6 -#define HUFFMAN_PACKED_TABLE_SIZE (1u << HUFFMAN_PACKED_BITS) - -// Huffman table group. -// Includes special handling for the following cases: -// - is_trivial_literal: one common literal base for RED/BLUE/ALPHA (not GREEN) -// - is_trivial_code: only 1 code (no bit is read from bitstream) -// - use_packed_table: few enough literal symbols, so all the bit codes -// can fit into a small look-up table packed_table[] -// The common literal base, if applicable, is stored in 'literal_arb'. -typedef struct HTreeGroup HTreeGroup; -struct HTreeGroup { - HuffmanCode* htrees[HUFFMAN_CODES_PER_META_CODE]; - int is_trivial_literal; // True, if huffman trees for Red, Blue & Alpha - // Symbols are trivial (have a single code). - uint32_t literal_arb; // If is_trivial_literal is true, this is the - // ARGB value of the pixel, with Green channel - // being set to zero. - int is_trivial_code; // true if is_trivial_literal with only one code - int use_packed_table; // use packed table below for short literal code - // table mapping input bits to a packed values, or escape case to literal code - HuffmanCode32 packed_table[HUFFMAN_PACKED_TABLE_SIZE]; -}; - -// Creates the instance of HTreeGroup with specified number of tree-groups. -HTreeGroup* VP8LHtreeGroupsNew(int num_htree_groups); - -// Releases the memory allocated for HTreeGroup. -void VP8LHtreeGroupsFree(HTreeGroup* const htree_groups); - -// Builds Huffman lookup table assuming code lengths are in symbol order. -// The 'code_lengths' is pre-allocated temporary memory buffer used for creating -// the huffman table. -// Returns built table size or 0 in case of error (invalid tree or -// memory error). -// If root_table is NULL, it returns 0 if a lookup cannot be built, something -// > 0 otherwise (but not the table size). -int VP8LBuildHuffmanTable(HuffmanCode* const root_table, int root_bits, - const int code_lengths[], int code_lengths_size); - -#ifdef __cplusplus -} // extern "C" -#endif - -#endif // WEBP_UTILS_HUFFMAN_UTILS_H_ diff --git a/Extended/libwebp/src/utils/quant_levels_dec_utils.c b/Extended/libwebp/src/utils/quant_levels_dec_utils.c deleted file mode 100644 index f65b6cd..0000000 --- a/Extended/libwebp/src/utils/quant_levels_dec_utils.c +++ /dev/null @@ -1,291 +0,0 @@ -// Copyright 2013 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Implement gradient smoothing: we replace a current alpha value by its -// surrounding average if it's close enough (that is: the change will be less -// than the minimum distance between two quantized level). -// We use sliding window for computing the 2d moving average. -// -// Author: Skal (pascal.massimino@gmail.com) - -#include "src/utils/quant_levels_dec_utils.h" - -#include // for memset - -#include "src/utils/utils.h" - -// #define USE_DITHERING // uncomment to enable ordered dithering (not vital) - -#define FIX 16 // fix-point precision for averaging -#define LFIX 2 // extra precision for look-up table -#define LUT_SIZE ((1 << (8 + LFIX)) - 1) // look-up table size - -#if defined(USE_DITHERING) - -#define DFIX 4 // extra precision for ordered dithering -#define DSIZE 4 // dithering size (must be a power of two) -// cf. http://en.wikipedia.org/wiki/Ordered_dithering -static const uint8_t kOrderedDither[DSIZE][DSIZE] = { - { 0, 8, 2, 10 }, // coefficients are in DFIX fixed-point precision - { 12, 4, 14, 6 }, - { 3, 11, 1, 9 }, - { 15, 7, 13, 5 } -}; - -#else -#define DFIX 0 -#endif - -typedef struct { - int width_, height_; // dimension - int stride_; // stride in bytes - int row_; // current input row being processed - uint8_t* src_; // input pointer - uint8_t* dst_; // output pointer - - int radius_; // filter radius (=delay) - int scale_; // normalization factor, in FIX bits precision - - void* mem_; // all memory - - // various scratch buffers - uint16_t* start_; - uint16_t* cur_; - uint16_t* end_; - uint16_t* top_; - uint16_t* average_; - - // input levels distribution - int num_levels_; // number of quantized levels - int min_, max_; // min and max level values - int min_level_dist_; // smallest distance between two consecutive levels - - int16_t* correction_; // size = 1 + 2*LUT_SIZE -> ~4k memory -} SmoothParams; - -//------------------------------------------------------------------------------ - -#define CLIP_8b_MASK (int)(~0U << (8 + DFIX)) -static WEBP_INLINE uint8_t clip_8b(int v) { - return (!(v & CLIP_8b_MASK)) ? (uint8_t)(v >> DFIX) : (v < 0) ? 0u : 255u; -} -#undef CLIP_8b_MASK - -// vertical accumulation -static void VFilter(SmoothParams* const p) { - const uint8_t* src = p->src_; - const int w = p->width_; - uint16_t* const cur = p->cur_; - const uint16_t* const top = p->top_; - uint16_t* const out = p->end_; - uint16_t sum = 0; // all arithmetic is modulo 16bit - int x; - - for (x = 0; x < w; ++x) { - uint16_t new_value; - sum += src[x]; - new_value = top[x] + sum; - out[x] = new_value - cur[x]; // vertical sum of 'r' pixels. - cur[x] = new_value; - } - // move input pointers one row down - p->top_ = p->cur_; - p->cur_ += w; - if (p->cur_ == p->end_) p->cur_ = p->start_; // roll-over - // We replicate edges, as it's somewhat easier as a boundary condition. - // That's why we don't update the 'src' pointer on top/bottom area: - if (p->row_ >= 0 && p->row_ < p->height_ - 1) { - p->src_ += p->stride_; - } -} - -// horizontal accumulation. We use mirror replication of missing pixels, as it's -// a little easier to implement (surprisingly). -static void HFilter(SmoothParams* const p) { - const uint16_t* const in = p->end_; - uint16_t* const out = p->average_; - const uint32_t scale = p->scale_; - const int w = p->width_; - const int r = p->radius_; - - int x; - for (x = 0; x <= r; ++x) { // left mirroring - const uint16_t delta = in[x + r - 1] + in[r - x]; - out[x] = (delta * scale) >> FIX; - } - for (; x < w - r; ++x) { // bulk middle run - const uint16_t delta = in[x + r] - in[x - r - 1]; - out[x] = (delta * scale) >> FIX; - } - for (; x < w; ++x) { // right mirroring - const uint16_t delta = - 2 * in[w - 1] - in[2 * w - 2 - r - x] - in[x - r - 1]; - out[x] = (delta * scale) >> FIX; - } -} - -// emit one filtered output row -static void ApplyFilter(SmoothParams* const p) { - const uint16_t* const average = p->average_; - const int w = p->width_; - const int16_t* const correction = p->correction_; -#if defined(USE_DITHERING) - const uint8_t* const dither = kOrderedDither[p->row_ % DSIZE]; -#endif - uint8_t* const dst = p->dst_; - int x; - for (x = 0; x < w; ++x) { - const int v = dst[x]; - if (v < p->max_ && v > p->min_) { - const int c = (v << DFIX) + correction[average[x] - (v << LFIX)]; -#if defined(USE_DITHERING) - dst[x] = clip_8b(c + dither[x % DSIZE]); -#else - dst[x] = clip_8b(c); -#endif - } - } - p->dst_ += p->stride_; // advance output pointer -} - -//------------------------------------------------------------------------------ -// Initialize correction table - -static void InitCorrectionLUT(int16_t* const lut, int min_dist) { - // The correction curve is: - // f(x) = x for x <= threshold2 - // f(x) = 0 for x >= threshold1 - // and a linear interpolation for range x=[threshold2, threshold1] - // (along with f(-x) = -f(x) symmetry). - // Note that: threshold2 = 3/4 * threshold1 - const int threshold1 = min_dist << LFIX; - const int threshold2 = (3 * threshold1) >> 2; - const int max_threshold = threshold2 << DFIX; - const int delta = threshold1 - threshold2; - int i; - for (i = 1; i <= LUT_SIZE; ++i) { - int c = (i <= threshold2) ? (i << DFIX) - : (i < threshold1) ? max_threshold * (threshold1 - i) / delta - : 0; - c >>= LFIX; - lut[+i] = +c; - lut[-i] = -c; - } - lut[0] = 0; -} - -static void CountLevels(SmoothParams* const p) { - int i, j, last_level; - uint8_t used_levels[256] = { 0 }; - const uint8_t* data = p->src_; - p->min_ = 255; - p->max_ = 0; - for (j = 0; j < p->height_; ++j) { - for (i = 0; i < p->width_; ++i) { - const int v = data[i]; - if (v < p->min_) p->min_ = v; - if (v > p->max_) p->max_ = v; - used_levels[v] = 1; - } - data += p->stride_; - } - // Compute the mininum distance between two non-zero levels. - p->min_level_dist_ = p->max_ - p->min_; - last_level = -1; - for (i = 0; i < 256; ++i) { - if (used_levels[i]) { - ++p->num_levels_; - if (last_level >= 0) { - const int level_dist = i - last_level; - if (level_dist < p->min_level_dist_) { - p->min_level_dist_ = level_dist; - } - } - last_level = i; - } - } -} - -// Initialize all params. -static int InitParams(uint8_t* const data, int width, int height, int stride, - int radius, SmoothParams* const p) { - const int R = 2 * radius + 1; // total size of the kernel - - const size_t size_scratch_m = (R + 1) * width * sizeof(*p->start_); - const size_t size_m = width * sizeof(*p->average_); - const size_t size_lut = (1 + 2 * LUT_SIZE) * sizeof(*p->correction_); - const size_t total_size = size_scratch_m + size_m + size_lut; - uint8_t* mem = (uint8_t*)WebPSafeMalloc(1U, total_size); - - if (mem == NULL) return 0; - p->mem_ = (void*)mem; - - p->start_ = (uint16_t*)mem; - p->cur_ = p->start_; - p->end_ = p->start_ + R * width; - p->top_ = p->end_ - width; - memset(p->top_, 0, width * sizeof(*p->top_)); - mem += size_scratch_m; - - p->average_ = (uint16_t*)mem; - mem += size_m; - - p->width_ = width; - p->height_ = height; - p->stride_ = stride; - p->src_ = data; - p->dst_ = data; - p->radius_ = radius; - p->scale_ = (1 << (FIX + LFIX)) / (R * R); // normalization constant - p->row_ = -radius; - - // analyze the input distribution so we can best-fit the threshold - CountLevels(p); - - // correction table - p->correction_ = ((int16_t*)mem) + LUT_SIZE; - InitCorrectionLUT(p->correction_, p->min_level_dist_); - - return 1; -} - -static void CleanupParams(SmoothParams* const p) { - WebPSafeFree(p->mem_); -} - -int WebPDequantizeLevels(uint8_t* const data, int width, int height, int stride, - int strength) { - int radius = 4 * strength / 100; - - if (strength < 0 || strength > 100) return 0; - if (data == NULL || width <= 0 || height <= 0) return 0; // bad params - - // limit the filter size to not exceed the image dimensions - if (2 * radius + 1 > width) radius = (width - 1) >> 1; - if (2 * radius + 1 > height) radius = (height - 1) >> 1; - - if (radius > 0) { - SmoothParams p; - memset(&p, 0, sizeof(p)); - if (!InitParams(data, width, height, stride, radius, &p)) return 0; - if (p.num_levels_ > 2) { - for (; p.row_ < p.height_; ++p.row_) { - VFilter(&p); // accumulate average of input - // Need to wait few rows in order to prime the filter, - // before emitting some output. - if (p.row_ >= p.radius_) { - HFilter(&p); - ApplyFilter(&p); - } - } - } - CleanupParams(&p); - } - return 1; -} diff --git a/Extended/libwebp/src/utils/quant_levels_dec_utils.h b/Extended/libwebp/src/utils/quant_levels_dec_utils.h deleted file mode 100644 index 327f19f..0000000 --- a/Extended/libwebp/src/utils/quant_levels_dec_utils.h +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright 2013 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Alpha plane de-quantization utility -// -// Author: Vikas Arora (vikasa@google.com) - -#ifndef WEBP_UTILS_QUANT_LEVELS_DEC_UTILS_H_ -#define WEBP_UTILS_QUANT_LEVELS_DEC_UTILS_H_ - -#include "src/webp/types.h" - -#ifdef __cplusplus -extern "C" { -#endif - -// Apply post-processing to input 'data' of size 'width'x'height' assuming that -// the source was quantized to a reduced number of levels. 'stride' is in bytes. -// Strength is in [0..100] and controls the amount of dithering applied. -// Returns false in case of error (data is NULL, invalid parameters, -// malloc failure, ...). -int WebPDequantizeLevels(uint8_t* const data, int width, int height, int stride, - int strength); - -#ifdef __cplusplus -} // extern "C" -#endif - -#endif // WEBP_UTILS_QUANT_LEVELS_DEC_UTILS_H_ diff --git a/Extended/libwebp/src/utils/quant_levels_utils.c b/Extended/libwebp/src/utils/quant_levels_utils.c deleted file mode 100644 index d65ad3c..0000000 --- a/Extended/libwebp/src/utils/quant_levels_utils.c +++ /dev/null @@ -1,140 +0,0 @@ -// Copyright 2011 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Quantize levels for specified number of quantization-levels ([2, 256]). -// Min and max values are preserved (usual 0 and 255 for alpha plane). -// -// Author: Skal (pascal.massimino@gmail.com) - -#include - -#include "src/utils/quant_levels_utils.h" - -#define NUM_SYMBOLS 256 - -#define MAX_ITER 6 // Maximum number of convergence steps. -#define ERROR_THRESHOLD 1e-4 // MSE stopping criterion. - -// ----------------------------------------------------------------------------- -// Quantize levels. - -int QuantizeLevels(uint8_t* const data, int width, int height, - int num_levels, uint64_t* const sse) { - int freq[NUM_SYMBOLS] = { 0 }; - int q_level[NUM_SYMBOLS] = { 0 }; - double inv_q_level[NUM_SYMBOLS] = { 0 }; - int min_s = 255, max_s = 0; - const size_t data_size = height * width; - int i, num_levels_in, iter; - double last_err = 1.e38, err = 0.; - const double err_threshold = ERROR_THRESHOLD * data_size; - - if (data == NULL) { - return 0; - } - - if (width <= 0 || height <= 0) { - return 0; - } - - if (num_levels < 2 || num_levels > 256) { - return 0; - } - - { - size_t n; - num_levels_in = 0; - for (n = 0; n < data_size; ++n) { - num_levels_in += (freq[data[n]] == 0); - if (min_s > data[n]) min_s = data[n]; - if (max_s < data[n]) max_s = data[n]; - ++freq[data[n]]; - } - } - - if (num_levels_in <= num_levels) goto End; // nothing to do! - - // Start with uniformly spread centroids. - for (i = 0; i < num_levels; ++i) { - inv_q_level[i] = min_s + (double)(max_s - min_s) * i / (num_levels - 1); - } - - // Fixed values. Won't be changed. - q_level[min_s] = 0; - q_level[max_s] = num_levels - 1; - assert(inv_q_level[0] == min_s); - assert(inv_q_level[num_levels - 1] == max_s); - - // k-Means iterations. - for (iter = 0; iter < MAX_ITER; ++iter) { - double q_sum[NUM_SYMBOLS] = { 0 }; - double q_count[NUM_SYMBOLS] = { 0 }; - int s, slot = 0; - - // Assign classes to representatives. - for (s = min_s; s <= max_s; ++s) { - // Keep track of the nearest neighbour 'slot' - while (slot < num_levels - 1 && - 2 * s > inv_q_level[slot] + inv_q_level[slot + 1]) { - ++slot; - } - if (freq[s] > 0) { - q_sum[slot] += s * freq[s]; - q_count[slot] += freq[s]; - } - q_level[s] = slot; - } - - // Assign new representatives to classes. - if (num_levels > 2) { - for (slot = 1; slot < num_levels - 1; ++slot) { - const double count = q_count[slot]; - if (count > 0.) { - inv_q_level[slot] = q_sum[slot] / count; - } - } - } - - // Compute convergence error. - err = 0.; - for (s = min_s; s <= max_s; ++s) { - const double error = s - inv_q_level[q_level[s]]; - err += freq[s] * error * error; - } - - // Check for convergence: we stop as soon as the error is no - // longer improving. - if (last_err - err < err_threshold) break; - last_err = err; - } - - // Remap the alpha plane to quantized values. - { - // double->int rounding operation can be costly, so we do it - // once for all before remapping. We also perform the data[] -> slot - // mapping, while at it (avoid one indirection in the final loop). - uint8_t map[NUM_SYMBOLS]; - int s; - size_t n; - for (s = min_s; s <= max_s; ++s) { - const int slot = q_level[s]; - map[s] = (uint8_t)(inv_q_level[slot] + .5); - } - // Final pass. - for (n = 0; n < data_size; ++n) { - data[n] = map[data[n]]; - } - } - End: - // Store sum of squared error if needed. - if (sse != NULL) *sse = (uint64_t)err; - - return 1; -} - diff --git a/Extended/libwebp/src/utils/quant_levels_utils.h b/Extended/libwebp/src/utils/quant_levels_utils.h deleted file mode 100644 index 9ee3ea0..0000000 --- a/Extended/libwebp/src/utils/quant_levels_utils.h +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright 2011 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Alpha plane quantization utility -// -// Author: Vikas Arora (vikasa@google.com) - -#ifndef WEBP_UTILS_QUANT_LEVELS_UTILS_H_ -#define WEBP_UTILS_QUANT_LEVELS_UTILS_H_ - -#include - -#include "src/webp/types.h" - -#ifdef __cplusplus -extern "C" { -#endif - -// Replace the input 'data' of size 'width'x'height' with 'num-levels' -// quantized values. If not NULL, 'sse' will contain the sum of squared error. -// Valid range for 'num_levels' is [2, 256]. -// Returns false in case of error (data is NULL, or parameters are invalid). -int QuantizeLevels(uint8_t* const data, int width, int height, int num_levels, - uint64_t* const sse); - -#ifdef __cplusplus -} // extern "C" -#endif - -#endif // WEBP_UTILS_QUANT_LEVELS_UTILS_H_ diff --git a/Extended/libwebp/src/utils/random_utils.c b/Extended/libwebp/src/utils/random_utils.c deleted file mode 100644 index 7edb3fe..0000000 --- a/Extended/libwebp/src/utils/random_utils.c +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright 2013 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Pseudo-random utilities -// -// Author: Skal (pascal.massimino@gmail.com) - -#include -#include "src/utils/random_utils.h" - -//------------------------------------------------------------------------------ - -// 31b-range values -static const uint32_t kRandomTable[VP8_RANDOM_TABLE_SIZE] = { - 0x0de15230, 0x03b31886, 0x775faccb, 0x1c88626a, 0x68385c55, 0x14b3b828, - 0x4a85fef8, 0x49ddb84b, 0x64fcf397, 0x5c550289, 0x4a290000, 0x0d7ec1da, - 0x5940b7ab, 0x5492577d, 0x4e19ca72, 0x38d38c69, 0x0c01ee65, 0x32a1755f, - 0x5437f652, 0x5abb2c32, 0x0faa57b1, 0x73f533e7, 0x685feeda, 0x7563cce2, - 0x6e990e83, 0x4730a7ed, 0x4fc0d9c6, 0x496b153c, 0x4f1403fa, 0x541afb0c, - 0x73990b32, 0x26d7cb1c, 0x6fcc3706, 0x2cbb77d8, 0x75762f2a, 0x6425ccdd, - 0x24b35461, 0x0a7d8715, 0x220414a8, 0x141ebf67, 0x56b41583, 0x73e502e3, - 0x44cab16f, 0x28264d42, 0x73baaefb, 0x0a50ebed, 0x1d6ab6fb, 0x0d3ad40b, - 0x35db3b68, 0x2b081e83, 0x77ce6b95, 0x5181e5f0, 0x78853bbc, 0x009f9494, - 0x27e5ed3c -}; - -void VP8InitRandom(VP8Random* const rg, float dithering) { - memcpy(rg->tab_, kRandomTable, sizeof(rg->tab_)); - rg->index1_ = 0; - rg->index2_ = 31; - rg->amp_ = (dithering < 0.0) ? 0 - : (dithering > 1.0) ? (1 << VP8_RANDOM_DITHER_FIX) - : (uint32_t)((1 << VP8_RANDOM_DITHER_FIX) * dithering); -} - -//------------------------------------------------------------------------------ - diff --git a/Extended/libwebp/src/utils/random_utils.h b/Extended/libwebp/src/utils/random_utils.h deleted file mode 100644 index a5006f8..0000000 --- a/Extended/libwebp/src/utils/random_utils.h +++ /dev/null @@ -1,63 +0,0 @@ -// Copyright 2013 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Pseudo-random utilities -// -// Author: Skal (pascal.massimino@gmail.com) - -#ifndef WEBP_UTILS_RANDOM_UTILS_H_ -#define WEBP_UTILS_RANDOM_UTILS_H_ - -#include -#include "src/webp/types.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#define VP8_RANDOM_DITHER_FIX 8 // fixed-point precision for dithering -#define VP8_RANDOM_TABLE_SIZE 55 - -typedef struct { - int index1_, index2_; - uint32_t tab_[VP8_RANDOM_TABLE_SIZE]; - int amp_; -} VP8Random; - -// Initializes random generator with an amplitude 'dithering' in range [0..1]. -void VP8InitRandom(VP8Random* const rg, float dithering); - -// Returns a centered pseudo-random number with 'num_bits' amplitude. -// (uses D.Knuth's Difference-based random generator). -// 'amp' is in VP8_RANDOM_DITHER_FIX fixed-point precision. -static WEBP_INLINE int VP8RandomBits2(VP8Random* const rg, int num_bits, - int amp) { - int diff; - assert(num_bits + VP8_RANDOM_DITHER_FIX <= 31); - diff = rg->tab_[rg->index1_] - rg->tab_[rg->index2_]; - if (diff < 0) diff += (1u << 31); - rg->tab_[rg->index1_] = diff; - if (++rg->index1_ == VP8_RANDOM_TABLE_SIZE) rg->index1_ = 0; - if (++rg->index2_ == VP8_RANDOM_TABLE_SIZE) rg->index2_ = 0; - // sign-extend, 0-center - diff = (int)((uint32_t)diff << 1) >> (32 - num_bits); - diff = (diff * amp) >> VP8_RANDOM_DITHER_FIX; // restrict range - diff += 1 << (num_bits - 1); // shift back to 0.5-center - return diff; -} - -static WEBP_INLINE int VP8RandomBits(VP8Random* const rg, int num_bits) { - return VP8RandomBits2(rg, num_bits, rg->amp_); -} - -#ifdef __cplusplus -} // extern "C" -#endif - -#endif // WEBP_UTILS_RANDOM_UTILS_H_ diff --git a/Extended/libwebp/src/utils/rescaler_utils.c b/Extended/libwebp/src/utils/rescaler_utils.c deleted file mode 100644 index 4bcae24..0000000 --- a/Extended/libwebp/src/utils/rescaler_utils.c +++ /dev/null @@ -1,148 +0,0 @@ -// Copyright 2012 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Rescaling functions -// -// Author: Skal (pascal.massimino@gmail.com) - -#include -#include -#include -#include "src/dsp/dsp.h" -#include "src/utils/rescaler_utils.h" - -//------------------------------------------------------------------------------ - -void WebPRescalerInit(WebPRescaler* const wrk, int src_width, int src_height, - uint8_t* const dst, - int dst_width, int dst_height, int dst_stride, - int num_channels, rescaler_t* const work) { - const int x_add = src_width, x_sub = dst_width; - const int y_add = src_height, y_sub = dst_height; - wrk->x_expand = (src_width < dst_width); - wrk->y_expand = (src_height < dst_height); - wrk->src_width = src_width; - wrk->src_height = src_height; - wrk->dst_width = dst_width; - wrk->dst_height = dst_height; - wrk->src_y = 0; - wrk->dst_y = 0; - wrk->dst = dst; - wrk->dst_stride = dst_stride; - wrk->num_channels = num_channels; - - // for 'x_expand', we use bilinear interpolation - wrk->x_add = wrk->x_expand ? (x_sub - 1) : x_add; - wrk->x_sub = wrk->x_expand ? (x_add - 1) : x_sub; - if (!wrk->x_expand) { // fx_scale is not used otherwise - wrk->fx_scale = WEBP_RESCALER_FRAC(1, wrk->x_sub); - } - // vertical scaling parameters - wrk->y_add = wrk->y_expand ? y_add - 1 : y_add; - wrk->y_sub = wrk->y_expand ? y_sub - 1 : y_sub; - wrk->y_accum = wrk->y_expand ? wrk->y_sub : wrk->y_add; - if (!wrk->y_expand) { - // This is WEBP_RESCALER_FRAC(dst_height, x_add * y_add) without the cast. - // Its value is <= WEBP_RESCALER_ONE, because dst_height <= wrk->y_add, and - // wrk->x_add >= 1; - const uint64_t ratio = - (uint64_t)dst_height * WEBP_RESCALER_ONE / (wrk->x_add * wrk->y_add); - if (ratio != (uint32_t)ratio) { - // When ratio == WEBP_RESCALER_ONE, we can't represent the ratio with the - // current fixed-point precision. This happens when src_height == - // wrk->y_add (which == src_height), and wrk->x_add == 1. - // => We special-case fxy_scale = 0, in WebPRescalerExportRow(). - wrk->fxy_scale = 0; - } else { - wrk->fxy_scale = (uint32_t)ratio; - } - wrk->fy_scale = WEBP_RESCALER_FRAC(1, wrk->y_sub); - } else { - wrk->fy_scale = WEBP_RESCALER_FRAC(1, wrk->x_add); - // wrk->fxy_scale is unused here. - } - wrk->irow = work; - wrk->frow = work + num_channels * dst_width; - memset(work, 0, 2 * dst_width * num_channels * sizeof(*work)); - - WebPRescalerDspInit(); -} - -int WebPRescalerGetScaledDimensions(int src_width, int src_height, - int* const scaled_width, - int* const scaled_height) { - assert(scaled_width != NULL); - assert(scaled_height != NULL); - { - int width = *scaled_width; - int height = *scaled_height; - - // if width is unspecified, scale original proportionally to height ratio. - if (width == 0 && src_height > 0) { - width = - (int)(((uint64_t)src_width * height + src_height - 1) / src_height); - } - // if height is unspecified, scale original proportionally to width ratio. - if (height == 0 && src_width > 0) { - height = - (int)(((uint64_t)src_height * width + src_width - 1) / src_width); - } - // Check if the overall dimensions still make sense. - if (width <= 0 || height <= 0) { - return 0; - } - - *scaled_width = width; - *scaled_height = height; - return 1; - } -} - -//------------------------------------------------------------------------------ -// all-in-one calls - -int WebPRescaleNeededLines(const WebPRescaler* const wrk, int max_num_lines) { - const int num_lines = (wrk->y_accum + wrk->y_sub - 1) / wrk->y_sub; - return (num_lines > max_num_lines) ? max_num_lines : num_lines; -} - -int WebPRescalerImport(WebPRescaler* const wrk, int num_lines, - const uint8_t* src, int src_stride) { - int total_imported = 0; - while (total_imported < num_lines && !WebPRescalerHasPendingOutput(wrk)) { - if (wrk->y_expand) { - rescaler_t* const tmp = wrk->irow; - wrk->irow = wrk->frow; - wrk->frow = tmp; - } - WebPRescalerImportRow(wrk, src); - if (!wrk->y_expand) { // Accumulate the contribution of the new row. - int x; - for (x = 0; x < wrk->num_channels * wrk->dst_width; ++x) { - wrk->irow[x] += wrk->frow[x]; - } - } - ++wrk->src_y; - src += src_stride; - ++total_imported; - wrk->y_accum -= wrk->y_sub; - } - return total_imported; -} - -int WebPRescalerExport(WebPRescaler* const rescaler) { - int total_exported = 0; - while (WebPRescalerHasPendingOutput(rescaler)) { - WebPRescalerExportRow(rescaler); - ++total_exported; - } - return total_exported; -} - -//------------------------------------------------------------------------------ diff --git a/Extended/libwebp/src/utils/rescaler_utils.h b/Extended/libwebp/src/utils/rescaler_utils.h deleted file mode 100644 index ca41e42..0000000 --- a/Extended/libwebp/src/utils/rescaler_utils.h +++ /dev/null @@ -1,101 +0,0 @@ -// Copyright 2012 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Rescaling functions -// -// Author: Skal (pascal.massimino@gmail.com) - -#ifndef WEBP_UTILS_RESCALER_UTILS_H_ -#define WEBP_UTILS_RESCALER_UTILS_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -#include "src/webp/types.h" - -#define WEBP_RESCALER_RFIX 32 // fixed-point precision for multiplies -#define WEBP_RESCALER_ONE (1ull << WEBP_RESCALER_RFIX) -#define WEBP_RESCALER_FRAC(x, y) \ - ((uint32_t)(((uint64_t)(x) << WEBP_RESCALER_RFIX) / (y))) - -// Structure used for on-the-fly rescaling -typedef uint32_t rescaler_t; // type for side-buffer -typedef struct WebPRescaler WebPRescaler; -struct WebPRescaler { - int x_expand; // true if we're expanding in the x direction - int y_expand; // true if we're expanding in the y direction - int num_channels; // bytes to jump between pixels - uint32_t fx_scale; // fixed-point scaling factors - uint32_t fy_scale; // '' - uint32_t fxy_scale; // '' - int y_accum; // vertical accumulator - int y_add, y_sub; // vertical increments - int x_add, x_sub; // horizontal increments - int src_width, src_height; // source dimensions - int dst_width, dst_height; // destination dimensions - int src_y, dst_y; // row counters for input and output - uint8_t* dst; - int dst_stride; - rescaler_t* irow, *frow; // work buffer -}; - -// Initialize a rescaler given scratch area 'work' and dimensions of src & dst. -void WebPRescalerInit(WebPRescaler* const rescaler, - int src_width, int src_height, - uint8_t* const dst, - int dst_width, int dst_height, int dst_stride, - int num_channels, - rescaler_t* const work); - -// If either 'scaled_width' or 'scaled_height' (but not both) is 0 the value -// will be calculated preserving the aspect ratio, otherwise the values are -// left unmodified. Returns true on success, false if either value is 0 after -// performing the scaling calculation. -int WebPRescalerGetScaledDimensions(int src_width, int src_height, - int* const scaled_width, - int* const scaled_height); - -// Returns the number of input lines needed next to produce one output line, -// considering that the maximum available input lines are 'max_num_lines'. -int WebPRescaleNeededLines(const WebPRescaler* const rescaler, - int max_num_lines); - -// Import multiple rows over all channels, until at least one row is ready to -// be exported. Returns the actual number of lines that were imported. -int WebPRescalerImport(WebPRescaler* const rescaler, int num_rows, - const uint8_t* src, int src_stride); - -// Export as many rows as possible. Return the numbers of rows written. -int WebPRescalerExport(WebPRescaler* const rescaler); - -// Return true if input is finished -static WEBP_INLINE -int WebPRescalerInputDone(const WebPRescaler* const rescaler) { - return (rescaler->src_y >= rescaler->src_height); -} -// Return true if output is finished -static WEBP_INLINE -int WebPRescalerOutputDone(const WebPRescaler* const rescaler) { - return (rescaler->dst_y >= rescaler->dst_height); -} - -// Return true if there are pending output rows ready. -static WEBP_INLINE -int WebPRescalerHasPendingOutput(const WebPRescaler* const rescaler) { - return !WebPRescalerOutputDone(rescaler) && (rescaler->y_accum <= 0); -} - -//------------------------------------------------------------------------------ - -#ifdef __cplusplus -} // extern "C" -#endif - -#endif // WEBP_UTILS_RESCALER_UTILS_H_ diff --git a/Extended/libwebp/src/utils/thread_utils.c b/Extended/libwebp/src/utils/thread_utils.c deleted file mode 100644 index 4e470e1..0000000 --- a/Extended/libwebp/src/utils/thread_utils.c +++ /dev/null @@ -1,369 +0,0 @@ -// Copyright 2011 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Multi-threaded worker -// -// Author: Skal (pascal.massimino@gmail.com) - -#include -#include // for memset() -#include "src/utils/thread_utils.h" -#include "src/utils/utils.h" - -#ifdef WEBP_USE_THREAD - -#if defined(_WIN32) - -#include -typedef HANDLE pthread_t; -typedef CRITICAL_SECTION pthread_mutex_t; - -#if _WIN32_WINNT >= 0x0600 // Windows Vista / Server 2008 or greater -#define USE_WINDOWS_CONDITION_VARIABLE -typedef CONDITION_VARIABLE pthread_cond_t; -#else -typedef struct { - HANDLE waiting_sem_; - HANDLE received_sem_; - HANDLE signal_event_; -} pthread_cond_t; -#endif // _WIN32_WINNT >= 0x600 - -#ifndef WINAPI_FAMILY_PARTITION -#define WINAPI_PARTITION_DESKTOP 1 -#define WINAPI_FAMILY_PARTITION(x) x -#endif - -#if !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) -#define USE_CREATE_THREAD -#endif - -#else // !_WIN32 - -#include - -#endif // _WIN32 - -typedef struct { - pthread_mutex_t mutex_; - pthread_cond_t condition_; - pthread_t thread_; -} WebPWorkerImpl; - -#if defined(_WIN32) - -//------------------------------------------------------------------------------ -// simplistic pthread emulation layer - -#include - -// _beginthreadex requires __stdcall -#define THREADFN unsigned int __stdcall -#define THREAD_RETURN(val) (unsigned int)((DWORD_PTR)val) - -#if _WIN32_WINNT >= 0x0501 // Windows XP or greater -#define WaitForSingleObject(obj, timeout) \ - WaitForSingleObjectEx(obj, timeout, FALSE /*bAlertable*/) -#endif - -static int pthread_create(pthread_t* const thread, const void* attr, - unsigned int (__stdcall* start)(void*), void* arg) { - (void)attr; -#ifdef USE_CREATE_THREAD - *thread = CreateThread(NULL, /* lpThreadAttributes */ - 0, /* dwStackSize */ - start, - arg, - 0, /* dwStackSize */ - NULL); /* lpThreadId */ -#else - *thread = (pthread_t)_beginthreadex(NULL, /* void *security */ - 0, /* unsigned stack_size */ - start, - arg, - 0, /* unsigned initflag */ - NULL); /* unsigned *thrdaddr */ -#endif - if (*thread == NULL) return 1; - SetThreadPriority(*thread, THREAD_PRIORITY_ABOVE_NORMAL); - return 0; -} - -static int pthread_join(pthread_t thread, void** value_ptr) { - (void)value_ptr; - return (WaitForSingleObject(thread, INFINITE) != WAIT_OBJECT_0 || - CloseHandle(thread) == 0); -} - -// Mutex -static int pthread_mutex_init(pthread_mutex_t* const mutex, void* mutexattr) { - (void)mutexattr; -#if _WIN32_WINNT >= 0x0600 // Windows Vista / Server 2008 or greater - InitializeCriticalSectionEx(mutex, 0 /*dwSpinCount*/, 0 /*Flags*/); -#else - InitializeCriticalSection(mutex); -#endif - return 0; -} - -static int pthread_mutex_lock(pthread_mutex_t* const mutex) { - EnterCriticalSection(mutex); - return 0; -} - -static int pthread_mutex_unlock(pthread_mutex_t* const mutex) { - LeaveCriticalSection(mutex); - return 0; -} - -static int pthread_mutex_destroy(pthread_mutex_t* const mutex) { - DeleteCriticalSection(mutex); - return 0; -} - -// Condition -static int pthread_cond_destroy(pthread_cond_t* const condition) { - int ok = 1; -#ifdef USE_WINDOWS_CONDITION_VARIABLE - (void)condition; -#else - ok &= (CloseHandle(condition->waiting_sem_) != 0); - ok &= (CloseHandle(condition->received_sem_) != 0); - ok &= (CloseHandle(condition->signal_event_) != 0); -#endif - return !ok; -} - -static int pthread_cond_init(pthread_cond_t* const condition, void* cond_attr) { - (void)cond_attr; -#ifdef USE_WINDOWS_CONDITION_VARIABLE - InitializeConditionVariable(condition); -#else - condition->waiting_sem_ = CreateSemaphore(NULL, 0, 1, NULL); - condition->received_sem_ = CreateSemaphore(NULL, 0, 1, NULL); - condition->signal_event_ = CreateEvent(NULL, FALSE, FALSE, NULL); - if (condition->waiting_sem_ == NULL || - condition->received_sem_ == NULL || - condition->signal_event_ == NULL) { - pthread_cond_destroy(condition); - return 1; - } -#endif - return 0; -} - -static int pthread_cond_signal(pthread_cond_t* const condition) { - int ok = 1; -#ifdef USE_WINDOWS_CONDITION_VARIABLE - WakeConditionVariable(condition); -#else - if (WaitForSingleObject(condition->waiting_sem_, 0) == WAIT_OBJECT_0) { - // a thread is waiting in pthread_cond_wait: allow it to be notified - ok = SetEvent(condition->signal_event_); - // wait until the event is consumed so the signaler cannot consume - // the event via its own pthread_cond_wait. - ok &= (WaitForSingleObject(condition->received_sem_, INFINITE) != - WAIT_OBJECT_0); - } -#endif - return !ok; -} - -static int pthread_cond_wait(pthread_cond_t* const condition, - pthread_mutex_t* const mutex) { - int ok; -#ifdef USE_WINDOWS_CONDITION_VARIABLE - ok = SleepConditionVariableCS(condition, mutex, INFINITE); -#else - // note that there is a consumer available so the signal isn't dropped in - // pthread_cond_signal - if (!ReleaseSemaphore(condition->waiting_sem_, 1, NULL)) return 1; - // now unlock the mutex so pthread_cond_signal may be issued - pthread_mutex_unlock(mutex); - ok = (WaitForSingleObject(condition->signal_event_, INFINITE) == - WAIT_OBJECT_0); - ok &= ReleaseSemaphore(condition->received_sem_, 1, NULL); - pthread_mutex_lock(mutex); -#endif - return !ok; -} - -#else // !_WIN32 -# define THREADFN void* -# define THREAD_RETURN(val) val -#endif // _WIN32 - -//------------------------------------------------------------------------------ - -static THREADFN ThreadLoop(void* ptr) { - WebPWorker* const worker = (WebPWorker*)ptr; - WebPWorkerImpl* const impl = (WebPWorkerImpl*)worker->impl_; - int done = 0; - while (!done) { - pthread_mutex_lock(&impl->mutex_); - while (worker->status_ == OK) { // wait in idling mode - pthread_cond_wait(&impl->condition_, &impl->mutex_); - } - if (worker->status_ == WORK) { - WebPGetWorkerInterface()->Execute(worker); - worker->status_ = OK; - } else if (worker->status_ == NOT_OK) { // finish the worker - done = 1; - } - // signal to the main thread that we're done (for Sync()) - // Note the associated mutex does not need to be held when signaling the - // condition. Unlocking the mutex first may improve performance in some - // implementations, avoiding the case where the waiting thread can't - // reacquire the mutex when woken. - pthread_mutex_unlock(&impl->mutex_); - pthread_cond_signal(&impl->condition_); - } - return THREAD_RETURN(NULL); // Thread is finished -} - -// main thread state control -static void ChangeState(WebPWorker* const worker, WebPWorkerStatus new_status) { - // No-op when attempting to change state on a thread that didn't come up. - // Checking status_ without acquiring the lock first would result in a data - // race. - WebPWorkerImpl* const impl = (WebPWorkerImpl*)worker->impl_; - if (impl == NULL) return; - - pthread_mutex_lock(&impl->mutex_); - if (worker->status_ >= OK) { - // wait for the worker to finish - while (worker->status_ != OK) { - pthread_cond_wait(&impl->condition_, &impl->mutex_); - } - // assign new status and release the working thread if needed - if (new_status != OK) { - worker->status_ = new_status; - // Note the associated mutex does not need to be held when signaling the - // condition. Unlocking the mutex first may improve performance in some - // implementations, avoiding the case where the waiting thread can't - // reacquire the mutex when woken. - pthread_mutex_unlock(&impl->mutex_); - pthread_cond_signal(&impl->condition_); - return; - } - } - pthread_mutex_unlock(&impl->mutex_); -} - -#endif // WEBP_USE_THREAD - -//------------------------------------------------------------------------------ - -static void Init(WebPWorker* const worker) { - memset(worker, 0, sizeof(*worker)); - worker->status_ = NOT_OK; -} - -static int Sync(WebPWorker* const worker) { -#ifdef WEBP_USE_THREAD - ChangeState(worker, OK); -#endif - assert(worker->status_ <= OK); - return !worker->had_error; -} - -static int Reset(WebPWorker* const worker) { - int ok = 1; - worker->had_error = 0; - if (worker->status_ < OK) { -#ifdef WEBP_USE_THREAD - WebPWorkerImpl* const impl = - (WebPWorkerImpl*)WebPSafeCalloc(1, sizeof(WebPWorkerImpl)); - worker->impl_ = (void*)impl; - if (worker->impl_ == NULL) { - return 0; - } - if (pthread_mutex_init(&impl->mutex_, NULL)) { - goto Error; - } - if (pthread_cond_init(&impl->condition_, NULL)) { - pthread_mutex_destroy(&impl->mutex_); - goto Error; - } - pthread_mutex_lock(&impl->mutex_); - ok = !pthread_create(&impl->thread_, NULL, ThreadLoop, worker); - if (ok) worker->status_ = OK; - pthread_mutex_unlock(&impl->mutex_); - if (!ok) { - pthread_mutex_destroy(&impl->mutex_); - pthread_cond_destroy(&impl->condition_); - Error: - WebPSafeFree(impl); - worker->impl_ = NULL; - return 0; - } -#else - worker->status_ = OK; -#endif - } else if (worker->status_ > OK) { - ok = Sync(worker); - } - assert(!ok || (worker->status_ == OK)); - return ok; -} - -static void Execute(WebPWorker* const worker) { - if (worker->hook != NULL) { - worker->had_error |= !worker->hook(worker->data1, worker->data2); - } -} - -static void Launch(WebPWorker* const worker) { -#ifdef WEBP_USE_THREAD - ChangeState(worker, WORK); -#else - Execute(worker); -#endif -} - -static void End(WebPWorker* const worker) { -#ifdef WEBP_USE_THREAD - if (worker->impl_ != NULL) { - WebPWorkerImpl* const impl = (WebPWorkerImpl*)worker->impl_; - ChangeState(worker, NOT_OK); - pthread_join(impl->thread_, NULL); - pthread_mutex_destroy(&impl->mutex_); - pthread_cond_destroy(&impl->condition_); - WebPSafeFree(impl); - worker->impl_ = NULL; - } -#else - worker->status_ = NOT_OK; - assert(worker->impl_ == NULL); -#endif - assert(worker->status_ == NOT_OK); -} - -//------------------------------------------------------------------------------ - -static WebPWorkerInterface g_worker_interface = { - Init, Reset, Sync, Launch, Execute, End -}; - -int WebPSetWorkerInterface(const WebPWorkerInterface* const winterface) { - if (winterface == NULL || - winterface->Init == NULL || winterface->Reset == NULL || - winterface->Sync == NULL || winterface->Launch == NULL || - winterface->Execute == NULL || winterface->End == NULL) { - return 0; - } - g_worker_interface = *winterface; - return 1; -} - -const WebPWorkerInterface* WebPGetWorkerInterface(void) { - return &g_worker_interface; -} - -//------------------------------------------------------------------------------ diff --git a/Extended/libwebp/src/utils/thread_utils.h b/Extended/libwebp/src/utils/thread_utils.h deleted file mode 100644 index 29ad49f..0000000 --- a/Extended/libwebp/src/utils/thread_utils.h +++ /dev/null @@ -1,90 +0,0 @@ -// Copyright 2011 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Multi-threaded worker -// -// Author: Skal (pascal.massimino@gmail.com) - -#ifndef WEBP_UTILS_THREAD_UTILS_H_ -#define WEBP_UTILS_THREAD_UTILS_H_ - -#ifdef HAVE_CONFIG_H -#include "src/webp/config.h" -#endif - -#include "src/webp/types.h" - -#ifdef __cplusplus -extern "C" { -#endif - -// State of the worker thread object -typedef enum { - NOT_OK = 0, // object is unusable - OK, // ready to work - WORK // busy finishing the current task -} WebPWorkerStatus; - -// Function to be called by the worker thread. Takes two opaque pointers as -// arguments (data1 and data2), and should return false in case of error. -typedef int (*WebPWorkerHook)(void*, void*); - -// Synchronization object used to launch job in the worker thread -typedef struct { - void* impl_; // platform-dependent implementation worker details - WebPWorkerStatus status_; - WebPWorkerHook hook; // hook to call - void* data1; // first argument passed to 'hook' - void* data2; // second argument passed to 'hook' - int had_error; // return value of the last call to 'hook' -} WebPWorker; - -// The interface for all thread-worker related functions. All these functions -// must be implemented. -typedef struct { - // Must be called first, before any other method. - void (*Init)(WebPWorker* const worker); - // Must be called to initialize the object and spawn the thread. Re-entrant. - // Will potentially launch the thread. Returns false in case of error. - int (*Reset)(WebPWorker* const worker); - // Makes sure the previous work is finished. Returns true if worker->had_error - // was not set and no error condition was triggered by the working thread. - int (*Sync)(WebPWorker* const worker); - // Triggers the thread to call hook() with data1 and data2 arguments. These - // hook/data1/data2 values can be changed at any time before calling this - // function, but not be changed afterward until the next call to Sync(). - void (*Launch)(WebPWorker* const worker); - // This function is similar to Launch() except that it calls the - // hook directly instead of using a thread. Convenient to bypass the thread - // mechanism while still using the WebPWorker structs. Sync() must - // still be called afterward (for error reporting). - void (*Execute)(WebPWorker* const worker); - // Kill the thread and terminate the object. To use the object again, one - // must call Reset() again. - void (*End)(WebPWorker* const worker); -} WebPWorkerInterface; - -// Install a new set of threading functions, overriding the defaults. This -// should be done before any workers are started, i.e., before any encoding or -// decoding takes place. The contents of the interface struct are copied, it -// is safe to free the corresponding memory after this call. This function is -// not thread-safe. Return false in case of invalid pointer or methods. -WEBP_EXTERN int WebPSetWorkerInterface( - const WebPWorkerInterface* const winterface); - -// Retrieve the currently set thread worker interface. -WEBP_EXTERN const WebPWorkerInterface* WebPGetWorkerInterface(void); - -//------------------------------------------------------------------------------ - -#ifdef __cplusplus -} // extern "C" -#endif - -#endif // WEBP_UTILS_THREAD_UTILS_H_ diff --git a/Extended/libwebp/src/utils/utils.c b/Extended/libwebp/src/utils/utils.c deleted file mode 100644 index 764f752..0000000 --- a/Extended/libwebp/src/utils/utils.c +++ /dev/null @@ -1,335 +0,0 @@ -// Copyright 2012 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Misc. common utility functions -// -// Author: Skal (pascal.massimino@gmail.com) - -#include -#include // for memcpy() -#include "src/webp/decode.h" -#include "src/webp/encode.h" -#include "src/webp/format_constants.h" // for MAX_PALETTE_SIZE -#include "src/utils/color_cache_utils.h" -#include "src/utils/utils.h" - -// If PRINT_MEM_INFO is defined, extra info (like total memory used, number of -// alloc/free etc) is printed. For debugging/tuning purpose only (it's slow, -// and not multi-thread safe!). -// An interesting alternative is valgrind's 'massif' tool: -// http://valgrind.org/docs/manual/ms-manual.html -// Here is an example command line: -/* valgrind --tool=massif --massif-out-file=massif.out \ - --stacks=yes --alloc-fn=WebPSafeMalloc --alloc-fn=WebPSafeCalloc - ms_print massif.out -*/ -// In addition: -// * if PRINT_MEM_TRAFFIC is defined, all the details of the malloc/free cycles -// are printed. -// * if MALLOC_FAIL_AT is defined, the global environment variable -// $MALLOC_FAIL_AT is used to simulate a memory error when calloc or malloc -// is called for the nth time. Example usage: -// export MALLOC_FAIL_AT=50 && ./examples/cwebp input.png -// * if MALLOC_LIMIT is defined, the global environment variable $MALLOC_LIMIT -// sets the maximum amount of memory (in bytes) made available to libwebp. -// This can be used to emulate environment with very limited memory. -// Example: export MALLOC_LIMIT=64000000 && ./examples/dwebp picture.webp - -// #define PRINT_MEM_INFO -// #define PRINT_MEM_TRAFFIC -// #define MALLOC_FAIL_AT -// #define MALLOC_LIMIT - -//------------------------------------------------------------------------------ -// Checked memory allocation - -#if defined(PRINT_MEM_INFO) - -#include - -static int num_malloc_calls = 0; -static int num_calloc_calls = 0; -static int num_free_calls = 0; -static int countdown_to_fail = 0; // 0 = off - -typedef struct MemBlock MemBlock; -struct MemBlock { - void* ptr_; - size_t size_; - MemBlock* next_; -}; - -static MemBlock* all_blocks = NULL; -static size_t total_mem = 0; -static size_t total_mem_allocated = 0; -static size_t high_water_mark = 0; -static size_t mem_limit = 0; - -static int exit_registered = 0; - -static void PrintMemInfo(void) { - fprintf(stderr, "\nMEMORY INFO:\n"); - fprintf(stderr, "num calls to: malloc = %4d\n", num_malloc_calls); - fprintf(stderr, " calloc = %4d\n", num_calloc_calls); - fprintf(stderr, " free = %4d\n", num_free_calls); - fprintf(stderr, "total_mem: %u\n", (uint32_t)total_mem); - fprintf(stderr, "total_mem allocated: %u\n", (uint32_t)total_mem_allocated); - fprintf(stderr, "high-water mark: %u\n", (uint32_t)high_water_mark); - while (all_blocks != NULL) { - MemBlock* b = all_blocks; - all_blocks = b->next_; - free(b); - } -} - -static void Increment(int* const v) { - if (!exit_registered) { -#if defined(MALLOC_FAIL_AT) - { - const char* const malloc_fail_at_str = getenv("MALLOC_FAIL_AT"); - if (malloc_fail_at_str != NULL) { - countdown_to_fail = atoi(malloc_fail_at_str); - } - } -#endif -#if defined(MALLOC_LIMIT) - { - const char* const malloc_limit_str = getenv("MALLOC_LIMIT"); - if (malloc_limit_str != NULL) { - mem_limit = atoi(malloc_limit_str); - } - } -#endif - (void)countdown_to_fail; - (void)mem_limit; - atexit(PrintMemInfo); - exit_registered = 1; - } - ++*v; -} - -static void AddMem(void* ptr, size_t size) { - if (ptr != NULL) { - MemBlock* const b = (MemBlock*)malloc(sizeof(*b)); - if (b == NULL) abort(); - b->next_ = all_blocks; - all_blocks = b; - b->ptr_ = ptr; - b->size_ = size; - total_mem += size; - total_mem_allocated += size; -#if defined(PRINT_MEM_TRAFFIC) -#if defined(MALLOC_FAIL_AT) - fprintf(stderr, "fail-count: %5d [mem=%u]\n", - num_malloc_calls + num_calloc_calls, (uint32_t)total_mem); -#else - fprintf(stderr, "Mem: %u (+%u)\n", (uint32_t)total_mem, (uint32_t)size); -#endif -#endif - if (total_mem > high_water_mark) high_water_mark = total_mem; - } -} - -static void SubMem(void* ptr) { - if (ptr != NULL) { - MemBlock** b = &all_blocks; - // Inefficient search, but that's just for debugging. - while (*b != NULL && (*b)->ptr_ != ptr) b = &(*b)->next_; - if (*b == NULL) { - fprintf(stderr, "Invalid pointer free! (%p)\n", ptr); - abort(); - } - { - MemBlock* const block = *b; - *b = block->next_; - total_mem -= block->size_; -#if defined(PRINT_MEM_TRAFFIC) - fprintf(stderr, "Mem: %u (-%u)\n", - (uint32_t)total_mem, (uint32_t)block->size_); -#endif - free(block); - } - } -} - -#else -#define Increment(v) do {} while (0) -#define AddMem(p, s) do {} while (0) -#define SubMem(p) do {} while (0) -#endif - -// Returns 0 in case of overflow of nmemb * size. -static int CheckSizeArgumentsOverflow(uint64_t nmemb, size_t size) { - const uint64_t total_size = nmemb * size; - if (nmemb == 0) return 1; - if ((uint64_t)size > WEBP_MAX_ALLOCABLE_MEMORY / nmemb) return 0; - if (total_size != (size_t)total_size) return 0; -#if defined(PRINT_MEM_INFO) && defined(MALLOC_FAIL_AT) - if (countdown_to_fail > 0 && --countdown_to_fail == 0) { - return 0; // fake fail! - } -#endif -#if defined(MALLOC_LIMIT) - if (mem_limit > 0) { - const uint64_t new_total_mem = (uint64_t)total_mem + total_size; - if (new_total_mem != (size_t)new_total_mem || - new_total_mem > mem_limit) { - return 0; // fake fail! - } - } -#endif - - return 1; -} - -void* WebPSafeMalloc(uint64_t nmemb, size_t size) { - void* ptr; - Increment(&num_malloc_calls); - if (!CheckSizeArgumentsOverflow(nmemb, size)) return NULL; - assert(nmemb * size > 0); - ptr = malloc((size_t)(nmemb * size)); - AddMem(ptr, (size_t)(nmemb * size)); - return ptr; -} - -void* WebPSafeCalloc(uint64_t nmemb, size_t size) { - void* ptr; - Increment(&num_calloc_calls); - if (!CheckSizeArgumentsOverflow(nmemb, size)) return NULL; - assert(nmemb * size > 0); - ptr = calloc((size_t)nmemb, size); - AddMem(ptr, (size_t)(nmemb * size)); - return ptr; -} - -void WebPSafeFree(void* const ptr) { - if (ptr != NULL) { - Increment(&num_free_calls); - SubMem(ptr); - } - free(ptr); -} - -// Public API functions. - -void* WebPMalloc(size_t size) { - return WebPSafeMalloc(1, size); -} - -void WebPFree(void* ptr) { - WebPSafeFree(ptr); -} - -//------------------------------------------------------------------------------ - -void WebPCopyPlane(const uint8_t* src, int src_stride, - uint8_t* dst, int dst_stride, int width, int height) { - assert(src != NULL && dst != NULL); - assert(src_stride >= width && dst_stride >= width); - while (height-- > 0) { - memcpy(dst, src, width); - src += src_stride; - dst += dst_stride; - } -} - -void WebPCopyPixels(const WebPPicture* const src, WebPPicture* const dst) { - assert(src != NULL && dst != NULL); - assert(src->width == dst->width && src->height == dst->height); - assert(src->use_argb && dst->use_argb); - WebPCopyPlane((uint8_t*)src->argb, 4 * src->argb_stride, (uint8_t*)dst->argb, - 4 * dst->argb_stride, 4 * src->width, src->height); -} - -//------------------------------------------------------------------------------ - -#define COLOR_HASH_SIZE (MAX_PALETTE_SIZE * 4) -#define COLOR_HASH_RIGHT_SHIFT 22 // 32 - log2(COLOR_HASH_SIZE). - -int WebPGetColorPalette(const WebPPicture* const pic, uint32_t* const palette) { - int i; - int x, y; - int num_colors = 0; - uint8_t in_use[COLOR_HASH_SIZE] = { 0 }; - uint32_t colors[COLOR_HASH_SIZE]; - const uint32_t* argb = pic->argb; - const int width = pic->width; - const int height = pic->height; - uint32_t last_pix = ~argb[0]; // so we're sure that last_pix != argb[0] - assert(pic != NULL); - assert(pic->use_argb); - - for (y = 0; y < height; ++y) { - for (x = 0; x < width; ++x) { - int key; - if (argb[x] == last_pix) { - continue; - } - last_pix = argb[x]; - key = VP8LHashPix(last_pix, COLOR_HASH_RIGHT_SHIFT); - while (1) { - if (!in_use[key]) { - colors[key] = last_pix; - in_use[key] = 1; - ++num_colors; - if (num_colors > MAX_PALETTE_SIZE) { - return MAX_PALETTE_SIZE + 1; // Exact count not needed. - } - break; - } else if (colors[key] == last_pix) { - break; // The color is already there. - } else { - // Some other color sits here, so do linear conflict resolution. - ++key; - key &= (COLOR_HASH_SIZE - 1); // Key mask. - } - } - } - argb += pic->argb_stride; - } - - if (palette != NULL) { // Fill the colors into palette. - num_colors = 0; - for (i = 0; i < COLOR_HASH_SIZE; ++i) { - if (in_use[i]) { - palette[num_colors] = colors[i]; - ++num_colors; - } - } - } - return num_colors; -} - -#undef COLOR_HASH_SIZE -#undef COLOR_HASH_RIGHT_SHIFT - -//------------------------------------------------------------------------------ - -#if defined(WEBP_NEED_LOG_TABLE_8BIT) -const uint8_t WebPLogTable8bit[256] = { // 31 ^ clz(i) - 0, 0, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7 -}; -#endif - -//------------------------------------------------------------------------------ diff --git a/Extended/libwebp/src/utils/utils.h b/Extended/libwebp/src/utils/utils.h deleted file mode 100644 index 2a3ec92..0000000 --- a/Extended/libwebp/src/utils/utils.h +++ /dev/null @@ -1,178 +0,0 @@ -// Copyright 2012 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Misc. common utility functions -// -// Authors: Skal (pascal.massimino@gmail.com) -// Urvang (urvang@google.com) - -#ifndef WEBP_UTILS_UTILS_H_ -#define WEBP_UTILS_UTILS_H_ - -#ifdef HAVE_CONFIG_H -#include "src/webp/config.h" -#endif - -#include -#include - -#include "src/dsp/dsp.h" -#include "src/webp/types.h" - -#ifdef __cplusplus -extern "C" { -#endif - -//------------------------------------------------------------------------------ -// Memory allocation - -// This is the maximum memory amount that libwebp will ever try to allocate. -#ifndef WEBP_MAX_ALLOCABLE_MEMORY -#if SIZE_MAX > (1ULL << 34) -#define WEBP_MAX_ALLOCABLE_MEMORY (1ULL << 34) -#else -// For 32-bit targets keep this below INT_MAX to avoid valgrind warnings. -#define WEBP_MAX_ALLOCABLE_MEMORY ((1ULL << 31) - (1 << 16)) -#endif -#endif // WEBP_MAX_ALLOCABLE_MEMORY - -// size-checking safe malloc/calloc: verify that the requested size is not too -// large, or return NULL. You don't need to call these for constructs like -// malloc(sizeof(foo)), but only if there's picture-dependent size involved -// somewhere (like: malloc(num_pixels * sizeof(*something))). That's why this -// safe malloc() borrows the signature from calloc(), pointing at the dangerous -// underlying multiply involved. -WEBP_EXTERN void* WebPSafeMalloc(uint64_t nmemb, size_t size); -// Note that WebPSafeCalloc() expects the second argument type to be 'size_t' -// in order to favor the "calloc(num_foo, sizeof(foo))" pattern. -WEBP_EXTERN void* WebPSafeCalloc(uint64_t nmemb, size_t size); - -// Companion deallocation function to the above allocations. -WEBP_EXTERN void WebPSafeFree(void* const ptr); - -//------------------------------------------------------------------------------ -// Alignment - -#define WEBP_ALIGN_CST 31 -#define WEBP_ALIGN(PTR) (((uintptr_t)(PTR) + WEBP_ALIGN_CST) & ~WEBP_ALIGN_CST) - -#include -// memcpy() is the safe way of moving potentially unaligned 32b memory. -static WEBP_INLINE uint32_t WebPMemToUint32(const uint8_t* const ptr) { - uint32_t A; - memcpy(&A, ptr, sizeof(A)); - return A; -} -static WEBP_INLINE void WebPUint32ToMem(uint8_t* const ptr, uint32_t val) { - memcpy(ptr, &val, sizeof(val)); -} - -//------------------------------------------------------------------------------ -// Reading/writing data. - -// Read 16, 24 or 32 bits stored in little-endian order. -static WEBP_INLINE int GetLE16(const uint8_t* const data) { - return (int)(data[0] << 0) | (data[1] << 8); -} - -static WEBP_INLINE int GetLE24(const uint8_t* const data) { - return GetLE16(data) | (data[2] << 16); -} - -static WEBP_INLINE uint32_t GetLE32(const uint8_t* const data) { - return GetLE16(data) | ((uint32_t)GetLE16(data + 2) << 16); -} - -// Store 16, 24 or 32 bits in little-endian order. -static WEBP_INLINE void PutLE16(uint8_t* const data, int val) { - assert(val < (1 << 16)); - data[0] = (val >> 0) & 0xff; - data[1] = (val >> 8) & 0xff; -} - -static WEBP_INLINE void PutLE24(uint8_t* const data, int val) { - assert(val < (1 << 24)); - PutLE16(data, val & 0xffff); - data[2] = (val >> 16) & 0xff; -} - -static WEBP_INLINE void PutLE32(uint8_t* const data, uint32_t val) { - PutLE16(data, (int)(val & 0xffff)); - PutLE16(data + 2, (int)(val >> 16)); -} - -// Returns (int)floor(log2(n)). n must be > 0. -// use GNU builtins where available. -#if defined(__GNUC__) && \ - ((__GNUC__ == 3 && __GNUC_MINOR__ >= 4) || __GNUC__ >= 4) -static WEBP_INLINE int BitsLog2Floor(uint32_t n) { - return 31 ^ __builtin_clz(n); -} -#elif defined(_MSC_VER) && _MSC_VER > 1310 && \ - (defined(_M_X64) || defined(_M_IX86)) -#include -#pragma intrinsic(_BitScanReverse) - -static WEBP_INLINE int BitsLog2Floor(uint32_t n) { - unsigned long first_set_bit; - _BitScanReverse(&first_set_bit, n); - return first_set_bit; -} -#else // default: use the C-version. -// Returns 31 ^ clz(n) = log2(n). This is the default C-implementation, either -// based on table or not. Can be used as fallback if clz() is not available. -#define WEBP_NEED_LOG_TABLE_8BIT -extern const uint8_t WebPLogTable8bit[256]; -static WEBP_INLINE int WebPLog2FloorC(uint32_t n) { - int log_value = 0; - while (n >= 256) { - log_value += 8; - n >>= 8; - } - return log_value + WebPLogTable8bit[n]; -} - -static WEBP_INLINE int BitsLog2Floor(uint32_t n) { return WebPLog2FloorC(n); } -#endif - -//------------------------------------------------------------------------------ -// Pixel copying. - -struct WebPPicture; - -// Copy width x height pixels from 'src' to 'dst' honoring the strides. -WEBP_EXTERN void WebPCopyPlane(const uint8_t* src, int src_stride, - uint8_t* dst, int dst_stride, - int width, int height); - -// Copy ARGB pixels from 'src' to 'dst' honoring strides. 'src' and 'dst' are -// assumed to be already allocated and using ARGB data. -WEBP_EXTERN void WebPCopyPixels(const struct WebPPicture* const src, - struct WebPPicture* const dst); - -//------------------------------------------------------------------------------ -// Unique colors. - -// Returns count of unique colors in 'pic', assuming pic->use_argb is true. -// If the unique color count is more than MAX_PALETTE_SIZE, returns -// MAX_PALETTE_SIZE+1. -// If 'palette' is not NULL and number of unique colors is less than or equal to -// MAX_PALETTE_SIZE, also outputs the actual unique colors into 'palette'. -// Note: 'palette' is assumed to be an array already allocated with at least -// MAX_PALETTE_SIZE elements. -WEBP_EXTERN int WebPGetColorPalette(const struct WebPPicture* const pic, - uint32_t* const palette); - -//------------------------------------------------------------------------------ - -#ifdef __cplusplus -} // extern "C" -#endif - -#endif // WEBP_UTILS_UTILS_H_ diff --git a/Extended/libwebp/src/webp/config.h b/Extended/libwebp/src/webp/config.h deleted file mode 100644 index fde211e..0000000 --- a/Extended/libwebp/src/webp/config.h +++ /dev/null @@ -1,164 +0,0 @@ -/* src/webp/config.h. Generated from config.h.in by configure. */ -/* src/webp/config.h.in. Generated from configure.ac by autoheader. */ - -#ifndef __has_builtin -# define __has_builtin(x) 0 -#endif - -/* Define if building universal (internal helper macro) */ -#define AC_APPLE_UNIVERSAL_BUILD 1 - -/* Set to 1 if __builtin_bswap16 is available */ -#if __has_builtin(__builtin_bswap16) -#define HAVE_BUILTIN_BSWAP16 1 -#endif - -/* Set to 1 if __builtin_bswap32 is available */ -#if __has_builtin(__builtin_bswap32) -#define HAVE_BUILTIN_BSWAP32 1 -#endif - -/* Set to 1 if __builtin_bswap64 is available */ -#if __has_builtin(__builtin_bswap64) -#define HAVE_BUILTIN_BSWAP64 1 -#endif - -/* Define to 1 if you have the header file. */ -/* #undef HAVE_CPU_FEATURES_H */ - -/* Define to 1 if you have the header file. */ -#define HAVE_DLFCN_H 1 - -/* Define to 1 if you have the header file. */ -/* #undef HAVE_GLUT_GLUT_H */ - -/* Define to 1 if you have the header file. */ -/* #undef HAVE_GL_GLUT_H */ - -/* Define to 1 if you have the header file. */ -#define HAVE_INTTYPES_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_MEMORY_H 1 - -/* Define to 1 if you have the header file. */ -/* #undef HAVE_OPENGL_GLUT_H */ - -/* Have PTHREAD_PRIO_INHERIT. */ -#define HAVE_PTHREAD_PRIO_INHERIT 1 - -/* Define to 1 if you have the header file. */ -/* #undef HAVE_SHLWAPI_H */ - -/* Define to 1 if you have the header file. */ -#define HAVE_STDINT_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_STDLIB_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_STRINGS_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_STRING_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_SYS_STAT_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_SYS_TYPES_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_UNISTD_H 1 - -/* Define to 1 if you have the header file. */ -/* #undef HAVE_WINCODEC_H */ - -/* Define to 1 if you have the header file. */ -/* #undef HAVE_WINDOWS_H */ - -/* Define to the sub-directory where libtool stores uninstalled libraries. */ -#define LT_OBJDIR ".libs/" - -/* Name of package */ -#define PACKAGE "libwebp" - -/* Define to the address where bug reports for this package should be sent. */ -#define PACKAGE_BUGREPORT "https://bugs.chromium.org/p/webp" - -/* Define to the full name of this package. */ -#define PACKAGE_NAME "libwebp" - -/* Define to the full name and version of this package. */ -#define PACKAGE_STRING "libwebp 1.1.0" - -/* Define to the one symbol short name of this package. */ -#define PACKAGE_TARNAME "libwebp" - -/* Define to the home page for this package. */ -#define PACKAGE_URL "http://developers.google.com/speed/webp" - -/* Define to the version of this package. */ -#define PACKAGE_VERSION "1.1.0" - -/* Define to necessary symbol if this constant uses a non-standard name on - your system. */ -/* #undef PTHREAD_CREATE_JOINABLE */ - -/* Define to 1 if you have the ANSI C header files. */ -#define STDC_HEADERS 1 - -/* Version number of package */ -#define VERSION "1.1.0" - -/* Set to 1 if GIF library is installed */ -/* #undef WEBP_HAVE_GIF */ - -/* Set to 1 if OpenGL is supported */ -/* #undef WEBP_HAVE_GL */ - -/* Set to 1 if JPEG library is installed */ -/* #undef WEBP_HAVE_JPEG */ - -/* Set to 1 if NEON is supported */ -/* #undef WEBP_HAVE_NEON */ - -/* Set to 1 if runtime detection of NEON is enabled */ -/* #undef WEBP_HAVE_NEON_RTCD */ - -/* Set to 1 if PNG library is installed */ -/* #undef WEBP_HAVE_PNG */ - -/* Set to 1 if SDL library is installed */ -/* #undef WEBP_HAVE_SDL */ - -/* Set to 1 if SSE2 is supported */ -#if __SSE2__ -#define WEBP_HAVE_SSE2 1 -#endif - -/* Set to 1 if SSE4.1 is supported */ -#if __SSE4_1__ -#define WEBP_HAVE_SSE41 1 -#endif - -/* Set to 1 if TIFF library is installed */ -/* #undef WEBP_HAVE_TIFF */ - -/* Enable near lossless encoding */ -#define WEBP_NEAR_LOSSLESS 1 - -/* Undefine this to disable thread support. */ -#define WEBP_USE_THREAD 1 - -/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most - significant byte first (like Motorola and SPARC, unlike Intel). */ -#if defined AC_APPLE_UNIVERSAL_BUILD -# if defined __BIG_ENDIAN__ -# define WORDS_BIGENDIAN 1 -# endif -#else -# ifndef WORDS_BIGENDIAN -/* # undef WORDS_BIGENDIAN */ -# endif -#endif diff --git a/Extended/libwebp/src/webp/config.h.in b/Extended/libwebp/src/webp/config.h.in deleted file mode 100644 index 6ac026e..0000000 --- a/Extended/libwebp/src/webp/config.h.in +++ /dev/null @@ -1,149 +0,0 @@ -/* src/webp/config.h.in. Generated from configure.ac by autoheader. */ - -/* Define if building universal (internal helper macro) */ -#undef AC_APPLE_UNIVERSAL_BUILD - -/* Set to 1 if __builtin_bswap16 is available */ -#undef HAVE_BUILTIN_BSWAP16 - -/* Set to 1 if __builtin_bswap32 is available */ -#undef HAVE_BUILTIN_BSWAP32 - -/* Set to 1 if __builtin_bswap64 is available */ -#undef HAVE_BUILTIN_BSWAP64 - -/* Define to 1 if you have the header file. */ -#undef HAVE_CPU_FEATURES_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_DLFCN_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_GLUT_GLUT_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_GL_GLUT_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_INTTYPES_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_MEMORY_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_OPENGL_GLUT_H - -/* Have PTHREAD_PRIO_INHERIT. */ -#undef HAVE_PTHREAD_PRIO_INHERIT - -/* Define to 1 if you have the header file. */ -#undef HAVE_SHLWAPI_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_STDINT_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_STDLIB_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_STRINGS_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_STRING_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_STAT_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_TYPES_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_UNISTD_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_WINCODEC_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_WINDOWS_H - -/* Define to the sub-directory where libtool stores uninstalled libraries. */ -#undef LT_OBJDIR - -/* Name of package */ -#undef PACKAGE - -/* Define to the address where bug reports for this package should be sent. */ -#undef PACKAGE_BUGREPORT - -/* Define to the full name of this package. */ -#undef PACKAGE_NAME - -/* Define to the full name and version of this package. */ -#undef PACKAGE_STRING - -/* Define to the one symbol short name of this package. */ -#undef PACKAGE_TARNAME - -/* Define to the home page for this package. */ -#undef PACKAGE_URL - -/* Define to the version of this package. */ -#undef PACKAGE_VERSION - -/* Define to necessary symbol if this constant uses a non-standard name on - your system. */ -#undef PTHREAD_CREATE_JOINABLE - -/* Define to 1 if you have the ANSI C header files. */ -#undef STDC_HEADERS - -/* Version number of package */ -#undef VERSION - -/* Set to 1 if GIF library is installed */ -#undef WEBP_HAVE_GIF - -/* Set to 1 if OpenGL is supported */ -#undef WEBP_HAVE_GL - -/* Set to 1 if JPEG library is installed */ -#undef WEBP_HAVE_JPEG - -/* Set to 1 if NEON is supported */ -#undef WEBP_HAVE_NEON - -/* Set to 1 if runtime detection of NEON is enabled */ -#undef WEBP_HAVE_NEON_RTCD - -/* Set to 1 if PNG library is installed */ -#undef WEBP_HAVE_PNG - -/* Set to 1 if SDL library is installed */ -#undef WEBP_HAVE_SDL - -/* Set to 1 if SSE2 is supported */ -#undef WEBP_HAVE_SSE2 - -/* Set to 1 if SSE4.1 is supported */ -#undef WEBP_HAVE_SSE41 - -/* Set to 1 if TIFF library is installed */ -#undef WEBP_HAVE_TIFF - -/* Enable near lossless encoding */ -#undef WEBP_NEAR_LOSSLESS - -/* Undefine this to disable thread support. */ -#undef WEBP_USE_THREAD - -/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most - significant byte first (like Motorola and SPARC, unlike Intel). */ -#if defined AC_APPLE_UNIVERSAL_BUILD -# if defined __BIG_ENDIAN__ -# define WORDS_BIGENDIAN 1 -# endif -#else -# ifndef WORDS_BIGENDIAN -# undef WORDS_BIGENDIAN -# endif -#endif diff --git a/Extended/libwebp/src/webp/decode.h b/Extended/libwebp/src/webp/decode.h deleted file mode 100644 index 9d30069..0000000 --- a/Extended/libwebp/src/webp/decode.h +++ /dev/null @@ -1,503 +0,0 @@ -// Copyright 2010 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Main decoding functions for WebP images. -// -// Author: Skal (pascal.massimino@gmail.com) - -#ifndef WEBP_WEBP_DECODE_H_ -#define WEBP_WEBP_DECODE_H_ - -#import - -#ifdef __cplusplus -extern "C" { -#endif - -#define WEBP_DECODER_ABI_VERSION 0x0209 // MAJOR(8b) + MINOR(8b) - -// Note: forward declaring enumerations is not allowed in (strict) C and C++, -// the types are left here for reference. -// typedef enum VP8StatusCode VP8StatusCode; -// typedef enum WEBP_CSP_MODE WEBP_CSP_MODE; -typedef struct WebPRGBABuffer WebPRGBABuffer; -typedef struct WebPYUVABuffer WebPYUVABuffer; -typedef struct WebPDecBuffer WebPDecBuffer; -typedef struct WebPIDecoder WebPIDecoder; -typedef struct WebPBitstreamFeatures WebPBitstreamFeatures; -typedef struct WebPDecoderOptions WebPDecoderOptions; -typedef struct WebPDecoderConfig WebPDecoderConfig; - -// Return the decoder's version number, packed in hexadecimal using 8bits for -// each of major/minor/revision. E.g: v2.5.7 is 0x020507. -WEBP_EXTERN int WebPGetDecoderVersion(void); - -// Retrieve basic header information: width, height. -// This function will also validate the header, returning true on success, -// false otherwise. '*width' and '*height' are only valid on successful return. -// Pointers 'width' and 'height' can be passed NULL if deemed irrelevant. -// Note: The following chunk sequences (before the raw VP8/VP8L data) are -// considered valid by this function: -// RIFF + VP8(L) -// RIFF + VP8X + (optional chunks) + VP8(L) -// ALPH + VP8 <-- Not a valid WebP format: only allowed for internal purpose. -// VP8(L) <-- Not a valid WebP format: only allowed for internal purpose. -WEBP_EXTERN int WebPGetInfo(const uint8_t* data, size_t data_size, - int* width, int* height); - -// Decodes WebP images pointed to by 'data' and returns RGBA samples, along -// with the dimensions in *width and *height. The ordering of samples in -// memory is R, G, B, A, R, G, B, A... in scan order (endian-independent). -// The returned pointer should be deleted calling WebPFree(). -// Returns NULL in case of error. -WEBP_EXTERN uint8_t* WebPDecodeRGBA(const uint8_t* data, size_t data_size, - int* width, int* height); - -// Same as WebPDecodeRGBA, but returning A, R, G, B, A, R, G, B... ordered data. -WEBP_EXTERN uint8_t* WebPDecodeARGB(const uint8_t* data, size_t data_size, - int* width, int* height); - -// Same as WebPDecodeRGBA, but returning B, G, R, A, B, G, R, A... ordered data. -WEBP_EXTERN uint8_t* WebPDecodeBGRA(const uint8_t* data, size_t data_size, - int* width, int* height); - -// Same as WebPDecodeRGBA, but returning R, G, B, R, G, B... ordered data. -// If the bitstream contains transparency, it is ignored. -WEBP_EXTERN uint8_t* WebPDecodeRGB(const uint8_t* data, size_t data_size, - int* width, int* height); - -// Same as WebPDecodeRGB, but returning B, G, R, B, G, R... ordered data. -WEBP_EXTERN uint8_t* WebPDecodeBGR(const uint8_t* data, size_t data_size, - int* width, int* height); - - -// Decode WebP images pointed to by 'data' to Y'UV format(*). The pointer -// returned is the Y samples buffer. Upon return, *u and *v will point to -// the U and V chroma data. These U and V buffers need NOT be passed to -// WebPFree(), unlike the returned Y luma one. The dimension of the U and V -// planes are both (*width + 1) / 2 and (*height + 1)/ 2. -// Upon return, the Y buffer has a stride returned as '*stride', while U and V -// have a common stride returned as '*uv_stride'. -// Return NULL in case of error. -// (*) Also named Y'CbCr. See: http://en.wikipedia.org/wiki/YCbCr -WEBP_EXTERN uint8_t* WebPDecodeYUV(const uint8_t* data, size_t data_size, - int* width, int* height, - uint8_t** u, uint8_t** v, - int* stride, int* uv_stride); - -// These five functions are variants of the above ones, that decode the image -// directly into a pre-allocated buffer 'output_buffer'. The maximum storage -// available in this buffer is indicated by 'output_buffer_size'. If this -// storage is not sufficient (or an error occurred), NULL is returned. -// Otherwise, output_buffer is returned, for convenience. -// The parameter 'output_stride' specifies the distance (in bytes) -// between scanlines. Hence, output_buffer_size is expected to be at least -// output_stride x picture-height. -WEBP_EXTERN uint8_t* WebPDecodeRGBAInto( - const uint8_t* data, size_t data_size, - uint8_t* output_buffer, size_t output_buffer_size, int output_stride); -WEBP_EXTERN uint8_t* WebPDecodeARGBInto( - const uint8_t* data, size_t data_size, - uint8_t* output_buffer, size_t output_buffer_size, int output_stride); -WEBP_EXTERN uint8_t* WebPDecodeBGRAInto( - const uint8_t* data, size_t data_size, - uint8_t* output_buffer, size_t output_buffer_size, int output_stride); - -// RGB and BGR variants. Here too the transparency information, if present, -// will be dropped and ignored. -WEBP_EXTERN uint8_t* WebPDecodeRGBInto( - const uint8_t* data, size_t data_size, - uint8_t* output_buffer, size_t output_buffer_size, int output_stride); -WEBP_EXTERN uint8_t* WebPDecodeBGRInto( - const uint8_t* data, size_t data_size, - uint8_t* output_buffer, size_t output_buffer_size, int output_stride); - -// WebPDecodeYUVInto() is a variant of WebPDecodeYUV() that operates directly -// into pre-allocated luma/chroma plane buffers. This function requires the -// strides to be passed: one for the luma plane and one for each of the -// chroma ones. The size of each plane buffer is passed as 'luma_size', -// 'u_size' and 'v_size' respectively. -// Pointer to the luma plane ('*luma') is returned or NULL if an error occurred -// during decoding (or because some buffers were found to be too small). -WEBP_EXTERN uint8_t* WebPDecodeYUVInto( - const uint8_t* data, size_t data_size, - uint8_t* luma, size_t luma_size, int luma_stride, - uint8_t* u, size_t u_size, int u_stride, - uint8_t* v, size_t v_size, int v_stride); - -//------------------------------------------------------------------------------ -// Output colorspaces and buffer - -// Colorspaces -// Note: the naming describes the byte-ordering of packed samples in memory. -// For instance, MODE_BGRA relates to samples ordered as B,G,R,A,B,G,R,A,... -// Non-capital names (e.g.:MODE_Argb) relates to pre-multiplied RGB channels. -// RGBA-4444 and RGB-565 colorspaces are represented by following byte-order: -// RGBA-4444: [r3 r2 r1 r0 g3 g2 g1 g0], [b3 b2 b1 b0 a3 a2 a1 a0], ... -// RGB-565: [r4 r3 r2 r1 r0 g5 g4 g3], [g2 g1 g0 b4 b3 b2 b1 b0], ... -// In the case WEBP_SWAP_16BITS_CSP is defined, the bytes are swapped for -// these two modes: -// RGBA-4444: [b3 b2 b1 b0 a3 a2 a1 a0], [r3 r2 r1 r0 g3 g2 g1 g0], ... -// RGB-565: [g2 g1 g0 b4 b3 b2 b1 b0], [r4 r3 r2 r1 r0 g5 g4 g3], ... - -typedef enum WEBP_CSP_MODE { - MODE_RGB = 0, MODE_RGBA = 1, - MODE_BGR = 2, MODE_BGRA = 3, - MODE_ARGB = 4, MODE_RGBA_4444 = 5, - MODE_RGB_565 = 6, - // RGB-premultiplied transparent modes (alpha value is preserved) - MODE_rgbA = 7, - MODE_bgrA = 8, - MODE_Argb = 9, - MODE_rgbA_4444 = 10, - // YUV modes must come after RGB ones. - MODE_YUV = 11, MODE_YUVA = 12, // yuv 4:2:0 - MODE_LAST = 13 -} WEBP_CSP_MODE; - -// Some useful macros: -static WEBP_INLINE int WebPIsPremultipliedMode(WEBP_CSP_MODE mode) { - return (mode == MODE_rgbA || mode == MODE_bgrA || mode == MODE_Argb || - mode == MODE_rgbA_4444); -} - -static WEBP_INLINE int WebPIsAlphaMode(WEBP_CSP_MODE mode) { - return (mode == MODE_RGBA || mode == MODE_BGRA || mode == MODE_ARGB || - mode == MODE_RGBA_4444 || mode == MODE_YUVA || - WebPIsPremultipliedMode(mode)); -} - -static WEBP_INLINE int WebPIsRGBMode(WEBP_CSP_MODE mode) { - return (mode < MODE_YUV); -} - -//------------------------------------------------------------------------------ -// WebPDecBuffer: Generic structure for describing the output sample buffer. - -struct WebPRGBABuffer { // view as RGBA - uint8_t* rgba; // pointer to RGBA samples - int stride; // stride in bytes from one scanline to the next. - size_t size; // total size of the *rgba buffer. -}; - -struct WebPYUVABuffer { // view as YUVA - uint8_t* y, *u, *v, *a; // pointer to luma, chroma U/V, alpha samples - int y_stride; // luma stride - int u_stride, v_stride; // chroma strides - int a_stride; // alpha stride - size_t y_size; // luma plane size - size_t u_size, v_size; // chroma planes size - size_t a_size; // alpha-plane size -}; - -// Output buffer -struct WebPDecBuffer { - WEBP_CSP_MODE colorspace; // Colorspace. - int width, height; // Dimensions. - int is_external_memory; // If non-zero, 'internal_memory' pointer is not - // used. If value is '2' or more, the external - // memory is considered 'slow' and multiple - // read/write will be avoided. - union { - WebPRGBABuffer RGBA; - WebPYUVABuffer YUVA; - } u; // Nameless union of buffer parameters. - uint32_t pad[4]; // padding for later use - - uint8_t* private_memory; // Internally allocated memory (only when - // is_external_memory is 0). Should not be used - // externally, but accessed via the buffer union. -}; - -// Internal, version-checked, entry point -WEBP_EXTERN int WebPInitDecBufferInternal(WebPDecBuffer*, int); - -// Initialize the structure as empty. Must be called before any other use. -// Returns false in case of version mismatch -static WEBP_INLINE int WebPInitDecBuffer(WebPDecBuffer* buffer) { - return WebPInitDecBufferInternal(buffer, WEBP_DECODER_ABI_VERSION); -} - -// Free any memory associated with the buffer. Must always be called last. -// Note: doesn't free the 'buffer' structure itself. -WEBP_EXTERN void WebPFreeDecBuffer(WebPDecBuffer* buffer); - -//------------------------------------------------------------------------------ -// Enumeration of the status codes - -typedef enum VP8StatusCode { - VP8_STATUS_OK = 0, - VP8_STATUS_OUT_OF_MEMORY, - VP8_STATUS_INVALID_PARAM, - VP8_STATUS_BITSTREAM_ERROR, - VP8_STATUS_UNSUPPORTED_FEATURE, - VP8_STATUS_SUSPENDED, - VP8_STATUS_USER_ABORT, - VP8_STATUS_NOT_ENOUGH_DATA -} VP8StatusCode; - -//------------------------------------------------------------------------------ -// Incremental decoding -// -// This API allows streamlined decoding of partial data. -// Picture can be incrementally decoded as data become available thanks to the -// WebPIDecoder object. This object can be left in a SUSPENDED state if the -// picture is only partially decoded, pending additional input. -// Code example: -// -// WebPInitDecBuffer(&output_buffer); -// output_buffer.colorspace = mode; -// ... -// WebPIDecoder* idec = WebPINewDecoder(&output_buffer); -// while (additional_data_is_available) { -// // ... (get additional data in some new_data[] buffer) -// status = WebPIAppend(idec, new_data, new_data_size); -// if (status != VP8_STATUS_OK && status != VP8_STATUS_SUSPENDED) { -// break; // an error occurred. -// } -// -// // The above call decodes the current available buffer. -// // Part of the image can now be refreshed by calling -// // WebPIDecGetRGB()/WebPIDecGetYUVA() etc. -// } -// WebPIDelete(idec); - -// Creates a new incremental decoder with the supplied buffer parameter. -// This output_buffer can be passed NULL, in which case a default output buffer -// is used (with MODE_RGB). Otherwise, an internal reference to 'output_buffer' -// is kept, which means that the lifespan of 'output_buffer' must be larger than -// that of the returned WebPIDecoder object. -// The supplied 'output_buffer' content MUST NOT be changed between calls to -// WebPIAppend() or WebPIUpdate() unless 'output_buffer.is_external_memory' is -// not set to 0. In such a case, it is allowed to modify the pointers, size and -// stride of output_buffer.u.RGBA or output_buffer.u.YUVA, provided they remain -// within valid bounds. -// All other fields of WebPDecBuffer MUST remain constant between calls. -// Returns NULL if the allocation failed. -WEBP_EXTERN WebPIDecoder* WebPINewDecoder(WebPDecBuffer* output_buffer); - -// This function allocates and initializes an incremental-decoder object, which -// will output the RGB/A samples specified by 'csp' into a preallocated -// buffer 'output_buffer'. The size of this buffer is at least -// 'output_buffer_size' and the stride (distance in bytes between two scanlines) -// is specified by 'output_stride'. -// Additionally, output_buffer can be passed NULL in which case the output -// buffer will be allocated automatically when the decoding starts. The -// colorspace 'csp' is taken into account for allocating this buffer. All other -// parameters are ignored. -// Returns NULL if the allocation failed, or if some parameters are invalid. -WEBP_EXTERN WebPIDecoder* WebPINewRGB( - WEBP_CSP_MODE csp, - uint8_t* output_buffer, size_t output_buffer_size, int output_stride); - -// This function allocates and initializes an incremental-decoder object, which -// will output the raw luma/chroma samples into a preallocated planes if -// supplied. The luma plane is specified by its pointer 'luma', its size -// 'luma_size' and its stride 'luma_stride'. Similarly, the chroma-u plane -// is specified by the 'u', 'u_size' and 'u_stride' parameters, and the chroma-v -// plane by 'v' and 'v_size'. And same for the alpha-plane. The 'a' pointer -// can be pass NULL in case one is not interested in the transparency plane. -// Conversely, 'luma' can be passed NULL if no preallocated planes are supplied. -// In this case, the output buffer will be automatically allocated (using -// MODE_YUVA) when decoding starts. All parameters are then ignored. -// Returns NULL if the allocation failed or if a parameter is invalid. -WEBP_EXTERN WebPIDecoder* WebPINewYUVA( - uint8_t* luma, size_t luma_size, int luma_stride, - uint8_t* u, size_t u_size, int u_stride, - uint8_t* v, size_t v_size, int v_stride, - uint8_t* a, size_t a_size, int a_stride); - -// Deprecated version of the above, without the alpha plane. -// Kept for backward compatibility. -WEBP_EXTERN WebPIDecoder* WebPINewYUV( - uint8_t* luma, size_t luma_size, int luma_stride, - uint8_t* u, size_t u_size, int u_stride, - uint8_t* v, size_t v_size, int v_stride); - -// Deletes the WebPIDecoder object and associated memory. Must always be called -// if WebPINewDecoder, WebPINewRGB or WebPINewYUV succeeded. -WEBP_EXTERN void WebPIDelete(WebPIDecoder* idec); - -// Copies and decodes the next available data. Returns VP8_STATUS_OK when -// the image is successfully decoded. Returns VP8_STATUS_SUSPENDED when more -// data is expected. Returns error in other cases. -WEBP_EXTERN VP8StatusCode WebPIAppend( - WebPIDecoder* idec, const uint8_t* data, size_t data_size); - -// A variant of the above function to be used when data buffer contains -// partial data from the beginning. In this case data buffer is not copied -// to the internal memory. -// Note that the value of the 'data' pointer can change between calls to -// WebPIUpdate, for instance when the data buffer is resized to fit larger data. -WEBP_EXTERN VP8StatusCode WebPIUpdate( - WebPIDecoder* idec, const uint8_t* data, size_t data_size); - -// Returns the RGB/A image decoded so far. Returns NULL if output params -// are not initialized yet. The RGB/A output type corresponds to the colorspace -// specified during call to WebPINewDecoder() or WebPINewRGB(). -// *last_y is the index of last decoded row in raster scan order. Some pointers -// (*last_y, *width etc.) can be NULL if corresponding information is not -// needed. The values in these pointers are only valid on successful (non-NULL) -// return. -WEBP_EXTERN uint8_t* WebPIDecGetRGB( - const WebPIDecoder* idec, int* last_y, - int* width, int* height, int* stride); - -// Same as above function to get a YUVA image. Returns pointer to the luma -// plane or NULL in case of error. If there is no alpha information -// the alpha pointer '*a' will be returned NULL. -WEBP_EXTERN uint8_t* WebPIDecGetYUVA( - const WebPIDecoder* idec, int* last_y, - uint8_t** u, uint8_t** v, uint8_t** a, - int* width, int* height, int* stride, int* uv_stride, int* a_stride); - -// Deprecated alpha-less version of WebPIDecGetYUVA(): it will ignore the -// alpha information (if present). Kept for backward compatibility. -static WEBP_INLINE uint8_t* WebPIDecGetYUV( - const WebPIDecoder* idec, int* last_y, uint8_t** u, uint8_t** v, - int* width, int* height, int* stride, int* uv_stride) { - return WebPIDecGetYUVA(idec, last_y, u, v, NULL, width, height, - stride, uv_stride, NULL); -} - -// Generic call to retrieve information about the displayable area. -// If non NULL, the left/right/width/height pointers are filled with the visible -// rectangular area so far. -// Returns NULL in case the incremental decoder object is in an invalid state. -// Otherwise returns the pointer to the internal representation. This structure -// is read-only, tied to WebPIDecoder's lifespan and should not be modified. -WEBP_EXTERN const WebPDecBuffer* WebPIDecodedArea( - const WebPIDecoder* idec, int* left, int* top, int* width, int* height); - -//------------------------------------------------------------------------------ -// Advanced decoding parametrization -// -// Code sample for using the advanced decoding API -/* - // A) Init a configuration object - WebPDecoderConfig config; - CHECK(WebPInitDecoderConfig(&config)); - - // B) optional: retrieve the bitstream's features. - CHECK(WebPGetFeatures(data, data_size, &config.input) == VP8_STATUS_OK); - - // C) Adjust 'config', if needed - config.no_fancy_upsampling = 1; - config.output.colorspace = MODE_BGRA; - // etc. - - // Note that you can also make config.output point to an externally - // supplied memory buffer, provided it's big enough to store the decoded - // picture. Otherwise, config.output will just be used to allocate memory - // and store the decoded picture. - - // D) Decode! - CHECK(WebPDecode(data, data_size, &config) == VP8_STATUS_OK); - - // E) Decoded image is now in config.output (and config.output.u.RGBA) - - // F) Reclaim memory allocated in config's object. It's safe to call - // this function even if the memory is external and wasn't allocated - // by WebPDecode(). - WebPFreeDecBuffer(&config.output); -*/ - -// Features gathered from the bitstream -struct WebPBitstreamFeatures { - int width; // Width in pixels, as read from the bitstream. - int height; // Height in pixels, as read from the bitstream. - int has_alpha; // True if the bitstream contains an alpha channel. - int has_animation; // True if the bitstream is an animation. - int format; // 0 = undefined (/mixed), 1 = lossy, 2 = lossless - - uint32_t pad[5]; // padding for later use -}; - -// Internal, version-checked, entry point -WEBP_EXTERN VP8StatusCode WebPGetFeaturesInternal( - const uint8_t*, size_t, WebPBitstreamFeatures*, int); - -// Retrieve features from the bitstream. The *features structure is filled -// with information gathered from the bitstream. -// Returns VP8_STATUS_OK when the features are successfully retrieved. Returns -// VP8_STATUS_NOT_ENOUGH_DATA when more data is needed to retrieve the -// features from headers. Returns error in other cases. -// Note: The following chunk sequences (before the raw VP8/VP8L data) are -// considered valid by this function: -// RIFF + VP8(L) -// RIFF + VP8X + (optional chunks) + VP8(L) -// ALPH + VP8 <-- Not a valid WebP format: only allowed for internal purpose. -// VP8(L) <-- Not a valid WebP format: only allowed for internal purpose. -static WEBP_INLINE VP8StatusCode WebPGetFeatures( - const uint8_t* data, size_t data_size, - WebPBitstreamFeatures* features) { - return WebPGetFeaturesInternal(data, data_size, features, - WEBP_DECODER_ABI_VERSION); -} - -// Decoding options -struct WebPDecoderOptions { - int bypass_filtering; // if true, skip the in-loop filtering - int no_fancy_upsampling; // if true, use faster pointwise upsampler - int use_cropping; // if true, cropping is applied _first_ - int crop_left, crop_top; // top-left position for cropping. - // Will be snapped to even values. - int crop_width, crop_height; // dimension of the cropping area - int use_scaling; // if true, scaling is applied _afterward_ - int scaled_width, scaled_height; // final resolution - int use_threads; // if true, use multi-threaded decoding - int dithering_strength; // dithering strength (0=Off, 100=full) - int flip; // flip output vertically - int alpha_dithering_strength; // alpha dithering strength in [0..100] - - uint32_t pad[5]; // padding for later use -}; - -// Main object storing the configuration for advanced decoding. -struct WebPDecoderConfig { - WebPBitstreamFeatures input; // Immutable bitstream features (optional) - WebPDecBuffer output; // Output buffer (can point to external mem) - WebPDecoderOptions options; // Decoding options -}; - -// Internal, version-checked, entry point -WEBP_EXTERN int WebPInitDecoderConfigInternal(WebPDecoderConfig*, int); - -// Initialize the configuration as empty. This function must always be -// called first, unless WebPGetFeatures() is to be called. -// Returns false in case of mismatched version. -static WEBP_INLINE int WebPInitDecoderConfig(WebPDecoderConfig* config) { - return WebPInitDecoderConfigInternal(config, WEBP_DECODER_ABI_VERSION); -} - -// Instantiate a new incremental decoder object with the requested -// configuration. The bitstream can be passed using 'data' and 'data_size' -// parameter, in which case the features will be parsed and stored into -// config->input. Otherwise, 'data' can be NULL and no parsing will occur. -// Note that 'config' can be NULL too, in which case a default configuration -// is used. If 'config' is not NULL, it must outlive the WebPIDecoder object -// as some references to its fields will be used. No internal copy of 'config' -// is made. -// The return WebPIDecoder object must always be deleted calling WebPIDelete(). -// Returns NULL in case of error (and config->status will then reflect -// the error condition, if available). -WEBP_EXTERN WebPIDecoder* WebPIDecode(const uint8_t* data, size_t data_size, - WebPDecoderConfig* config); - -// Non-incremental version. This version decodes the full data at once, taking -// 'config' into account. Returns decoding status (which should be VP8_STATUS_OK -// if the decoding was successful). Note that 'config' cannot be NULL. -WEBP_EXTERN VP8StatusCode WebPDecode(const uint8_t* data, size_t data_size, - WebPDecoderConfig* config); - -#ifdef __cplusplus -} // extern "C" -#endif - -#endif // WEBP_WEBP_DECODE_H_ diff --git a/Extended/libwebp/src/webp/demux.h b/Extended/libwebp/src/webp/demux.h deleted file mode 100644 index 1ba3758..0000000 --- a/Extended/libwebp/src/webp/demux.h +++ /dev/null @@ -1,363 +0,0 @@ -// Copyright 2012 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Demux API. -// Enables extraction of image and extended format data from WebP files. - -// Code Example: Demuxing WebP data to extract all the frames, ICC profile -// and EXIF/XMP metadata. -/* - WebPDemuxer* demux = WebPDemux(&webp_data); - - uint32_t width = WebPDemuxGetI(demux, WEBP_FF_CANVAS_WIDTH); - uint32_t height = WebPDemuxGetI(demux, WEBP_FF_CANVAS_HEIGHT); - // ... (Get information about the features present in the WebP file). - uint32_t flags = WebPDemuxGetI(demux, WEBP_FF_FORMAT_FLAGS); - - // ... (Iterate over all frames). - WebPIterator iter; - if (WebPDemuxGetFrame(demux, 1, &iter)) { - do { - // ... (Consume 'iter'; e.g. Decode 'iter.fragment' with WebPDecode(), - // ... and get other frame properties like width, height, offsets etc. - // ... see 'struct WebPIterator' below for more info). - } while (WebPDemuxNextFrame(&iter)); - WebPDemuxReleaseIterator(&iter); - } - - // ... (Extract metadata). - WebPChunkIterator chunk_iter; - if (flags & ICCP_FLAG) WebPDemuxGetChunk(demux, "ICCP", 1, &chunk_iter); - // ... (Consume the ICC profile in 'chunk_iter.chunk'). - WebPDemuxReleaseChunkIterator(&chunk_iter); - if (flags & EXIF_FLAG) WebPDemuxGetChunk(demux, "EXIF", 1, &chunk_iter); - // ... (Consume the EXIF metadata in 'chunk_iter.chunk'). - WebPDemuxReleaseChunkIterator(&chunk_iter); - if (flags & XMP_FLAG) WebPDemuxGetChunk(demux, "XMP ", 1, &chunk_iter); - // ... (Consume the XMP metadata in 'chunk_iter.chunk'). - WebPDemuxReleaseChunkIterator(&chunk_iter); - WebPDemuxDelete(demux); -*/ - -#ifndef WEBP_WEBP_DEMUX_H_ -#define WEBP_WEBP_DEMUX_H_ - -#import // for WEBP_CSP_MODE -#import - -#ifdef __cplusplus -extern "C" { -#endif - -#define WEBP_DEMUX_ABI_VERSION 0x0107 // MAJOR(8b) + MINOR(8b) - -// Note: forward declaring enumerations is not allowed in (strict) C and C++, -// the types are left here for reference. -// typedef enum WebPDemuxState WebPDemuxState; -// typedef enum WebPFormatFeature WebPFormatFeature; -typedef struct WebPDemuxer WebPDemuxer; -typedef struct WebPIterator WebPIterator; -typedef struct WebPChunkIterator WebPChunkIterator; -typedef struct WebPAnimInfo WebPAnimInfo; -typedef struct WebPAnimDecoderOptions WebPAnimDecoderOptions; - -//------------------------------------------------------------------------------ - -// Returns the version number of the demux library, packed in hexadecimal using -// 8bits for each of major/minor/revision. E.g: v2.5.7 is 0x020507. -WEBP_EXTERN int WebPGetDemuxVersion(void); - -//------------------------------------------------------------------------------ -// Life of a Demux object - -typedef enum WebPDemuxState { - WEBP_DEMUX_PARSE_ERROR = -1, // An error occurred while parsing. - WEBP_DEMUX_PARSING_HEADER = 0, // Not enough data to parse full header. - WEBP_DEMUX_PARSED_HEADER = 1, // Header parsing complete, - // data may be available. - WEBP_DEMUX_DONE = 2 // Entire file has been parsed. -} WebPDemuxState; - -// Internal, version-checked, entry point -WEBP_EXTERN WebPDemuxer* WebPDemuxInternal( - const WebPData*, int, WebPDemuxState*, int); - -// Parses the full WebP file given by 'data'. For single images the WebP file -// header alone or the file header and the chunk header may be absent. -// Returns a WebPDemuxer object on successful parse, NULL otherwise. -static WEBP_INLINE WebPDemuxer* WebPDemux(const WebPData* data) { - return WebPDemuxInternal(data, 0, NULL, WEBP_DEMUX_ABI_VERSION); -} - -// Parses the possibly incomplete WebP file given by 'data'. -// If 'state' is non-NULL it will be set to indicate the status of the demuxer. -// Returns NULL in case of error or if there isn't enough data to start parsing; -// and a WebPDemuxer object on successful parse. -// Note that WebPDemuxer keeps internal pointers to 'data' memory segment. -// If this data is volatile, the demuxer object should be deleted (by calling -// WebPDemuxDelete()) and WebPDemuxPartial() called again on the new data. -// This is usually an inexpensive operation. -static WEBP_INLINE WebPDemuxer* WebPDemuxPartial( - const WebPData* data, WebPDemuxState* state) { - return WebPDemuxInternal(data, 1, state, WEBP_DEMUX_ABI_VERSION); -} - -// Frees memory associated with 'dmux'. -WEBP_EXTERN void WebPDemuxDelete(WebPDemuxer* dmux); - -//------------------------------------------------------------------------------ -// Data/information extraction. - -typedef enum WebPFormatFeature { - WEBP_FF_FORMAT_FLAGS, // bit-wise combination of WebPFeatureFlags - // corresponding to the 'VP8X' chunk (if present). - WEBP_FF_CANVAS_WIDTH, - WEBP_FF_CANVAS_HEIGHT, - WEBP_FF_LOOP_COUNT, // only relevant for animated file - WEBP_FF_BACKGROUND_COLOR, // idem. - WEBP_FF_FRAME_COUNT // Number of frames present in the demux object. - // In case of a partial demux, this is the number - // of frames seen so far, with the last frame - // possibly being partial. -} WebPFormatFeature; - -// Get the 'feature' value from the 'dmux'. -// NOTE: values are only valid if WebPDemux() was used or WebPDemuxPartial() -// returned a state > WEBP_DEMUX_PARSING_HEADER. -// If 'feature' is WEBP_FF_FORMAT_FLAGS, the returned value is a bit-wise -// combination of WebPFeatureFlags values. -// If 'feature' is WEBP_FF_LOOP_COUNT, WEBP_FF_BACKGROUND_COLOR, the returned -// value is only meaningful if the bitstream is animated. -WEBP_EXTERN uint32_t WebPDemuxGetI( - const WebPDemuxer* dmux, WebPFormatFeature feature); - -//------------------------------------------------------------------------------ -// Frame iteration. - -struct WebPIterator { - int frame_num; - int num_frames; // equivalent to WEBP_FF_FRAME_COUNT. - int x_offset, y_offset; // offset relative to the canvas. - int width, height; // dimensions of this frame. - int duration; // display duration in milliseconds. - WebPMuxAnimDispose dispose_method; // dispose method for the frame. - int complete; // true if 'fragment' contains a full frame. partial images - // may still be decoded with the WebP incremental decoder. - WebPData fragment; // The frame given by 'frame_num'. Note for historical - // reasons this is called a fragment. - int has_alpha; // True if the frame contains transparency. - WebPMuxAnimBlend blend_method; // Blend operation for the frame. - - uint32_t pad[2]; // padding for later use. - void* private_; // for internal use only. -}; - -// Retrieves frame 'frame_number' from 'dmux'. -// 'iter->fragment' points to the frame on return from this function. -// Setting 'frame_number' equal to 0 will return the last frame of the image. -// Returns false if 'dmux' is NULL or frame 'frame_number' is not present. -// Call WebPDemuxReleaseIterator() when use of the iterator is complete. -// NOTE: 'dmux' must persist for the lifetime of 'iter'. -WEBP_EXTERN int WebPDemuxGetFrame( - const WebPDemuxer* dmux, int frame_number, WebPIterator* iter); - -// Sets 'iter->fragment' to point to the next ('iter->frame_num' + 1) or -// previous ('iter->frame_num' - 1) frame. These functions do not loop. -// Returns true on success, false otherwise. -WEBP_EXTERN int WebPDemuxNextFrame(WebPIterator* iter); -WEBP_EXTERN int WebPDemuxPrevFrame(WebPIterator* iter); - -// Releases any memory associated with 'iter'. -// Must be called before any subsequent calls to WebPDemuxGetChunk() on the same -// iter. Also, must be called before destroying the associated WebPDemuxer with -// WebPDemuxDelete(). -WEBP_EXTERN void WebPDemuxReleaseIterator(WebPIterator* iter); - -//------------------------------------------------------------------------------ -// Chunk iteration. - -struct WebPChunkIterator { - // The current and total number of chunks with the fourcc given to - // WebPDemuxGetChunk(). - int chunk_num; - int num_chunks; - WebPData chunk; // The payload of the chunk. - - uint32_t pad[6]; // padding for later use - void* private_; -}; - -// Retrieves the 'chunk_number' instance of the chunk with id 'fourcc' from -// 'dmux'. -// 'fourcc' is a character array containing the fourcc of the chunk to return, -// e.g., "ICCP", "XMP ", "EXIF", etc. -// Setting 'chunk_number' equal to 0 will return the last chunk in a set. -// Returns true if the chunk is found, false otherwise. Image related chunk -// payloads are accessed through WebPDemuxGetFrame() and related functions. -// Call WebPDemuxReleaseChunkIterator() when use of the iterator is complete. -// NOTE: 'dmux' must persist for the lifetime of the iterator. -WEBP_EXTERN int WebPDemuxGetChunk(const WebPDemuxer* dmux, - const char fourcc[4], int chunk_number, - WebPChunkIterator* iter); - -// Sets 'iter->chunk' to point to the next ('iter->chunk_num' + 1) or previous -// ('iter->chunk_num' - 1) chunk. These functions do not loop. -// Returns true on success, false otherwise. -WEBP_EXTERN int WebPDemuxNextChunk(WebPChunkIterator* iter); -WEBP_EXTERN int WebPDemuxPrevChunk(WebPChunkIterator* iter); - -// Releases any memory associated with 'iter'. -// Must be called before destroying the associated WebPDemuxer with -// WebPDemuxDelete(). -WEBP_EXTERN void WebPDemuxReleaseChunkIterator(WebPChunkIterator* iter); - -//------------------------------------------------------------------------------ -// WebPAnimDecoder API -// -// This API allows decoding (possibly) animated WebP images. -// -// Code Example: -/* - WebPAnimDecoderOptions dec_options; - WebPAnimDecoderOptionsInit(&dec_options); - // Tune 'dec_options' as needed. - WebPAnimDecoder* dec = WebPAnimDecoderNew(webp_data, &dec_options); - WebPAnimInfo anim_info; - WebPAnimDecoderGetInfo(dec, &anim_info); - for (uint32_t i = 0; i < anim_info.loop_count; ++i) { - while (WebPAnimDecoderHasMoreFrames(dec)) { - uint8_t* buf; - int timestamp; - WebPAnimDecoderGetNext(dec, &buf, ×tamp); - // ... (Render 'buf' based on 'timestamp'). - // ... (Do NOT free 'buf', as it is owned by 'dec'). - } - WebPAnimDecoderReset(dec); - } - const WebPDemuxer* demuxer = WebPAnimDecoderGetDemuxer(dec); - // ... (Do something using 'demuxer'; e.g. get EXIF/XMP/ICC data). - WebPAnimDecoderDelete(dec); -*/ - -typedef struct WebPAnimDecoder WebPAnimDecoder; // Main opaque object. - -// Global options. -struct WebPAnimDecoderOptions { - // Output colorspace. Only the following modes are supported: - // MODE_RGBA, MODE_BGRA, MODE_rgbA and MODE_bgrA. - WEBP_CSP_MODE color_mode; - int use_threads; // If true, use multi-threaded decoding. - uint32_t padding[7]; // Padding for later use. -}; - -// Internal, version-checked, entry point. -WEBP_EXTERN int WebPAnimDecoderOptionsInitInternal( - WebPAnimDecoderOptions*, int); - -// Should always be called, to initialize a fresh WebPAnimDecoderOptions -// structure before modification. Returns false in case of version mismatch. -// WebPAnimDecoderOptionsInit() must have succeeded before using the -// 'dec_options' object. -static WEBP_INLINE int WebPAnimDecoderOptionsInit( - WebPAnimDecoderOptions* dec_options) { - return WebPAnimDecoderOptionsInitInternal(dec_options, - WEBP_DEMUX_ABI_VERSION); -} - -// Internal, version-checked, entry point. -WEBP_EXTERN WebPAnimDecoder* WebPAnimDecoderNewInternal( - const WebPData*, const WebPAnimDecoderOptions*, int); - -// Creates and initializes a WebPAnimDecoder object. -// Parameters: -// webp_data - (in) WebP bitstream. This should remain unchanged during the -// lifetime of the output WebPAnimDecoder object. -// dec_options - (in) decoding options. Can be passed NULL to choose -// reasonable defaults (in particular, color mode MODE_RGBA -// will be picked). -// Returns: -// A pointer to the newly created WebPAnimDecoder object, or NULL in case of -// parsing error, invalid option or memory error. -static WEBP_INLINE WebPAnimDecoder* WebPAnimDecoderNew( - const WebPData* webp_data, const WebPAnimDecoderOptions* dec_options) { - return WebPAnimDecoderNewInternal(webp_data, dec_options, - WEBP_DEMUX_ABI_VERSION); -} - -// Global information about the animation.. -struct WebPAnimInfo { - uint32_t canvas_width; - uint32_t canvas_height; - uint32_t loop_count; - uint32_t bgcolor; - uint32_t frame_count; - uint32_t pad[4]; // padding for later use -}; - -// Get global information about the animation. -// Parameters: -// dec - (in) decoder instance to get information from. -// info - (out) global information fetched from the animation. -// Returns: -// True on success. -WEBP_EXTERN int WebPAnimDecoderGetInfo(const WebPAnimDecoder* dec, - WebPAnimInfo* info); - -// Fetch the next frame from 'dec' based on options supplied to -// WebPAnimDecoderNew(). This will be a fully reconstructed canvas of size -// 'canvas_width * 4 * canvas_height', and not just the frame sub-rectangle. The -// returned buffer 'buf' is valid only until the next call to -// WebPAnimDecoderGetNext(), WebPAnimDecoderReset() or WebPAnimDecoderDelete(). -// Parameters: -// dec - (in/out) decoder instance from which the next frame is to be fetched. -// buf - (out) decoded frame. -// timestamp - (out) timestamp of the frame in milliseconds. -// Returns: -// False if any of the arguments are NULL, or if there is a parsing or -// decoding error, or if there are no more frames. Otherwise, returns true. -WEBP_EXTERN int WebPAnimDecoderGetNext(WebPAnimDecoder* dec, - uint8_t** buf, int* timestamp); - -// Check if there are more frames left to decode. -// Parameters: -// dec - (in) decoder instance to be checked. -// Returns: -// True if 'dec' is not NULL and some frames are yet to be decoded. -// Otherwise, returns false. -WEBP_EXTERN int WebPAnimDecoderHasMoreFrames(const WebPAnimDecoder* dec); - -// Resets the WebPAnimDecoder object, so that next call to -// WebPAnimDecoderGetNext() will restart decoding from 1st frame. This would be -// helpful when all frames need to be decoded multiple times (e.g. -// info.loop_count times) without destroying and recreating the 'dec' object. -// Parameters: -// dec - (in/out) decoder instance to be reset -WEBP_EXTERN void WebPAnimDecoderReset(WebPAnimDecoder* dec); - -// Grab the internal demuxer object. -// Getting the demuxer object can be useful if one wants to use operations only -// available through demuxer; e.g. to get XMP/EXIF/ICC metadata. The returned -// demuxer object is owned by 'dec' and is valid only until the next call to -// WebPAnimDecoderDelete(). -// -// Parameters: -// dec - (in) decoder instance from which the demuxer object is to be fetched. -WEBP_EXTERN const WebPDemuxer* WebPAnimDecoderGetDemuxer( - const WebPAnimDecoder* dec); - -// Deletes the WebPAnimDecoder object. -// Parameters: -// dec - (in/out) decoder instance to be deleted -WEBP_EXTERN void WebPAnimDecoderDelete(WebPAnimDecoder* dec); - -#ifdef __cplusplus -} // extern "C" -#endif - -#endif // WEBP_WEBP_DEMUX_H_ diff --git a/Extended/libwebp/src/webp/encode.h b/Extended/libwebp/src/webp/encode.h deleted file mode 100644 index 3990a4a..0000000 --- a/Extended/libwebp/src/webp/encode.h +++ /dev/null @@ -1,546 +0,0 @@ -// Copyright 2011 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// WebP encoder: main interface -// -// Author: Skal (pascal.massimino@gmail.com) - -#ifndef WEBP_WEBP_ENCODE_H_ -#define WEBP_WEBP_ENCODE_H_ - -#import - -#ifdef __cplusplus -extern "C" { -#endif - -#define WEBP_ENCODER_ABI_VERSION 0x020f // MAJOR(8b) + MINOR(8b) - -// Note: forward declaring enumerations is not allowed in (strict) C and C++, -// the types are left here for reference. -// typedef enum WebPImageHint WebPImageHint; -// typedef enum WebPEncCSP WebPEncCSP; -// typedef enum WebPPreset WebPPreset; -// typedef enum WebPEncodingError WebPEncodingError; -typedef struct WebPConfig WebPConfig; -typedef struct WebPPicture WebPPicture; // main structure for I/O -typedef struct WebPAuxStats WebPAuxStats; -typedef struct WebPMemoryWriter WebPMemoryWriter; - -// Return the encoder's version number, packed in hexadecimal using 8bits for -// each of major/minor/revision. E.g: v2.5.7 is 0x020507. -WEBP_EXTERN int WebPGetEncoderVersion(void); - -//------------------------------------------------------------------------------ -// One-stop-shop call! No questions asked: - -// Returns the size of the compressed data (pointed to by *output), or 0 if -// an error occurred. The compressed data must be released by the caller -// using the call 'WebPFree(*output)'. -// These functions compress using the lossy format, and the quality_factor -// can go from 0 (smaller output, lower quality) to 100 (best quality, -// larger output). -WEBP_EXTERN size_t WebPEncodeRGB(const uint8_t* rgb, - int width, int height, int stride, - float quality_factor, uint8_t** output); -WEBP_EXTERN size_t WebPEncodeBGR(const uint8_t* bgr, - int width, int height, int stride, - float quality_factor, uint8_t** output); -WEBP_EXTERN size_t WebPEncodeRGBA(const uint8_t* rgba, - int width, int height, int stride, - float quality_factor, uint8_t** output); -WEBP_EXTERN size_t WebPEncodeBGRA(const uint8_t* bgra, - int width, int height, int stride, - float quality_factor, uint8_t** output); - -// These functions are the equivalent of the above, but compressing in a -// lossless manner. Files are usually larger than lossy format, but will -// not suffer any compression loss. -// Note these functions, like the lossy versions, use the library's default -// settings. For lossless this means 'exact' is disabled. RGB values in -// transparent areas will be modified to improve compression. To avoid this, -// use WebPEncode() and set WebPConfig::exact to 1. -WEBP_EXTERN size_t WebPEncodeLosslessRGB(const uint8_t* rgb, - int width, int height, int stride, - uint8_t** output); -WEBP_EXTERN size_t WebPEncodeLosslessBGR(const uint8_t* bgr, - int width, int height, int stride, - uint8_t** output); -WEBP_EXTERN size_t WebPEncodeLosslessRGBA(const uint8_t* rgba, - int width, int height, int stride, - uint8_t** output); -WEBP_EXTERN size_t WebPEncodeLosslessBGRA(const uint8_t* bgra, - int width, int height, int stride, - uint8_t** output); - -//------------------------------------------------------------------------------ -// Coding parameters - -// Image characteristics hint for the underlying encoder. -typedef enum WebPImageHint { - WEBP_HINT_DEFAULT = 0, // default preset. - WEBP_HINT_PICTURE, // digital picture, like portrait, inner shot - WEBP_HINT_PHOTO, // outdoor photograph, with natural lighting - WEBP_HINT_GRAPH, // Discrete tone image (graph, map-tile etc). - WEBP_HINT_LAST -} WebPImageHint; - -// Compression parameters. -struct WebPConfig { - int lossless; // Lossless encoding (0=lossy(default), 1=lossless). - float quality; // between 0 and 100. For lossy, 0 gives the smallest - // size and 100 the largest. For lossless, this - // parameter is the amount of effort put into the - // compression: 0 is the fastest but gives larger - // files compared to the slowest, but best, 100. - int method; // quality/speed trade-off (0=fast, 6=slower-better) - - WebPImageHint image_hint; // Hint for image type (lossless only for now). - - int target_size; // if non-zero, set the desired target size in bytes. - // Takes precedence over the 'compression' parameter. - float target_PSNR; // if non-zero, specifies the minimal distortion to - // try to achieve. Takes precedence over target_size. - int segments; // maximum number of segments to use, in [1..4] - int sns_strength; // Spatial Noise Shaping. 0=off, 100=maximum. - int filter_strength; // range: [0 = off .. 100 = strongest] - int filter_sharpness; // range: [0 = off .. 7 = least sharp] - int filter_type; // filtering type: 0 = simple, 1 = strong (only used - // if filter_strength > 0 or autofilter > 0) - int autofilter; // Auto adjust filter's strength [0 = off, 1 = on] - int alpha_compression; // Algorithm for encoding the alpha plane (0 = none, - // 1 = compressed with WebP lossless). Default is 1. - int alpha_filtering; // Predictive filtering method for alpha plane. - // 0: none, 1: fast, 2: best. Default if 1. - int alpha_quality; // Between 0 (smallest size) and 100 (lossless). - // Default is 100. - int pass; // number of entropy-analysis passes (in [1..10]). - - int show_compressed; // if true, export the compressed picture back. - // In-loop filtering is not applied. - int preprocessing; // preprocessing filter: - // 0=none, 1=segment-smooth, 2=pseudo-random dithering - int partitions; // log2(number of token partitions) in [0..3]. Default - // is set to 0 for easier progressive decoding. - int partition_limit; // quality degradation allowed to fit the 512k limit - // on prediction modes coding (0: no degradation, - // 100: maximum possible degradation). - int emulate_jpeg_size; // If true, compression parameters will be remapped - // to better match the expected output size from - // JPEG compression. Generally, the output size will - // be similar but the degradation will be lower. - int thread_level; // If non-zero, try and use multi-threaded encoding. - int low_memory; // If set, reduce memory usage (but increase CPU use). - - int near_lossless; // Near lossless encoding [0 = max loss .. 100 = off - // (default)]. - int exact; // if non-zero, preserve the exact RGB values under - // transparent area. Otherwise, discard this invisible - // RGB information for better compression. The default - // value is 0. - - int use_delta_palette; // reserved for future lossless feature - int use_sharp_yuv; // if needed, use sharp (and slow) RGB->YUV conversion - - uint32_t pad[2]; // padding for later use -}; - -// Enumerate some predefined settings for WebPConfig, depending on the type -// of source picture. These presets are used when calling WebPConfigPreset(). -typedef enum WebPPreset { - WEBP_PRESET_DEFAULT = 0, // default preset. - WEBP_PRESET_PICTURE, // digital picture, like portrait, inner shot - WEBP_PRESET_PHOTO, // outdoor photograph, with natural lighting - WEBP_PRESET_DRAWING, // hand or line drawing, with high-contrast details - WEBP_PRESET_ICON, // small-sized colorful images - WEBP_PRESET_TEXT // text-like -} WebPPreset; - -// Internal, version-checked, entry point -WEBP_EXTERN int WebPConfigInitInternal(WebPConfig*, WebPPreset, float, int); - -// Should always be called, to initialize a fresh WebPConfig structure before -// modification. Returns false in case of version mismatch. WebPConfigInit() -// must have succeeded before using the 'config' object. -// Note that the default values are lossless=0 and quality=75. -static WEBP_INLINE int WebPConfigInit(WebPConfig* config) { - return WebPConfigInitInternal(config, WEBP_PRESET_DEFAULT, 75.f, - WEBP_ENCODER_ABI_VERSION); -} - -// This function will initialize the configuration according to a predefined -// set of parameters (referred to by 'preset') and a given quality factor. -// This function can be called as a replacement to WebPConfigInit(). Will -// return false in case of error. -static WEBP_INLINE int WebPConfigPreset(WebPConfig* config, - WebPPreset preset, float quality) { - return WebPConfigInitInternal(config, preset, quality, - WEBP_ENCODER_ABI_VERSION); -} - -// Activate the lossless compression mode with the desired efficiency level -// between 0 (fastest, lowest compression) and 9 (slower, best compression). -// A good default level is '6', providing a fair tradeoff between compression -// speed and final compressed size. -// This function will overwrite several fields from config: 'method', 'quality' -// and 'lossless'. Returns false in case of parameter error. -WEBP_EXTERN int WebPConfigLosslessPreset(WebPConfig* config, int level); - -// Returns true if 'config' is non-NULL and all configuration parameters are -// within their valid ranges. -WEBP_EXTERN int WebPValidateConfig(const WebPConfig* config); - -//------------------------------------------------------------------------------ -// Input / Output -// Structure for storing auxiliary statistics. - -struct WebPAuxStats { - int coded_size; // final size - - float PSNR[5]; // peak-signal-to-noise ratio for Y/U/V/All/Alpha - int block_count[3]; // number of intra4/intra16/skipped macroblocks - int header_bytes[2]; // approximate number of bytes spent for header - // and mode-partition #0 - int residual_bytes[3][4]; // approximate number of bytes spent for - // DC/AC/uv coefficients for each (0..3) segments. - int segment_size[4]; // number of macroblocks in each segments - int segment_quant[4]; // quantizer values for each segments - int segment_level[4]; // filtering strength for each segments [0..63] - - int alpha_data_size; // size of the transparency data - int layer_data_size; // size of the enhancement layer data - - // lossless encoder statistics - uint32_t lossless_features; // bit0:predictor bit1:cross-color transform - // bit2:subtract-green bit3:color indexing - int histogram_bits; // number of precision bits of histogram - int transform_bits; // precision bits for transform - int cache_bits; // number of bits for color cache lookup - int palette_size; // number of color in palette, if used - int lossless_size; // final lossless size - int lossless_hdr_size; // lossless header (transform, huffman etc) size - int lossless_data_size; // lossless image data size - - uint32_t pad[2]; // padding for later use -}; - -// Signature for output function. Should return true if writing was successful. -// data/data_size is the segment of data to write, and 'picture' is for -// reference (and so one can make use of picture->custom_ptr). -typedef int (*WebPWriterFunction)(const uint8_t* data, size_t data_size, - const WebPPicture* picture); - -// WebPMemoryWrite: a special WebPWriterFunction that writes to memory using -// the following WebPMemoryWriter object (to be set as a custom_ptr). -struct WebPMemoryWriter { - uint8_t* mem; // final buffer (of size 'max_size', larger than 'size'). - size_t size; // final size - size_t max_size; // total capacity - uint32_t pad[1]; // padding for later use -}; - -// The following must be called first before any use. -WEBP_EXTERN void WebPMemoryWriterInit(WebPMemoryWriter* writer); - -// The following must be called to deallocate writer->mem memory. The 'writer' -// object itself is not deallocated. -WEBP_EXTERN void WebPMemoryWriterClear(WebPMemoryWriter* writer); -// The custom writer to be used with WebPMemoryWriter as custom_ptr. Upon -// completion, writer.mem and writer.size will hold the coded data. -// writer.mem must be freed by calling WebPMemoryWriterClear. -WEBP_EXTERN int WebPMemoryWrite(const uint8_t* data, size_t data_size, - const WebPPicture* picture); - -// Progress hook, called from time to time to report progress. It can return -// false to request an abort of the encoding process, or true otherwise if -// everything is OK. -typedef int (*WebPProgressHook)(int percent, const WebPPicture* picture); - -// Color spaces. -typedef enum WebPEncCSP { - // chroma sampling - WEBP_YUV420 = 0, // 4:2:0 - WEBP_YUV420A = 4, // alpha channel variant - WEBP_CSP_UV_MASK = 3, // bit-mask to get the UV sampling factors - WEBP_CSP_ALPHA_BIT = 4 // bit that is set if alpha is present -} WebPEncCSP; - -// Encoding error conditions. -typedef enum WebPEncodingError { - VP8_ENC_OK = 0, - VP8_ENC_ERROR_OUT_OF_MEMORY, // memory error allocating objects - VP8_ENC_ERROR_BITSTREAM_OUT_OF_MEMORY, // memory error while flushing bits - VP8_ENC_ERROR_NULL_PARAMETER, // a pointer parameter is NULL - VP8_ENC_ERROR_INVALID_CONFIGURATION, // configuration is invalid - VP8_ENC_ERROR_BAD_DIMENSION, // picture has invalid width/height - VP8_ENC_ERROR_PARTITION0_OVERFLOW, // partition is bigger than 512k - VP8_ENC_ERROR_PARTITION_OVERFLOW, // partition is bigger than 16M - VP8_ENC_ERROR_BAD_WRITE, // error while flushing bytes - VP8_ENC_ERROR_FILE_TOO_BIG, // file is bigger than 4G - VP8_ENC_ERROR_USER_ABORT, // abort request by user - VP8_ENC_ERROR_LAST // list terminator. always last. -} WebPEncodingError; - -// maximum width/height allowed (inclusive), in pixels -#define WEBP_MAX_DIMENSION 16383 - -// Main exchange structure (input samples, output bytes, statistics) -struct WebPPicture { - // INPUT - ////////////// - // Main flag for encoder selecting between ARGB or YUV input. - // It is recommended to use ARGB input (*argb, argb_stride) for lossless - // compression, and YUV input (*y, *u, *v, etc.) for lossy compression - // since these are the respective native colorspace for these formats. - int use_argb; - - // YUV input (mostly used for input to lossy compression) - WebPEncCSP colorspace; // colorspace: should be YUV420 for now (=Y'CbCr). - int width, height; // dimensions (less or equal to WEBP_MAX_DIMENSION) - uint8_t* y, *u, *v; // pointers to luma/chroma planes. - int y_stride, uv_stride; // luma/chroma strides. - uint8_t* a; // pointer to the alpha plane - int a_stride; // stride of the alpha plane - uint32_t pad1[2]; // padding for later use - - // ARGB input (mostly used for input to lossless compression) - uint32_t* argb; // Pointer to argb (32 bit) plane. - int argb_stride; // This is stride in pixels units, not bytes. - uint32_t pad2[3]; // padding for later use - - // OUTPUT - /////////////// - // Byte-emission hook, to store compressed bytes as they are ready. - WebPWriterFunction writer; // can be NULL - void* custom_ptr; // can be used by the writer. - - // map for extra information (only for lossy compression mode) - int extra_info_type; // 1: intra type, 2: segment, 3: quant - // 4: intra-16 prediction mode, - // 5: chroma prediction mode, - // 6: bit cost, 7: distortion - uint8_t* extra_info; // if not NULL, points to an array of size - // ((width + 15) / 16) * ((height + 15) / 16) that - // will be filled with a macroblock map, depending - // on extra_info_type. - - // STATS AND REPORTS - /////////////////////////// - // Pointer to side statistics (updated only if not NULL) - WebPAuxStats* stats; - - // Error code for the latest error encountered during encoding - WebPEncodingError error_code; - - // If not NULL, report progress during encoding. - WebPProgressHook progress_hook; - - void* user_data; // this field is free to be set to any value and - // used during callbacks (like progress-report e.g.). - - uint32_t pad3[3]; // padding for later use - - // Unused for now - uint8_t* pad4, *pad5; - uint32_t pad6[8]; // padding for later use - - // PRIVATE FIELDS - //////////////////// - void* memory_; // row chunk of memory for yuva planes - void* memory_argb_; // and for argb too. - void* pad7[2]; // padding for later use -}; - -// Internal, version-checked, entry point -WEBP_EXTERN int WebPPictureInitInternal(WebPPicture*, int); - -// Should always be called, to initialize the structure. Returns false in case -// of version mismatch. WebPPictureInit() must have succeeded before using the -// 'picture' object. -// Note that, by default, use_argb is false and colorspace is WEBP_YUV420. -static WEBP_INLINE int WebPPictureInit(WebPPicture* picture) { - return WebPPictureInitInternal(picture, WEBP_ENCODER_ABI_VERSION); -} - -//------------------------------------------------------------------------------ -// WebPPicture utils - -// Convenience allocation / deallocation based on picture->width/height: -// Allocate y/u/v buffers as per colorspace/width/height specification. -// Note! This function will free the previous buffer if needed. -// Returns false in case of memory error. -WEBP_EXTERN int WebPPictureAlloc(WebPPicture* picture); - -// Release the memory allocated by WebPPictureAlloc() or WebPPictureImport*(). -// Note that this function does _not_ free the memory used by the 'picture' -// object itself. -// Besides memory (which is reclaimed) all other fields of 'picture' are -// preserved. -WEBP_EXTERN void WebPPictureFree(WebPPicture* picture); - -// Copy the pixels of *src into *dst, using WebPPictureAlloc. Upon return, *dst -// will fully own the copied pixels (this is not a view). The 'dst' picture need -// not be initialized as its content is overwritten. -// Returns false in case of memory allocation error. -WEBP_EXTERN int WebPPictureCopy(const WebPPicture* src, WebPPicture* dst); - -// Compute the single distortion for packed planes of samples. -// 'src' will be compared to 'ref', and the raw distortion stored into -// '*distortion'. The refined metric (log(MSE), log(1 - ssim),...' will be -// stored in '*result'. -// 'x_step' is the horizontal stride (in bytes) between samples. -// 'src/ref_stride' is the byte distance between rows. -// Returns false in case of error (bad parameter, memory allocation error, ...). -WEBP_EXTERN int WebPPlaneDistortion(const uint8_t* src, size_t src_stride, - const uint8_t* ref, size_t ref_stride, - int width, int height, - size_t x_step, - int type, // 0 = PSNR, 1 = SSIM, 2 = LSIM - float* distortion, float* result); - -// Compute PSNR, SSIM or LSIM distortion metric between two pictures. Results -// are in dB, stored in result[] in the B/G/R/A/All order. The distortion is -// always performed using ARGB samples. Hence if the input is YUV(A), the -// picture will be internally converted to ARGB (just for the measurement). -// Warning: this function is rather CPU-intensive. -WEBP_EXTERN int WebPPictureDistortion( - const WebPPicture* src, const WebPPicture* ref, - int metric_type, // 0 = PSNR, 1 = SSIM, 2 = LSIM - float result[5]); - -// self-crops a picture to the rectangle defined by top/left/width/height. -// Returns false in case of memory allocation error, or if the rectangle is -// outside of the source picture. -// The rectangle for the view is defined by the top-left corner pixel -// coordinates (left, top) as well as its width and height. This rectangle -// must be fully be comprised inside the 'src' source picture. If the source -// picture uses the YUV420 colorspace, the top and left coordinates will be -// snapped to even values. -WEBP_EXTERN int WebPPictureCrop(WebPPicture* picture, - int left, int top, int width, int height); - -// Extracts a view from 'src' picture into 'dst'. The rectangle for the view -// is defined by the top-left corner pixel coordinates (left, top) as well -// as its width and height. This rectangle must be fully be comprised inside -// the 'src' source picture. If the source picture uses the YUV420 colorspace, -// the top and left coordinates will be snapped to even values. -// Picture 'src' must out-live 'dst' picture. Self-extraction of view is allowed -// ('src' equal to 'dst') as a mean of fast-cropping (but note that doing so, -// the original dimension will be lost). Picture 'dst' need not be initialized -// with WebPPictureInit() if it is different from 'src', since its content will -// be overwritten. -// Returns false in case of memory allocation error or invalid parameters. -WEBP_EXTERN int WebPPictureView(const WebPPicture* src, - int left, int top, int width, int height, - WebPPicture* dst); - -// Returns true if the 'picture' is actually a view and therefore does -// not own the memory for pixels. -WEBP_EXTERN int WebPPictureIsView(const WebPPicture* picture); - -// Rescale a picture to new dimension width x height. -// If either 'width' or 'height' (but not both) is 0 the corresponding -// dimension will be calculated preserving the aspect ratio. -// No gamma correction is applied. -// Returns false in case of error (invalid parameter or insufficient memory). -WEBP_EXTERN int WebPPictureRescale(WebPPicture* pic, int width, int height); - -// Colorspace conversion function to import RGB samples. -// Previous buffer will be free'd, if any. -// *rgb buffer should have a size of at least height * rgb_stride. -// Returns false in case of memory error. -WEBP_EXTERN int WebPPictureImportRGB( - WebPPicture* picture, const uint8_t* rgb, int rgb_stride); -// Same, but for RGBA buffer. -WEBP_EXTERN int WebPPictureImportRGBA( - WebPPicture* picture, const uint8_t* rgba, int rgba_stride); -// Same, but for RGBA buffer. Imports the RGB direct from the 32-bit format -// input buffer ignoring the alpha channel. Avoids needing to copy the data -// to a temporary 24-bit RGB buffer to import the RGB only. -WEBP_EXTERN int WebPPictureImportRGBX( - WebPPicture* picture, const uint8_t* rgbx, int rgbx_stride); - -// Variants of the above, but taking BGR(A|X) input. -WEBP_EXTERN int WebPPictureImportBGR( - WebPPicture* picture, const uint8_t* bgr, int bgr_stride); -WEBP_EXTERN int WebPPictureImportBGRA( - WebPPicture* picture, const uint8_t* bgra, int bgra_stride); -WEBP_EXTERN int WebPPictureImportBGRX( - WebPPicture* picture, const uint8_t* bgrx, int bgrx_stride); - -// Converts picture->argb data to the YUV420A format. The 'colorspace' -// parameter is deprecated and should be equal to WEBP_YUV420. -// Upon return, picture->use_argb is set to false. The presence of real -// non-opaque transparent values is detected, and 'colorspace' will be -// adjusted accordingly. Note that this method is lossy. -// Returns false in case of error. -WEBP_EXTERN int WebPPictureARGBToYUVA(WebPPicture* picture, - WebPEncCSP /*colorspace = WEBP_YUV420*/); - -// Same as WebPPictureARGBToYUVA(), but the conversion is done using -// pseudo-random dithering with a strength 'dithering' between -// 0.0 (no dithering) and 1.0 (maximum dithering). This is useful -// for photographic picture. -WEBP_EXTERN int WebPPictureARGBToYUVADithered( - WebPPicture* picture, WebPEncCSP colorspace, float dithering); - -// Performs 'sharp' RGBA->YUVA420 downsampling and colorspace conversion. -// Downsampling is handled with extra care in case of color clipping. This -// method is roughly 2x slower than WebPPictureARGBToYUVA() but produces better -// and sharper YUV representation. -// Returns false in case of error. -WEBP_EXTERN int WebPPictureSharpARGBToYUVA(WebPPicture* picture); -// kept for backward compatibility: -WEBP_EXTERN int WebPPictureSmartARGBToYUVA(WebPPicture* picture); - -// Converts picture->yuv to picture->argb and sets picture->use_argb to true. -// The input format must be YUV_420 or YUV_420A. The conversion from YUV420 to -// ARGB incurs a small loss too. -// Note that the use of this colorspace is discouraged if one has access to the -// raw ARGB samples, since using YUV420 is comparatively lossy. -// Returns false in case of error. -WEBP_EXTERN int WebPPictureYUVAToARGB(WebPPicture* picture); - -// Helper function: given a width x height plane of RGBA or YUV(A) samples -// clean-up or smoothen the YUV or RGB samples under fully transparent area, -// to help compressibility (no guarantee, though). -WEBP_EXTERN void WebPCleanupTransparentArea(WebPPicture* picture); - -// Scan the picture 'picture' for the presence of non fully opaque alpha values. -// Returns true in such case. Otherwise returns false (indicating that the -// alpha plane can be ignored altogether e.g.). -WEBP_EXTERN int WebPPictureHasTransparency(const WebPPicture* picture); - -// Remove the transparency information (if present) by blending the color with -// the background color 'background_rgb' (specified as 24bit RGB triplet). -// After this call, all alpha values are reset to 0xff. -WEBP_EXTERN void WebPBlendAlpha(WebPPicture* pic, uint32_t background_rgb); - -//------------------------------------------------------------------------------ -// Main call - -// Main encoding call, after config and picture have been initialized. -// 'picture' must be less than 16384x16384 in dimension (cf WEBP_MAX_DIMENSION), -// and the 'config' object must be a valid one. -// Returns false in case of error, true otherwise. -// In case of error, picture->error_code is updated accordingly. -// 'picture' can hold the source samples in both YUV(A) or ARGB input, depending -// on the value of 'picture->use_argb'. It is highly recommended to use -// the former for lossy encoding, and the latter for lossless encoding -// (when config.lossless is true). Automatic conversion from one format to -// another is provided but they both incur some loss. -WEBP_EXTERN int WebPEncode(const WebPConfig* config, WebPPicture* picture); - -//------------------------------------------------------------------------------ - -#ifdef __cplusplus -} // extern "C" -#endif - -#endif // WEBP_WEBP_ENCODE_H_ diff --git a/Extended/libwebp/src/webp/format_constants.h b/Extended/libwebp/src/webp/format_constants.h deleted file mode 100644 index eca6981..0000000 --- a/Extended/libwebp/src/webp/format_constants.h +++ /dev/null @@ -1,87 +0,0 @@ -// Copyright 2012 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Internal header for constants related to WebP file format. -// -// Author: Urvang (urvang@google.com) - -#ifndef WEBP_WEBP_FORMAT_CONSTANTS_H_ -#define WEBP_WEBP_FORMAT_CONSTANTS_H_ - -// Create fourcc of the chunk from the chunk tag characters. -#define MKFOURCC(a, b, c, d) ((a) | (b) << 8 | (c) << 16 | (uint32_t)(d) << 24) - -// VP8 related constants. -#define VP8_SIGNATURE 0x9d012a // Signature in VP8 data. -#define VP8_MAX_PARTITION0_SIZE (1 << 19) // max size of mode partition -#define VP8_MAX_PARTITION_SIZE (1 << 24) // max size for token partition -#define VP8_FRAME_HEADER_SIZE 10 // Size of the frame header within VP8 data. - -// VP8L related constants. -#define VP8L_SIGNATURE_SIZE 1 // VP8L signature size. -#define VP8L_MAGIC_BYTE 0x2f // VP8L signature byte. -#define VP8L_IMAGE_SIZE_BITS 14 // Number of bits used to store - // width and height. -#define VP8L_VERSION_BITS 3 // 3 bits reserved for version. -#define VP8L_VERSION 0 // version 0 -#define VP8L_FRAME_HEADER_SIZE 5 // Size of the VP8L frame header. - -#define MAX_PALETTE_SIZE 256 -#define MAX_CACHE_BITS 11 -#define HUFFMAN_CODES_PER_META_CODE 5 -#define ARGB_BLACK 0xff000000 - -#define DEFAULT_CODE_LENGTH 8 -#define MAX_ALLOWED_CODE_LENGTH 15 - -#define NUM_LITERAL_CODES 256 -#define NUM_LENGTH_CODES 24 -#define NUM_DISTANCE_CODES 40 -#define CODE_LENGTH_CODES 19 - -#define MIN_HUFFMAN_BITS 2 // min number of Huffman bits -#define MAX_HUFFMAN_BITS 9 // max number of Huffman bits - -#define TRANSFORM_PRESENT 1 // The bit to be written when next data - // to be read is a transform. -#define NUM_TRANSFORMS 4 // Maximum number of allowed transform - // in a bitstream. -typedef enum { - PREDICTOR_TRANSFORM = 0, - CROSS_COLOR_TRANSFORM = 1, - SUBTRACT_GREEN = 2, - COLOR_INDEXING_TRANSFORM = 3 -} VP8LImageTransformType; - -// Alpha related constants. -#define ALPHA_HEADER_LEN 1 -#define ALPHA_NO_COMPRESSION 0 -#define ALPHA_LOSSLESS_COMPRESSION 1 -#define ALPHA_PREPROCESSED_LEVELS 1 - -// Mux related constants. -#define TAG_SIZE 4 // Size of a chunk tag (e.g. "VP8L"). -#define CHUNK_SIZE_BYTES 4 // Size needed to store chunk's size. -#define CHUNK_HEADER_SIZE 8 // Size of a chunk header. -#define RIFF_HEADER_SIZE 12 // Size of the RIFF header ("RIFFnnnnWEBP"). -#define ANMF_CHUNK_SIZE 16 // Size of an ANMF chunk. -#define ANIM_CHUNK_SIZE 6 // Size of an ANIM chunk. -#define VP8X_CHUNK_SIZE 10 // Size of a VP8X chunk. - -#define MAX_CANVAS_SIZE (1 << 24) // 24-bit max for VP8X width/height. -#define MAX_IMAGE_AREA (1ULL << 32) // 32-bit max for width x height. -#define MAX_LOOP_COUNT (1 << 16) // maximum value for loop-count -#define MAX_DURATION (1 << 24) // maximum duration -#define MAX_POSITION_OFFSET (1 << 24) // maximum frame x/y offset - -// Maximum chunk payload is such that adding the header and padding won't -// overflow a uint32_t. -#define MAX_CHUNK_PAYLOAD (~0U - CHUNK_HEADER_SIZE - 1) - -#endif // WEBP_WEBP_FORMAT_CONSTANTS_H_ diff --git a/Extended/libwebp/src/webp/mux.h b/Extended/libwebp/src/webp/mux.h deleted file mode 100644 index cdebb87..0000000 --- a/Extended/libwebp/src/webp/mux.h +++ /dev/null @@ -1,530 +0,0 @@ -// Copyright 2011 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// RIFF container manipulation and encoding for WebP images. -// -// Authors: Urvang (urvang@google.com) -// Vikas (vikasa@google.com) - -#ifndef WEBP_WEBP_MUX_H_ -#define WEBP_WEBP_MUX_H_ - -#import - -#ifdef __cplusplus -extern "C" { -#endif - -#define WEBP_MUX_ABI_VERSION 0x0108 // MAJOR(8b) + MINOR(8b) - -//------------------------------------------------------------------------------ -// Mux API -// -// This API allows manipulation of WebP container images containing features -// like color profile, metadata, animation. -// -// Code Example#1: Create a WebPMux object with image data, color profile and -// XMP metadata. -/* - int copy_data = 0; - WebPMux* mux = WebPMuxNew(); - // ... (Prepare image data). - WebPMuxSetImage(mux, &image, copy_data); - // ... (Prepare ICCP color profile data). - WebPMuxSetChunk(mux, "ICCP", &icc_profile, copy_data); - // ... (Prepare XMP metadata). - WebPMuxSetChunk(mux, "XMP ", &xmp, copy_data); - // Get data from mux in WebP RIFF format. - WebPMuxAssemble(mux, &output_data); - WebPMuxDelete(mux); - // ... (Consume output_data; e.g. write output_data.bytes to file). - WebPDataClear(&output_data); -*/ - -// Code Example#2: Get image and color profile data from a WebP file. -/* - int copy_data = 0; - // ... (Read data from file). - WebPMux* mux = WebPMuxCreate(&data, copy_data); - WebPMuxGetFrame(mux, 1, &image); - // ... (Consume image; e.g. call WebPDecode() to decode the data). - WebPMuxGetChunk(mux, "ICCP", &icc_profile); - // ... (Consume icc_data). - WebPMuxDelete(mux); - WebPFree(data); -*/ - -// Note: forward declaring enumerations is not allowed in (strict) C and C++, -// the types are left here for reference. -// typedef enum WebPMuxError WebPMuxError; -// typedef enum WebPChunkId WebPChunkId; -typedef struct WebPMux WebPMux; // main opaque object. -typedef struct WebPMuxFrameInfo WebPMuxFrameInfo; -typedef struct WebPMuxAnimParams WebPMuxAnimParams; -typedef struct WebPAnimEncoderOptions WebPAnimEncoderOptions; - -// Error codes -typedef enum WebPMuxError { - WEBP_MUX_OK = 1, - WEBP_MUX_NOT_FOUND = 0, - WEBP_MUX_INVALID_ARGUMENT = -1, - WEBP_MUX_BAD_DATA = -2, - WEBP_MUX_MEMORY_ERROR = -3, - WEBP_MUX_NOT_ENOUGH_DATA = -4 -} WebPMuxError; - -// IDs for different types of chunks. -typedef enum WebPChunkId { - WEBP_CHUNK_VP8X, // VP8X - WEBP_CHUNK_ICCP, // ICCP - WEBP_CHUNK_ANIM, // ANIM - WEBP_CHUNK_ANMF, // ANMF - WEBP_CHUNK_DEPRECATED, // (deprecated from FRGM) - WEBP_CHUNK_ALPHA, // ALPH - WEBP_CHUNK_IMAGE, // VP8/VP8L - WEBP_CHUNK_EXIF, // EXIF - WEBP_CHUNK_XMP, // XMP - WEBP_CHUNK_UNKNOWN, // Other chunks. - WEBP_CHUNK_NIL -} WebPChunkId; - -//------------------------------------------------------------------------------ - -// Returns the version number of the mux library, packed in hexadecimal using -// 8bits for each of major/minor/revision. E.g: v2.5.7 is 0x020507. -WEBP_EXTERN int WebPGetMuxVersion(void); - -//------------------------------------------------------------------------------ -// Life of a Mux object - -// Internal, version-checked, entry point -WEBP_EXTERN WebPMux* WebPNewInternal(int); - -// Creates an empty mux object. -// Returns: -// A pointer to the newly created empty mux object. -// Or NULL in case of memory error. -static WEBP_INLINE WebPMux* WebPMuxNew(void) { - return WebPNewInternal(WEBP_MUX_ABI_VERSION); -} - -// Deletes the mux object. -// Parameters: -// mux - (in/out) object to be deleted -WEBP_EXTERN void WebPMuxDelete(WebPMux* mux); - -//------------------------------------------------------------------------------ -// Mux creation. - -// Internal, version-checked, entry point -WEBP_EXTERN WebPMux* WebPMuxCreateInternal(const WebPData*, int, int); - -// Creates a mux object from raw data given in WebP RIFF format. -// Parameters: -// bitstream - (in) the bitstream data in WebP RIFF format -// copy_data - (in) value 1 indicates given data WILL be copied to the mux -// object and value 0 indicates data will NOT be copied. -// Returns: -// A pointer to the mux object created from given data - on success. -// NULL - In case of invalid data or memory error. -static WEBP_INLINE WebPMux* WebPMuxCreate(const WebPData* bitstream, - int copy_data) { - return WebPMuxCreateInternal(bitstream, copy_data, WEBP_MUX_ABI_VERSION); -} - -//------------------------------------------------------------------------------ -// Non-image chunks. - -// Note: Only non-image related chunks should be managed through chunk APIs. -// (Image related chunks are: "ANMF", "VP8 ", "VP8L" and "ALPH"). -// To add, get and delete images, use WebPMuxSetImage(), WebPMuxPushFrame(), -// WebPMuxGetFrame() and WebPMuxDeleteFrame(). - -// Adds a chunk with id 'fourcc' and data 'chunk_data' in the mux object. -// Any existing chunk(s) with the same id will be removed. -// Parameters: -// mux - (in/out) object to which the chunk is to be added -// fourcc - (in) a character array containing the fourcc of the given chunk; -// e.g., "ICCP", "XMP ", "EXIF" etc. -// chunk_data - (in) the chunk data to be added -// copy_data - (in) value 1 indicates given data WILL be copied to the mux -// object and value 0 indicates data will NOT be copied. -// Returns: -// WEBP_MUX_INVALID_ARGUMENT - if mux, fourcc or chunk_data is NULL -// or if fourcc corresponds to an image chunk. -// WEBP_MUX_MEMORY_ERROR - on memory allocation error. -// WEBP_MUX_OK - on success. -WEBP_EXTERN WebPMuxError WebPMuxSetChunk( - WebPMux* mux, const char fourcc[4], const WebPData* chunk_data, - int copy_data); - -// Gets a reference to the data of the chunk with id 'fourcc' in the mux object. -// The caller should NOT free the returned data. -// Parameters: -// mux - (in) object from which the chunk data is to be fetched -// fourcc - (in) a character array containing the fourcc of the chunk; -// e.g., "ICCP", "XMP ", "EXIF" etc. -// chunk_data - (out) returned chunk data -// Returns: -// WEBP_MUX_INVALID_ARGUMENT - if mux, fourcc or chunk_data is NULL -// or if fourcc corresponds to an image chunk. -// WEBP_MUX_NOT_FOUND - If mux does not contain a chunk with the given id. -// WEBP_MUX_OK - on success. -WEBP_EXTERN WebPMuxError WebPMuxGetChunk( - const WebPMux* mux, const char fourcc[4], WebPData* chunk_data); - -// Deletes the chunk with the given 'fourcc' from the mux object. -// Parameters: -// mux - (in/out) object from which the chunk is to be deleted -// fourcc - (in) a character array containing the fourcc of the chunk; -// e.g., "ICCP", "XMP ", "EXIF" etc. -// Returns: -// WEBP_MUX_INVALID_ARGUMENT - if mux or fourcc is NULL -// or if fourcc corresponds to an image chunk. -// WEBP_MUX_NOT_FOUND - If mux does not contain a chunk with the given fourcc. -// WEBP_MUX_OK - on success. -WEBP_EXTERN WebPMuxError WebPMuxDeleteChunk( - WebPMux* mux, const char fourcc[4]); - -//------------------------------------------------------------------------------ -// Images. - -// Encapsulates data about a single frame. -struct WebPMuxFrameInfo { - WebPData bitstream; // image data: can be a raw VP8/VP8L bitstream - // or a single-image WebP file. - int x_offset; // x-offset of the frame. - int y_offset; // y-offset of the frame. - int duration; // duration of the frame (in milliseconds). - - WebPChunkId id; // frame type: should be one of WEBP_CHUNK_ANMF - // or WEBP_CHUNK_IMAGE - WebPMuxAnimDispose dispose_method; // Disposal method for the frame. - WebPMuxAnimBlend blend_method; // Blend operation for the frame. - uint32_t pad[1]; // padding for later use -}; - -// Sets the (non-animated) image in the mux object. -// Note: Any existing images (including frames) will be removed. -// Parameters: -// mux - (in/out) object in which the image is to be set -// bitstream - (in) can be a raw VP8/VP8L bitstream or a single-image -// WebP file (non-animated) -// copy_data - (in) value 1 indicates given data WILL be copied to the mux -// object and value 0 indicates data will NOT be copied. -// Returns: -// WEBP_MUX_INVALID_ARGUMENT - if mux is NULL or bitstream is NULL. -// WEBP_MUX_MEMORY_ERROR - on memory allocation error. -// WEBP_MUX_OK - on success. -WEBP_EXTERN WebPMuxError WebPMuxSetImage( - WebPMux* mux, const WebPData* bitstream, int copy_data); - -// Adds a frame at the end of the mux object. -// Notes: (1) frame.id should be WEBP_CHUNK_ANMF -// (2) For setting a non-animated image, use WebPMuxSetImage() instead. -// (3) Type of frame being pushed must be same as the frames in mux. -// (4) As WebP only supports even offsets, any odd offset will be snapped -// to an even location using: offset &= ~1 -// Parameters: -// mux - (in/out) object to which the frame is to be added -// frame - (in) frame data. -// copy_data - (in) value 1 indicates given data WILL be copied to the mux -// object and value 0 indicates data will NOT be copied. -// Returns: -// WEBP_MUX_INVALID_ARGUMENT - if mux or frame is NULL -// or if content of 'frame' is invalid. -// WEBP_MUX_MEMORY_ERROR - on memory allocation error. -// WEBP_MUX_OK - on success. -WEBP_EXTERN WebPMuxError WebPMuxPushFrame( - WebPMux* mux, const WebPMuxFrameInfo* frame, int copy_data); - -// Gets the nth frame from the mux object. -// The content of 'frame->bitstream' is allocated using WebPMalloc(), and NOT -// owned by the 'mux' object. It MUST be deallocated by the caller by calling -// WebPDataClear(). -// nth=0 has a special meaning - last position. -// Parameters: -// mux - (in) object from which the info is to be fetched -// nth - (in) index of the frame in the mux object -// frame - (out) data of the returned frame -// Returns: -// WEBP_MUX_INVALID_ARGUMENT - if mux or frame is NULL. -// WEBP_MUX_NOT_FOUND - if there are less than nth frames in the mux object. -// WEBP_MUX_BAD_DATA - if nth frame chunk in mux is invalid. -// WEBP_MUX_MEMORY_ERROR - on memory allocation error. -// WEBP_MUX_OK - on success. -WEBP_EXTERN WebPMuxError WebPMuxGetFrame( - const WebPMux* mux, uint32_t nth, WebPMuxFrameInfo* frame); - -// Deletes a frame from the mux object. -// nth=0 has a special meaning - last position. -// Parameters: -// mux - (in/out) object from which a frame is to be deleted -// nth - (in) The position from which the frame is to be deleted -// Returns: -// WEBP_MUX_INVALID_ARGUMENT - if mux is NULL. -// WEBP_MUX_NOT_FOUND - If there are less than nth frames in the mux object -// before deletion. -// WEBP_MUX_OK - on success. -WEBP_EXTERN WebPMuxError WebPMuxDeleteFrame(WebPMux* mux, uint32_t nth); - -//------------------------------------------------------------------------------ -// Animation. - -// Animation parameters. -struct WebPMuxAnimParams { - uint32_t bgcolor; // Background color of the canvas stored (in MSB order) as: - // Bits 00 to 07: Alpha. - // Bits 08 to 15: Red. - // Bits 16 to 23: Green. - // Bits 24 to 31: Blue. - int loop_count; // Number of times to repeat the animation [0 = infinite]. -}; - -// Sets the animation parameters in the mux object. Any existing ANIM chunks -// will be removed. -// Parameters: -// mux - (in/out) object in which ANIM chunk is to be set/added -// params - (in) animation parameters. -// Returns: -// WEBP_MUX_INVALID_ARGUMENT - if mux or params is NULL. -// WEBP_MUX_MEMORY_ERROR - on memory allocation error. -// WEBP_MUX_OK - on success. -WEBP_EXTERN WebPMuxError WebPMuxSetAnimationParams( - WebPMux* mux, const WebPMuxAnimParams* params); - -// Gets the animation parameters from the mux object. -// Parameters: -// mux - (in) object from which the animation parameters to be fetched -// params - (out) animation parameters extracted from the ANIM chunk -// Returns: -// WEBP_MUX_INVALID_ARGUMENT - if mux or params is NULL. -// WEBP_MUX_NOT_FOUND - if ANIM chunk is not present in mux object. -// WEBP_MUX_OK - on success. -WEBP_EXTERN WebPMuxError WebPMuxGetAnimationParams( - const WebPMux* mux, WebPMuxAnimParams* params); - -//------------------------------------------------------------------------------ -// Misc Utilities. - -// Sets the canvas size for the mux object. The width and height can be -// specified explicitly or left as zero (0, 0). -// * When width and height are specified explicitly, then this frame bound is -// enforced during subsequent calls to WebPMuxAssemble() and an error is -// reported if any animated frame does not completely fit within the canvas. -// * When unspecified (0, 0), the constructed canvas will get the frame bounds -// from the bounding-box over all frames after calling WebPMuxAssemble(). -// Parameters: -// mux - (in) object to which the canvas size is to be set -// width - (in) canvas width -// height - (in) canvas height -// Returns: -// WEBP_MUX_INVALID_ARGUMENT - if mux is NULL; or -// width or height are invalid or out of bounds -// WEBP_MUX_OK - on success. -WEBP_EXTERN WebPMuxError WebPMuxSetCanvasSize(WebPMux* mux, - int width, int height); - -// Gets the canvas size from the mux object. -// Note: This method assumes that the VP8X chunk, if present, is up-to-date. -// That is, the mux object hasn't been modified since the last call to -// WebPMuxAssemble() or WebPMuxCreate(). -// Parameters: -// mux - (in) object from which the canvas size is to be fetched -// width - (out) canvas width -// height - (out) canvas height -// Returns: -// WEBP_MUX_INVALID_ARGUMENT - if mux, width or height is NULL. -// WEBP_MUX_BAD_DATA - if VP8X/VP8/VP8L chunk or canvas size is invalid. -// WEBP_MUX_OK - on success. -WEBP_EXTERN WebPMuxError WebPMuxGetCanvasSize(const WebPMux* mux, - int* width, int* height); - -// Gets the feature flags from the mux object. -// Note: This method assumes that the VP8X chunk, if present, is up-to-date. -// That is, the mux object hasn't been modified since the last call to -// WebPMuxAssemble() or WebPMuxCreate(). -// Parameters: -// mux - (in) object from which the features are to be fetched -// flags - (out) the flags specifying which features are present in the -// mux object. This will be an OR of various flag values. -// Enum 'WebPFeatureFlags' can be used to test individual flag values. -// Returns: -// WEBP_MUX_INVALID_ARGUMENT - if mux or flags is NULL. -// WEBP_MUX_BAD_DATA - if VP8X/VP8/VP8L chunk or canvas size is invalid. -// WEBP_MUX_OK - on success. -WEBP_EXTERN WebPMuxError WebPMuxGetFeatures(const WebPMux* mux, - uint32_t* flags); - -// Gets number of chunks with the given 'id' in the mux object. -// Parameters: -// mux - (in) object from which the info is to be fetched -// id - (in) chunk id specifying the type of chunk -// num_elements - (out) number of chunks with the given chunk id -// Returns: -// WEBP_MUX_INVALID_ARGUMENT - if mux, or num_elements is NULL. -// WEBP_MUX_OK - on success. -WEBP_EXTERN WebPMuxError WebPMuxNumChunks(const WebPMux* mux, - WebPChunkId id, int* num_elements); - -// Assembles all chunks in WebP RIFF format and returns in 'assembled_data'. -// This function also validates the mux object. -// Note: The content of 'assembled_data' will be ignored and overwritten. -// Also, the content of 'assembled_data' is allocated using WebPMalloc(), and -// NOT owned by the 'mux' object. It MUST be deallocated by the caller by -// calling WebPDataClear(). It's always safe to call WebPDataClear() upon -// return, even in case of error. -// Parameters: -// mux - (in/out) object whose chunks are to be assembled -// assembled_data - (out) assembled WebP data -// Returns: -// WEBP_MUX_BAD_DATA - if mux object is invalid. -// WEBP_MUX_INVALID_ARGUMENT - if mux or assembled_data is NULL. -// WEBP_MUX_MEMORY_ERROR - on memory allocation error. -// WEBP_MUX_OK - on success. -WEBP_EXTERN WebPMuxError WebPMuxAssemble(WebPMux* mux, - WebPData* assembled_data); - -//------------------------------------------------------------------------------ -// WebPAnimEncoder API -// -// This API allows encoding (possibly) animated WebP images. -// -// Code Example: -/* - WebPAnimEncoderOptions enc_options; - WebPAnimEncoderOptionsInit(&enc_options); - // Tune 'enc_options' as needed. - WebPAnimEncoder* enc = WebPAnimEncoderNew(width, height, &enc_options); - while() { - WebPConfig config; - WebPConfigInit(&config); - // Tune 'config' as needed. - WebPAnimEncoderAdd(enc, frame, timestamp_ms, &config); - } - WebPAnimEncoderAdd(enc, NULL, timestamp_ms, NULL); - WebPAnimEncoderAssemble(enc, webp_data); - WebPAnimEncoderDelete(enc); - // Write the 'webp_data' to a file, or re-mux it further. -*/ - -typedef struct WebPAnimEncoder WebPAnimEncoder; // Main opaque object. - -// Forward declarations. Defined in encode.h. -struct WebPPicture; -struct WebPConfig; - -// Global options. -struct WebPAnimEncoderOptions { - WebPMuxAnimParams anim_params; // Animation parameters. - int minimize_size; // If true, minimize the output size (slow). Implicitly - // disables key-frame insertion. - int kmin; - int kmax; // Minimum and maximum distance between consecutive key - // frames in the output. The library may insert some key - // frames as needed to satisfy this criteria. - // Note that these conditions should hold: kmax > kmin - // and kmin >= kmax / 2 + 1. Also, if kmax <= 0, then - // key-frame insertion is disabled; and if kmax == 1, - // then all frames will be key-frames (kmin value does - // not matter for these special cases). - int allow_mixed; // If true, use mixed compression mode; may choose - // either lossy and lossless for each frame. - int verbose; // If true, print info and warning messages to stderr. - - uint32_t padding[4]; // Padding for later use. -}; - -// Internal, version-checked, entry point. -WEBP_EXTERN int WebPAnimEncoderOptionsInitInternal( - WebPAnimEncoderOptions*, int); - -// Should always be called, to initialize a fresh WebPAnimEncoderOptions -// structure before modification. Returns false in case of version mismatch. -// WebPAnimEncoderOptionsInit() must have succeeded before using the -// 'enc_options' object. -static WEBP_INLINE int WebPAnimEncoderOptionsInit( - WebPAnimEncoderOptions* enc_options) { - return WebPAnimEncoderOptionsInitInternal(enc_options, WEBP_MUX_ABI_VERSION); -} - -// Internal, version-checked, entry point. -WEBP_EXTERN WebPAnimEncoder* WebPAnimEncoderNewInternal( - int, int, const WebPAnimEncoderOptions*, int); - -// Creates and initializes a WebPAnimEncoder object. -// Parameters: -// width/height - (in) canvas width and height of the animation. -// enc_options - (in) encoding options; can be passed NULL to pick -// reasonable defaults. -// Returns: -// A pointer to the newly created WebPAnimEncoder object. -// Or NULL in case of memory error. -static WEBP_INLINE WebPAnimEncoder* WebPAnimEncoderNew( - int width, int height, const WebPAnimEncoderOptions* enc_options) { - return WebPAnimEncoderNewInternal(width, height, enc_options, - WEBP_MUX_ABI_VERSION); -} - -// Optimize the given frame for WebP, encode it and add it to the -// WebPAnimEncoder object. -// The last call to 'WebPAnimEncoderAdd' should be with frame = NULL, which -// indicates that no more frames are to be added. This call is also used to -// determine the duration of the last frame. -// Parameters: -// enc - (in/out) object to which the frame is to be added. -// frame - (in/out) frame data in ARGB or YUV(A) format. If it is in YUV(A) -// format, it will be converted to ARGB, which incurs a small loss. -// timestamp_ms - (in) timestamp of this frame in milliseconds. -// Duration of a frame would be calculated as -// "timestamp of next frame - timestamp of this frame". -// Hence, timestamps should be in non-decreasing order. -// config - (in) encoding options; can be passed NULL to pick -// reasonable defaults. -// Returns: -// On error, returns false and frame->error_code is set appropriately. -// Otherwise, returns true. -WEBP_EXTERN int WebPAnimEncoderAdd( - WebPAnimEncoder* enc, struct WebPPicture* frame, int timestamp_ms, - const struct WebPConfig* config); - -// Assemble all frames added so far into a WebP bitstream. -// This call should be preceded by a call to 'WebPAnimEncoderAdd' with -// frame = NULL; if not, the duration of the last frame will be internally -// estimated. -// Parameters: -// enc - (in/out) object from which the frames are to be assembled. -// webp_data - (out) generated WebP bitstream. -// Returns: -// True on success. -WEBP_EXTERN int WebPAnimEncoderAssemble(WebPAnimEncoder* enc, - WebPData* webp_data); - -// Get error string corresponding to the most recent call using 'enc'. The -// returned string is owned by 'enc' and is valid only until the next call to -// WebPAnimEncoderAdd() or WebPAnimEncoderAssemble() or WebPAnimEncoderDelete(). -// Parameters: -// enc - (in/out) object from which the error string is to be fetched. -// Returns: -// NULL if 'enc' is NULL. Otherwise, returns the error string if the last call -// to 'enc' had an error, or an empty string if the last call was a success. -WEBP_EXTERN const char* WebPAnimEncoderGetError(WebPAnimEncoder* enc); - -// Deletes the WebPAnimEncoder object. -// Parameters: -// enc - (in/out) object to be deleted -WEBP_EXTERN void WebPAnimEncoderDelete(WebPAnimEncoder* enc); - -//------------------------------------------------------------------------------ - -#ifdef __cplusplus -} // extern "C" -#endif - -#endif // WEBP_WEBP_MUX_H_ diff --git a/Extended/libwebp/src/webp/mux_types.h b/Extended/libwebp/src/webp/mux_types.h deleted file mode 100644 index 66a6b2c..0000000 --- a/Extended/libwebp/src/webp/mux_types.h +++ /dev/null @@ -1,98 +0,0 @@ -// Copyright 2012 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Data-types common to the mux and demux libraries. -// -// Author: Urvang (urvang@google.com) - -#ifndef WEBP_WEBP_MUX_TYPES_H_ -#define WEBP_WEBP_MUX_TYPES_H_ - -#include // memset() -#import - -#ifdef __cplusplus -extern "C" { -#endif - -// Note: forward declaring enumerations is not allowed in (strict) C and C++, -// the types are left here for reference. -// typedef enum WebPFeatureFlags WebPFeatureFlags; -// typedef enum WebPMuxAnimDispose WebPMuxAnimDispose; -// typedef enum WebPMuxAnimBlend WebPMuxAnimBlend; -typedef struct WebPData WebPData; - -// VP8X Feature Flags. -typedef enum WebPFeatureFlags { - ANIMATION_FLAG = 0x00000002, - XMP_FLAG = 0x00000004, - EXIF_FLAG = 0x00000008, - ALPHA_FLAG = 0x00000010, - ICCP_FLAG = 0x00000020, - - ALL_VALID_FLAGS = 0x0000003e -} WebPFeatureFlags; - -// Dispose method (animation only). Indicates how the area used by the current -// frame is to be treated before rendering the next frame on the canvas. -typedef enum WebPMuxAnimDispose { - WEBP_MUX_DISPOSE_NONE, // Do not dispose. - WEBP_MUX_DISPOSE_BACKGROUND // Dispose to background color. -} WebPMuxAnimDispose; - -// Blend operation (animation only). Indicates how transparent pixels of the -// current frame are blended with those of the previous canvas. -typedef enum WebPMuxAnimBlend { - WEBP_MUX_BLEND, // Blend. - WEBP_MUX_NO_BLEND // Do not blend. -} WebPMuxAnimBlend; - -// Data type used to describe 'raw' data, e.g., chunk data -// (ICC profile, metadata) and WebP compressed image data. -// 'bytes' memory must be allocated using WebPMalloc() and such. -struct WebPData { - const uint8_t* bytes; - size_t size; -}; - -// Initializes the contents of the 'webp_data' object with default values. -static WEBP_INLINE void WebPDataInit(WebPData* webp_data) { - if (webp_data != NULL) { - memset(webp_data, 0, sizeof(*webp_data)); - } -} - -// Clears the contents of the 'webp_data' object by calling WebPFree(). -// Does not deallocate the object itself. -static WEBP_INLINE void WebPDataClear(WebPData* webp_data) { - if (webp_data != NULL) { - WebPFree((void*)webp_data->bytes); - WebPDataInit(webp_data); - } -} - -// Allocates necessary storage for 'dst' and copies the contents of 'src'. -// Returns true on success. -static WEBP_INLINE int WebPDataCopy(const WebPData* src, WebPData* dst) { - if (src == NULL || dst == NULL) return 0; - WebPDataInit(dst); - if (src->bytes != NULL && src->size != 0) { - dst->bytes = (uint8_t*)WebPMalloc(src->size); - if (dst->bytes == NULL) return 0; - memcpy((void*)dst->bytes, src->bytes, src->size); - dst->size = src->size; - } - return 1; -} - -#ifdef __cplusplus -} // extern "C" -#endif - -#endif // WEBP_WEBP_MUX_TYPES_H_ diff --git a/Extended/libwebp/src/webp/stamp-h1 b/Extended/libwebp/src/webp/stamp-h1 deleted file mode 100644 index 9dd5a32..0000000 --- a/Extended/libwebp/src/webp/stamp-h1 +++ /dev/null @@ -1 +0,0 @@ -timestamp for src/webp/config.h diff --git a/Extended/libwebp/src/webp/types.h b/Extended/libwebp/src/webp/types.h deleted file mode 100644 index d61a8ce..0000000 --- a/Extended/libwebp/src/webp/types.h +++ /dev/null @@ -1,69 +0,0 @@ -// Copyright 2010 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Common types + memory wrappers -// -// Author: Skal (pascal.massimino@gmail.com) - -#ifndef WEBP_WEBP_TYPES_H_ -#define WEBP_WEBP_TYPES_H_ - -#include // for size_t - -#ifndef _MSC_VER -// TWITTER: need to use stdint.h instead of inttypes.h to avoid non-module import error on Apple platforms -#include -#if defined(__cplusplus) || !defined(__STRICT_ANSI__) || \ - (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) -#define WEBP_INLINE inline -#else -#define WEBP_INLINE -#endif -#else -typedef signed char int8_t; -typedef unsigned char uint8_t; -typedef signed short int16_t; -typedef unsigned short uint16_t; -typedef signed int int32_t; -typedef unsigned int uint32_t; -typedef unsigned long long int uint64_t; -typedef long long int int64_t; -#define WEBP_INLINE __forceinline -#endif /* _MSC_VER */ - -#ifndef WEBP_EXTERN -// This explicitly marks library functions and allows for changing the -// signature for e.g., Windows DLL builds. -# if defined(__GNUC__) && __GNUC__ >= 4 -# define WEBP_EXTERN extern __attribute__ ((visibility ("default"))) -# else -# define WEBP_EXTERN extern -# endif /* __GNUC__ >= 4 */ -#endif /* WEBP_EXTERN */ - -// Macro to check ABI compatibility (same major revision number) -#define WEBP_ABI_IS_INCOMPATIBLE(a, b) (((a) >> 8) != ((b) >> 8)) - -#ifdef __cplusplus -extern "C" { -#endif - -// Allocates 'size' bytes of memory. Returns NULL upon error. Memory -// must be deallocated by calling WebPFree(). This function is made available -// by the core 'libwebp' library. -WEBP_EXTERN void* WebPMalloc(size_t size); - -// Releases memory returned by the WebPDecode*() functions (from decode.h). -WEBP_EXTERN void WebPFree(void* ptr); - -#ifdef __cplusplus -} // extern "C" -#endif - -#endif // WEBP_WEBP_TYPES_H_ diff --git a/Extended/libwebp/swig/README b/Extended/libwebp/swig/README deleted file mode 100644 index 725c071..0000000 --- a/Extended/libwebp/swig/README +++ /dev/null @@ -1,56 +0,0 @@ -Building: -========= - -JNI SWIG bindings: ------------------- - $ gcc -shared -fPIC -fno-strict-aliasing -O2 \ - -I/path/to/your/jdk/includes \ - libwebp_java_wrap.c \ - -lwebp \ - -o libwebp_jni.so - --------------------------------------- BEGIN PSEUDO EXAMPLE -import com.google.webp.libwebp; - -import java.lang.reflect.Method; - -public class libwebp_jni_example { - static { - System.loadLibrary("webp_jni"); - } - - /** - * usage: java -cp libwebp.jar:. libwebp_jni_example - */ - public static void main(String argv[]) { - final int version = libwebp.WebPGetDecoderVersion(); - System.out.println("libwebp version: " + Integer.toHexString(version)); - - System.out.println("libwebp methods:"); - final Method[] libwebpMethods = libwebp.class.getDeclaredMethods(); - for (int i = 0; i < libwebpMethods.length; i++) { - System.out.println(libwebpMethods[i]); - } - } -} --------------------------------------- END PSEUDO EXAMPLE - - $ javac -cp libwebp.jar libwebp_jni_example.java - $ java -Djava.library.path=. -cp libwebp.jar:. libwebp_jni_example - -Python SWIG bindings: ---------------------- - $ python setup.py build_ext - $ python setup.py install --prefix=pylocal - --------------------------------------- BEGIN PSEUDO EXAMPLE -import glob -import sys -sys.path.append(glob.glob('pylocal/lib/python*/site-packages')[0]) - -from com.google.webp import libwebp -print "libwebp decoder version: %x" % libwebp.WebPGetDecoderVersion() - -print "libwebp attributes:" -for attr in dir(libwebp): print attr --------------------------------------- END PSEUDO EXAMPLE diff --git a/Extended/libwebp/swig/libwebp.go b/Extended/libwebp/swig/libwebp.go deleted file mode 100644 index df205aa..0000000 --- a/Extended/libwebp/swig/libwebp.go +++ /dev/null @@ -1,45 +0,0 @@ -/* ---------------------------------------------------------------------------- - * This file was automatically generated by SWIG (http://www.swig.org). - * Version 2.0.10 - * - * This file is not intended to be easily readable and contains a number of - * coding conventions designed to improve portability and efficiency. Do not make - * changes to this file unless you know what you are doing--modify the SWIG - * interface file instead. - * ----------------------------------------------------------------------------- */ - -package libwebp - -import _ "runtime/cgo" -import "unsafe" - -type _ unsafe.Pointer - -type _swig_fnptr *byte -type _swig_memberptr *byte - -//extern libwebpSwigCgocall -func SwigCgocall() - -//extern libwebpSwigCgocallDone -func SwigCgocallDone() - -//extern libwebpSwigCgocallBack -func SwigCgocallBack() - -//extern libwebpSwigCgocallBackDone -func SwigCgocallBackDone() - -func WebPGetDecoderVersion() int -func Wrapped_WebPGetInfo(string, []int, []int) int - -// WebPGetInfo has 2 output parameters, provide a version in the more natural -// go idiom: -func WebPGetInfo(webp []byte) (ok bool, width int, height int) { - w := []int{0} - h := []int{0} - ok = Wrapped_WebPGetInfo(string(webp), w, h) != 0 - width = w[0] - height = h[0] - return -} diff --git a/Extended/libwebp/swig/libwebp.jar b/Extended/libwebp/swig/libwebp.jar deleted file mode 100644 index 2fc502b972101270fc1ecfb8c8c3948e0a2e45a6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2150 zcmWIWW@Zs#-~ht6J>Jd?NPv@pg~8V~#8KDN&rSc|DFy~+h5&DN4v-2asImZ@nni#r z;F^6M{XE@VgG2Ou-9G!CIql=Et9OytTUYDcne&^246YbIcv__A<*VcAd$DvC3+IfN zl1FCG(8^$${!H^nnwt1i@o=%}OP+~oS3FaFo%yNgV-X|RA=Rs{zjp^(1HvGOaDg3# z?h6*6XmWn8K5iAw=3j)2gl?f9X11+|u_l z`wM4N+w+?iSC%x+{dsWS=l^q`&)MAm_w)DX`3#S5OuyJWqes*xeT`9^!J{72V^)t< zlba_dR9a^ zdv^8CCaLu@saGDQSxsIpc7EHe$o^GNT}{0^lY(@o6-7B-&zPdN*gULadEnHAAt|b& z-bZ(wJ{lXEtt_?hMP+)|yF1gX4o{alRQ1o^Ug+))kp;g$96d9QYkK;%vM3+<_r>X3 z-Q~~vUQG^}V|V%&%aJK@i~p{Y+IK5T_q}LT_|_oJ_0znro{XPzdG*ZJudD1nPdxN& z@72g1Ev2Wb5|exL3RU$I_vRG_%1!=ivHI|<#bq5N!d=Z``kAntGT<;$4Yf?yV5lreaI%Z+i$IhiD zF}X+cn6pig!Pyy!XN;-}-JR0Ithr<}ZaK#B7M`6D812Lz&j0jsYx9MuX8~uYy)>NF z68^|g>a4py%L2x@ABEgPRbO`Bp0HEs@3$c7wXHY&%jQ7RM9foX$O+0yDOgA7lHd)k7SkqY*HaVkrqG{y$AeZb(YgSfG^WL)T zZfJRV>)f=9oRf`%Z)Xb5RV_-(wqCnPc(J;byYU*U<}K_s46~TSUYl?Ex$E!TF9o+< zH61V2$i8gTcsudSlD;Q`OHDleUwg%Z7=uMha5y&-+x&BRNjTv<*4Yc4V~G^K_MQT zj?HZ1u`{;yEm^W<32UWZxSC!KgZ!zAbSpvbM6u6j?-akAGkeQ@`}y$<1&r!KE)O+0 zk9%eac*I2YneJ8+$eqW>d1T#PaW94In`Lgz_vd+K`>L&X>L+2-ch)6k&b}oT&aZw> zd;P&|s)N^xRi9r8O_&w6diBa#r7VdmET(~g#i9xmMalVP>qyuhgZ&}*w5Yf6{iDz3f1Y@a;O{+`E~ zv(MOU-S$&8b+eR@qV102^GkBOYgf<7mE_Ly*38&%$M#`#R-$~kBz zrmf)EWy~viZcT!pfqsO5PS-x6HwDvJ%UQp(d|!AdQgjWcoWUcJ(mTopKe$14O2XQg zfdz~V3?G3NOMo{clL!N9{K4uQP?dxV;B^eBfMTnxBt z5`+oIfJ{ief?EfuW|W5meJ4fFLkrkTgQ;9n?@lPXC~q2LbG{=tilB n&_fM5G87Qz09luTp^xqms8R6j6X4Ct2GYb1g!_S3PXzM-9zhES diff --git a/Extended/libwebp/swig/libwebp.py b/Extended/libwebp/swig/libwebp.py deleted file mode 100644 index 2d126b5..0000000 --- a/Extended/libwebp/swig/libwebp.py +++ /dev/null @@ -1,235 +0,0 @@ -# This file was automatically generated by SWIG (http://www.swig.org). -# Version 3.0.12 -# -# Do not make changes to this file unless you know what you are doing--modify -# the SWIG interface file instead. - -from sys import version_info as _swig_python_version_info -if _swig_python_version_info >= (2, 7, 0): - def swig_import_helper(): - import importlib - pkg = __name__.rpartition('.')[0] - mname = '.'.join((pkg, '_libwebp')).lstrip('.') - try: - return importlib.import_module(mname) - except ImportError: - return importlib.import_module('_libwebp') - _libwebp = swig_import_helper() - del swig_import_helper -elif _swig_python_version_info >= (2, 6, 0): - def swig_import_helper(): - from os.path import dirname - import imp - fp = None - try: - fp, pathname, description = imp.find_module('_libwebp', [dirname(__file__)]) - except ImportError: - import _libwebp - return _libwebp - try: - _mod = imp.load_module('_libwebp', fp, pathname, description) - finally: - if fp is not None: - fp.close() - return _mod - _libwebp = swig_import_helper() - del swig_import_helper -else: - import _libwebp -del _swig_python_version_info - -try: - _swig_property = property -except NameError: - pass # Python < 2.2 doesn't have 'property'. - -try: - import builtins as __builtin__ -except ImportError: - import __builtin__ - -def _swig_setattr_nondynamic(self, class_type, name, value, static=1): - if (name == "thisown"): - return self.this.own(value) - if (name == "this"): - if type(value).__name__ == 'SwigPyObject': - self.__dict__[name] = value - return - method = class_type.__swig_setmethods__.get(name, None) - if method: - return method(self, value) - if (not static): - if _newclass: - object.__setattr__(self, name, value) - else: - self.__dict__[name] = value - else: - raise AttributeError("You cannot add attributes to %s" % self) - - -def _swig_setattr(self, class_type, name, value): - return _swig_setattr_nondynamic(self, class_type, name, value, 0) - - -def _swig_getattr(self, class_type, name): - if (name == "thisown"): - return self.this.own() - method = class_type.__swig_getmethods__.get(name, None) - if method: - return method(self) - raise AttributeError("'%s' object has no attribute '%s'" % (class_type.__name__, name)) - - -def _swig_repr(self): - try: - strthis = "proxy of " + self.this.__repr__() - except __builtin__.Exception: - strthis = "" - return "<%s.%s; %s >" % (self.__class__.__module__, self.__class__.__name__, strthis,) - -try: - _object = object - _newclass = 1 -except __builtin__.Exception: - class _object: - pass - _newclass = 0 - - -def WebPGetDecoderVersion(): - """WebPGetDecoderVersion() -> int""" - return _libwebp.WebPGetDecoderVersion() - -def WebPGetInfo(data): - """WebPGetInfo(uint8_t data) -> (width, height)""" - return _libwebp.WebPGetInfo(data) - -def WebPDecodeRGB(data): - """WebPDecodeRGB(uint8_t data) -> (rgb, width, height)""" - return _libwebp.WebPDecodeRGB(data) - -def WebPDecodeRGBA(data): - """WebPDecodeRGBA(uint8_t data) -> (rgb, width, height)""" - return _libwebp.WebPDecodeRGBA(data) - -def WebPDecodeARGB(data): - """WebPDecodeARGB(uint8_t data) -> (rgb, width, height)""" - return _libwebp.WebPDecodeARGB(data) - -def WebPDecodeBGR(data): - """WebPDecodeBGR(uint8_t data) -> (rgb, width, height)""" - return _libwebp.WebPDecodeBGR(data) - -def WebPDecodeBGRA(data): - """WebPDecodeBGRA(uint8_t data) -> (rgb, width, height)""" - return _libwebp.WebPDecodeBGRA(data) - -def WebPGetEncoderVersion(): - """WebPGetEncoderVersion() -> int""" - return _libwebp.WebPGetEncoderVersion() - -def wrap_WebPEncodeRGB(rgb, unused1, unused2, width, height, stride, quality_factor): - """private, do not call directly.""" - return _libwebp.wrap_WebPEncodeRGB(rgb, unused1, unused2, width, height, stride, quality_factor) - -def wrap_WebPEncodeBGR(rgb, unused1, unused2, width, height, stride, quality_factor): - """private, do not call directly.""" - return _libwebp.wrap_WebPEncodeBGR(rgb, unused1, unused2, width, height, stride, quality_factor) - -def wrap_WebPEncodeRGBA(rgb, unused1, unused2, width, height, stride, quality_factor): - """private, do not call directly.""" - return _libwebp.wrap_WebPEncodeRGBA(rgb, unused1, unused2, width, height, stride, quality_factor) - -def wrap_WebPEncodeBGRA(rgb, unused1, unused2, width, height, stride, quality_factor): - """private, do not call directly.""" - return _libwebp.wrap_WebPEncodeBGRA(rgb, unused1, unused2, width, height, stride, quality_factor) - -def wrap_WebPEncodeLosslessRGB(rgb, unused1, unused2, width, height, stride): - """private, do not call directly.""" - return _libwebp.wrap_WebPEncodeLosslessRGB(rgb, unused1, unused2, width, height, stride) - -def wrap_WebPEncodeLosslessBGR(rgb, unused1, unused2, width, height, stride): - """private, do not call directly.""" - return _libwebp.wrap_WebPEncodeLosslessBGR(rgb, unused1, unused2, width, height, stride) - -def wrap_WebPEncodeLosslessRGBA(rgb, unused1, unused2, width, height, stride): - """private, do not call directly.""" - return _libwebp.wrap_WebPEncodeLosslessRGBA(rgb, unused1, unused2, width, height, stride) - -def wrap_WebPEncodeLosslessBGRA(rgb, unused1, unused2, width, height, stride): - """private, do not call directly.""" - return _libwebp.wrap_WebPEncodeLosslessBGRA(rgb, unused1, unused2, width, height, stride) - -_UNUSED = 1 - - -def WebPEncodeRGB(rgb, width, height, stride, quality_factor): - """WebPEncodeRGB(uint8_t rgb, int width, int height, int stride, float quality_factor) -> lossy_webp""" - webp = wrap_WebPEncodeRGB( - rgb, _UNUSED, _UNUSED, width, height, stride, quality_factor) - if len(webp[0]) == 0: - return None - return webp[0] - - -def WebPEncodeRGBA(rgb, width, height, stride, quality_factor): - """WebPEncodeRGBA(uint8_t rgb, int width, int height, int stride, float quality_factor) -> lossy_webp""" - webp = wrap_WebPEncodeRGBA( - rgb, _UNUSED, _UNUSED, width, height, stride, quality_factor) - if len(webp[0]) == 0: - return None - return webp[0] - - -def WebPEncodeBGR(rgb, width, height, stride, quality_factor): - """WebPEncodeBGR(uint8_t rgb, int width, int height, int stride, float quality_factor) -> lossy_webp""" - webp = wrap_WebPEncodeBGR( - rgb, _UNUSED, _UNUSED, width, height, stride, quality_factor) - if len(webp[0]) == 0: - return None - return webp[0] - - -def WebPEncodeBGRA(rgb, width, height, stride, quality_factor): - """WebPEncodeBGRA(uint8_t rgb, int width, int height, int stride, float quality_factor) -> lossy_webp""" - webp = wrap_WebPEncodeBGRA( - rgb, _UNUSED, _UNUSED, width, height, stride, quality_factor) - if len(webp[0]) == 0: - return None - return webp[0] - - -def WebPEncodeLosslessRGB(rgb, width, height, stride): - """WebPEncodeLosslessRGB(uint8_t rgb, int width, int height, int stride) -> lossless_webp""" - webp = wrap_WebPEncodeLosslessRGB(rgb, _UNUSED, _UNUSED, width, height, stride) - if len(webp[0]) == 0: - return None - return webp[0] - - -def WebPEncodeLosslessRGBA(rgb, width, height, stride): - """WebPEncodeLosslessRGBA(uint8_t rgb, int width, int height, int stride) -> lossless_webp""" - webp = wrap_WebPEncodeLosslessRGBA(rgb, _UNUSED, _UNUSED, width, height, stride) - if len(webp[0]) == 0: - return None - return webp[0] - - -def WebPEncodeLosslessBGR(rgb, width, height, stride): - """WebPEncodeLosslessBGR(uint8_t rgb, int width, int height, int stride) -> lossless_webp""" - webp = wrap_WebPEncodeLosslessBGR(rgb, _UNUSED, _UNUSED, width, height, stride) - if len(webp[0]) == 0: - return None - return webp[0] - - -def WebPEncodeLosslessBGRA(rgb, width, height, stride): - """WebPEncodeLosslessBGRA(uint8_t rgb, int width, int height, int stride) -> lossless_webp""" - webp = wrap_WebPEncodeLosslessBGRA(rgb, _UNUSED, _UNUSED, width, height, stride) - if len(webp[0]) == 0: - return None - return webp[0] - -# This file is compatible with both classic and new-style classes. - - diff --git a/Extended/libwebp/swig/libwebp.swig b/Extended/libwebp/swig/libwebp.swig deleted file mode 100644 index ca38298..0000000 --- a/Extended/libwebp/swig/libwebp.swig +++ /dev/null @@ -1,438 +0,0 @@ -// Copyright 2011 Google Inc. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// libwebp swig interface definition -// -// Author: James Zern (jzern@google.com) - -/* - Go bindings: - $ swig -go \ - -outdir . \ - -o libwebp_go_wrap.c libwebp.swig - - Java bindings: - $ mkdir -p java/com/google/webp - $ swig -java \ - -package com.google.webp \ - -outdir java/com/google/webp \ - -o libwebp_java_wrap.c libwebp.swig - - Python bindings: - $ swig -python \ - -outdir . \ - -o libwebp_python_wrap.c libwebp.swig -*/ - -#ifdef SWIGPYTHON -%module(package="com.google.webp") libwebp -%begin %{ -#define SWIG_PYTHON_STRICT_BYTE_CHAR -%} -#else -%module libwebp -#endif /* SWIGPYTHON */ - -%include "constraints.i" -%include "typemaps.i" - -#ifdef SWIGGO -%apply (char* STRING, size_t LENGTH) { (const uint8_t* data, size_t data_size) } - -%rename(wrapped_WebPGetInfo) WebPGetInfo(const uint8_t* data, size_t data_size, - int* width, int* height); -#endif /* SWIGGO */ - -#ifdef SWIGJAVA -%include "arrays_java.i"; -%include "enums.swg" /*NB: requires JDK-1.5+ - See: http://www.swig.org/Doc1.3/Java.html#enumerations */ - -// map uint8_t* such that a byte[] is used -%{ -#include "webp/types.h" -%} -// from arrays_java.i (signed char) -JAVA_ARRAYS_DECL(uint8_t, jbyte, Byte, Uint8) -JAVA_ARRAYS_IMPL(uint8_t, jbyte, Byte, Uint8) -JAVA_ARRAYS_TYPEMAPS(uint8_t, byte, jbyte, Uint8, "[B") -%apply uint8_t[] { uint8_t* } -#endif /* SWIGJAVA */ - -#ifdef SWIGPYTHON -%apply (char* STRING, size_t LENGTH) { (const uint8_t* data, size_t data_size) } -%typemap(out) uint8_t* { - $result = PyString_FromStringAndSize( - (const char*)$1, - ($1 == NULL) ? 0 : ReturnedBufferSize("$symname", arg3, arg4)); -} - -%typemap (in) const uint8_t* rgb (Py_buffer rgb_buffer) { - // NB: with Python < 2.6 the old style buffer protocol may be used: - // Py_ssize_t unused; - // PyObject_AsReadBuffer($input, (const void**)(&$1), &unused); - if (!PyObject_CheckBuffer($input)) { - SWIG_exception_fail(SWIG_TypeError, - "in method '$symname', argument $argnum" - " does not support the buffer interface"); - } - if (PyObject_GetBuffer($input, &rgb_buffer, PyBUF_SIMPLE)) { - SWIG_exception_fail(SWIG_RuntimeError, - "in method '$symname', unable to get buffer view"); - } - $1 = ($1_ltype)rgb_buffer.buf; -} - -%typemap(freearg) const uint8_t* rgb { - PyBuffer_Release(&rgb_buffer$argnum); -} - -%define DECODE_AUTODOC(func) -%feature("autodoc", #func "(uint8_t data) -> (rgb, width, height)") func; -%enddef - -%feature("autodoc", "1"); -DECODE_AUTODOC(WebPDecodeRGB); -DECODE_AUTODOC(WebPDecodeRGBA); -DECODE_AUTODOC(WebPDecodeARGB); -DECODE_AUTODOC(WebPDecodeBGR); -DECODE_AUTODOC(WebPDecodeBGRA); -%feature("autodoc", "WebPGetInfo(uint8_t data) -> (width, height)") WebPGetInfo; -#endif /* SWIGPYTHON */ - -//------------------------------------------------------------------------------ -// Decoder specific - -%apply int* OUTPUT { int* width, int* height } - -int WebPGetDecoderVersion(void); -int WebPGetInfo(const uint8_t* data, size_t data_size, - int* width, int* height); - -#if defined(SWIGJAVA) || defined(SWIGPYTHON) - -// free the buffer returned by these functions after copying into -// the native type -%newobject WebPDecodeRGB; -%newobject WebPDecodeRGBA; -%newobject WebPDecodeARGB; -%newobject WebPDecodeBGR; -%newobject WebPDecodeBGRA; -%typemap(newfree) uint8_t* "free($1);" - -uint8_t* WebPDecodeRGB(const uint8_t* data, size_t data_size, - int* width, int* height); -uint8_t* WebPDecodeRGBA(const uint8_t* data, size_t data_size, - int* width, int* height); -uint8_t* WebPDecodeARGB(const uint8_t* data, size_t data_size, - int* width, int* height); -uint8_t* WebPDecodeBGR(const uint8_t* data, size_t data_size, - int* width, int* height); -uint8_t* WebPDecodeBGRA(const uint8_t* data, size_t data_size, - int* width, int* height); - -#endif /* SWIGJAVA || SWIGPYTHON */ - -//------------------------------------------------------------------------------ -// Encoder specific - -#if defined(SWIGJAVA) || defined(SWIGPYTHON) - -int WebPGetEncoderVersion(void); - -#endif /* SWIGJAVA || SWIGPYTHON */ - -//------------------------------------------------------------------------------ -// Wrapper code additions - -%{ -#include "webp/decode.h" -#include "webp/encode.h" -%} - -#ifdef SWIGJAVA -%{ -#define FillMeInAsSizeCannotBeDeterminedAutomatically \ - (result ? (jint)ReturnedBufferSize(__FUNCTION__, arg3, arg4) : 0) -%} -#endif /* SWIGJAVA */ - -#if defined(SWIGJAVA) || defined(SWIGPYTHON) -%{ -static size_t ReturnedBufferSize( - const char* function, int* width, int* height) { - static const struct sizemap { - const char* function; - int size_multiplier; - } size_map[] = { -#ifdef SWIGJAVA - { "Java_com_google_webp_libwebpJNI_WebPDecodeRGB", 3 }, - { "Java_com_google_webp_libwebpJNI_WebPDecodeRGBA", 4 }, - { "Java_com_google_webp_libwebpJNI_WebPDecodeARGB", 4 }, - { "Java_com_google_webp_libwebpJNI_WebPDecodeBGR", 3 }, - { "Java_com_google_webp_libwebpJNI_WebPDecodeBGRA", 4 }, - { "Java_com_google_webp_libwebpJNI_wrap_1WebPEncodeRGB", 1 }, - { "Java_com_google_webp_libwebpJNI_wrap_1WebPEncodeBGR", 1 }, - { "Java_com_google_webp_libwebpJNI_wrap_1WebPEncodeRGBA", 1 }, - { "Java_com_google_webp_libwebpJNI_wrap_1WebPEncodeBGRA", 1 }, - { "Java_com_google_webp_libwebpJNI_wrap_1WebPEncodeLosslessRGB", 1 }, - { "Java_com_google_webp_libwebpJNI_wrap_1WebPEncodeLosslessBGR", 1 }, - { "Java_com_google_webp_libwebpJNI_wrap_1WebPEncodeLosslessRGBA", 1 }, - { "Java_com_google_webp_libwebpJNI_wrap_1WebPEncodeLosslessBGRA", 1 }, -#endif -#ifdef SWIGPYTHON - { "WebPDecodeRGB", 3 }, - { "WebPDecodeRGBA", 4 }, - { "WebPDecodeARGB", 4 }, - { "WebPDecodeBGR", 3 }, - { "WebPDecodeBGRA", 4 }, - { "wrap_WebPEncodeRGB", 1 }, - { "wrap_WebPEncodeBGR", 1 }, - { "wrap_WebPEncodeRGBA", 1 }, - { "wrap_WebPEncodeBGRA", 1 }, - { "wrap_WebPEncodeLosslessRGB", 1 }, - { "wrap_WebPEncodeLosslessBGR", 1 }, - { "wrap_WebPEncodeLosslessRGBA", 1 }, - { "wrap_WebPEncodeLosslessBGRA", 1 }, -#endif - { NULL, 0 } - }; - const struct sizemap* p; - size_t size = 0; - - for (p = size_map; p->function; ++p) { - if (!strcmp(function, p->function)) { - size = *width * *height * p->size_multiplier; - break; - } - } - - return size; -} -%} - -%{ -typedef size_t (*WebPEncodeFunction)(const uint8_t* rgb, - int width, int height, int stride, - float quality_factor, uint8_t** output); -typedef size_t (*WebPEncodeLosslessFunction)(const uint8_t* rgb, - int width, int height, int stride, - uint8_t** output); - -static uint8_t* EncodeLossy(const uint8_t* rgb, - int width, int height, int stride, - float quality_factor, - WebPEncodeFunction encfn, - int* output_size, int* unused) { - uint8_t* output = NULL; - const size_t image_size = - encfn(rgb, width, height, stride, quality_factor, &output); - // the values of following two will be interpreted by ReturnedBufferSize() - // as 'width' and 'height' in the size calculation. - *output_size = image_size; - *unused = 1; - return image_size ? output : NULL; -} - -static uint8_t* EncodeLossless(const uint8_t* rgb, - int width, int height, int stride, - WebPEncodeLosslessFunction encfn, - int* output_size, int* unused) { - uint8_t* output = NULL; - const size_t image_size = encfn(rgb, width, height, stride, &output); - // the values of the following two will be interpreted by - // ReturnedBufferSize() as 'width' and 'height' in the size calculation. - *output_size = image_size; - *unused = 1; - return image_size ? output : NULL; -} -%} - -#endif /* SWIGJAVA || SWIGPYTHON */ - -//------------------------------------------------------------------------------ -// libwebp/encode wrapper functions - -#if defined(SWIGJAVA) || defined(SWIGPYTHON) - -%apply int* INPUT { int* unused1, int* unused2 } -%apply int* OUTPUT { int* output_size } - -// free the buffer returned by these functions after copying into -// the native type -%newobject wrap_WebPEncodeRGB; -%newobject wrap_WebPEncodeBGR; -%newobject wrap_WebPEncodeRGBA; -%newobject wrap_WebPEncodeBGRA; -%newobject wrap_WebPEncodeLosslessRGB; -%newobject wrap_WebPEncodeLosslessBGR; -%newobject wrap_WebPEncodeLosslessRGBA; -%newobject wrap_WebPEncodeLosslessBGRA; - -#ifdef SWIGJAVA -// There's no reason to call these directly -%javamethodmodifiers wrap_WebPEncodeRGB "private"; -%javamethodmodifiers wrap_WebPEncodeBGR "private"; -%javamethodmodifiers wrap_WebPEncodeRGBA "private"; -%javamethodmodifiers wrap_WebPEncodeBGRA "private"; -%javamethodmodifiers wrap_WebPEncodeLosslessRGB "private"; -%javamethodmodifiers wrap_WebPEncodeLosslessBGR "private"; -%javamethodmodifiers wrap_WebPEncodeLosslessRGBA "private"; -%javamethodmodifiers wrap_WebPEncodeLosslessBGRA "private"; -#endif /* SWIGJAVA */ - -#ifdef SWIGPYTHON -// This autodoc will serve as a catch-all for wrap_*. -%feature("autodoc", "private, do not call directly."); -#endif - -%inline %{ -// Changes the return type of WebPEncode* to more closely match Decode*. -// This also makes it easier to wrap the output buffer in a native type rather -// than dealing with the return pointer. -// The additional parameters are to allow reuse of ReturnedBufferSize(), -// unused2 and output_size will be used in this case. -#define LOSSY_WRAPPER(FUNC) \ - static uint8_t* wrap_##FUNC( \ - const uint8_t* rgb, int* unused1, int* unused2, int* output_size, \ - int width, int height, int stride, float quality_factor) { \ - return EncodeLossy(rgb, width, height, stride, quality_factor, \ - FUNC, output_size, unused2); \ - } \ - -LOSSY_WRAPPER(WebPEncodeRGB) -LOSSY_WRAPPER(WebPEncodeBGR) -LOSSY_WRAPPER(WebPEncodeRGBA) -LOSSY_WRAPPER(WebPEncodeBGRA) - -#undef LOSSY_WRAPPER - -#define LOSSLESS_WRAPPER(FUNC) \ - static uint8_t* wrap_##FUNC( \ - const uint8_t* rgb, int* unused1, int* unused2, int* output_size, \ - int width, int height, int stride) { \ - return EncodeLossless(rgb, width, height, stride, \ - FUNC, output_size, unused2); \ - } \ - -LOSSLESS_WRAPPER(WebPEncodeLosslessRGB) -LOSSLESS_WRAPPER(WebPEncodeLosslessBGR) -LOSSLESS_WRAPPER(WebPEncodeLosslessRGBA) -LOSSLESS_WRAPPER(WebPEncodeLosslessBGRA) - -#undef LOSSLESS_WRAPPER - -%} - -#endif /* SWIGJAVA || SWIGPYTHON */ - -//------------------------------------------------------------------------------ -// Language specific - -#ifdef SWIGGO -%insert(go_wrapper) %{ - -// WebPGetInfo has 2 output parameters, provide a version in the more natural -// go idiom: -func WebPGetInfo(webp []byte) (ok bool, width int, height int) { - w := []int{0} - h := []int{0} - ok = Wrapped_WebPGetInfo(string(webp), w, h) != 0 - width = w[0] - height = h[0] - return -} - -%} -#endif /* SWIGGO */ - -#ifdef SWIGJAVA -%{ -/* Work around broken gcj jni.h */ -#ifdef __GCJ_JNI_H__ -# undef JNIEXPORT -# define JNIEXPORT -# undef JNICALL -# define JNICALL -#endif -%} - -%pragma(java) modulecode=%{ - private static final int UNUSED = 1; - private static int outputSize[] = { 0 }; -%} - - -%define CALL_ENCODE_LOSSY_WRAPPER(func) -%pragma(java) modulecode=%{ - public static byte[] func( - byte[] rgb, int width, int height, int stride, float quality_factor) { - return wrap_##func( - rgb, UNUSED, UNUSED, outputSize, width, height, stride, quality_factor); - } -%} -%enddef - -%define CALL_ENCODE_LOSSLESS_WRAPPER(func) -%pragma(java) modulecode=%{ - public static byte[] func( - byte[] rgb, int width, int height, int stride) { - return wrap_##func( - rgb, UNUSED, UNUSED, outputSize, width, height, stride); - } -%} -%enddef - -CALL_ENCODE_LOSSY_WRAPPER(WebPEncodeRGB) -CALL_ENCODE_LOSSY_WRAPPER(WebPEncodeRGBA) -CALL_ENCODE_LOSSY_WRAPPER(WebPEncodeBGR) -CALL_ENCODE_LOSSY_WRAPPER(WebPEncodeBGRA) -CALL_ENCODE_LOSSLESS_WRAPPER(WebPEncodeLosslessRGB) -CALL_ENCODE_LOSSLESS_WRAPPER(WebPEncodeLosslessRGBA) -CALL_ENCODE_LOSSLESS_WRAPPER(WebPEncodeLosslessBGR) -CALL_ENCODE_LOSSLESS_WRAPPER(WebPEncodeLosslessBGRA) -#endif /* SWIGJAVA */ - -#ifdef SWIGPYTHON -%pythoncode %{ -_UNUSED = 1 -%} - -%define CALL_ENCODE_LOSSY_WRAPPER(func) -%pythoncode %{ -def func(rgb, width, height, stride, quality_factor): - """func(uint8_t rgb, int width, int height, int stride, float quality_factor) -> lossy_webp""" - webp = wrap_##func( - rgb, _UNUSED, _UNUSED, width, height, stride, quality_factor) - if len(webp[0]) == 0: - return None - return webp[0] -%} -%enddef - -%define CALL_ENCODE_LOSSLESS_WRAPPER(func) -%pythoncode %{ -def func(rgb, width, height, stride): - """func(uint8_t rgb, int width, int height, int stride) -> lossless_webp""" - webp = wrap_##func(rgb, _UNUSED, _UNUSED, width, height, stride) - if len(webp[0]) == 0: - return None - return webp[0] -%} -%enddef - -CALL_ENCODE_LOSSY_WRAPPER(WebPEncodeRGB) -CALL_ENCODE_LOSSY_WRAPPER(WebPEncodeRGBA) -CALL_ENCODE_LOSSY_WRAPPER(WebPEncodeBGR) -CALL_ENCODE_LOSSY_WRAPPER(WebPEncodeBGRA) -CALL_ENCODE_LOSSLESS_WRAPPER(WebPEncodeLosslessRGB) -CALL_ENCODE_LOSSLESS_WRAPPER(WebPEncodeLosslessRGBA) -CALL_ENCODE_LOSSLESS_WRAPPER(WebPEncodeLosslessBGR) -CALL_ENCODE_LOSSLESS_WRAPPER(WebPEncodeLosslessBGRA) -#endif /* SWIGPYTHON */ diff --git a/Extended/libwebp/swig/libwebp_gc.c b/Extended/libwebp/swig/libwebp_gc.c deleted file mode 100644 index 308b7f8..0000000 --- a/Extended/libwebp/swig/libwebp_gc.c +++ /dev/null @@ -1,52 +0,0 @@ -/* ---------------------------------------------------------------------------- - * This file was automatically generated by SWIG (http://www.swig.org). - * Version 2.0.10 - * - * This file is not intended to be easily readable and contains a number of - * coding conventions designed to improve portability and efficiency. Do not make - * changes to this file unless you know what you are doing--modify the SWIG - * interface file instead. - * ----------------------------------------------------------------------------- */ - -/* This file should be compiled with 6c/8c. */ -#pragma dynimport _ _ "libwebp_go.so" - -#include "runtime.h" -#include "cgocall.h" - -#ifdef _64BIT -#define SWIG_PARM_SIZE 8 -#else -#define SWIG_PARM_SIZE 4 -#endif - -#pragma dynimport _wrap_WebPGetDecoderVersion _wrap_WebPGetDecoderVersion "" -extern void (*_wrap_WebPGetDecoderVersion)(void*); -static void (*x_wrap_WebPGetDecoderVersion)(void*) = _wrap_WebPGetDecoderVersion; - -void -·WebPGetDecoderVersion(struct { - uint8 x[SWIG_PARM_SIZE]; -} p) - -{ - runtime·cgocall(x_wrap_WebPGetDecoderVersion, &p); -} - - - -#pragma dynimport _wrap_wrapped_WebPGetInfo _wrap_wrapped_WebPGetInfo "" -extern void (*_wrap_wrapped_WebPGetInfo)(void*); -static void (*x_wrap_wrapped_WebPGetInfo)(void*) = _wrap_wrapped_WebPGetInfo; - -void -·Wrapped_WebPGetInfo(struct { - uint8 x[(2 * SWIG_PARM_SIZE) + (3 * SWIG_PARM_SIZE) + (3 * SWIG_PARM_SIZE) + SWIG_PARM_SIZE]; -} p) - -{ - runtime·cgocall(x_wrap_wrapped_WebPGetInfo, &p); -} - - - diff --git a/Extended/libwebp/swig/libwebp_go_wrap.c b/Extended/libwebp/swig/libwebp_go_wrap.c deleted file mode 100644 index 351d523..0000000 --- a/Extended/libwebp/swig/libwebp_go_wrap.c +++ /dev/null @@ -1,274 +0,0 @@ -/* ---------------------------------------------------------------------------- - * This file was automatically generated by SWIG (http://www.swig.org). - * Version 2.0.10 - * - * This file is not intended to be easily readable and contains a number of - * coding conventions designed to improve portability and efficiency. Do not make - * changes to this file unless you know what you are doing--modify the SWIG - * interface file instead. - * ----------------------------------------------------------------------------- */ -#define SWIGMODULE libwebp -/* ----------------------------------------------------------------------------- - * This section contains generic SWIG labels for method/variable - * declarations/attributes, and other compiler dependent labels. - * ----------------------------------------------------------------------------- */ - -/* template workaround for compilers that cannot correctly implement the C++ standard */ -#ifndef SWIGTEMPLATEDISAMBIGUATOR -# if defined(__SUNPRO_CC) && (__SUNPRO_CC <= 0x560) -# define SWIGTEMPLATEDISAMBIGUATOR template -# elif defined(__HP_aCC) -/* Needed even with `aCC -AA' when `aCC -V' reports HP ANSI C++ B3910B A.03.55 */ -/* If we find a maximum version that requires this, the test would be __HP_aCC <= 35500 for A.03.55 */ -# define SWIGTEMPLATEDISAMBIGUATOR template -# else -# define SWIGTEMPLATEDISAMBIGUATOR -# endif -#endif - -/* inline attribute */ -#ifndef SWIGINLINE -# if defined(__cplusplus) || (defined(__GNUC__) && !defined(__STRICT_ANSI__)) -# define SWIGINLINE inline -# else -# define SWIGINLINE -# endif -#endif - -/* attribute recognised by some compilers to avoid 'unused' warnings */ -#ifndef SWIGUNUSED -# if defined(__GNUC__) -# if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) -# define SWIGUNUSED __attribute__ ((__unused__)) -# else -# define SWIGUNUSED -# endif -# elif defined(__ICC) -# define SWIGUNUSED __attribute__ ((__unused__)) -# else -# define SWIGUNUSED -# endif -#endif - -#ifndef SWIG_MSC_UNSUPPRESS_4505 -# if defined(_MSC_VER) -# pragma warning(disable : 4505) /* unreferenced local function has been removed */ -# endif -#endif - -#ifndef SWIGUNUSEDPARM -# ifdef __cplusplus -# define SWIGUNUSEDPARM(p) -# else -# define SWIGUNUSEDPARM(p) p SWIGUNUSED -# endif -#endif - -/* internal SWIG method */ -#ifndef SWIGINTERN -# define SWIGINTERN static SWIGUNUSED -#endif - -/* internal inline SWIG method */ -#ifndef SWIGINTERNINLINE -# define SWIGINTERNINLINE SWIGINTERN SWIGINLINE -#endif - -/* exporting methods */ -#if (__GNUC__ >= 4) || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) -# ifndef GCC_HASCLASSVISIBILITY -# define GCC_HASCLASSVISIBILITY -# endif -#endif - -#ifndef SWIGEXPORT -# if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__) -# if defined(STATIC_LINKED) -# define SWIGEXPORT -# else -# define SWIGEXPORT __declspec(dllexport) -# endif -# else -# if defined(__GNUC__) && defined(GCC_HASCLASSVISIBILITY) -# define SWIGEXPORT __attribute__ ((visibility("default"))) -# else -# define SWIGEXPORT -# endif -# endif -#endif - -/* calling conventions for Windows */ -#ifndef SWIGSTDCALL -# if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__) -# define SWIGSTDCALL __stdcall -# else -# define SWIGSTDCALL -# endif -#endif - -/* Deal with Microsoft's attempt at deprecating C standard runtime functions */ -#if !defined(SWIG_NO_CRT_SECURE_NO_DEPRECATE) && defined(_MSC_VER) && !defined(_CRT_SECURE_NO_DEPRECATE) -# define _CRT_SECURE_NO_DEPRECATE -#endif - -/* Deal with Microsoft's attempt at deprecating methods in the standard C++ library */ -#if !defined(SWIG_NO_SCL_SECURE_NO_DEPRECATE) && defined(_MSC_VER) && !defined(_SCL_SECURE_NO_DEPRECATE) -# define _SCL_SECURE_NO_DEPRECATE -#endif - - - -#include -#include -#include -#include -#include - - - -typedef long long intgo; -typedef unsigned long long uintgo; - - - -typedef struct { char *p; intgo n; } _gostring_; -typedef struct { void* array; intgo len; intgo cap; } _goslice_; - - - - -#define swiggo_size_assert_eq(x, y, name) typedef char name[(x-y)*(x-y)*-2+1]; -#define swiggo_size_assert(t, n) swiggo_size_assert_eq(sizeof(t), n, swiggo_sizeof_##t##_is_not_##n) - -swiggo_size_assert(char, 1) -swiggo_size_assert(short, 2) -swiggo_size_assert(int, 4) -typedef long long swiggo_long_long; -swiggo_size_assert(swiggo_long_long, 8) -swiggo_size_assert(float, 4) -swiggo_size_assert(double, 8) - -#ifdef __cplusplus -extern "C" { -#endif -extern void crosscall2(void (*fn)(void *, int), void *, int); -extern void _cgo_allocate(void *, int); -extern void _cgo_panic(void *, int); -#ifdef __cplusplus -} -#endif - -static void *_swig_goallocate(size_t len) { - struct { - size_t len; - void *ret; - } a; - a.len = len; - crosscall2(_cgo_allocate, &a, (int) sizeof a); - return a.ret; -} - -static void _swig_gopanic(const char *p) { - struct { - const char *p; - } a; - a.p = p; - crosscall2(_cgo_panic, &a, (int) sizeof a); -} - - - - -static _gostring_ _swig_makegostring(const char *p, size_t l) { - _gostring_ ret; - ret.p = (char*)_swig_goallocate(l + 1); - memcpy(ret.p, p, l); - ret.n = l; - return ret; -} - -#define SWIG_contract_assert(expr, msg) \ - if (!(expr)) { _swig_gopanic(msg); } else - - -#define SWIG_exception(code, msg) _swig_gopanic(msg) - - -#include "webp/decode.h" -#include "webp/encode.h" - -#ifdef __cplusplus -extern "C" { -#endif - -void -_wrap_WebPGetDecoderVersion(void *swig_v) -{ - int result; - - struct swigargs { - long : 0; - intgo result; - } *swig_a = (struct swigargs *) swig_v; - - - result = (int)WebPGetDecoderVersion(); - swig_a->result = result; -} - - -void -_wrap_wrapped_WebPGetInfo(void *swig_v) -{ - uint8_t *arg1 = (uint8_t *) 0 ; - size_t arg2 ; - int *arg3 = (int *) 0 ; - int *arg4 = (int *) 0 ; - int temp3 ; - int temp4 ; - int result; - - struct swigargs { - _gostring_ arg1; - _goslice_ arg3; - _goslice_ arg4; - long : 0; - intgo result; - } *swig_a = (struct swigargs *) swig_v; - - - arg1 = (uint8_t *)swig_a->arg1.p; - arg2 = (size_t)swig_a->arg1.n; - - { - if (swig_a->arg3.len == 0) { - _swig_gopanic("array must contain at least 1 element"); - } - arg3 = &temp3; - } - { - if (swig_a->arg4.len == 0) { - _swig_gopanic("array must contain at least 1 element"); - } - arg4 = &temp4; - } - - result = (int)WebPGetInfo((uint8_t const *)arg1,arg2,arg3,arg4); - swig_a->result = result; - { - int* a = (int *) swig_a->arg3.array; - a[0] = temp3; - } - { - int* a = (int *) swig_a->arg4.array; - a[0] = temp4; - } - - -} - - -#ifdef __cplusplus -} -#endif - diff --git a/Extended/libwebp/swig/libwebp_java_wrap.c b/Extended/libwebp/swig/libwebp_java_wrap.c deleted file mode 100644 index c8d4b13..0000000 --- a/Extended/libwebp/swig/libwebp_java_wrap.c +++ /dev/null @@ -1,1765 +0,0 @@ -/* ---------------------------------------------------------------------------- - * This file was automatically generated by SWIG (http://www.swig.org). - * Version 2.0.4 - * - * This file is not intended to be easily readable and contains a number of - * coding conventions designed to improve portability and efficiency. Do not make - * changes to this file unless you know what you are doing--modify the SWIG - * interface file instead. - * ----------------------------------------------------------------------------- */ - -#define SWIGJAVA - -/* ----------------------------------------------------------------------------- - * This section contains generic SWIG labels for method/variable - * declarations/attributes, and other compiler dependent labels. - * ----------------------------------------------------------------------------- */ - -/* template workaround for compilers that cannot correctly implement the C++ standard */ -#ifndef SWIGTEMPLATEDISAMBIGUATOR -# if defined(__SUNPRO_CC) && (__SUNPRO_CC <= 0x560) -# define SWIGTEMPLATEDISAMBIGUATOR template -# elif defined(__HP_aCC) -/* Needed even with `aCC -AA' when `aCC -V' reports HP ANSI C++ B3910B A.03.55 */ -/* If we find a maximum version that requires this, the test would be __HP_aCC <= 35500 for A.03.55 */ -# define SWIGTEMPLATEDISAMBIGUATOR template -# else -# define SWIGTEMPLATEDISAMBIGUATOR -# endif -#endif - -/* inline attribute */ -#ifndef SWIGINLINE -# if defined(__cplusplus) || (defined(__GNUC__) && !defined(__STRICT_ANSI__)) -# define SWIGINLINE inline -# else -# define SWIGINLINE -# endif -#endif - -/* attribute recognised by some compilers to avoid 'unused' warnings */ -#ifndef SWIGUNUSED -# if defined(__GNUC__) -# if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) -# define SWIGUNUSED __attribute__ ((__unused__)) -# else -# define SWIGUNUSED -# endif -# elif defined(__ICC) -# define SWIGUNUSED __attribute__ ((__unused__)) -# else -# define SWIGUNUSED -# endif -#endif - -#ifndef SWIG_MSC_UNSUPPRESS_4505 -# if defined(_MSC_VER) -# pragma warning(disable : 4505) /* unreferenced local function has been removed */ -# endif -#endif - -#ifndef SWIGUNUSEDPARM -# ifdef __cplusplus -# define SWIGUNUSEDPARM(p) -# else -# define SWIGUNUSEDPARM(p) p SWIGUNUSED -# endif -#endif - -/* internal SWIG method */ -#ifndef SWIGINTERN -# define SWIGINTERN static SWIGUNUSED -#endif - -/* internal inline SWIG method */ -#ifndef SWIGINTERNINLINE -# define SWIGINTERNINLINE SWIGINTERN SWIGINLINE -#endif - -/* exporting methods */ -#if (__GNUC__ >= 4) || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) -# ifndef GCC_HASCLASSVISIBILITY -# define GCC_HASCLASSVISIBILITY -# endif -#endif - -#ifndef SWIGEXPORT -# if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__) -# if defined(STATIC_LINKED) -# define SWIGEXPORT -# else -# define SWIGEXPORT __declspec(dllexport) -# endif -# else -# if defined(__GNUC__) && defined(GCC_HASCLASSVISIBILITY) -# define SWIGEXPORT __attribute__ ((visibility("default"))) -# else -# define SWIGEXPORT -# endif -# endif -#endif - -/* calling conventions for Windows */ -#ifndef SWIGSTDCALL -# if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__) -# define SWIGSTDCALL __stdcall -# else -# define SWIGSTDCALL -# endif -#endif - -/* Deal with Microsoft's attempt at deprecating C standard runtime functions */ -#if !defined(SWIG_NO_CRT_SECURE_NO_DEPRECATE) && defined(_MSC_VER) && !defined(_CRT_SECURE_NO_DEPRECATE) -# define _CRT_SECURE_NO_DEPRECATE -#endif - -/* Deal with Microsoft's attempt at deprecating methods in the standard C++ library */ -#if !defined(SWIG_NO_SCL_SECURE_NO_DEPRECATE) && defined(_MSC_VER) && !defined(_SCL_SECURE_NO_DEPRECATE) -# define _SCL_SECURE_NO_DEPRECATE -#endif - - - -/* Fix for jlong on some versions of gcc on Windows */ -#if defined(__GNUC__) && !defined(__INTEL_COMPILER) - typedef long long __int64; -#endif - -/* Fix for jlong on 64-bit x86 Solaris */ -#if defined(__x86_64) -# ifdef _LP64 -# undef _LP64 -# endif -#endif - -#include -#include -#include - - -/* Support for throwing Java exceptions */ -typedef enum { - SWIG_JavaOutOfMemoryError = 1, - SWIG_JavaIOException, - SWIG_JavaRuntimeException, - SWIG_JavaIndexOutOfBoundsException, - SWIG_JavaArithmeticException, - SWIG_JavaIllegalArgumentException, - SWIG_JavaNullPointerException, - SWIG_JavaDirectorPureVirtual, - SWIG_JavaUnknownError -} SWIG_JavaExceptionCodes; - -typedef struct { - SWIG_JavaExceptionCodes code; - const char *java_exception; -} SWIG_JavaExceptions_t; - - -static void SWIGUNUSED SWIG_JavaThrowException(JNIEnv *jenv, SWIG_JavaExceptionCodes code, const char *msg) { - jclass excep; - static const SWIG_JavaExceptions_t java_exceptions[] = { - { SWIG_JavaOutOfMemoryError, "java/lang/OutOfMemoryError" }, - { SWIG_JavaIOException, "java/io/IOException" }, - { SWIG_JavaRuntimeException, "java/lang/RuntimeException" }, - { SWIG_JavaIndexOutOfBoundsException, "java/lang/IndexOutOfBoundsException" }, - { SWIG_JavaArithmeticException, "java/lang/ArithmeticException" }, - { SWIG_JavaIllegalArgumentException, "java/lang/IllegalArgumentException" }, - { SWIG_JavaNullPointerException, "java/lang/NullPointerException" }, - { SWIG_JavaDirectorPureVirtual, "java/lang/RuntimeException" }, - { SWIG_JavaUnknownError, "java/lang/UnknownError" }, - { (SWIG_JavaExceptionCodes)0, "java/lang/UnknownError" } - }; - const SWIG_JavaExceptions_t *except_ptr = java_exceptions; - - while (except_ptr->code != code && except_ptr->code) - except_ptr++; - - (*jenv)->ExceptionClear(jenv); - excep = (*jenv)->FindClass(jenv, except_ptr->java_exception); - if (excep) - (*jenv)->ThrowNew(jenv, excep, msg); -} - - -/* Contract support */ - -#define SWIG_contract_assert(nullreturn, expr, msg) if (!(expr)) {SWIG_JavaThrowException(jenv, SWIG_JavaIllegalArgumentException, msg); return nullreturn; } else - -/* Errors in SWIG */ -#define SWIG_UnknownError -1 -#define SWIG_IOError -2 -#define SWIG_RuntimeError -3 -#define SWIG_IndexError -4 -#define SWIG_TypeError -5 -#define SWIG_DivisionByZero -6 -#define SWIG_OverflowError -7 -#define SWIG_SyntaxError -8 -#define SWIG_ValueError -9 -#define SWIG_SystemError -10 -#define SWIG_AttributeError -11 -#define SWIG_MemoryError -12 -#define SWIG_NullReferenceError -13 - - - - -SWIGINTERN void SWIG_JavaException(JNIEnv *jenv, int code, const char *msg) { - SWIG_JavaExceptionCodes exception_code = SWIG_JavaUnknownError; - switch(code) { - case SWIG_MemoryError: - exception_code = SWIG_JavaOutOfMemoryError; - break; - case SWIG_IOError: - exception_code = SWIG_JavaIOException; - break; - case SWIG_SystemError: - case SWIG_RuntimeError: - exception_code = SWIG_JavaRuntimeException; - break; - case SWIG_OverflowError: - case SWIG_IndexError: - exception_code = SWIG_JavaIndexOutOfBoundsException; - break; - case SWIG_DivisionByZero: - exception_code = SWIG_JavaArithmeticException; - break; - case SWIG_SyntaxError: - case SWIG_ValueError: - case SWIG_TypeError: - exception_code = SWIG_JavaIllegalArgumentException; - break; - case SWIG_UnknownError: - default: - exception_code = SWIG_JavaUnknownError; - break; - } - SWIG_JavaThrowException(jenv, exception_code, msg); -} - - -#if defined(SWIG_NOINCLUDE) || defined(SWIG_NOARRAYS) - - -int SWIG_JavaArrayInSchar (JNIEnv *jenv, jbyte **jarr, signed char **carr, jbyteArray input); -void SWIG_JavaArrayArgoutSchar (JNIEnv *jenv, jbyte *jarr, signed char *carr, jbyteArray input); -jbyteArray SWIG_JavaArrayOutSchar (JNIEnv *jenv, signed char *result, jsize sz); - - -int SWIG_JavaArrayInUchar (JNIEnv *jenv, jshort **jarr, unsigned char **carr, jshortArray input); -void SWIG_JavaArrayArgoutUchar (JNIEnv *jenv, jshort *jarr, unsigned char *carr, jshortArray input); -jshortArray SWIG_JavaArrayOutUchar (JNIEnv *jenv, unsigned char *result, jsize sz); - - -int SWIG_JavaArrayInShort (JNIEnv *jenv, jshort **jarr, short **carr, jshortArray input); -void SWIG_JavaArrayArgoutShort (JNIEnv *jenv, jshort *jarr, short *carr, jshortArray input); -jshortArray SWIG_JavaArrayOutShort (JNIEnv *jenv, short *result, jsize sz); - - -int SWIG_JavaArrayInUshort (JNIEnv *jenv, jint **jarr, unsigned short **carr, jintArray input); -void SWIG_JavaArrayArgoutUshort (JNIEnv *jenv, jint *jarr, unsigned short *carr, jintArray input); -jintArray SWIG_JavaArrayOutUshort (JNIEnv *jenv, unsigned short *result, jsize sz); - - -int SWIG_JavaArrayInInt (JNIEnv *jenv, jint **jarr, int **carr, jintArray input); -void SWIG_JavaArrayArgoutInt (JNIEnv *jenv, jint *jarr, int *carr, jintArray input); -jintArray SWIG_JavaArrayOutInt (JNIEnv *jenv, int *result, jsize sz); - - -int SWIG_JavaArrayInUint (JNIEnv *jenv, jlong **jarr, unsigned int **carr, jlongArray input); -void SWIG_JavaArrayArgoutUint (JNIEnv *jenv, jlong *jarr, unsigned int *carr, jlongArray input); -jlongArray SWIG_JavaArrayOutUint (JNIEnv *jenv, unsigned int *result, jsize sz); - - -int SWIG_JavaArrayInLong (JNIEnv *jenv, jint **jarr, long **carr, jintArray input); -void SWIG_JavaArrayArgoutLong (JNIEnv *jenv, jint *jarr, long *carr, jintArray input); -jintArray SWIG_JavaArrayOutLong (JNIEnv *jenv, long *result, jsize sz); - - -int SWIG_JavaArrayInUlong (JNIEnv *jenv, jlong **jarr, unsigned long **carr, jlongArray input); -void SWIG_JavaArrayArgoutUlong (JNIEnv *jenv, jlong *jarr, unsigned long *carr, jlongArray input); -jlongArray SWIG_JavaArrayOutUlong (JNIEnv *jenv, unsigned long *result, jsize sz); - - -int SWIG_JavaArrayInLonglong (JNIEnv *jenv, jlong **jarr, jlong **carr, jlongArray input); -void SWIG_JavaArrayArgoutLonglong (JNIEnv *jenv, jlong *jarr, jlong *carr, jlongArray input); -jlongArray SWIG_JavaArrayOutLonglong (JNIEnv *jenv, jlong *result, jsize sz); - - -int SWIG_JavaArrayInFloat (JNIEnv *jenv, jfloat **jarr, float **carr, jfloatArray input); -void SWIG_JavaArrayArgoutFloat (JNIEnv *jenv, jfloat *jarr, float *carr, jfloatArray input); -jfloatArray SWIG_JavaArrayOutFloat (JNIEnv *jenv, float *result, jsize sz); - - -int SWIG_JavaArrayInDouble (JNIEnv *jenv, jdouble **jarr, double **carr, jdoubleArray input); -void SWIG_JavaArrayArgoutDouble (JNIEnv *jenv, jdouble *jarr, double *carr, jdoubleArray input); -jdoubleArray SWIG_JavaArrayOutDouble (JNIEnv *jenv, double *result, jsize sz); - - -#else - - -/* signed char[] support */ -int SWIG_JavaArrayInSchar (JNIEnv *jenv, jbyte **jarr, signed char **carr, jbyteArray input) { - int i; - jsize sz; - if (!input) { - SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "null array"); - return 0; - } - sz = (*jenv)->GetArrayLength(jenv, input); - *jarr = (*jenv)->GetByteArrayElements(jenv, input, 0); - if (!*jarr) - return 0; - *carr = (signed char*) calloc(sz, sizeof(signed char)); - if (!*carr) { - SWIG_JavaThrowException(jenv, SWIG_JavaOutOfMemoryError, "array memory allocation failed"); - return 0; - } - for (i=0; iGetArrayLength(jenv, input); - for (i=0; iReleaseByteArrayElements(jenv, input, jarr, 0); -} - -jbyteArray SWIG_JavaArrayOutSchar (JNIEnv *jenv, signed char *result, jsize sz) { - jbyte *arr; - int i; - jbyteArray jresult = (*jenv)->NewByteArray(jenv, sz); - if (!jresult) - return NULL; - arr = (*jenv)->GetByteArrayElements(jenv, jresult, 0); - if (!arr) - return NULL; - for (i=0; iReleaseByteArrayElements(jenv, jresult, arr, 0); - return jresult; -} - - -/* unsigned char[] support */ -int SWIG_JavaArrayInUchar (JNIEnv *jenv, jshort **jarr, unsigned char **carr, jshortArray input) { - int i; - jsize sz; - if (!input) { - SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "null array"); - return 0; - } - sz = (*jenv)->GetArrayLength(jenv, input); - *jarr = (*jenv)->GetShortArrayElements(jenv, input, 0); - if (!*jarr) - return 0; - *carr = (unsigned char*) calloc(sz, sizeof(unsigned char)); - if (!*carr) { - SWIG_JavaThrowException(jenv, SWIG_JavaOutOfMemoryError, "array memory allocation failed"); - return 0; - } - for (i=0; iGetArrayLength(jenv, input); - for (i=0; iReleaseShortArrayElements(jenv, input, jarr, 0); -} - -jshortArray SWIG_JavaArrayOutUchar (JNIEnv *jenv, unsigned char *result, jsize sz) { - jshort *arr; - int i; - jshortArray jresult = (*jenv)->NewShortArray(jenv, sz); - if (!jresult) - return NULL; - arr = (*jenv)->GetShortArrayElements(jenv, jresult, 0); - if (!arr) - return NULL; - for (i=0; iReleaseShortArrayElements(jenv, jresult, arr, 0); - return jresult; -} - - -/* short[] support */ -int SWIG_JavaArrayInShort (JNIEnv *jenv, jshort **jarr, short **carr, jshortArray input) { - int i; - jsize sz; - if (!input) { - SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "null array"); - return 0; - } - sz = (*jenv)->GetArrayLength(jenv, input); - *jarr = (*jenv)->GetShortArrayElements(jenv, input, 0); - if (!*jarr) - return 0; - *carr = (short*) calloc(sz, sizeof(short)); - if (!*carr) { - SWIG_JavaThrowException(jenv, SWIG_JavaOutOfMemoryError, "array memory allocation failed"); - return 0; - } - for (i=0; iGetArrayLength(jenv, input); - for (i=0; iReleaseShortArrayElements(jenv, input, jarr, 0); -} - -jshortArray SWIG_JavaArrayOutShort (JNIEnv *jenv, short *result, jsize sz) { - jshort *arr; - int i; - jshortArray jresult = (*jenv)->NewShortArray(jenv, sz); - if (!jresult) - return NULL; - arr = (*jenv)->GetShortArrayElements(jenv, jresult, 0); - if (!arr) - return NULL; - for (i=0; iReleaseShortArrayElements(jenv, jresult, arr, 0); - return jresult; -} - - -/* unsigned short[] support */ -int SWIG_JavaArrayInUshort (JNIEnv *jenv, jint **jarr, unsigned short **carr, jintArray input) { - int i; - jsize sz; - if (!input) { - SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "null array"); - return 0; - } - sz = (*jenv)->GetArrayLength(jenv, input); - *jarr = (*jenv)->GetIntArrayElements(jenv, input, 0); - if (!*jarr) - return 0; - *carr = (unsigned short*) calloc(sz, sizeof(unsigned short)); - if (!*carr) { - SWIG_JavaThrowException(jenv, SWIG_JavaOutOfMemoryError, "array memory allocation failed"); - return 0; - } - for (i=0; iGetArrayLength(jenv, input); - for (i=0; iReleaseIntArrayElements(jenv, input, jarr, 0); -} - -jintArray SWIG_JavaArrayOutUshort (JNIEnv *jenv, unsigned short *result, jsize sz) { - jint *arr; - int i; - jintArray jresult = (*jenv)->NewIntArray(jenv, sz); - if (!jresult) - return NULL; - arr = (*jenv)->GetIntArrayElements(jenv, jresult, 0); - if (!arr) - return NULL; - for (i=0; iReleaseIntArrayElements(jenv, jresult, arr, 0); - return jresult; -} - - -/* int[] support */ -int SWIG_JavaArrayInInt (JNIEnv *jenv, jint **jarr, int **carr, jintArray input) { - int i; - jsize sz; - if (!input) { - SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "null array"); - return 0; - } - sz = (*jenv)->GetArrayLength(jenv, input); - *jarr = (*jenv)->GetIntArrayElements(jenv, input, 0); - if (!*jarr) - return 0; - *carr = (int*) calloc(sz, sizeof(int)); - if (!*carr) { - SWIG_JavaThrowException(jenv, SWIG_JavaOutOfMemoryError, "array memory allocation failed"); - return 0; - } - for (i=0; iGetArrayLength(jenv, input); - for (i=0; iReleaseIntArrayElements(jenv, input, jarr, 0); -} - -jintArray SWIG_JavaArrayOutInt (JNIEnv *jenv, int *result, jsize sz) { - jint *arr; - int i; - jintArray jresult = (*jenv)->NewIntArray(jenv, sz); - if (!jresult) - return NULL; - arr = (*jenv)->GetIntArrayElements(jenv, jresult, 0); - if (!arr) - return NULL; - for (i=0; iReleaseIntArrayElements(jenv, jresult, arr, 0); - return jresult; -} - - -/* unsigned int[] support */ -int SWIG_JavaArrayInUint (JNIEnv *jenv, jlong **jarr, unsigned int **carr, jlongArray input) { - int i; - jsize sz; - if (!input) { - SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "null array"); - return 0; - } - sz = (*jenv)->GetArrayLength(jenv, input); - *jarr = (*jenv)->GetLongArrayElements(jenv, input, 0); - if (!*jarr) - return 0; - *carr = (unsigned int*) calloc(sz, sizeof(unsigned int)); - if (!*carr) { - SWIG_JavaThrowException(jenv, SWIG_JavaOutOfMemoryError, "array memory allocation failed"); - return 0; - } - for (i=0; iGetArrayLength(jenv, input); - for (i=0; iReleaseLongArrayElements(jenv, input, jarr, 0); -} - -jlongArray SWIG_JavaArrayOutUint (JNIEnv *jenv, unsigned int *result, jsize sz) { - jlong *arr; - int i; - jlongArray jresult = (*jenv)->NewLongArray(jenv, sz); - if (!jresult) - return NULL; - arr = (*jenv)->GetLongArrayElements(jenv, jresult, 0); - if (!arr) - return NULL; - for (i=0; iReleaseLongArrayElements(jenv, jresult, arr, 0); - return jresult; -} - - -/* long[] support */ -int SWIG_JavaArrayInLong (JNIEnv *jenv, jint **jarr, long **carr, jintArray input) { - int i; - jsize sz; - if (!input) { - SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "null array"); - return 0; - } - sz = (*jenv)->GetArrayLength(jenv, input); - *jarr = (*jenv)->GetIntArrayElements(jenv, input, 0); - if (!*jarr) - return 0; - *carr = (long*) calloc(sz, sizeof(long)); - if (!*carr) { - SWIG_JavaThrowException(jenv, SWIG_JavaOutOfMemoryError, "array memory allocation failed"); - return 0; - } - for (i=0; iGetArrayLength(jenv, input); - for (i=0; iReleaseIntArrayElements(jenv, input, jarr, 0); -} - -jintArray SWIG_JavaArrayOutLong (JNIEnv *jenv, long *result, jsize sz) { - jint *arr; - int i; - jintArray jresult = (*jenv)->NewIntArray(jenv, sz); - if (!jresult) - return NULL; - arr = (*jenv)->GetIntArrayElements(jenv, jresult, 0); - if (!arr) - return NULL; - for (i=0; iReleaseIntArrayElements(jenv, jresult, arr, 0); - return jresult; -} - - -/* unsigned long[] support */ -int SWIG_JavaArrayInUlong (JNIEnv *jenv, jlong **jarr, unsigned long **carr, jlongArray input) { - int i; - jsize sz; - if (!input) { - SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "null array"); - return 0; - } - sz = (*jenv)->GetArrayLength(jenv, input); - *jarr = (*jenv)->GetLongArrayElements(jenv, input, 0); - if (!*jarr) - return 0; - *carr = (unsigned long*) calloc(sz, sizeof(unsigned long)); - if (!*carr) { - SWIG_JavaThrowException(jenv, SWIG_JavaOutOfMemoryError, "array memory allocation failed"); - return 0; - } - for (i=0; iGetArrayLength(jenv, input); - for (i=0; iReleaseLongArrayElements(jenv, input, jarr, 0); -} - -jlongArray SWIG_JavaArrayOutUlong (JNIEnv *jenv, unsigned long *result, jsize sz) { - jlong *arr; - int i; - jlongArray jresult = (*jenv)->NewLongArray(jenv, sz); - if (!jresult) - return NULL; - arr = (*jenv)->GetLongArrayElements(jenv, jresult, 0); - if (!arr) - return NULL; - for (i=0; iReleaseLongArrayElements(jenv, jresult, arr, 0); - return jresult; -} - - -/* jlong[] support */ -int SWIG_JavaArrayInLonglong (JNIEnv *jenv, jlong **jarr, jlong **carr, jlongArray input) { - int i; - jsize sz; - if (!input) { - SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "null array"); - return 0; - } - sz = (*jenv)->GetArrayLength(jenv, input); - *jarr = (*jenv)->GetLongArrayElements(jenv, input, 0); - if (!*jarr) - return 0; - *carr = (jlong*) calloc(sz, sizeof(jlong)); - if (!*carr) { - SWIG_JavaThrowException(jenv, SWIG_JavaOutOfMemoryError, "array memory allocation failed"); - return 0; - } - for (i=0; iGetArrayLength(jenv, input); - for (i=0; iReleaseLongArrayElements(jenv, input, jarr, 0); -} - -jlongArray SWIG_JavaArrayOutLonglong (JNIEnv *jenv, jlong *result, jsize sz) { - jlong *arr; - int i; - jlongArray jresult = (*jenv)->NewLongArray(jenv, sz); - if (!jresult) - return NULL; - arr = (*jenv)->GetLongArrayElements(jenv, jresult, 0); - if (!arr) - return NULL; - for (i=0; iReleaseLongArrayElements(jenv, jresult, arr, 0); - return jresult; -} - - -/* float[] support */ -int SWIG_JavaArrayInFloat (JNIEnv *jenv, jfloat **jarr, float **carr, jfloatArray input) { - int i; - jsize sz; - if (!input) { - SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "null array"); - return 0; - } - sz = (*jenv)->GetArrayLength(jenv, input); - *jarr = (*jenv)->GetFloatArrayElements(jenv, input, 0); - if (!*jarr) - return 0; - *carr = (float*) calloc(sz, sizeof(float)); - if (!*carr) { - SWIG_JavaThrowException(jenv, SWIG_JavaOutOfMemoryError, "array memory allocation failed"); - return 0; - } - for (i=0; iGetArrayLength(jenv, input); - for (i=0; iReleaseFloatArrayElements(jenv, input, jarr, 0); -} - -jfloatArray SWIG_JavaArrayOutFloat (JNIEnv *jenv, float *result, jsize sz) { - jfloat *arr; - int i; - jfloatArray jresult = (*jenv)->NewFloatArray(jenv, sz); - if (!jresult) - return NULL; - arr = (*jenv)->GetFloatArrayElements(jenv, jresult, 0); - if (!arr) - return NULL; - for (i=0; iReleaseFloatArrayElements(jenv, jresult, arr, 0); - return jresult; -} - - -/* double[] support */ -int SWIG_JavaArrayInDouble (JNIEnv *jenv, jdouble **jarr, double **carr, jdoubleArray input) { - int i; - jsize sz; - if (!input) { - SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "null array"); - return 0; - } - sz = (*jenv)->GetArrayLength(jenv, input); - *jarr = (*jenv)->GetDoubleArrayElements(jenv, input, 0); - if (!*jarr) - return 0; - *carr = (double*) calloc(sz, sizeof(double)); - if (!*carr) { - SWIG_JavaThrowException(jenv, SWIG_JavaOutOfMemoryError, "array memory allocation failed"); - return 0; - } - for (i=0; iGetArrayLength(jenv, input); - for (i=0; iReleaseDoubleArrayElements(jenv, input, jarr, 0); -} - -jdoubleArray SWIG_JavaArrayOutDouble (JNIEnv *jenv, double *result, jsize sz) { - jdouble *arr; - int i; - jdoubleArray jresult = (*jenv)->NewDoubleArray(jenv, sz); - if (!jresult) - return NULL; - arr = (*jenv)->GetDoubleArrayElements(jenv, jresult, 0); - if (!arr) - return NULL; - for (i=0; iReleaseDoubleArrayElements(jenv, jresult, arr, 0); - return jresult; -} - - -#endif - - -#include "webp/types.h" - - -int SWIG_JavaArrayInUint8 (JNIEnv *jenv, jbyte **jarr, uint8_t **carr, jbyteArray input); -void SWIG_JavaArrayArgoutUint8 (JNIEnv *jenv, jbyte *jarr, uint8_t *carr, jbyteArray input); -jbyteArray SWIG_JavaArrayOutUint8 (JNIEnv *jenv, uint8_t *result, jsize sz); - - -/* uint8_t[] support */ -int SWIG_JavaArrayInUint8 (JNIEnv *jenv, jbyte **jarr, uint8_t **carr, jbyteArray input) { - int i; - jsize sz; - if (!input) { - SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "null array"); - return 0; - } - sz = (*jenv)->GetArrayLength(jenv, input); - *jarr = (*jenv)->GetByteArrayElements(jenv, input, 0); - if (!*jarr) - return 0; - *carr = (uint8_t*) calloc(sz, sizeof(uint8_t)); - if (!*carr) { - SWIG_JavaThrowException(jenv, SWIG_JavaOutOfMemoryError, "array memory allocation failed"); - return 0; - } - for (i=0; iGetArrayLength(jenv, input); - for (i=0; iReleaseByteArrayElements(jenv, input, jarr, 0); -} - -jbyteArray SWIG_JavaArrayOutUint8 (JNIEnv *jenv, uint8_t *result, jsize sz) { - jbyte *arr; - int i; - jbyteArray jresult = (*jenv)->NewByteArray(jenv, sz); - if (!jresult) - return NULL; - arr = (*jenv)->GetByteArrayElements(jenv, jresult, 0); - if (!arr) - return NULL; - for (i=0; iReleaseByteArrayElements(jenv, jresult, arr, 0); - return jresult; -} - - -#include "webp/decode.h" -#include "webp/encode.h" - - -#define FillMeInAsSizeCannotBeDeterminedAutomatically \ - (result ? (jint)ReturnedBufferSize(__FUNCTION__, arg3, arg4) : 0) - - -static size_t ReturnedBufferSize( - const char* function, int* width, int* height) { - static const struct sizemap { - const char* function; - int size_multiplier; - } size_map[] = { -#ifdef SWIGJAVA - { "Java_com_google_webp_libwebpJNI_WebPDecodeRGB", 3 }, - { "Java_com_google_webp_libwebpJNI_WebPDecodeRGBA", 4 }, - { "Java_com_google_webp_libwebpJNI_WebPDecodeARGB", 4 }, - { "Java_com_google_webp_libwebpJNI_WebPDecodeBGR", 3 }, - { "Java_com_google_webp_libwebpJNI_WebPDecodeBGRA", 4 }, - { "Java_com_google_webp_libwebpJNI_wrap_1WebPEncodeRGB", 1 }, - { "Java_com_google_webp_libwebpJNI_wrap_1WebPEncodeBGR", 1 }, - { "Java_com_google_webp_libwebpJNI_wrap_1WebPEncodeRGBA", 1 }, - { "Java_com_google_webp_libwebpJNI_wrap_1WebPEncodeBGRA", 1 }, - { "Java_com_google_webp_libwebpJNI_wrap_1WebPEncodeLosslessRGB", 1 }, - { "Java_com_google_webp_libwebpJNI_wrap_1WebPEncodeLosslessBGR", 1 }, - { "Java_com_google_webp_libwebpJNI_wrap_1WebPEncodeLosslessRGBA", 1 }, - { "Java_com_google_webp_libwebpJNI_wrap_1WebPEncodeLosslessBGRA", 1 }, -#endif -#ifdef SWIGPYTHON - { "WebPDecodeRGB", 3 }, - { "WebPDecodeRGBA", 4 }, - { "WebPDecodeARGB", 4 }, - { "WebPDecodeBGR", 3 }, - { "WebPDecodeBGRA", 4 }, - { "wrap_WebPEncodeRGB", 1 }, - { "wrap_WebPEncodeBGR", 1 }, - { "wrap_WebPEncodeRGBA", 1 }, - { "wrap_WebPEncodeBGRA", 1 }, - { "wrap_WebPEncodeLosslessRGB", 1 }, - { "wrap_WebPEncodeLosslessBGR", 1 }, - { "wrap_WebPEncodeLosslessRGBA", 1 }, - { "wrap_WebPEncodeLosslessBGRA", 1 }, -#endif - { NULL, 0 } - }; - const struct sizemap* p; - size_t size = 0; - - for (p = size_map; p->function; ++p) { - if (!strcmp(function, p->function)) { - size = *width * *height * p->size_multiplier; - break; - } - } - - return size; -} - - -typedef size_t (*WebPEncodeFunction)(const uint8_t* rgb, - int width, int height, int stride, - float quality_factor, uint8_t** output); -typedef size_t (*WebPEncodeLosslessFunction)(const uint8_t* rgb, - int width, int height, int stride, - uint8_t** output); - -static uint8_t* EncodeLossy(const uint8_t* rgb, - int width, int height, int stride, - float quality_factor, - WebPEncodeFunction encfn, - int* output_size, int* unused) { - uint8_t* output = NULL; - const size_t image_size = - encfn(rgb, width, height, stride, quality_factor, &output); - // the values of following two will be interpreted by ReturnedBufferSize() - // as 'width' and 'height' in the size calculation. - *output_size = image_size; - *unused = 1; - return image_size ? output : NULL; -} - -static uint8_t* EncodeLossless(const uint8_t* rgb, - int width, int height, int stride, - WebPEncodeLosslessFunction encfn, - int* output_size, int* unused) { - uint8_t* output = NULL; - const size_t image_size = encfn(rgb, width, height, stride, &output); - // the values of the following two will be interpreted by - // ReturnedBufferSize() as 'width' and 'height' in the size calculation. - *output_size = image_size; - *unused = 1; - return image_size ? output : NULL; -} - - -// Changes the return type of WebPEncode* to more closely match Decode*. -// This also makes it easier to wrap the output buffer in a native type rather -// than dealing with the return pointer. -// The additional parameters are to allow reuse of ReturnedBufferSize(), -// unused2 and output_size will be used in this case. -#define LOSSY_WRAPPER(FUNC) \ - static uint8_t* wrap_##FUNC( \ - const uint8_t* rgb, int* unused1, int* unused2, int* output_size, \ - int width, int height, int stride, float quality_factor) { \ - return EncodeLossy(rgb, width, height, stride, quality_factor, \ - FUNC, output_size, unused2); \ - } \ - -LOSSY_WRAPPER(WebPEncodeRGB) -LOSSY_WRAPPER(WebPEncodeBGR) -LOSSY_WRAPPER(WebPEncodeRGBA) -LOSSY_WRAPPER(WebPEncodeBGRA) - -#undef LOSSY_WRAPPER - -#define LOSSLESS_WRAPPER(FUNC) \ - static uint8_t* wrap_##FUNC( \ - const uint8_t* rgb, int* unused1, int* unused2, int* output_size, \ - int width, int height, int stride) { \ - return EncodeLossless(rgb, width, height, stride, \ - FUNC, output_size, unused2); \ - } \ - -LOSSLESS_WRAPPER(WebPEncodeLosslessRGB) -LOSSLESS_WRAPPER(WebPEncodeLosslessBGR) -LOSSLESS_WRAPPER(WebPEncodeLosslessRGBA) -LOSSLESS_WRAPPER(WebPEncodeLosslessBGRA) - -#undef LOSSLESS_WRAPPER - - - -/* Work around broken gcj jni.h */ -#ifdef __GCJ_JNI_H__ -# undef JNIEXPORT -# define JNIEXPORT -# undef JNICALL -# define JNICALL -#endif - - -#ifdef __cplusplus -extern "C" { -#endif - -SWIGEXPORT jint JNICALL Java_com_google_webp_libwebpJNI_WebPGetDecoderVersion(JNIEnv *jenv, jclass jcls) { - jint jresult = 0 ; - int result; - - (void)jenv; - (void)jcls; - result = (int)WebPGetDecoderVersion(); - jresult = (jint)result; - return jresult; -} - - -SWIGEXPORT jint JNICALL Java_com_google_webp_libwebpJNI_WebPGetInfo(JNIEnv *jenv, jclass jcls, jbyteArray jarg1, jlong jarg2, jintArray jarg3, jintArray jarg4) { - jint jresult = 0 ; - uint8_t *arg1 = (uint8_t *) 0 ; - size_t arg2 ; - int *arg3 = (int *) 0 ; - int *arg4 = (int *) 0 ; - jbyte *jarr1 ; - int temp3 ; - int temp4 ; - int result; - - (void)jenv; - (void)jcls; - if (!SWIG_JavaArrayInUint8(jenv, &jarr1, &arg1, jarg1)) return 0; - arg2 = (size_t)jarg2; - { - if (!jarg3) { - SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "array null"); - return 0; - } - if ((*jenv)->GetArrayLength(jenv, jarg3) == 0) { - SWIG_JavaThrowException(jenv, SWIG_JavaIndexOutOfBoundsException, "Array must contain at least 1 element"); - return 0; - } - arg3 = &temp3; - } - { - if (!jarg4) { - SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "array null"); - return 0; - } - if ((*jenv)->GetArrayLength(jenv, jarg4) == 0) { - SWIG_JavaThrowException(jenv, SWIG_JavaIndexOutOfBoundsException, "Array must contain at least 1 element"); - return 0; - } - arg4 = &temp4; - } - result = (int)WebPGetInfo((uint8_t const *)arg1,arg2,arg3,arg4); - jresult = (jint)result; - SWIG_JavaArrayArgoutUint8(jenv, jarr1, arg1, jarg1); - { - jint jvalue = (jint)temp3; - (*jenv)->SetIntArrayRegion(jenv, jarg3, 0, 1, &jvalue); - } - { - jint jvalue = (jint)temp4; - (*jenv)->SetIntArrayRegion(jenv, jarg4, 0, 1, &jvalue); - } - free(arg1); - - - return jresult; -} - - -SWIGEXPORT jbyteArray JNICALL Java_com_google_webp_libwebpJNI_WebPDecodeRGB(JNIEnv *jenv, jclass jcls, jbyteArray jarg1, jlong jarg2, jintArray jarg3, jintArray jarg4) { - jbyteArray jresult = 0 ; - uint8_t *arg1 = (uint8_t *) 0 ; - size_t arg2 ; - int *arg3 = (int *) 0 ; - int *arg4 = (int *) 0 ; - jbyte *jarr1 ; - int temp3 ; - int temp4 ; - uint8_t *result = 0 ; - - (void)jenv; - (void)jcls; - if (!SWIG_JavaArrayInUint8(jenv, &jarr1, &arg1, jarg1)) return 0; - arg2 = (size_t)jarg2; - { - if (!jarg3) { - SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "array null"); - return 0; - } - if ((*jenv)->GetArrayLength(jenv, jarg3) == 0) { - SWIG_JavaThrowException(jenv, SWIG_JavaIndexOutOfBoundsException, "Array must contain at least 1 element"); - return 0; - } - arg3 = &temp3; - } - { - if (!jarg4) { - SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "array null"); - return 0; - } - if ((*jenv)->GetArrayLength(jenv, jarg4) == 0) { - SWIG_JavaThrowException(jenv, SWIG_JavaIndexOutOfBoundsException, "Array must contain at least 1 element"); - return 0; - } - arg4 = &temp4; - } - result = (uint8_t *)WebPDecodeRGB((uint8_t const *)arg1,arg2,arg3,arg4); - jresult = SWIG_JavaArrayOutUint8(jenv, result, FillMeInAsSizeCannotBeDeterminedAutomatically); - SWIG_JavaArrayArgoutUint8(jenv, jarr1, arg1, jarg1); - { - jint jvalue = (jint)temp3; - (*jenv)->SetIntArrayRegion(jenv, jarg3, 0, 1, &jvalue); - } - { - jint jvalue = (jint)temp4; - (*jenv)->SetIntArrayRegion(jenv, jarg4, 0, 1, &jvalue); - } - free(arg1); - - - free(result); - return jresult; -} - - -SWIGEXPORT jbyteArray JNICALL Java_com_google_webp_libwebpJNI_WebPDecodeRGBA(JNIEnv *jenv, jclass jcls, jbyteArray jarg1, jlong jarg2, jintArray jarg3, jintArray jarg4) { - jbyteArray jresult = 0 ; - uint8_t *arg1 = (uint8_t *) 0 ; - size_t arg2 ; - int *arg3 = (int *) 0 ; - int *arg4 = (int *) 0 ; - jbyte *jarr1 ; - int temp3 ; - int temp4 ; - uint8_t *result = 0 ; - - (void)jenv; - (void)jcls; - if (!SWIG_JavaArrayInUint8(jenv, &jarr1, &arg1, jarg1)) return 0; - arg2 = (size_t)jarg2; - { - if (!jarg3) { - SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "array null"); - return 0; - } - if ((*jenv)->GetArrayLength(jenv, jarg3) == 0) { - SWIG_JavaThrowException(jenv, SWIG_JavaIndexOutOfBoundsException, "Array must contain at least 1 element"); - return 0; - } - arg3 = &temp3; - } - { - if (!jarg4) { - SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "array null"); - return 0; - } - if ((*jenv)->GetArrayLength(jenv, jarg4) == 0) { - SWIG_JavaThrowException(jenv, SWIG_JavaIndexOutOfBoundsException, "Array must contain at least 1 element"); - return 0; - } - arg4 = &temp4; - } - result = (uint8_t *)WebPDecodeRGBA((uint8_t const *)arg1,arg2,arg3,arg4); - jresult = SWIG_JavaArrayOutUint8(jenv, result, FillMeInAsSizeCannotBeDeterminedAutomatically); - SWIG_JavaArrayArgoutUint8(jenv, jarr1, arg1, jarg1); - { - jint jvalue = (jint)temp3; - (*jenv)->SetIntArrayRegion(jenv, jarg3, 0, 1, &jvalue); - } - { - jint jvalue = (jint)temp4; - (*jenv)->SetIntArrayRegion(jenv, jarg4, 0, 1, &jvalue); - } - free(arg1); - - - free(result); - return jresult; -} - - -SWIGEXPORT jbyteArray JNICALL Java_com_google_webp_libwebpJNI_WebPDecodeARGB(JNIEnv *jenv, jclass jcls, jbyteArray jarg1, jlong jarg2, jintArray jarg3, jintArray jarg4) { - jbyteArray jresult = 0 ; - uint8_t *arg1 = (uint8_t *) 0 ; - size_t arg2 ; - int *arg3 = (int *) 0 ; - int *arg4 = (int *) 0 ; - jbyte *jarr1 ; - int temp3 ; - int temp4 ; - uint8_t *result = 0 ; - - (void)jenv; - (void)jcls; - if (!SWIG_JavaArrayInUint8(jenv, &jarr1, &arg1, jarg1)) return 0; - arg2 = (size_t)jarg2; - { - if (!jarg3) { - SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "array null"); - return 0; - } - if ((*jenv)->GetArrayLength(jenv, jarg3) == 0) { - SWIG_JavaThrowException(jenv, SWIG_JavaIndexOutOfBoundsException, "Array must contain at least 1 element"); - return 0; - } - arg3 = &temp3; - } - { - if (!jarg4) { - SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "array null"); - return 0; - } - if ((*jenv)->GetArrayLength(jenv, jarg4) == 0) { - SWIG_JavaThrowException(jenv, SWIG_JavaIndexOutOfBoundsException, "Array must contain at least 1 element"); - return 0; - } - arg4 = &temp4; - } - result = (uint8_t *)WebPDecodeARGB((uint8_t const *)arg1,arg2,arg3,arg4); - jresult = SWIG_JavaArrayOutUint8(jenv, result, FillMeInAsSizeCannotBeDeterminedAutomatically); - SWIG_JavaArrayArgoutUint8(jenv, jarr1, arg1, jarg1); - { - jint jvalue = (jint)temp3; - (*jenv)->SetIntArrayRegion(jenv, jarg3, 0, 1, &jvalue); - } - { - jint jvalue = (jint)temp4; - (*jenv)->SetIntArrayRegion(jenv, jarg4, 0, 1, &jvalue); - } - free(arg1); - - - free(result); - return jresult; -} - - -SWIGEXPORT jbyteArray JNICALL Java_com_google_webp_libwebpJNI_WebPDecodeBGR(JNIEnv *jenv, jclass jcls, jbyteArray jarg1, jlong jarg2, jintArray jarg3, jintArray jarg4) { - jbyteArray jresult = 0 ; - uint8_t *arg1 = (uint8_t *) 0 ; - size_t arg2 ; - int *arg3 = (int *) 0 ; - int *arg4 = (int *) 0 ; - jbyte *jarr1 ; - int temp3 ; - int temp4 ; - uint8_t *result = 0 ; - - (void)jenv; - (void)jcls; - if (!SWIG_JavaArrayInUint8(jenv, &jarr1, &arg1, jarg1)) return 0; - arg2 = (size_t)jarg2; - { - if (!jarg3) { - SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "array null"); - return 0; - } - if ((*jenv)->GetArrayLength(jenv, jarg3) == 0) { - SWIG_JavaThrowException(jenv, SWIG_JavaIndexOutOfBoundsException, "Array must contain at least 1 element"); - return 0; - } - arg3 = &temp3; - } - { - if (!jarg4) { - SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "array null"); - return 0; - } - if ((*jenv)->GetArrayLength(jenv, jarg4) == 0) { - SWIG_JavaThrowException(jenv, SWIG_JavaIndexOutOfBoundsException, "Array must contain at least 1 element"); - return 0; - } - arg4 = &temp4; - } - result = (uint8_t *)WebPDecodeBGR((uint8_t const *)arg1,arg2,arg3,arg4); - jresult = SWIG_JavaArrayOutUint8(jenv, result, FillMeInAsSizeCannotBeDeterminedAutomatically); - SWIG_JavaArrayArgoutUint8(jenv, jarr1, arg1, jarg1); - { - jint jvalue = (jint)temp3; - (*jenv)->SetIntArrayRegion(jenv, jarg3, 0, 1, &jvalue); - } - { - jint jvalue = (jint)temp4; - (*jenv)->SetIntArrayRegion(jenv, jarg4, 0, 1, &jvalue); - } - free(arg1); - - - free(result); - return jresult; -} - - -SWIGEXPORT jbyteArray JNICALL Java_com_google_webp_libwebpJNI_WebPDecodeBGRA(JNIEnv *jenv, jclass jcls, jbyteArray jarg1, jlong jarg2, jintArray jarg3, jintArray jarg4) { - jbyteArray jresult = 0 ; - uint8_t *arg1 = (uint8_t *) 0 ; - size_t arg2 ; - int *arg3 = (int *) 0 ; - int *arg4 = (int *) 0 ; - jbyte *jarr1 ; - int temp3 ; - int temp4 ; - uint8_t *result = 0 ; - - (void)jenv; - (void)jcls; - if (!SWIG_JavaArrayInUint8(jenv, &jarr1, &arg1, jarg1)) return 0; - arg2 = (size_t)jarg2; - { - if (!jarg3) { - SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "array null"); - return 0; - } - if ((*jenv)->GetArrayLength(jenv, jarg3) == 0) { - SWIG_JavaThrowException(jenv, SWIG_JavaIndexOutOfBoundsException, "Array must contain at least 1 element"); - return 0; - } - arg3 = &temp3; - } - { - if (!jarg4) { - SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "array null"); - return 0; - } - if ((*jenv)->GetArrayLength(jenv, jarg4) == 0) { - SWIG_JavaThrowException(jenv, SWIG_JavaIndexOutOfBoundsException, "Array must contain at least 1 element"); - return 0; - } - arg4 = &temp4; - } - result = (uint8_t *)WebPDecodeBGRA((uint8_t const *)arg1,arg2,arg3,arg4); - jresult = SWIG_JavaArrayOutUint8(jenv, result, FillMeInAsSizeCannotBeDeterminedAutomatically); - SWIG_JavaArrayArgoutUint8(jenv, jarr1, arg1, jarg1); - { - jint jvalue = (jint)temp3; - (*jenv)->SetIntArrayRegion(jenv, jarg3, 0, 1, &jvalue); - } - { - jint jvalue = (jint)temp4; - (*jenv)->SetIntArrayRegion(jenv, jarg4, 0, 1, &jvalue); - } - free(arg1); - - - free(result); - return jresult; -} - - -SWIGEXPORT jint JNICALL Java_com_google_webp_libwebpJNI_WebPGetEncoderVersion(JNIEnv *jenv, jclass jcls) { - jint jresult = 0 ; - int result; - - (void)jenv; - (void)jcls; - result = (int)WebPGetEncoderVersion(); - jresult = (jint)result; - return jresult; -} - - -SWIGEXPORT jbyteArray JNICALL Java_com_google_webp_libwebpJNI_wrap_1WebPEncodeRGB(JNIEnv *jenv, jclass jcls, jbyteArray jarg1, jint jarg2, jint jarg3, jintArray jarg4, jint jarg5, jint jarg6, jint jarg7, jfloat jarg8) { - jbyteArray jresult = 0 ; - uint8_t *arg1 = (uint8_t *) 0 ; - int *arg2 = (int *) 0 ; - int *arg3 = (int *) 0 ; - int *arg4 = (int *) 0 ; - int arg5 ; - int arg6 ; - int arg7 ; - float arg8 ; - jbyte *jarr1 ; - int temp4 ; - uint8_t *result = 0 ; - - (void)jenv; - (void)jcls; - if (!SWIG_JavaArrayInUint8(jenv, &jarr1, &arg1, jarg1)) return 0; - arg2 = (int *)&jarg2; - arg3 = (int *)&jarg3; - { - if (!jarg4) { - SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "array null"); - return 0; - } - if ((*jenv)->GetArrayLength(jenv, jarg4) == 0) { - SWIG_JavaThrowException(jenv, SWIG_JavaIndexOutOfBoundsException, "Array must contain at least 1 element"); - return 0; - } - arg4 = &temp4; - } - arg5 = (int)jarg5; - arg6 = (int)jarg6; - arg7 = (int)jarg7; - arg8 = (float)jarg8; - result = (uint8_t *)wrap_WebPEncodeRGB((uint8_t const *)arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8); - jresult = SWIG_JavaArrayOutUint8(jenv, result, FillMeInAsSizeCannotBeDeterminedAutomatically); - SWIG_JavaArrayArgoutUint8(jenv, jarr1, arg1, jarg1); - { - jint jvalue = (jint)temp4; - (*jenv)->SetIntArrayRegion(jenv, jarg4, 0, 1, &jvalue); - } - free(arg1); - - - - free(result); - return jresult; -} - - -SWIGEXPORT jbyteArray JNICALL Java_com_google_webp_libwebpJNI_wrap_1WebPEncodeBGR(JNIEnv *jenv, jclass jcls, jbyteArray jarg1, jint jarg2, jint jarg3, jintArray jarg4, jint jarg5, jint jarg6, jint jarg7, jfloat jarg8) { - jbyteArray jresult = 0 ; - uint8_t *arg1 = (uint8_t *) 0 ; - int *arg2 = (int *) 0 ; - int *arg3 = (int *) 0 ; - int *arg4 = (int *) 0 ; - int arg5 ; - int arg6 ; - int arg7 ; - float arg8 ; - jbyte *jarr1 ; - int temp4 ; - uint8_t *result = 0 ; - - (void)jenv; - (void)jcls; - if (!SWIG_JavaArrayInUint8(jenv, &jarr1, &arg1, jarg1)) return 0; - arg2 = (int *)&jarg2; - arg3 = (int *)&jarg3; - { - if (!jarg4) { - SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "array null"); - return 0; - } - if ((*jenv)->GetArrayLength(jenv, jarg4) == 0) { - SWIG_JavaThrowException(jenv, SWIG_JavaIndexOutOfBoundsException, "Array must contain at least 1 element"); - return 0; - } - arg4 = &temp4; - } - arg5 = (int)jarg5; - arg6 = (int)jarg6; - arg7 = (int)jarg7; - arg8 = (float)jarg8; - result = (uint8_t *)wrap_WebPEncodeBGR((uint8_t const *)arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8); - jresult = SWIG_JavaArrayOutUint8(jenv, result, FillMeInAsSizeCannotBeDeterminedAutomatically); - SWIG_JavaArrayArgoutUint8(jenv, jarr1, arg1, jarg1); - { - jint jvalue = (jint)temp4; - (*jenv)->SetIntArrayRegion(jenv, jarg4, 0, 1, &jvalue); - } - free(arg1); - - - - free(result); - return jresult; -} - - -SWIGEXPORT jbyteArray JNICALL Java_com_google_webp_libwebpJNI_wrap_1WebPEncodeRGBA(JNIEnv *jenv, jclass jcls, jbyteArray jarg1, jint jarg2, jint jarg3, jintArray jarg4, jint jarg5, jint jarg6, jint jarg7, jfloat jarg8) { - jbyteArray jresult = 0 ; - uint8_t *arg1 = (uint8_t *) 0 ; - int *arg2 = (int *) 0 ; - int *arg3 = (int *) 0 ; - int *arg4 = (int *) 0 ; - int arg5 ; - int arg6 ; - int arg7 ; - float arg8 ; - jbyte *jarr1 ; - int temp4 ; - uint8_t *result = 0 ; - - (void)jenv; - (void)jcls; - if (!SWIG_JavaArrayInUint8(jenv, &jarr1, &arg1, jarg1)) return 0; - arg2 = (int *)&jarg2; - arg3 = (int *)&jarg3; - { - if (!jarg4) { - SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "array null"); - return 0; - } - if ((*jenv)->GetArrayLength(jenv, jarg4) == 0) { - SWIG_JavaThrowException(jenv, SWIG_JavaIndexOutOfBoundsException, "Array must contain at least 1 element"); - return 0; - } - arg4 = &temp4; - } - arg5 = (int)jarg5; - arg6 = (int)jarg6; - arg7 = (int)jarg7; - arg8 = (float)jarg8; - result = (uint8_t *)wrap_WebPEncodeRGBA((uint8_t const *)arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8); - jresult = SWIG_JavaArrayOutUint8(jenv, result, FillMeInAsSizeCannotBeDeterminedAutomatically); - SWIG_JavaArrayArgoutUint8(jenv, jarr1, arg1, jarg1); - { - jint jvalue = (jint)temp4; - (*jenv)->SetIntArrayRegion(jenv, jarg4, 0, 1, &jvalue); - } - free(arg1); - - - - free(result); - return jresult; -} - - -SWIGEXPORT jbyteArray JNICALL Java_com_google_webp_libwebpJNI_wrap_1WebPEncodeBGRA(JNIEnv *jenv, jclass jcls, jbyteArray jarg1, jint jarg2, jint jarg3, jintArray jarg4, jint jarg5, jint jarg6, jint jarg7, jfloat jarg8) { - jbyteArray jresult = 0 ; - uint8_t *arg1 = (uint8_t *) 0 ; - int *arg2 = (int *) 0 ; - int *arg3 = (int *) 0 ; - int *arg4 = (int *) 0 ; - int arg5 ; - int arg6 ; - int arg7 ; - float arg8 ; - jbyte *jarr1 ; - int temp4 ; - uint8_t *result = 0 ; - - (void)jenv; - (void)jcls; - if (!SWIG_JavaArrayInUint8(jenv, &jarr1, &arg1, jarg1)) return 0; - arg2 = (int *)&jarg2; - arg3 = (int *)&jarg3; - { - if (!jarg4) { - SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "array null"); - return 0; - } - if ((*jenv)->GetArrayLength(jenv, jarg4) == 0) { - SWIG_JavaThrowException(jenv, SWIG_JavaIndexOutOfBoundsException, "Array must contain at least 1 element"); - return 0; - } - arg4 = &temp4; - } - arg5 = (int)jarg5; - arg6 = (int)jarg6; - arg7 = (int)jarg7; - arg8 = (float)jarg8; - result = (uint8_t *)wrap_WebPEncodeBGRA((uint8_t const *)arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8); - jresult = SWIG_JavaArrayOutUint8(jenv, result, FillMeInAsSizeCannotBeDeterminedAutomatically); - SWIG_JavaArrayArgoutUint8(jenv, jarr1, arg1, jarg1); - { - jint jvalue = (jint)temp4; - (*jenv)->SetIntArrayRegion(jenv, jarg4, 0, 1, &jvalue); - } - free(arg1); - - - - free(result); - return jresult; -} - - -SWIGEXPORT jbyteArray JNICALL Java_com_google_webp_libwebpJNI_wrap_1WebPEncodeLosslessRGB(JNIEnv *jenv, jclass jcls, jbyteArray jarg1, jint jarg2, jint jarg3, jintArray jarg4, jint jarg5, jint jarg6, jint jarg7) { - jbyteArray jresult = 0 ; - uint8_t *arg1 = (uint8_t *) 0 ; - int *arg2 = (int *) 0 ; - int *arg3 = (int *) 0 ; - int *arg4 = (int *) 0 ; - int arg5 ; - int arg6 ; - int arg7 ; - jbyte *jarr1 ; - int temp4 ; - uint8_t *result = 0 ; - - (void)jenv; - (void)jcls; - if (!SWIG_JavaArrayInUint8(jenv, &jarr1, &arg1, jarg1)) return 0; - arg2 = (int *)&jarg2; - arg3 = (int *)&jarg3; - { - if (!jarg4) { - SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "array null"); - return 0; - } - if ((*jenv)->GetArrayLength(jenv, jarg4) == 0) { - SWIG_JavaThrowException(jenv, SWIG_JavaIndexOutOfBoundsException, "Array must contain at least 1 element"); - return 0; - } - arg4 = &temp4; - } - arg5 = (int)jarg5; - arg6 = (int)jarg6; - arg7 = (int)jarg7; - result = (uint8_t *)wrap_WebPEncodeLosslessRGB((uint8_t const *)arg1,arg2,arg3,arg4,arg5,arg6,arg7); - jresult = SWIG_JavaArrayOutUint8(jenv, result, FillMeInAsSizeCannotBeDeterminedAutomatically); - SWIG_JavaArrayArgoutUint8(jenv, jarr1, arg1, jarg1); - { - jint jvalue = (jint)temp4; - (*jenv)->SetIntArrayRegion(jenv, jarg4, 0, 1, &jvalue); - } - free(arg1); - - - - free(result); - return jresult; -} - - -SWIGEXPORT jbyteArray JNICALL Java_com_google_webp_libwebpJNI_wrap_1WebPEncodeLosslessBGR(JNIEnv *jenv, jclass jcls, jbyteArray jarg1, jint jarg2, jint jarg3, jintArray jarg4, jint jarg5, jint jarg6, jint jarg7) { - jbyteArray jresult = 0 ; - uint8_t *arg1 = (uint8_t *) 0 ; - int *arg2 = (int *) 0 ; - int *arg3 = (int *) 0 ; - int *arg4 = (int *) 0 ; - int arg5 ; - int arg6 ; - int arg7 ; - jbyte *jarr1 ; - int temp4 ; - uint8_t *result = 0 ; - - (void)jenv; - (void)jcls; - if (!SWIG_JavaArrayInUint8(jenv, &jarr1, &arg1, jarg1)) return 0; - arg2 = (int *)&jarg2; - arg3 = (int *)&jarg3; - { - if (!jarg4) { - SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "array null"); - return 0; - } - if ((*jenv)->GetArrayLength(jenv, jarg4) == 0) { - SWIG_JavaThrowException(jenv, SWIG_JavaIndexOutOfBoundsException, "Array must contain at least 1 element"); - return 0; - } - arg4 = &temp4; - } - arg5 = (int)jarg5; - arg6 = (int)jarg6; - arg7 = (int)jarg7; - result = (uint8_t *)wrap_WebPEncodeLosslessBGR((uint8_t const *)arg1,arg2,arg3,arg4,arg5,arg6,arg7); - jresult = SWIG_JavaArrayOutUint8(jenv, result, FillMeInAsSizeCannotBeDeterminedAutomatically); - SWIG_JavaArrayArgoutUint8(jenv, jarr1, arg1, jarg1); - { - jint jvalue = (jint)temp4; - (*jenv)->SetIntArrayRegion(jenv, jarg4, 0, 1, &jvalue); - } - free(arg1); - - - - free(result); - return jresult; -} - - -SWIGEXPORT jbyteArray JNICALL Java_com_google_webp_libwebpJNI_wrap_1WebPEncodeLosslessRGBA(JNIEnv *jenv, jclass jcls, jbyteArray jarg1, jint jarg2, jint jarg3, jintArray jarg4, jint jarg5, jint jarg6, jint jarg7) { - jbyteArray jresult = 0 ; - uint8_t *arg1 = (uint8_t *) 0 ; - int *arg2 = (int *) 0 ; - int *arg3 = (int *) 0 ; - int *arg4 = (int *) 0 ; - int arg5 ; - int arg6 ; - int arg7 ; - jbyte *jarr1 ; - int temp4 ; - uint8_t *result = 0 ; - - (void)jenv; - (void)jcls; - if (!SWIG_JavaArrayInUint8(jenv, &jarr1, &arg1, jarg1)) return 0; - arg2 = (int *)&jarg2; - arg3 = (int *)&jarg3; - { - if (!jarg4) { - SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "array null"); - return 0; - } - if ((*jenv)->GetArrayLength(jenv, jarg4) == 0) { - SWIG_JavaThrowException(jenv, SWIG_JavaIndexOutOfBoundsException, "Array must contain at least 1 element"); - return 0; - } - arg4 = &temp4; - } - arg5 = (int)jarg5; - arg6 = (int)jarg6; - arg7 = (int)jarg7; - result = (uint8_t *)wrap_WebPEncodeLosslessRGBA((uint8_t const *)arg1,arg2,arg3,arg4,arg5,arg6,arg7); - jresult = SWIG_JavaArrayOutUint8(jenv, result, FillMeInAsSizeCannotBeDeterminedAutomatically); - SWIG_JavaArrayArgoutUint8(jenv, jarr1, arg1, jarg1); - { - jint jvalue = (jint)temp4; - (*jenv)->SetIntArrayRegion(jenv, jarg4, 0, 1, &jvalue); - } - free(arg1); - - - - free(result); - return jresult; -} - - -SWIGEXPORT jbyteArray JNICALL Java_com_google_webp_libwebpJNI_wrap_1WebPEncodeLosslessBGRA(JNIEnv *jenv, jclass jcls, jbyteArray jarg1, jint jarg2, jint jarg3, jintArray jarg4, jint jarg5, jint jarg6, jint jarg7) { - jbyteArray jresult = 0 ; - uint8_t *arg1 = (uint8_t *) 0 ; - int *arg2 = (int *) 0 ; - int *arg3 = (int *) 0 ; - int *arg4 = (int *) 0 ; - int arg5 ; - int arg6 ; - int arg7 ; - jbyte *jarr1 ; - int temp4 ; - uint8_t *result = 0 ; - - (void)jenv; - (void)jcls; - if (!SWIG_JavaArrayInUint8(jenv, &jarr1, &arg1, jarg1)) return 0; - arg2 = (int *)&jarg2; - arg3 = (int *)&jarg3; - { - if (!jarg4) { - SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "array null"); - return 0; - } - if ((*jenv)->GetArrayLength(jenv, jarg4) == 0) { - SWIG_JavaThrowException(jenv, SWIG_JavaIndexOutOfBoundsException, "Array must contain at least 1 element"); - return 0; - } - arg4 = &temp4; - } - arg5 = (int)jarg5; - arg6 = (int)jarg6; - arg7 = (int)jarg7; - result = (uint8_t *)wrap_WebPEncodeLosslessBGRA((uint8_t const *)arg1,arg2,arg3,arg4,arg5,arg6,arg7); - jresult = SWIG_JavaArrayOutUint8(jenv, result, FillMeInAsSizeCannotBeDeterminedAutomatically); - SWIG_JavaArrayArgoutUint8(jenv, jarr1, arg1, jarg1); - { - jint jvalue = (jint)temp4; - (*jenv)->SetIntArrayRegion(jenv, jarg4, 0, 1, &jvalue); - } - free(arg1); - - - - free(result); - return jresult; -} - - -#ifdef __cplusplus -} -#endif - diff --git a/Extended/libwebp/swig/libwebp_python_wrap.c b/Extended/libwebp/swig/libwebp_python_wrap.c deleted file mode 100644 index 1055573..0000000 --- a/Extended/libwebp/swig/libwebp_python_wrap.c +++ /dev/null @@ -1,5628 +0,0 @@ -/* ---------------------------------------------------------------------------- - * This file was automatically generated by SWIG (http://www.swig.org). - * Version 3.0.12 - * - * This file is not intended to be easily readable and contains a number of - * coding conventions designed to improve portability and efficiency. Do not make - * changes to this file unless you know what you are doing--modify the SWIG - * interface file instead. - * ----------------------------------------------------------------------------- */ - -#define SWIG_PYTHON_STRICT_BYTE_CHAR - - - -#ifndef SWIGPYTHON -#define SWIGPYTHON -#endif - -#define SWIG_PYTHON_DIRECTOR_NO_VTABLE - -/* ----------------------------------------------------------------------------- - * This section contains generic SWIG labels for method/variable - * declarations/attributes, and other compiler dependent labels. - * ----------------------------------------------------------------------------- */ - -/* template workaround for compilers that cannot correctly implement the C++ standard */ -#ifndef SWIGTEMPLATEDISAMBIGUATOR -# if defined(__SUNPRO_CC) && (__SUNPRO_CC <= 0x560) -# define SWIGTEMPLATEDISAMBIGUATOR template -# elif defined(__HP_aCC) -/* Needed even with `aCC -AA' when `aCC -V' reports HP ANSI C++ B3910B A.03.55 */ -/* If we find a maximum version that requires this, the test would be __HP_aCC <= 35500 for A.03.55 */ -# define SWIGTEMPLATEDISAMBIGUATOR template -# else -# define SWIGTEMPLATEDISAMBIGUATOR -# endif -#endif - -/* inline attribute */ -#ifndef SWIGINLINE -# if defined(__cplusplus) || (defined(__GNUC__) && !defined(__STRICT_ANSI__)) -# define SWIGINLINE inline -# else -# define SWIGINLINE -# endif -#endif - -/* attribute recognised by some compilers to avoid 'unused' warnings */ -#ifndef SWIGUNUSED -# if defined(__GNUC__) -# if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) -# define SWIGUNUSED __attribute__ ((__unused__)) -# else -# define SWIGUNUSED -# endif -# elif defined(__ICC) -# define SWIGUNUSED __attribute__ ((__unused__)) -# else -# define SWIGUNUSED -# endif -#endif - -#ifndef SWIG_MSC_UNSUPPRESS_4505 -# if defined(_MSC_VER) -# pragma warning(disable : 4505) /* unreferenced local function has been removed */ -# endif -#endif - -#ifndef SWIGUNUSEDPARM -# ifdef __cplusplus -# define SWIGUNUSEDPARM(p) -# else -# define SWIGUNUSEDPARM(p) p SWIGUNUSED -# endif -#endif - -/* internal SWIG method */ -#ifndef SWIGINTERN -# define SWIGINTERN static SWIGUNUSED -#endif - -/* internal inline SWIG method */ -#ifndef SWIGINTERNINLINE -# define SWIGINTERNINLINE SWIGINTERN SWIGINLINE -#endif - -/* exporting methods */ -#if defined(__GNUC__) -# if (__GNUC__ >= 4) || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) -# ifndef GCC_HASCLASSVISIBILITY -# define GCC_HASCLASSVISIBILITY -# endif -# endif -#endif - -#ifndef SWIGEXPORT -# if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__) -# if defined(STATIC_LINKED) -# define SWIGEXPORT -# else -# define SWIGEXPORT __declspec(dllexport) -# endif -# else -# if defined(__GNUC__) && defined(GCC_HASCLASSVISIBILITY) -# define SWIGEXPORT __attribute__ ((visibility("default"))) -# else -# define SWIGEXPORT -# endif -# endif -#endif - -/* calling conventions for Windows */ -#ifndef SWIGSTDCALL -# if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__) -# define SWIGSTDCALL __stdcall -# else -# define SWIGSTDCALL -# endif -#endif - -/* Deal with Microsoft's attempt at deprecating C standard runtime functions */ -#if !defined(SWIG_NO_CRT_SECURE_NO_DEPRECATE) && defined(_MSC_VER) && !defined(_CRT_SECURE_NO_DEPRECATE) -# define _CRT_SECURE_NO_DEPRECATE -#endif - -/* Deal with Microsoft's attempt at deprecating methods in the standard C++ library */ -#if !defined(SWIG_NO_SCL_SECURE_NO_DEPRECATE) && defined(_MSC_VER) && !defined(_SCL_SECURE_NO_DEPRECATE) -# define _SCL_SECURE_NO_DEPRECATE -#endif - -/* Deal with Apple's deprecated 'AssertMacros.h' from Carbon-framework */ -#if defined(__APPLE__) && !defined(__ASSERT_MACROS_DEFINE_VERSIONS_WITHOUT_UNDERSCORES) -# define __ASSERT_MACROS_DEFINE_VERSIONS_WITHOUT_UNDERSCORES 0 -#endif - -/* Intel's compiler complains if a variable which was never initialised is - * cast to void, which is a common idiom which we use to indicate that we - * are aware a variable isn't used. So we just silence that warning. - * See: https://github.com/swig/swig/issues/192 for more discussion. - */ -#ifdef __INTEL_COMPILER -# pragma warning disable 592 -#endif - - -#if defined(_DEBUG) && defined(SWIG_PYTHON_INTERPRETER_NO_DEBUG) -/* Use debug wrappers with the Python release dll */ -# undef _DEBUG -# include -# define _DEBUG -#else -# include -#endif - -/* ----------------------------------------------------------------------------- - * swigrun.swg - * - * This file contains generic C API SWIG runtime support for pointer - * type checking. - * ----------------------------------------------------------------------------- */ - -/* This should only be incremented when either the layout of swig_type_info changes, - or for whatever reason, the runtime changes incompatibly */ -#define SWIG_RUNTIME_VERSION "4" - -/* define SWIG_TYPE_TABLE_NAME as "SWIG_TYPE_TABLE" */ -#ifdef SWIG_TYPE_TABLE -# define SWIG_QUOTE_STRING(x) #x -# define SWIG_EXPAND_AND_QUOTE_STRING(x) SWIG_QUOTE_STRING(x) -# define SWIG_TYPE_TABLE_NAME SWIG_EXPAND_AND_QUOTE_STRING(SWIG_TYPE_TABLE) -#else -# define SWIG_TYPE_TABLE_NAME -#endif - -/* - You can use the SWIGRUNTIME and SWIGRUNTIMEINLINE macros for - creating a static or dynamic library from the SWIG runtime code. - In 99.9% of the cases, SWIG just needs to declare them as 'static'. - - But only do this if strictly necessary, ie, if you have problems - with your compiler or suchlike. -*/ - -#ifndef SWIGRUNTIME -# define SWIGRUNTIME SWIGINTERN -#endif - -#ifndef SWIGRUNTIMEINLINE -# define SWIGRUNTIMEINLINE SWIGRUNTIME SWIGINLINE -#endif - -/* Generic buffer size */ -#ifndef SWIG_BUFFER_SIZE -# define SWIG_BUFFER_SIZE 1024 -#endif - -/* Flags for pointer conversions */ -#define SWIG_POINTER_DISOWN 0x1 -#define SWIG_CAST_NEW_MEMORY 0x2 - -/* Flags for new pointer objects */ -#define SWIG_POINTER_OWN 0x1 - - -/* - Flags/methods for returning states. - - The SWIG conversion methods, as ConvertPtr, return an integer - that tells if the conversion was successful or not. And if not, - an error code can be returned (see swigerrors.swg for the codes). - - Use the following macros/flags to set or process the returning - states. - - In old versions of SWIG, code such as the following was usually written: - - if (SWIG_ConvertPtr(obj,vptr,ty.flags) != -1) { - // success code - } else { - //fail code - } - - Now you can be more explicit: - - int res = SWIG_ConvertPtr(obj,vptr,ty.flags); - if (SWIG_IsOK(res)) { - // success code - } else { - // fail code - } - - which is the same really, but now you can also do - - Type *ptr; - int res = SWIG_ConvertPtr(obj,(void **)(&ptr),ty.flags); - if (SWIG_IsOK(res)) { - // success code - if (SWIG_IsNewObj(res) { - ... - delete *ptr; - } else { - ... - } - } else { - // fail code - } - - I.e., now SWIG_ConvertPtr can return new objects and you can - identify the case and take care of the deallocation. Of course that - also requires SWIG_ConvertPtr to return new result values, such as - - int SWIG_ConvertPtr(obj, ptr,...) { - if () { - if () { - *ptr = ; - return SWIG_NEWOBJ; - } else { - *ptr = ; - return SWIG_OLDOBJ; - } - } else { - return SWIG_BADOBJ; - } - } - - Of course, returning the plain '0(success)/-1(fail)' still works, but you can be - more explicit by returning SWIG_BADOBJ, SWIG_ERROR or any of the - SWIG errors code. - - Finally, if the SWIG_CASTRANK_MODE is enabled, the result code - allows to return the 'cast rank', for example, if you have this - - int food(double) - int fooi(int); - - and you call - - food(1) // cast rank '1' (1 -> 1.0) - fooi(1) // cast rank '0' - - just use the SWIG_AddCast()/SWIG_CheckState() -*/ - -#define SWIG_OK (0) -#define SWIG_ERROR (-1) -#define SWIG_IsOK(r) (r >= 0) -#define SWIG_ArgError(r) ((r != SWIG_ERROR) ? r : SWIG_TypeError) - -/* The CastRankLimit says how many bits are used for the cast rank */ -#define SWIG_CASTRANKLIMIT (1 << 8) -/* The NewMask denotes the object was created (using new/malloc) */ -#define SWIG_NEWOBJMASK (SWIG_CASTRANKLIMIT << 1) -/* The TmpMask is for in/out typemaps that use temporal objects */ -#define SWIG_TMPOBJMASK (SWIG_NEWOBJMASK << 1) -/* Simple returning values */ -#define SWIG_BADOBJ (SWIG_ERROR) -#define SWIG_OLDOBJ (SWIG_OK) -#define SWIG_NEWOBJ (SWIG_OK | SWIG_NEWOBJMASK) -#define SWIG_TMPOBJ (SWIG_OK | SWIG_TMPOBJMASK) -/* Check, add and del mask methods */ -#define SWIG_AddNewMask(r) (SWIG_IsOK(r) ? (r | SWIG_NEWOBJMASK) : r) -#define SWIG_DelNewMask(r) (SWIG_IsOK(r) ? (r & ~SWIG_NEWOBJMASK) : r) -#define SWIG_IsNewObj(r) (SWIG_IsOK(r) && (r & SWIG_NEWOBJMASK)) -#define SWIG_AddTmpMask(r) (SWIG_IsOK(r) ? (r | SWIG_TMPOBJMASK) : r) -#define SWIG_DelTmpMask(r) (SWIG_IsOK(r) ? (r & ~SWIG_TMPOBJMASK) : r) -#define SWIG_IsTmpObj(r) (SWIG_IsOK(r) && (r & SWIG_TMPOBJMASK)) - -/* Cast-Rank Mode */ -#if defined(SWIG_CASTRANK_MODE) -# ifndef SWIG_TypeRank -# define SWIG_TypeRank unsigned long -# endif -# ifndef SWIG_MAXCASTRANK /* Default cast allowed */ -# define SWIG_MAXCASTRANK (2) -# endif -# define SWIG_CASTRANKMASK ((SWIG_CASTRANKLIMIT) -1) -# define SWIG_CastRank(r) (r & SWIG_CASTRANKMASK) -SWIGINTERNINLINE int SWIG_AddCast(int r) { - return SWIG_IsOK(r) ? ((SWIG_CastRank(r) < SWIG_MAXCASTRANK) ? (r + 1) : SWIG_ERROR) : r; -} -SWIGINTERNINLINE int SWIG_CheckState(int r) { - return SWIG_IsOK(r) ? SWIG_CastRank(r) + 1 : 0; -} -#else /* no cast-rank mode */ -# define SWIG_AddCast(r) (r) -# define SWIG_CheckState(r) (SWIG_IsOK(r) ? 1 : 0) -#endif - - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -typedef void *(*swig_converter_func)(void *, int *); -typedef struct swig_type_info *(*swig_dycast_func)(void **); - -/* Structure to store information on one type */ -typedef struct swig_type_info { - const char *name; /* mangled name of this type */ - const char *str; /* human readable name of this type */ - swig_dycast_func dcast; /* dynamic cast function down a hierarchy */ - struct swig_cast_info *cast; /* linked list of types that can cast into this type */ - void *clientdata; /* language specific type data */ - int owndata; /* flag if the structure owns the clientdata */ -} swig_type_info; - -/* Structure to store a type and conversion function used for casting */ -typedef struct swig_cast_info { - swig_type_info *type; /* pointer to type that is equivalent to this type */ - swig_converter_func converter; /* function to cast the void pointers */ - struct swig_cast_info *next; /* pointer to next cast in linked list */ - struct swig_cast_info *prev; /* pointer to the previous cast */ -} swig_cast_info; - -/* Structure used to store module information - * Each module generates one structure like this, and the runtime collects - * all of these structures and stores them in a circularly linked list.*/ -typedef struct swig_module_info { - swig_type_info **types; /* Array of pointers to swig_type_info structures that are in this module */ - size_t size; /* Number of types in this module */ - struct swig_module_info *next; /* Pointer to next element in circularly linked list */ - swig_type_info **type_initial; /* Array of initially generated type structures */ - swig_cast_info **cast_initial; /* Array of initially generated casting structures */ - void *clientdata; /* Language specific module data */ -} swig_module_info; - -/* - Compare two type names skipping the space characters, therefore - "char*" == "char *" and "Class" == "Class", etc. - - Return 0 when the two name types are equivalent, as in - strncmp, but skipping ' '. -*/ -SWIGRUNTIME int -SWIG_TypeNameComp(const char *f1, const char *l1, - const char *f2, const char *l2) { - for (;(f1 != l1) && (f2 != l2); ++f1, ++f2) { - while ((*f1 == ' ') && (f1 != l1)) ++f1; - while ((*f2 == ' ') && (f2 != l2)) ++f2; - if (*f1 != *f2) return (*f1 > *f2) ? 1 : -1; - } - return (int)((l1 - f1) - (l2 - f2)); -} - -/* - Check type equivalence in a name list like ||... - Return 0 if equal, -1 if nb < tb, 1 if nb > tb -*/ -SWIGRUNTIME int -SWIG_TypeCmp(const char *nb, const char *tb) { - int equiv = 1; - const char* te = tb + strlen(tb); - const char* ne = nb; - while (equiv != 0 && *ne) { - for (nb = ne; *ne; ++ne) { - if (*ne == '|') break; - } - equiv = SWIG_TypeNameComp(nb, ne, tb, te); - if (*ne) ++ne; - } - return equiv; -} - -/* - Check type equivalence in a name list like ||... - Return 0 if not equal, 1 if equal -*/ -SWIGRUNTIME int -SWIG_TypeEquiv(const char *nb, const char *tb) { - return SWIG_TypeCmp(nb, tb) == 0 ? 1 : 0; -} - -/* - Check the typename -*/ -SWIGRUNTIME swig_cast_info * -SWIG_TypeCheck(const char *c, swig_type_info *ty) { - if (ty) { - swig_cast_info *iter = ty->cast; - while (iter) { - if (strcmp(iter->type->name, c) == 0) { - if (iter == ty->cast) - return iter; - /* Move iter to the top of the linked list */ - iter->prev->next = iter->next; - if (iter->next) - iter->next->prev = iter->prev; - iter->next = ty->cast; - iter->prev = 0; - if (ty->cast) ty->cast->prev = iter; - ty->cast = iter; - return iter; - } - iter = iter->next; - } - } - return 0; -} - -/* - Identical to SWIG_TypeCheck, except strcmp is replaced with a pointer comparison -*/ -SWIGRUNTIME swig_cast_info * -SWIG_TypeCheckStruct(swig_type_info *from, swig_type_info *ty) { - if (ty) { - swig_cast_info *iter = ty->cast; - while (iter) { - if (iter->type == from) { - if (iter == ty->cast) - return iter; - /* Move iter to the top of the linked list */ - iter->prev->next = iter->next; - if (iter->next) - iter->next->prev = iter->prev; - iter->next = ty->cast; - iter->prev = 0; - if (ty->cast) ty->cast->prev = iter; - ty->cast = iter; - return iter; - } - iter = iter->next; - } - } - return 0; -} - -/* - Cast a pointer up an inheritance hierarchy -*/ -SWIGRUNTIMEINLINE void * -SWIG_TypeCast(swig_cast_info *ty, void *ptr, int *newmemory) { - return ((!ty) || (!ty->converter)) ? ptr : (*ty->converter)(ptr, newmemory); -} - -/* - Dynamic pointer casting. Down an inheritance hierarchy -*/ -SWIGRUNTIME swig_type_info * -SWIG_TypeDynamicCast(swig_type_info *ty, void **ptr) { - swig_type_info *lastty = ty; - if (!ty || !ty->dcast) return ty; - while (ty && (ty->dcast)) { - ty = (*ty->dcast)(ptr); - if (ty) lastty = ty; - } - return lastty; -} - -/* - Return the name associated with this type -*/ -SWIGRUNTIMEINLINE const char * -SWIG_TypeName(const swig_type_info *ty) { - return ty->name; -} - -/* - Return the pretty name associated with this type, - that is an unmangled type name in a form presentable to the user. -*/ -SWIGRUNTIME const char * -SWIG_TypePrettyName(const swig_type_info *type) { - /* The "str" field contains the equivalent pretty names of the - type, separated by vertical-bar characters. We choose - to print the last name, as it is often (?) the most - specific. */ - if (!type) return NULL; - if (type->str != NULL) { - const char *last_name = type->str; - const char *s; - for (s = type->str; *s; s++) - if (*s == '|') last_name = s+1; - return last_name; - } - else - return type->name; -} - -/* - Set the clientdata field for a type -*/ -SWIGRUNTIME void -SWIG_TypeClientData(swig_type_info *ti, void *clientdata) { - swig_cast_info *cast = ti->cast; - /* if (ti->clientdata == clientdata) return; */ - ti->clientdata = clientdata; - - while (cast) { - if (!cast->converter) { - swig_type_info *tc = cast->type; - if (!tc->clientdata) { - SWIG_TypeClientData(tc, clientdata); - } - } - cast = cast->next; - } -} -SWIGRUNTIME void -SWIG_TypeNewClientData(swig_type_info *ti, void *clientdata) { - SWIG_TypeClientData(ti, clientdata); - ti->owndata = 1; -} - -/* - Search for a swig_type_info structure only by mangled name - Search is a O(log #types) - - We start searching at module start, and finish searching when start == end. - Note: if start == end at the beginning of the function, we go all the way around - the circular list. -*/ -SWIGRUNTIME swig_type_info * -SWIG_MangledTypeQueryModule(swig_module_info *start, - swig_module_info *end, - const char *name) { - swig_module_info *iter = start; - do { - if (iter->size) { - size_t l = 0; - size_t r = iter->size - 1; - do { - /* since l+r >= 0, we can (>> 1) instead (/ 2) */ - size_t i = (l + r) >> 1; - const char *iname = iter->types[i]->name; - if (iname) { - int compare = strcmp(name, iname); - if (compare == 0) { - return iter->types[i]; - } else if (compare < 0) { - if (i) { - r = i - 1; - } else { - break; - } - } else if (compare > 0) { - l = i + 1; - } - } else { - break; /* should never happen */ - } - } while (l <= r); - } - iter = iter->next; - } while (iter != end); - return 0; -} - -/* - Search for a swig_type_info structure for either a mangled name or a human readable name. - It first searches the mangled names of the types, which is a O(log #types) - If a type is not found it then searches the human readable names, which is O(#types). - - We start searching at module start, and finish searching when start == end. - Note: if start == end at the beginning of the function, we go all the way around - the circular list. -*/ -SWIGRUNTIME swig_type_info * -SWIG_TypeQueryModule(swig_module_info *start, - swig_module_info *end, - const char *name) { - /* STEP 1: Search the name field using binary search */ - swig_type_info *ret = SWIG_MangledTypeQueryModule(start, end, name); - if (ret) { - return ret; - } else { - /* STEP 2: If the type hasn't been found, do a complete search - of the str field (the human readable name) */ - swig_module_info *iter = start; - do { - size_t i = 0; - for (; i < iter->size; ++i) { - if (iter->types[i]->str && (SWIG_TypeEquiv(iter->types[i]->str, name))) - return iter->types[i]; - } - iter = iter->next; - } while (iter != end); - } - - /* neither found a match */ - return 0; -} - -/* - Pack binary data into a string -*/ -SWIGRUNTIME char * -SWIG_PackData(char *c, void *ptr, size_t sz) { - static const char hex[17] = "0123456789abcdef"; - const unsigned char *u = (unsigned char *) ptr; - const unsigned char *eu = u + sz; - for (; u != eu; ++u) { - unsigned char uu = *u; - *(c++) = hex[(uu & 0xf0) >> 4]; - *(c++) = hex[uu & 0xf]; - } - return c; -} - -/* - Unpack binary data from a string -*/ -SWIGRUNTIME const char * -SWIG_UnpackData(const char *c, void *ptr, size_t sz) { - unsigned char *u = (unsigned char *) ptr; - const unsigned char *eu = u + sz; - for (; u != eu; ++u) { - char d = *(c++); - unsigned char uu; - if ((d >= '0') && (d <= '9')) - uu = (unsigned char)((d - '0') << 4); - else if ((d >= 'a') && (d <= 'f')) - uu = (unsigned char)((d - ('a'-10)) << 4); - else - return (char *) 0; - d = *(c++); - if ((d >= '0') && (d <= '9')) - uu |= (unsigned char)(d - '0'); - else if ((d >= 'a') && (d <= 'f')) - uu |= (unsigned char)(d - ('a'-10)); - else - return (char *) 0; - *u = uu; - } - return c; -} - -/* - Pack 'void *' into a string buffer. -*/ -SWIGRUNTIME char * -SWIG_PackVoidPtr(char *buff, void *ptr, const char *name, size_t bsz) { - char *r = buff; - if ((2*sizeof(void *) + 2) > bsz) return 0; - *(r++) = '_'; - r = SWIG_PackData(r,&ptr,sizeof(void *)); - if (strlen(name) + 1 > (bsz - (r - buff))) return 0; - strcpy(r,name); - return buff; -} - -SWIGRUNTIME const char * -SWIG_UnpackVoidPtr(const char *c, void **ptr, const char *name) { - if (*c != '_') { - if (strcmp(c,"NULL") == 0) { - *ptr = (void *) 0; - return name; - } else { - return 0; - } - } - return SWIG_UnpackData(++c,ptr,sizeof(void *)); -} - -SWIGRUNTIME char * -SWIG_PackDataName(char *buff, void *ptr, size_t sz, const char *name, size_t bsz) { - char *r = buff; - size_t lname = (name ? strlen(name) : 0); - if ((2*sz + 2 + lname) > bsz) return 0; - *(r++) = '_'; - r = SWIG_PackData(r,ptr,sz); - if (lname) { - strncpy(r,name,lname+1); - } else { - *r = 0; - } - return buff; -} - -SWIGRUNTIME const char * -SWIG_UnpackDataName(const char *c, void *ptr, size_t sz, const char *name) { - if (*c != '_') { - if (strcmp(c,"NULL") == 0) { - memset(ptr,0,sz); - return name; - } else { - return 0; - } - } - return SWIG_UnpackData(++c,ptr,sz); -} - -#ifdef __cplusplus -} -#endif - -/* Errors in SWIG */ -#define SWIG_UnknownError -1 -#define SWIG_IOError -2 -#define SWIG_RuntimeError -3 -#define SWIG_IndexError -4 -#define SWIG_TypeError -5 -#define SWIG_DivisionByZero -6 -#define SWIG_OverflowError -7 -#define SWIG_SyntaxError -8 -#define SWIG_ValueError -9 -#define SWIG_SystemError -10 -#define SWIG_AttributeError -11 -#define SWIG_MemoryError -12 -#define SWIG_NullReferenceError -13 - - - -/* Compatibility macros for Python 3 */ -#if PY_VERSION_HEX >= 0x03000000 - -#define PyClass_Check(obj) PyObject_IsInstance(obj, (PyObject *)&PyType_Type) -#define PyInt_Check(x) PyLong_Check(x) -#define PyInt_AsLong(x) PyLong_AsLong(x) -#define PyInt_FromLong(x) PyLong_FromLong(x) -#define PyInt_FromSize_t(x) PyLong_FromSize_t(x) -#define PyString_Check(name) PyBytes_Check(name) -#define PyString_FromString(x) PyUnicode_FromString(x) -#define PyString_FromStringAndSize(x, y) PyBytes_FromStringAndSize(x, y) -#define PyString_Format(fmt, args) PyUnicode_Format(fmt, args) -#define PyString_AsString(str) PyBytes_AsString(str) -#define PyString_Size(str) PyBytes_Size(str) -#define PyString_InternFromString(key) PyUnicode_InternFromString(key) -#define Py_TPFLAGS_HAVE_CLASS Py_TPFLAGS_BASETYPE -#define PyString_AS_STRING(x) PyUnicode_AS_STRING(x) -#define _PyLong_FromSsize_t(x) PyLong_FromSsize_t(x) - -#endif - -#ifndef Py_TYPE -# define Py_TYPE(op) ((op)->ob_type) -#endif - -/* SWIG APIs for compatibility of both Python 2 & 3 */ - -#if PY_VERSION_HEX >= 0x03000000 -# define SWIG_Python_str_FromFormat PyUnicode_FromFormat -#else -# define SWIG_Python_str_FromFormat PyString_FromFormat -#endif - - -/* Warning: This function will allocate a new string in Python 3, - * so please call SWIG_Python_str_DelForPy3(x) to free the space. - */ -SWIGINTERN char* -SWIG_Python_str_AsChar(PyObject *str) -{ -#if PY_VERSION_HEX >= 0x03000000 - char *cstr; - char *newstr; - Py_ssize_t len; - str = PyUnicode_AsUTF8String(str); - PyBytes_AsStringAndSize(str, &cstr, &len); - newstr = (char *) malloc(len+1); - memcpy(newstr, cstr, len+1); - Py_XDECREF(str); - return newstr; -#else - return PyString_AsString(str); -#endif -} - -#if PY_VERSION_HEX >= 0x03000000 -# define SWIG_Python_str_DelForPy3(x) free( (void*) (x) ) -#else -# define SWIG_Python_str_DelForPy3(x) -#endif - - -SWIGINTERN PyObject* -SWIG_Python_str_FromChar(const char *c) -{ -#if PY_VERSION_HEX >= 0x03000000 - return PyUnicode_FromString(c); -#else - return PyString_FromString(c); -#endif -} - -/* Add PyOS_snprintf for old Pythons */ -#if PY_VERSION_HEX < 0x02020000 -# if defined(_MSC_VER) || defined(__BORLANDC__) || defined(_WATCOM) -# define PyOS_snprintf _snprintf -# else -# define PyOS_snprintf snprintf -# endif -#endif - -/* A crude PyString_FromFormat implementation for old Pythons */ -#if PY_VERSION_HEX < 0x02020000 - -#ifndef SWIG_PYBUFFER_SIZE -# define SWIG_PYBUFFER_SIZE 1024 -#endif - -static PyObject * -PyString_FromFormat(const char *fmt, ...) { - va_list ap; - char buf[SWIG_PYBUFFER_SIZE * 2]; - int res; - va_start(ap, fmt); - res = vsnprintf(buf, sizeof(buf), fmt, ap); - va_end(ap); - return (res < 0 || res >= (int)sizeof(buf)) ? 0 : PyString_FromString(buf); -} -#endif - -#ifndef PyObject_DEL -# define PyObject_DEL PyObject_Del -#endif - -/* A crude PyExc_StopIteration exception for old Pythons */ -#if PY_VERSION_HEX < 0x02020000 -# ifndef PyExc_StopIteration -# define PyExc_StopIteration PyExc_RuntimeError -# endif -# ifndef PyObject_GenericGetAttr -# define PyObject_GenericGetAttr 0 -# endif -#endif - -/* Py_NotImplemented is defined in 2.1 and up. */ -#if PY_VERSION_HEX < 0x02010000 -# ifndef Py_NotImplemented -# define Py_NotImplemented PyExc_RuntimeError -# endif -#endif - -/* A crude PyString_AsStringAndSize implementation for old Pythons */ -#if PY_VERSION_HEX < 0x02010000 -# ifndef PyString_AsStringAndSize -# define PyString_AsStringAndSize(obj, s, len) {*s = PyString_AsString(obj); *len = *s ? strlen(*s) : 0;} -# endif -#endif - -/* PySequence_Size for old Pythons */ -#if PY_VERSION_HEX < 0x02000000 -# ifndef PySequence_Size -# define PySequence_Size PySequence_Length -# endif -#endif - -/* PyBool_FromLong for old Pythons */ -#if PY_VERSION_HEX < 0x02030000 -static -PyObject *PyBool_FromLong(long ok) -{ - PyObject *result = ok ? Py_True : Py_False; - Py_INCREF(result); - return result; -} -#endif - -/* Py_ssize_t for old Pythons */ -/* This code is as recommended by: */ -/* http://www.python.org/dev/peps/pep-0353/#conversion-guidelines */ -#if PY_VERSION_HEX < 0x02050000 && !defined(PY_SSIZE_T_MIN) -typedef int Py_ssize_t; -# define PY_SSIZE_T_MAX INT_MAX -# define PY_SSIZE_T_MIN INT_MIN -typedef inquiry lenfunc; -typedef intargfunc ssizeargfunc; -typedef intintargfunc ssizessizeargfunc; -typedef intobjargproc ssizeobjargproc; -typedef intintobjargproc ssizessizeobjargproc; -typedef getreadbufferproc readbufferproc; -typedef getwritebufferproc writebufferproc; -typedef getsegcountproc segcountproc; -typedef getcharbufferproc charbufferproc; -static long PyNumber_AsSsize_t (PyObject *x, void *SWIGUNUSEDPARM(exc)) -{ - long result = 0; - PyObject *i = PyNumber_Int(x); - if (i) { - result = PyInt_AsLong(i); - Py_DECREF(i); - } - return result; -} -#endif - -#if PY_VERSION_HEX < 0x02050000 -#define PyInt_FromSize_t(x) PyInt_FromLong((long)x) -#endif - -#if PY_VERSION_HEX < 0x02040000 -#define Py_VISIT(op) \ - do { \ - if (op) { \ - int vret = visit((op), arg); \ - if (vret) \ - return vret; \ - } \ - } while (0) -#endif - -#if PY_VERSION_HEX < 0x02030000 -typedef struct { - PyTypeObject type; - PyNumberMethods as_number; - PyMappingMethods as_mapping; - PySequenceMethods as_sequence; - PyBufferProcs as_buffer; - PyObject *name, *slots; -} PyHeapTypeObject; -#endif - -#if PY_VERSION_HEX < 0x02030000 -typedef destructor freefunc; -#endif - -#if ((PY_MAJOR_VERSION == 2 && PY_MINOR_VERSION > 6) || \ - (PY_MAJOR_VERSION == 3 && PY_MINOR_VERSION > 0) || \ - (PY_MAJOR_VERSION > 3)) -# define SWIGPY_USE_CAPSULE -# define SWIGPY_CAPSULE_NAME ((char*)"swig_runtime_data" SWIG_RUNTIME_VERSION ".type_pointer_capsule" SWIG_TYPE_TABLE_NAME) -#endif - -#if PY_VERSION_HEX < 0x03020000 -#define PyDescr_TYPE(x) (((PyDescrObject *)(x))->d_type) -#define PyDescr_NAME(x) (((PyDescrObject *)(x))->d_name) -#define Py_hash_t long -#endif - -/* ----------------------------------------------------------------------------- - * error manipulation - * ----------------------------------------------------------------------------- */ - -SWIGRUNTIME PyObject* -SWIG_Python_ErrorType(int code) { - PyObject* type = 0; - switch(code) { - case SWIG_MemoryError: - type = PyExc_MemoryError; - break; - case SWIG_IOError: - type = PyExc_IOError; - break; - case SWIG_RuntimeError: - type = PyExc_RuntimeError; - break; - case SWIG_IndexError: - type = PyExc_IndexError; - break; - case SWIG_TypeError: - type = PyExc_TypeError; - break; - case SWIG_DivisionByZero: - type = PyExc_ZeroDivisionError; - break; - case SWIG_OverflowError: - type = PyExc_OverflowError; - break; - case SWIG_SyntaxError: - type = PyExc_SyntaxError; - break; - case SWIG_ValueError: - type = PyExc_ValueError; - break; - case SWIG_SystemError: - type = PyExc_SystemError; - break; - case SWIG_AttributeError: - type = PyExc_AttributeError; - break; - default: - type = PyExc_RuntimeError; - } - return type; -} - - -SWIGRUNTIME void -SWIG_Python_AddErrorMsg(const char* mesg) -{ - PyObject *type = 0; - PyObject *value = 0; - PyObject *traceback = 0; - - if (PyErr_Occurred()) PyErr_Fetch(&type, &value, &traceback); - if (value) { - char *tmp; - PyObject *old_str = PyObject_Str(value); - PyErr_Clear(); - Py_XINCREF(type); - - PyErr_Format(type, "%s %s", tmp = SWIG_Python_str_AsChar(old_str), mesg); - SWIG_Python_str_DelForPy3(tmp); - Py_DECREF(old_str); - Py_DECREF(value); - } else { - PyErr_SetString(PyExc_RuntimeError, mesg); - } -} - -#if defined(SWIG_PYTHON_NO_THREADS) -# if defined(SWIG_PYTHON_THREADS) -# undef SWIG_PYTHON_THREADS -# endif -#endif -#if defined(SWIG_PYTHON_THREADS) /* Threading support is enabled */ -# if !defined(SWIG_PYTHON_USE_GIL) && !defined(SWIG_PYTHON_NO_USE_GIL) -# if (PY_VERSION_HEX >= 0x02030000) /* For 2.3 or later, use the PyGILState calls */ -# define SWIG_PYTHON_USE_GIL -# endif -# endif -# if defined(SWIG_PYTHON_USE_GIL) /* Use PyGILState threads calls */ -# ifndef SWIG_PYTHON_INITIALIZE_THREADS -# define SWIG_PYTHON_INITIALIZE_THREADS PyEval_InitThreads() -# endif -# ifdef __cplusplus /* C++ code */ - class SWIG_Python_Thread_Block { - bool status; - PyGILState_STATE state; - public: - void end() { if (status) { PyGILState_Release(state); status = false;} } - SWIG_Python_Thread_Block() : status(true), state(PyGILState_Ensure()) {} - ~SWIG_Python_Thread_Block() { end(); } - }; - class SWIG_Python_Thread_Allow { - bool status; - PyThreadState *save; - public: - void end() { if (status) { PyEval_RestoreThread(save); status = false; }} - SWIG_Python_Thread_Allow() : status(true), save(PyEval_SaveThread()) {} - ~SWIG_Python_Thread_Allow() { end(); } - }; -# define SWIG_PYTHON_THREAD_BEGIN_BLOCK SWIG_Python_Thread_Block _swig_thread_block -# define SWIG_PYTHON_THREAD_END_BLOCK _swig_thread_block.end() -# define SWIG_PYTHON_THREAD_BEGIN_ALLOW SWIG_Python_Thread_Allow _swig_thread_allow -# define SWIG_PYTHON_THREAD_END_ALLOW _swig_thread_allow.end() -# else /* C code */ -# define SWIG_PYTHON_THREAD_BEGIN_BLOCK PyGILState_STATE _swig_thread_block = PyGILState_Ensure() -# define SWIG_PYTHON_THREAD_END_BLOCK PyGILState_Release(_swig_thread_block) -# define SWIG_PYTHON_THREAD_BEGIN_ALLOW PyThreadState *_swig_thread_allow = PyEval_SaveThread() -# define SWIG_PYTHON_THREAD_END_ALLOW PyEval_RestoreThread(_swig_thread_allow) -# endif -# else /* Old thread way, not implemented, user must provide it */ -# if !defined(SWIG_PYTHON_INITIALIZE_THREADS) -# define SWIG_PYTHON_INITIALIZE_THREADS -# endif -# if !defined(SWIG_PYTHON_THREAD_BEGIN_BLOCK) -# define SWIG_PYTHON_THREAD_BEGIN_BLOCK -# endif -# if !defined(SWIG_PYTHON_THREAD_END_BLOCK) -# define SWIG_PYTHON_THREAD_END_BLOCK -# endif -# if !defined(SWIG_PYTHON_THREAD_BEGIN_ALLOW) -# define SWIG_PYTHON_THREAD_BEGIN_ALLOW -# endif -# if !defined(SWIG_PYTHON_THREAD_END_ALLOW) -# define SWIG_PYTHON_THREAD_END_ALLOW -# endif -# endif -#else /* No thread support */ -# define SWIG_PYTHON_INITIALIZE_THREADS -# define SWIG_PYTHON_THREAD_BEGIN_BLOCK -# define SWIG_PYTHON_THREAD_END_BLOCK -# define SWIG_PYTHON_THREAD_BEGIN_ALLOW -# define SWIG_PYTHON_THREAD_END_ALLOW -#endif - -/* ----------------------------------------------------------------------------- - * Python API portion that goes into the runtime - * ----------------------------------------------------------------------------- */ - -#ifdef __cplusplus -extern "C" { -#endif - -/* ----------------------------------------------------------------------------- - * Constant declarations - * ----------------------------------------------------------------------------- */ - -/* Constant Types */ -#define SWIG_PY_POINTER 4 -#define SWIG_PY_BINARY 5 - -/* Constant information structure */ -typedef struct swig_const_info { - int type; - char *name; - long lvalue; - double dvalue; - void *pvalue; - swig_type_info **ptype; -} swig_const_info; - - -/* ----------------------------------------------------------------------------- - * Wrapper of PyInstanceMethod_New() used in Python 3 - * It is exported to the generated module, used for -fastproxy - * ----------------------------------------------------------------------------- */ -#if PY_VERSION_HEX >= 0x03000000 -SWIGRUNTIME PyObject* SWIG_PyInstanceMethod_New(PyObject *SWIGUNUSEDPARM(self), PyObject *func) -{ - return PyInstanceMethod_New(func); -} -#else -SWIGRUNTIME PyObject* SWIG_PyInstanceMethod_New(PyObject *SWIGUNUSEDPARM(self), PyObject *SWIGUNUSEDPARM(func)) -{ - return NULL; -} -#endif - -#ifdef __cplusplus -} -#endif - - -/* ----------------------------------------------------------------------------- - * pyrun.swg - * - * This file contains the runtime support for Python modules - * and includes code for managing global variables and pointer - * type checking. - * - * ----------------------------------------------------------------------------- */ - -/* Common SWIG API */ - -/* for raw pointers */ -#define SWIG_Python_ConvertPtr(obj, pptr, type, flags) SWIG_Python_ConvertPtrAndOwn(obj, pptr, type, flags, 0) -#define SWIG_ConvertPtr(obj, pptr, type, flags) SWIG_Python_ConvertPtr(obj, pptr, type, flags) -#define SWIG_ConvertPtrAndOwn(obj,pptr,type,flags,own) SWIG_Python_ConvertPtrAndOwn(obj, pptr, type, flags, own) - -#ifdef SWIGPYTHON_BUILTIN -#define SWIG_NewPointerObj(ptr, type, flags) SWIG_Python_NewPointerObj(self, ptr, type, flags) -#else -#define SWIG_NewPointerObj(ptr, type, flags) SWIG_Python_NewPointerObj(NULL, ptr, type, flags) -#endif - -#define SWIG_InternalNewPointerObj(ptr, type, flags) SWIG_Python_NewPointerObj(NULL, ptr, type, flags) - -#define SWIG_CheckImplicit(ty) SWIG_Python_CheckImplicit(ty) -#define SWIG_AcquirePtr(ptr, src) SWIG_Python_AcquirePtr(ptr, src) -#define swig_owntype int - -/* for raw packed data */ -#define SWIG_ConvertPacked(obj, ptr, sz, ty) SWIG_Python_ConvertPacked(obj, ptr, sz, ty) -#define SWIG_NewPackedObj(ptr, sz, type) SWIG_Python_NewPackedObj(ptr, sz, type) - -/* for class or struct pointers */ -#define SWIG_ConvertInstance(obj, pptr, type, flags) SWIG_ConvertPtr(obj, pptr, type, flags) -#define SWIG_NewInstanceObj(ptr, type, flags) SWIG_NewPointerObj(ptr, type, flags) - -/* for C or C++ function pointers */ -#define SWIG_ConvertFunctionPtr(obj, pptr, type) SWIG_Python_ConvertFunctionPtr(obj, pptr, type) -#define SWIG_NewFunctionPtrObj(ptr, type) SWIG_Python_NewPointerObj(NULL, ptr, type, 0) - -/* for C++ member pointers, ie, member methods */ -#define SWIG_ConvertMember(obj, ptr, sz, ty) SWIG_Python_ConvertPacked(obj, ptr, sz, ty) -#define SWIG_NewMemberObj(ptr, sz, type) SWIG_Python_NewPackedObj(ptr, sz, type) - - -/* Runtime API */ - -#define SWIG_GetModule(clientdata) SWIG_Python_GetModule(clientdata) -#define SWIG_SetModule(clientdata, pointer) SWIG_Python_SetModule(pointer) -#define SWIG_NewClientData(obj) SwigPyClientData_New(obj) - -#define SWIG_SetErrorObj SWIG_Python_SetErrorObj -#define SWIG_SetErrorMsg SWIG_Python_SetErrorMsg -#define SWIG_ErrorType(code) SWIG_Python_ErrorType(code) -#define SWIG_Error(code, msg) SWIG_Python_SetErrorMsg(SWIG_ErrorType(code), msg) -#define SWIG_fail goto fail - - -/* Runtime API implementation */ - -/* Error manipulation */ - -SWIGINTERN void -SWIG_Python_SetErrorObj(PyObject *errtype, PyObject *obj) { - SWIG_PYTHON_THREAD_BEGIN_BLOCK; - PyErr_SetObject(errtype, obj); - Py_DECREF(obj); - SWIG_PYTHON_THREAD_END_BLOCK; -} - -SWIGINTERN void -SWIG_Python_SetErrorMsg(PyObject *errtype, const char *msg) { - SWIG_PYTHON_THREAD_BEGIN_BLOCK; - PyErr_SetString(errtype, msg); - SWIG_PYTHON_THREAD_END_BLOCK; -} - -#define SWIG_Python_Raise(obj, type, desc) SWIG_Python_SetErrorObj(SWIG_Python_ExceptionType(desc), obj) - -/* Set a constant value */ - -#if defined(SWIGPYTHON_BUILTIN) - -SWIGINTERN void -SwigPyBuiltin_AddPublicSymbol(PyObject *seq, const char *key) { - PyObject *s = PyString_InternFromString(key); - PyList_Append(seq, s); - Py_DECREF(s); -} - -SWIGINTERN void -SWIG_Python_SetConstant(PyObject *d, PyObject *public_interface, const char *name, PyObject *obj) { -#if PY_VERSION_HEX < 0x02030000 - PyDict_SetItemString(d, (char *)name, obj); -#else - PyDict_SetItemString(d, name, obj); -#endif - Py_DECREF(obj); - if (public_interface) - SwigPyBuiltin_AddPublicSymbol(public_interface, name); -} - -#else - -SWIGINTERN void -SWIG_Python_SetConstant(PyObject *d, const char *name, PyObject *obj) { -#if PY_VERSION_HEX < 0x02030000 - PyDict_SetItemString(d, (char *)name, obj); -#else - PyDict_SetItemString(d, name, obj); -#endif - Py_DECREF(obj); -} - -#endif - -/* Append a value to the result obj */ - -SWIGINTERN PyObject* -SWIG_Python_AppendOutput(PyObject* result, PyObject* obj) { -#if !defined(SWIG_PYTHON_OUTPUT_TUPLE) - if (!result) { - result = obj; - } else if (result == Py_None) { - Py_DECREF(result); - result = obj; - } else { - if (!PyList_Check(result)) { - PyObject *o2 = result; - result = PyList_New(1); - PyList_SetItem(result, 0, o2); - } - PyList_Append(result,obj); - Py_DECREF(obj); - } - return result; -#else - PyObject* o2; - PyObject* o3; - if (!result) { - result = obj; - } else if (result == Py_None) { - Py_DECREF(result); - result = obj; - } else { - if (!PyTuple_Check(result)) { - o2 = result; - result = PyTuple_New(1); - PyTuple_SET_ITEM(result, 0, o2); - } - o3 = PyTuple_New(1); - PyTuple_SET_ITEM(o3, 0, obj); - o2 = result; - result = PySequence_Concat(o2, o3); - Py_DECREF(o2); - Py_DECREF(o3); - } - return result; -#endif -} - -/* Unpack the argument tuple */ - -SWIGINTERN Py_ssize_t -SWIG_Python_UnpackTuple(PyObject *args, const char *name, Py_ssize_t min, Py_ssize_t max, PyObject **objs) -{ - if (!args) { - if (!min && !max) { - return 1; - } else { - PyErr_Format(PyExc_TypeError, "%s expected %s%d arguments, got none", - name, (min == max ? "" : "at least "), (int)min); - return 0; - } - } - if (!PyTuple_Check(args)) { - if (min <= 1 && max >= 1) { - Py_ssize_t i; - objs[0] = args; - for (i = 1; i < max; ++i) { - objs[i] = 0; - } - return 2; - } - PyErr_SetString(PyExc_SystemError, "UnpackTuple() argument list is not a tuple"); - return 0; - } else { - Py_ssize_t l = PyTuple_GET_SIZE(args); - if (l < min) { - PyErr_Format(PyExc_TypeError, "%s expected %s%d arguments, got %d", - name, (min == max ? "" : "at least "), (int)min, (int)l); - return 0; - } else if (l > max) { - PyErr_Format(PyExc_TypeError, "%s expected %s%d arguments, got %d", - name, (min == max ? "" : "at most "), (int)max, (int)l); - return 0; - } else { - Py_ssize_t i; - for (i = 0; i < l; ++i) { - objs[i] = PyTuple_GET_ITEM(args, i); - } - for (; l < max; ++l) { - objs[l] = 0; - } - return i + 1; - } - } -} - -/* A functor is a function object with one single object argument */ -#if PY_VERSION_HEX >= 0x02020000 -#define SWIG_Python_CallFunctor(functor, obj) PyObject_CallFunctionObjArgs(functor, obj, NULL); -#else -#define SWIG_Python_CallFunctor(functor, obj) PyObject_CallFunction(functor, "O", obj); -#endif - -/* - Helper for static pointer initialization for both C and C++ code, for example - static PyObject *SWIG_STATIC_POINTER(MyVar) = NewSomething(...); -*/ -#ifdef __cplusplus -#define SWIG_STATIC_POINTER(var) var -#else -#define SWIG_STATIC_POINTER(var) var = 0; if (!var) var -#endif - -/* ----------------------------------------------------------------------------- - * Pointer declarations - * ----------------------------------------------------------------------------- */ - -/* Flags for new pointer objects */ -#define SWIG_POINTER_NOSHADOW (SWIG_POINTER_OWN << 1) -#define SWIG_POINTER_NEW (SWIG_POINTER_NOSHADOW | SWIG_POINTER_OWN) - -#define SWIG_POINTER_IMPLICIT_CONV (SWIG_POINTER_DISOWN << 1) - -#define SWIG_BUILTIN_TP_INIT (SWIG_POINTER_OWN << 2) -#define SWIG_BUILTIN_INIT (SWIG_BUILTIN_TP_INIT | SWIG_POINTER_OWN) - -#ifdef __cplusplus -extern "C" { -#endif - -/* How to access Py_None */ -#if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__) -# ifndef SWIG_PYTHON_NO_BUILD_NONE -# ifndef SWIG_PYTHON_BUILD_NONE -# define SWIG_PYTHON_BUILD_NONE -# endif -# endif -#endif - -#ifdef SWIG_PYTHON_BUILD_NONE -# ifdef Py_None -# undef Py_None -# define Py_None SWIG_Py_None() -# endif -SWIGRUNTIMEINLINE PyObject * -_SWIG_Py_None(void) -{ - PyObject *none = Py_BuildValue((char*)""); - Py_DECREF(none); - return none; -} -SWIGRUNTIME PyObject * -SWIG_Py_None(void) -{ - static PyObject *SWIG_STATIC_POINTER(none) = _SWIG_Py_None(); - return none; -} -#endif - -/* The python void return value */ - -SWIGRUNTIMEINLINE PyObject * -SWIG_Py_Void(void) -{ - PyObject *none = Py_None; - Py_INCREF(none); - return none; -} - -/* SwigPyClientData */ - -typedef struct { - PyObject *klass; - PyObject *newraw; - PyObject *newargs; - PyObject *destroy; - int delargs; - int implicitconv; - PyTypeObject *pytype; -} SwigPyClientData; - -SWIGRUNTIMEINLINE int -SWIG_Python_CheckImplicit(swig_type_info *ty) -{ - SwigPyClientData *data = (SwigPyClientData *)ty->clientdata; - return data ? data->implicitconv : 0; -} - -SWIGRUNTIMEINLINE PyObject * -SWIG_Python_ExceptionType(swig_type_info *desc) { - SwigPyClientData *data = desc ? (SwigPyClientData *) desc->clientdata : 0; - PyObject *klass = data ? data->klass : 0; - return (klass ? klass : PyExc_RuntimeError); -} - - -SWIGRUNTIME SwigPyClientData * -SwigPyClientData_New(PyObject* obj) -{ - if (!obj) { - return 0; - } else { - SwigPyClientData *data = (SwigPyClientData *)malloc(sizeof(SwigPyClientData)); - /* the klass element */ - data->klass = obj; - Py_INCREF(data->klass); - /* the newraw method and newargs arguments used to create a new raw instance */ - if (PyClass_Check(obj)) { - data->newraw = 0; - data->newargs = obj; - Py_INCREF(obj); - } else { -#if (PY_VERSION_HEX < 0x02020000) - data->newraw = 0; -#else - data->newraw = PyObject_GetAttrString(data->klass, (char *)"__new__"); -#endif - if (data->newraw) { - Py_INCREF(data->newraw); - data->newargs = PyTuple_New(1); - PyTuple_SetItem(data->newargs, 0, obj); - } else { - data->newargs = obj; - } - Py_INCREF(data->newargs); - } - /* the destroy method, aka as the C++ delete method */ - data->destroy = PyObject_GetAttrString(data->klass, (char *)"__swig_destroy__"); - if (PyErr_Occurred()) { - PyErr_Clear(); - data->destroy = 0; - } - if (data->destroy) { - int flags; - Py_INCREF(data->destroy); - flags = PyCFunction_GET_FLAGS(data->destroy); -#ifdef METH_O - data->delargs = !(flags & (METH_O)); -#else - data->delargs = 0; -#endif - } else { - data->delargs = 0; - } - data->implicitconv = 0; - data->pytype = 0; - return data; - } -} - -SWIGRUNTIME void -SwigPyClientData_Del(SwigPyClientData *data) { - Py_XDECREF(data->newraw); - Py_XDECREF(data->newargs); - Py_XDECREF(data->destroy); -} - -/* =============== SwigPyObject =====================*/ - -typedef struct { - PyObject_HEAD - void *ptr; - swig_type_info *ty; - int own; - PyObject *next; -#ifdef SWIGPYTHON_BUILTIN - PyObject *dict; -#endif -} SwigPyObject; - - -#ifdef SWIGPYTHON_BUILTIN - -SWIGRUNTIME PyObject * -SwigPyObject_get___dict__(PyObject *v, PyObject *SWIGUNUSEDPARM(args)) -{ - SwigPyObject *sobj = (SwigPyObject *)v; - - if (!sobj->dict) - sobj->dict = PyDict_New(); - - Py_INCREF(sobj->dict); - return sobj->dict; -} - -#endif - -SWIGRUNTIME PyObject * -SwigPyObject_long(SwigPyObject *v) -{ - return PyLong_FromVoidPtr(v->ptr); -} - -SWIGRUNTIME PyObject * -SwigPyObject_format(const char* fmt, SwigPyObject *v) -{ - PyObject *res = NULL; - PyObject *args = PyTuple_New(1); - if (args) { - if (PyTuple_SetItem(args, 0, SwigPyObject_long(v)) == 0) { - PyObject *ofmt = SWIG_Python_str_FromChar(fmt); - if (ofmt) { -#if PY_VERSION_HEX >= 0x03000000 - res = PyUnicode_Format(ofmt,args); -#else - res = PyString_Format(ofmt,args); -#endif - Py_DECREF(ofmt); - } - Py_DECREF(args); - } - } - return res; -} - -SWIGRUNTIME PyObject * -SwigPyObject_oct(SwigPyObject *v) -{ - return SwigPyObject_format("%o",v); -} - -SWIGRUNTIME PyObject * -SwigPyObject_hex(SwigPyObject *v) -{ - return SwigPyObject_format("%x",v); -} - -SWIGRUNTIME PyObject * -#ifdef METH_NOARGS -SwigPyObject_repr(SwigPyObject *v) -#else -SwigPyObject_repr(SwigPyObject *v, PyObject *args) -#endif -{ - const char *name = SWIG_TypePrettyName(v->ty); - PyObject *repr = SWIG_Python_str_FromFormat("", (name ? name : "unknown"), (void *)v); - if (v->next) { -# ifdef METH_NOARGS - PyObject *nrep = SwigPyObject_repr((SwigPyObject *)v->next); -# else - PyObject *nrep = SwigPyObject_repr((SwigPyObject *)v->next, args); -# endif -# if PY_VERSION_HEX >= 0x03000000 - PyObject *joined = PyUnicode_Concat(repr, nrep); - Py_DecRef(repr); - Py_DecRef(nrep); - repr = joined; -# else - PyString_ConcatAndDel(&repr,nrep); -# endif - } - return repr; -} - -/* We need a version taking two PyObject* parameters so it's a valid - * PyCFunction to use in swigobject_methods[]. */ -SWIGRUNTIME PyObject * -SwigPyObject_repr2(PyObject *v, PyObject *SWIGUNUSEDPARM(args)) -{ - return SwigPyObject_repr((SwigPyObject*)v); -} - -SWIGRUNTIME int -SwigPyObject_compare(SwigPyObject *v, SwigPyObject *w) -{ - void *i = v->ptr; - void *j = w->ptr; - return (i < j) ? -1 : ((i > j) ? 1 : 0); -} - -/* Added for Python 3.x, would it also be useful for Python 2.x? */ -SWIGRUNTIME PyObject* -SwigPyObject_richcompare(SwigPyObject *v, SwigPyObject *w, int op) -{ - PyObject* res; - if( op != Py_EQ && op != Py_NE ) { - Py_INCREF(Py_NotImplemented); - return Py_NotImplemented; - } - res = PyBool_FromLong( (SwigPyObject_compare(v, w)==0) == (op == Py_EQ) ? 1 : 0); - return res; -} - - -SWIGRUNTIME PyTypeObject* SwigPyObject_TypeOnce(void); - -#ifdef SWIGPYTHON_BUILTIN -static swig_type_info *SwigPyObject_stype = 0; -SWIGRUNTIME PyTypeObject* -SwigPyObject_type(void) { - SwigPyClientData *cd; - assert(SwigPyObject_stype); - cd = (SwigPyClientData*) SwigPyObject_stype->clientdata; - assert(cd); - assert(cd->pytype); - return cd->pytype; -} -#else -SWIGRUNTIME PyTypeObject* -SwigPyObject_type(void) { - static PyTypeObject *SWIG_STATIC_POINTER(type) = SwigPyObject_TypeOnce(); - return type; -} -#endif - -SWIGRUNTIMEINLINE int -SwigPyObject_Check(PyObject *op) { -#ifdef SWIGPYTHON_BUILTIN - PyTypeObject *target_tp = SwigPyObject_type(); - if (PyType_IsSubtype(op->ob_type, target_tp)) - return 1; - return (strcmp(op->ob_type->tp_name, "SwigPyObject") == 0); -#else - return (Py_TYPE(op) == SwigPyObject_type()) - || (strcmp(Py_TYPE(op)->tp_name,"SwigPyObject") == 0); -#endif -} - -SWIGRUNTIME PyObject * -SwigPyObject_New(void *ptr, swig_type_info *ty, int own); - -SWIGRUNTIME void -SwigPyObject_dealloc(PyObject *v) -{ - SwigPyObject *sobj = (SwigPyObject *) v; - PyObject *next = sobj->next; - if (sobj->own == SWIG_POINTER_OWN) { - swig_type_info *ty = sobj->ty; - SwigPyClientData *data = ty ? (SwigPyClientData *) ty->clientdata : 0; - PyObject *destroy = data ? data->destroy : 0; - if (destroy) { - /* destroy is always a VARARGS method */ - PyObject *res; - - /* PyObject_CallFunction() has the potential to silently drop - the active active exception. In cases of unnamed temporary - variable or where we just finished iterating over a generator - StopIteration will be active right now, and this needs to - remain true upon return from SwigPyObject_dealloc. So save - and restore. */ - - PyObject *val = NULL, *type = NULL, *tb = NULL; - PyErr_Fetch(&val, &type, &tb); - - if (data->delargs) { - /* we need to create a temporary object to carry the destroy operation */ - PyObject *tmp = SwigPyObject_New(sobj->ptr, ty, 0); - res = SWIG_Python_CallFunctor(destroy, tmp); - Py_DECREF(tmp); - } else { - PyCFunction meth = PyCFunction_GET_FUNCTION(destroy); - PyObject *mself = PyCFunction_GET_SELF(destroy); - res = ((*meth)(mself, v)); - } - if (!res) - PyErr_WriteUnraisable(destroy); - - PyErr_Restore(val, type, tb); - - Py_XDECREF(res); - } -#if !defined(SWIG_PYTHON_SILENT_MEMLEAK) - else { - const char *name = SWIG_TypePrettyName(ty); - printf("swig/python detected a memory leak of type '%s', no destructor found.\n", (name ? name : "unknown")); - } -#endif - } - Py_XDECREF(next); - PyObject_DEL(v); -} - -SWIGRUNTIME PyObject* -SwigPyObject_append(PyObject* v, PyObject* next) -{ - SwigPyObject *sobj = (SwigPyObject *) v; -#ifndef METH_O - PyObject *tmp = 0; - if (!PyArg_ParseTuple(next,(char *)"O:append", &tmp)) return NULL; - next = tmp; -#endif - if (!SwigPyObject_Check(next)) { - PyErr_SetString(PyExc_TypeError, "Attempt to append a non SwigPyObject"); - return NULL; - } - sobj->next = next; - Py_INCREF(next); - return SWIG_Py_Void(); -} - -SWIGRUNTIME PyObject* -SwigPyObject_next(PyObject* v, PyObject *SWIGUNUSEDPARM(args)) -{ - SwigPyObject *sobj = (SwigPyObject *) v; - if (sobj->next) { - Py_INCREF(sobj->next); - return sobj->next; - } else { - return SWIG_Py_Void(); - } -} - -SWIGINTERN PyObject* -#ifdef METH_NOARGS -SwigPyObject_disown(PyObject *v) -#else -SwigPyObject_disown(PyObject* v, PyObject *SWIGUNUSEDPARM(args)) -#endif -{ - SwigPyObject *sobj = (SwigPyObject *)v; - sobj->own = 0; - return SWIG_Py_Void(); -} - -SWIGINTERN PyObject* -#ifdef METH_NOARGS -SwigPyObject_acquire(PyObject *v) -#else -SwigPyObject_acquire(PyObject* v, PyObject *SWIGUNUSEDPARM(args)) -#endif -{ - SwigPyObject *sobj = (SwigPyObject *)v; - sobj->own = SWIG_POINTER_OWN; - return SWIG_Py_Void(); -} - -#ifdef METH_NOARGS -static PyObject* -SwigPyObject_disown2(PyObject* v, PyObject *SWIGUNUSEDPARM(args)) -{ - return SwigPyObject_disown(v); -} - -static PyObject* -SwigPyObject_acquire2(PyObject* v, PyObject *SWIGUNUSEDPARM(args)) -{ - return SwigPyObject_acquire(v); -} -#endif - -SWIGINTERN PyObject* -SwigPyObject_own(PyObject *v, PyObject *args) -{ - PyObject *val = 0; -#if (PY_VERSION_HEX < 0x02020000) - if (!PyArg_ParseTuple(args,(char *)"|O:own",&val)) -#elif (PY_VERSION_HEX < 0x02050000) - if (!PyArg_UnpackTuple(args, (char *)"own", 0, 1, &val)) -#else - if (!PyArg_UnpackTuple(args, "own", 0, 1, &val)) -#endif - { - return NULL; - } - else - { - SwigPyObject *sobj = (SwigPyObject *)v; - PyObject *obj = PyBool_FromLong(sobj->own); - if (val) { -#ifdef METH_NOARGS - if (PyObject_IsTrue(val)) { - SwigPyObject_acquire(v); - } else { - SwigPyObject_disown(v); - } -#else - if (PyObject_IsTrue(val)) { - SwigPyObject_acquire(v,args); - } else { - SwigPyObject_disown(v,args); - } -#endif - } - return obj; - } -} - -#ifdef METH_O -static PyMethodDef -swigobject_methods[] = { - {(char *)"disown", (PyCFunction)SwigPyObject_disown2, METH_NOARGS, (char *)"releases ownership of the pointer"}, - {(char *)"acquire", (PyCFunction)SwigPyObject_acquire2,METH_NOARGS, (char *)"acquires ownership of the pointer"}, - {(char *)"own", (PyCFunction)SwigPyObject_own, METH_VARARGS, (char *)"returns/sets ownership of the pointer"}, - {(char *)"append", (PyCFunction)SwigPyObject_append, METH_O, (char *)"appends another 'this' object"}, - {(char *)"next", (PyCFunction)SwigPyObject_next, METH_NOARGS, (char *)"returns the next 'this' object"}, - {(char *)"__repr__",(PyCFunction)SwigPyObject_repr2, METH_NOARGS, (char *)"returns object representation"}, - {0, 0, 0, 0} -}; -#else -static PyMethodDef -swigobject_methods[] = { - {(char *)"disown", (PyCFunction)SwigPyObject_disown, METH_VARARGS, (char *)"releases ownership of the pointer"}, - {(char *)"acquire", (PyCFunction)SwigPyObject_acquire, METH_VARARGS, (char *)"acquires ownership of the pointer"}, - {(char *)"own", (PyCFunction)SwigPyObject_own, METH_VARARGS, (char *)"returns/sets ownership of the pointer"}, - {(char *)"append", (PyCFunction)SwigPyObject_append, METH_VARARGS, (char *)"appends another 'this' object"}, - {(char *)"next", (PyCFunction)SwigPyObject_next, METH_VARARGS, (char *)"returns the next 'this' object"}, - {(char *)"__repr__",(PyCFunction)SwigPyObject_repr, METH_VARARGS, (char *)"returns object representation"}, - {0, 0, 0, 0} -}; -#endif - -#if PY_VERSION_HEX < 0x02020000 -SWIGINTERN PyObject * -SwigPyObject_getattr(SwigPyObject *sobj,char *name) -{ - return Py_FindMethod(swigobject_methods, (PyObject *)sobj, name); -} -#endif - -SWIGRUNTIME PyTypeObject* -SwigPyObject_TypeOnce(void) { - static char swigobject_doc[] = "Swig object carries a C/C++ instance pointer"; - - static PyNumberMethods SwigPyObject_as_number = { - (binaryfunc)0, /*nb_add*/ - (binaryfunc)0, /*nb_subtract*/ - (binaryfunc)0, /*nb_multiply*/ - /* nb_divide removed in Python 3 */ -#if PY_VERSION_HEX < 0x03000000 - (binaryfunc)0, /*nb_divide*/ -#endif - (binaryfunc)0, /*nb_remainder*/ - (binaryfunc)0, /*nb_divmod*/ - (ternaryfunc)0,/*nb_power*/ - (unaryfunc)0, /*nb_negative*/ - (unaryfunc)0, /*nb_positive*/ - (unaryfunc)0, /*nb_absolute*/ - (inquiry)0, /*nb_nonzero*/ - 0, /*nb_invert*/ - 0, /*nb_lshift*/ - 0, /*nb_rshift*/ - 0, /*nb_and*/ - 0, /*nb_xor*/ - 0, /*nb_or*/ -#if PY_VERSION_HEX < 0x03000000 - 0, /*nb_coerce*/ -#endif - (unaryfunc)SwigPyObject_long, /*nb_int*/ -#if PY_VERSION_HEX < 0x03000000 - (unaryfunc)SwigPyObject_long, /*nb_long*/ -#else - 0, /*nb_reserved*/ -#endif - (unaryfunc)0, /*nb_float*/ -#if PY_VERSION_HEX < 0x03000000 - (unaryfunc)SwigPyObject_oct, /*nb_oct*/ - (unaryfunc)SwigPyObject_hex, /*nb_hex*/ -#endif -#if PY_VERSION_HEX >= 0x03050000 /* 3.5 */ - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /* nb_inplace_add -> nb_inplace_matrix_multiply */ -#elif PY_VERSION_HEX >= 0x03000000 /* 3.0 */ - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /* nb_inplace_add -> nb_index, nb_inplace_divide removed */ -#elif PY_VERSION_HEX >= 0x02050000 /* 2.5.0 */ - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /* nb_inplace_add -> nb_index */ -#elif PY_VERSION_HEX >= 0x02020000 /* 2.2.0 */ - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /* nb_inplace_add -> nb_inplace_true_divide */ -#elif PY_VERSION_HEX >= 0x02000000 /* 2.0.0 */ - 0,0,0,0,0,0,0,0,0,0,0 /* nb_inplace_add -> nb_inplace_or */ -#endif - }; - - static PyTypeObject swigpyobject_type; - static int type_init = 0; - if (!type_init) { - const PyTypeObject tmp = { -#if PY_VERSION_HEX >= 0x03000000 - PyVarObject_HEAD_INIT(NULL, 0) -#else - PyObject_HEAD_INIT(NULL) - 0, /* ob_size */ -#endif - (char *)"SwigPyObject", /* tp_name */ - sizeof(SwigPyObject), /* tp_basicsize */ - 0, /* tp_itemsize */ - (destructor)SwigPyObject_dealloc, /* tp_dealloc */ - 0, /* tp_print */ -#if PY_VERSION_HEX < 0x02020000 - (getattrfunc)SwigPyObject_getattr, /* tp_getattr */ -#else - (getattrfunc)0, /* tp_getattr */ -#endif - (setattrfunc)0, /* tp_setattr */ -#if PY_VERSION_HEX >= 0x03000000 - 0, /* tp_reserved in 3.0.1, tp_compare in 3.0.0 but not used */ -#else - (cmpfunc)SwigPyObject_compare, /* tp_compare */ -#endif - (reprfunc)SwigPyObject_repr, /* tp_repr */ - &SwigPyObject_as_number, /* tp_as_number */ - 0, /* tp_as_sequence */ - 0, /* tp_as_mapping */ - (hashfunc)0, /* tp_hash */ - (ternaryfunc)0, /* tp_call */ - 0, /* tp_str */ - PyObject_GenericGetAttr, /* tp_getattro */ - 0, /* tp_setattro */ - 0, /* tp_as_buffer */ - Py_TPFLAGS_DEFAULT, /* tp_flags */ - swigobject_doc, /* tp_doc */ - 0, /* tp_traverse */ - 0, /* tp_clear */ - (richcmpfunc)SwigPyObject_richcompare,/* tp_richcompare */ - 0, /* tp_weaklistoffset */ -#if PY_VERSION_HEX >= 0x02020000 - 0, /* tp_iter */ - 0, /* tp_iternext */ - swigobject_methods, /* tp_methods */ - 0, /* tp_members */ - 0, /* tp_getset */ - 0, /* tp_base */ - 0, /* tp_dict */ - 0, /* tp_descr_get */ - 0, /* tp_descr_set */ - 0, /* tp_dictoffset */ - 0, /* tp_init */ - 0, /* tp_alloc */ - 0, /* tp_new */ - 0, /* tp_free */ - 0, /* tp_is_gc */ - 0, /* tp_bases */ - 0, /* tp_mro */ - 0, /* tp_cache */ - 0, /* tp_subclasses */ - 0, /* tp_weaklist */ -#endif -#if PY_VERSION_HEX >= 0x02030000 - 0, /* tp_del */ -#endif -#if PY_VERSION_HEX >= 0x02060000 - 0, /* tp_version_tag */ -#endif -#if PY_VERSION_HEX >= 0x03040000 - 0, /* tp_finalize */ -#endif -#ifdef COUNT_ALLOCS - 0, /* tp_allocs */ - 0, /* tp_frees */ - 0, /* tp_maxalloc */ -#if PY_VERSION_HEX >= 0x02050000 - 0, /* tp_prev */ -#endif - 0 /* tp_next */ -#endif - }; - swigpyobject_type = tmp; - type_init = 1; -#if PY_VERSION_HEX < 0x02020000 - swigpyobject_type.ob_type = &PyType_Type; -#else - if (PyType_Ready(&swigpyobject_type) < 0) - return NULL; -#endif - } - return &swigpyobject_type; -} - -SWIGRUNTIME PyObject * -SwigPyObject_New(void *ptr, swig_type_info *ty, int own) -{ - SwigPyObject *sobj = PyObject_NEW(SwigPyObject, SwigPyObject_type()); - if (sobj) { - sobj->ptr = ptr; - sobj->ty = ty; - sobj->own = own; - sobj->next = 0; - } - return (PyObject *)sobj; -} - -/* ----------------------------------------------------------------------------- - * Implements a simple Swig Packed type, and use it instead of string - * ----------------------------------------------------------------------------- */ - -typedef struct { - PyObject_HEAD - void *pack; - swig_type_info *ty; - size_t size; -} SwigPyPacked; - -SWIGRUNTIME int -SwigPyPacked_print(SwigPyPacked *v, FILE *fp, int SWIGUNUSEDPARM(flags)) -{ - char result[SWIG_BUFFER_SIZE]; - fputs("pack, v->size, 0, sizeof(result))) { - fputs("at ", fp); - fputs(result, fp); - } - fputs(v->ty->name,fp); - fputs(">", fp); - return 0; -} - -SWIGRUNTIME PyObject * -SwigPyPacked_repr(SwigPyPacked *v) -{ - char result[SWIG_BUFFER_SIZE]; - if (SWIG_PackDataName(result, v->pack, v->size, 0, sizeof(result))) { - return SWIG_Python_str_FromFormat("", result, v->ty->name); - } else { - return SWIG_Python_str_FromFormat("", v->ty->name); - } -} - -SWIGRUNTIME PyObject * -SwigPyPacked_str(SwigPyPacked *v) -{ - char result[SWIG_BUFFER_SIZE]; - if (SWIG_PackDataName(result, v->pack, v->size, 0, sizeof(result))){ - return SWIG_Python_str_FromFormat("%s%s", result, v->ty->name); - } else { - return SWIG_Python_str_FromChar(v->ty->name); - } -} - -SWIGRUNTIME int -SwigPyPacked_compare(SwigPyPacked *v, SwigPyPacked *w) -{ - size_t i = v->size; - size_t j = w->size; - int s = (i < j) ? -1 : ((i > j) ? 1 : 0); - return s ? s : strncmp((char *)v->pack, (char *)w->pack, 2*v->size); -} - -SWIGRUNTIME PyTypeObject* SwigPyPacked_TypeOnce(void); - -SWIGRUNTIME PyTypeObject* -SwigPyPacked_type(void) { - static PyTypeObject *SWIG_STATIC_POINTER(type) = SwigPyPacked_TypeOnce(); - return type; -} - -SWIGRUNTIMEINLINE int -SwigPyPacked_Check(PyObject *op) { - return ((op)->ob_type == SwigPyPacked_TypeOnce()) - || (strcmp((op)->ob_type->tp_name,"SwigPyPacked") == 0); -} - -SWIGRUNTIME void -SwigPyPacked_dealloc(PyObject *v) -{ - if (SwigPyPacked_Check(v)) { - SwigPyPacked *sobj = (SwigPyPacked *) v; - free(sobj->pack); - } - PyObject_DEL(v); -} - -SWIGRUNTIME PyTypeObject* -SwigPyPacked_TypeOnce(void) { - static char swigpacked_doc[] = "Swig object carries a C/C++ instance pointer"; - static PyTypeObject swigpypacked_type; - static int type_init = 0; - if (!type_init) { - const PyTypeObject tmp = { -#if PY_VERSION_HEX>=0x03000000 - PyVarObject_HEAD_INIT(NULL, 0) -#else - PyObject_HEAD_INIT(NULL) - 0, /* ob_size */ -#endif - (char *)"SwigPyPacked", /* tp_name */ - sizeof(SwigPyPacked), /* tp_basicsize */ - 0, /* tp_itemsize */ - (destructor)SwigPyPacked_dealloc, /* tp_dealloc */ - (printfunc)SwigPyPacked_print, /* tp_print */ - (getattrfunc)0, /* tp_getattr */ - (setattrfunc)0, /* tp_setattr */ -#if PY_VERSION_HEX>=0x03000000 - 0, /* tp_reserved in 3.0.1 */ -#else - (cmpfunc)SwigPyPacked_compare, /* tp_compare */ -#endif - (reprfunc)SwigPyPacked_repr, /* tp_repr */ - 0, /* tp_as_number */ - 0, /* tp_as_sequence */ - 0, /* tp_as_mapping */ - (hashfunc)0, /* tp_hash */ - (ternaryfunc)0, /* tp_call */ - (reprfunc)SwigPyPacked_str, /* tp_str */ - PyObject_GenericGetAttr, /* tp_getattro */ - 0, /* tp_setattro */ - 0, /* tp_as_buffer */ - Py_TPFLAGS_DEFAULT, /* tp_flags */ - swigpacked_doc, /* tp_doc */ - 0, /* tp_traverse */ - 0, /* tp_clear */ - 0, /* tp_richcompare */ - 0, /* tp_weaklistoffset */ -#if PY_VERSION_HEX >= 0x02020000 - 0, /* tp_iter */ - 0, /* tp_iternext */ - 0, /* tp_methods */ - 0, /* tp_members */ - 0, /* tp_getset */ - 0, /* tp_base */ - 0, /* tp_dict */ - 0, /* tp_descr_get */ - 0, /* tp_descr_set */ - 0, /* tp_dictoffset */ - 0, /* tp_init */ - 0, /* tp_alloc */ - 0, /* tp_new */ - 0, /* tp_free */ - 0, /* tp_is_gc */ - 0, /* tp_bases */ - 0, /* tp_mro */ - 0, /* tp_cache */ - 0, /* tp_subclasses */ - 0, /* tp_weaklist */ -#endif -#if PY_VERSION_HEX >= 0x02030000 - 0, /* tp_del */ -#endif -#if PY_VERSION_HEX >= 0x02060000 - 0, /* tp_version_tag */ -#endif -#if PY_VERSION_HEX >= 0x03040000 - 0, /* tp_finalize */ -#endif -#ifdef COUNT_ALLOCS - 0, /* tp_allocs */ - 0, /* tp_frees */ - 0, /* tp_maxalloc */ -#if PY_VERSION_HEX >= 0x02050000 - 0, /* tp_prev */ -#endif - 0 /* tp_next */ -#endif - }; - swigpypacked_type = tmp; - type_init = 1; -#if PY_VERSION_HEX < 0x02020000 - swigpypacked_type.ob_type = &PyType_Type; -#else - if (PyType_Ready(&swigpypacked_type) < 0) - return NULL; -#endif - } - return &swigpypacked_type; -} - -SWIGRUNTIME PyObject * -SwigPyPacked_New(void *ptr, size_t size, swig_type_info *ty) -{ - SwigPyPacked *sobj = PyObject_NEW(SwigPyPacked, SwigPyPacked_type()); - if (sobj) { - void *pack = malloc(size); - if (pack) { - memcpy(pack, ptr, size); - sobj->pack = pack; - sobj->ty = ty; - sobj->size = size; - } else { - PyObject_DEL((PyObject *) sobj); - sobj = 0; - } - } - return (PyObject *) sobj; -} - -SWIGRUNTIME swig_type_info * -SwigPyPacked_UnpackData(PyObject *obj, void *ptr, size_t size) -{ - if (SwigPyPacked_Check(obj)) { - SwigPyPacked *sobj = (SwigPyPacked *)obj; - if (sobj->size != size) return 0; - memcpy(ptr, sobj->pack, size); - return sobj->ty; - } else { - return 0; - } -} - -/* ----------------------------------------------------------------------------- - * pointers/data manipulation - * ----------------------------------------------------------------------------- */ - -SWIGRUNTIMEINLINE PyObject * -_SWIG_This(void) -{ - return SWIG_Python_str_FromChar("this"); -} - -static PyObject *swig_this = NULL; - -SWIGRUNTIME PyObject * -SWIG_This(void) -{ - if (swig_this == NULL) - swig_this = _SWIG_This(); - return swig_this; -} - -/* #define SWIG_PYTHON_SLOW_GETSET_THIS */ - -/* TODO: I don't know how to implement the fast getset in Python 3 right now */ -#if PY_VERSION_HEX>=0x03000000 -#define SWIG_PYTHON_SLOW_GETSET_THIS -#endif - -SWIGRUNTIME SwigPyObject * -SWIG_Python_GetSwigThis(PyObject *pyobj) -{ - PyObject *obj; - - if (SwigPyObject_Check(pyobj)) - return (SwigPyObject *) pyobj; - -#ifdef SWIGPYTHON_BUILTIN - (void)obj; -# ifdef PyWeakref_CheckProxy - if (PyWeakref_CheckProxy(pyobj)) { - pyobj = PyWeakref_GET_OBJECT(pyobj); - if (pyobj && SwigPyObject_Check(pyobj)) - return (SwigPyObject*) pyobj; - } -# endif - return NULL; -#else - - obj = 0; - -#if (!defined(SWIG_PYTHON_SLOW_GETSET_THIS) && (PY_VERSION_HEX >= 0x02030000)) - if (PyInstance_Check(pyobj)) { - obj = _PyInstance_Lookup(pyobj, SWIG_This()); - } else { - PyObject **dictptr = _PyObject_GetDictPtr(pyobj); - if (dictptr != NULL) { - PyObject *dict = *dictptr; - obj = dict ? PyDict_GetItem(dict, SWIG_This()) : 0; - } else { -#ifdef PyWeakref_CheckProxy - if (PyWeakref_CheckProxy(pyobj)) { - PyObject *wobj = PyWeakref_GET_OBJECT(pyobj); - return wobj ? SWIG_Python_GetSwigThis(wobj) : 0; - } -#endif - obj = PyObject_GetAttr(pyobj,SWIG_This()); - if (obj) { - Py_DECREF(obj); - } else { - if (PyErr_Occurred()) PyErr_Clear(); - return 0; - } - } - } -#else - obj = PyObject_GetAttr(pyobj,SWIG_This()); - if (obj) { - Py_DECREF(obj); - } else { - if (PyErr_Occurred()) PyErr_Clear(); - return 0; - } -#endif - if (obj && !SwigPyObject_Check(obj)) { - /* a PyObject is called 'this', try to get the 'real this' - SwigPyObject from it */ - return SWIG_Python_GetSwigThis(obj); - } - return (SwigPyObject *)obj; -#endif -} - -/* Acquire a pointer value */ - -SWIGRUNTIME int -SWIG_Python_AcquirePtr(PyObject *obj, int own) { - if (own == SWIG_POINTER_OWN) { - SwigPyObject *sobj = SWIG_Python_GetSwigThis(obj); - if (sobj) { - int oldown = sobj->own; - sobj->own = own; - return oldown; - } - } - return 0; -} - -/* Convert a pointer value */ - -SWIGRUNTIME int -SWIG_Python_ConvertPtrAndOwn(PyObject *obj, void **ptr, swig_type_info *ty, int flags, int *own) { - int res; - SwigPyObject *sobj; - int implicit_conv = (flags & SWIG_POINTER_IMPLICIT_CONV) != 0; - - if (!obj) - return SWIG_ERROR; - if (obj == Py_None && !implicit_conv) { - if (ptr) - *ptr = 0; - return SWIG_OK; - } - - res = SWIG_ERROR; - - sobj = SWIG_Python_GetSwigThis(obj); - if (own) - *own = 0; - while (sobj) { - void *vptr = sobj->ptr; - if (ty) { - swig_type_info *to = sobj->ty; - if (to == ty) { - /* no type cast needed */ - if (ptr) *ptr = vptr; - break; - } else { - swig_cast_info *tc = SWIG_TypeCheck(to->name,ty); - if (!tc) { - sobj = (SwigPyObject *)sobj->next; - } else { - if (ptr) { - int newmemory = 0; - *ptr = SWIG_TypeCast(tc,vptr,&newmemory); - if (newmemory == SWIG_CAST_NEW_MEMORY) { - assert(own); /* badly formed typemap which will lead to a memory leak - it must set and use own to delete *ptr */ - if (own) - *own = *own | SWIG_CAST_NEW_MEMORY; - } - } - break; - } - } - } else { - if (ptr) *ptr = vptr; - break; - } - } - if (sobj) { - if (own) - *own = *own | sobj->own; - if (flags & SWIG_POINTER_DISOWN) { - sobj->own = 0; - } - res = SWIG_OK; - } else { - if (implicit_conv) { - SwigPyClientData *data = ty ? (SwigPyClientData *) ty->clientdata : 0; - if (data && !data->implicitconv) { - PyObject *klass = data->klass; - if (klass) { - PyObject *impconv; - data->implicitconv = 1; /* avoid recursion and call 'explicit' constructors*/ - impconv = SWIG_Python_CallFunctor(klass, obj); - data->implicitconv = 0; - if (PyErr_Occurred()) { - PyErr_Clear(); - impconv = 0; - } - if (impconv) { - SwigPyObject *iobj = SWIG_Python_GetSwigThis(impconv); - if (iobj) { - void *vptr; - res = SWIG_Python_ConvertPtrAndOwn((PyObject*)iobj, &vptr, ty, 0, 0); - if (SWIG_IsOK(res)) { - if (ptr) { - *ptr = vptr; - /* transfer the ownership to 'ptr' */ - iobj->own = 0; - res = SWIG_AddCast(res); - res = SWIG_AddNewMask(res); - } else { - res = SWIG_AddCast(res); - } - } - } - Py_DECREF(impconv); - } - } - } - } - if (!SWIG_IsOK(res) && obj == Py_None) { - if (ptr) - *ptr = 0; - if (PyErr_Occurred()) - PyErr_Clear(); - res = SWIG_OK; - } - } - return res; -} - -/* Convert a function ptr value */ - -SWIGRUNTIME int -SWIG_Python_ConvertFunctionPtr(PyObject *obj, void **ptr, swig_type_info *ty) { - if (!PyCFunction_Check(obj)) { - return SWIG_ConvertPtr(obj, ptr, ty, 0); - } else { - void *vptr = 0; - - /* here we get the method pointer for callbacks */ - const char *doc = (((PyCFunctionObject *)obj) -> m_ml -> ml_doc); - const char *desc = doc ? strstr(doc, "swig_ptr: ") : 0; - if (desc) - desc = ty ? SWIG_UnpackVoidPtr(desc + 10, &vptr, ty->name) : 0; - if (!desc) - return SWIG_ERROR; - if (ty) { - swig_cast_info *tc = SWIG_TypeCheck(desc,ty); - if (tc) { - int newmemory = 0; - *ptr = SWIG_TypeCast(tc,vptr,&newmemory); - assert(!newmemory); /* newmemory handling not yet implemented */ - } else { - return SWIG_ERROR; - } - } else { - *ptr = vptr; - } - return SWIG_OK; - } -} - -/* Convert a packed value value */ - -SWIGRUNTIME int -SWIG_Python_ConvertPacked(PyObject *obj, void *ptr, size_t sz, swig_type_info *ty) { - swig_type_info *to = SwigPyPacked_UnpackData(obj, ptr, sz); - if (!to) return SWIG_ERROR; - if (ty) { - if (to != ty) { - /* check type cast? */ - swig_cast_info *tc = SWIG_TypeCheck(to->name,ty); - if (!tc) return SWIG_ERROR; - } - } - return SWIG_OK; -} - -/* ----------------------------------------------------------------------------- - * Create a new pointer object - * ----------------------------------------------------------------------------- */ - -/* - Create a new instance object, without calling __init__, and set the - 'this' attribute. -*/ - -SWIGRUNTIME PyObject* -SWIG_Python_NewShadowInstance(SwigPyClientData *data, PyObject *swig_this) -{ -#if (PY_VERSION_HEX >= 0x02020000) - PyObject *inst = 0; - PyObject *newraw = data->newraw; - if (newraw) { - inst = PyObject_Call(newraw, data->newargs, NULL); - if (inst) { -#if !defined(SWIG_PYTHON_SLOW_GETSET_THIS) - PyObject **dictptr = _PyObject_GetDictPtr(inst); - if (dictptr != NULL) { - PyObject *dict = *dictptr; - if (dict == NULL) { - dict = PyDict_New(); - *dictptr = dict; - PyDict_SetItem(dict, SWIG_This(), swig_this); - } - } -#else - PyObject *key = SWIG_This(); - PyObject_SetAttr(inst, key, swig_this); -#endif - } - } else { -#if PY_VERSION_HEX >= 0x03000000 - inst = ((PyTypeObject*) data->newargs)->tp_new((PyTypeObject*) data->newargs, Py_None, Py_None); - if (inst) { - PyObject_SetAttr(inst, SWIG_This(), swig_this); - Py_TYPE(inst)->tp_flags &= ~Py_TPFLAGS_VALID_VERSION_TAG; - } -#else - PyObject *dict = PyDict_New(); - if (dict) { - PyDict_SetItem(dict, SWIG_This(), swig_this); - inst = PyInstance_NewRaw(data->newargs, dict); - Py_DECREF(dict); - } -#endif - } - return inst; -#else -#if (PY_VERSION_HEX >= 0x02010000) - PyObject *inst = 0; - PyObject *dict = PyDict_New(); - if (dict) { - PyDict_SetItem(dict, SWIG_This(), swig_this); - inst = PyInstance_NewRaw(data->newargs, dict); - Py_DECREF(dict); - } - return (PyObject *) inst; -#else - PyInstanceObject *inst = PyObject_NEW(PyInstanceObject, &PyInstance_Type); - if (inst == NULL) { - return NULL; - } - inst->in_class = (PyClassObject *)data->newargs; - Py_INCREF(inst->in_class); - inst->in_dict = PyDict_New(); - if (inst->in_dict == NULL) { - Py_DECREF(inst); - return NULL; - } -#ifdef Py_TPFLAGS_HAVE_WEAKREFS - inst->in_weakreflist = NULL; -#endif -#ifdef Py_TPFLAGS_GC - PyObject_GC_Init(inst); -#endif - PyDict_SetItem(inst->in_dict, SWIG_This(), swig_this); - return (PyObject *) inst; -#endif -#endif -} - -SWIGRUNTIME void -SWIG_Python_SetSwigThis(PyObject *inst, PyObject *swig_this) -{ - PyObject *dict; -#if (PY_VERSION_HEX >= 0x02020000) && !defined(SWIG_PYTHON_SLOW_GETSET_THIS) - PyObject **dictptr = _PyObject_GetDictPtr(inst); - if (dictptr != NULL) { - dict = *dictptr; - if (dict == NULL) { - dict = PyDict_New(); - *dictptr = dict; - } - PyDict_SetItem(dict, SWIG_This(), swig_this); - return; - } -#endif - dict = PyObject_GetAttrString(inst, (char*)"__dict__"); - PyDict_SetItem(dict, SWIG_This(), swig_this); - Py_DECREF(dict); -} - - -SWIGINTERN PyObject * -SWIG_Python_InitShadowInstance(PyObject *args) { - PyObject *obj[2]; - if (!SWIG_Python_UnpackTuple(args, "swiginit", 2, 2, obj)) { - return NULL; - } else { - SwigPyObject *sthis = SWIG_Python_GetSwigThis(obj[0]); - if (sthis) { - SwigPyObject_append((PyObject*) sthis, obj[1]); - } else { - SWIG_Python_SetSwigThis(obj[0], obj[1]); - } - return SWIG_Py_Void(); - } -} - -/* Create a new pointer object */ - -SWIGRUNTIME PyObject * -SWIG_Python_NewPointerObj(PyObject *self, void *ptr, swig_type_info *type, int flags) { - SwigPyClientData *clientdata; - PyObject * robj; - int own; - - if (!ptr) - return SWIG_Py_Void(); - - clientdata = type ? (SwigPyClientData *)(type->clientdata) : 0; - own = (flags & SWIG_POINTER_OWN) ? SWIG_POINTER_OWN : 0; - if (clientdata && clientdata->pytype) { - SwigPyObject *newobj; - if (flags & SWIG_BUILTIN_TP_INIT) { - newobj = (SwigPyObject*) self; - if (newobj->ptr) { - PyObject *next_self = clientdata->pytype->tp_alloc(clientdata->pytype, 0); - while (newobj->next) - newobj = (SwigPyObject *) newobj->next; - newobj->next = next_self; - newobj = (SwigPyObject *)next_self; -#ifdef SWIGPYTHON_BUILTIN - newobj->dict = 0; -#endif - } - } else { - newobj = PyObject_New(SwigPyObject, clientdata->pytype); -#ifdef SWIGPYTHON_BUILTIN - newobj->dict = 0; -#endif - } - if (newobj) { - newobj->ptr = ptr; - newobj->ty = type; - newobj->own = own; - newobj->next = 0; - return (PyObject*) newobj; - } - return SWIG_Py_Void(); - } - - assert(!(flags & SWIG_BUILTIN_TP_INIT)); - - robj = SwigPyObject_New(ptr, type, own); - if (robj && clientdata && !(flags & SWIG_POINTER_NOSHADOW)) { - PyObject *inst = SWIG_Python_NewShadowInstance(clientdata, robj); - Py_DECREF(robj); - robj = inst; - } - return robj; -} - -/* Create a new packed object */ - -SWIGRUNTIMEINLINE PyObject * -SWIG_Python_NewPackedObj(void *ptr, size_t sz, swig_type_info *type) { - return ptr ? SwigPyPacked_New((void *) ptr, sz, type) : SWIG_Py_Void(); -} - -/* -----------------------------------------------------------------------------* - * Get type list - * -----------------------------------------------------------------------------*/ - -#ifdef SWIG_LINK_RUNTIME -void *SWIG_ReturnGlobalTypeList(void *); -#endif - -SWIGRUNTIME swig_module_info * -SWIG_Python_GetModule(void *SWIGUNUSEDPARM(clientdata)) { - static void *type_pointer = (void *)0; - /* first check if module already created */ - if (!type_pointer) { -#ifdef SWIG_LINK_RUNTIME - type_pointer = SWIG_ReturnGlobalTypeList((void *)0); -#else -# ifdef SWIGPY_USE_CAPSULE - type_pointer = PyCapsule_Import(SWIGPY_CAPSULE_NAME, 0); -# else - type_pointer = PyCObject_Import((char*)"swig_runtime_data" SWIG_RUNTIME_VERSION, - (char*)"type_pointer" SWIG_TYPE_TABLE_NAME); -# endif - if (PyErr_Occurred()) { - PyErr_Clear(); - type_pointer = (void *)0; - } -#endif - } - return (swig_module_info *) type_pointer; -} - -#if PY_MAJOR_VERSION < 2 -/* PyModule_AddObject function was introduced in Python 2.0. The following function - is copied out of Python/modsupport.c in python version 2.3.4 */ -SWIGINTERN int -PyModule_AddObject(PyObject *m, char *name, PyObject *o) -{ - PyObject *dict; - if (!PyModule_Check(m)) { - PyErr_SetString(PyExc_TypeError, "PyModule_AddObject() needs module as first arg"); - return SWIG_ERROR; - } - if (!o) { - PyErr_SetString(PyExc_TypeError, "PyModule_AddObject() needs non-NULL value"); - return SWIG_ERROR; - } - - dict = PyModule_GetDict(m); - if (dict == NULL) { - /* Internal error -- modules must have a dict! */ - PyErr_Format(PyExc_SystemError, "module '%s' has no __dict__", - PyModule_GetName(m)); - return SWIG_ERROR; - } - if (PyDict_SetItemString(dict, name, o)) - return SWIG_ERROR; - Py_DECREF(o); - return SWIG_OK; -} -#endif - -SWIGRUNTIME void -#ifdef SWIGPY_USE_CAPSULE -SWIG_Python_DestroyModule(PyObject *obj) -#else -SWIG_Python_DestroyModule(void *vptr) -#endif -{ -#ifdef SWIGPY_USE_CAPSULE - swig_module_info *swig_module = (swig_module_info *) PyCapsule_GetPointer(obj, SWIGPY_CAPSULE_NAME); -#else - swig_module_info *swig_module = (swig_module_info *) vptr; -#endif - swig_type_info **types = swig_module->types; - size_t i; - for (i =0; i < swig_module->size; ++i) { - swig_type_info *ty = types[i]; - if (ty->owndata) { - SwigPyClientData *data = (SwigPyClientData *) ty->clientdata; - if (data) SwigPyClientData_Del(data); - } - } - Py_DECREF(SWIG_This()); - swig_this = NULL; -} - -SWIGRUNTIME void -SWIG_Python_SetModule(swig_module_info *swig_module) { -#if PY_VERSION_HEX >= 0x03000000 - /* Add a dummy module object into sys.modules */ - PyObject *module = PyImport_AddModule((char*)"swig_runtime_data" SWIG_RUNTIME_VERSION); -#else - static PyMethodDef swig_empty_runtime_method_table[] = { {NULL, NULL, 0, NULL} }; /* Sentinel */ - PyObject *module = Py_InitModule((char*)"swig_runtime_data" SWIG_RUNTIME_VERSION, swig_empty_runtime_method_table); -#endif -#ifdef SWIGPY_USE_CAPSULE - PyObject *pointer = PyCapsule_New((void *) swig_module, SWIGPY_CAPSULE_NAME, SWIG_Python_DestroyModule); - if (pointer && module) { - PyModule_AddObject(module, (char*)"type_pointer_capsule" SWIG_TYPE_TABLE_NAME, pointer); - } else { - Py_XDECREF(pointer); - } -#else - PyObject *pointer = PyCObject_FromVoidPtr((void *) swig_module, SWIG_Python_DestroyModule); - if (pointer && module) { - PyModule_AddObject(module, (char*)"type_pointer" SWIG_TYPE_TABLE_NAME, pointer); - } else { - Py_XDECREF(pointer); - } -#endif -} - -/* The python cached type query */ -SWIGRUNTIME PyObject * -SWIG_Python_TypeCache(void) { - static PyObject *SWIG_STATIC_POINTER(cache) = PyDict_New(); - return cache; -} - -SWIGRUNTIME swig_type_info * -SWIG_Python_TypeQuery(const char *type) -{ - PyObject *cache = SWIG_Python_TypeCache(); - PyObject *key = SWIG_Python_str_FromChar(type); - PyObject *obj = PyDict_GetItem(cache, key); - swig_type_info *descriptor; - if (obj) { -#ifdef SWIGPY_USE_CAPSULE - descriptor = (swig_type_info *) PyCapsule_GetPointer(obj, NULL); -#else - descriptor = (swig_type_info *) PyCObject_AsVoidPtr(obj); -#endif - } else { - swig_module_info *swig_module = SWIG_GetModule(0); - descriptor = SWIG_TypeQueryModule(swig_module, swig_module, type); - if (descriptor) { -#ifdef SWIGPY_USE_CAPSULE - obj = PyCapsule_New((void*) descriptor, NULL, NULL); -#else - obj = PyCObject_FromVoidPtr(descriptor, NULL); -#endif - PyDict_SetItem(cache, key, obj); - Py_DECREF(obj); - } - } - Py_DECREF(key); - return descriptor; -} - -/* - For backward compatibility only -*/ -#define SWIG_POINTER_EXCEPTION 0 -#define SWIG_arg_fail(arg) SWIG_Python_ArgFail(arg) -#define SWIG_MustGetPtr(p, type, argnum, flags) SWIG_Python_MustGetPtr(p, type, argnum, flags) - -SWIGRUNTIME int -SWIG_Python_AddErrMesg(const char* mesg, int infront) -{ - if (PyErr_Occurred()) { - PyObject *type = 0; - PyObject *value = 0; - PyObject *traceback = 0; - PyErr_Fetch(&type, &value, &traceback); - if (value) { - char *tmp; - PyObject *old_str = PyObject_Str(value); - Py_XINCREF(type); - PyErr_Clear(); - if (infront) { - PyErr_Format(type, "%s %s", mesg, tmp = SWIG_Python_str_AsChar(old_str)); - } else { - PyErr_Format(type, "%s %s", tmp = SWIG_Python_str_AsChar(old_str), mesg); - } - SWIG_Python_str_DelForPy3(tmp); - Py_DECREF(old_str); - } - return 1; - } else { - return 0; - } -} - -SWIGRUNTIME int -SWIG_Python_ArgFail(int argnum) -{ - if (PyErr_Occurred()) { - /* add information about failing argument */ - char mesg[256]; - PyOS_snprintf(mesg, sizeof(mesg), "argument number %d:", argnum); - return SWIG_Python_AddErrMesg(mesg, 1); - } else { - return 0; - } -} - -SWIGRUNTIMEINLINE const char * -SwigPyObject_GetDesc(PyObject *self) -{ - SwigPyObject *v = (SwigPyObject *)self; - swig_type_info *ty = v ? v->ty : 0; - return ty ? ty->str : ""; -} - -SWIGRUNTIME void -SWIG_Python_TypeError(const char *type, PyObject *obj) -{ - if (type) { -#if defined(SWIG_COBJECT_TYPES) - if (obj && SwigPyObject_Check(obj)) { - const char *otype = (const char *) SwigPyObject_GetDesc(obj); - if (otype) { - PyErr_Format(PyExc_TypeError, "a '%s' is expected, 'SwigPyObject(%s)' is received", - type, otype); - return; - } - } else -#endif - { - const char *otype = (obj ? obj->ob_type->tp_name : 0); - if (otype) { - PyObject *str = PyObject_Str(obj); - const char *cstr = str ? SWIG_Python_str_AsChar(str) : 0; - if (cstr) { - PyErr_Format(PyExc_TypeError, "a '%s' is expected, '%s(%s)' is received", - type, otype, cstr); - SWIG_Python_str_DelForPy3(cstr); - } else { - PyErr_Format(PyExc_TypeError, "a '%s' is expected, '%s' is received", - type, otype); - } - Py_XDECREF(str); - return; - } - } - PyErr_Format(PyExc_TypeError, "a '%s' is expected", type); - } else { - PyErr_Format(PyExc_TypeError, "unexpected type is received"); - } -} - - -/* Convert a pointer value, signal an exception on a type mismatch */ -SWIGRUNTIME void * -SWIG_Python_MustGetPtr(PyObject *obj, swig_type_info *ty, int SWIGUNUSEDPARM(argnum), int flags) { - void *result; - if (SWIG_Python_ConvertPtr(obj, &result, ty, flags) == -1) { - PyErr_Clear(); -#if SWIG_POINTER_EXCEPTION - if (flags) { - SWIG_Python_TypeError(SWIG_TypePrettyName(ty), obj); - SWIG_Python_ArgFail(argnum); - } -#endif - } - return result; -} - -#ifdef SWIGPYTHON_BUILTIN -SWIGRUNTIME int -SWIG_Python_NonDynamicSetAttr(PyObject *obj, PyObject *name, PyObject *value) { - PyTypeObject *tp = obj->ob_type; - PyObject *descr; - PyObject *encoded_name; - descrsetfunc f; - int res = -1; - -# ifdef Py_USING_UNICODE - if (PyString_Check(name)) { - name = PyUnicode_Decode(PyString_AsString(name), PyString_Size(name), NULL, NULL); - if (!name) - return -1; - } else if (!PyUnicode_Check(name)) -# else - if (!PyString_Check(name)) -# endif - { - PyErr_Format(PyExc_TypeError, "attribute name must be string, not '%.200s'", name->ob_type->tp_name); - return -1; - } else { - Py_INCREF(name); - } - - if (!tp->tp_dict) { - if (PyType_Ready(tp) < 0) - goto done; - } - - descr = _PyType_Lookup(tp, name); - f = NULL; - if (descr != NULL) - f = descr->ob_type->tp_descr_set; - if (!f) { - if (PyString_Check(name)) { - encoded_name = name; - Py_INCREF(name); - } else { - encoded_name = PyUnicode_AsUTF8String(name); - } - PyErr_Format(PyExc_AttributeError, "'%.100s' object has no attribute '%.200s'", tp->tp_name, PyString_AsString(encoded_name)); - Py_DECREF(encoded_name); - } else { - res = f(descr, obj, value); - } - - done: - Py_DECREF(name); - return res; -} -#endif - - -#ifdef __cplusplus -} -#endif - - - -#define SWIG_exception_fail(code, msg) do { SWIG_Error(code, msg); SWIG_fail; } while(0) - -#define SWIG_contract_assert(expr, msg) if (!(expr)) { SWIG_Error(SWIG_RuntimeError, msg); SWIG_fail; } else - - - - #define SWIG_exception(code, msg) do { SWIG_Error(code, msg); SWIG_fail;; } while(0) - - -/* -------- TYPES TABLE (BEGIN) -------- */ - -#define SWIGTYPE_p_char swig_types[0] -#define SWIGTYPE_p_int swig_types[1] -#define SWIGTYPE_p_uint8_t swig_types[2] -static swig_type_info *swig_types[4]; -static swig_module_info swig_module = {swig_types, 3, 0, 0, 0, 0}; -#define SWIG_TypeQuery(name) SWIG_TypeQueryModule(&swig_module, &swig_module, name) -#define SWIG_MangledTypeQuery(name) SWIG_MangledTypeQueryModule(&swig_module, &swig_module, name) - -/* -------- TYPES TABLE (END) -------- */ - -#if (PY_VERSION_HEX <= 0x02000000) -# if !defined(SWIG_PYTHON_CLASSIC) -# error "This python version requires swig to be run with the '-classic' option" -# endif -#endif - -/*----------------------------------------------- - @(target):= _libwebp.so - ------------------------------------------------*/ -#if PY_VERSION_HEX >= 0x03000000 -# define SWIG_init PyInit__libwebp - -#else -# define SWIG_init init_libwebp - -#endif -#define SWIG_name "_libwebp" - -#define SWIGVERSION 0x030012 -#define SWIG_VERSION SWIGVERSION - - -#define SWIG_as_voidptr(a) (void *)((const void *)(a)) -#define SWIG_as_voidptrptr(a) ((void)SWIG_as_voidptr(*a),(void**)(a)) - - -SWIGINTERNINLINE PyObject* - SWIG_From_int (int value) -{ - return PyInt_FromLong((long) value); -} - - -SWIGINTERN swig_type_info* -SWIG_pchar_descriptor(void) -{ - static int init = 0; - static swig_type_info* info = 0; - if (!init) { - info = SWIG_TypeQuery("_p_char"); - init = 1; - } - return info; -} - - -SWIGINTERN int -SWIG_AsCharPtrAndSize(PyObject *obj, char** cptr, size_t* psize, int *alloc) -{ -#if PY_VERSION_HEX>=0x03000000 -#if defined(SWIG_PYTHON_STRICT_BYTE_CHAR) - if (PyBytes_Check(obj)) -#else - if (PyUnicode_Check(obj)) -#endif -#else - if (PyString_Check(obj)) -#endif - { - char *cstr; Py_ssize_t len; -#if PY_VERSION_HEX>=0x03000000 -#if !defined(SWIG_PYTHON_STRICT_BYTE_CHAR) - if (!alloc && cptr) { - /* We can't allow converting without allocation, since the internal - representation of string in Python 3 is UCS-2/UCS-4 but we require - a UTF-8 representation. - TODO(bhy) More detailed explanation */ - return SWIG_RuntimeError; - } - obj = PyUnicode_AsUTF8String(obj); - if(alloc) *alloc = SWIG_NEWOBJ; -#endif - PyBytes_AsStringAndSize(obj, &cstr, &len); -#else - PyString_AsStringAndSize(obj, &cstr, &len); -#endif - if (cptr) { - if (alloc) { - /* - In python the user should not be able to modify the inner - string representation. To warranty that, if you define - SWIG_PYTHON_SAFE_CSTRINGS, a new/copy of the python string - buffer is always returned. - - The default behavior is just to return the pointer value, - so, be careful. - */ -#if defined(SWIG_PYTHON_SAFE_CSTRINGS) - if (*alloc != SWIG_OLDOBJ) -#else - if (*alloc == SWIG_NEWOBJ) -#endif - { - *cptr = (char *)memcpy(malloc((len + 1)*sizeof(char)), cstr, sizeof(char)*(len + 1)); - *alloc = SWIG_NEWOBJ; - } else { - *cptr = cstr; - *alloc = SWIG_OLDOBJ; - } - } else { -#if PY_VERSION_HEX>=0x03000000 -#if defined(SWIG_PYTHON_STRICT_BYTE_CHAR) - *cptr = PyBytes_AsString(obj); -#else - assert(0); /* Should never reach here with Unicode strings in Python 3 */ -#endif -#else - *cptr = SWIG_Python_str_AsChar(obj); -#endif - } - } - if (psize) *psize = len + 1; -#if PY_VERSION_HEX>=0x03000000 && !defined(SWIG_PYTHON_STRICT_BYTE_CHAR) - Py_XDECREF(obj); -#endif - return SWIG_OK; - } else { -#if defined(SWIG_PYTHON_2_UNICODE) -#if defined(SWIG_PYTHON_STRICT_BYTE_CHAR) -#error "Cannot use both SWIG_PYTHON_2_UNICODE and SWIG_PYTHON_STRICT_BYTE_CHAR at once" -#endif -#if PY_VERSION_HEX<0x03000000 - if (PyUnicode_Check(obj)) { - char *cstr; Py_ssize_t len; - if (!alloc && cptr) { - return SWIG_RuntimeError; - } - obj = PyUnicode_AsUTF8String(obj); - if (PyString_AsStringAndSize(obj, &cstr, &len) != -1) { - if (cptr) { - if (alloc) *alloc = SWIG_NEWOBJ; - *cptr = (char *)memcpy(malloc((len + 1)*sizeof(char)), cstr, sizeof(char)*(len + 1)); - } - if (psize) *psize = len + 1; - - Py_XDECREF(obj); - return SWIG_OK; - } else { - Py_XDECREF(obj); - } - } -#endif -#endif - - swig_type_info* pchar_descriptor = SWIG_pchar_descriptor(); - if (pchar_descriptor) { - void* vptr = 0; - if (SWIG_ConvertPtr(obj, &vptr, pchar_descriptor, 0) == SWIG_OK) { - if (cptr) *cptr = (char *) vptr; - if (psize) *psize = vptr ? (strlen((char *)vptr) + 1) : 0; - if (alloc) *alloc = SWIG_OLDOBJ; - return SWIG_OK; - } - } - } - return SWIG_TypeError; -} - - -SWIGINTERN int -SWIG_AsVal_double (PyObject *obj, double *val) -{ - int res = SWIG_TypeError; - if (PyFloat_Check(obj)) { - if (val) *val = PyFloat_AsDouble(obj); - return SWIG_OK; -#if PY_VERSION_HEX < 0x03000000 - } else if (PyInt_Check(obj)) { - if (val) *val = (double) PyInt_AsLong(obj); - return SWIG_OK; -#endif - } else if (PyLong_Check(obj)) { - double v = PyLong_AsDouble(obj); - if (!PyErr_Occurred()) { - if (val) *val = v; - return SWIG_OK; - } else { - PyErr_Clear(); - } - } -#ifdef SWIG_PYTHON_CAST_MODE - { - int dispatch = 0; - double d = PyFloat_AsDouble(obj); - if (!PyErr_Occurred()) { - if (val) *val = d; - return SWIG_AddCast(SWIG_OK); - } else { - PyErr_Clear(); - } - if (!dispatch) { - long v = PyLong_AsLong(obj); - if (!PyErr_Occurred()) { - if (val) *val = v; - return SWIG_AddCast(SWIG_AddCast(SWIG_OK)); - } else { - PyErr_Clear(); - } - } - } -#endif - return res; -} - - -#include - - -#include - - -SWIGINTERNINLINE int -SWIG_CanCastAsInteger(double *d, double min, double max) { - double x = *d; - if ((min <= x && x <= max)) { - double fx = floor(x); - double cx = ceil(x); - double rd = ((x - fx) < 0.5) ? fx : cx; /* simple rint */ - if ((errno == EDOM) || (errno == ERANGE)) { - errno = 0; - } else { - double summ, reps, diff; - if (rd < x) { - diff = x - rd; - } else if (rd > x) { - diff = rd - x; - } else { - return 1; - } - summ = rd + x; - reps = diff/summ; - if (reps < 8*DBL_EPSILON) { - *d = rd; - return 1; - } - } - } - return 0; -} - - -SWIGINTERN int -SWIG_AsVal_unsigned_SS_long (PyObject *obj, unsigned long *val) -{ -#if PY_VERSION_HEX < 0x03000000 - if (PyInt_Check(obj)) { - long v = PyInt_AsLong(obj); - if (v >= 0) { - if (val) *val = v; - return SWIG_OK; - } else { - return SWIG_OverflowError; - } - } else -#endif - if (PyLong_Check(obj)) { - unsigned long v = PyLong_AsUnsignedLong(obj); - if (!PyErr_Occurred()) { - if (val) *val = v; - return SWIG_OK; - } else { - PyErr_Clear(); - return SWIG_OverflowError; - } - } -#ifdef SWIG_PYTHON_CAST_MODE - { - int dispatch = 0; - unsigned long v = PyLong_AsUnsignedLong(obj); - if (!PyErr_Occurred()) { - if (val) *val = v; - return SWIG_AddCast(SWIG_OK); - } else { - PyErr_Clear(); - } - if (!dispatch) { - double d; - int res = SWIG_AddCast(SWIG_AsVal_double (obj,&d)); - if (SWIG_IsOK(res) && SWIG_CanCastAsInteger(&d, 0, ULONG_MAX)) { - if (val) *val = (unsigned long)(d); - return res; - } - } - } -#endif - return SWIG_TypeError; -} - - -#include -#if !defined(SWIG_NO_LLONG_MAX) -# if !defined(LLONG_MAX) && defined(__GNUC__) && defined (__LONG_LONG_MAX__) -# define LLONG_MAX __LONG_LONG_MAX__ -# define LLONG_MIN (-LLONG_MAX - 1LL) -# define ULLONG_MAX (LLONG_MAX * 2ULL + 1ULL) -# endif -#endif - - -#if defined(LLONG_MAX) && !defined(SWIG_LONG_LONG_AVAILABLE) -# define SWIG_LONG_LONG_AVAILABLE -#endif - - -#ifdef SWIG_LONG_LONG_AVAILABLE -SWIGINTERN int -SWIG_AsVal_unsigned_SS_long_SS_long (PyObject *obj, unsigned long long *val) -{ - int res = SWIG_TypeError; - if (PyLong_Check(obj)) { - unsigned long long v = PyLong_AsUnsignedLongLong(obj); - if (!PyErr_Occurred()) { - if (val) *val = v; - return SWIG_OK; - } else { - PyErr_Clear(); - res = SWIG_OverflowError; - } - } else { - unsigned long v; - res = SWIG_AsVal_unsigned_SS_long (obj,&v); - if (SWIG_IsOK(res)) { - if (val) *val = v; - return res; - } - } -#ifdef SWIG_PYTHON_CAST_MODE - { - const double mant_max = 1LL << DBL_MANT_DIG; - double d; - res = SWIG_AsVal_double (obj,&d); - if (SWIG_IsOK(res) && !SWIG_CanCastAsInteger(&d, 0, mant_max)) - return SWIG_OverflowError; - if (SWIG_IsOK(res) && SWIG_CanCastAsInteger(&d, 0, mant_max)) { - if (val) *val = (unsigned long long)(d); - return SWIG_AddCast(res); - } - res = SWIG_TypeError; - } -#endif - return res; -} -#endif - - -SWIGINTERNINLINE int -SWIG_AsVal_size_t (PyObject * obj, size_t *val) -{ - int res = SWIG_TypeError; -#ifdef SWIG_LONG_LONG_AVAILABLE - if (sizeof(size_t) <= sizeof(unsigned long)) { -#endif - unsigned long v; - res = SWIG_AsVal_unsigned_SS_long (obj, val ? &v : 0); - if (SWIG_IsOK(res) && val) *val = (size_t)(v); -#ifdef SWIG_LONG_LONG_AVAILABLE - } else if (sizeof(size_t) <= sizeof(unsigned long long)) { - unsigned long long v; - res = SWIG_AsVal_unsigned_SS_long_SS_long (obj, val ? &v : 0); - if (SWIG_IsOK(res) && val) *val = (size_t)(v); - } -#endif - return res; -} - - -#include "webp/decode.h" -#include "webp/encode.h" - - -static size_t ReturnedBufferSize( - const char* function, int* width, int* height) { - static const struct sizemap { - const char* function; - int size_multiplier; - } size_map[] = { -#ifdef SWIGJAVA - { "Java_com_google_webp_libwebpJNI_WebPDecodeRGB", 3 }, - { "Java_com_google_webp_libwebpJNI_WebPDecodeRGBA", 4 }, - { "Java_com_google_webp_libwebpJNI_WebPDecodeARGB", 4 }, - { "Java_com_google_webp_libwebpJNI_WebPDecodeBGR", 3 }, - { "Java_com_google_webp_libwebpJNI_WebPDecodeBGRA", 4 }, - { "Java_com_google_webp_libwebpJNI_wrap_1WebPEncodeRGB", 1 }, - { "Java_com_google_webp_libwebpJNI_wrap_1WebPEncodeBGR", 1 }, - { "Java_com_google_webp_libwebpJNI_wrap_1WebPEncodeRGBA", 1 }, - { "Java_com_google_webp_libwebpJNI_wrap_1WebPEncodeBGRA", 1 }, - { "Java_com_google_webp_libwebpJNI_wrap_1WebPEncodeLosslessRGB", 1 }, - { "Java_com_google_webp_libwebpJNI_wrap_1WebPEncodeLosslessBGR", 1 }, - { "Java_com_google_webp_libwebpJNI_wrap_1WebPEncodeLosslessRGBA", 1 }, - { "Java_com_google_webp_libwebpJNI_wrap_1WebPEncodeLosslessBGRA", 1 }, -#endif -#ifdef SWIGPYTHON - { "WebPDecodeRGB", 3 }, - { "WebPDecodeRGBA", 4 }, - { "WebPDecodeARGB", 4 }, - { "WebPDecodeBGR", 3 }, - { "WebPDecodeBGRA", 4 }, - { "wrap_WebPEncodeRGB", 1 }, - { "wrap_WebPEncodeBGR", 1 }, - { "wrap_WebPEncodeRGBA", 1 }, - { "wrap_WebPEncodeBGRA", 1 }, - { "wrap_WebPEncodeLosslessRGB", 1 }, - { "wrap_WebPEncodeLosslessBGR", 1 }, - { "wrap_WebPEncodeLosslessRGBA", 1 }, - { "wrap_WebPEncodeLosslessBGRA", 1 }, -#endif - { NULL, 0 } - }; - const struct sizemap* p; - size_t size = 0; - - for (p = size_map; p->function; ++p) { - if (!strcmp(function, p->function)) { - size = *width * *height * p->size_multiplier; - break; - } - } - - return size; -} - - -typedef size_t (*WebPEncodeFunction)(const uint8_t* rgb, - int width, int height, int stride, - float quality_factor, uint8_t** output); -typedef size_t (*WebPEncodeLosslessFunction)(const uint8_t* rgb, - int width, int height, int stride, - uint8_t** output); - -static uint8_t* EncodeLossy(const uint8_t* rgb, - int width, int height, int stride, - float quality_factor, - WebPEncodeFunction encfn, - int* output_size, int* unused) { - uint8_t* output = NULL; - const size_t image_size = - encfn(rgb, width, height, stride, quality_factor, &output); - // the values of following two will be interpreted by ReturnedBufferSize() - // as 'width' and 'height' in the size calculation. - *output_size = image_size; - *unused = 1; - return image_size ? output : NULL; -} - -static uint8_t* EncodeLossless(const uint8_t* rgb, - int width, int height, int stride, - WebPEncodeLosslessFunction encfn, - int* output_size, int* unused) { - uint8_t* output = NULL; - const size_t image_size = encfn(rgb, width, height, stride, &output); - // the values of the following two will be interpreted by - // ReturnedBufferSize() as 'width' and 'height' in the size calculation. - *output_size = image_size; - *unused = 1; - return image_size ? output : NULL; -} - - -// Changes the return type of WebPEncode* to more closely match Decode*. -// This also makes it easier to wrap the output buffer in a native type rather -// than dealing with the return pointer. -// The additional parameters are to allow reuse of ReturnedBufferSize(), -// unused2 and output_size will be used in this case. -#define LOSSY_WRAPPER(FUNC) \ - static uint8_t* wrap_##FUNC( \ - const uint8_t* rgb, int* unused1, int* unused2, int* output_size, \ - int width, int height, int stride, float quality_factor) { \ - return EncodeLossy(rgb, width, height, stride, quality_factor, \ - FUNC, output_size, unused2); \ - } \ - -LOSSY_WRAPPER(WebPEncodeRGB) -LOSSY_WRAPPER(WebPEncodeBGR) -LOSSY_WRAPPER(WebPEncodeRGBA) -LOSSY_WRAPPER(WebPEncodeBGRA) - -#undef LOSSY_WRAPPER - -#define LOSSLESS_WRAPPER(FUNC) \ - static uint8_t* wrap_##FUNC( \ - const uint8_t* rgb, int* unused1, int* unused2, int* output_size, \ - int width, int height, int stride) { \ - return EncodeLossless(rgb, width, height, stride, \ - FUNC, output_size, unused2); \ - } \ - -LOSSLESS_WRAPPER(WebPEncodeLosslessRGB) -LOSSLESS_WRAPPER(WebPEncodeLosslessBGR) -LOSSLESS_WRAPPER(WebPEncodeLosslessRGBA) -LOSSLESS_WRAPPER(WebPEncodeLosslessBGRA) - -#undef LOSSLESS_WRAPPER - - - -SWIGINTERN int -SWIG_AsVal_long (PyObject *obj, long* val) -{ -#if PY_VERSION_HEX < 0x03000000 - if (PyInt_Check(obj)) { - if (val) *val = PyInt_AsLong(obj); - return SWIG_OK; - } else -#endif - if (PyLong_Check(obj)) { - long v = PyLong_AsLong(obj); - if (!PyErr_Occurred()) { - if (val) *val = v; - return SWIG_OK; - } else { - PyErr_Clear(); - return SWIG_OverflowError; - } - } -#ifdef SWIG_PYTHON_CAST_MODE - { - int dispatch = 0; - long v = PyInt_AsLong(obj); - if (!PyErr_Occurred()) { - if (val) *val = v; - return SWIG_AddCast(SWIG_OK); - } else { - PyErr_Clear(); - } - if (!dispatch) { - double d; - int res = SWIG_AddCast(SWIG_AsVal_double (obj,&d)); - if (SWIG_IsOK(res) && SWIG_CanCastAsInteger(&d, LONG_MIN, LONG_MAX)) { - if (val) *val = (long)(d); - return res; - } - } - } -#endif - return SWIG_TypeError; -} - - -SWIGINTERN int -SWIG_AsVal_int (PyObject * obj, int *val) -{ - long v; - int res = SWIG_AsVal_long (obj, &v); - if (SWIG_IsOK(res)) { - if ((v < INT_MIN || v > INT_MAX)) { - return SWIG_OverflowError; - } else { - if (val) *val = (int)(v); - } - } - return res; -} - - -/* Getting isfinite working pre C99 across multiple platforms is non-trivial. Users can provide SWIG_isfinite on older platforms. */ -#ifndef SWIG_isfinite -/* isfinite() is a macro for C99 */ -# if defined(isfinite) -# define SWIG_isfinite(X) (isfinite(X)) -# elif defined __cplusplus && __cplusplus >= 201103L -/* Use a template so that this works whether isfinite() is std::isfinite() or - * in the global namespace. The reality seems to vary between compiler - * versions. - * - * Make sure namespace std exists to avoid compiler warnings. - * - * extern "C++" is required as this fragment can end up inside an extern "C" { } block - */ -namespace std { } -extern "C++" template -inline int SWIG_isfinite_func(T x) { - using namespace std; - return isfinite(x); -} -# define SWIG_isfinite(X) (SWIG_isfinite_func(X)) -# elif defined(_MSC_VER) -# define SWIG_isfinite(X) (_finite(X)) -# elif defined(__sun) && defined(__SVR4) -# include -# define SWIG_isfinite(X) (finite(X)) -# endif -#endif - - -/* Accept infinite as a valid float value unless we are unable to check if a value is finite */ -#ifdef SWIG_isfinite -# define SWIG_Float_Overflow_Check(X) ((X < -FLT_MAX || X > FLT_MAX) && SWIG_isfinite(X)) -#else -# define SWIG_Float_Overflow_Check(X) ((X < -FLT_MAX || X > FLT_MAX)) -#endif - - -SWIGINTERN int -SWIG_AsVal_float (PyObject * obj, float *val) -{ - double v; - int res = SWIG_AsVal_double (obj, &v); - if (SWIG_IsOK(res)) { - if (SWIG_Float_Overflow_Check(v)) { - return SWIG_OverflowError; - } else { - if (val) *val = (float)(v); - } - } - return res; -} - -#ifdef __cplusplus -extern "C" { -#endif -SWIGINTERN PyObject *_wrap_WebPGetDecoderVersion(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - int result; - - if (!PyArg_ParseTuple(args,(char *)":WebPGetDecoderVersion")) SWIG_fail; - result = (int)WebPGetDecoderVersion(); - resultobj = SWIG_From_int((int)(result)); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_WebPGetInfo(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - uint8_t *arg1 = (uint8_t *) 0 ; - size_t arg2 ; - int *arg3 = (int *) 0 ; - int *arg4 = (int *) 0 ; - int res1 ; - char *buf1 = 0 ; - size_t size1 = 0 ; - int alloc1 = 0 ; - int temp3 ; - int res3 = SWIG_TMPOBJ ; - int temp4 ; - int res4 = SWIG_TMPOBJ ; - PyObject * obj0 = 0 ; - int result; - - arg3 = &temp3; - arg4 = &temp4; - if (!PyArg_ParseTuple(args,(char *)"O:WebPGetInfo",&obj0)) SWIG_fail; - res1 = SWIG_AsCharPtrAndSize(obj0, &buf1, &size1, &alloc1); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "WebPGetInfo" "', argument " "1"" of type '" "uint8_t const *""'"); - } - arg1 = (uint8_t *)(buf1); - arg2 = (size_t)(size1 - 1); - result = (int)WebPGetInfo((uint8_t const *)arg1,arg2,arg3,arg4); - resultobj = SWIG_From_int((int)(result)); - if (SWIG_IsTmpObj(res3)) { - resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_int((*arg3))); - } else { - int new_flags = SWIG_IsNewObj(res3) ? (SWIG_POINTER_OWN | 0 ) : 0 ; - resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg3), SWIGTYPE_p_int, new_flags)); - } - if (SWIG_IsTmpObj(res4)) { - resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_int((*arg4))); - } else { - int new_flags = SWIG_IsNewObj(res4) ? (SWIG_POINTER_OWN | 0 ) : 0 ; - resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg4), SWIGTYPE_p_int, new_flags)); - } - if (alloc1 == SWIG_NEWOBJ) free((char*)buf1); - return resultobj; -fail: - if (alloc1 == SWIG_NEWOBJ) free((char*)buf1); - return NULL; -} - - -SWIGINTERN PyObject *_wrap_WebPDecodeRGB(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - uint8_t *arg1 = (uint8_t *) 0 ; - size_t arg2 ; - int *arg3 = (int *) 0 ; - int *arg4 = (int *) 0 ; - int res1 ; - char *buf1 = 0 ; - size_t size1 = 0 ; - int alloc1 = 0 ; - int temp3 ; - int res3 = SWIG_TMPOBJ ; - int temp4 ; - int res4 = SWIG_TMPOBJ ; - PyObject * obj0 = 0 ; - uint8_t *result = 0 ; - - arg3 = &temp3; - arg4 = &temp4; - if (!PyArg_ParseTuple(args,(char *)"O:WebPDecodeRGB",&obj0)) SWIG_fail; - res1 = SWIG_AsCharPtrAndSize(obj0, &buf1, &size1, &alloc1); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "WebPDecodeRGB" "', argument " "1"" of type '" "uint8_t const *""'"); - } - arg1 = (uint8_t *)(buf1); - arg2 = (size_t)(size1 - 1); - result = (uint8_t *)WebPDecodeRGB((uint8_t const *)arg1,arg2,arg3,arg4); - { - resultobj = PyString_FromStringAndSize( - (const char*)result, - (result == NULL) ? 0 : ReturnedBufferSize("WebPDecodeRGB", arg3, arg4)); - } - if (SWIG_IsTmpObj(res3)) { - resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_int((*arg3))); - } else { - int new_flags = SWIG_IsNewObj(res3) ? (SWIG_POINTER_OWN | 0 ) : 0 ; - resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg3), SWIGTYPE_p_int, new_flags)); - } - if (SWIG_IsTmpObj(res4)) { - resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_int((*arg4))); - } else { - int new_flags = SWIG_IsNewObj(res4) ? (SWIG_POINTER_OWN | 0 ) : 0 ; - resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg4), SWIGTYPE_p_int, new_flags)); - } - if (alloc1 == SWIG_NEWOBJ) free((char*)buf1); - free(result); - return resultobj; -fail: - if (alloc1 == SWIG_NEWOBJ) free((char*)buf1); - return NULL; -} - - -SWIGINTERN PyObject *_wrap_WebPDecodeRGBA(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - uint8_t *arg1 = (uint8_t *) 0 ; - size_t arg2 ; - int *arg3 = (int *) 0 ; - int *arg4 = (int *) 0 ; - int res1 ; - char *buf1 = 0 ; - size_t size1 = 0 ; - int alloc1 = 0 ; - int temp3 ; - int res3 = SWIG_TMPOBJ ; - int temp4 ; - int res4 = SWIG_TMPOBJ ; - PyObject * obj0 = 0 ; - uint8_t *result = 0 ; - - arg3 = &temp3; - arg4 = &temp4; - if (!PyArg_ParseTuple(args,(char *)"O:WebPDecodeRGBA",&obj0)) SWIG_fail; - res1 = SWIG_AsCharPtrAndSize(obj0, &buf1, &size1, &alloc1); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "WebPDecodeRGBA" "', argument " "1"" of type '" "uint8_t const *""'"); - } - arg1 = (uint8_t *)(buf1); - arg2 = (size_t)(size1 - 1); - result = (uint8_t *)WebPDecodeRGBA((uint8_t const *)arg1,arg2,arg3,arg4); - { - resultobj = PyString_FromStringAndSize( - (const char*)result, - (result == NULL) ? 0 : ReturnedBufferSize("WebPDecodeRGBA", arg3, arg4)); - } - if (SWIG_IsTmpObj(res3)) { - resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_int((*arg3))); - } else { - int new_flags = SWIG_IsNewObj(res3) ? (SWIG_POINTER_OWN | 0 ) : 0 ; - resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg3), SWIGTYPE_p_int, new_flags)); - } - if (SWIG_IsTmpObj(res4)) { - resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_int((*arg4))); - } else { - int new_flags = SWIG_IsNewObj(res4) ? (SWIG_POINTER_OWN | 0 ) : 0 ; - resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg4), SWIGTYPE_p_int, new_flags)); - } - if (alloc1 == SWIG_NEWOBJ) free((char*)buf1); - free(result); - return resultobj; -fail: - if (alloc1 == SWIG_NEWOBJ) free((char*)buf1); - return NULL; -} - - -SWIGINTERN PyObject *_wrap_WebPDecodeARGB(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - uint8_t *arg1 = (uint8_t *) 0 ; - size_t arg2 ; - int *arg3 = (int *) 0 ; - int *arg4 = (int *) 0 ; - int res1 ; - char *buf1 = 0 ; - size_t size1 = 0 ; - int alloc1 = 0 ; - int temp3 ; - int res3 = SWIG_TMPOBJ ; - int temp4 ; - int res4 = SWIG_TMPOBJ ; - PyObject * obj0 = 0 ; - uint8_t *result = 0 ; - - arg3 = &temp3; - arg4 = &temp4; - if (!PyArg_ParseTuple(args,(char *)"O:WebPDecodeARGB",&obj0)) SWIG_fail; - res1 = SWIG_AsCharPtrAndSize(obj0, &buf1, &size1, &alloc1); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "WebPDecodeARGB" "', argument " "1"" of type '" "uint8_t const *""'"); - } - arg1 = (uint8_t *)(buf1); - arg2 = (size_t)(size1 - 1); - result = (uint8_t *)WebPDecodeARGB((uint8_t const *)arg1,arg2,arg3,arg4); - { - resultobj = PyString_FromStringAndSize( - (const char*)result, - (result == NULL) ? 0 : ReturnedBufferSize("WebPDecodeARGB", arg3, arg4)); - } - if (SWIG_IsTmpObj(res3)) { - resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_int((*arg3))); - } else { - int new_flags = SWIG_IsNewObj(res3) ? (SWIG_POINTER_OWN | 0 ) : 0 ; - resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg3), SWIGTYPE_p_int, new_flags)); - } - if (SWIG_IsTmpObj(res4)) { - resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_int((*arg4))); - } else { - int new_flags = SWIG_IsNewObj(res4) ? (SWIG_POINTER_OWN | 0 ) : 0 ; - resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg4), SWIGTYPE_p_int, new_flags)); - } - if (alloc1 == SWIG_NEWOBJ) free((char*)buf1); - free(result); - return resultobj; -fail: - if (alloc1 == SWIG_NEWOBJ) free((char*)buf1); - return NULL; -} - - -SWIGINTERN PyObject *_wrap_WebPDecodeBGR(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - uint8_t *arg1 = (uint8_t *) 0 ; - size_t arg2 ; - int *arg3 = (int *) 0 ; - int *arg4 = (int *) 0 ; - int res1 ; - char *buf1 = 0 ; - size_t size1 = 0 ; - int alloc1 = 0 ; - int temp3 ; - int res3 = SWIG_TMPOBJ ; - int temp4 ; - int res4 = SWIG_TMPOBJ ; - PyObject * obj0 = 0 ; - uint8_t *result = 0 ; - - arg3 = &temp3; - arg4 = &temp4; - if (!PyArg_ParseTuple(args,(char *)"O:WebPDecodeBGR",&obj0)) SWIG_fail; - res1 = SWIG_AsCharPtrAndSize(obj0, &buf1, &size1, &alloc1); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "WebPDecodeBGR" "', argument " "1"" of type '" "uint8_t const *""'"); - } - arg1 = (uint8_t *)(buf1); - arg2 = (size_t)(size1 - 1); - result = (uint8_t *)WebPDecodeBGR((uint8_t const *)arg1,arg2,arg3,arg4); - { - resultobj = PyString_FromStringAndSize( - (const char*)result, - (result == NULL) ? 0 : ReturnedBufferSize("WebPDecodeBGR", arg3, arg4)); - } - if (SWIG_IsTmpObj(res3)) { - resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_int((*arg3))); - } else { - int new_flags = SWIG_IsNewObj(res3) ? (SWIG_POINTER_OWN | 0 ) : 0 ; - resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg3), SWIGTYPE_p_int, new_flags)); - } - if (SWIG_IsTmpObj(res4)) { - resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_int((*arg4))); - } else { - int new_flags = SWIG_IsNewObj(res4) ? (SWIG_POINTER_OWN | 0 ) : 0 ; - resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg4), SWIGTYPE_p_int, new_flags)); - } - if (alloc1 == SWIG_NEWOBJ) free((char*)buf1); - free(result); - return resultobj; -fail: - if (alloc1 == SWIG_NEWOBJ) free((char*)buf1); - return NULL; -} - - -SWIGINTERN PyObject *_wrap_WebPDecodeBGRA(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - uint8_t *arg1 = (uint8_t *) 0 ; - size_t arg2 ; - int *arg3 = (int *) 0 ; - int *arg4 = (int *) 0 ; - int res1 ; - char *buf1 = 0 ; - size_t size1 = 0 ; - int alloc1 = 0 ; - int temp3 ; - int res3 = SWIG_TMPOBJ ; - int temp4 ; - int res4 = SWIG_TMPOBJ ; - PyObject * obj0 = 0 ; - uint8_t *result = 0 ; - - arg3 = &temp3; - arg4 = &temp4; - if (!PyArg_ParseTuple(args,(char *)"O:WebPDecodeBGRA",&obj0)) SWIG_fail; - res1 = SWIG_AsCharPtrAndSize(obj0, &buf1, &size1, &alloc1); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "WebPDecodeBGRA" "', argument " "1"" of type '" "uint8_t const *""'"); - } - arg1 = (uint8_t *)(buf1); - arg2 = (size_t)(size1 - 1); - result = (uint8_t *)WebPDecodeBGRA((uint8_t const *)arg1,arg2,arg3,arg4); - { - resultobj = PyString_FromStringAndSize( - (const char*)result, - (result == NULL) ? 0 : ReturnedBufferSize("WebPDecodeBGRA", arg3, arg4)); - } - if (SWIG_IsTmpObj(res3)) { - resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_int((*arg3))); - } else { - int new_flags = SWIG_IsNewObj(res3) ? (SWIG_POINTER_OWN | 0 ) : 0 ; - resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg3), SWIGTYPE_p_int, new_flags)); - } - if (SWIG_IsTmpObj(res4)) { - resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_int((*arg4))); - } else { - int new_flags = SWIG_IsNewObj(res4) ? (SWIG_POINTER_OWN | 0 ) : 0 ; - resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg4), SWIGTYPE_p_int, new_flags)); - } - if (alloc1 == SWIG_NEWOBJ) free((char*)buf1); - free(result); - return resultobj; -fail: - if (alloc1 == SWIG_NEWOBJ) free((char*)buf1); - return NULL; -} - - -SWIGINTERN PyObject *_wrap_WebPGetEncoderVersion(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - int result; - - if (!PyArg_ParseTuple(args,(char *)":WebPGetEncoderVersion")) SWIG_fail; - result = (int)WebPGetEncoderVersion(); - resultobj = SWIG_From_int((int)(result)); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_wrap_WebPEncodeRGB(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - uint8_t *arg1 = (uint8_t *) 0 ; - int *arg2 = (int *) 0 ; - int *arg3 = (int *) 0 ; - int *arg4 = (int *) 0 ; - int arg5 ; - int arg6 ; - int arg7 ; - float arg8 ; - Py_buffer rgb_buffer1 ; - int temp2 ; - int res2 = 0 ; - int temp3 ; - int res3 = 0 ; - int temp4 ; - int res4 = SWIG_TMPOBJ ; - int val5 ; - int ecode5 = 0 ; - int val6 ; - int ecode6 = 0 ; - int val7 ; - int ecode7 = 0 ; - float val8 ; - int ecode8 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - PyObject * obj2 = 0 ; - PyObject * obj3 = 0 ; - PyObject * obj4 = 0 ; - PyObject * obj5 = 0 ; - PyObject * obj6 = 0 ; - uint8_t *result = 0 ; - - arg4 = &temp4; - if (!PyArg_ParseTuple(args,(char *)"OOOOOOO:wrap_WebPEncodeRGB",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5,&obj6)) SWIG_fail; - { - // NB: with Python < 2.6 the old style buffer protocol may be used: - // Py_ssize_t unused; - // PyObject_AsReadBuffer(obj0, (const void**)(&arg1), &unused); - if (!PyObject_CheckBuffer(obj0)) { - SWIG_exception_fail(SWIG_TypeError, - "in method 'wrap_WebPEncodeRGB', argument 1" - " does not support the buffer interface"); - } - if (PyObject_GetBuffer(obj0, &rgb_buffer1, PyBUF_SIMPLE)) { - SWIG_exception_fail(SWIG_RuntimeError, - "in method 'wrap_WebPEncodeRGB', unable to get buffer view"); - } - arg1 = (uint8_t *)rgb_buffer1.buf; - } - if (!(SWIG_IsOK((res2 = SWIG_ConvertPtr(obj1,SWIG_as_voidptrptr(&arg2),SWIGTYPE_p_int,0))))) { - int val; - int ecode = SWIG_AsVal_int(obj1, &val); - if (!SWIG_IsOK(ecode)) { - SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "wrap_WebPEncodeRGB" "', argument " "2"" of type '" "int""'"); - } - temp2 = (int)(val); - arg2 = &temp2; - res2 = SWIG_AddTmpMask(ecode); - } - if (!(SWIG_IsOK((res3 = SWIG_ConvertPtr(obj2,SWIG_as_voidptrptr(&arg3),SWIGTYPE_p_int,0))))) { - int val; - int ecode = SWIG_AsVal_int(obj2, &val); - if (!SWIG_IsOK(ecode)) { - SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "wrap_WebPEncodeRGB" "', argument " "3"" of type '" "int""'"); - } - temp3 = (int)(val); - arg3 = &temp3; - res3 = SWIG_AddTmpMask(ecode); - } - ecode5 = SWIG_AsVal_int(obj3, &val5); - if (!SWIG_IsOK(ecode5)) { - SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "wrap_WebPEncodeRGB" "', argument " "5"" of type '" "int""'"); - } - arg5 = (int)(val5); - ecode6 = SWIG_AsVal_int(obj4, &val6); - if (!SWIG_IsOK(ecode6)) { - SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "wrap_WebPEncodeRGB" "', argument " "6"" of type '" "int""'"); - } - arg6 = (int)(val6); - ecode7 = SWIG_AsVal_int(obj5, &val7); - if (!SWIG_IsOK(ecode7)) { - SWIG_exception_fail(SWIG_ArgError(ecode7), "in method '" "wrap_WebPEncodeRGB" "', argument " "7"" of type '" "int""'"); - } - arg7 = (int)(val7); - ecode8 = SWIG_AsVal_float(obj6, &val8); - if (!SWIG_IsOK(ecode8)) { - SWIG_exception_fail(SWIG_ArgError(ecode8), "in method '" "wrap_WebPEncodeRGB" "', argument " "8"" of type '" "float""'"); - } - arg8 = (float)(val8); - result = (uint8_t *)wrap_WebPEncodeRGB((uint8_t const *)arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8); - { - resultobj = PyString_FromStringAndSize( - (const char*)result, - (result == NULL) ? 0 : ReturnedBufferSize("wrap_WebPEncodeRGB", arg3, arg4)); - } - if (SWIG_IsTmpObj(res4)) { - resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_int((*arg4))); - } else { - int new_flags = SWIG_IsNewObj(res4) ? (SWIG_POINTER_OWN | 0 ) : 0 ; - resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg4), SWIGTYPE_p_int, new_flags)); - } - { - PyBuffer_Release(&rgb_buffer1); - } - if (SWIG_IsNewObj(res2)) free((char*)arg2); - if (SWIG_IsNewObj(res3)) free((char*)arg3); - free(result); - return resultobj; -fail: - { - PyBuffer_Release(&rgb_buffer1); - } - if (SWIG_IsNewObj(res2)) free((char*)arg2); - if (SWIG_IsNewObj(res3)) free((char*)arg3); - return NULL; -} - - -SWIGINTERN PyObject *_wrap_wrap_WebPEncodeBGR(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - uint8_t *arg1 = (uint8_t *) 0 ; - int *arg2 = (int *) 0 ; - int *arg3 = (int *) 0 ; - int *arg4 = (int *) 0 ; - int arg5 ; - int arg6 ; - int arg7 ; - float arg8 ; - Py_buffer rgb_buffer1 ; - int temp2 ; - int res2 = 0 ; - int temp3 ; - int res3 = 0 ; - int temp4 ; - int res4 = SWIG_TMPOBJ ; - int val5 ; - int ecode5 = 0 ; - int val6 ; - int ecode6 = 0 ; - int val7 ; - int ecode7 = 0 ; - float val8 ; - int ecode8 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - PyObject * obj2 = 0 ; - PyObject * obj3 = 0 ; - PyObject * obj4 = 0 ; - PyObject * obj5 = 0 ; - PyObject * obj6 = 0 ; - uint8_t *result = 0 ; - - arg4 = &temp4; - if (!PyArg_ParseTuple(args,(char *)"OOOOOOO:wrap_WebPEncodeBGR",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5,&obj6)) SWIG_fail; - { - // NB: with Python < 2.6 the old style buffer protocol may be used: - // Py_ssize_t unused; - // PyObject_AsReadBuffer(obj0, (const void**)(&arg1), &unused); - if (!PyObject_CheckBuffer(obj0)) { - SWIG_exception_fail(SWIG_TypeError, - "in method 'wrap_WebPEncodeBGR', argument 1" - " does not support the buffer interface"); - } - if (PyObject_GetBuffer(obj0, &rgb_buffer1, PyBUF_SIMPLE)) { - SWIG_exception_fail(SWIG_RuntimeError, - "in method 'wrap_WebPEncodeBGR', unable to get buffer view"); - } - arg1 = (uint8_t *)rgb_buffer1.buf; - } - if (!(SWIG_IsOK((res2 = SWIG_ConvertPtr(obj1,SWIG_as_voidptrptr(&arg2),SWIGTYPE_p_int,0))))) { - int val; - int ecode = SWIG_AsVal_int(obj1, &val); - if (!SWIG_IsOK(ecode)) { - SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "wrap_WebPEncodeBGR" "', argument " "2"" of type '" "int""'"); - } - temp2 = (int)(val); - arg2 = &temp2; - res2 = SWIG_AddTmpMask(ecode); - } - if (!(SWIG_IsOK((res3 = SWIG_ConvertPtr(obj2,SWIG_as_voidptrptr(&arg3),SWIGTYPE_p_int,0))))) { - int val; - int ecode = SWIG_AsVal_int(obj2, &val); - if (!SWIG_IsOK(ecode)) { - SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "wrap_WebPEncodeBGR" "', argument " "3"" of type '" "int""'"); - } - temp3 = (int)(val); - arg3 = &temp3; - res3 = SWIG_AddTmpMask(ecode); - } - ecode5 = SWIG_AsVal_int(obj3, &val5); - if (!SWIG_IsOK(ecode5)) { - SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "wrap_WebPEncodeBGR" "', argument " "5"" of type '" "int""'"); - } - arg5 = (int)(val5); - ecode6 = SWIG_AsVal_int(obj4, &val6); - if (!SWIG_IsOK(ecode6)) { - SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "wrap_WebPEncodeBGR" "', argument " "6"" of type '" "int""'"); - } - arg6 = (int)(val6); - ecode7 = SWIG_AsVal_int(obj5, &val7); - if (!SWIG_IsOK(ecode7)) { - SWIG_exception_fail(SWIG_ArgError(ecode7), "in method '" "wrap_WebPEncodeBGR" "', argument " "7"" of type '" "int""'"); - } - arg7 = (int)(val7); - ecode8 = SWIG_AsVal_float(obj6, &val8); - if (!SWIG_IsOK(ecode8)) { - SWIG_exception_fail(SWIG_ArgError(ecode8), "in method '" "wrap_WebPEncodeBGR" "', argument " "8"" of type '" "float""'"); - } - arg8 = (float)(val8); - result = (uint8_t *)wrap_WebPEncodeBGR((uint8_t const *)arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8); - { - resultobj = PyString_FromStringAndSize( - (const char*)result, - (result == NULL) ? 0 : ReturnedBufferSize("wrap_WebPEncodeBGR", arg3, arg4)); - } - if (SWIG_IsTmpObj(res4)) { - resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_int((*arg4))); - } else { - int new_flags = SWIG_IsNewObj(res4) ? (SWIG_POINTER_OWN | 0 ) : 0 ; - resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg4), SWIGTYPE_p_int, new_flags)); - } - { - PyBuffer_Release(&rgb_buffer1); - } - if (SWIG_IsNewObj(res2)) free((char*)arg2); - if (SWIG_IsNewObj(res3)) free((char*)arg3); - free(result); - return resultobj; -fail: - { - PyBuffer_Release(&rgb_buffer1); - } - if (SWIG_IsNewObj(res2)) free((char*)arg2); - if (SWIG_IsNewObj(res3)) free((char*)arg3); - return NULL; -} - - -SWIGINTERN PyObject *_wrap_wrap_WebPEncodeRGBA(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - uint8_t *arg1 = (uint8_t *) 0 ; - int *arg2 = (int *) 0 ; - int *arg3 = (int *) 0 ; - int *arg4 = (int *) 0 ; - int arg5 ; - int arg6 ; - int arg7 ; - float arg8 ; - Py_buffer rgb_buffer1 ; - int temp2 ; - int res2 = 0 ; - int temp3 ; - int res3 = 0 ; - int temp4 ; - int res4 = SWIG_TMPOBJ ; - int val5 ; - int ecode5 = 0 ; - int val6 ; - int ecode6 = 0 ; - int val7 ; - int ecode7 = 0 ; - float val8 ; - int ecode8 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - PyObject * obj2 = 0 ; - PyObject * obj3 = 0 ; - PyObject * obj4 = 0 ; - PyObject * obj5 = 0 ; - PyObject * obj6 = 0 ; - uint8_t *result = 0 ; - - arg4 = &temp4; - if (!PyArg_ParseTuple(args,(char *)"OOOOOOO:wrap_WebPEncodeRGBA",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5,&obj6)) SWIG_fail; - { - // NB: with Python < 2.6 the old style buffer protocol may be used: - // Py_ssize_t unused; - // PyObject_AsReadBuffer(obj0, (const void**)(&arg1), &unused); - if (!PyObject_CheckBuffer(obj0)) { - SWIG_exception_fail(SWIG_TypeError, - "in method 'wrap_WebPEncodeRGBA', argument 1" - " does not support the buffer interface"); - } - if (PyObject_GetBuffer(obj0, &rgb_buffer1, PyBUF_SIMPLE)) { - SWIG_exception_fail(SWIG_RuntimeError, - "in method 'wrap_WebPEncodeRGBA', unable to get buffer view"); - } - arg1 = (uint8_t *)rgb_buffer1.buf; - } - if (!(SWIG_IsOK((res2 = SWIG_ConvertPtr(obj1,SWIG_as_voidptrptr(&arg2),SWIGTYPE_p_int,0))))) { - int val; - int ecode = SWIG_AsVal_int(obj1, &val); - if (!SWIG_IsOK(ecode)) { - SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "wrap_WebPEncodeRGBA" "', argument " "2"" of type '" "int""'"); - } - temp2 = (int)(val); - arg2 = &temp2; - res2 = SWIG_AddTmpMask(ecode); - } - if (!(SWIG_IsOK((res3 = SWIG_ConvertPtr(obj2,SWIG_as_voidptrptr(&arg3),SWIGTYPE_p_int,0))))) { - int val; - int ecode = SWIG_AsVal_int(obj2, &val); - if (!SWIG_IsOK(ecode)) { - SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "wrap_WebPEncodeRGBA" "', argument " "3"" of type '" "int""'"); - } - temp3 = (int)(val); - arg3 = &temp3; - res3 = SWIG_AddTmpMask(ecode); - } - ecode5 = SWIG_AsVal_int(obj3, &val5); - if (!SWIG_IsOK(ecode5)) { - SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "wrap_WebPEncodeRGBA" "', argument " "5"" of type '" "int""'"); - } - arg5 = (int)(val5); - ecode6 = SWIG_AsVal_int(obj4, &val6); - if (!SWIG_IsOK(ecode6)) { - SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "wrap_WebPEncodeRGBA" "', argument " "6"" of type '" "int""'"); - } - arg6 = (int)(val6); - ecode7 = SWIG_AsVal_int(obj5, &val7); - if (!SWIG_IsOK(ecode7)) { - SWIG_exception_fail(SWIG_ArgError(ecode7), "in method '" "wrap_WebPEncodeRGBA" "', argument " "7"" of type '" "int""'"); - } - arg7 = (int)(val7); - ecode8 = SWIG_AsVal_float(obj6, &val8); - if (!SWIG_IsOK(ecode8)) { - SWIG_exception_fail(SWIG_ArgError(ecode8), "in method '" "wrap_WebPEncodeRGBA" "', argument " "8"" of type '" "float""'"); - } - arg8 = (float)(val8); - result = (uint8_t *)wrap_WebPEncodeRGBA((uint8_t const *)arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8); - { - resultobj = PyString_FromStringAndSize( - (const char*)result, - (result == NULL) ? 0 : ReturnedBufferSize("wrap_WebPEncodeRGBA", arg3, arg4)); - } - if (SWIG_IsTmpObj(res4)) { - resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_int((*arg4))); - } else { - int new_flags = SWIG_IsNewObj(res4) ? (SWIG_POINTER_OWN | 0 ) : 0 ; - resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg4), SWIGTYPE_p_int, new_flags)); - } - { - PyBuffer_Release(&rgb_buffer1); - } - if (SWIG_IsNewObj(res2)) free((char*)arg2); - if (SWIG_IsNewObj(res3)) free((char*)arg3); - free(result); - return resultobj; -fail: - { - PyBuffer_Release(&rgb_buffer1); - } - if (SWIG_IsNewObj(res2)) free((char*)arg2); - if (SWIG_IsNewObj(res3)) free((char*)arg3); - return NULL; -} - - -SWIGINTERN PyObject *_wrap_wrap_WebPEncodeBGRA(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - uint8_t *arg1 = (uint8_t *) 0 ; - int *arg2 = (int *) 0 ; - int *arg3 = (int *) 0 ; - int *arg4 = (int *) 0 ; - int arg5 ; - int arg6 ; - int arg7 ; - float arg8 ; - Py_buffer rgb_buffer1 ; - int temp2 ; - int res2 = 0 ; - int temp3 ; - int res3 = 0 ; - int temp4 ; - int res4 = SWIG_TMPOBJ ; - int val5 ; - int ecode5 = 0 ; - int val6 ; - int ecode6 = 0 ; - int val7 ; - int ecode7 = 0 ; - float val8 ; - int ecode8 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - PyObject * obj2 = 0 ; - PyObject * obj3 = 0 ; - PyObject * obj4 = 0 ; - PyObject * obj5 = 0 ; - PyObject * obj6 = 0 ; - uint8_t *result = 0 ; - - arg4 = &temp4; - if (!PyArg_ParseTuple(args,(char *)"OOOOOOO:wrap_WebPEncodeBGRA",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5,&obj6)) SWIG_fail; - { - // NB: with Python < 2.6 the old style buffer protocol may be used: - // Py_ssize_t unused; - // PyObject_AsReadBuffer(obj0, (const void**)(&arg1), &unused); - if (!PyObject_CheckBuffer(obj0)) { - SWIG_exception_fail(SWIG_TypeError, - "in method 'wrap_WebPEncodeBGRA', argument 1" - " does not support the buffer interface"); - } - if (PyObject_GetBuffer(obj0, &rgb_buffer1, PyBUF_SIMPLE)) { - SWIG_exception_fail(SWIG_RuntimeError, - "in method 'wrap_WebPEncodeBGRA', unable to get buffer view"); - } - arg1 = (uint8_t *)rgb_buffer1.buf; - } - if (!(SWIG_IsOK((res2 = SWIG_ConvertPtr(obj1,SWIG_as_voidptrptr(&arg2),SWIGTYPE_p_int,0))))) { - int val; - int ecode = SWIG_AsVal_int(obj1, &val); - if (!SWIG_IsOK(ecode)) { - SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "wrap_WebPEncodeBGRA" "', argument " "2"" of type '" "int""'"); - } - temp2 = (int)(val); - arg2 = &temp2; - res2 = SWIG_AddTmpMask(ecode); - } - if (!(SWIG_IsOK((res3 = SWIG_ConvertPtr(obj2,SWIG_as_voidptrptr(&arg3),SWIGTYPE_p_int,0))))) { - int val; - int ecode = SWIG_AsVal_int(obj2, &val); - if (!SWIG_IsOK(ecode)) { - SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "wrap_WebPEncodeBGRA" "', argument " "3"" of type '" "int""'"); - } - temp3 = (int)(val); - arg3 = &temp3; - res3 = SWIG_AddTmpMask(ecode); - } - ecode5 = SWIG_AsVal_int(obj3, &val5); - if (!SWIG_IsOK(ecode5)) { - SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "wrap_WebPEncodeBGRA" "', argument " "5"" of type '" "int""'"); - } - arg5 = (int)(val5); - ecode6 = SWIG_AsVal_int(obj4, &val6); - if (!SWIG_IsOK(ecode6)) { - SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "wrap_WebPEncodeBGRA" "', argument " "6"" of type '" "int""'"); - } - arg6 = (int)(val6); - ecode7 = SWIG_AsVal_int(obj5, &val7); - if (!SWIG_IsOK(ecode7)) { - SWIG_exception_fail(SWIG_ArgError(ecode7), "in method '" "wrap_WebPEncodeBGRA" "', argument " "7"" of type '" "int""'"); - } - arg7 = (int)(val7); - ecode8 = SWIG_AsVal_float(obj6, &val8); - if (!SWIG_IsOK(ecode8)) { - SWIG_exception_fail(SWIG_ArgError(ecode8), "in method '" "wrap_WebPEncodeBGRA" "', argument " "8"" of type '" "float""'"); - } - arg8 = (float)(val8); - result = (uint8_t *)wrap_WebPEncodeBGRA((uint8_t const *)arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8); - { - resultobj = PyString_FromStringAndSize( - (const char*)result, - (result == NULL) ? 0 : ReturnedBufferSize("wrap_WebPEncodeBGRA", arg3, arg4)); - } - if (SWIG_IsTmpObj(res4)) { - resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_int((*arg4))); - } else { - int new_flags = SWIG_IsNewObj(res4) ? (SWIG_POINTER_OWN | 0 ) : 0 ; - resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg4), SWIGTYPE_p_int, new_flags)); - } - { - PyBuffer_Release(&rgb_buffer1); - } - if (SWIG_IsNewObj(res2)) free((char*)arg2); - if (SWIG_IsNewObj(res3)) free((char*)arg3); - free(result); - return resultobj; -fail: - { - PyBuffer_Release(&rgb_buffer1); - } - if (SWIG_IsNewObj(res2)) free((char*)arg2); - if (SWIG_IsNewObj(res3)) free((char*)arg3); - return NULL; -} - - -SWIGINTERN PyObject *_wrap_wrap_WebPEncodeLosslessRGB(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - uint8_t *arg1 = (uint8_t *) 0 ; - int *arg2 = (int *) 0 ; - int *arg3 = (int *) 0 ; - int *arg4 = (int *) 0 ; - int arg5 ; - int arg6 ; - int arg7 ; - Py_buffer rgb_buffer1 ; - int temp2 ; - int res2 = 0 ; - int temp3 ; - int res3 = 0 ; - int temp4 ; - int res4 = SWIG_TMPOBJ ; - int val5 ; - int ecode5 = 0 ; - int val6 ; - int ecode6 = 0 ; - int val7 ; - int ecode7 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - PyObject * obj2 = 0 ; - PyObject * obj3 = 0 ; - PyObject * obj4 = 0 ; - PyObject * obj5 = 0 ; - uint8_t *result = 0 ; - - arg4 = &temp4; - if (!PyArg_ParseTuple(args,(char *)"OOOOOO:wrap_WebPEncodeLosslessRGB",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5)) SWIG_fail; - { - // NB: with Python < 2.6 the old style buffer protocol may be used: - // Py_ssize_t unused; - // PyObject_AsReadBuffer(obj0, (const void**)(&arg1), &unused); - if (!PyObject_CheckBuffer(obj0)) { - SWIG_exception_fail(SWIG_TypeError, - "in method 'wrap_WebPEncodeLosslessRGB', argument 1" - " does not support the buffer interface"); - } - if (PyObject_GetBuffer(obj0, &rgb_buffer1, PyBUF_SIMPLE)) { - SWIG_exception_fail(SWIG_RuntimeError, - "in method 'wrap_WebPEncodeLosslessRGB', unable to get buffer view"); - } - arg1 = (uint8_t *)rgb_buffer1.buf; - } - if (!(SWIG_IsOK((res2 = SWIG_ConvertPtr(obj1,SWIG_as_voidptrptr(&arg2),SWIGTYPE_p_int,0))))) { - int val; - int ecode = SWIG_AsVal_int(obj1, &val); - if (!SWIG_IsOK(ecode)) { - SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "wrap_WebPEncodeLosslessRGB" "', argument " "2"" of type '" "int""'"); - } - temp2 = (int)(val); - arg2 = &temp2; - res2 = SWIG_AddTmpMask(ecode); - } - if (!(SWIG_IsOK((res3 = SWIG_ConvertPtr(obj2,SWIG_as_voidptrptr(&arg3),SWIGTYPE_p_int,0))))) { - int val; - int ecode = SWIG_AsVal_int(obj2, &val); - if (!SWIG_IsOK(ecode)) { - SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "wrap_WebPEncodeLosslessRGB" "', argument " "3"" of type '" "int""'"); - } - temp3 = (int)(val); - arg3 = &temp3; - res3 = SWIG_AddTmpMask(ecode); - } - ecode5 = SWIG_AsVal_int(obj3, &val5); - if (!SWIG_IsOK(ecode5)) { - SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "wrap_WebPEncodeLosslessRGB" "', argument " "5"" of type '" "int""'"); - } - arg5 = (int)(val5); - ecode6 = SWIG_AsVal_int(obj4, &val6); - if (!SWIG_IsOK(ecode6)) { - SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "wrap_WebPEncodeLosslessRGB" "', argument " "6"" of type '" "int""'"); - } - arg6 = (int)(val6); - ecode7 = SWIG_AsVal_int(obj5, &val7); - if (!SWIG_IsOK(ecode7)) { - SWIG_exception_fail(SWIG_ArgError(ecode7), "in method '" "wrap_WebPEncodeLosslessRGB" "', argument " "7"" of type '" "int""'"); - } - arg7 = (int)(val7); - result = (uint8_t *)wrap_WebPEncodeLosslessRGB((uint8_t const *)arg1,arg2,arg3,arg4,arg5,arg6,arg7); - { - resultobj = PyString_FromStringAndSize( - (const char*)result, - (result == NULL) ? 0 : ReturnedBufferSize("wrap_WebPEncodeLosslessRGB", arg3, arg4)); - } - if (SWIG_IsTmpObj(res4)) { - resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_int((*arg4))); - } else { - int new_flags = SWIG_IsNewObj(res4) ? (SWIG_POINTER_OWN | 0 ) : 0 ; - resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg4), SWIGTYPE_p_int, new_flags)); - } - { - PyBuffer_Release(&rgb_buffer1); - } - if (SWIG_IsNewObj(res2)) free((char*)arg2); - if (SWIG_IsNewObj(res3)) free((char*)arg3); - free(result); - return resultobj; -fail: - { - PyBuffer_Release(&rgb_buffer1); - } - if (SWIG_IsNewObj(res2)) free((char*)arg2); - if (SWIG_IsNewObj(res3)) free((char*)arg3); - return NULL; -} - - -SWIGINTERN PyObject *_wrap_wrap_WebPEncodeLosslessBGR(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - uint8_t *arg1 = (uint8_t *) 0 ; - int *arg2 = (int *) 0 ; - int *arg3 = (int *) 0 ; - int *arg4 = (int *) 0 ; - int arg5 ; - int arg6 ; - int arg7 ; - Py_buffer rgb_buffer1 ; - int temp2 ; - int res2 = 0 ; - int temp3 ; - int res3 = 0 ; - int temp4 ; - int res4 = SWIG_TMPOBJ ; - int val5 ; - int ecode5 = 0 ; - int val6 ; - int ecode6 = 0 ; - int val7 ; - int ecode7 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - PyObject * obj2 = 0 ; - PyObject * obj3 = 0 ; - PyObject * obj4 = 0 ; - PyObject * obj5 = 0 ; - uint8_t *result = 0 ; - - arg4 = &temp4; - if (!PyArg_ParseTuple(args,(char *)"OOOOOO:wrap_WebPEncodeLosslessBGR",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5)) SWIG_fail; - { - // NB: with Python < 2.6 the old style buffer protocol may be used: - // Py_ssize_t unused; - // PyObject_AsReadBuffer(obj0, (const void**)(&arg1), &unused); - if (!PyObject_CheckBuffer(obj0)) { - SWIG_exception_fail(SWIG_TypeError, - "in method 'wrap_WebPEncodeLosslessBGR', argument 1" - " does not support the buffer interface"); - } - if (PyObject_GetBuffer(obj0, &rgb_buffer1, PyBUF_SIMPLE)) { - SWIG_exception_fail(SWIG_RuntimeError, - "in method 'wrap_WebPEncodeLosslessBGR', unable to get buffer view"); - } - arg1 = (uint8_t *)rgb_buffer1.buf; - } - if (!(SWIG_IsOK((res2 = SWIG_ConvertPtr(obj1,SWIG_as_voidptrptr(&arg2),SWIGTYPE_p_int,0))))) { - int val; - int ecode = SWIG_AsVal_int(obj1, &val); - if (!SWIG_IsOK(ecode)) { - SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "wrap_WebPEncodeLosslessBGR" "', argument " "2"" of type '" "int""'"); - } - temp2 = (int)(val); - arg2 = &temp2; - res2 = SWIG_AddTmpMask(ecode); - } - if (!(SWIG_IsOK((res3 = SWIG_ConvertPtr(obj2,SWIG_as_voidptrptr(&arg3),SWIGTYPE_p_int,0))))) { - int val; - int ecode = SWIG_AsVal_int(obj2, &val); - if (!SWIG_IsOK(ecode)) { - SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "wrap_WebPEncodeLosslessBGR" "', argument " "3"" of type '" "int""'"); - } - temp3 = (int)(val); - arg3 = &temp3; - res3 = SWIG_AddTmpMask(ecode); - } - ecode5 = SWIG_AsVal_int(obj3, &val5); - if (!SWIG_IsOK(ecode5)) { - SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "wrap_WebPEncodeLosslessBGR" "', argument " "5"" of type '" "int""'"); - } - arg5 = (int)(val5); - ecode6 = SWIG_AsVal_int(obj4, &val6); - if (!SWIG_IsOK(ecode6)) { - SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "wrap_WebPEncodeLosslessBGR" "', argument " "6"" of type '" "int""'"); - } - arg6 = (int)(val6); - ecode7 = SWIG_AsVal_int(obj5, &val7); - if (!SWIG_IsOK(ecode7)) { - SWIG_exception_fail(SWIG_ArgError(ecode7), "in method '" "wrap_WebPEncodeLosslessBGR" "', argument " "7"" of type '" "int""'"); - } - arg7 = (int)(val7); - result = (uint8_t *)wrap_WebPEncodeLosslessBGR((uint8_t const *)arg1,arg2,arg3,arg4,arg5,arg6,arg7); - { - resultobj = PyString_FromStringAndSize( - (const char*)result, - (result == NULL) ? 0 : ReturnedBufferSize("wrap_WebPEncodeLosslessBGR", arg3, arg4)); - } - if (SWIG_IsTmpObj(res4)) { - resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_int((*arg4))); - } else { - int new_flags = SWIG_IsNewObj(res4) ? (SWIG_POINTER_OWN | 0 ) : 0 ; - resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg4), SWIGTYPE_p_int, new_flags)); - } - { - PyBuffer_Release(&rgb_buffer1); - } - if (SWIG_IsNewObj(res2)) free((char*)arg2); - if (SWIG_IsNewObj(res3)) free((char*)arg3); - free(result); - return resultobj; -fail: - { - PyBuffer_Release(&rgb_buffer1); - } - if (SWIG_IsNewObj(res2)) free((char*)arg2); - if (SWIG_IsNewObj(res3)) free((char*)arg3); - return NULL; -} - - -SWIGINTERN PyObject *_wrap_wrap_WebPEncodeLosslessRGBA(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - uint8_t *arg1 = (uint8_t *) 0 ; - int *arg2 = (int *) 0 ; - int *arg3 = (int *) 0 ; - int *arg4 = (int *) 0 ; - int arg5 ; - int arg6 ; - int arg7 ; - Py_buffer rgb_buffer1 ; - int temp2 ; - int res2 = 0 ; - int temp3 ; - int res3 = 0 ; - int temp4 ; - int res4 = SWIG_TMPOBJ ; - int val5 ; - int ecode5 = 0 ; - int val6 ; - int ecode6 = 0 ; - int val7 ; - int ecode7 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - PyObject * obj2 = 0 ; - PyObject * obj3 = 0 ; - PyObject * obj4 = 0 ; - PyObject * obj5 = 0 ; - uint8_t *result = 0 ; - - arg4 = &temp4; - if (!PyArg_ParseTuple(args,(char *)"OOOOOO:wrap_WebPEncodeLosslessRGBA",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5)) SWIG_fail; - { - // NB: with Python < 2.6 the old style buffer protocol may be used: - // Py_ssize_t unused; - // PyObject_AsReadBuffer(obj0, (const void**)(&arg1), &unused); - if (!PyObject_CheckBuffer(obj0)) { - SWIG_exception_fail(SWIG_TypeError, - "in method 'wrap_WebPEncodeLosslessRGBA', argument 1" - " does not support the buffer interface"); - } - if (PyObject_GetBuffer(obj0, &rgb_buffer1, PyBUF_SIMPLE)) { - SWIG_exception_fail(SWIG_RuntimeError, - "in method 'wrap_WebPEncodeLosslessRGBA', unable to get buffer view"); - } - arg1 = (uint8_t *)rgb_buffer1.buf; - } - if (!(SWIG_IsOK((res2 = SWIG_ConvertPtr(obj1,SWIG_as_voidptrptr(&arg2),SWIGTYPE_p_int,0))))) { - int val; - int ecode = SWIG_AsVal_int(obj1, &val); - if (!SWIG_IsOK(ecode)) { - SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "wrap_WebPEncodeLosslessRGBA" "', argument " "2"" of type '" "int""'"); - } - temp2 = (int)(val); - arg2 = &temp2; - res2 = SWIG_AddTmpMask(ecode); - } - if (!(SWIG_IsOK((res3 = SWIG_ConvertPtr(obj2,SWIG_as_voidptrptr(&arg3),SWIGTYPE_p_int,0))))) { - int val; - int ecode = SWIG_AsVal_int(obj2, &val); - if (!SWIG_IsOK(ecode)) { - SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "wrap_WebPEncodeLosslessRGBA" "', argument " "3"" of type '" "int""'"); - } - temp3 = (int)(val); - arg3 = &temp3; - res3 = SWIG_AddTmpMask(ecode); - } - ecode5 = SWIG_AsVal_int(obj3, &val5); - if (!SWIG_IsOK(ecode5)) { - SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "wrap_WebPEncodeLosslessRGBA" "', argument " "5"" of type '" "int""'"); - } - arg5 = (int)(val5); - ecode6 = SWIG_AsVal_int(obj4, &val6); - if (!SWIG_IsOK(ecode6)) { - SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "wrap_WebPEncodeLosslessRGBA" "', argument " "6"" of type '" "int""'"); - } - arg6 = (int)(val6); - ecode7 = SWIG_AsVal_int(obj5, &val7); - if (!SWIG_IsOK(ecode7)) { - SWIG_exception_fail(SWIG_ArgError(ecode7), "in method '" "wrap_WebPEncodeLosslessRGBA" "', argument " "7"" of type '" "int""'"); - } - arg7 = (int)(val7); - result = (uint8_t *)wrap_WebPEncodeLosslessRGBA((uint8_t const *)arg1,arg2,arg3,arg4,arg5,arg6,arg7); - { - resultobj = PyString_FromStringAndSize( - (const char*)result, - (result == NULL) ? 0 : ReturnedBufferSize("wrap_WebPEncodeLosslessRGBA", arg3, arg4)); - } - if (SWIG_IsTmpObj(res4)) { - resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_int((*arg4))); - } else { - int new_flags = SWIG_IsNewObj(res4) ? (SWIG_POINTER_OWN | 0 ) : 0 ; - resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg4), SWIGTYPE_p_int, new_flags)); - } - { - PyBuffer_Release(&rgb_buffer1); - } - if (SWIG_IsNewObj(res2)) free((char*)arg2); - if (SWIG_IsNewObj(res3)) free((char*)arg3); - free(result); - return resultobj; -fail: - { - PyBuffer_Release(&rgb_buffer1); - } - if (SWIG_IsNewObj(res2)) free((char*)arg2); - if (SWIG_IsNewObj(res3)) free((char*)arg3); - return NULL; -} - - -SWIGINTERN PyObject *_wrap_wrap_WebPEncodeLosslessBGRA(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - uint8_t *arg1 = (uint8_t *) 0 ; - int *arg2 = (int *) 0 ; - int *arg3 = (int *) 0 ; - int *arg4 = (int *) 0 ; - int arg5 ; - int arg6 ; - int arg7 ; - Py_buffer rgb_buffer1 ; - int temp2 ; - int res2 = 0 ; - int temp3 ; - int res3 = 0 ; - int temp4 ; - int res4 = SWIG_TMPOBJ ; - int val5 ; - int ecode5 = 0 ; - int val6 ; - int ecode6 = 0 ; - int val7 ; - int ecode7 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - PyObject * obj2 = 0 ; - PyObject * obj3 = 0 ; - PyObject * obj4 = 0 ; - PyObject * obj5 = 0 ; - uint8_t *result = 0 ; - - arg4 = &temp4; - if (!PyArg_ParseTuple(args,(char *)"OOOOOO:wrap_WebPEncodeLosslessBGRA",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5)) SWIG_fail; - { - // NB: with Python < 2.6 the old style buffer protocol may be used: - // Py_ssize_t unused; - // PyObject_AsReadBuffer(obj0, (const void**)(&arg1), &unused); - if (!PyObject_CheckBuffer(obj0)) { - SWIG_exception_fail(SWIG_TypeError, - "in method 'wrap_WebPEncodeLosslessBGRA', argument 1" - " does not support the buffer interface"); - } - if (PyObject_GetBuffer(obj0, &rgb_buffer1, PyBUF_SIMPLE)) { - SWIG_exception_fail(SWIG_RuntimeError, - "in method 'wrap_WebPEncodeLosslessBGRA', unable to get buffer view"); - } - arg1 = (uint8_t *)rgb_buffer1.buf; - } - if (!(SWIG_IsOK((res2 = SWIG_ConvertPtr(obj1,SWIG_as_voidptrptr(&arg2),SWIGTYPE_p_int,0))))) { - int val; - int ecode = SWIG_AsVal_int(obj1, &val); - if (!SWIG_IsOK(ecode)) { - SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "wrap_WebPEncodeLosslessBGRA" "', argument " "2"" of type '" "int""'"); - } - temp2 = (int)(val); - arg2 = &temp2; - res2 = SWIG_AddTmpMask(ecode); - } - if (!(SWIG_IsOK((res3 = SWIG_ConvertPtr(obj2,SWIG_as_voidptrptr(&arg3),SWIGTYPE_p_int,0))))) { - int val; - int ecode = SWIG_AsVal_int(obj2, &val); - if (!SWIG_IsOK(ecode)) { - SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "wrap_WebPEncodeLosslessBGRA" "', argument " "3"" of type '" "int""'"); - } - temp3 = (int)(val); - arg3 = &temp3; - res3 = SWIG_AddTmpMask(ecode); - } - ecode5 = SWIG_AsVal_int(obj3, &val5); - if (!SWIG_IsOK(ecode5)) { - SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "wrap_WebPEncodeLosslessBGRA" "', argument " "5"" of type '" "int""'"); - } - arg5 = (int)(val5); - ecode6 = SWIG_AsVal_int(obj4, &val6); - if (!SWIG_IsOK(ecode6)) { - SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "wrap_WebPEncodeLosslessBGRA" "', argument " "6"" of type '" "int""'"); - } - arg6 = (int)(val6); - ecode7 = SWIG_AsVal_int(obj5, &val7); - if (!SWIG_IsOK(ecode7)) { - SWIG_exception_fail(SWIG_ArgError(ecode7), "in method '" "wrap_WebPEncodeLosslessBGRA" "', argument " "7"" of type '" "int""'"); - } - arg7 = (int)(val7); - result = (uint8_t *)wrap_WebPEncodeLosslessBGRA((uint8_t const *)arg1,arg2,arg3,arg4,arg5,arg6,arg7); - { - resultobj = PyString_FromStringAndSize( - (const char*)result, - (result == NULL) ? 0 : ReturnedBufferSize("wrap_WebPEncodeLosslessBGRA", arg3, arg4)); - } - if (SWIG_IsTmpObj(res4)) { - resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_int((*arg4))); - } else { - int new_flags = SWIG_IsNewObj(res4) ? (SWIG_POINTER_OWN | 0 ) : 0 ; - resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg4), SWIGTYPE_p_int, new_flags)); - } - { - PyBuffer_Release(&rgb_buffer1); - } - if (SWIG_IsNewObj(res2)) free((char*)arg2); - if (SWIG_IsNewObj(res3)) free((char*)arg3); - free(result); - return resultobj; -fail: - { - PyBuffer_Release(&rgb_buffer1); - } - if (SWIG_IsNewObj(res2)) free((char*)arg2); - if (SWIG_IsNewObj(res3)) free((char*)arg3); - return NULL; -} - - -static PyMethodDef SwigMethods[] = { - { "SWIG_PyInstanceMethod_New", SWIG_PyInstanceMethod_New, METH_O, NULL}, - { "WebPGetDecoderVersion", _wrap_WebPGetDecoderVersion, METH_VARARGS, (char *)"WebPGetDecoderVersion() -> int"}, - { "WebPGetInfo", _wrap_WebPGetInfo, METH_VARARGS, (char *)"WebPGetInfo(uint8_t data) -> (width, height)"}, - { "WebPDecodeRGB", _wrap_WebPDecodeRGB, METH_VARARGS, (char *)"WebPDecodeRGB(uint8_t data) -> (rgb, width, height)"}, - { "WebPDecodeRGBA", _wrap_WebPDecodeRGBA, METH_VARARGS, (char *)"WebPDecodeRGBA(uint8_t data) -> (rgb, width, height)"}, - { "WebPDecodeARGB", _wrap_WebPDecodeARGB, METH_VARARGS, (char *)"WebPDecodeARGB(uint8_t data) -> (rgb, width, height)"}, - { "WebPDecodeBGR", _wrap_WebPDecodeBGR, METH_VARARGS, (char *)"WebPDecodeBGR(uint8_t data) -> (rgb, width, height)"}, - { "WebPDecodeBGRA", _wrap_WebPDecodeBGRA, METH_VARARGS, (char *)"WebPDecodeBGRA(uint8_t data) -> (rgb, width, height)"}, - { "WebPGetEncoderVersion", _wrap_WebPGetEncoderVersion, METH_VARARGS, (char *)"WebPGetEncoderVersion() -> int"}, - { "wrap_WebPEncodeRGB", _wrap_wrap_WebPEncodeRGB, METH_VARARGS, (char *)"private, do not call directly."}, - { "wrap_WebPEncodeBGR", _wrap_wrap_WebPEncodeBGR, METH_VARARGS, (char *)"private, do not call directly."}, - { "wrap_WebPEncodeRGBA", _wrap_wrap_WebPEncodeRGBA, METH_VARARGS, (char *)"private, do not call directly."}, - { "wrap_WebPEncodeBGRA", _wrap_wrap_WebPEncodeBGRA, METH_VARARGS, (char *)"private, do not call directly."}, - { "wrap_WebPEncodeLosslessRGB", _wrap_wrap_WebPEncodeLosslessRGB, METH_VARARGS, (char *)"private, do not call directly."}, - { "wrap_WebPEncodeLosslessBGR", _wrap_wrap_WebPEncodeLosslessBGR, METH_VARARGS, (char *)"private, do not call directly."}, - { "wrap_WebPEncodeLosslessRGBA", _wrap_wrap_WebPEncodeLosslessRGBA, METH_VARARGS, (char *)"private, do not call directly."}, - { "wrap_WebPEncodeLosslessBGRA", _wrap_wrap_WebPEncodeLosslessBGRA, METH_VARARGS, (char *)"private, do not call directly."}, - { NULL, NULL, 0, NULL } -}; - - -/* -------- TYPE CONVERSION AND EQUIVALENCE RULES (BEGIN) -------- */ - -static swig_type_info _swigt__p_char = {"_p_char", "char *", 0, 0, (void*)0, 0}; -static swig_type_info _swigt__p_int = {"_p_int", "int *", 0, 0, (void*)0, 0}; -static swig_type_info _swigt__p_uint8_t = {"_p_uint8_t", "uint8_t *", 0, 0, (void*)0, 0}; - -static swig_type_info *swig_type_initial[] = { - &_swigt__p_char, - &_swigt__p_int, - &_swigt__p_uint8_t, -}; - -static swig_cast_info _swigc__p_char[] = { {&_swigt__p_char, 0, 0, 0},{0, 0, 0, 0}}; -static swig_cast_info _swigc__p_int[] = { {&_swigt__p_int, 0, 0, 0},{0, 0, 0, 0}}; -static swig_cast_info _swigc__p_uint8_t[] = { {&_swigt__p_uint8_t, 0, 0, 0},{0, 0, 0, 0}}; - -static swig_cast_info *swig_cast_initial[] = { - _swigc__p_char, - _swigc__p_int, - _swigc__p_uint8_t, -}; - - -/* -------- TYPE CONVERSION AND EQUIVALENCE RULES (END) -------- */ - -static swig_const_info swig_const_table[] = { -{0, 0, 0, 0.0, 0, 0}}; - -#ifdef __cplusplus -} -#endif -/* ----------------------------------------------------------------------------- - * Type initialization: - * This problem is tough by the requirement that no dynamic - * memory is used. Also, since swig_type_info structures store pointers to - * swig_cast_info structures and swig_cast_info structures store pointers back - * to swig_type_info structures, we need some lookup code at initialization. - * The idea is that swig generates all the structures that are needed. - * The runtime then collects these partially filled structures. - * The SWIG_InitializeModule function takes these initial arrays out of - * swig_module, and does all the lookup, filling in the swig_module.types - * array with the correct data and linking the correct swig_cast_info - * structures together. - * - * The generated swig_type_info structures are assigned statically to an initial - * array. We just loop through that array, and handle each type individually. - * First we lookup if this type has been already loaded, and if so, use the - * loaded structure instead of the generated one. Then we have to fill in the - * cast linked list. The cast data is initially stored in something like a - * two-dimensional array. Each row corresponds to a type (there are the same - * number of rows as there are in the swig_type_initial array). Each entry in - * a column is one of the swig_cast_info structures for that type. - * The cast_initial array is actually an array of arrays, because each row has - * a variable number of columns. So to actually build the cast linked list, - * we find the array of casts associated with the type, and loop through it - * adding the casts to the list. The one last trick we need to do is making - * sure the type pointer in the swig_cast_info struct is correct. - * - * First off, we lookup the cast->type name to see if it is already loaded. - * There are three cases to handle: - * 1) If the cast->type has already been loaded AND the type we are adding - * casting info to has not been loaded (it is in this module), THEN we - * replace the cast->type pointer with the type pointer that has already - * been loaded. - * 2) If BOTH types (the one we are adding casting info to, and the - * cast->type) are loaded, THEN the cast info has already been loaded by - * the previous module so we just ignore it. - * 3) Finally, if cast->type has not already been loaded, then we add that - * swig_cast_info to the linked list (because the cast->type) pointer will - * be correct. - * ----------------------------------------------------------------------------- */ - -#ifdef __cplusplus -extern "C" { -#if 0 -} /* c-mode */ -#endif -#endif - -#if 0 -#define SWIGRUNTIME_DEBUG -#endif - - -SWIGRUNTIME void -SWIG_InitializeModule(void *clientdata) { - size_t i; - swig_module_info *module_head, *iter; - int init; - - /* check to see if the circular list has been setup, if not, set it up */ - if (swig_module.next==0) { - /* Initialize the swig_module */ - swig_module.type_initial = swig_type_initial; - swig_module.cast_initial = swig_cast_initial; - swig_module.next = &swig_module; - init = 1; - } else { - init = 0; - } - - /* Try and load any already created modules */ - module_head = SWIG_GetModule(clientdata); - if (!module_head) { - /* This is the first module loaded for this interpreter */ - /* so set the swig module into the interpreter */ - SWIG_SetModule(clientdata, &swig_module); - } else { - /* the interpreter has loaded a SWIG module, but has it loaded this one? */ - iter=module_head; - do { - if (iter==&swig_module) { - /* Our module is already in the list, so there's nothing more to do. */ - return; - } - iter=iter->next; - } while (iter!= module_head); - - /* otherwise we must add our module into the list */ - swig_module.next = module_head->next; - module_head->next = &swig_module; - } - - /* When multiple interpreters are used, a module could have already been initialized in - a different interpreter, but not yet have a pointer in this interpreter. - In this case, we do not want to continue adding types... everything should be - set up already */ - if (init == 0) return; - - /* Now work on filling in swig_module.types */ -#ifdef SWIGRUNTIME_DEBUG - printf("SWIG_InitializeModule: size %d\n", swig_module.size); -#endif - for (i = 0; i < swig_module.size; ++i) { - swig_type_info *type = 0; - swig_type_info *ret; - swig_cast_info *cast; - -#ifdef SWIGRUNTIME_DEBUG - printf("SWIG_InitializeModule: type %d %s\n", i, swig_module.type_initial[i]->name); -#endif - - /* if there is another module already loaded */ - if (swig_module.next != &swig_module) { - type = SWIG_MangledTypeQueryModule(swig_module.next, &swig_module, swig_module.type_initial[i]->name); - } - if (type) { - /* Overwrite clientdata field */ -#ifdef SWIGRUNTIME_DEBUG - printf("SWIG_InitializeModule: found type %s\n", type->name); -#endif - if (swig_module.type_initial[i]->clientdata) { - type->clientdata = swig_module.type_initial[i]->clientdata; -#ifdef SWIGRUNTIME_DEBUG - printf("SWIG_InitializeModule: found and overwrite type %s \n", type->name); -#endif - } - } else { - type = swig_module.type_initial[i]; - } - - /* Insert casting types */ - cast = swig_module.cast_initial[i]; - while (cast->type) { - /* Don't need to add information already in the list */ - ret = 0; -#ifdef SWIGRUNTIME_DEBUG - printf("SWIG_InitializeModule: look cast %s\n", cast->type->name); -#endif - if (swig_module.next != &swig_module) { - ret = SWIG_MangledTypeQueryModule(swig_module.next, &swig_module, cast->type->name); -#ifdef SWIGRUNTIME_DEBUG - if (ret) printf("SWIG_InitializeModule: found cast %s\n", ret->name); -#endif - } - if (ret) { - if (type == swig_module.type_initial[i]) { -#ifdef SWIGRUNTIME_DEBUG - printf("SWIG_InitializeModule: skip old type %s\n", ret->name); -#endif - cast->type = ret; - ret = 0; - } else { - /* Check for casting already in the list */ - swig_cast_info *ocast = SWIG_TypeCheck(ret->name, type); -#ifdef SWIGRUNTIME_DEBUG - if (ocast) printf("SWIG_InitializeModule: skip old cast %s\n", ret->name); -#endif - if (!ocast) ret = 0; - } - } - - if (!ret) { -#ifdef SWIGRUNTIME_DEBUG - printf("SWIG_InitializeModule: adding cast %s\n", cast->type->name); -#endif - if (type->cast) { - type->cast->prev = cast; - cast->next = type->cast; - } - type->cast = cast; - } - cast++; - } - /* Set entry in modules->types array equal to the type */ - swig_module.types[i] = type; - } - swig_module.types[i] = 0; - -#ifdef SWIGRUNTIME_DEBUG - printf("**** SWIG_InitializeModule: Cast List ******\n"); - for (i = 0; i < swig_module.size; ++i) { - int j = 0; - swig_cast_info *cast = swig_module.cast_initial[i]; - printf("SWIG_InitializeModule: type %d %s\n", i, swig_module.type_initial[i]->name); - while (cast->type) { - printf("SWIG_InitializeModule: cast type %s\n", cast->type->name); - cast++; - ++j; - } - printf("---- Total casts: %d\n",j); - } - printf("**** SWIG_InitializeModule: Cast List ******\n"); -#endif -} - -/* This function will propagate the clientdata field of type to -* any new swig_type_info structures that have been added into the list -* of equivalent types. It is like calling -* SWIG_TypeClientData(type, clientdata) a second time. -*/ -SWIGRUNTIME void -SWIG_PropagateClientData(void) { - size_t i; - swig_cast_info *equiv; - static int init_run = 0; - - if (init_run) return; - init_run = 1; - - for (i = 0; i < swig_module.size; i++) { - if (swig_module.types[i]->clientdata) { - equiv = swig_module.types[i]->cast; - while (equiv) { - if (!equiv->converter) { - if (equiv->type && !equiv->type->clientdata) - SWIG_TypeClientData(equiv->type, swig_module.types[i]->clientdata); - } - equiv = equiv->next; - } - } - } -} - -#ifdef __cplusplus -#if 0 -{ - /* c-mode */ -#endif -} -#endif - - - -#ifdef __cplusplus -extern "C" { -#endif - - /* Python-specific SWIG API */ -#define SWIG_newvarlink() SWIG_Python_newvarlink() -#define SWIG_addvarlink(p, name, get_attr, set_attr) SWIG_Python_addvarlink(p, name, get_attr, set_attr) -#define SWIG_InstallConstants(d, constants) SWIG_Python_InstallConstants(d, constants) - - /* ----------------------------------------------------------------------------- - * global variable support code. - * ----------------------------------------------------------------------------- */ - - typedef struct swig_globalvar { - char *name; /* Name of global variable */ - PyObject *(*get_attr)(void); /* Return the current value */ - int (*set_attr)(PyObject *); /* Set the value */ - struct swig_globalvar *next; - } swig_globalvar; - - typedef struct swig_varlinkobject { - PyObject_HEAD - swig_globalvar *vars; - } swig_varlinkobject; - - SWIGINTERN PyObject * - swig_varlink_repr(swig_varlinkobject *SWIGUNUSEDPARM(v)) { -#if PY_VERSION_HEX >= 0x03000000 - return PyUnicode_InternFromString(""); -#else - return PyString_FromString(""); -#endif - } - - SWIGINTERN PyObject * - swig_varlink_str(swig_varlinkobject *v) { -#if PY_VERSION_HEX >= 0x03000000 - PyObject *str = PyUnicode_InternFromString("("); - PyObject *tail; - PyObject *joined; - swig_globalvar *var; - for (var = v->vars; var; var=var->next) { - tail = PyUnicode_FromString(var->name); - joined = PyUnicode_Concat(str, tail); - Py_DecRef(str); - Py_DecRef(tail); - str = joined; - if (var->next) { - tail = PyUnicode_InternFromString(", "); - joined = PyUnicode_Concat(str, tail); - Py_DecRef(str); - Py_DecRef(tail); - str = joined; - } - } - tail = PyUnicode_InternFromString(")"); - joined = PyUnicode_Concat(str, tail); - Py_DecRef(str); - Py_DecRef(tail); - str = joined; -#else - PyObject *str = PyString_FromString("("); - swig_globalvar *var; - for (var = v->vars; var; var=var->next) { - PyString_ConcatAndDel(&str,PyString_FromString(var->name)); - if (var->next) PyString_ConcatAndDel(&str,PyString_FromString(", ")); - } - PyString_ConcatAndDel(&str,PyString_FromString(")")); -#endif - return str; - } - - SWIGINTERN int - swig_varlink_print(swig_varlinkobject *v, FILE *fp, int SWIGUNUSEDPARM(flags)) { - char *tmp; - PyObject *str = swig_varlink_str(v); - fprintf(fp,"Swig global variables "); - fprintf(fp,"%s\n", tmp = SWIG_Python_str_AsChar(str)); - SWIG_Python_str_DelForPy3(tmp); - Py_DECREF(str); - return 0; - } - - SWIGINTERN void - swig_varlink_dealloc(swig_varlinkobject *v) { - swig_globalvar *var = v->vars; - while (var) { - swig_globalvar *n = var->next; - free(var->name); - free(var); - var = n; - } - } - - SWIGINTERN PyObject * - swig_varlink_getattr(swig_varlinkobject *v, char *n) { - PyObject *res = NULL; - swig_globalvar *var = v->vars; - while (var) { - if (strcmp(var->name,n) == 0) { - res = (*var->get_attr)(); - break; - } - var = var->next; - } - if (res == NULL && !PyErr_Occurred()) { - PyErr_Format(PyExc_AttributeError, "Unknown C global variable '%s'", n); - } - return res; - } - - SWIGINTERN int - swig_varlink_setattr(swig_varlinkobject *v, char *n, PyObject *p) { - int res = 1; - swig_globalvar *var = v->vars; - while (var) { - if (strcmp(var->name,n) == 0) { - res = (*var->set_attr)(p); - break; - } - var = var->next; - } - if (res == 1 && !PyErr_Occurred()) { - PyErr_Format(PyExc_AttributeError, "Unknown C global variable '%s'", n); - } - return res; - } - - SWIGINTERN PyTypeObject* - swig_varlink_type(void) { - static char varlink__doc__[] = "Swig var link object"; - static PyTypeObject varlink_type; - static int type_init = 0; - if (!type_init) { - const PyTypeObject tmp = { -#if PY_VERSION_HEX >= 0x03000000 - PyVarObject_HEAD_INIT(NULL, 0) -#else - PyObject_HEAD_INIT(NULL) - 0, /* ob_size */ -#endif - (char *)"swigvarlink", /* tp_name */ - sizeof(swig_varlinkobject), /* tp_basicsize */ - 0, /* tp_itemsize */ - (destructor) swig_varlink_dealloc, /* tp_dealloc */ - (printfunc) swig_varlink_print, /* tp_print */ - (getattrfunc) swig_varlink_getattr, /* tp_getattr */ - (setattrfunc) swig_varlink_setattr, /* tp_setattr */ - 0, /* tp_compare */ - (reprfunc) swig_varlink_repr, /* tp_repr */ - 0, /* tp_as_number */ - 0, /* tp_as_sequence */ - 0, /* tp_as_mapping */ - 0, /* tp_hash */ - 0, /* tp_call */ - (reprfunc) swig_varlink_str, /* tp_str */ - 0, /* tp_getattro */ - 0, /* tp_setattro */ - 0, /* tp_as_buffer */ - 0, /* tp_flags */ - varlink__doc__, /* tp_doc */ - 0, /* tp_traverse */ - 0, /* tp_clear */ - 0, /* tp_richcompare */ - 0, /* tp_weaklistoffset */ -#if PY_VERSION_HEX >= 0x02020000 - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* tp_iter -> tp_weaklist */ -#endif -#if PY_VERSION_HEX >= 0x02030000 - 0, /* tp_del */ -#endif -#if PY_VERSION_HEX >= 0x02060000 - 0, /* tp_version_tag */ -#endif -#if PY_VERSION_HEX >= 0x03040000 - 0, /* tp_finalize */ -#endif -#ifdef COUNT_ALLOCS - 0, /* tp_allocs */ - 0, /* tp_frees */ - 0, /* tp_maxalloc */ -#if PY_VERSION_HEX >= 0x02050000 - 0, /* tp_prev */ -#endif - 0 /* tp_next */ -#endif - }; - varlink_type = tmp; - type_init = 1; -#if PY_VERSION_HEX < 0x02020000 - varlink_type.ob_type = &PyType_Type; -#else - if (PyType_Ready(&varlink_type) < 0) - return NULL; -#endif - } - return &varlink_type; - } - - /* Create a variable linking object for use later */ - SWIGINTERN PyObject * - SWIG_Python_newvarlink(void) { - swig_varlinkobject *result = PyObject_NEW(swig_varlinkobject, swig_varlink_type()); - if (result) { - result->vars = 0; - } - return ((PyObject*) result); - } - - SWIGINTERN void - SWIG_Python_addvarlink(PyObject *p, char *name, PyObject *(*get_attr)(void), int (*set_attr)(PyObject *p)) { - swig_varlinkobject *v = (swig_varlinkobject *) p; - swig_globalvar *gv = (swig_globalvar *) malloc(sizeof(swig_globalvar)); - if (gv) { - size_t size = strlen(name)+1; - gv->name = (char *)malloc(size); - if (gv->name) { - strncpy(gv->name,name,size); - gv->get_attr = get_attr; - gv->set_attr = set_attr; - gv->next = v->vars; - } - } - v->vars = gv; - } - - SWIGINTERN PyObject * - SWIG_globals(void) { - static PyObject *_SWIG_globals = 0; - if (!_SWIG_globals) _SWIG_globals = SWIG_newvarlink(); - return _SWIG_globals; - } - - /* ----------------------------------------------------------------------------- - * constants/methods manipulation - * ----------------------------------------------------------------------------- */ - - /* Install Constants */ - SWIGINTERN void - SWIG_Python_InstallConstants(PyObject *d, swig_const_info constants[]) { - PyObject *obj = 0; - size_t i; - for (i = 0; constants[i].type; ++i) { - switch(constants[i].type) { - case SWIG_PY_POINTER: - obj = SWIG_InternalNewPointerObj(constants[i].pvalue, *(constants[i]).ptype,0); - break; - case SWIG_PY_BINARY: - obj = SWIG_NewPackedObj(constants[i].pvalue, constants[i].lvalue, *(constants[i].ptype)); - break; - default: - obj = 0; - break; - } - if (obj) { - PyDict_SetItemString(d, constants[i].name, obj); - Py_DECREF(obj); - } - } - } - - /* -----------------------------------------------------------------------------*/ - /* Fix SwigMethods to carry the callback ptrs when needed */ - /* -----------------------------------------------------------------------------*/ - - SWIGINTERN void - SWIG_Python_FixMethods(PyMethodDef *methods, - swig_const_info *const_table, - swig_type_info **types, - swig_type_info **types_initial) { - size_t i; - for (i = 0; methods[i].ml_name; ++i) { - const char *c = methods[i].ml_doc; - if (!c) continue; - c = strstr(c, "swig_ptr: "); - if (c) { - int j; - swig_const_info *ci = 0; - const char *name = c + 10; - for (j = 0; const_table[j].type; ++j) { - if (strncmp(const_table[j].name, name, - strlen(const_table[j].name)) == 0) { - ci = &(const_table[j]); - break; - } - } - if (ci) { - void *ptr = (ci->type == SWIG_PY_POINTER) ? ci->pvalue : 0; - if (ptr) { - size_t shift = (ci->ptype) - types; - swig_type_info *ty = types_initial[shift]; - size_t ldoc = (c - methods[i].ml_doc); - size_t lptr = strlen(ty->name)+2*sizeof(void*)+2; - char *ndoc = (char*)malloc(ldoc + lptr + 10); - if (ndoc) { - char *buff = ndoc; - memcpy(buff, methods[i].ml_doc, ldoc); - buff += ldoc; - memcpy(buff, "swig_ptr: ", 10); - buff += 10; - SWIG_PackVoidPtr(buff, ptr, ty->name, lptr); - methods[i].ml_doc = ndoc; - } - } - } - } - } - } - -#ifdef __cplusplus -} -#endif - -/* -----------------------------------------------------------------------------* - * Partial Init method - * -----------------------------------------------------------------------------*/ - -#ifdef __cplusplus -extern "C" -#endif - -SWIGEXPORT -#if PY_VERSION_HEX >= 0x03000000 -PyObject* -#else -void -#endif -SWIG_init(void) { - PyObject *m, *d, *md; -#if PY_VERSION_HEX >= 0x03000000 - static struct PyModuleDef SWIG_module = { -# if PY_VERSION_HEX >= 0x03020000 - PyModuleDef_HEAD_INIT, -# else - { - PyObject_HEAD_INIT(NULL) - NULL, /* m_init */ - 0, /* m_index */ - NULL, /* m_copy */ - }, -# endif - (char *) SWIG_name, - NULL, - -1, - SwigMethods, - NULL, - NULL, - NULL, - NULL - }; -#endif - -#if defined(SWIGPYTHON_BUILTIN) - static SwigPyClientData SwigPyObject_clientdata = { - 0, 0, 0, 0, 0, 0, 0 - }; - static PyGetSetDef this_getset_def = { - (char *)"this", &SwigPyBuiltin_ThisClosure, NULL, NULL, NULL - }; - static SwigPyGetSet thisown_getset_closure = { - SwigPyObject_own, - SwigPyObject_own - }; - static PyGetSetDef thisown_getset_def = { - (char *)"thisown", SwigPyBuiltin_GetterClosure, SwigPyBuiltin_SetterClosure, NULL, &thisown_getset_closure - }; - PyTypeObject *builtin_pytype; - int builtin_base_count; - swig_type_info *builtin_basetype; - PyObject *tuple; - PyGetSetDescrObject *static_getset; - PyTypeObject *metatype; - PyTypeObject *swigpyobject; - SwigPyClientData *cd; - PyObject *public_interface, *public_symbol; - PyObject *this_descr; - PyObject *thisown_descr; - PyObject *self = 0; - int i; - - (void)builtin_pytype; - (void)builtin_base_count; - (void)builtin_basetype; - (void)tuple; - (void)static_getset; - (void)self; - - /* Metaclass is used to implement static member variables */ - metatype = SwigPyObjectType(); - assert(metatype); -#endif - - /* Fix SwigMethods to carry the callback ptrs when needed */ - SWIG_Python_FixMethods(SwigMethods, swig_const_table, swig_types, swig_type_initial); - -#if PY_VERSION_HEX >= 0x03000000 - m = PyModule_Create(&SWIG_module); -#else - m = Py_InitModule((char *) SWIG_name, SwigMethods); -#endif - - md = d = PyModule_GetDict(m); - (void)md; - - SWIG_InitializeModule(0); - -#ifdef SWIGPYTHON_BUILTIN - swigpyobject = SwigPyObject_TypeOnce(); - - SwigPyObject_stype = SWIG_MangledTypeQuery("_p_SwigPyObject"); - assert(SwigPyObject_stype); - cd = (SwigPyClientData*) SwigPyObject_stype->clientdata; - if (!cd) { - SwigPyObject_stype->clientdata = &SwigPyObject_clientdata; - SwigPyObject_clientdata.pytype = swigpyobject; - } else if (swigpyobject->tp_basicsize != cd->pytype->tp_basicsize) { - PyErr_SetString(PyExc_RuntimeError, "Import error: attempted to load two incompatible swig-generated modules."); -# if PY_VERSION_HEX >= 0x03000000 - return NULL; -# else - return; -# endif - } - - /* All objects have a 'this' attribute */ - this_descr = PyDescr_NewGetSet(SwigPyObject_type(), &this_getset_def); - (void)this_descr; - - /* All objects have a 'thisown' attribute */ - thisown_descr = PyDescr_NewGetSet(SwigPyObject_type(), &thisown_getset_def); - (void)thisown_descr; - - public_interface = PyList_New(0); - public_symbol = 0; - (void)public_symbol; - - PyDict_SetItemString(md, "__all__", public_interface); - Py_DECREF(public_interface); - for (i = 0; SwigMethods[i].ml_name != NULL; ++i) - SwigPyBuiltin_AddPublicSymbol(public_interface, SwigMethods[i].ml_name); - for (i = 0; swig_const_table[i].name != 0; ++i) - SwigPyBuiltin_AddPublicSymbol(public_interface, swig_const_table[i].name); -#endif - - SWIG_InstallConstants(d,swig_const_table); - -#if PY_VERSION_HEX >= 0x03000000 - return m; -#else - return; -#endif -} - diff --git a/Extended/libwebp/swig/setup.py b/Extended/libwebp/swig/setup.py deleted file mode 100644 index 3a3bfe1..0000000 --- a/Extended/libwebp/swig/setup.py +++ /dev/null @@ -1,40 +0,0 @@ -#!/usr/bin/python - -"""distutils script for libwebp python module.""" - -from distutils.core import setup -from distutils.extension import Extension -import os -import shutil -import tempfile - -tmpdir = tempfile.mkdtemp() -package = "com.google.webp" -package_path = os.path.join(tmpdir, *package.split(".")) -os.makedirs(package_path) - -# Create __init_.py files along the package path. -initpy_path = tmpdir -for d in package.split("."): - initpy_path = os.path.join(initpy_path, d) - open(os.path.join(initpy_path, "__init__.py"), "w").close() - -shutil.copy2("libwebp.py", package_path) -setup(name="libwebp", - version="0.0", - description="libwebp python wrapper", - long_description="Provides access to 'simple' libwebp decode interface", - license="BSD", - url="http://developers.google.com/speed/webp", - ext_package=package, - ext_modules=[Extension("_libwebp", - ["libwebp_python_wrap.c"], - libraries=["webp"], - ), - ], - package_dir={"": tmpdir}, - packages=["com", "com.google", "com.google.webp"], - py_modules=[package + ".libwebp"], - ) - -shutil.rmtree(tmpdir) diff --git a/Extended/libwebp/webp_js/index.html b/Extended/libwebp/webp_js/index.html deleted file mode 100644 index 10873a9..0000000 --- a/Extended/libwebp/webp_js/index.html +++ /dev/null @@ -1,75 +0,0 @@ - - - - - - simple Javascript WebP decoding demo - - - - - - -

- WebP in JavaScript demo - -

-
-

- -

-

Timing: N/A

- Your browser does not support canvas - - - diff --git a/Extended/libwebp/webp_js/index_wasm.html b/Extended/libwebp/webp_js/index_wasm.html deleted file mode 100644 index b77c22c..0000000 --- a/Extended/libwebp/webp_js/index_wasm.html +++ /dev/null @@ -1,90 +0,0 @@ - - - - - - simple Javascript WebP decoding demo, using Web-Assembly (WASM) - - - - - -

- WebP demo using Web-Assembly - -

-

- WASM version of the WebP decoder, using libwebp compiled with - Emscripten. -

-

- -

-

Timing: N/A

- Your browser does not support canvas - - diff --git a/Extended/libwebp/webp_js/test_webp_js.webp b/Extended/libwebp/webp_js/test_webp_js.webp deleted file mode 100644 index f798f5563e4fa21e8784067ed1a0cd5d81239c3b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1321542 zcmX`ScUTkM7cD#qA%p-Ds-Xx0LI5|kh$h{V_WdWM_m4DwAZwwA8u9s>)ZVh=zM3Qvn(eyeTRUmz-EFd5G6<^e`gTC! zMA%(t`9%f96En}Q=ZL$4e}nnXJKp`M{0~O*F93-cwW|8*q2*u19q9DJf17^17wxo#y9X_;2ihrrYYYxC zDnAxCq}5N7K3-nPG`3$9PimV5HM?)T9~+TuSk^PA!_?KDJ@>uKcUhbu`tD#yV*Xz7 zT~|5hTcU*T#X5L;1G4siecQff568?rr_rsf2YC0({0&J_K0Hu5#hdpB(v>hi+E}Y5 zF`QQxTSlDdA&IxZ|Kh_Sbo0`3X=gP9RQg4p<^r>%lrDkU+ECpKsyiy_jv}ZS}fP_OXs}mYj=Yto@N$p4OQk z;F6!ERyM6tk%2ZJd*FRv^FYgkQw@;}k*|qFbu^0k8|0I>W$}>ajK3~vKn$4JvS=LO z3e@tP#oXs4ij#VoaqlWyTZBt~p4A_;sF>(4aD7_N-WfTTS!_^=A2n68^lCilL+_V1 zA5CQLM?Tvv;{w1zVd4sDpb9tT@y~8z+T$)y=PA#0* zSRAv?V0EFspP6v5RVM6qzqPDvUTgBbO3nE}z8ZRaYvoa}tyH%4z4yX>;B;Nze49^&1BhRF}3&?GreMJ zQn?wA1Nf7z=NoV)Ll@TxKb}~PXnfEvp@oN74YUP?M}1kSRGVzT&F$Z6?OCrQ`+(3< z{g9}mT4Zqk>-sv!^PUbY9~+MzOhP-%u=p+CCGCHtrvg?MO>zD^ZnDdFM{3Hk-lyV( zHR!U3^7H(po3kJP&_As(<1Tf~Hkg_+j?*an{I(4oBU4&XUl7FX4I6#pZBS|3=SS)}a00hdoDH!B=}OEYE-TyftYkm(6M4{o?TC zzt)4re{oJKQQl4NOY6608I&5%lMw8uLDLPLl{(GkW&mI&;)txx7b{IP~ z>pK`-6;6`Kuq4cy`R+)!oe3tqz1uF5Q?az}vvXQ$>QJ(pd!{w(vS0s%KgID;VDOKq z+?B?*vxSY<9l8s9<*m0o>(z(3@8o{CmjE)~88!3UUTMlbIO+!aWB@D`7+*37bfPc_ zh>gP|3PMOxQHll;SccMPE2N+32WjVbi{M8&{WN`Zxhy7quL_gGQ-f4ehV zk&_dI->4HnOn}4gukmev`zIrg*sHAy$biWpr}ZX29?r>Wa^uoob)29?EB}{ zStBMi(G>f$OvuY*@NHVjy^$NrAB<8?R+>@OC z#&#cupI@)m*F(6w#G*qSa~v@x=>1F`M0kX}d0S6|l!3OfvA77cgsI_-#M0`)x>|$Kk}u>;18Paq+To!g&CfCo?1;d#;lP;)=5*DMd(yG>Ghj-=a?mM*gyc}+Myr(8rX^J?@%TX{g)TU#a?K_tUQ?U6)f7PEJ?Lnw;3iV7mv15%aG zN5LL^T?bg~7y)>GCqzqo5V=M0N7Ca)E6q9bXO#Gq!nx|43~HJ6_0*f)OE#mPukPD8 z7!X-8W8%@03}Jb`PYvhHg~Zb!cdeL07`z*js6t{0tp)^wLaLJFzmWDER2 z@r2sAO2Swa-=NbFcrrr)_?e^?=`C7e&3aRZj5stgxZZ0W_)q+7KqvpF#-BF^@yjN4 z7UV#(5Mv)Ztz+dgH4OwKdFc!teF(qpQj0R3oQ<`}Q>|BkT&eG`-cmiMVf&<{By{KU z#1an^2_{b%1*ifNOJNf6vSaNzTDRUCD{5#tReztE$WyA&FZn%bp~9b1Ghpcw{;}D8 z*!f^6MM3lnAi!lYZD^b)fopMXtg^1(VaR<|2zs5eV2u`g6Ryt0l=(^t@s^B(gQK`~ zuI_VzQf#D<0DV^|D2!a2FGbxS=RnxVac1n_Kxw&-rN4KmH>S|$gQ(j-)z0FPR!v;1 zw-k&!&J6l;zCITfh-iW&4WvGP8mW%PD&ebY>2P*r>`*nGlJ`nxs0y=pW2Yr?6obVr zZNt$*xGtn+Z{HjmhQ-Up4RY}-^6IGf+a5ft>&1KAY)viCuTjf=yEwT zA$vvX9BFPtg{oX&51qAH6A>ALRY3Xla0N5cVJLpmR|p7(0m!n~wzhLDefW!1&B=~C zKRnu)CmG$$qh*4*!}Rbd8Z*T-G;bMpf+2529=+XvZqsgd>$az&FmdedBvfx5?I&hPS3oP=nM zLR~5x=dKX}Zkcoh*>R4J=^4NT)GBEsO4$oc?i85DwafuLu@9LO5?uO^)NWVG-u0Z~ zG|jw}TD<4g_~?gY5H2D|d^a4+I1)t$|!{Hy)( zd+C$F-Qv4hm=YN?zkuHtM?D{&`M9l&Y8ZH=w<`sj&F)D3XJm!*fTv1C6cmirfAB0D z;l6Lx&EJW*V#6C3?2HMGUGIySa8_V2*F^wN&1j<_BT0C@pn zj=*Nwv&mH{Rw!_Xe>Sp<=cCxG(^1M8~^MLLN-;F*>(+B*Ly!!U}@+NV+d?}sR37-o& zlDfQ}tznmR`G`BGh`{yQb9yDZ_70@>m{zY8ske10>P1sJrBi%GTqnAiEv)Nnw^osErS5Jff~Pl4ok~zpn=Do&VCt^Aj+Vo8shO$iQzI?8L9^DD ze*-F0W^YT)!4G93OTCctq(qurfd=~fc`ZT+a5j=VYka1Cx1tHxx#Q?Ru z4m+CIbscecqU%GlLJ>7pw%Bw5xK1&=b|5Y_mC=j1NWUz-NMEqtnETY+QR7HszuCR< zo|KB-e$j&A;+WF&-(QpCxaw&C#Gz?nt|-VFabXIYRHpD&f=1i1L@9qVpA7Zy$rmUid!9pmWc?i}$Dh% z*5+B(%Z0%DR?}LKsrnYb{ey<9rBC$7R*{yTDLN&O>Z=_@9Jpx8rW|qgn{aI>?&hj5 z6FN=~_F<96MK_mD*|cYIm-FntrDP2!zvpLtjf$Hn(s$rzR4+2d5!YEpVIWYjHXpI^ z0t5NMB4vErYjlNvS%ksp54Da3rug1D{T_Yro2bt9;i`$?+Q&75ioKAD`kB2`6ZTNP5ZZCr@AEy+X&Oa{(6O(3mIo4(h5GC4 z=!j>?xzj}zeW0uq-Yk1TwGFAE#d2Q0cO105-0=-9ZT015bjD;!Z7V7hG86vE*gB>H zBO?GB5QUL>dmqZp8S7KoDvMS=qTewX*8b!z-x#gxedvZ^Rm3+xNosB3qiQbYlYOZ< z3fMkSDadVY_UI$8PW4R6Y;7GS?0NT0xAso~_;ij^6Jy1e=D_zN|JBdv{hRMoF3}{V zT3Q;BIj~yep`BoFR5e(h+&D-*3HliGi^HzFzjZ_;x!Koc>Vh1xt?0VSeqUqtu<@j6 z{Mn&W3Tskk?JtkRaU*e2PIt6?j^O#|Qhn+22Q*pwz)0!HU#s9yIey>6(Gm7hfpfj~ zO|IZuOM;>vcFzAI&R3)-yKGbak6VUa!+rlcQD)`2Q8rcxE-tEGEycgS+mX(?r81H_ zU%i38r64TsEquRY&Tw=@bNZ8-Ti#c9>i!pMsRF4ieOE!w?_>X?>9b$lp$x#`zo{mp z)f9W#OKlHWsM7UJO~X1C`-y@rKI0W0!6?gjdys$c5W4o3H!Ry0^F(@jmNoSvVgg8S z>}vjJCs5#cV|Zj{D{dA5v|Wi8fByRV2M8Kgn#CCKTDEhIH*uM$)F3+Ak|}#z=BqDN6$A1Qi&&&)}ICWJiN}nx?6Cc`(-C_*yZ>2-+8s? zW~L0zyK>3s=?2`Q$nn5Tf0ol>Aj?zFV$BgG|QzdfaRSF0Q6>(d{E^%mSw%YN1qZ?OmObK4zbA{a!ERuzfu6lv6F4QjE0f@Zx9RD>aa#|`KfSn}Zv93;|5s$RPmUA$ zVRp?>BU&vLt=6E_Yk81lG~HN#`1bm`_sF;D(7m8gOaO(lLyrYwP*nXRiVLd)#7DNBR2B zgSXYAR?n_FWO~)AhnMx1b8%Pq7hk+9m-JQ3S#9k&H(WF}bE@2V5cTllCZ_6ft)A)? z73adU3s+fW*cE=*XZBs`yk=(X$3XQw>caqY{*gHq8e;&yC|5yJ%BgXchJOIG1<}5($ zVXZ8pAZ+02Eq;ul3=^|7YIu=8>(cIem3n^W<#M!d0u>#;$->Cy4-93o&B+X547XO6 z?_baZgY~#(Pj>d&zW@KR4?nbmGWIr$xDQo-<+@b?=Tj$ zj?ep7h;JkH($`HEou?c22Yz3Fe4}IH)Se)`ZET{WXq~aoVXF?~EyNBG>^cxqmJR_fU{Y$LMFx5T7XC*R*#zdN6C6f6oSZAgkwNcdO3W(ok)4U6`Ck)N0-mprtSZTh{a zqrNP!3W{3jx$~U!h+*z*B^K z@)f8v2;K;aEsn}n7+t{qU3>P-s;TWhn$I4dcbqFKPNUKuyfU)7yLm1m zYR5a=^~T=Wwv>xH=TCaXEX$Jm27WgRw==)NwZfY#}Pj zx`p`k#GMX%Lx_0~W`lDZ&SiUQumdtj#IOFr1W(A6usK+ILbE~LtxOHzO zh;Z&3=W5L(I&2?@3#zkwxZa8zuWK!H97;DTF<0(&k_~cRoekXaaiWl!YuI0CSeC3f zt)6*!-hK_zS>eBJM%7EAI%K2vpcWDW<7HjZK>xhZNSD~Xm%UR0*`K5xq>nFAPouIK^P8vx%1TSN?hA>CttV z-}gMS_ea8g=LhZj2DVKO#afGa-=4?w;x1SJi}CTja~di=QE$p2LV5U*BOmexc(%TX zi1tvq_-`!Jh>D6@c{~yIwv)3|^l55MFL^a^{3Ee{p+Rr40bNqxaTXZKmtNbdZ;ig4 zN&4;2>b#TKYBJg=89h%=6`P^*t>Qn?W7%VuRf1%r7&i#j*EWzz5VuK`<{Q>_}R*^6JuD% zi^WvjBCc@eGVN-K1heIqMMb98agG}LyI5=GjHWXzU}rD*=H@t}xVGFr%e)+hR*Oe3 zHWYO(ag??EkDd~aSjm`0`h1YV0A+UV>~7@{?EV*6{Ni<4!*T=5GJdcr?fw^w)G;cJ z25Z~?bqPZ8gPXFr?;qkauM09C+L{|xNF{XCDyAt~U(o@j(zw7JTluG#yPPH3F zStH19d%8<}b^Ykn{VoF+voli7{Y~6Y7U$8?l@X$tD5slKb}{kC-Cq48)IPF$CH#t0 zqsE5863!igVc2>$GBQ#|aIjkt!x6>b=|{&JU8b!b+5{k7+FS`KUU#4WPslAR>o^6D z1RikO6#0bykOK;qWc4iG2pCbZfpx99I{s*VJ-A8S8-IG;WMQ_kPgzT|!S;`k!ld%U^dF7D_@mEHTe(%l+Seq7|8!?1fH z|4T3Q4hU79=BucTTlIL8GgQ5GXMN|0lbocd!SjSho7WX3Df$i8sSZcJ&?ZI6W#BP*^H?Z=^4ZS86odkNU<`ob zgBBMTPgLgdVUc(uyd;1E=nCQG(5{+hT>y9wnCF3^Yd!(6NB|{?Q$Z0#jB0Cb?ZCio zYeb%eXgWZ_4T9t6smSp$EY>(<=Q`Bq|6+_}{ZHGoP(R#O53jtg#vdJDsa$gg5BqC& ze!Y_jAP9vf`>$W0IJb!kE2s6!kz)#yb4uaEC|Wut8oCtfqGGtP;=urV>T781?$;S} zdNP>bXNrnaMY*@sDfTI7hB49hGJZcn3PS-oS`ZevS()a<1RjnLy@`6EukyrnjO08S zSS@a!wGc8GBf+;51jr*pqb+(rlVpo9LqK3W0JItnM~e%AzL2+8zoVkN1(>4{6C7=- zEYWxGfKchT*Wj>Myf6?E5ib;)FH-#a$HFaDtC_$%oQfgps#Blj>lUk(h2#o zl#JZv>ytF_#EkCVpn6P0LU=H9gp8CqKx>Lc)7~m;SuRT#T2wwnh#V~{+ zZhp-JbYWmD5s%NuM;x@_q1~GU7$v+13G(B$>_nJ~ps@_2fIPoiXwC&Bulpe(tDp$V zY9kZz@?S%4>sbJ~kd-T@XFkZVZ*Xz5A^rM#%Gp=n~V`TSn)e&-8j z-QPqUjy?Z*21Z$?4rf%fZZz(#jQ>5)4JP8TcRKAWWOSs!LV!B962m7ipG z0;kEGQNvAZTD!A8@y|U}nCc}^Jb2f z4gS;c+T}#rO~I!Qv|rroAESc}5eJ}n$A}C>m5vj(3fW6k8sQ9pgScpJsXPYocfz3C z!B*0Lj-Os{JbGK3`hBRQHA?t!{EuhQ#Y)I9>#oY)=Jj8Lf8+O9F_s8o80dnvt%C^j z%`T|s8E~T1KVmNB6JibSu5%p?CIv%5-{l7`qY*$aX+$W1q7%7&8^dM{-AR$R`Abc7p1Os29L64i1yj z6el^g?DcLP7_A|jQXP_9;>OXQlRuNSirxV{PveQD{ze99{ zGkj z+}=ZsgGROP&sOMm!)}9bJ?41(ID*r=n+FR5rRb1T3t%+JLKCfGzv{^dh*N_A5P(9F z6VeN)I3AOEEBieCBqk2%Ab1c+BtQ!Q5PTKJJ{%fN#D)M6;Y4vY(un8^{;AM@rU_lS z@t$wnnS;*nRphNzGFfdY|9kXpPbSn3pv(nFvzj7(z8$pLaQaBYzQHjx#Apl)I;++tFSTl^!trs3aN(@Gk z!a@LhK)#}%wCID+EA}LWoPu1mB2?qsM{E2##Gw)fKp>$A7y|Qi%!(S62ZrH$ryh?~ z+ILMh*pH5)0?i((AqgFmFiMZ9{+vaQ^}W3nn4@i^Z)m6YX++QBrpjKGijH zhR!h7kw}irFkj>6cvkDatiVmX_7K~Fw%i2&gxZgOZ&TZYSUz3VY_muP#P|OhF^PO_ z@SO;OS0FDN8b9LkTQe3*t=KiRT)tB0y*|Vr(I;Sy*(tZW2opkT@f))d7-|9B2W&96@)O+5?nD# z94|LIIhOL_BoBW=h#0sCC0|3qC`Iro@Rv0FbC?-1B-*0x4qOGo!JrBe<1hyUaELe= zj1Of76oV{@03e^S1ct^h|4{x!##dZ}3YQD0Nt>36_biFEgY<@7^{b=HUt1Hu>b%wF7Hn9 znYWL{ltf#kKYU~J3lBvARPZS{ewdah9QY(J2Xq!VYAflH1DLLbV&V!%IXE78RL&(9 zTvjSbS`uOjsQ%Q&!+PH}7HaK6KoZJ4}L7qrQeqRdog@u0VOYH0lLui(|Q|E{60YLF?Xrlt>i zh|`8i)IPjz*su*=rOb{yXZYCnIP0kKv;pqW9Z`i^Wh$F~rRP{(lB6G!Rc1>C#>CJA z#KnNySr;6_E?hPq$5tU&+rT0zu|LqT8nDE`;cy{H;(+x(zhHxosMxfO+#eLB(IvZLpuD9_zadze%N2jRy0X%f4cF2SYH#ric@$7^a>Fi`Ujy8E1O5n9x7^=Za<(0D~%3bREEs z!|uB&P<~oc@a^+6L+m1-CJ3wIs#L9GX zp#X4)3jtURRRop<^fctLLg5Qikjndfw>`eiJnc|%IIMR~$)GIue!Z@Zpa74XFi4Ro zu|ZW#f_w^LrX}8&=Kv5n14zNtcazjH#d-23Y2L$EZmT|Hc8N$KR=|jYR;$P>y)F=LfRY% z=&WOVK_#8hS&sz5660cCP1g#przUnEawbDKT|rfH;i|XT-KTrLX#z?&5F>HPDp{G)IIqKFtto?ITuQHFiJ_NGvkdon9rbV_P&o#}zU)0WU3 z&BR>DJJN+yz!p%|cek7*0n3SS2sidzxa%LmMA--fyQc|}1LM9B}GErpUL?BI^+(U8-0?Q#M6-pIu>W>!Wlen+1mX@*A?J(v? zi^$(JpDPt*wz9tWeXAU`GZZ%<+-;g?FZ7uzPg@V9BMjIR>n_R5wdSF8Yiceez$knK zoL_9owL-8G#6zyzE3_bNZBH!rIav#=1mr=j(K0?=p;UB)#0hG0&<$il=0UR@aT<)gy%d117q)S*-%a8)IH`KNaa z3MAM8D1ZTk@*sQ!z*uxf)oK$H(H+ewQXsDZ+gufc@uCH8MuZec129!pRRA?qLl(A> ze`kyRHUnhQs(3;PGZ@KOq^ozEU!$@TipjGi)=%XJm%-JIwjSxF8tD~NVXKkFcp+c_ zhDo&M1QipfMH;-Wy!FA$9y*NK|pSSRWgwwQ>T zhf#^TK+%d26C-8}GJiUgb5dWDF>%Budv0QPQpG¨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%0AH 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

s;QtfP>{DVWoQTmJ^4G>GtZOMuK`^FWv* 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%0AYYT1GUib;NOfeNbsmV?Y-=*63Xa_Uur zfPw){4h7O7)e4e0&4xQPtFQfK1%#x=1s;Rp73>L1-I6xB*XN+$W5TkbZZe?o3Iv+K zcI+Fp@!$KCf3Emh>9;Ds9of**s2YYr$N*8O2?8L}a_+#DGo2&wj!n8E%pt5z*mziSY(wb zBtViexHe1Sid%+#0^@pRq{IRm%9(sdCQYQZ?JM^F^y@|RQO=-&XCh)|6Iw`~!3~Q_ zU?D=Ai%4Fqpf-Gt3RBC>T+pUUG+CNjCH6`JaK(LG)9ws&&>y;!v74vLJi$Z5g2YC3 z5EnTh7Se{`D?v@|?R)|f28BpP%^@1XhQOT)X{ju`hs!TJJhy082jLJK#4z!$qN#^c z(sGacK7W3pNAEpXIIK6YFtnbBuhaL`(~7w%0}{M3d1((tQt;R4s60N$XUBi=nXUaIlh`V!vWBs)FJ%q-p7vGdS$((-9I@aBH0 zbT(hJ{Dk`+xM_wF<7-JN0NyT?TK7xwGkg?2`XjDex?G+&k&fm6$@#bYdUZ|?i}+2v zEuJ6TiwKmaF20*w)BFZie0wCv{pa}n^Rx5k7U)W~E^)7+H^e+66uO?NnQr@`gh{BI zy!LZLi!6bo?>UeB?eOLKJj=PlJPjYmbI0xu&3w=D`~4!TKbSTHdakljKYYl$AF?vlw;G1xDevrzb4)NEg4HuTB*c(Kb*@ek3Pf? ze143UfTfMwddqFQ0Vf2dvVqWQ_9_4r^Mu5NwC1HX<13rBMPl!yM3=KPB29q<1XeQp zKUh+?N6%c_q9-VjXd|W^(P+vrIbkUh!Rc~59_nyK9%l59e>e5%&UgA=!v^~Pi6?2HC zQp7&}jJ&y~?{i(c1$w-rXsD$i$N*FRMe(LQPS{uPevMXWWscVO0*i-p`R3{1-y_Ze?Z>2#AGFPC;*E@kAyTLk zGL*@V9>;a~nxzD=nYP1Bk}0Y<=M{l=m*+9rXnu&6f zFw}xUl-odp<~>7axDU80x1E|W?nY~m#j3mWD}q-GNk4v_ylZ=_;FHRi%f3ZloJR z8E}ij62P`Po4eko>#@A}9b%$$h(Vi-35u2o5U>gm2oRO&+(00(XfF%MtSD=0iGQM@ zP+K!B)+RUsYN*}iABNmRWGnN9Igl;^8c?&u`dDLiZwr2?iPb|SWviM~h-jKPh(?ks z>N2YL@_0LUY&)qn<#g_a%-DlCx$`N5x*#R#MzJ~Yqi7 zJ6m<>!_ry@bZ8C4PP9Q~>>SSJjXj%3KYzWPxcv6`Q{KNAkMxuUc1Byf7dG~-OTO-2 z=4Bz^_*B~?X-=~XV3$;pCD~+iv?GFCG8ury!&6b`j+tc}(_UDNY?sF$1eU&OOHTBh>@tb_*pYDY;-`E4-+ z1G}uW!qTWKmQFM(S$QYEUF|Ds!=8U)&(va0-Ahd0b)4Y>`7cZJcQOZykvLaaFc1zF zML+C$)fyhFTQ5xx9ao3T7sNu;HtN$hzpdDPbB>b;0Fvm#!wM4zDGE%I3PCb9QMhc# z#ud$|N$35h9;porVvbxEXXG+6yyBZlbx=OOOLMZ#xa$Ct)Q#Vr@kl zTxxVpjKc=VUo0s9nA`q|%i~KDYj=wy3bV(mcv7PU+9V;YtK0g~c^>wUk0z_<1Y%RD zPK``g$_+g+8>Em3(ST8ykVhaRgDUNX5KvUAq7@W0XvV6Eu_($^ghd!;5e(6?g>@W) z4ur==lq_&j7a--A8SyEL9)qhw;cg@$BJR>%=rErGMH_`10V@8|icy`xU1hbZ%!skt zxq<W(Q8N(_6(hESbD`19;*X;uMe{k&sDZrYVqo0L>ttos$pW`PRgox*AVOk4 ztW;!DqCra}C0SSmqARjSyo8IHyooM#JkDc2UXeU+x>|{71k4KJV?=mGh!oQ3>yhc> zQoCPvO4Kf^D&;%%dHd3YC2ZB9T0>YL27??_0v3p4LN4h9HQ_wUdc4RTAh%6VW*WMb zEFnku;FPBrG_*kMP*qurc@JMyMprxuyo(8<L(_cCU?`pPY%0FQe3l+WaVwaxts%eBbr)(sLHtYu%6A zmFsZB^P_dAu22uGb1$1_3NceWmnq8tg}JD$%A`;P#41DzkO>G%$W!#|0ou|rt@SJFTNk^V>wDVl zu5({)mtJUv26ipNk?@h+FpEWS9feLMezX=aE(t7BkLTHVEprL4G*{c#-oJYDMe|j9 z5t~b(fmWdyA?PY?AeJQpWu!%&tdH6UYy<&`N~JkmDqZuu(VF4V(}r|ggbfKn3v@ms z%O~xg0Y}XWER_m^4BL9ouzpJSE(gNfO}>jNzt{Ge>A@$>oF+#hta{GYolyV!xabn0 zH{KZx8a6%>gbi+Z)twTxv}_8dF+ng6sTd;!WQKxJz!1ia66h3TSqxIqD~d|pj!7d3 z;TV_4{%ZSwUjOUQ-un08f2;Dp?_pN}Cm18cNHuvOYIWalXeSJSUhow65ruK6k;X%3 z?X(}BIm~1%E0j21*N9rEj_MeuSw&+SW)&hC*2qO%ihsZB0dN1!&v_i}u!paEW1jD) z*VqLnlPT<=xOmtH=(;Ihvx#T5r&*m503IlSfUjg7SF}OZ2n`$vsC?GPTlxKS4F<+w z28ykTq)d!TluY+rpHbs3x(?ROYjxIUKN4RT^01M;MlfmI6vT;eykD177BWQ@CC^vH(fH~x}9|!jUTh^MNLLC@ey+df5wILtaHi|E7%`J{&-{mndaBn zc_Z$g`}9~_YmgF~C$iIeK+j?3P1w+a#+Oc!%Ej~ifY)hb@hjf0U6fHVaJsmPt~iF` z6hARVHU`6<2%?X_zr0=Ia{EG-am}coj|!a0e7@`vs5Ll)hh(#76$a*f_ zT@9p|IF=*439K+p$b+yIcfw1-MJ*G>LbVfNZ6grIqC_PIg=C_)RjeI#UWRv6 z-d*$K3!fvIL+PXqkl5|~pw8L5X-tIPT74FjLaRyRo*ino;B-0{3&7d=IY9%{4DM2z?}N$p2b7lV;Y9AXJcp z3s_L5322x@9S)jXz}(n7G`IXSaRIP^Ly15Oo!F9+R2H;|4!qN^RGg(jD-0F44ZTUH ztt+P05UzBEYSqft&xSq7^qo3hpY`V-KXZQX%+=id*i!6KiuyErPTz=za;*V~bMn5E zj;{{k1_4T`Hk)ybeGBshp=gu$P3{c%QP1;(kF4e|Pu7FTnTR%(+BfuKHd+=gWK_pX-*==WE-)WsNGKY#*J;U%O5-crdf@ zKRW+f=l^x|xqR=XOg;DcvAsXe))Siux(Ysyx~1zXv+b{uyB!zv5Qk+N-*F9j4f@rS zLp+|Z^6+U++xKi&x%KHsU%dSsxHFn^pY!L+R(~^>W%e$dRpTmnGgD~jTZ;o?n=k~n zKv!JNDAFT6H6PaAF)vvTRVYCsZD{MNYTur`3pX<(*RA^rZw79a%WK4@s~eTqP!ZO+ zm=2oOREN325?a@J#2%XxwrIyQ6X|(t`;R0yXbMr8IQH|k-EZM}KPk@-=S#;ub@U|5 z-9bXT9c6+=5CtebtOE04RuMT2JyHrnG<0Xc#sPGI*qJQ2uy&O99?b#PHZrb40ZYb_ zD*)DDON|=At#U~hts@L_8cWvS+p|D|%6@i6qX$ahYr39Zb){B9hoErQs*5O60TXJw zwYIqUk1Lw@qI0#iJq>LvunY(1vb}hhJKbKi_sKq7b-rUY+^e9OouSXg8>$_YvjgZd z^UTPPK&MihYASGzP1B^4F1U{+HsgNh*q4!QKc?{X?wV-6Z(s;Bf9F+O&UDP@AKjRuijmKW8Zm3PaMD_456&Tn7$2;c?NRH z!nu2I$jGGdpjm6Yuuza}{mGa&Y)5w>REmF%z~#mO`b;0mK3=t~otGz+z(5w|2fMN^ z%MX}n8v`zB4PfI^h@MkzeT;4TRA`y#75Hv1@T8C!+v-NH;S)S0_-5&w-BY`8 zeG(%q*UV+@E!JKTWuYj?L_lW(xEi0!hI1TK^u3pJ3b{8uhDTsuCd=W1Jc-);DAiEh zEzReD_pSTYXZ8Hy$N9tO^&xXWN=|;bbKXMLKpxA3wI*8nu8pE}>t4cJ7~@Xo#XR#h z=={=$pXb~BwafoCG%~=YZQORHXFOf!UB;-#&CB0-riPr`VlZv_S!qAv?T>p^LOrB; z*akfu4G)Q^CwZ5#k0zYyoL=GB4tc%YYl|_`LPW)Is)05DB(?}ILrX>p0^LdLgmX%M znyF50|J2a{*KI-Jr|^J1T3J6f`kDR;a<8NB!jE$&p6W)YZ(@FMInWFuj=>UhYmW=u*yC< z-e>x&v6Z$>MqSS)1jD51rR;{qYhvz6vw}&=3A|y7YIH>VN*Pk_qW#}mj=j#GaJMUQ ztork186W%m-@Vk&#sJ0|>55=mC14Z@(sYs-=DmX?S}cnoETAkF8Uen7{io%lvYVyX zbW7_PszF6^=`-3znCht_9We_PXnT;Ew@{k?b)l_suwT)IpF|Z~!o-C6}QMV!#NLh%p985d$qW z)6BFp@Kqcy%oe)PMaBr&xg16Sj&W5qfKZpXZ8o&agvHDn9BH*fAxRn(td_!4y=7sb z#9Z7d(W?i8$bhyHPL#uxly&T341El;c_E}VH7C?ocrlGp>M#|R0L<)I$hNM5ZefSB z@qlC41S%<^Nr)|1b&Du90?1irZZeqybsv_hCZEt5NqII5042@_kOl;s^inmk2VGKg zl4NF3V%VI2tlZnd*1$Hs8ggXM7e&coxUiHd5doE13E;pHm5H~7+Fm)@Fe<*1 zPs_DfNz1S(6wuv#x*Wi&mrk*5E$Uzpd12YQNVx`-eVjb9)V65FC{hGVP?91U5+Fn& zunCsjwJIGkgSae)3*3=uT3F>G#ZM_)N8m{-7y|gyRQIiex|?Em9zQ*+@LRK?HN~}S ztB~T>>t3$K{`TVGaqU~<8>MXXOxseW7T_UK$45y#D@$y^8hoM^T_}MWLI`aQM1*I6 z03$jMpVdBpelq@Q<2o-UAFR5p&9ZNZ7d1Qeb@eh=fh7ntivd1+IS=ReZ`W@h){9*) zf7ewV0aNJ`y0bk`)~UbfcZ||j2~-c+5_YC6kd$J$f#Sv_Rp-nHoreU-3Nsq!_EziV zwYmdkR;woW!|$f}RevBHF!!WriOR}?K`sG8S3Q2SstC){ zAY!vSuegM%MG^Q+At|Ivx!z~GynA=arvetto}wOwM%e^(;rhc~&-r!Y=}&6hG#%*b z+~Y9~89{(pg&>woN)(4QqZ@e! zEC%_G5X3Pfr6_<5G3`oNsEUXjOh^fxf*t=XOz{0uiKmY~n<1rZeVmogR_6-YnCCz9NZJK$Ixn12y3~)`g0CbYF zQ{>?yzL&2Rzq!@UYhKCgBKuj>r|}klidUiX0;P7;kM|u{!zh>PO}GhrW+@LQ$^%*h z2MPpDD2|W|L?iqpS0!JLT&=vhto**1BLl(|0xMz|W%Bleyx;o!`@?s~Z&4CttCMp| zNUHpTEE#3OFu2zq??-L4nQHJDQPHAGW52(mhQ4o0CrizRIa@tstJQ^aSzhiwhIPRr zbGR=DO+`kpXRi38*?~J(dEVq6?!Q3h^jJ?x{fsX%56}B~GbIF_)G>ry!Y7t&fo)nDf>Z{jQ`8%&U>49#{q$4x`?~qfH}I)pPd1My-~agGdyDT+ z{qQIMi#Ptie8;ye*e%se*_sMF-qebqA!-MCBE9~({-m$REq#5{?U_c&Crxlk>Iev2 zq!2&@wa`oE`+jfcTRs7rmfg57Pd+v0Xj2Qkr!`XIg4NURd^cZ~uZ^+8NmVQOW+D`I zYX`hYj>n|A%nCs?V~Q3f$)a0Og36f0DHSEGSfG~G?*koJ3b`PvK}b+86$ywe6^39C zb>Wy#v|xfBDTF&(J-zWFG9ZO+`RHQeiH%YNbZ%Qp0a%zxCqBK6)&F-+jmpdj5sOmH zE<_h-MeUkH7K2bgG;BkJ7xje3xMv)Aa78T-!ZI9!m4Ox|898a4vSa?F+yqIiDOE2} zjchPTs1Z^_Ct6?(NYIfpK#jFh#6nr90tzq_R8p-PDr{J7QX|eR<0yl3iSMkRqkg`L zz59Ba13UhftWG;#8iDl_z$gd^>HvX6D@~y04y`EC;uK*Kv00{SJK4u{AT_M-;o^F1 zM3lOb9S{b!AhP9mwhNt3hr=rFubwbtW;ZVO8PK~-MQ3i?V|agY(?ElHo-BwCf)CuI zwc$(VXU?%dhxQ8+#(Tei|L^Qm+qO?(E_1n;m;au_Nx(GHwtjHwwv^?uRL~#kZADnyNSK3-&yjQ?x zSpjNlGAz9tP$t+$0mo+GZ9Z}m!`F)?4q2weOV4x8(ac1@|v)BFPdRtOp zb7qvCGIphE9Fr%B#$am-qZI-gsRe^dIFZ#cCzuJSqHCqOa&P`zb*DPT2yx!VESj*o?ch2fRYXW| zKv*K8I(E5z#A9sru>Pr6_9&h-v~zWo)PZs>cYsQ&Y)5#)>%fmxrE0ykqC}B4wWW2L zbOvaUh(zp*v8p0Oq9KT7FPo6Xhem5G$1s+nc4Q$IMF106n)i5* ztHFrLJR5i<992krp-T&58;krlk^YI>fiH^;M%$t*6y~S&0hz2wqxschUe_my#pcuZqnu;8`vy(bfP7TJOMB5)$1aD znboR<$2ht!pbYK`-|oDi%Hc-2%H*<{9r80}{~W=yry69nP;O0%sg?3R5xSY$4C(j` zVG?368m_^wZ}yG_dnvn9@~Q}Qy@54Xu(nV z0+r^Xtx+Qg+x`%kz2vjFk2!OnZ{?HA(eHrUX3D$q0&ailFa(>`@L={5sC?$P*VV6M z?dK=|a`HksJgPaCQA~$rVytABwI36I6gr`;4|^ZzCm+n2|6K8(T>P75x{HM2!F#PA z3R+n#LuEIhU$)B5n2`{zK6&f09%Jn@hz(>m*HdUsto`+;?2;PX*;?&FWjnlU$Xpaz zt8`OZam)4gczoB|PqcUPQ0^%Jg1V&Fm{U~~^geK}{PVf+Hb4F8U6$M2+X0XrY+qW4 zO#?pKXqi>$a@Y-06B?N^_ylA)W!Qt#x0Xm?U&rphv$uu6%){ah@D7wMUh(-l3ccF? z^0$_59DwgzB_yuRzb^?|F26l;`?W{SwxzvJ>}8Oa>8kuhkUTRlW4Fe^y)73D0=cg( z1{~2hk4}GPzZaoxXBNH#pR- z8C{kO72F^?v?cWSwX@~dKW^2o$3-MQi$2ZTRKE(nX3_=|0hxQ83JklXHKjp@iG{@i zMdMUg+llVB$K&O$mR3}@T5P5{8&5s$ho{5y*2SC|6SLtIKx@>*Ub zE35Jbx1Sqp2UDneZd(qoVg$tq*G%JC`25)4>Cq7~(A$09q7iJtJ)(FZ@6J0)`|n%p zznNd-vauEy`BEKxoR~+~(Gcc2wml~M8DwH?PLK!y=y#u}NsxPEpMedrI3NH>I+r33 zBnB#BqGiI@9$D&yS^N`Az$Q~S4ykP%&oN`+E81XOFT~jE8IXApfKpu~ZIEueU0RgS zA*C{7lrrXM9_^n zi?TVYrm)b)IzBKnI-ekY4%Z_n`z-G*23i>OZZ8)Li`_qQ*3=8~Eb>VTfgn-kf>@A2 z2oT{aq?8X>frXwXMZ~cpF@YI~SkO>ZYrCAa3u2~J>@=kS*#yx2B1Blm74@|HV4Yit zOPi+hDz}eT3hKxd0JuUIHs#SYIm1%0L=9+LQEb5NOoo+4q6uUyNPr&bOQ~X$NQ$Z6 zdT&g*kD;hLYOTXaS-=ED=Woa`9aB&-`pk`YN2(@S8o>%EUhdN>DImc7Mrp9dkOaVP zT4WQzfGl7E09f{~rU$lCET(C>ugr%@A|TFbt&+mM>^?z_?9gOh0}@kOhMu06ym*d(*eV@QKwuPRsCBZ7Jf(4;iPs@p^6i?= z_SA;Sd0<)-cuRE|#~q9eQ^s)-L4rt{G-i7I#Xesyl+nqvD^6%-!r_v;ls_tZVSMh$ zg`_NWz?<$+KU*hU15p)~RjN`1#h262wutp*#u|0@s{bPS(JQO{3fjuA$}FYh8*nW} z=EgDSJZ2qAZ;}cm^N8*PF5(5O7$E?Pdd#bndjpzhcoeEc(Jd-#QoIFmB zji;$oew%c>xm@F0pS;c6pRk6tq}^R}Qi=9S)^nr3;_@PO>(~pg_Fk-Mt7>R&-kYgS zkJmw0&C>m`{UcTYL|p*^f(T<-5`k!l8tnaM=1m@4mOo!#YTdudeIe!=%FlahV`*Mx zT3oMeiW6dxxp>Bbp|18>A}h!2z-It?AgIGm}=R-8p+=YqLmQX4?1iprJ+GwEpYoWp0p zw)<&n+tF3enXnUF>bh=JZn5^R0DDNJ7)V>REEFPPnL~r%fP@erL>p$TN>Emk1_opU z2pN<^DqCZcy1p%AbZK-h5XY}9R_Kr*Nf_ri#wH0_=1&9$%W z*JtxdvD8?{BD?*#I_v&9D{rzj>^s=|R3$N+*$5)wiH7Xe;=v2lIvF4}wzdJTs% zAp#{9l%gpXa%koo_Aipp$>0`gcwS5-n808#<|T}>k~mr@>qv=SXO?ZQ+PJ4_-UGb? zTz80tvh2_hT0Z+?|DLBu=-JP8yh536cBH4*9Due2YDymXL&vu>z56;FY?MX!e zB1NQu+QI}hCpubRYmA znTk!VjLcNO>-TmPMR@)q*nHpEXKwHL%RWBf^y*9kmxVgWDx^W`${_@Es@%3X_pNH%`-1t1H{qXe9uKTimClG5pe;s**blsBEkCf|`qBEAPCovlF#p$U zvsvrn)jB{|HAHo^z_96{>d6P#31C7fBP>ofAz1=9JGgg|6VxkQNPk#PEpRv%~v;Ybf~BCm3Ak8l6+teI=#S5O(^V)v=Bc^WwD-MFFP(5qJp9zZH1EjTd8iziCi z3W4zXQXk1*79d%U96V%}K?uBsMk`H+{p^G)xU6D_-Q9ZPSAc+gjP+tcxC{FA3`FWz6D z^sg~g4P7w-%oslQK3&tzG}HL`JTwkoobSn*VxOsL@8@&&bo(8%%=~0zE}g-1y?xu> zXnN^MXK5xtz-*@u{Bx>nN_dgDp`x;fwam}nE~lD3EGtq&8T5(bV4|6qfK_A zyCMbRF&O}Zi0w>Ch*ZqbX!WPkH24L)#v~0_U{GZll_et>utU7ER9;Nih8_?QI8t3m zVM{EA#lA(PReL`95AGbADki0?obTgrtbaY=hv$<=>OzTTqz)1q2~H)FmlJ#*CW%ov zSRZd)aqP#0b=SDy#ET;)<~G&G23si}5g9OSUA&WfF!u@R7Wgv$iglVgVSBO);B7zf1i7?d6Y0^6J;G7ljVNU2MfCY|{D$;O~r3akD zC`N}Ky^wNMT_CP+y!&>0`zMZp1mp}E1}BfMmdOcN`Aj`8JM7y24CUb1#zk#z3`Ofi ztKWWnj%RJ57Qz5z?@M)9D{8*kU*roVl{fmB5dQO|)mpF#0=n z_dmG0iZzdznOPpWy+u@+&R@1(f8%)9hjmWGMjlochSQf078_iGA6`z8bmIpmUrhMa z(sc&Xc2Z*{Rtd|F0?`I4^iv0AEQ{Ab!}0yWk#rwLFNPfXiqgvp?=cwN*<540maqLi*-~7qCeAu6ld(qDp zryGey1toQvf6NnnA3nAnY~hVBh8^&Ngb3PLu*!o=?Gyc8`7y06?oVmuV~hBc?S;@R zX`gf3rWI;VIKu0owlaUPRr}TBjg?n8P%EtB5Kjg>QTJR=FA$ z20%;uDzs?~y}1_dhDfn_Eyer*bgw~N>dZaM_tC=)M?hlm-AGTY zyQy#tysd4k6A2Bf1=}C5#N`xY8DoH~uH`+#`3dn8Z0?smA9UEyE0OeY?f@MnRKgN+&&^IiL1 z0uf>$gyZ>!OaXV`lx=4ngNM(&Jljz&LVedROt@QEnPozUeH^c1+y7+#g|mDX-<`eN zw3MPuVVP=(LLuP~&dP>2Bn1xv8X`AGgDG)?AP!w~Tk#r1pNd=*1 zu;Nw?eAS3ze&~X699JEY!nF$)#fkvqEI^?O4J9I4b*QvNS0Gp{8<)t5%A2cJAUXSY3*!GOYz*q9gW21#w(vXRQNpqYRksYdmf|FPfhe#kGiKreC z8YlJMFAwvZdFPn`47R>zYuYAzwsV8G%u1O>km>-_k!iEC1WI)9Uo!jL3*i@kDi&>9 ziE$Ox8vX0Ee?_-)S!b`CXX#vYifto_2Hj(Td0^Oerz#i&6op1or86DBJKSGu(@LN+4CyxLibrNkadeIA+4WeqInqOblnq>> zN=Rs?(WEX2VaNt1rXyR5%T{2gfFML3!I2OQh-GMx21Eb=0wc@>Gg1{#4i-t!?U;%K zk$@#y+DZz-(ZNPxgK=m;#m@U>LH7Q}^m#w+nS$=hBXX*;o=5ro!Rs@<_Ovx_#MXJ^ zaL*Jq>evbR(yQSHk3j?@1`*(>p+aaSSmdU$7QN!yj|3E%Sxz-%7^$W%w`j2k3?^_8 z=`=GiEyH?Gn<>ebG=+$|(q|ZF2%8M1Hu*4*`5+dP00LN6`ZOPG^OY6>#}IE*EEI7D z&eCkOL}4&f%`}eSu9>#Rzyv|j(yY1bg$$1{!I8CR6aB~^LwF!F0VWmYE>0>>IP&yK z#IRHcTz{75LiSm9e$Vvo1=6=C!2?yf1XchQDS#2SFl;3tf!R;gyvlPcW^C%58GXOQ zRjEK#!a`&PO5=Wf`49DhbMh*DuzR2GD8#ZB=%Wk<8;8M4eU{?y3$;d^d2sM&)TMs8 zLj(-2Ud;2MYit~HYBh&@$Vui~kE=(B(6K41%Bj0*M@1&;X*AAfzrTHd-E>#;*iu=B z{hY~gtM>)xsFOFe5s56QB8`Z1ep1``re=V4lVrj7jmnSrPNssEq&0qpB0^#a@--2V zb|K`WNwQ&=%jch*-~8>en|x$Cg)El`!5NX(z%K_P53@Lee#A&mS#SwA&wAQAx%J+n zJjnCAGo0cBVyuS0w*INp-_Q07um1noVwTIyUWM0n97r^p(>3tC}?2CFo7y%0!v&2Iy@x>no@)lIOJm)#fwQow0Joc zAWLSM^FXN>u>uq7Lm6apol7ugL}sO&ZF;QUO;T&sc@S)~_4#|RSaBos)l9SWo zt>TgJLcT8P@@-oD{uAbG%9x9e!G!<>a@XT|{q_79++Y5+=pS@#=4G!PcU%z6yjZ0Q zvs=UYthpcSOB>F68^Vs>or>ldIoQszx(@an(WC@*aroCVHNyhEVHooic2QRn@(&TPeLk4-f z1R-eQ0;m?D#v$S(09~CgEClFgT8H=ZaOLZmXn2`U+rU(C(cD!E7hc3pot7fX@9s4( zJvTOXV+-zgip%`vsRbF#N?s#YgEEQPN8L?3*sxycStYAb5W5p@#QYxQy|ZW52VA`l zx&CHc;@foQS6Ki4&-+FH)i>|YzqtPL`Onysb}@0pWFV!}U$D)**cr@Y-Y@dzyenGL z%ag^k$9@)hZM*j8`1><{ckR>UW-q`@CdVIte1GXwf;YYq$HD#}`EtdbOI*#E*3P*g5`jl4p+geZ==4^ZqY4iWa@$c=5R9iS1>imwCpvP zN4AyJSzB3qsv-d#RtziDwy2FHC=me`Z8#37PYY*X+u%ZH9tf(pKv{-&)=Jwg~@HbHE<5u3kMOO=4+< zs^ZcW{RgBm)*wjm^{LdqtV(#C;D=U%nj>rY5#F#i&?{9eE+KTiEEAA==&-^n6XHq zZ%cVjRsV>Z+=83&;QfW$Od98izdGNI?$`!b1QSF$Q4HsMUkqWP5l^ld>qFZO7)fB! zD6246de8GQbLV@8vu~7-Ju5n5ao$WyT@6v&L26=ABR}Y#*&3g#W|D)g00D@z#maOd zB$aFOE7gw4Lr#;W;X>^6tWuG)jaW-_!6SF{GynEj*;(AV;WN~Tj5h%xl!>$yd(To| z?!P$l&*VCKzrB<52FiV_5E9s>ApsZMqTz0vdam|u#>v*L!?lwSw0=^=6>x#5>o`*9 zjc3@bj%~%VmktZ4P%k z!aw4K{mG}xe+*z);K{wtymj620%arN5oPgsGcz%SrARbpXP7zt%!+??%<-Y+ZdkUr z!w7Hs=G4utADw>+torZ|zav6;*GPxwq^NiI)xHyXQSM2$4FEwI1qU>0ak?W4J4McC zHY;}ezOBT|x_C!+&ur8vD@WZrZ9F=&T@3N|imoDuKC>=swNp`lV)Sx#VY9a>3Gf3x z58~QsVT&J7hPk{m_o0BEm+$0sY^BZkxVv*oAA9`!_wJ^TAKzx+iceo}#8;;dFq!SL zMa8Bib?517c4F)F#7FEqqOae&2uV9~M?4*oJe8DLeIWj<$gvVT^@Vat zT3ujZy++xLx^9q`r5&NoxjtzCQ$Vc0Wfrk=h_Q!aRc>vmK6J3?MaO83=`UhS;)3@_ zFn-R^pP3fJD-wM!q$fpGo0J3P#5?z}a=d}hsY8z}8c@g(UJkfA;xYaS48c^^V4)F? z*5;Pe30vw}|Anjn@J{FQ#{{Cl;$Rj41?_`Y9kt2KO8G*?-d)@7H4Z#}J>HtAdbv@% zZ|n%pfM#I##mydcytwWQFLBv_T;w<8Y0n@0bsW#;CVGAFAI&erBk_;z>4PTAmC>O-1cN7nJ3vK)w$i=V0eB|22bFIV@ONb= z{ZvTKPV3!{l?JB}OwSyG;)Iky8pMG>D4<}%+{;+bej~OfER#46tx18hinL`h;gP@n6Awkfz5bq&7&|!qi|zH zGT1@YmCz7ObbeSrHdVG&Fex{*Eztn7peuR_319|WB;*FA#*!r=L0d$s5DXzQ8R?M{ zjzuyQzn7XE9o1N)O^<4X|vq3Z^ zS+&Bl*m>Ok894xwv~0T+6N||*z(akXUp?Qs^;$Kbto7gS>t4DnWPyd{?lmoe4Sh|n z(ZsMyab`FAa#Pp_%mVrWZfda)ByE(-MI|Y-DA1)0mI9zQZcep3(ggOPk?GM^x~u1K z*la9&6w@4LEvQ2wlXDV@0CFVBIva=8=mK|8X_3%_L{^ZE zt}bC+)RvUA1xz_80Vese~SzrnT+=EwDqH4Os=eJkCf4s=I96{+;MEXsYN8PK6 z{2YSCu1+j3fC}NPKboE%n?xpaB^^Ra$tqUGVW+4Hg_+2Xj&88xI_MywLeaHcaLsk6 z4MHW_PYYs#$cCz_GZk!NU{vIy1`A9rz>@0OJi#M^wYWBUEyIagAjt}sVfD!?lop_* zL?JG?4bD!!D)_t!PsYU)DBxQ6!h{C}Q!Qbu-1WNoW7AllxRq^mFi?CoTDFo4-UwIK zp>?Hp2|u6@d~5nuE}f_)u9Ihbp^sxyqDpOnu(g@X$gh$vCr^4!T%21;?bWuSCZ0Gb z_gI$WJEl&>u|GrktQ$heAtCyXw3?;PJaZf!Kmixikl;;L2>8B!@!V%~&t?kr_Plke zjFZEpD58ag3>ES0eQ!6e&N?_mdE93=*0A=*ahp8lUCMiEH$-6SW^=fyQF=NDBICrQG|Gk7-~X2gmFG;>9nf zzz9-l2(!`^w_*~W0ta|P0TQ>15qxLu#&J)UGpKrtZO4*=$kOX`^Q&k1w|D-(>g00# z6knpUDAk>|f=!{Ra3obHN>7u!sy?jmzm(S`J99w+0*jf`Bl(<1FE0{WN}PUxM*b6o z#o2HO{8xADW%}hU=sYLS9t@Not(La?j;!7G5ANGSAM+Ofb{8H@;^7eqj4UZ)3ZNbl zQczkEY=f%hH|;KY=W&4<+uTLWyDT3Ym3 zIl%gOXFUd{NHyb6xS36RrA-|OzVz)o)Pg*1?4Xb8EuAe5dczHTuZAmAXm8gex%C|^ z$Q8C+1Z(d>o(fhd!xj)T3l&?$B8#b1u+%})A;*Qaj99#e_;yAQ#Z%6xt&q$ZsulS5tLHee)G+NCz#=rGM>rC6u6kSBTDuSVQfR0xZ`)W zm}w9%%8RnA?jwJle(+BW1+21_)soN)#0u5GK&`siYwq30Zhy3Yso$UOJ`Ll2H7S%zTPjS5KB z0Pm}YL^SW5O*PqPKSF?K$;Zwc>XW3t)0Q0A^>SKuj zBL>oev+2ezJ#MDq>qKh?ax?8oh)q-wta;~`<+s~%t9H6yFS(LIm{ewil3JOW zk!q}_m1-eHEr?ZwDm~ytMhNRaV-}=F3=s=b6roFeI@D^_EP2v=pk4INW!Ve_wey6^ zqkxbcm{Q}q!wkZp_VG_$2Nv{&Afhm?dltD5a@~F&PkY${*VeQ5*m=f}bQR6B?#H>V zH}gLI!I2I053Ebvf3DNzQ626w$m}>45|DwpCJ_S=2FjEa_;7YXt!VLS0ukr8Poi9h-o)nlZlcPidjRr4|LrORpFZrra^0?qABPAHJ|vD-Sl(}b(kOM zZ^l*G46KUD4XttHu(~QBJf=vRe<#_x;${@HzFiCR%lhh*cM+w`j<1b0Zvtoe!a@#*h*?0c=I zf1^$)B9)U9R%dI+154$F=K2c4=A%@2Y{cgC&n5oOkg2U?oay;=5PRyvw8d!AU7J}g z8eZVHyK|QSg!n%kNNQVP91Ax1E;=q{=;|e_8rrjV|X4A|Gxe|Z+1P5f7NCEqm|8Kz2Pho zt)l?B)`7`Pok3Ywq_5{IpY&h(CC1liH;!IqqKdg|^OB#A=jG>KyGEV#?@75i+M9Ba zoBwT-uI7L85Vw12txE>hxVICLd02jYU#dFQp~QKRiKmT(h*^vSI5~K2dl;DRJ{NAM zHAE6gYXRW!VfM{><&5<4Xx?Wg##TN8pPYV9tOI5{=6-MaY)HS#A*uefhaITP?94Gf z-N(iICg(@Ex;3NmapcR~s0Ro9dz|>>bLzE^N}gM?V+#BFd`|Rc&$S&*11Hm|y*r#f z?v>6nqaV#ZJ(;=l6WzPGGGRC4Q%IANDia_VqTuAtyCzQoj-rr7*m7KS_^GW~uW=t`L5B4jI&YBs&{>NEjea)z z#r$Ug{(t=(57{kD$cygDUh4w9!h#h2U#ckugjra}?YONH_{*S$6Jemxo>nITX@p~d zN&tbzHa4JF7G;7VIOlZ~&A{qldcZgykH%l?ufcmup!wrH@Q82Y>T%9K+VEO9?pp8# z9cYM~K;ihA)TAXZkO7y1&=PA_df&DoM}@n&N z*_e=H(1kAO7%sz>7b22RuOm@$Ey-YrCzVoT}S9ZXI zKGp~`LPY~AAl5s}eGDAOGDSWzzR);vA_-~`jmU!{0+Clht3uC_tx2opkYGl|pXZOL zy=(n^Pr%@4!SIaVJGB3994qLp;(FoDDy%ph+A!EBQ>G4>1N6|)O+fV!-5}Avepr}F z45mxX&U@v3(remWO%<&S-5LoOWIXTqx-L+PbqGfcb#SDRwUN{$6ND2)F*FpAfHdUB zWzF0U(wvH*0$A^B4AyKP;OkmCN5`b487>GJF^)cci@4|~*j2R$;XtF@o2IV*wCuIQ zK>^yy7?#4uM)!5i88K3RKSqvEl_2B}9!s_!EiJ7uLzbDKl;YTY6w<6BQ#<$a#jWgto&pe1nG3xR_5LmTy01g3l$vr4u?WX?SOt%A z-YP95zKVcKuhc`K$vGZfvoUa*kEOX<3#2epCWAKAQESSK%`vPJNm+wL+ypTl0u6AK zDFBtZNhCuh*;!R7GRz4cVA+(4g47U62@tHB-}I{sq0|Xk5v-|;+n18MLN2RMA}zIE z{9LlM^Kwm#$XpPC3Qg5T*tv1zEivI$P=}sq1)4$vDh_nW(1jlKe7s+L@siEa45l^8 z(w5~ai|LxnB3Yn{HcAo70ANs0CFodV5*zx5Rx`3fhgq-?8`6|zJ17GYwSMweYq-V0 zQnW3Q$~fbBf_u@g*~*?>%p7{mzupq9OS@ByIy{V*pTJ#CsnvuYU$-^S;WJX22_jNa z)gPfl7%f~W4C<_KdL|9lx+$^9=m4`tL ziJ~P`5%6-PGND85qr|n-I1*K=Vj~qm5tPg+I?PLMn+=o)mmus!>Ifckmmy=uFe+n2 z>pDQm*T4Jy`^{g!|K0CDR?~7@6%^K}XWFniHZ;J>?Aw3^D0SrARbs`7B~VeNAgIQG z2uvFubRoU?X`*a_z1n8?%>|IRSm4gRT>ynKmdD)WjJVn=Erewp=w;7duj=^ zbw6Xyc`J3(NqVTLvNVy!YXS`eLISDt39z`In%HjV$wIwr?8Tyv`lJko#N=4(OpMC0 zZI3ym?yVE*iYwasK$WZOI|b}*xsdPDY*G2z65E37W*KTR%cCBuu|BqDbyE2_f(1Oi zDpNzLSeiT`-FSxfBn2%o)#wl+;!9D0 zekiXk$05vQVg{T`)wFfaw(%L=Esz3SiUdABp0^hqa-nvG*?TjmhG#Kh6uQuXFQp9$ zWTZ%ii_s~+Bt9g6q4=9*|HF^g|Dac|9I7&H^-G!JVy&7UA2QeP^*OuG(=@N`)*vas z&^Sg(Iu@6lK0rCZXac3CNC1H`=NLi>8lpozp6diEsRM=PTZ6A>_~RV>RQ|r%eA2$x zM@}{ag5(q#ItaOAfTa$KW;*n?}EuMI8ft!1)cG6f92sIhD zkrx?Zm%yw02i=nObVgTrb}Mcb(`M8-Q#fqCkRv|Sr$E`?OCCEwUT89$#I?|q>^=&8 z$UCx-&2(fUdO`@Aea<(2mK^9v*V`YgynT9lE+QxhKxdXDFll{K?GW(d>gT8-`*_E% z6C0k=WuJ#8V;zm?sTJdAjnUH4a+ecND77U&+L^w=f1ztiSjcK`Ez(iKoKNhAdz+j$$Nqpq$VW7V1O%@-HtB)y z>m0ZE{rx$w;IJze*A~HO-pfP+c>8_gX#>T%jO@h(!D#e@rh;B6wtURb(}&3#D}3@1)(i9rEM2e zSn*gRw76*RvQCJrAe90mtb%&hF*p@7?vb#-eKB1m6gW-^AGyXF=)@I!8N~`Kb%=yoix)K@gsIF0>wpP})=_1?uW)0#dQ1y}ic_

#>LNMZzE^~6|+smkQD$s7k15i>H1QT~XQMVC4G38rE|1JlJz z_=$*E1aQ@kjx%8oW||VK2qQ4rV&8-jm@Fh zG@3advxJ8SQMYxkd5zBjrwI9*Vg)l{7zZJLWVX2H&uh6ZS+Mwr@y*ZI(^h3 zC5cc}8{|}aR{nkt{-I_cr{~wsoY@OPXmP(6O(ZwV$8D{l=n8@W0SSRpLRA!|4oo9< z;A(Usoml48u-wWsut8mR_79%(KrMHR@P## zQ`2=vL%o}Pr8?HzN3X-3Nz4v?NhDEH11GAfkC4wLj$vMpGJkVkoq7Bl@+} z7Dt&T(71E!)!iGSL79LLs|Uo2jbn_jkve8o>J*~^K?Z0%Nj^GF+EwaUpPi8=5945< zw<9$9D(|mL{&l?d%X<0DHx8?V*`mb_&+{iAIuuhp@a;}Wz^<;f@{%xjNUUB74GVJ zYu`2)fp4bG&Vj4WOMpyu17hcTRR+WZUZB~EEod}VJtAsj`5p? z<{vPAf8F6cK>JGga*Gj@)K>#ZurORIK%6|tu|e)*f3!SOx^yb3sqXC@5Mxp;;X?tG zfG$4k*1U)E)u*zd{$*B2hsPt_dk#!c^ z>hbp=`6PXqfADm%wnO^5tsV45Wsw@nTl2KW;bvGYL*<4QeUCgISC;l~q^Qcv$n=+E zr@q~LxWeqZ@*{wSVfiCQ-lczk!mmw7y^pwW`{wc*uY{Rw2M~|@b}-sEuB9UEq`Dod z3X;oec8WmJTQq>IL3cG9%o0*>69J5CE;RyMrAU?F&UJNH+lxD3?ybEh1Vs0E+6Q01P&SoZgJ~ zBaRL}4gJ5o#;qDKQ3Bu_qb-_i0c`P zc@*(XkHSnA8-^3IuwI_8lftJI?A`Jz2b190-szAI&w5Y}U%kkw~(L?aL8lKa36v>6n>3xw6;s6o}N;Sr+hM< zovwre#j?Z$64JHe#Rm`eR<&BBgtSjmBheSTs}h)+9LWS$i`(m9*Z+^DDF3V5mjCj} ziR0qFOR@5Zg9wJxsmAvB!VZDhUrvix0je^OMztr)-8uzpqmjf|dEaCe+$sD+z1?-M zC$%Vtz0?)0rH!**(nQ65&gfh@Uujv5q$YqCoo9oZ8;gWtQ(P>?8$|S2<|rT9s6O>{ zfCp>Hq+rerBbC)ow21))VK5N}S`-%STjb1>-U2rukRvn%qAa2ssc=Co7NA+z>Mx&f zZVa6(FSo_ciyEws^nE@$m3>8NwZ3Vm0A+|j3tE^aGfznW^=vpbOVI!!9Kr~&MG?cX zz#xbsKXuk$Ko4bTBj( zSQG+`N8PPfsB(hKnF1I&0tCTOjJWh){I|aTf4994iv?oE&N@e=V!-sSS%*@25i0}| zm_QDU2*WbeYQY+jkbW5A#R-h^yQ5OHXbIdiP7^{TBs-2|7{HNDx6^`WZ@Exeo^8A{ z85t-eby1sw^dw_v6eb-TRUh^^I5$%-D^&V)W~4qsa0m{IoB*0!vOsSNiloVYB;Ggl zS}Xv#wKM7=69TM0sN9t`hV~unoCjvip)cL;-shcQZtnY#?Ene}LZZpG8db@g@0&Oi z!b&d-Y*>y@kMrSrr)WcUf2n2dw2G`MJs^e6$6m6II=(+_dG%c;MLkaMsy;A&YDA96 z8l9ydrBtT3ajdgl3N3jl#h}~xFhML(;vf$NdWf(k!DyycrEvzk=p=n@*<&2cb6Ao` zD&5uh`lD!Z?>Xm?*`L~t8aXFEMqT6P979!VI~{71Rn2l$EDtTqyoGP+ zrLJh{SAHeuA%zN{-LNWv-|}F>T=QcXt;i|anCYAC$;`8Uyx0l0xodM@g5 z7)46HjU#qqLMS@2B|EADtq2?9v6u^4;iw-k^6c|h6%!4=y|Ai(JgJcjwgVIx3Ed(% zq3K(`{oa24{P{!Jr(R6mdnoSGYr94|R*9InBP^{YM9x)V4ObK?lwji0G>lmeHA@_c zXi?JaI!8R43!t>D#cDAz7`7uU5*dSuZPVDwhdY&G{WP!FVtZ~B6Z1SRr$TT2=8qAZ z^}~L!%IEYVeot7W;a~-2kCMY-NRM;63afMvyHr1!pWbWvo|30lHsO$o3Wt+VRq+^& z2!!IMj1`k(Csm|{qNOEI!oo<)aAilKm+pxTvfv92ka7h-r)qZFI2UjP z0;E(lfLom?FpR?3y#H$1@2O8k7G$`G+(g&Cn_A&W+p%0nEklh;BQR_hm#}D6L1Zyt zQIO!!)oeH&h-x-9*W0jbZ?U~C*&cfnF5MoqqvE!8XGOof@AC=&*ykS2?=S41{=BZn z##qj>LoO_1ldj{N#^FF23{q*~rCoi4P2|8$@Q#iZ-6fhG5`(zOs7DK^LDU0Ej8UAV zZ!i0KJ(HCXTjYtk06+vyxI64oo+6|*TT4NlXAcc}q zPvc7M8X~wY6aY2^!PYdW$olkM4olW7cLP`E_`cuQlUHP!+{bbxa12kZDDq|C)tLw~!rLqf$BJ~H5jTBRU1QAR^q zUKw5(osN(hD}O0p$x{hgwLdSe_&ygBtp?WZb2memE_r9Lg^k`tba=cEF<5>D6IaIcU9RkRRhjPVC6 zdHP;iItM*-_V(TCoWM#7P(*P0`|)wV|MYmC*_^pgqZWE0G=pm4=y@IHXy{Amum^8O zbxtWGNqv}q7*6}2xPSh^-AD9SJIvx5+Bosh=(>5oT%u3YtPnMKUbc=FCB14RhHt^5 z3?-?o)fWDnssD$;E@N0DY59ViJg{@ca53Z_$;6mS7=Y>t@Fqv>*(4%B?f~JS zg65{CTVB_8e=@FY&xx(;B(Jm@?$A6Es2omc_Gi!asI@fW@Bg%3`2LM~`K5hrX9k~6 zI{6q3xm9HM#2&2DYp2@*PoP#)+bQn81dmzaBI_FI>obK1cUcgu^}MC*T0hW2|HI|q zANaxNe)csqnlxN*)O=tLJkulK(~rCwH!&@%l0q}sf1i7y>2}2py+&HkrEy*#b3Lch zxaINpzx>WC>l|L+ow|LKq`muX{qy{t&-mF?j>WahM6v_p{^29e2Sa)^&Yp|FgWjWk zkK;+ja-JVyJFf9?9c$ehh|)kVMh%X6a(~R;63L-HSL2DYuk3f|=Op)4zg^=S@B!;N z8OQpr>dj9GOl5apKi-iZ@Ld%XPMxt@L-a;)Nl+4N3EdpgT0SA+irvcOJfExaNY*)+ za7n(NzN)7!$PZ-s$nti_cu0upcyUZY>gPLXb(VJJJ>jHg>B{b0~cVQ5kU2w!pG( zC!l$hpUXeuQeGIw%JSvTP;T-P(l+RTR7Q9|q{VJr_Th&`uRTh_6!WqFq_$bMQ6Gb5 zG!2tTcGH+X2Uotic?a$KC+qQ_o8ZY**$7`>ZEp<@z?cj?j4Mn{wALpBFp`~E%WD{> zzD-{oTizbK{Fj~B!;1&K&SqDTfk_(6#PLF}JL_S2>+$Hm_K?R1gBel>&CP^X62G}%Z z6n3nZz`KlqiVR>3<-{{y7z;~BBpJ|6*P>&SuI-2Pnmzsi`qA;!AO#Fq`Q%m2usGj)mepy<}`k2r3&+ zQ=poOP!xb*cT)nE4Rr)uv1jF@%2d$@1)sQArEiyiy6(%#-|olmbvTXdBg_2E-tZc& z!J&_>i(u_nKy$C#psV2sdl))dtR>)PTtFK{rSInxZsq%Sr%Nxw8a!uA1~R*wcG&a1 zwXQYAy=FVCbE7`~WkM(P-pZ64@I+cL&km|v;bC?y0f!Kx*8Loj*2Oqi!naM=U7|rL zJ~3OMI9Mq;@whgjc%Pv^+aIa^?j1+?l-QlULL53{rHW zw|n)ORB!WGnH=A8If(8HzU0!^>v4VIiDs?5N6r~Ly7tu2;UFUi-ka+X&`i%4kJs$l zGjVNXJp^;eyvyJ$TpP7p6Zp95&8o9takO&kdaMI&JAM3b`dpcMEjFXWh1vp3&n1G) zDf?OCITa;MOpx(IeYa5OQcPMWP$-bH%z=A{FNsA3AL`Ze z=qg55sWH41j83R3$*HN((w?6`PT$`%_Ey>`4j~+nSaPjwK-OcaCXO(U(GbCf5|6P9 zYrT$@73fwTHG(QxrCUImdO(f>ASBKPKo!bbaj|iaCdV~uPM(=2Z_R&g{wFf_=`rLiVQ{1aL+Xk>96k>$~Q56&zM6D*%7daOW($M(~ z?iRM!i;72MQ73cwhq>Mw(K)VXvG!AWlJy{P+SnJ4Nn6KBolUoy*Y=+~?9mB&tBRhjD(mp?q?w!8& z3!~<0+otOmIFWlPpwer+MMbGUBZcnTmQI9_F$BdBWJ)I1dUPF*wc@mwC4OSyvY~l= zb3T;4;Jaca#oegEvq0a?e!s=H(U=z~CNuOi;`}KXE z_jpK*p&hzHjcllI>FV!c*437C?46VYFH%qrpv;zP(gBTfCSBj;ZR)kQlI!nF{oTJ+ ze-GxLKOoNo-xaI=9oBRi?HEo{l6CfB@S{Bx?)-P|UNq{k{9A?xCO|`I?Pf|LOThq`(OR66Qy>StS~=_b;3W0a(tv`!6RQ7pApiDYbz7~|k*?}bsq0WJTMp)q_Wg^+oe5Ru$USTF zL#O%DHQNumH|my1q&V%xX}~WL0Z#`iu^fo1Q$+gCANaaBoNvenk|^2`JeekR+0gpG zA9-Bt(7T>X)vpgk{g-p+Gp|pgyW|Yg0zpEMVr5U@myqQjzVYarb)86VIT)#fTGSxLN$u1;jx*xK zJM}aQm9y=378_MS8JH@=5q792_Q+leghXnD5tihg$J2l*rJrlvCIX+)Gk zo$K9+FPrDV2C=G&I z+iB?Y6h~c|o{#PuQZf&nhy5|#`@_HUr$0a8zxk(6`n`OY{<34I%;u;JikJ{6*8XxAAIEoMTZLZQ2Rr2B#s*20;IP$hCq6AOyfFOpB z3lOS+dX?6ead8Y@#ms#`DUdKAW(2I|K%QV59bp|+Pbk?`$4#sj2-}zaIllMdy?0kj z#GxyX+Xp_@v0SJaz;RM5fIIqDCI1&K%wj6REn5|vBCC4Wwi{}3V4R^bAG^c<={is2 z4^F+-{nFannHD83^mihZ;ksfOdbU?~M6S(-$209ORosH%9ffBb%d#B2&Q#q+!uqpry>oNH{+4F{X!xn&L@5TQ&J zy*%0kROHv*OYp*mRwOrSC*3f34x_Lasp0Mwkny32T+W^$LXd-4f_z3#pF1u>}?Q2ANmE$zegk=ll zfTeNmWp7KU@kXPzywG)Km};3CgBR03dE)hCA#a+m=Zj4fEXQVRJM?Mi=wO_xhSXtK z2~^(>h!)z{^Zdt`{L|g5z58KVhovLdIC8COs#p{^Ss_t7%ejMn6VFvGW{VL9E1DVM zCM<%LS-4f;6Cm)U?e>U~R6`xs+|#gh<$x5YQ4%37LN#Z1r@K;lhxKE#eiKK7%JTCr zdYZ@Rwfui`6#wSc{#XApl~=$o?a#J$&qRrU277OA6t`V3n}%>MF&xj+tfXX^v>u+m z2tkF>7+hC?djU#=NHz^duaKFfwJ=WWZhIRXGthve!7#8YHd{H=4@O%SCZMw$iyZAl zs}=`q4MNM(wGCB>S`$Cspu7t0LeHJ6OuepzPG%w}`cd-2{f{TcQ9R$Lc}~5OOu}SR zjWJW3pZRG}d`if@`;nFAKmj8YepD9Q}kV05p zpD72F5IK25NeG0ZAZ48TrH1bsF3J_s6{D@x?#&YcxG00Z4PZDjTWg*AMq+-yQqI zxuX#~M&0j=1cJ80sh$IZbCX|DHy{VMo?=>KN$Q` zjfE+C^py4cA`bR`Kivyq*w?UL)|b3Les92ndv}N zKii&Km9|jpV|6>)KO2bFpZ=u7+s1#3_V14H@n1c^=c!|Ta4VOw?#`|IhriPcpJ!>FvCXr`14YXu2!<)oAp_i_h|Lv!Xx!%$VBknMgMTjBrw3 z(~AyRsnph>xS4+|qOktibr$Q!?g2iLdh9%{qsOV`g!+ix<1cYI8Cxt?wdFL;K}fI#bL+fKL8Xi1dA%T%cW zYoKAz9aX-CM&}VI7zOsFa><|sZV{pr7^ZniXi0hBSKj{Y%=OQYX7fZ@8(XDR0j=nv zJ-W|GgAMdMAzl&UXQ0g~qbXJZ`Ts_Q4slIGzE{BwY1u(wfUV zYfSB);(PvR%Fhp#A$zmI7-Z8MLD-QYK@n4 zg}Hc{ffBNZHW?i0(^t^?6}GG{55zDO_zE+{3IQ&AU?okuCQU%v6-3HeoCex;Dcm}| zgkBeXrn$%YxCpA=pfl|Pme|_Mr?I%OsfQ?Hv zR_{H1UpMrV|5MXdZpE}xQ}47J+KK9%;dXN0+_&@E9i$eo+2;;10${RXO;j|<9K469 z@TVz>1%?2M#8%WnwNvEOE6!OsBR`-qeu)NdPWM_LA82wv-Ydt z-`GFRgCx=uV}owMG>NvO#R+|VVf&T;ruNwg68nn=eigM}6hk=x!+al9WQ+GN~p)yjSym3ds}yxz3* zU)lfkYqvGV3nl32c!AcP5}mv6l(nF0y*K~li0Sa1h6nB!l@;uZ%(_&%T32&PrM5iN zU_F~NGQyM`B~?OXkQS~}rgb2AjopzF<3VOMaQpdnGz;mac3TT!Wm+jFo=8!84)^pRTRkSuI|?OkpWWXbW@Z5^z(Ggd(sZ0I?(?hD#to#$uzWzpl4W=fNWCA`5-b zM%Ck0x7QV@zii%yy&x5l>QbwzOPj;bb^JoG^o!S^Jtx|^L4`zx`xavRabJV9#Y#mpYMxTa>w#mC1dR~Z<^*7DC{L)m0TXt1vi%W+~|uT8CEUlF3Mg1R7dqrjW#hO4MaY$b0oW{R&Wk z)0>OZweOFUW}hJq!%fZYX4cU`fr>b3sHX^3=MrThTwv5|p}+`DFIc>a`q%?lD#0iu z5mu<$C~wKOa0#z2tt|^6ZeuB*^6T>5>N{GO+dEI!Kmt>iDu^ni0+hl8E?$g=qCv_; z{pr|$wqAR@IeVNa*|@vW;Vl?fDu5DVkT9&G1y+t1afcp7XV(2TG02D-@eXnmz$l>` zh(f{Cy*|S@h5LnGnr#;?@p=6)oCCi$J4J6w&j44;w>!r;z@x2krZ4Hky2!Z4(6iq+ zV0qI+?<@Cp>HT^2{Zi?-&X28A{S)(2@qq~o#d-+P&UGLm%8Jg(<0`60+Ny21$EZo!&0>h#N6x@o_(XNC0^6|##MPfT@Jkc}M+WnF&z@P0#cqKp$`M?~2pZEE=&)putU2re{GQGX*a6cFAW^XT@; zc5y%U|GYoCcz1H~8hP?;-nRML8mD~YD{Pg>bJ`*nt6oJX)C#Hdip2*`Ihq&}x9IgwPP0hb4p#5_!Vl5U^i9x%7N|8KC)s2?5 z7i<9}(O{#HP*4a;ku2hae50@AJ-XYFYCs7dw2pl$v)Y&DC{n>_u6O1Sf0O@bPZt*u z(Tr!E(0BFO;$tg>ao95Ybc@pfnnqIQG=K#q3P$5&Ljbj{T5SDc_S$lj{Cq#efBN40 z+q<)wrJyNDF1ewhyR{pcohk6*N7DB+3Yd{7AI~F|ogBZKpT9r&Yj6MQ-#f@Tzg3*e z5~tEkCN$uzt;g>#yvI7}`opFC7Zst2r@qfsM3faht{1L`hjBToP$SL>Bg^zZKZ`j+Q#+qP9uP zTAo-(SC3xS?#8+iADg3lDp*GGObAAx=$dS5Yr`5tE3B@>34Dk+5$hA;vZ#`uEG9|JQecv%O}W2;zbw1BRQRD+dC^0<&%K(FhY*v&Q6m<@yjK6GB2BNWqi= zv3lAe*t#lnk$waLS5g&dGQzUsY>FVKX>!S<{nsbp`KKMLkMZ0kw5|He$Yebop+4Kw z;VOaSN}LSi(3Lz^6^)y@;z8ou>^Jb29VieJMAbsj0Mg|a05D`60cewZ7pKxOBR!%6 zLIpupb%L}!iz<;ZBe-g)W8+eF-V8Fl39FlMPK2INlWBpHQ8}hEsaw+_)JswS7hkz4 z)5nS$ARx>d6hmD0+gt>AHP(M=vve2u2`bRb?X=cYS?+sAaS;4$I>iq!98uT&DVD@gtd}NLY#rN)qLfy@+MTz(i(w$t`8;p;&@70LN-A zw3T5Th6JMmT0)%|8WV_vIyr6iHxLk>rWyt&2}A%0sn%LV zm8nG?mMZ4TedxBy(Rq}}t_kjo>2&vrqjCqGdc3ghgg)-Iq#iR6(;O6Xs40>yZDho* zMn$5c0Zl864!Om+c~^N-1HM!dnN6(N3^|}hkRoNmZ7dWw9hDa~bh#st!G2;WXoFZI zcR|}>fLW>@tsdPJaaltMH)+C5_%Q4laBgCI;B`E{Crz_Yg}-Hftlq1@rMJS1ofC3J zWcdKP^5UnSvo(p%07Ybp6O2KiaO;0OIwY|`3YdykClQVHHstB;5lJah0`dA2xPy~DPJ$-k#=V+J2BwgCAkX~!0z3=|pDt!A~dH-f^yH9_2 zW50Ozwz;``90#$pr!QSS3+&FSBM?<4^ByWZ4u-R|Y+PeOaj73Du#2Vn$%U@3g73^rs0Mu>5#Ju^XwyiZEn_G11 zaI1X$?MjWi8ik2&nAdFj)q2=}I)4a%cYXGH6ncTU_qf5ye{uciXXEUTk52Ay)xA-s z#ya&fPmQmmy`eLvBAUrR`ed80@ZT<4(P&{98*_B=dG)etnJQ93T-f`>QO!Bd?y-AY zt=*oHA#JUBaj&-8j*TgqH(d_$jeQoXbG z+4e<_hie1{{`2$)Y$C{U9rP^p1dD~kZ(fxr!6B|EKB}`&!fjabE9*+um+x=KnTm~d zVt}}NK;$2r(tm}G?f=-v>+AVkP0n)EVj5o|8+*e?M%LySdnlnL28jl44Fz57sS*Ox zc6>IyDz_?znw0>Q#6F&H7ZDpEP?Ea*Fcs>85lhxqP7-puoT~-dD?owwGLN7>TnA9YSYsV=b_7(Wn#DkPKJ~avblfhXBnpgX*kap-lI! zYK~8pI8U?8v~;(&E*BqNe5eS&t_nviDrI(S`02a-T++oz04jHRT$M&_h00AXl%LlL_MjqfX;%*_gWxH6D3IPSV z!Ec}B>l4rt2ReUA@7!oNc+nr*e`Z-yRtSrNhv3-d#ycyr^_0Kg46^CxWJC>Yrv-CP zCbZvxk*9*o(3PA@75Dd&M5I`Pp$W-U8yif*_iQ*uNpmKP=lHJRyKLf^SZOHlw0y%3 z{a0?D=Dv5OHOj;H0-?)Dwu1Sq^*j>XSU?@N*AiLF=f^e7IzSj|S6Lnv{Y@aGsteOh zj`l_d$e`TAIP_k-oc0>AZpADew=koWGmHKhUlr2YFI$rqd-Xyz7g9(Q)A4{v^*GlQ z{Z%=eH58DgA&Q!k6lE1#W}ujRV$38BxVU!p?R7m{CeNd94OG?7SU);`9RzPc0plT9CY zoNax4E1YOL*7n*HeJuU-%uFH5^ICl`Mz*|CkL_D&0tRY>WgyU~d_ zuA>&1Gq^*c!e}R$XpLT!Vlu96!e`}K2u@H?NcC*Mr! zHp*+2vjP*>n}zU#tiV9WrM^|`AR2=&Z3;M5O`(Gtwu;*F@fm7b63BS4v?4HDTwk`I z*k4j-#dwZ9APWwp!XtNCBWBl_WI3!jVz+!!Yb#ANMzITCR*iHM)$dQ6-0!cL^|~Rl zTCeEo(ke4jw&##0*D3GkQVY}AFycb~rsifP($2&-#fF{mJ6;zn1Mv*W!cxH=s$Pdt zI9Bh<1DzB&0x*O_lqEx9!wbO7WF}nZLWw}Dn^Sm-0IPs3QAM1^unv{9BPIyp0usqt z&JrR`?3&kSzc*Vxe25=KNxm~rULIYK&odp7X4MvE=M=;>rV*mdhd>jpN>r4?WT8Ny zQc5l93UNmgIY=pu!VDo=7$^3~1{tbAu}1K*ngS@kUH!Csd$boxe!6_W&E8jW8ud!1 zf-PhPB`Hb*ib8}UfCM$`c{_RR_2b8TzMV{-?2{&55*Np*j}=ZTF$rZXWLB1ti-1T# z{=`t)-R9RY3*PQ`m}XKoBr2{G>m-#AGZmaq}7 z_-AzbJWg-=Jn^$PI`(<;`2*JH4c{d|&szz;X_*54oT$82pO%s5FVG8(l^8=J1V zs;t;@XbdS%;U$JvbyO93NO~s89W+YfEZ4q0Rp$YbOiM(T-P9&;kh74m3LrU_my^}U zB;V^?x}8iT&JKvJ2imKGsKoAx>;z;yZ$5GNo=B4F+oCdrQWLQHJo3?NyZml_eyXLX zTh`6C>{~=@n?3^!0DSC%REP+WdSoCSXOV~&5=mgd6qr_UXv?&U))#My()c}pvUx-2rpsZcb6Vi&IkbTxJj8H|x`!*`IHq=h}v<)lGzefvl2&o1lX zNM@wS(wysIWmH*YD9XD=M=hkq8X91Xy+FxCG&5QT3{W6T861=riw79e^ln(B-)MTh)UoD!7wH;b>7U-ap5Dsx>{Cd+&nHGa@7M+q z6$n?amDu$cef<}2vXuGO(H)AM8ID;Un0ruEP>NJHM0gOvh3xd1Pd!9~7>f`R)QN_*07_bI zJk7E?Jvph*pvNE0EdI>-nZeu9b*H|>pebWdmV#t8RR?6e$t_`{WUgJfm``|?icc11rOLwTV z>pXCGol)~E_IB;E)0k?i#Nz<_?%Vsi@io*|A!K0SORjub82Tcptwa$z6B7&8w zFeU_9%#z_T+0?SjHdUD~pluJwOd1pv6xXnIJVba1pND(-bA``)xtG13ygwo{&A8od zzifKV`r@lZ#b@y$PWfkYn<=@+wmMd9d8?x>8FS~m-`OAMtU4_!H?(Dq8el{*3SyrL zJYdw|lDC-=uU2-<4ADWTu}D}s4vr`6Xyszq>vAWTgG}Sd3GIe(3KfIuRyNC4q#<7yT4Mx?fSPy6mW%=fF+nU5b1r(g1{ zmQP_6C;nb6N;0@agSUQ1U*#@}V|khn+Ua}N)AQ@oU2nCbo1b(+Dyg^*esgw@Dd}Sp z%T3B`eF`lOH(P?KA5c^zllMJS-#>h1yhUZ>DWZqiGktw|q7A$G$SrT;gmS!&tFbnr zp>4(SP0+A{RpJR>TwDlt2ou3Dd8ocKe0lRK8!$jCEkg)pM8(hY7=CXvpXL^b6n3&o zE#vwaWEzYXmV4|uV5g0RxS&d#JkD6*_!D^{U-q4yr$7C-dF%IEGbXC*ZY%=8R5x_M zi7sGf+|OB(wcA^{Zi-g@)|YQ9d0f>qdgbA5VyvakX1%G>Qw^R_93%s5CfU9oJi}m zJ2%R(Ov`W>$#Q)AOTG!+OD05~DL5B84K)!D^Eu&P)yrh%dsU&1H7MsxqWss3tdV+0K~!C5|oS^H`F{($bi$=dG2$h`f-=eXww zPC>fK6)H0j=K&;KO01)!9+As<5Skzx(r`hGP!4?}N39p%>h14-?R*3B?06f9gjOL) zWHtgK>Em{S60co){^R%G_Ag?*_rAY!d_4N;1AOwrxyI((pJ+UV`1VVcd`HSIHLBaV zp?*Rrt04%Qm3?nsYMq>Wj<>g}J{>9x?)mlOYZ&wXYkG*l9OtvnZ`(&&C-zH-{3}%Y z+S;#d-hc*;l&b#t5#Jfv8?fi`Rej_}8CwXX5=?KYTQa=Jza&4c@Csma2yT z1+@N4<%3(HX7n+J!;JVGr5?3g583GHF(*Y8P#876Dh#?BoUB|<^p9O3#NPoEVIqsA zmuky~a7cimB*F|Qi4icepg;e)^yfFSzPf99F9FdY`iznyHnk>DmjclAn>9rEDC{p{ zpVmas4OY@@uQJ^@H!WM)Zl~kHMt9>8^8LNFrmfUG3vCWx!>psRVeFT2QBIL_uY2g5 zo*K)q47PWoCz=sd#-I&~eb={s{CW3KCZcU^5(~z)V!~8Vi@LXUseV8hnGk1_4c2S!XE5R zImhT&TGEv|p*h;j%Hn!GMq)5+_c%JwhT7hUsLW5;N5CGYoEBOdXaWi$fkH!AXek2F zib^P915=4xxfKi%fr>K}NwHWVL+2Er8IBACZ7S?^eRVBdCR@IUogf1Nm|jPF%Di-5 zWuEeVMKjUF5hN{X&#Q0qhdHab;xqYT%us1k>$vallew`I?wg%;SP)Z}UNg{VH2&u) z?550reCMYmM#Jq2&yU|>ee$-?n5CLG{cR|sPOP*YCo2R+aY@FZ!Ayg@&k_uQOIO)! zS)2Ngbb4KvrsUChKKjr8Ts#y0h+%|pBCFpP_R}`ls)o`?bpfu2I!;ELwJQ6okd9B4;IRtoPHZg1yfgMJK*~ZsN z78%L)V(ygFAn2Y*L~jFj1fkc40rd$NE#q~KbacM0yZz(OpMmSUdueokE&k24=1eRi z?4ihr%#Sbqg##yGp%xs` zTS*?nd49aP$JerQvJx4ZtJ^n8)w&oe4JaYkb1V|5c-CqW3s;IS)Zz7o$Q|=x3}tC{&*athYSRT0Z9ZF&rPf2Q0bB<# zfh*)i9_K%jY5vYPufEi+ms+*ZTr-{7M2GoWqvv2DH;91LyXYUFH-OchzI>*t{g%#B z6)H{jd34w3#7XU7WQAA=)MNbP`jb~YUa8j7wm7U-Qp} zH&`n*I=cH@a|29Z%2FAd_A-BHy#@Lx_5L4nzLVV?QqeLTazZp}$CnIHu#s;a)U+~J zZsBPgi0;i)VG!IsIE#^%sSuPFLqd{nXoqKVVlIedk)j7SAJv)>C|yK{)Kt!;u#{F1 z2M~K1BVd6!uvlg6OJL&Uc=UE04qtwcKwXaCkTpDclO^>H=%HGoSaD2I&W0%9N(l^R zSzx1>$u*)zHM2l9WG&HhN`XWa6OO83ebFjb+722pXm15@+NuT%CJdJ+fA;%2`F-Oe zw#KJFd!ON;Z4Z`G0%#0ejVhvm0!%?n<1FpbW-h#S=ezsXJ93tTxZ)m5dyw7znsOju zDK0$3O47&3z}*KFlxF*KPU4PmA;78D{snLXd&j+V&Y5!RDO0(09~>u3NmG!Q^HAd?us^0hMsM3AGOFwIA zcGZt>n7IB4kJbV-pp2-77H5D!Rz)Wm`GOWBD1ne;B!rr^sGKDegGlU3lVHRt59#V4M14pcCkar!}qV|BAe?5-UN>_Kjime zczZTg9jKt3&``=4A!7NcEMY1`nmM6~RHo^O9O0s#YqLw@kS)hkZca+>a=}m;NyfmC zn?BHN$;-cI^x?hd8TEncN$GW_M4<@#*yz-XYyD7Id>o``Y(=>YP9ikUh#Bq~qOnUe zxbg%i>v;Yw^;>JW(^ZCwBs1NSJH3!k>v_u(2BJJ=w=g0_B&Jw|Okf3;3iY52-Vugc zv$hpPW?OcPDuYl`-~}Ot1(^US-_2}liOtIn+9I%UQ!6>XT7A(ecs_ylk?)V2bNz0; zohbP=`)Yowu5OD*W&&V0Kc4#f9X8NQ5cni4Q6kWoD~fdBJSn{?owyP$QMblrGJyJG z{r>XhqkJpW<0huG8RfZX$$;sriCk!^w#uEBpsu8B!k}>Y*LG0>qaH-cj`;BTd$MY3Ahf2~ zcQ@(T+S9S97kiF7&-x+}irz6dUO}whZRah7A`?>t?C7!(A@~_Tn z>W56CZMW;=fth_Z%gSl@AXXiV+2e@Dww-mmrY1C8eaO~)Aa7zVbIe`QbF$j+&3=Y9 zRqlgD2&;Qf8O}!~oo&~l#7_0}!e_Csyw}qx9if~0ZG;-9rW6sT#Y7wsSAY;PM#8Yz zJ#n~~)OkB`S?-96+9Rr?!juoL2w}-!idV6I(L3x1Xw_7C7bqHZJf_wMUOVWId9MH z%8CZf$QNiS_PSEnNotr8B9a+rr)sL1aGkg^-6=7pAuPAJIXM%Gm1LT6l2X?~S_&FQ z5rb0^VOafM$HZ)q2pj&VE&uaSnVJFXVn7Eey1z>C6UWcn+y@GbjrBI3 zX%Iu!Yy&~5lH@!1l%py)>qn|IgM&pMx>=&==O$ib_k9D|y8zmnAGg3q&Mrga!=-tVj_TrASGZ z(U6qFi7T|yCd|;O9DoSxGB3}ArUHUKot;^$SWU0Vp7_sOQ0KB_pLlio9pWOX*{^)+FL-nk^L3oe;9=%dhf_H!h84!>&Oo5Jvs}TuC$K5~)Pdg2U4;6w{ zAsE!K&{$-^F|x~>8@yh&;ZO9o6WfOXhAi4RY-LjZfvwASF28h)8jFk4MJOc79HE~b zDPs2UbS(EBu&@)pYvxHfwn|T8g%^D$Yq|Ak>fH4_SC8|zjQAR^G~C|0#W(hv$hWg| zgjq5LVSg2_heKcDrVM1oO(_}zd@lM}r9FJeTBM0Y?GETaN;@j^W3j&)b{ms19jAO^ zR3*8n%9OZMks#nb(U1_12E<*#kh}t&Vq;eFNN96HvCI}f7(GZuML4_Rm|7!Yv?sG! z6)`JJMLnkQa6zp z%M$>Z4WR|M8hBLecd38%vAMpKUk;DnYl#nXD-EyVi+=Z0LPHMBFG)*$SAeTEQ~J9F74>*t23<)kRd7$_-8DirVqMcRA!%5 zy^+~`Xzq(g=g`IIj=~MoG<)hV*mqz1h;mI4 zOQhJ^W{6+`R<3O&ts#mX2oLcPu53#)ohC!;TRG7vZ!_X;TnSvj~HkPM$=x9!M2=?9=%ZAtDcIn7d6qXTLU}W zB}MyVZFp)|N*K`@XXA9LYUGrMU8@x*HA{Ydi$58RqxyZCa4YVq>5TenDEP)WT50$f z@J$K818QbgaOERl5GrSNYIYl|O^6}^<4QA@m1_s(63I^Z0fP~01Rq)K%6sL6C z+S^o{9pu&fNN&L@u*mdk@4MxU6+=vY4LT%|eX>r`XbMxvifP`g{*|W(`c|sIhjqvPQvvgBjnnI!p_oc*g@kdr&wqJ2j)qc! z$6gyKjn1()x;*32e3r|>=iS)CQMVC5xsBGCLLfqB{;|e(((wIWqA;s*JD{hTLr-|k)ER+skfkzpHQ z#>q7vKTu@VZ4Z^HJ@ZPXeN(xFxpZv~eSm{%>kQbObLDFNI_UE^_}fQo zH(fsUq{fPRBdBUlA{`tyTH(zs}d!;LIgeyRyiw5(p_`CFQy> z+F2qo!1veVS90Y%T=GR74Gku|U;%fkJj*>Ru5?UIUpR$f5J?ma%(8G)JJS14Io?na zJrDJDOFJ{>PA9~YU5bn6L~B{I4yC2(RT&K+<+_w#FHp>fKa7HXK zZuGcYuGsp@+s<~BeDV2OX)!Q@qEe&)?NvL0GSij$BGKajGa?0(u5xEt}j#oyD;r2$Ld$w{c5MS5HYj^Kq|?Qy%2Xmmg*Cb z#E6AD)`3Q3OsH(fD7Xtx7pSVy-D;+_A~7+u^0H_#oNfLPPJw&QlOTq zL9NTnijl5z)yx<4t>{TH(ts@n97_NR4I-!~#r6E;&p$o>b1%PN_uk&EAJr2~2$hpP z-HAvGP*e>mXo|2aT#b+I!e4W5gZ{Ot_n~~vz)`)sZ)fo8&Q3KG8M+l~@+tvQTlcmV z%@b^#!7GwaiVJUBe5D0~d&mUo#-!?bmGHaxBD(_3bY>Fovk;@1Q!SWCAtKWPl?9J+tMSH?@-c0E7;g-NPeUH$R=OVd8m8-xWq`Nm-IUBC zQU-zF*L^8)z5QT4RY8mz9beAIVY%1ubtb8A^sS%Qkiqou{IJh{x-Jp6BVw#IP#CxP z&IWH%LJlD%41&vcIsrsfri;a*bM}4>%474j2CliiUjo&x2tumTlOuKVT>6c27n=>O zA!q;rgAmlE#YZ5lcmlQv&El#zkOW--z7iy2af?YulR;=)AW#8-sFF$2ks#RMUcieh zS;8bqvIsVyYRB%==)8o7llXd2s`(kRkXQ@Ky4U?=;^txdqxBQFQcJ2TZnA=g0R6ZJ z_dHK^f`Q4NyYY1hou|Pv<1e$){iyq36~R-+K)KiNAN74R7YHaa!@3c0F1^q?@L3W+ zoyn*6)pV#Fc$Aa~!YEytJ$7xSt%+njrZk(#*NsG7(9jiYArL+R2I82sD1KBwng_bi zxSEhUgE|QzHW01^f?GA0W0f@%@uK=Fl#w1e=4TkOM2SwXGWo^^Isw7B%Npt)Fcc#s zo3>-}RNh*~Wn7}ZAv88oNQIy~U~i;j(X!&Gfd-&yAMook1>4(3c&vi=Xf47Bi4n9l zAT7r>CFc~dx>=P-OyD3QGI7JPWehHG?;W~>Go8QB%j@{knT}7bm(dl{9xOPvT_0c6 z<|{Fsi6$HQvB*>BULPz=$9&##wh~pEiJA$Vn(9$aHS+a;7i`Uoj=HGpPKCe{l{2~~ zT-tLzwkb^SbC)@fy56t(Vv1ac%U6wPtj0myL7JF6YPdv2&CX!G99?!c zpyt;*uSGncC``s;yb0@fXFnxfJP$sLWGzWQIJ2>^KeqhQ@1L;af%aLNBn0R?1;B;^ zAxE6@+l=n(B zthj^%6S!*bH68E0kn4<&y#k*ckg24Q+900I==DUO?Z*L&NMrz$rc&p%xzLhyMmx6d zKIPzvnIT%ZeK{KRt9bj~(_K`mD4L@ZzX;~Tc-8?5v{ggTpN>DDf1l64c0055dQu6( z8dQ!QaB(4VY^C7JI7Cv`6{~^P;>Cx7MFa z^(7`sMwa6|Q;H;SFI|&cdo}+%<6rpA}kRZJu27m}ZJzc^4Qu zF<`aA+xaplD)U*UtqMiYUdKPz63p9T%YKQ)CH=ErE5$en+l6i$o+BxmGQf2LRLMb~Qyhe(`sI{BJ*tEamrX{ei*X zezMvQH6EICJ{q>ndJtH6w%OB1#p%BJMS_T9vy2D*8njDqf9m-$c*Plw(zrO#h8fHl zAP3d#s9TFb5Y|ei=O@|kMyIW_fBnYmfnL+Tj-Ah1sF8BE%T&1%luFwcbzC6bsiP>^ zpKhG#4Nfm$h)TIg1tBw2OEj=)6gH!HB$umlB3lJ$Fd-em@m3VvFb+t{>W9=J$BtF} zHSpg8|BErJOgl~U*R4OYs5W*Rq~1Fp_rt`FlAwp;GKA8-K;g*Rk_gJ;JgQo1TC-Yt;qyJ}Tz9jOFrm{PfB1Ia+G^_2;K6?|Y!k zUOJUt115(vTp~-6)5^NaB1f4Lr8=g%tC$YsA@eQrFA~=H>LW)`A@;U@SD4a%Rmjlh z%8%#Vu6Og@5s0*~2#o{;5EYRmPJ$DL&})#Jv`Jm89IzV|NJ=J4s#qZ$s#NB5P4T*| z+p;wuf=>W^i!E1TLvB!^HsSUOTUfy_V~*uU)kOd0gEx&$N;8Pku=d!x}79IHWR5d z*p)+Gh#`Gj*2Vnvw4?K|Q*ZT;qFA-w?+@>Z9V0dUv;FFf`0NJr$k{s!)arDCOw5>I zjv+oVW;cKP4&$XWw>h?*D_c?rcF>m1EX83oV@>)ZO*{#-J}*)Q1P;lmqSy<+Il+VofY+2Pyw$7j_;o-0BR&zqP#8|+{u7mWp#;@M-Sj>e`6ZI^>$Lwe@CL6GI z{#Pv~ROw%I_kEY!x$wgp;d z3vM1*HeYJnVc)5XSk0bxw2Y5%qU6}#S+EMiHv!XwlX7WsEr{q7LJQGilz?T zQdllAOM$R1!Hmy4P{?$iJp~f6)m&Zic&NR$w9IEr5^2Rfc#W@ewva(z1cKJMeSSN1 z4yM136%0cvh2JXxC};63uTiB4J$u}2vd&ys#X=Ith$ezT)Eixu71W4XBU}P5fou(d z<1%VVCGKa)GKF)H6coF=-7=|-VM#wJq)+#MLkZlFcQ&8+w?yE0C-<%Sd^z08_)`B> z{*%0wnyGdb5;d~u3JF52=>pw2707*W8Q~bSLFYp490Oy(f|K7=W39`dUmp5#xc4$a zwMJ^TOjRk%{P0s(iB=}4XUru#b7jr>Isc-uPD)^ZRKF$jqnixWR;;V)+P zIOfW#u9m98rfSBn=}3r51(_T*=ZPL>HA6*In>GP~)U|bdYSoYMt9KOza zxmI3nZuC}VWEhw;_;vnd)*C?!f)FrMi~yJHmID$o2IU7AzkD$~@-U3JM1u#_BUxY*cdPdZ>rN7bv)S#poLQ98b7i}43May>>(DCMqm(R8#@w?tji+tw5(%NS>^ zq@IvHK6bq&)+++8e9hn>DOuGP$>z*vt`~p#so=`5G7dp#&O+0PFsbYhN0K6uL=YsI zoY(v>{nC3wy4E9#?H0jV<*r5oOl zBbb3$;+LF;^FF|eV~|oM61KLbB7iz;kVN=#!QE?w_jAKR9B@ri0?gsOayzGZC4AiL zna-DmU^iK(KmDZsa$MqmZeM4WmG$py(AL`AQY|X9P?7ba%i+}hOb$-Ulf`up>a4T) z4b-W?XMv||vuw=wB5JRnQB~l}Cq5qX{pWF#z^u=_TvYFz>txYb695Rxlj@0IB?>ZD zk5dZ|RWprgh}Je*JGB)yDZ5@K^PQx+UN+iQY@580nA{|1r~G} zKG_EgjVhh9a+zLE;D=5d>`@mb5F7beKl|$bRg*q$dIq0Z<^Ag8PiwzOfEv z4oLNi(()MC4(+s(mZ${C2Tw+G@p>?n`*g?;@H(*;s1jIuC?qa0u*Wd# zNZpjC>ZQHV{Br0DX}B4$LXpwp)NMH>s6vILKoX(p%GaHaePD~Z=q6naRjJZAv?CWI z3Zg<=2MJbGAh?!%(kZFhx z0S$SqpCosNZZtMn7r_OH{W8=`OufpX2)cbR}}@(YoH*K9pHGwW!0FavqW_6R3#P zQ61|htD~6>nxo8t-U18zlhv|8GDYoR$~cCx6|oR$3b)|~(!!6Ba8Yo#bX(?v;5@ z>?#)*)*5b~ew=^4;`iv!4Zpt8*UC9MKj2$B?ES&ZzQTUJe(!_#bE{kM3Eh)Z7BEbG zPA=3SHl*p`T^xwD#wia`v4-|a+SWl%H=}*BQ0y=bz~0x=pHPr%0U7|VQOUex8Dyh^ z6e9Pk2BNJH;S9?{^bV{uzFy>1j`3@&NZtNgnTYQ3?sL$LN1aNQ-nmxX{3JDUJ0UM! z428x41r2?=+c~os7W=0a=8MZ%W1TP>Zc05~kKrRAn?RUwy?!G%ev<2=qNrN)SZ-ow zQnp1AE*)p6*Fz%<(T3>Y19vI+Ay@RBdKR?Us*Oo^Wcv;0A8?=idd5uiOzM&8x+Vai zDg?w-8E>+h>xN-4nh`T%EFRJ6aQ?{y?$xR~w7#?7MkcNjHl&kfj!M%f@(`N2j!twE z2Z6970xhMYEuNH$D?^5%#MK!vO% z!leP3Dq#lznJL@Z(b89b)DSM1x3K=Ln7cb9)9Z~%j` z9;+#xqEm9XmR*^s>YpsWyN>s&j!UWOk#X*>`-)xDSQ+lpfQ?>Xw zh0_l;9T-RRb#v{kvb$)dI`I@otzxWH1lm&WVIGOC@@#K(Jm+wRmto7tSf(MA!!1;b zm9T;n;HMxA^b7QD-ObX#Dxp-QX0N*Y)K;w{f({99lDO3xZTvgup~sW!M_b_^^2FaQ zMBn*;uD$y)n#WU4gnF;*v*lUrRBV7(36Fegd@#7?Ud#9ti!-{bh9Rv9t}V6R4}6`8 z?cv^d$$#Fv5{DvVvkM3nYLVizmfMl zj4tZs)#>LXq5cbiKZa|h8kbSoRQ!8p`~3P3A1WU)SmpXHW9db&9?7)t-^+>0KPvhG zdD(pXpm49<+;r|Ux46h<;w67DGHgv~?Fdqa+|_Vaqpfq(9DP7H^P9Yh!z;}sXo}j_ ztqw??L~i$f{M_`7%{Y*3SW_Ya7GlJ~z7%g0mTR$V?Eawq&Sx2gt-3mpdHy3lcInO& zGe@$kA3htaOwjheU;fz#t3meheB{j4m$&xz$%@JR(D$!H3=UrSJWd@tTDST+SW420 zMN+yJYUdlo0?CBLx$I}bXG6En_fm7t?{{}@9ZYACbBnG9G>A}v5oi%6@D!C2QW4en zd*-j66Gxvh@nX80wgfgCF}@+oKdj?g*5}mot4w3K5ZwuWX~rNi7@w1QTPfKDAXo82 zByVvR}0pj+sB0gZ0!kzV-i8fHu0V0C3Qv;`TF%M{lwepR)LktbAe z7V7pI*gQM4KR!PxvArIvXZAMkRauJj=iK@-^#lIA(7J5V8>Bni;{@|Dy)7fq;ytl_ zRmHDl{-xJcMQ%1={pw%e9wk5guI&PI0=(Mk)~d`it)4J%V7qtqhfni)Qngx*Pvn7FKe9*-R9#lLTDius6Icem?wR2a<`A>4J^l2 zk1G7t4U1Kb!<=v~44JldIU^9z?zXj$2T#+-c=p5L#>>-MYM$3Dj}FyO^v2rR`gCg% z(h=9IW^>%{Wr`<96*qQbgn*Rnqth<(DIF6}H>a13K-g3LfsA+dRTqBtW%y%!^LPLH z;qztnhc93I4x{697>GW(i5%n#a69^VOv?Bx;Y}t9E;#5fj%QE*=c8}m(8}jOy|wo7 zLB5Dz7q{K&N5MZfj>2s{d`q9x&6?fv;00iJ=_*g~!qhZB|EnW?8LPB;@&EOf37?fB zGjNTX<#x&LpP<(mv13N`T20K{=W{B)N;y1;EAK8g3rLGrgu}Y}Q&xX4hm+K0I^Zdh z6`>zXbaD|)B)c-Lf9^rs-8Ev@n7LgRv9l^vHhF_R_^6NOTp6ATR~~kN)@515k=t&P zU8FoMUs+!dxdXm)^}MuKBWE${^Izui=)#Y=dmdzLm{{sY9g{Wv)wdBkkY4v5!FGB| zV5H?{tTfCg!Ri>l3PjznWe{)Mv0QqEy<`s+#fi--@Ytv*jfsA79hUEDgj^3Uz*O#})>GM6~R3EQt zk=2=%AT+m;)D!zG9S;8ZsRy!-TvFNJ^H3lJ9&+qy3;_$e7d zZz}V2cig+M%&#MwugPU@CNuhc>i(czAPkB$Y#)I*@9DhTK_?Dz*rD->uW3+1WaMusP0YjEJj} zmVII8ry37^7QHsRPNtbdp+}U|AGbS9CgP9|c6d~F^Iw);Ej-_Q@iPd1*7F~;FM;LW zhyMB=@GbGx_wV}psh_lqL2X$qG%KzeQW8NST12AjdZJ#5>``b&Ho;wrEXUOc^-crh zxnK2f`@A;Bj_Pd9L?L3UOAHs{qxI{QUvKsgS8{N@{V3nfn!0bbIQ8`U73*+;QeTH> z*_PIfp-?1Xj#GVm=jngC{(NHJpPwJ)__=s!6Q=I^BDE^KmE?d=ZHAYZPH3*oQwwArG7mNF+zIIJYjoCJ39ZOU)50 zeDhgw=XF{oDQ2WGbO%<`OWQ8t^O($)T8K-PXdCkj*c=q{Dod!JVdtc6cM70+CDn8$ zvv9dME~>C@*;NPMIxEF@+9(qJu!&H_4q013C|!!qu`y0YYg6SxAYGU*@aOt%G3?*Zi#k`C~gcRJYx6eIYl2@p( zhsLMfy)=!?LSvL!P3bO-SYE2(9KBH-A&6{LY7l91X`WB+y;E{_{BUIE`a;aES6VB! z?E#4ajyad7>U}sOs8PX$}1l7D$NXwk+^^8;ArUMiyMiEvvSI1yT;Q zRuw_CSi)Wa_{A7ZMBL8M4-p3Ul8P%$p+N+cHm~U8u)12MpynU-Wl_S}TbDV5K0C*aiJEI(7@7EWM1UcuV%3ijoDM@XjZIG;2?7Mf@J5?W#Ny2(w_ zZ4WdZl*mwMn-^m^UKwO!LanZxYZ^+MI}zPh-_W+Wnh_y60FY4SvQj}2!ogril3ebU z`4qLch`;Z1HeIW4+{i>hVc!(SJwKp(af6FGtNumqyKycJA{MFI+SUI zLu{%8!3R}_H1{L5qsO`RAeW^4<-9*rJ+_BO`bW#_ICSUM>Ih1mE$GRq({aYRPXbv7 zvRVtBkrV&$)VEizbQPt#Oe2_OjP(&00Azvz3nyRsa^z5Jg9!AJUU1B@X;yILkGJ_C zJkUbd6EkB7B#j~ki36}8+t5UWSXNEGkK1U=MTsR*OHB=KyF^Z2DYqHqO@O7@+qu;- z^(Tc}C70Ua;9mP_^yfybTRh~PZ+!Z0RS>e}y3>23TeAy359jk%KBc=ME5m^CVP5ZG zVuTi|M1d>RbL?VEU>azSJ_he!i(T$z1ekWixI$X8<>Z}tA7&C&N)Es`n2%h%!#yYy zFs|ALfo3lFr@2o?2%&C(ieY|fUp4RDUYt**I^xE7xYs~#QNMViXbDgzMcB0}0Y{Tf z(x#y59jy(;ntIKUz{(V7TUE!4E~5Ia-m_j~V&n|hrxa&vq~o1RdQ zB3Ipn4#{3eBlAe?Ypp^WT6Mx+SXcGkUc3F#a8~h0$$6|wZ3w`FLZo2VfI$#Slcqsgk~nrf<5Y*HoaHbfc_Q~(jZvER-VdqtGR zgT2>O@E41xThCm-pDd!CtjAArIxz)!W(%SO$<~ulxjkv}oNT%#l33yv4oPT7Mo6Wd zT5bu}@q^MejjBJiKf85*ZRNG8ix(GlTtuY*h_jdV&)CAMng#-lG%Mm%%bNl%{*vrK z%BWJWcF8SX^N<(GsL*bF!K$b5i=>DjumByNW-q6PAjxA5qyi!@{758z0Av?2nMT%; z_htNT{cxeZ&+fD{bb^vpkd_F@%{`92tB#WesUxFg`?XS>$=i*2yY)upI`{h~EmE+> zI>!3~2@VW{MU>?IiIYirxjcxrSvY&VSH%GOL@5>3ON z#M-juJNqb5i{omyxhxI^+LD(-7gW2e-LpJ4Rf;1H_b?sp0)?y21t;d*H`LB>pFk4D z_EY=){co6D3=Z$1k6LU$xKT?9x=Gl;SW$F3e_mo=@0=j?xd4=8e(Z83P?COdZ(JeJ96(Ef40eXZhcg9Mly2eXQxlX zKw7_hw61Dybh^`mIZtR#>(LMbc$Mnv$sIaO!VVMP2e1a+PSGpGnF!06#F{NEGo*vK z8l=M@3?#!2(KZzVMWO;nHNa!SwTH?P=V6Uv%~3ZM&QThD%lpuW#GUM&TH+8<`{(#R z-`Dob8x(Y#JrCqX&=*|1mkIdLO;2!`jGOp8x@9T!=V2!74?h=K$9f;d91sk+D$-`4 z_ORrp2mvTy4j863H=VtX_lD)FS@`DKfQjscDN(?EcP;R=)SDfDjM=u{AIL=QKI^9UZ`?A@ zwf1!6yYXNYfElX3)H|;I?O2SOyd!qUy}i^)1DhZ}Blyizws)Phgo{sDcpAtcqeiF@ zCQGd>z{1(Mo{V}!AK#v}^yym%w?F)CocP#pKAFcz=f!N(AxFJcF`J#yGmN>w;jqlZ zLa7hWdD-_?pX1%}n?Ftqz~XZb>)vOhTf&$0Rd9NbF=;RNz)ttQ-l2V3Pe}oIGn@Yv z8vo^}HsQZq@yJOzty;<}y&;=yoVow8rl&(zlng+AASu+@1y-JPqTB97>&Zz6?o*!7 zwU~bzi!Tz(aJU?phrLkQ(utfg!~uJ>^#dyHYU#XL&JQAyUWlGzT)P%G!Qsk2z$hhm4w*Jb`!>k9T?n5V5MUQ2J$n0 z^=NQOjUC}ya)P4|)PSpG;Y6zZK0MmD-?-;z!R*2Y9IGoufQ9fgRV5Qbi9ni6%4Pd# z8OeqgDyGVk*&mnq=@(%`th*XE)ceFCw;j4=FS=7zd_-z0UqWI;K?ghc#gZvQMOc9# z#Urfxaiwc}?JFasKWQdSAlc!p*n-Y`%zN*5bqnq%**^*2)Iv88E18!~i&sp5Q4{D% zOLRa{#S~_vnUD$9v0H|eInoz7^Kc^{iDE+^|2Di5%ju10e|7b|_{Ooe z&P3LyeZKTZ+4~R(ih5ncPx0i7@$m(EKd7R4 z+wRAXFCeGX9Eyd=hrnr`ai_F1{kIvjIG;@>l9|krv0j(1f8<*$=O15lV8=u7RF9AK zJt#c&r)_)~P1hV302%Mv@RUYkH|(dvTEKK(8H)v8HRAfE`2zTj^S7CvZjKx5gL*&D z`1WG4FlX1-)n1GBr$wIsHGMssd$mh7OYtyjzf|riJ(KmP#pwEpRIpjW+NcQFn8@}R z!xx-A?teueqk5Ebs7+{2-;7#+b zy?3QTyy%4{;sDDwYQm}M#Lm&;43K_zA-H^PYpU;a)%WVFJi~4o&rv<;%=qI5%AhJN zMfX}-1ePU-IK4O4O-iSK)M^!9|jw%ebo@l(g}*3pU$C0MCrZ{gC$-yZ?! z97YaU=a2E!3ldbXQY|aQgsB)*bDi}Vi$Ea-vJxeDt*X)c?e;%Ee(=`o^9{WlbwU3d zjXggsXJXqW7PClP3Vw;^FQ@*w;$t`bxb^dS>*pcw(^@0V(aD#J!Bw~mrhBlC&FPsEuV1}Gt5yL$>I${BjCSECY0eU9yn zX|5I%3UD^ByWu`_f!?I9JvaFu$Ks=3z%%2W6l@_WMw3A3Y>R5?&c9ykxnJ;(nxFYa z7olw%5I}G%_D#GCsC{RZytsYt=B*3(h!3pe{pn-&w?qHsxJPIE$gn^zWjfw!+_m3H znA4iJidhG}T^LTszHO()_Tw$a$FFeq3e027zM@NB%s!z3F2OCa%$iE2sR~i=4c3QTG0TLK!1DIo$Ypm@>9t`t}Z73d=y!v!J=B*56lHKb}tL8C?NVvkM==o?=9 z3Xu~}fC5e)F|+dqS(PH-tq!P9hF}&MBuHjLDUxOqCw>9*4of8^a7*5Xjx}Lipim@F zPtlB%5&$H;fWz8fg%{@pjvf@1@X9cVohEby5E@;r#x16orcO^uqOL($TnbW3<*#wU zs^;W%cvA)@G0KgrLXz2PFNaq_htg70hEf0tte1aR6Nxt&$8a<>I|bS%B7!ar$Z!DU()sGI^91FGJ?7luDQFXW|g!QDp73ft*^JA^2E;f4%DV@aj=cX z^YLl_?xfYpSNq7od8^+GyE1WJxbR$5)})|jDP_`J^hUMO#nkpjf4!cSGh_|xURApu zsX8v;Aw}$IX-;~KJqZpG}OK-(HqW5aVz@CBZZZ83PF;;pWAi zXm?bV!PspA+=X|__uTJ}tI+pB9aMdeC7xB5D+MJe3&n~j9WipVXQM8XtGus`f0d@5 zX}6|70d&|ZV(cEeKf(<$#HV1q58WUhkvJz%N|evGV{)XA;Xy0}+@TPZ1OO8mu3`<9mPWnLGJpOLxc+eRTmI>{{AoBI zlF)gA=WG;N$Pi*Jn6MVYIjBVd%{5}ENTb%6h^(GEvwi$|Gh236+K#{(WXQVVed~Pt zU>-l8hhJ%6$b!TjDq&jot5K!Ae$mwOTK9T7T1;~O{f2*?6B4wB2#7kSU?QMMmPuj} zY=T90M&v{pW3E5bITHsGCF}zIA z2b$d@BMvYuq#`HgCiwtg@gFQyAk%?63cf^s1N7p?j7x;II%$BQsT|p_d!3!qZJeTY z5Mu=ufNiTtJGYIWv3p;=K8__JRicN*UK)B&{hayh?%y#gHqurJqk|4AsL)yTnvbw1 z;*jj%^`l&!T&>JckF_nSi5S##!BykSh5;Z1!z^3hf&RWe4Vzm{vE{EN;YK`s^!`oX ze(M_ASCB2N4pqzu#hXNvZ*Bc_zt0H~nl)8I7PT>`x-Lec=P;@Na}$u88aeZDPRx!GjGI?Nt_gN~PrA6w%RBh=4POq(ulQT;&U&Z+9D>Om=2bzu z0skPLX&=1FZ74>TXH=z-F;;}VN>rwdzV!ObUcHxnM{3wC$uJF#1B9RmRv-mssDL1_ zs3fJ3zsUSg!uK9*y|i&3m*>)+$5_Pil)ZFL^KVMnzAoOn;<&WBVcH}(uA@9H-jA2U z$`u9d(Ad@rC^p@&C&4#BSBYz>&v2efH{F07j*1S;TL!XaEE%2U(6L&Q(y8`vEodwX z_6jVb2ejM6IC|@)ZN{~2Zx)z^I}^x|bg!1Q+utldT#w-f`(o%V*AG|a$z%1;9n4i( z#pITFmiPMw^-=q{{l?$=E2(>|p@Z}`s<)_)w&bbbXW-nEc0OQ)Au`Wqm)vjVUX?@n zxTXh|UUmE4O^<+fiC=>d9#*DRfhhGN`@NxA9qU;F3d$@^+A{aoF( zrh4dw-_3quN1M7VIfu-OOZxzuX7VH>Y;2vKpPRbf^X%I6+^QqnXcD`s4uGM7VHP>Y z`+WSN7YuQrP^KEV1}20%LO!8+@nlhVn!+$StHw1cT|_9>wU&+D;Lw{h$@hq z{a~~nuOIxqf!?-J@0(dJpsaCDuK48b8J{?2j%)M-E!2#~u}`}S9rNoT9%=0`uW zzT)h9fBB{UbC1Zy&}Z*KZUJ9mKeczxDC@u7zP^3uMv+9D;ozpgc>j75!M(`!G-YMT zV4`$?dUcU14|PB$Ohr@(SQm<#`F2%ulmd8_u8StW)^WgN;vhrF7Iov`q7 zXr}c%kx{`M`H65YtviDE_`SW-`<_yTG zBy^YKO;w=ASS3R(IOXPyBF)MjTsK)brg(W_xtPFFx0| zFXMM}k)`7uf7aH?6VfJ`j*xj5T-NDG!%R@zS2QGX;f>PE`Ed5*%uvRZ&(evOB`_I;P)gt>_0Xp^OV{T$jpeV@i&^_j!0QrTJ>Mf%TJLwyk5M=hT~%I8 z&~*(G%fy-5rak*An0C$gV{J{`3bJ)E37c62L4gzB2BEaM(26GDWTy6&K;^(w<+j$4 zx~d1%qxJ0W&(D|ZVfwy-6>u#_tHAs1)2^@&p(EY5`+_59h^dxAOx}@4>-qD3JDI*~ zPWBq?x#m0aSZqJ24=2VpmnUWeGOQsYMF@ofip#-Q0e9 zEVvR40CgaB)N|=$G}C3GNeRPCuUB=zv$kQ;W7$Q5%#X?9qINqsD}nTe65l z_S^MGw~Z^Pr>71{Ev*ACW}=}Ahg76N#1^yFJL!1Vu(lwpa(&Z+W|3GrEO_WZz4! zs(pd@qId#@KxkATATbUDrwr3(jA>G&0^+gNaL>}>G_eyhMLV_n0NxYzVB<&unFn)2 zW$bhvwh?KH0IYP~c859suHMdTBZ&r)u!7Y=|7iN^%v-49C1ZSxYImIpOa+=!aWp!p zL9lb36^|L#YI$$GnAl1^!cVhJeL@Rhb*#T6KcPB2xO zJc)KP&00u+>I`QHSuDYw^ffrtQBELBuSKcAP9~X28WaPjm~u2i#4X9JFsf62-@04E z$Bo z6d+{SG~%L*+a108x9&%E#squOwX88tNKE1?SF9SNMoNczD_Eh8wPTuO`>3l?S;VbI zso8lenI}%cQiid5+W-w?mOWw*R>z~!_L%r+4Vuj&)d_aRA?d+&kPU3*OVu5z$IP{r z`Xlw3R0XbL8^m@7^r#wC=?gt&GYz%$WM*iXKrS4u0QON{#mLE7dlht@RgIHVZ}i0_ zq0SUtujo}-(`$SNFR&ZsBb<8m_|erXS3|$fjh}o9&3SWc_1}NVGg%!Z$Y-2*EM`TR*Z|7&mfM=iC}uOsH~m*2X+cKXC2VfpDo1wFT6SJvoh8_)9;5M&@jlucSN z4$A4v`jegfoTkO<%8pr1R3whFP@q^vN}MO_lHpd`cC{A%h;JAC$vs)!e;CsY@xzlM z`@BIpU1yUsTBxXyT=;FBkVM!mUXuMXxgXH`F_B&u*2STqPy@{jX-)h|cz?b&`FYL# zx_=_+q{gAVCi=;>r+2>2=C9`0OK)rkyz{wV2$e-8+OQ;EO?^~9|KZ-7cV2D8&Nf|i zOTOXnFj;nqj`&?6p)Fi{wCx$S; z(OnV(UbvD5PUAd*OiL=cwAch2#EfvpDP7d4I+H*NDzM{Nxo#M0P7AElrk$@$aB0q; z@_b^pjfK^=Fzx18iZ)^({lrmwHuQtqf?G$@A!2d{*X4+R&h&0^MY|{{;wiE7qj`?p zf!9ECYlxCk<1S|o-nPOOOzOtbt$nVB!_nuLeE+$>3+cWW?&F0Xohj=d)C+oJAOsaG zM!-fs^W1;}mIZ=R6mnjAuFPTOs~z6bm3P0lw}(xZkCD8=rcU1PPkmqX64k*av!@$g zGP@7+XLfl$C8P84n1@-FdyD^Bhf#vT|32-XMyrAe0N4qlC?FyP1uLqk@`8qXxl5WC zUvIBZH@q`txDd-_T4A9GDM-c*h%%sD4KZUe%hrXNSh7@=Qbr>U1=xL`zt+9~bKu;q zU}*~$wH}?MAD(ZA-H&=%{cCj=i|~#3?bI_fnf2)N0X<*$k;n}{*T3lTWdGjfCtfY% zT&<$M89zIpoYg~T!gO<~fLSGA8SA=}7yQ>P)jR`owo|t@xwL)h$ir zsLr~MBXT{L3y_JCmNRK;!Du)byi|V+HMJzrv7N$cf*=D{T$7=*m#CsE2erSXi-8lR z_wU;w*&XMOxYNIKR?e-#*2MuF@i5M&WBvtkUYYacej};7^P>~OQ&U7#WEN-Q{^B5C zpr~V<5P=tC$+_LBy}zCK_v9wW9*2&K)cQPPgh8M2h*S4kg!F}eZwqz&3@1myiTRw& zI@5^z>u4Mu%^la1`IN+G?>#GhX0*CPhgT+wObNEkDh#2|xZ3_DxKB_uOk1?p8Z{K{o0dn?##X7 z$*MlvpT#E*A9gh9@P>COqJ3NR$Cx@)9dICe9x@Bh!c zpA>d=>y1F1x~4)SWbNJ0e%}`!)Xx4#i0vxThReJGDnZ7r!8Ibv0xMa&r=<(cHuHv$ zz0K5CpZa>QOqOs?uCds(vTQDeA`&vu1$hCHD1-(-B3g2>%GEw}?N5Jf>hp4z?fabH z)$?M1JpDe%=Fjf?WL=iUAg-BBtm>vAj>tOsyM|2)2B7t8=>C~lFZK#h=7j+!-vj)H z>a*7SRF@l%_PWgvLU^)~5%GSn5$2v1aY8YPB!D1uV7RL^s65^l-<3*9o^^(f?ChG1}+8P{n@- zLzm@J7(maH)Ah6>G=l6?yOU-h4Doj`D1hEn@0s z4@V=rZ3tc0X^z-9R+3}ghAzEXpu%X!hHv}Emg!j0Sz3p`jz)VL&OTfGL|omEInM?K zNdBQ>5i_;b3RkXVI;N;LK91|YTQ+$5f8FEn@%mloqDCn`=w!rpW^D(RKgP$@-sfJC z%irvN<-rH*z_M5TzQ^|Ksrit0tUtDu(|PV~pK>(}e?|NM{ruO_k3Nl$@s|sUvIE#) z%N?+BlmN8q%c+GpxXl^5{Wqq6`d|3DmtO_fRDA&Rz6NNZ(Fx31?M+_X=Xq|#exSy6 z0l2HeVR$%CjCsx$qM@-JQUr3$RIdJzaG7_SfjXyM5$3J!Fc{ z*W&!pXX^7M=ioWc(;*>)Wb&thiB#nAL}{T0f)-AT2R=`nVKTC zxp!cf8-JU>cf8&FKWF}V_4Ok62|r?!^VpLxHGle|yswg!mn~^w(eS6Y%NvV(+s#QL z0J&jDZejFd#O|OH_n3uoxmV$J@?tjRigq`!HY_$~x3(-_l@}4g5zfNA!5>xjR$04+ zxMMqOffw?SqPOvpqX?MdGD(dslQ!!@Ila7Ot6wZHRT`Wp(3Sbx^zi4->vRZs^==OE zro>#XGu7=S_xf%qfJmswSxOszGF$EdNyQl<2xIVPJN`3ueJbbXyEGz=w(B>_nfKEQ zTMt)XB#1d0sgrbXbeil5nZegFTyv{Htx zdr_VnmNY10{c`!!_gALthsqs#A|ujldbQ_V^y7P7E9Y7cB|=pfX07ZqQO2BX4qu98 z*30msemT5 zlYirv&Fzo5nU_ULa|%cc4Q4LB9$Ww-T);KHiS0^i!0qrNTQiQAU3qL+)$7L9VdH_G zwT-x=fMRq|@YE-@Fty6!$Se#KuA;aY3YD=r{N4Shx#s@9XgM~Z1Yo7L#*eL^5Bs+x ziAsk%_L3(bY17Yp?02weZ4(a+;ziW;sGrr$=Eu|$_)u;Vv5=!JZD2H;xdm!nBH+;y z>ncMkL@8dMJ)hY-1;mwX{orgLd#WXr`I@B*$61gJb7$H}UeQVx&nwtmXd2LF1kj+4 ziatm`nmMLrvo69*aarc1^u?+**(-V4z*yK&k9TU3!T5xmLh?jQAR(P%u?UxY+wMaR z4y@S(bqkt!N^%{UkfCXvfpBHiYJv(0Zq(w?57$d-vD-urvO5EMc%FLh#ZPU$c)s>~ zp5Fc8Wmj1rY>ASbMp9G7s-kR=>zJ><%WwYK{uv&|b4W=;3tAB~lNpJ#-BD``v8ouU zJq5b@JYH@v7M#L4sPa$$@p-3@@2~Gao&02~TcGX~CvF?#^~|}S+h6!^D)%DINL?Bw zj6IS&_z)^#5ILv^uZ$|Ro`u7k$qY(I@shTv8eY?9B1JQY-Ys8Lcg*e-o?b)rolJ_T z1OqQsDqV3VuMFDKGRc{jD-5={zPyj`X5x&L_9Tg6?}OJ`I!nwLgj`I=g(GVrm!vpf z^hb|!roYU_0F|a*@9(~wciksk68{JTbEB++=NJ5Jn0wf7oz$Z%bry)lEcNx*%V*A6 z-shMiQ090Mx9(V*xO7wLi+(Fl;f`AncH^yF-A{3wO zysPh%8ccywQNZ9l6dwmzEdzlgL=YiLDP7=|(!x+d8WxDOB+3;I!1xN$CWu8_c2_l+ z0D^-l*kHQa>}^1$!9)uJDVbH-=a2!l&Ke6-+So#4ms)#`FIED>G0;en0`yo*3rmEO zlKr_gd43kgK0RUz9%%$cN)TZhqKC(q8{I3%&H})Y0a;8yBMB)JTUyTm6ksSBLyW$^Z+{A(GW~#P?U~%?09rpc$ot}#+2lJ z_drnOi24Pl#tFT>$rTLsIjy?@>*r8<^&Nm4EMe~>Rc*YXo5Di z<=gin*%>%K@<1+vBu_ulKl69`BQs7-X$01-C>R4U41csI4qpJdrki`@AGr*SMu|I>kj|KX=d#i*`TGXW9Zks z3Et2*)A1<1$Bwgz%;3TY7+m+e&%pPU^(3_}R&g)V)z#5Miyr4q*{fc9`Rd+aLmcVISpb6jH$lqv%*vHM!4j ze+OSK=D6>({l1A2SG zs?-q$S3Hn0K!ciJLp{Oo(m_4)o?_A3uJeYJL4Spldw(FmZdM41WNx@#xK^z_RGBhm zoqgodjT2w}Tbys&Tf9EWHv9j%dJn6!RSTzLt9pf_Xc)OFmaXE_3%kwAz$2%6krBP$b&htw<(ZzBCDZml$XiBZX7&0&Px*Z5p0ktH zH2fJE4M>`-YKKk@XSyjf6oMti&Rf6q@h7mhS1(<6as_YBb~5(PlkFcF{P{ZluDe%e zel?z+Oy8lZbS>LPHc(;~Pw^TGxwmGrPB$PC0dxQWu0$oJ0I0aH5`u%dg57QF2#1Im zuTR8tLAKw${-v|Od!wl?uqBuHrOk}1iG@y}QvNJ(m+I!uD*t-R$@X*Tw}G8PP8FK- z8L1nlOELpve5CWG#F~3PH~(%0b3gybO#VRjhZSlTt)ap$*0iWY#LmH1O3KK2bRv_$=}FEFPht zTGM>ZFwf=J_mkH@{O)=MG{UKbs$PVi2*7H-8qBjiSh2x&+?7UnS&+8uC*Fask{rFS z1?HRa#K^lq^qEp({g{f}IHycFV_qN#2(%B2*H z5?Vf!yiu(Yv2Z0ue((e2SbH>vx41o;fkiOwlw!L*$}jDpJaSa-ynVc_zj#Eyn;#!! zpmP+RGloXUXVj45#L;o@czoZ(cZ2IKyt-{^S*g+8(UKto5O6#$1KdcyU*`7YH+Qzu zw{yMxj)$eMPYl$;kCZiLnt~9KD8ZXxK@(15Qb%QihAPgfuhjZ7berZan>_11ZFD|# zevUI)b`-D{(o zIh2Pkp=1z6v5f=Y*lOU}#$BF}Z3Gv+p<*mN4Hm{WNr8<|{S6-Gy5QNw1lkG}DEHC> zN)S5nH-Fr|dwKQgOOG!xiyYYHReve=OH<+YtES!ZyLd)17Z%P-m?nnRc6b`!6-dHih6n6de#Y64(8?Mkq z7r0AjrjhF$9ygbC`50~?y~fVql^?fmZHJ}Vy*HRhE?4LVun}Zc67M-DAICk9!?dq< z$Mk4%Yh4k?QsVy88kPOysXf|y%zS{n3Npus$r~QEqAc7(r_9cn=zGqpO^INohs>O5 z&|lM7L23ogI6Ljeyu&WNuOPmT9ZVcX3PXR`=4qsSxi%vZMOWaRa6^L?E1l1qPz z+NhR9MpW2kb}GyTXi#+rY_d#k4(*p^MI;2wWDL6`lmjN5B{QXw3eFeN{lg>s&Rm)Y zWI84Y3{i?3PVx7TUw6Lfw0^?I>MOTTk(Di=8mLt0axNa0HcjU2ZabUFFd$%u%@`;H z{7RDMwn_q3F&q%=@d2M$WP_jgKzzl*MA@M#5DCKRlQ&pG17wCR@kstwWGZ` zGYr^w{e^@?)JhSZRf>qkg5#*j165xhg*Dy} zgQ{7gE*z-)k2cu(0pCzBG#jnPM}zZnzBGU~fY>Ck;>t2e8s_S0>;V30V%=#v)=td1 zN)+st*%~z!p3VmSR^}Hne(h_T;kqiKZPg-(eR?0;X@yMP$OIATGyRLh&-w^F{|GC$( zo*R99{4gTWQz~#cfJo^LB+QMZ(kh)e9JiHFLyC?R!8hgwjHjDwQo}s-KrO@jt$b3L zb7Q+$4&2R?HP$b$Y=j%FRdb>&Dw?sv7peHIo3E`*=OlhH%WzSNP*fcZ(|{GBl+G+- z?8T*r&W2K#fs!gYjwb(=uWL~Lbaf4HC0KOI^EJjyvq!^XSG)wwp4N#GD1fmBo&;(^ zs8U(s(%>(-a~mO&pbf3Mb!obyC0cT0mV7{(B!pW-vR*tIn$VJzoD8sH)n1yLW&-*m zF(1L2q9Z68i}UsTlp|9A>S|VaE*qa%NNG=1ilAE3{o$MNvs*7PM^mrjynvtCg}$ke z?>1|&j7)`0HuIehOXT#}#B-(j{*J%2&$X(`YmALkR6v5=D`v(P@5m*kIn}FP_@Vs$ zi{15|E`=?h^D1%uX6x*`rv3iTkCT1z>+6mzO-YHuR!_RI++3iRXZD!(JJZX#SE9Ss z04kv(NwO;uifHN={Rc5bfL2XisYDQi%aQ4Fx3iTld8#?b$xpja*x&8WyB9#1fggb} zND8Oj6Il{TIobgtRAd}@M2!wyz6aWbMj#Qp72uyb*E3LHs>TAT$aX19J0^3`E9K)6 zfgy{L%%U&%`wf39{bR(pmC5PN%Dyfgb{bg|6HBvESjJT|lmE@!`PWy^%9hNLY}R3x z(y}6}VwH|2J&Q3`hS61JJJo$(&3QOd;?wGW$>&8~(ASM!PtXivz%4+9)WhON>(#ij zEBi_Dox&se=Zb$RZCN{dWksmwA_&+(z@m_YVq`EDSR^69&;cZ{mli~zR1QHxK+;j` zvSi^LB2+{=!Imi1ra@*xw!{a=g37g#R9>8Y&7w+Mq?t(erG|U#XMj%OoIxD^$e^s9 z*d-`NtQg}AfkYTqAsH+IT_p*4aY@so!Yi=K6v`XL&sNMK zS%IXjguxaXgtpj3b4syhUndu2XU{BfxCE$|jgywvjEOFF!G`xvtw!z1NQ=qL01u)C z5jruQg8Ch8WnF%Hz?tK`#D#MWvZr}?GnJgAPx_k8Yv!g$yU*9>7xlckyq2&i0R$M% zgc|e98~Xd384L~$q`;JaNE8I93WQidB1V>}G|aln`l^4;sVY3r`6+&-^XpoNVYYkW zz_Xk1&`n{0HGbxy1fS5sgcydqbr!w$l^`trTpH!8(gH@b3Eg?98?% z;S;l)E>1tSZ;ajH^>@Dc!_U*N?cG|%iB`DsSCB{u(04}8vSp&9*a6Xu30<@A=$zj- z>8N&`TRYP|kK1DN*2mX>CHV>K*&LQ3rU@?GxE_;jJLLDMdCaI{#S?4d)s)yFu>s(> zB_K*4m=}bgNB5^&jOq3w1QOsA)LqU#C) zw9a;?-3U0b4w_?J$l7zfLI(jbs47kGP<;DS?pM4Q+(m3RD8y9FvCa~5pesu#FgS%R zV!?-K)u?UA(eymaVcVqDU(e?UOdIyI%irnwI(qPHqYb!G4sO$~bFtwS6`)!BAg)mZ zD9H6T1S95Dh1zYUwXCFAX54ct{xj!aqF-==Qd5O_ZST{(S5^h%=0T{Pv7g`Dx-LIV z{nY-f(SM8jcY5RBkG)nSciI-ZIB1-Jl&Hcw%xZ$~ykgH;x1vy7)fg2O7l%!*VhGw* zfEjUFbS6~QkWfHl2^-p)3}?|Ait*ao9DGDatFv}QQ+tl3Wuk{q-W4|KWfNl>clLkZ z=i~ij%-VMOFz@-D&EI#H@I(5t`P0nzTMyQMu>8^Jfqcdn&3R~KEBWPvp1%IH(_3`# z$fd<5c!o)__tv7d6%)&oW+(aP`s$hQ{<^pudAM&|cUBmD(6TxquT1EEEH2%#PO@H+ z`zZ&WC|Gh(J?n~)=%_`%Un5?--yAbCx~rNC38}KhtT;x&hPFp(y=kgihF78pLKR5$ zXU|psJzn_ffBl&7sKk$35oWj}VN6&!PQNkwlKVyfo7`W=0OTIj7of(CUa86k+nAow zQX7I!0SN)Ab=>y?=E=sw0l2z?R4g4o!ZTA5`>L*z{s+@TQAiey%>Kg_&zmY)Z?4UqobEBruaqZjUYnFHA-r3r@*m^CxRxV)`xx*c<5y zHTrK+Y597ul;cdR1|btD#Gz#f;UKT?T;6*O<#@ALdePUdbn~;PU z9(;0XtYeR4F7#goa;y4wmIwOmkBfxH!2OrLPB6BKq55+XpWAeVa|Pq>#>Y<52-3B6&ZOlAIxeU6QT7y{4Hv(aXk|Pt6 zN%o$YE#DMrbh*y9AP?N$qZ|bHGDlbFb|i;1qpj-Y-+Cz zzp&&jHv1>iNAr%bSA1^Z2X@LI6SX7}lU$LmC}nG{c18IP7wFNcXy8_2cCJ`#KYgs9 zs3?Vo1d^JGMu-Qc1Ov!XP70KcbP`|5KJ?oi_}eIs-EV8wWDIxqsGHRq@GzR{GqlIc z--&F;^hz^pxabEPJvtUYV4_{Xn+*`)M&jj+-_|qya=G8*`GoGR(?(Miid5q+O=d%3 zTcZmp^FG9WYDaT(_QD$ZusdTFMvccnoe^1cmo%C=PgkvE`-_9E0szcnjnCoeoc7`g zA-oZFv%uWG6kmpM4exzIplTZMK#siubyQa@*gylK-}OABE9O9w6bLkd*8|&!^>u|@ z*SO!0ClorW3!4H>uv{y+WIvu~IY7%98t^)OZpdyUUyteEdB`$=Bl$Vb*;pOZ=GYTI zdo2_T3q7iNY~F|33t3Q9Tys>NFhiHo(*cIhLy>@CWmKe4e~u>~w^Ux}%bHN(swU$G zw-H8UJnqZc5b5Qw`riH-U*UHu*|AtIMWm3hW7U;tRQMPh;O$x8eijd19YN7$g_ZRz z{1M=+mZIg$EaDp3Ts#&Lolh3vbNMkM+Ffoqbl#vr#e18 zr}bR4Wp9kjb}mt^l7S#tRM=5k6(p6WMw*&qw}kb8yzx6*sQrN zAbG`)nHRRPC;o&@BW|@xA4kO2s$alvRilHc4I4K=pd+6+dafSDYRlVW;#u>_uwX$T zSr645s_bWJV`bE~Ne;xg601PJ+&fWOHTh!XCs3d5s7NTHNObn#sk$o$LNFQtPe8E0 zX0c(69$M@qO-MFq%C;~HApn$*LfM|jRx=ByFa?OD8zTD|PCQd>(CslYWhIC(5NF?^ z1Ysk-qKnGW(Qx?@sGHPR{Y}w`|MBt6+1T%e#YCq&O<^AyX(BF5D<-NkZSb&x2%~1b zNKk=@neLZy)t1-PGL8Gl=uI7g%w+*%z?f(eTEnBKJwIK=N#lc@C-Nkgz7S*fs2ko` zg`TRj-OqUcj{D2|KAIhU1LHESs4jAuI{|xz%r284XHSS{LHv04J{|N18bzj8d zbCjteQ+t?jSJ!^2FzYC#hJ~l-_)fe|4J$9RpW^@vHO}^Fv3E9WtNam29ol=+RiVR2 zfqIvvD@F|K+l#dJC*=nz5P;w2z^qH1F~EC6#jRp-B>;!#ILS9g|wc!_jn zse@RU8Lh1b3UF)w0pORn9Z#CQ~TLcr;5+`;5;wg;Q}N*2!Xyy@w8d zWZZY9PWxX5B%(hYn&u#%FPT;FRD@yt3nU+eKX>}800INZ2XjLZXAV-q{VwIQ1>eDg zYD=9hSlPeQ_zWDDn;cIIvE>LGs(kQLn2Lt`t!plc1E@e9KR9Es=?ohaG)kOO9ag!S zJ>DPWEgkL5P9$HlP)SAa>YFghG-C#fS*=x{qr5ii5h^~pLKosk+A|nKJFBmU7_@Bz z7BimgQqQGb6;DG%+~coz_h$FioG}F;KG33bTz_(?^g)&6S~3zsUCKefWks1XGIAX& zI^x33{86pzCJ!&JiUVJpTx0BNi3J}gB2@%Pn>TJI!a_I=emgmEJlr|^!}h%si$!b`s$bD-z`+Yf&E1|OV| zWY?^Q)I@v11#jj&a11FphA1?pr9cq1azn!ekLiX|6nV!DnyO?Vv+hP!Vr}w;1CQ8O z<|uJ4>3*21JzaEZEEog3b-F8_RsOwScE9oKBmyd#LoNc?9$6g)uoVh3hDPIYFNU&k zgs^mMO|Br}@jKg`_mrqqRTmrbLa4FFA}L?aK2R8G5e;!dNE3GCSrN+zh8lK;sxV*o zYQMaURB;>FqU18nj5COHnYS=!=~u(haxON?f|y9cNia0KB|V$df%H&tj0YV3O4rP` z%0;k9g<11`fA%UDA+=T(rqYM%2dJXIS$}yt?U^}0e2;+~iXR&g@3_Yq=F{zd`dj3g zOn{MwNWw6bcu}jARg%d^a}KYM*YEr0HIxX8ENG$}T|7!$)qfAc29?k@%p31sx?u zO|qO{Db~W(@Mw(7QS&4qRM3sJj>KJpr$0ZHou#J^mJd#fO@D7#P=e@e*O{u)sbFA?uGqGv{X8=blG-WBMgfSxpq|O4v zwVvxxCpYbW_?CAMvetE7N9x z0WRJSR011N2qr*eK`UI7CqPIQA5ctNq>xyl6i}pIJG2fl8nr9jjzdg%6@-EAxCV=5 zDwC*gyjr1=B(B>u6nYHNe3;9j5A{GM9rBclCL%ri^4M5Ic*)^BUWZl~8gBGh@W4UzWto%Nj#Up&`P+OF@(b zvLQ;479?voPSC2YKyMA#g=JDESf|R<{*0Q?A$tKcz-Vh&nbvAutIk(T=(c)__KgF! zy*jY$IFTQDGhXkT71y}ls!fK&UgUyKyc8GVhFXZ(XhS$D>`^1f2ergbh5&&6s2&`C z&DL-O@7U`Cc&Q@WTs}eari?dN_Wj3|?L#}Q^m*F1V+WW&+hRz({O;za}MSUt0;f~!sckVlQhth z01{V(BU=n%fjr3!B+1}sI*xgZc!R-km*3CL^Znr|8;9wQe7M=&O+uL}{jaZC>-MUCsTj$Y?;5g&=OYH+1+%I=S zzY}G7ili=MX-_&XUiM^L$#q-ygfayefLez`;PoFt|hrJjzf=gKe1` z?g~Opz#2F?eg4%K{(2zDAchvCQfX-n7^{XxCCG6_4)Xz1ZJ82KmAj-8YPyDwdXeQm z^(+xU4uC+TfQyZ4edwkcus=3M)3@5Ks%(X&#Esl{!G$X$Q z%ih9NWmmNG1{&#)$CY{;*3wXY`Yx~6`97L2$DPN198|hl__(BdSN*5++W+?Z2loZ3 zCZ&%)Tfdv$X46Tjh(!d-mC(j3@|j~ptWnP~?c-x(jBzA@W}rk_axQLD3{7mI*pGXD+V_>5+Z|Vf-hlTy&!cG# z%$PKItrK~4O@E!8FTUbB|NRk;U|#b-)bM-T&uqVR`X1)}O(ps6tY?t+Su{vSwk?la zU;Zxd>D&InUKcdDBL!V>3(yERNMS=sgn`j7FD*-?i(?~0d-4mWg3)Mg2%GcN=U4Jp z@|EJNbx0vAdOP<`pNU1gm*7+Pp< zZNB>84;cfSr~=m(@m$A6G~m`S*V(bM&_aiTVDR8o`1j_eRKZPRFV|| zrPL5j$~)*DMLAF=$UrOSB}#_A!=LgB$wK?<1iX%a`6uPSdvyL+7XPg1-xB>1knwUh z#4{;y>rjZ;7KmPca=ltlH?qjGT-3^u2cEmWv#YO|#Y!K};!4u}JKr{TYUH_uTY}rh zJfn7POz)+E=)kmeGW-#BX~a3X+VLMIhK_&ek6N#f`iN<7bJV7Jr=o{9zrWbM${U_~ z#>-DXJh`6Z2OBc4>+GW+l#SfBN9YU5b*;_;FyYp~=YhZZ;qs;ENL*N&9;#F0ckJv` zTJ8`nm};d0{LrWR^z`l8A5S$O$LkF7RnNDy*0vd-vST#oyid8<)CcHjKHAnxg{Y5x zUbD}gUmiXoA68FBr=KSJ>)YJN7r}x_=gqn%$|!W`z95#NV3;_WoVWasJbt0l`38{A z?j0cMmfNI9|17`$Y-|wUefKx&wxYLpe4TTVu}V)} zw?N3W!Ke5S(Z>(5yWN`GySzF0U%VB&G*j_uXPPK3#3j<@%FYO*qA_P zuzi{f$$CGqQK<&RyX4Jae11J+%P4`h0yJ!iU4al~awYUEkKdiotQ= zhYne{69`nAw&Xn9R<+Uj90_}DKaeuC7c5FBe!tDNJocQCY4bBUPd7}#D_ zkKQwrEf|deL{sw`Y^+{sEiN8T&uimi7B3Gw{ehFrgn0z%CC^f-`@eKC6l#l7?XWx1 zS31erCDP`O74&Ka$Ur?eTdDxLPg`VP`B9~_TRAfO%5k<<-79Zn4X*NcAKzS2zP^23 zyJvjt=dbJAKQeh9dY2m85i1eSa_s_oAq98JcV$>rq@ND_Ykp_e33Ov~m;Ko`tWgQbpR(l0-<`eOh6U+f(SQv$=kT zf4R@^Kle8w56Mdz)4#L6_cYU!4=bmK{S1#)xwsv|E;1r5U?V#)ctl24mHb>_tl_Qw zzy@Rz+wH4;4gT@kTl-f2k3>VurExTxU~cs_`YlVl!)buU+hW~$R3ot0WMGZ%y<9D< zwU=6}O0j56C}oYO@nCfRpw+(8vu|Bo=#_idv#@;KVM;T#>4!5{{rTnPSj;vniFV@S z6f^;s;xR+E37}WAxZO4vw-<^V%lDdzZd#c{vLQPN*%U;n=NI>WOp1JKn>kU&NR0WC&bLJ68_%s)U)t%xH(^kYj_0s+yEzv z07>7N`kdSs4v#GUA?a_|^ba%mHq;8T*6PbM_dTE&2pO9vgSDyW1E%^_>QiSX^;Mq} z$?@Btr2BPx&>C!oIGBU9WR>M0c&CwdnzJ{s$YZgNDV1_AXLb5wDw=wl7|&V1_Qu6m z*{!gwF?}3tOoTm_&E1^Elil<-IwYu;mPO+!TUk3ocA%Mu1+L_J z;10E9HqA3-h~iVWY3X@80A4p%N;Co6zs9Tjp!ibm)+91YQ z#e5{A(70nkpoTkd+eRTo$Y~kFMKGex6=~>-+#pV&G^Jj}>&>xy+7`nBd_(wYQsBJ0sSs)!&y=m?g%!iZ??r>DxD z&8KF=Mn94*U>w`23se&$fR>F0JOTOtn;jBiU{S&_gN52vk#$e}Xqgb}1Ip zQR0{(YKBC#Q?7nJf}M&LB;7k~!cX9r0GO7xG#fhxq+ktOR4X=ipCeB_444B+1GQx* zP27Rcsd3JF^3qibYY%FehM4L|e@MT}HBT+$N%m_#_Bf_t00}M<4mNWYW6%10kJ{RD z?!4NnkB25hx+D+BE5CewH``xG$+v)xi4gF!)vw^+q#8j8vMp1jQ9zMFSrEi)!!=&n z_hi@LiUj9+u>b^6QmnK|v;fq><&w}ubVpr!cNxGLSE=>5WU>kx;0FVbKt)pfS@djm zQXv#P{F?ctgH=|CE=UgLRKUT0*I+3IZ4&juFrwI4FaxX8#TkE#ue21^N`4ovm_cV3 zGBqtNQA+QLtXs4svz5V_wJ=0ZN(8ZjrL!b=EJr9-e#F_A_3-s;YM+^ENYNZ^KKebEW4!Zrokb)lT@H^OKIFEckLocFJK|9@i{kX5D&zo7xyGf0n!L@`g zr^YI4qoa&cWyYB_*igmIOp`pC=%c-gVk9aiaw*VvHhdNDk00G2LBl@U%Ji4>wwe(*dWWuD!c(;Mbt&pa`Hnnn1`)wK({Q}5tTpH0qLVwc%K zJvSQPDfSSbOL%c_gKu`M++JJfS2G{?H}^a1jhmKz-5vYr{jozD+hu!1D_vfPDmw632hC)DEONKxMnL>l9HC*#h+Pj{O zVc?l*EHxtg+D~VPE?_JSGgTBYMoiUF3>7M@y8`9T0|yGENg9ek4YUkKLoLV*rS7TV z;E2V=K(=hGAbE`EqR4F!um-NxCCrT))CyGddR_qlCS0lj60lo!sT#e(YwbBA58SV6l(ods&x!F3^CitDVI?P#TeayM77oF2o#u|>M|61bOZ=Jo4-cPPOe{!$r zew1%bFhPWZU@L}AKdvkaQiH{)&BxKO*FCMfy{Zwbs@>JE)>CG68n zxazjYx(}35moDJgYu)vJ1a)?J+R?kWzE{hbNKjkQl78Nk$v;SjdA?!2NX+Ge@tj@w zGP;fbaL)c+pWjMf&)XUMoU`Z3XumzUZ(kqX`D4wivs=8{^JYKgycb(9G;}-(TbVVS z|6D#)_kY>_AAGG3)J3$07PLn?RGcl1Rt@WLSpDJiLA|9J!ECrcinYImWSc8U~ z2WZ$^5|Y1qU)sGN+yEyZwblZCsp;#AV&iO>-Ll_`Ra3RZEbddL_Iwrb!)ZDvoIRtW zOS(+Hu>V)^Uy=$Ugo3L8gr!n|jCO9?hr$C18J%1shOcJNCoiBZUAM;fx@|5b(E5+> zb@+DAgLEs!vm!Kb=VhDk!BuU}N2c!sQjA zazukI2n5<~aP(@lDWF+H9%)D-@}l#ST+7A}T;+hL?z4*j0FTO@X?<{R5H z$6BIPi(MS8yzh_T{JDg0Q{zJ)mDVy)6Q5o_!#$ya3SGK`cl5l}I<)7STUqFAcP&<5 zyu;?Sa@x;=3&|z41XN!fm(J<>7_Pu5=SlNrEdR%PzcF`M8@cMCX>!Z42Mte3Hu{c8 z`28ds&<;P!Gu6iT4!r-%(vNrNhs`?+0^O&qw_7G&erbg-hzti4AXnzh*$XAjEv;Eb zCtPX*R{%}(?FZBg+&qWR!H#jnKRCUCj<>JP&#Qg}LHq1Nx$Oh>>A`S?YM`h#5vAM~ zN}*(5^~|~(!R?-3`Rn~?UjOLRR9y^=cmmta4RwM+J&xb8b_l$W9%`l9PuqvaM)rKRHjupem+8b} zBq+ntzTgIKky^p6PpGcPesZq2X+aFnLj%#grnbTfN>(t#>JU*g#+f$8hwq=tQ>c*H zKY6!uOF8};KDzKxYv5DdN;zYjo886P=l%KmdLMIPARS;h{$gGSCZ-WAOU;}Gu9r3%=z4*;$y6TjB_C-)+sq@l#MPVb=!*`7T+i!9#zl{B#-yZkSluzx~Q|vOZ17$iC zM3E3p=a&rq!ceFolX0}mI(5dq=qNH{CTQqnmTTaB2F9)L^hZA1b@OvYS7-bBqp#HB zud@}gPN^=G9?#`tJN@u+CtXdAK1929G!w^mTu4{M6tYr~4nsB4E1hepgDi^Q(N8d= zWCWg(wSMQl za8*SynBv~gv7Z9&^SEC{U#!E|`!~_lOD|_Uxz(VyMwfW&-Pt?#pSJsMq`Tbk`ofd` z>uFCW096>Y3*9$;e=v)__M~$R$#v_JjM_QZ#;8LMo07TsR|UDq0FB;M7=YmzHwiRs zz42Mcqld&(l=5sQg9T}SP0MkioIh}ZJeeIls*iz3DZsG+e8}7B05V9+lw7F%;G>U~ zZr5BKh{1RagYr{kY#Up!TlhHT%7E`G+-ek2RSeI?y8MueZ36*67F>lXWTGsow`m6E z6P6N$Y^bh*N>{mA@7NJC&vOgVneA&rhVr>_I#fs@B1kci>A$I0Pahqj=n;c9h~>t` zeJdfnuqcw)jJ!Zvm&VN~ml8Q8y{W5pyx{skHPLgm!qQV^YLcwy~;>6Hpu3@u;pD#Kl?iR&!g7VfnAL0bGau* zQpd|E=EbjOn+6mq6ymJXz+|MvN_yPyxAePHi-C&R6M(_(Hk#8u(qij9zTH%V% zyWHRd%THPhSM$QLiz@}lnSlicxD}gqCM7N~cb-lj+dOH6>z3F36Uvg=pI>e10 z|55kAges#lm~)P8FemTXhTD{$#yY3lr}dy-c=7S->_r(RDuI>9LZ=90Kza=^s9JQ^ zsa%T&%(m8ZX|ro3rx%?27C_oaPKpbrK3Gp58`#T}XSiR-qZv?d&okYES!vZoA_JvX zsm;Ky=ZN)r9h-iIC1EV2W-$c5YtKCxB+nHoB<;nv&u&a6tb9Gvf;`j>>U191(TX97_>Jo)9n&LBSXZPjp2x zDzz@2>->2?KlQwQf|qBPGifIJb(y}y+2yqpT_vSm0HHW)T^mnqYZkYH!4V-*n5#N% z4oRB9oJI*Z3X>Y1I^Y?uI4<#M$Vc#s=1 zF?W22hf?MUQ7J}$NtUgehgn8OPHY3k01S?dqyqr4fb_PpJL{Euw$^3I=D-1-Sm%gt zdmkpGqJRcs(HJOBEP^pz;3>LbEkZk^kPBLw0Dx*@8OX3k#vuVH&2Ig09=tJk{ zH$^u9Tw$!Lg5c#oNsEOCinWZjx&chx?lYuHh22cUa+7f+WCVkSc#RRj@Xw_TPY7{a zSI2L`)7DZ$TDZUl zDiojtJt;z4>~8J8a)0^CeVysgMU=YC&9mZ)zo+zd?247}wXR>K_Q99TD{1YxsVyW` z!vzrHc7UiX0x2Mh`jGRulV3gFN3ZlZ`OkvCckTmrP)?-Q28WqpFI28}O6=-e<(3n2 zh`0$Sbr#H!`SM=&6X(%Mtp{&Ki-Y~x7n?S#8v21TqMlYZ!gk@J5Lqr23BFTfI6ek7 zOP4*9fMo(LTSx&Ix{HhP50;6_j8X!x3Zta^2RXVw(&F{)g{9{W3R&j>`rk3G|25c% z3dU)xZ_RA5?@&Jx>}WU-r58k$%}T&ShNUVBB~P`=L<(VttJKkcUP%sS<}A)9C=8V{ zooDsZf=*BMqJCLgZyc{NPr_f^?14gKnJm**-csD!@qMFShx)b1P#gDnI}dBdi!8sb zp0}Vs6Dug5ANg#>IGWYgu%f?@y-w>5N z_bHuKe~dSG{S5gI>@~>NLLdoc(pnlnTMh+mp{XN|4g5Lghk4F13Db`|#bZxEL+B+Q z>&mQr269lY+c)ksKU5auCWxy7=K1vbBBbylN=T7gd_53_}F10lBX^lNccG#H_ z(kEmAk$ElsvGnUhkE&SiB`wb{W81R}cl)}z1kmC|yIh)yZNGd;W~{;H+}nh8vNf}v zvvtZj`Z?LPn8Td#j=GYJCp93VH)uqFC{aMQKog{ph}Max1*PA~^BQqgHjb!4S~G|S zab=JK`Vp456(!>VG+x3|YVvt;erbM9{*Bkv0*wePAXJtF2UfLGVGXLGeb`SE4H$$F z6{?}4f)Kk+w+5Ub>lIkSSb0pyl-$W8wAaIV+6PD-W32&7?Q+0kh>(@43GiYD6cqqr z-J=@KUH816PMD28Wg9cq-(FpB|4O>o{9O1bvkn4C-qx|RZ06cKN7`K zdP=gD^DNJ^JYEkp9spm7sQ}t>zd|iN9Vd8hW@8%s(45$F_g-=@0jevS(6SOa^PDC+ zwZ5*6IiDetklScm-FLm>y!>M=|Eh||_VJ?m0jpvb)nt!h=$bI^r|;#0KC<+`wEFP% zT}+)%4+h08Tll}A=08XHFQoq?ckkouzg^Kf$>%4wDtlUQBcG)nrrs8;1uk=3?`L^; zX+EBmYuGQCy^>q1%Ra0CAngh8y(zRtkB%;` z?{C%D8oB_jsBvN*Y2ml==RUG;Dt5lIFzQU;X7<@wm(7CZ z&;P8ue9`BWSzmAV{sP`VBXfYaDi~?$Tf67QNvW08W)CWK*F?SqznWjVDCu{S1I`XV zFMDTg5Po%kCvZ~92vfqM8;1#ir6$CsD@K%{$pVwgeqlhb^RGPB-UGJa@DHr1Z5$h- ziMJwcDMKo>qe)VlTKXl6D&CB0y<#u=i_=11{Z6uW>|_WIssQyYpw!0kfnAJ#YFu-v zM|%h+NI3wYWVk#;_x)!8c`Sc>=EHSipRAAQBrPN1+~K64?4j{1<*%es72tenK7-ke z&7>*R%xC}*7x^e=D>@Q}xFsL@4?mNBDEobSvwVuEM;zPPxKi)Ov47HN36Le>(K$%~ z&g7XBm$gst`-a#Zd>?Md$B!9(KUF{c`~4q;_rLhhQLtWKd%Vf3XP#sFt^WF2U+K>& zf5*}G8xv3OoP8ng`&;ege5TzCL&6Sc@$}KLt#-N?C*uB&PJAAZefT%t{@cIK#dnk5 zdv1Y@WH|wn8|C3^9~yUSnhTJ6dE25J+b@&WQSV1A1fW1oMjQlKtkBz>>HYrkgty5# zbDMf93BH!49efMr$b0QPHw<}|PtyDC$g3cDG=QdwI>#=k(vIVCV#|UviIrv@IwoZ6 z7-2qBn)k;IZM9CnZ25D(Z@a)HCThM18s66ao?4FVf=jO<9Ghi{IUqe#B1n&N$S4YM zjG(=e&b779atl@#du%{y3z*&jUe;+dK{IQFink^@{uuA+cCVxnkPIfrTczt#w=9fGqFXM^LNC=RMm0WrHya z;LtYH0Cm*elnWzJ_~X8`)sfTsi{0*4S&(BfYzz&h(ZR|2Qzc3`9oX~A__{j?a{{2Sv0jjvEAq>jl7 z;TvRVao2S`Vv6}Z-*>Sd^9YaI@P(BVw3UT;w$%cMF6nEIYZZ|=;_;kThwY6=mo8v- zF53Ry$_HsfPhm^thz^ruU@MwVG-CdpsCcBv_=^yT&UVvD7q2=V-ORO)JXhvWkZiU(??o* zpC>*>o_m^pZ~%=lYnjp_2@A2Gzw1BQ8`|@F2);Yt)a1v%R~XhRxAGk3ocM0l>un!! zJ{j`IEs zfB#4yY%(`HwN8YbwOTy&Y}rr8UW6^%3PlyG5?HE?W;k*{J}*D=t@BY z%BtD9+Ln|&7FJNogwda0|I+9FUgP>UpZTGDpXS%0i{`M4rJ_bqA?0dNNjr5@rNR(PTAFINHOn8N%>;S{)R z39Hm>410}~)xCQc4WW=!#s*4KDuctaNT6kQp4n7Aq*mVUr7oi_T#SaGW+}&%ORpx+ z5szy`W`sBur6H`u$HnM9L+4|4@d`QM6V3--+jS3`@9TEwD}v#w#XeZEV)D|Oqd^T+ z&7|I_cwr5W89lPw9$z8&t3Hm+$B2e~Hsv$1LQsH3$!Ct2E6%HXSS>;`%|J({AsW*V z1I#JQtSh*KF#WNpDfGrh4}l)_fEqBX9{@455mbM*PVy%)W&pZz|g&ySt^ zRb+NNXCB=tSJ~L;wLueV)fbN4mTLtGODT{Gb4<*MHH9n%8WUJlCavLGv+jGfG+B>D z)JEfNqoyhCbI;?VHJk6t{bcVGyFcmbX&oMD6AUYEr^^f~;J<2)YpW8u%P!vFA3=gs zHKSEbWG|S)JPb8gOgvl$02nZuiraaEsIbSMMgawDzAgMz;C!|Ik1QDy3?{TKhoA)@ZhJKBm$TaC%MRmBtR#l040JQj?o%mGce=dzy1aPYX3;-}i#xNGRgfY`FXU2oAKlpt8 zSD)X%`+S{xuHbUFI+xlr>orVD$J;qi#Yy8?(o{;;8utP%xU-lkCnc3f&tH4XPP4YA zg>0TrSaM(Mrp}huNS=`feEki7*7f4ffj`V`!wasCZ0WRHU^D&5eo-E+D!VXQtl}aye38cGs1J2> z%9z8C-TSwmug>i`WGgr(XA>I3Gz1O00ssRbS->NqWRjOiQHoPMOr`BK%}Y`{qB&bf zf-Hs_S^`#x5|TWG7SQPfp!Tpt;wLZPk!AW)s_b+oP`DTyKg;fgE5QO9&l@zU(|l+M<%%=(OPziQ9w+yRI+)>*xp z8B)>tVlK|$=Z0G`4qrU-VYpUkKkaz!{j-;;3e)Z!7V0p^Kcm$aEWnlzjgq)w8;;P_ zy_0|Tm-n9^ye?H}_bt7XWC97mEo9y;D!v)@$>1K?mFS=vHoFl*Ly;xmf~b)v49_|*}B!G4xKhzzbkk}Q&%l584;0$G0BsMQ)i*a?lIub>T zmtw#ja!sZsghTZc&CmVdoFYAHx35mSeWQH{B&Bz9zSuU}i}whh2nV#F$Jr5bbTEP3 z#GI+9dT!4a<0+2R>OnhbDqBVeRvo`oaUjDKKl1cmG<}Cc+v8Qg{$pf7AOM)09$n`ac#YvsP?@j z{RQ}df6{KRjxD~boa5nh+EY>AvLCP0-)!X6$lHqM!aZ4c+OeJbu*ESG(QJ<`(N6=0HD{>6!g~13Ua5Z&KbCZ$ z_Yt4BJ{p^i;jBPRWIkN(v%xRaJ9AUF6L)Xrp=4l7_AsvnDr~NP{}jC3+5agmD-10^ zH+2lQw${s4DieN;>0ONj!7UpzoaKyulI6csz72a0J-YJci?M%P(|6wJXI=q>|J6ma z>5bh2Qz#n^Yqh?t`qjsuC&RWRi?85$p3MEb-hI8M#;v_R7Pn8GdUCn{+0o1c{vv<^ zx*WpovRdATc4oC)a)d8V{~-6Ii$ENN=~~?&aXlvi<9? zr=E9l-pq9aChe=C;^cST29>&#F60t4@}K`x|JddEa^mX=gBkZ9y=L$G`%B+GUb<{@ zwpWd+(0ik!&|SVULC>kX`*9KR!Q>L2H|rgV$FM#I{jwU{u{Iqo<}8200cv+sXP>VI z!YlBW8%#hPxBbZ_Ig=($uLZ2PI?nFZft^3Svid~K$^e#9YT1|f`)I<)ngK@N@yqf3 z*Z03Up1(S*+dIp*(c_zKcSq^28WLQ=q(`USbH?wJj3g<;IQ!PCLusQc=hX8VD+Q#u zUbjbIZ}anm+`KjHfsw9cefhnVa`(qZK6Z(7Jk9{8fXU~Hhnl_X&auQ`xxqH4HD_Ge z@*^DAMk!L;hEHVT^3#oeH1FGRrR@y_ZHnodV?K%PiAE0{Y7)8o$PX|?>=XK7e=U&B zx)A_OZ_NKl#D8Mqhu-?V{r#sQ8nM!OE~?ZpCvC!l9Fh3*X#TwEUx@+;kSOcWA>hmA z3y6ol^72v`Ob_90U?PNYAyEkZtIK%f^S_Y!sfPNLPdhG+o3S$9TVvpLDT~chil?8O+0*lVR+&!a>~aeln`>GQ6Wy zj^93S`r~2R7UD$L-fU=%z6iw%{c3Q};3l4p=o=T07uoE+A$%KTvgP28F*Wb|y>Oyj zzpc2MXHS3L3!fHz^ou^6oSNh5gfG99om4*?p~txt<@-6(9fJ`px7v2aiKn8>L`TCy zo?r80OxLV696O|1-X}V1P~Ms&ID!r9+V0i3Iu_pScqOQVT4YOJtxPI(SC+-*-iEQD z$O|z}>6dDc81_C0O2Za=GIS!kaN*svQ!M-{=@4+_-&9`2P`G4f=e@OEW zKL7Uh4_-cJH~nf){wpv2Cc1g8>sZjRX_(S*YD5wwA_dS$owNWka->79MuTXrVb82UPrRQx2S6k>e2A9; za*D0F7cIl5XZBu7Kj>7U|KR1l!>@WDnMn!`6CErJGJ!gmXCZ+dA(~t?`n5{i5vnt) zBbi*gw>;*EjkhOjlSy!e7F8wFXV6S?;^zp@6fLDfmOl(MM>FKGKN^}Ge)?`t1DvUa zTc6$cQ?_cFO@G!=1Cc72s%mTj9k}T6ETOgU+nj#+j%YtS>bTA~H=J8SBT1E_S-Y0+ z`n0|H`3=5meWR|qdN+UWcZV_Ok-(qs(QnXENPCP#;t#l4}QI!3f#NR;5b}s&eD^L=W%f{(tw7&$GV=(hSCd zP}+itEI~L#%ndiPpl4P<0tFUgZg!Zmi1wO8FVb(ugZfA9kVWA$;4pV{DfiIJRWQw9 z1yRr>_6$Ioq0~f46_aqWL=8L(H?SZo@FXF%rSY7`Ouj_>*!=CVx)UoCEE)#RthBw- zj%GD~dpg6}Hw1sG-oLKeQMM#E_7CgSzrKG@bM^S#Njw*PDi`Wb_4EpS7^w*$#fVuq zj=%cDUp~gxm-%?>$LwPD)UN*!$-n!5^Q-*fw|LuL6QDB7bFhBDaUc5qHoaH;JnQEy zhf16yzZLYdo`*#Cb9U$9O|F=(%7|sE7+O(AF>xsF&|eHDi$ayb{k-V>d^nJ@PlotXqu{_#|6ajOt>yd6~9T9N?C57(L%9tn568`a-5 zI#mY42(qiSk|WULv)2?=9-8?Q5i#OoX{fTYi4ma;nUR7rPQ<2IEnvg|YJeT?%B+-G z%#epOwW_cObZ7oC@K1ylf)d5&%0VK-(m_HORh%b><+*Oovn@wVR zKy2v%T8v$poQkN;pv+>o%%Hm=NUE4+_)WR9n`iVSbH$^#_v4@5kKP{VA0hBle?H!S z-88qFOjC#h_P4kWmX7K#Y;W3U8KucJOrt|HsG}f}P^T7wr`oobbbUrMFLSD#++iXS zxoN-WO`q@oykG7-;(M{zjhp(hWA_O?YFLy{@C*Hl%9nZA-n@%_`aN#3i?8;E z7eUf&!O$wm1e~-v7xRV)g-?t5A4xxqe}J?fXgGa?|8V4A$u5KCDwCg3oLW*JFLF+j zfKQl0p*U#Dy0Q0jK3Ws#Q9U-9_dSceKJJgW`);ZX~y$-FHgE3a~s|5;{?0cMKZgJo70vl7?j+WrS%9-P7a9d%GwY5Ip4+H)#px;xj2Xc9k2>5hHrk8ZVaN16g0_mRd}U{n2XACNWs+24-K2&ktidD2t`$i}vL`jp&TF>;qHGEyWExWHnatks1_WpGwKi=znzW&5NZg^mqx97Rs zRvkOJ#H)@{W}n2)T~^xV?K6`nKj1m^^SpD;m7^84ZQJCC+Kw^7!;*1??!&G1$*1f2 z^1+$KeVnbW7r@zwO(Eh4HkpEe0}x^fLK>t+AQ3bLkpT=iEbX44KX^yd&WV&pi}aKz ztZbkNl`XLoiK>h=w96-u)0{&`zV#}0xeIF-bvzgAIS{2nWU9GFv8bdT1q4-EoYDlU z(T$5n>Vhx=<*HzC%85;VP5>`vWUs*GwUzD?_iJ(hT|lD0eF`bwR`3y9w^~&edNk~J zcAefv{A5vwAJloAMEv;Uf9*Xka+<{T6byH#7+1CLYup$3nEe1+1t>+OI+OvgC|1q=aXa8b{WpAl_H%CVpp$Bw?G~JRS`B13gX|G;J(NJ^mG*{4sRu#BG5EwG!5~IuEgoGs+CjR_M6e|@B)?pm-MQywYhtXfI5`= z$zE}`FZN4szM(x{Xw$H4yN|%A@s{-FQ~#9GKZkb1eZRnZg0Bny$bkua0O%+i;!MQ@ zr9L{h@v?}Z)eDE1^b_cX&I7qV0b2uDS%DAnv5Zk@)W)r{Cx_2{G498IcUibxE+ASO z)wpYAU#PC*5BFd8;15C}SH4`t(e{G}=u1Bjc$3HWxI7g`lH~d)2|R3#(h%on_&&u_ zF8iI`#vHh<<33P-kooL*&&2cukOKg$gG06ubsRR>sz0{llXfk1u-GxJFw~1^>C)l> zW2gbA!(zJw)~VLRR#<9JVA(;)3hcVs*!A|zx*kl7?jBqy8rY4apS2F8*Q(adZYSmp zl@B|2k<%MazBlIR-#PC6;c!$0OtYXacrx|z6TqF`{^oI7JCmJ2q@6vqhRg2%b!>*7 zeqG8dr7P5j$ZcQ3KY_dqAKSXMaKA$10epJMU(TJMF6r}8JASkB@}lnqC=Crs3){s6 zrC3N0pb5%N8q!M*7RftVSFb##v57U^xf|haw>ZjuPN3Iv3`GOY{{&4OsKu+&&o3e&jKRewwRTka)d+Tv(jL(42+%O}vITt5yBd&JS zjhzk%U1kB3hIjOdX^t`xoKW^tUwali4Cbz9-~?AFp#>8FF8snstv zp5a}2=#$63Hb1$52rdp?-Fgpd!<8x$6{IyI{4pLr_3n9_yH#{wdrrW|=2a(lOQcY+ zilS*lx&s1km2B~zjEv$rrUk_IuH%z}8!vI(dJjS{TqHy}=mE}>S$_viW4fCC6}^i2 zwt6U)dlw{r0ha251YLp2e_`8mdsrTU#e_88o>#6X{qiZAK!Y0m*jn8#Q<9lV1kS%o z=XUD{(ccI4&(J*aR-b>cj}QqHJUHqamxv^_p+_3AD?KqQ{m4 z`aGwZ?Awc0DseWUi4wMMcRISDOdG$tvfi}M&%)~3M9#<`ae3AlJkpz!L)tNCt-2|x zr_&2gX$_Yx56UT;+TP?A=W{`8OkYIBkdVuEY6Dxgtq09pv*=2#G%^m$U^>aLRa)>v+xX? z>gE^1w?O~VReAXVj=7D$->pvFKK5&Cf%EQuedFJBXKTJVRbw2vgi2b2o5qlK!ZoP? zQlSG?Lg))hV57N)Vy3egM8ph;Ci`6+$G{ODvxwjG~nk;GWj+AJchHx)vCM&KP_(9ZF%2XMiY=qZx9_kopEi0DukKF zIT2A!C}<1DauhGc`lMwTK_yH*jgUv~2q8_EfzvaY>F|+a19Rpi=+Sz>2PeQ%${E?5 zwRV;G(RwSME+JsX@7N-oCTYrDy4rP|4_RVHPffyyML$f3#hkzXo&>C^34&Y^vX>iG$rUwdo z9?d_#9rbxUeqGgKn-8SmT>czw5+-Khk=F_XL-o_o`>pR0xmJbX<+*MeYB4fr#u`<~ zTnvUs1vDd|Xz_%{ze%-(f* zufFr|$;8p?i{PEV$zS&QzMDEd*W&nc4W4S(!@BAh{kZX`^Z4NIu|H0R&35}(4=00C zoQO_L=9~u(>>p*pVTl}>DGviO(cM*Lty&y4t)G>JwBQu%rTdr8-T%=3PwN&ZhhSW6 zZ_9;oEh63nP~hAXxw1BS(ms6n=cDz)o|S-x7&!&6(3S6HU+enDG8blUtqMsYAwd)? zhSYfmuN4J}N_5dOr;CO}aY1OLL_%@uH0Xz*91C1*NYm13YAJ!#sgE;Dbkk5&%+$CN z4b2~{UWdKsXWB|Bag@TyN`j%6;MiueDs~Ah1TT({6{_tZhqMu><}0V`Kk5hZt78YAyGu4Y>)znprtx{^%IG#l*Wt?DSGfGt35md zl}Gw7jDP2V(}^UYbBIG%_%GOhGyg06-y$0RO&?Hd$1Bg1My7om^05|o7N)Pr#LF#m zx;KbY7EvUp``Yjv-#?46(;~K!I8@#`z%;9gu~oF9svIT5NM+$jmkd{Q$^}w8jY^9o zPPi07uY?#2jy16*!4%eLme& zo1F9rur#WO!Kg@HB;9xu{3JbsM?iCokhd1VS6JJ66fbusWTXlp5JdnP2+15fg9rBu z4C~c#ykn-f7jLhztoU(K)8m|p`q_DW*e}_;;I-A-FQhdulW6}qH@q~}&)ABZ!64b= z#3$2ajNz!BSBvXQJ2y6$QM0OpQzf3r%qvaT%l*Ez7R`_ExviY8wbQ>f>3sd2X~7id zl@^bGY<`5QWMA*Bq+_$aEama>I)mos(a5ihu>N)97-QqN>ads8Z)@B$mbKT$xI3Ml zeWoQ!iM9UqkbeK}@t+?4%!zNi*6u6?oN8YNC=N*Yfp}?>F-6EA`v8_3MVe8gqS~*U$a- z?)CGn_zV8YAN#%Z`a=4Vo}Z9XW$(bxKaRisxcKCJZC0{MP7}#1uGjmzI31T)3=>p@ zOOX{yOzb4}1UgJKMM)9{WjW(aF)51PkiR^}uH~d>N#Rvr^>tXKW5onM)&*=7fexS} zB|B1y+1NWAn9GaX&5eLs)@e;c7zheNnSRQ6?##TNeBOB!-L5yyUCW}pDzlzelCYC5M>16Co9uWA=)5rAj?+OnVZx5w=}&kIaFL$)xdUahlq zcKg>qGD&Nl%v(N-1<8jUcRTdX+U8K7*imzE9oy@Ri}s8*S8H+c2WEauejG(MiWXE7 z2@wLaLW<&~;!y~>00U-tLD1SWg}NY16jkGM&O46w6D&AQh*j_mvBYaSvoQ+%vMh*7 zYyeY&)*NT054eJ*gB5~w6%}108QLveHI+wwL@_fOg1Zt2thyqDlA}g5baeh5P(WM#0?4o zoJr3tb70TGRXd-b0Rs@4dzVq`HM|^`g|Bygee*Ts7w>g=M0Q2<$&G&d29K|`C#85=l=iz9fS;QBb z1@;M*C&+JLza7!1B*zZE`{49`fCdaA5CdXDLmo~E2bFu%5D0*za7+HzGEcXum2O1m zdUB($|5j*=8US$?jX+5?7MGU0esfA@pQq8*ZLL8)(Y6{Ao1K0xe^&Hn=RN4(-Yj^u zMb|{?a>dS0zx-g0{%WogJL%XnYUWC;J^{D^ae*kn40Z^^loeoPUQcqJ5r#Oi^U2%a zF?D?qJdZvbDwH>s-0`s}_6Ku(@wsgsXX$Xv>VHY*hqoN5s%>evP9ax($N1?D%QylQ zhqLnlwis{4D?jmPcz=N0o~GDmCs=-dT5(CO$S-u#Ra9Is8!K_(0BhAHC%+Hci* zZ@Lg{BnPijhf_Cgx7w~QOw4*f<8!2~%xXI@I$K5CH~aC;Is>D#Qtofyqcs2Q+qlO! zLxQ+iUG!7s^_G=6AQ@vbdX@|BLRsE0&{IkOOQw={kn-v(3t2)QqYlg7>WN`k6%?oZA9fAc*79fd+ z*5!Nun?@M`;9v)1UmK+#O27Q!Yky%h8KBkK6fhtdI!u4pO@y*lr3d^)h}IjM8HuYWHqRbd@wguN~eMf&r|Vl=i)(r zg(sb9-(Uamwo6BT*!cYI86nk@-MQj?b14YYuHQ~S&gqXS*Uj9Q{{G?R+oDs3-h zIGh|5iJA9OZXE7hxkisPl1FcAm&d}&*0BX$oLcNIbv}WL*D~RH3T@rvvCmJpHma6< zt9=KVWg3%*aXfXSr@6A5?q@;(sD0{rKa#$lA4iAp+Qp;y;TUOxn**9dUWD7RW&Jr; z%P;WBG1a)(_{!_Aj7Ke;zkp*T66^RjQ=R2;v-yL`XL2Ls?RgRk5&)1NAt) z3)V7JOA5>1UO6^y%zrgzDO#ER+VBNe3bj?;%Dt!^vvQb~Kkn9TE#2(=&+_;yTE7v4 ziV}3EMKPPYzDYHbQtV(AsuW8TqGZ!Bl!{s6TxlG^c#w~I(6ff$H2Gx@KCJ)DOXojn z{oe<|QhRmjf<&^~R@|c;VKq7pp6;}1r&}GPnm$+ktiTLpH@z#{O3w1)+spM;GrpBE zt)!?8uADj|Qn0@YFyrY?d@sid+YiWGE!3eg}N+R9-I943*11(L8-x(Q(k(K6nxdTfI;5EHG)zgX_#xVnSl z2}j3wmdUtl4JrY!(2DJCK9j{0a&9!&#ILB*829^=-nX*0vTONc zt9pMbnka?S!UVZvF@*-WMvQ^Jwcnv2KX{1Dp~zyTKNl!6;$;Ok?IRm6dH3uEePYkE zIexLYRasi&n7*Mi5v`#dkWUoXYS}Y1G!V}upC|$PV)&f zFfpipi}*>hZv-B|Pnm2ahH_jEU6Gh z%$|!2kr~)%0z)Z_iRsPQF@q|Bq=Qm37P_!%qLC9tk1dgj7@qp9yBiWG>#Ug??TxS2 zW1(o>Y|j3_e(2$1sdDv(tO!}Cixmeiy3$^0-v8X3ZeRQA{Jh#ZWY}>vxK*y9VyMbd zZQ+QHMZ!m5dG*Wn)O|c(xBf>bi0l6Adi(7=`*QGE*6zUvPyeU7asMh>%advCRhCzI zVYIvmYYJyhA*?M1a%?2UKCggRy0gTQ)&@2ais#TY9bLJ~jlGnNd~-=6#?qALw6aq5 zv@kEU=tc=_E*5E3$K;_5E+$6PV6gxW~2h*(A{Bt*K7S(db!x2Mb>-r(0@iV_E6k4(iX*o3e z>yd|YL`X3~tNm)p3KbEhis@2ZN-AgtbS4q|0R485H>ruLlZk0q@vha)9-d8bmuopn zQV^6z4E=@(b6dF~sORl?>e~qD>(nQ~V5nOq>Z5Bg3zNVFzj$S)s*N4&44Oq2IkFx! z9zR#*%Q~PUS0l;RW0%cXKG)|>bLo~Ij%BPaDGYXlH)WE737qIoY}-mIN69H*ft6W-4U0}Fe7%D+QdLB01kFiskbyP= zXck>3qVIat>EXIqPvC5;?cn&HkG*;5`lF}t`-krTT?n6=B7)iyih3r5qfKW<)r;sn z1BwYk6S>AyAn`}bes1Mje$M%wm@J?UahX{)RGv)sIF?<+RppoYlWRr0@wek&65n6` zq6wy8D%sXk$t>leMfIfk+pl#UqzqAD2*OCl)hG{ z=F~H|?iEr1`8O&4<35i-x0CBzzF+~lz<89M*4d+%1|K{AkxAOT; z?tP(iP4lzlbk0x(_WIvE|K#rT#{=i7SN;KZtq&h4?$mC~+RWEQafs?mnFy4M(2Py@ z1PnDXodS4f$2ifM>2XsuTW|AlX8!2l46Tot=o(mj(OGkXLb8xbZM`sp2~$DZ11w5#GBdNaIpx_Z3FurJ=ZFNF_2{^4|Ea8DRNNu7M8;1B{C($YHf zltK96K!H>QwNl>fblc~|YtO7W_gkz5x_X|Lv>mNnKCLN@%?WurKT3N|Wa^%H)TJaM zrYH<9pcp`#)8$iH)EEc|;R*{9!107_bRv=nREiioAO@GP z>`K??<2EcrXn+riyaI{voT6}-V8=W1#M;@R$GrZps(UhfhN*4blY_$9vIfI#g%)1G zHI!lZPW0W+=fqrGZv*91+)+iz*hhWJ0ph`K+K#og6L*opMh(J|K}MpEw%WuK+sC$- z^HH@DdVB~g-SSkR{3-Xeh;YFJt*M9&R5ay8#sNwOkiuGk1d!P3PxDN0k*qi#;FM&@ zHiZFA#F}tP+Q)7%go75-o~E9|y`%D#*8Ap{#Q_4L62Z2p4*2~`FCFoH=7h7}c{)72 zOR^>Imx&*@%@aebL1QtYTac53MM}FiL6`%gdLb%zS=ps+u(7oGkuHCY;Scau7oKjZ z)okj|IQt};4R)js)QM6P?EAq)>6Z3sT9J1ksHY=yqKqKHZgg}oThvVZ=22qp(k#q0 z_*Kbq(~IYR^VY{uOrtw-51tOpT8vL7JybVpg_;2>(u{gR^AzE8Xp7zojJ=buf!^bl z+(|PLh;-CPGkh?~Gy8z!o3OxK=v4;)Yd?0lIBlz%W0GI^{V zi+8r~R=t<26+OfIHMC!edNlv#CH;uzYZ!bV-fif8!+Zx3Xf@VE+l1lzeS^9XXm=gn zRG}6sUyzX!{_`6^0$czHpdpa!op~H|RB3yDIF`3x_4Jw2rS}uqV&f;?>Y7;S-pR@T zhwI$hx<~CPGkaJ~!2ya5&e;V$(ujKWSUu)Q0+!MD>BOa@T@K+nlGBo42eZAcFMk%X z*+(;%!{kUy4U2da8P)=2gOCj+2$b8>JDPj1AItA9ADd}i?77QqJeKtn^luD3l-%qt znEXiUMq_llnFO>z4>i)o&ypc^tU@rGt)H^fy^;d;lq+XEH!1=0;{$_+kh=KXTS1>+Z zJ+6Jn3#U8PV!1MhQ*JF6PYNfiRmy^Q!N)XRM}-%Mm-f~B(Va!`n$D-lVwr4wL{nqt zvB}@$Y+La&HtW-%Uh<3HwSm)=!?2z970}Jz1f`=P<>+J5M;Y70|8iY?2a|0Ky|eB! z?dgd~nO%ZmVCy{=_0vU`))X1=X?(!jb@TFUbiKM~E#dr9|I!}zAIsEu0q<+}JcTYX z+)=ArrHCi&`axdE4EaVDawZGz*J&&d^CtJiQ~aZ2&ol6qJOu0{4@eG8TfUl4e{$~Q z*TS}*+M+s@zciEmSda2OxWj&;8hLAEDtlt=u|e(nJ*v0oZ+^cB`eEPtePf=+ewae` z-LBp7pqY+qoQXxYZbR&!+4Tn@{GqbJM!WNehr#2{)dNt^wvU_;2}8N#2+E} zT}burpJDzVl!Ye#3a4BXxLnUFZMx4d=w6U5U5xZ-B({YSZPPiEKM|Wo;=R3pvRr-& z_@PnfqB&bX`HrjP_ih)k7D7WJ~0lh@wdk4k?0Y!k1>tKT-J+DL=Wh?{*ZRo6NV zmtOIfE)ow+Vt%Y2I1lYgeDQc})0CK;Z}h+^HR4x7IL<)|4if(Ks(A%HBMB7`C^6GZ0>> zVpa-}Cs!B)7=qTX1lk->W+lythib%H+)!gY8Y&Ul&0f&t^PRN{?*P9l`eu1+{jI-H z?b9)Tf0f_6e3%wV=N$Cq^Yz#Fs+;<}Q5~D{(eU8%9T(nj^lz{Df81I?L{uaBO=mFT z;$-AON0FRIo`y0jP3HiPqd4xC#&K_s_UX*yQoOxy`FCu8^xeOT^Un<80t=VPWi%@A zLeq?ZoCpAGPVaxi!`)we`sV5Ewu>5Y_oV%B7+10L^hP=2`eyztmOC<0*%p3vfQ28a zCiV@_TN63_BoxTBN|95Jl_wH<8G!+J*^|M&gO{TUHkz$sBlG=HdxQjGJkb)!o|#9i ze2y?Jpb3@_o#wfv0z%Kz8*SSw~{AZAYh)tCgH+wm~Hp1?t6ao z@*N5%V$G%OVBXGXs=>&9UBRmD#DYS3B>at;CpENaJ5A}ySgg{56m2Im1Txd?UMLg- zT2nK=)ZJM?Hk>)bWvRY1RnFUkoX#&knMmwe%4oAlu!^q42xYi3(&L0OmYE4I)|urGb`qxsqAAIv;5m%dnf+mRAK z)qGjqKK}IeLwG#h{*s=1C8JjJ`SErACG>rb^8T|t#Wkb@wYey^GRyUcFo@YRp8eF{ zTXm2!@-c4S&AiiSO(~AQpr(p-A8J>zG3lFD%-1+I$&SEsnRmMh0+c9I+hLDf@b zq=nwBQA?c2&G^_u7Lx2h%?a8xKyfHvj05Dj*x8#x&)S_w=&5QC4f9b$%T@v@?m?VQ z)h)DIFT=+I&KF-bT9Zul!4eQ*EmaLbW+sw0Rb4E)!kGyc46sR_p-p2dFj8x(1~BBN zsAx%_1Sk_sbscQT=aK}jTRKoI10$7*&=`vqxX`y#A8h8@6V-v^4Lk#x=;1?G%k2k0 z)%)J;M6hEWDdIh}c#I#LU(UpZ)0=~*NkNoGaMS#wOW_)}Uh12I`HHPJt6-tY9%-E! zQP%D?`3pJ*u%*-p%jU`Q(3g{MYjM%)X;RJfHoXm5)9>Z|rF!qZ1CfDpwvOJteX?G8 z-JPW`sdHB=z7C;Vd8!rPo-?)~iyk_pef$j)Zp+y)AFQk+yWx*0^z2bZ z=1iDQa-qx1Sl6!Rj{7kO^;Fp5mAjnu|$R^=4UMP5{-BILQ5 zxa;wl!gP+rxD0tK(e1H#by&nHg;76O&gRG+`;iGgTR@9!yxVJ>)B_{iiL$W(TzoE( z2v9V1fLblC2IG(Hdgl|Y{V{_*o=`&;Tfhy9l*BYyOk=R8%t2q>YRaDg4b4) z+rt?oNE?(k4q`otgTS^%CHKg?0;nx8{R!kA|6;XibmSl&>g-sW5LG38gn&i9WokbI zv$UPNoO{@uGaBKMVg^pvK7QWSUcTMXjp8)6dd#S3!72B2?-{NyR95FMlb?)(Z7wzj z?Zb3Z=HAx1XQs%!bPIIa*$1JFGtP<^QUe7y$xGp%Vq~z*k*>~g%5~U2zW1fqw@XW( zUh_-4l$Xb!ZMNFon;nyRa+ARLan|p-*{eSPF3|rDsDI0;e>G4Re2AUbE+$yi#HPBg zvhee73+uo3vDwQ!v|NsKp+pzDiKQV(^lr)Ta5~m6M~vu@GuQgQp7%~YaE&bw26BwV z=BjaaPU?$H4c0RSfeqJ@Tb6YZ+h?WF76}}NVORh(SHv3mjA3Ty>-f*tz3H77{F;yX ze4(SnwO7FUx*@)QX5;?&=Hs}|`R2_;eWW__+0wc*xDbwrxuS|h=?W&Wkq2xIW-gS* z5;iZ4s6aEDS?8>mNwBPxM(Q`t@u+%|6v9aP#im+LtapU3!(<^{#70yZUCOq?OZm#^alOt42AmT)#gNorxbEXnOcM6bc2fokaXx1Z;J=g2KzJ-cDx}TNBKy+h%)ua09&6F{) zLtW7p4L0e$*;nl-pr5?!G;z8(m|Maw=k1RzzeN^LY)nIsa_YMY?=GIP(5bgnXhfZC zGt8W}IyUYV5ui>38`7qD`(e&uPKy+xN~2uGYYPkT@ppKOf!Nb4WiUXJtP1jKvF^g5g_-7DuM^n&ke4g#cg?lFpYIE3y_i^ zy7tbi%8x6@?uN`#Gyo@2TYj=^O1lR5B8GHq0HCyn$E;ve6Ta41_2WtSZbsf^uaX72 zUs3p2g)htG$In#&S>#+`52%1V2p;Sl0E0k*<9*m8rNydkc2PsnAZbE%2A+Wkjf3E) z3|_2m&bKo^1&(aKwy%c6>N|x6CbYp=WE5$Du@ShBaC2~CcQviW9W#t>JhHE$sav2F z>f?z0x*Dq0AU0fi|5R>2gI7&cV&fsBp)A*vf-;x zn&dF}ITst=4E=rpdx3sYtrC-(*eWI!XzA_MM(f$r7}PoY`d#E_oKdPVGw(PrK=;q*uW+r0U$sC zDBPeV&j7lspM01j7wxNzuSM>7B5#gJtEjEZH-QlXn#fpBF*%T{tVPG{zVzkC2wv1X z*8v4Fk{|ddRJVy_qXi(N5)EjjJHk?m5jMKq_u%58BzIYjhiC z+GfvdvokZI@!H6C4z}D&&yvxXHrH3ivifLjww8K%)(>{f2#nC`2w|9uhpRa@gb$A{ zr_XM<+q4cvn?M~4@r>1&e$un8o<|39B6Bx#OdROA?scAej9r-#*%p4mvfy;_-3psHOATl z7l zL(c)0`&v#A6cGvqK@b27=@8E!&?!8bodWu;mKA#p8-0wYKYtz{V{3FzMC71b zqc{d!%6BDd<5~exkQ5{nY_=Ic8p)jhl-=uV7F!)>^M&n&iw^A6J+^P_=HlH8mE1sE zbKN61FngK9lvm!`vw3&BkQOu-l7*y|PMcs4%%gKhM&jz&v^;gt%nV?gc<1uF?33v3 z-`)IbUE}PZJh}@#e?v~KRUC~TdFndYaGgtx1gv&hv@caDeAo(L$Rhb88p|d$;ADgn zjKL>T-38%+I9!P_tc<%G9@MoBmI3D_m>~g*I{O+WHwHLlWfb=ber@abj=lnnzFW`& zh3nME+}^v>x&Gy0#_GnW`|C#7ZjW)tbvgE(uHziAk)UKxOHpCWj~|D(e<~9H-|^{a zRcLd6I(k~uSse-XUSV1G4KR2sM9 zcL^{ReBrP&k{)X5JP}+B6mm_<4u8$De;m1^TYYNI3l?XMfG*os2f-otzr>Y)?!LgIvXs*}$=2XW^ZQT)R6S~yZmVmJ;s%uXRjviedZre%RUx$91^CXdgDN(x z!Kt3Y=Fzozv<8IH7CHx^#>Z0gIHqOq?kWRK6u4LhE^JA&xETrQz9~X-WNcr>D=)m^ z2#^hN}w2q2L)bt2+$sNw>5cz!c=byHSJRI79-rXXZc z-D8CipP*YXipYcIPSv>E(&@WafG+V0KFS}}V)g?;+Ip~m`;puh&7c4XHA5(6mN7g| z@~N71L3Y9l&Gp2yYwT2Pf)Lqs8hR3(9jWRN0efa76c7+(wm<=@l#(1#t_oytzHp8L zHsnHCio6aq4H66bRi{#w0@GekrYem3P>DS|Hd!4c0Zm_(K(jmNrLk6?dFJbx<4%nk7ij^R&&ij~{nSF5SjNhuQc)Td@$Q%n}a-9Z>$ zP(1Z4XXOkU(5>PVVSfXf>phD4uc+ zCL@MWNFg18h)Dt)5fzu~xzG()`Y?|WSd_RxpbH%%PUy`uA3>(slR+sngPC)Yf}CTYjZbM2VyRLs2xU5AM4{`Vsiuy&>;uj zgR7EQOF!C0HOAwSJVk7 zN!TbK6?1*R-bW7gw7v9P+b$$QRjTXipjlyoe(Jgop`oH3=fYEMvtoJC%<-prZu(<& zeM|r_xW#NKFqxzjE?Hy0`BJ1a9${j8+Zrb@gnUsX48|o|5tQ65vsHe6eCPlBd|2OW zj|scslGn5dC`Xlu_LD*5o%*`vRViy_d9|?st%I3Qp3ACIY5v|z-H z_=~Xx6_DUsP*yoKGtKVkK`TTxtiV>FWBNG!H_98$WHCyBVaf!ZgnfLS&3txL7YSAg zMQN#srh1?$=FHG&vT@(jy@L2GxHImC_P{|r;MT#KN@o??f~iU=rq~uJn=sC(>v=*q zkA0pqX2Mh6VyPIVk#J+a1c=#4nsKAHpNdo5z%zTw8hqK&6;dyrf=UU`xxe1A^C&|T zYRWN-je-PcRDu%EI+R8g>THw1>U=^AqWoT)Do~bVwDQQ56vUBaR2YF;C5=jNHo~Nk zNXZ&#x^@F9L}qvsCt6sL80#$4*zX&za;kz?IU*am7A=c1m6@f(l2FpMfRGnUK}u+w z%FwGV(S~T(;;3N4VGvI&gj|H^QZ&NCI;s`}cTi+k_M(M=r6a*$L_@1JjYh^b7J|ZH zFa zh=-)KqWYWgvy4&L*g_3d5c$;^r=wE50QJ7+IOX=JIIZ59Q4|E%NxNH4leg0IHe<1x zuWwY(LF&#FTaERi)X+U=tY0QAXR1q3v_9mlGo6^KfcQ15YBGkk1)Gw|8N@IGN?v$L z+?9T6iqAWxL*vKD!5ca0t5;b)^m^-X*nd>dozk@yUV5dZ7#+=0{fU$rKGyvIWRBQxY%>DUQU<9qfs2WxBl!4Xggl;_-EWP| z?Z}vyR=fG7o_zWFSZDQkl&79$IzH)h>Ie^j2dPYfWD=WNH(x(8eiQOK^LtKWMx}%+ z^5S_No}Y^%lv=85UcY`FM%{pYLYAeMTCh&Tu`8SP0i{i^E+4^lewahvS4{8md9M3Q zYRL1wl1DGSCohUh1{@2O43kt-Pq4^JAlNv$b(7(x>p;tMU2@6F?B!zy3P)$?LI2~JjdN?4{U^x>GNqj+ zd34WA?tyxD)SOWT9QEt!hF;10so%`O&n+SyM!jWf)2kI#`A4SSZ4V72CKxj#5v^ihhO02b*7vSwapO0=Qj}>0bqVfcWHa zg9+@sxbv=~*zW0rpV4arEmG1kv>$&fqu2)TBx_~oZh<}K91O27Bkj~fdxy+aB^Kuh z6y~8UE;!QdOyL3F4`+Gu((Vh=?F%z%X(g^Un*9}p-Z&+v2x^*jx4r)8xC%W{dvmzR z6kvct00JWjGy>y9b?o8tbpFFzNMCRhbXVysoH%h+BeiBy+CP*;?!qt8WpxO5++Z=) zp%Yyr*z+)HD03A>4i_RV%TQ?|tV6+c!*okFuF3xNJo{^Y{#@L*&E3HdfACj7{2Lr& zdJ4YC^lf*~L{zpIs&Uj_rw_x`F`wER{1XTM0ubbq5MTpPIL-!aiNHzukE8{z{ap14 zc2yLvN$Gvt=~PB@hpz9nSOm}vTB`8V+XgdQdOh{^R6(d-isy*XPQNSk-n*}H7_VM~ z?Rfp;R+y`})jBMG19#Bddn&Y549ScrH9%49BefuSYyv~E>Ai{j=3@7QCN4Y#ZIB1V z%?^$c9tB+$ffYj<0@^QS@AMO|2(>H$9v#BV`o4$?o#7Ap0oM<2}_F3Ww;hQ@r75oHfII~q$?bvhKqji%P~2 zRE4R4kChL)g}Jn;ex4fNWw)Z_iJc%g*a*TMI9G zXJpMi{|tEHq%0Kk``^~Ldpmu*kB{;#;0+^yZIs%#o;trB%=7MjrTn(0U*5s>!N0-4 zBDNgDvvWK1fzh|77@cK{QsvoW-5YawH-HL!n1PPpS(dpI3mYE(v@g)a zv*}>>Dz)^v`*D=*T?x!SvmK9qNW2VDCsM<@(2cP#dv(+FixpqGwGl38Vb{MHw@!WO z-s|?4hwLxven&MinIXr(2dzTi725G&za84rXiyzQ(|r?5@sK#8S2h~F7{Nctl|?ox z(LafP=LYh2+u?|Ki(W0_PeDpM3oSYVNF+j<|MnLD%#S<{){&`nD16a>#`CwCCMLAj z95eop{(IOadt?h$j`>9qJNnT9Ci|;+m+x(9Enez#+&138@tj>ZyMhOLQMJ-qAQ(02 zFMl|j`~577NsmB3uS+RZ7%3(F=|B+?en74`!Cp{7f?&pZmbq z3|nQK`Opy#u+VsTNaC%VZ-4h?176O|gLy>t0rItw7GPSOvJa-H%q2~>I=upe{qaI3 zM=9((=uzLUrm7r8BVDDqLJ-t}i_REKvT+z?Fcm*Gx?J1ZhAi@>7?`8$1-zw`Z!C zpY*lorx{jzmAdvgyEt|rElwR0reG>Szy&Zyy=I_&8B#T77*uUXL&$L9F)KiJ&Rh?k!e*ulL^qHV@4u_1c6}%OEWAYMD4eg z(eqQul|}?OF1X^p*2`jfEKQ%F`2s}A%0+bel4ToqHmnNH;%d3Mz=aE;C+E7CV5euz z{Au`k;F=ID%uRC2kl*)USI;*VNEkJ-fD5#}GRV}S!NDv|O$pFL>2p@?;0CYWQwIWb zBRfNX5q03QSgSzINAzZoC&sNNxi;wj=-Tw;@Pi)G!s6uv$mngHZr(~b%hBc8!tydz zjY||FkT!W{pkCfz^`^M>OTAs{Xr`L5xb94t5x0gd-G-vU{FrptbUeZr?Cu#{ol?WtBrC1@rSyaLq$>kb& zlOL^Inf!0_>wjCFPkvUXM0b>{lBpf%sC`v4MS@~TObJ*E>1f>cZ_^Kcwk}k5%<-q@ z*YtxZFTRr2T2GdY9k@s9qzdccKxUF3R5Sh{l_8>~k3a#6fkaMmvKBwx`qhu|j^Fs1 zD^7%iowQv{^@n}@rLjAxH-B7E>+X6_&}lud7^EbUMfPwdOf!~1A%j5@YBEieIiJmP zuW`A0EyT5iYGK#SB?VJ~n6nKo1g0;XZiyAsW4d?K35+=|b#R?c=AIly;~)T19J$qI zn%ExOp|(y?$yn!)bzb*PHTrfv+uTep0-MiT`Tae6GWxR*AfYmm1u;xys$=}T2RYKU zzTjHJ&e4;G*6cdr=U668Xh$G!&&`6TS%lXy|NoWvHa`E8uiJB46IlU^&wZTa05iB{ zf)(C!Ji15(Zf&RapFZ_#!@S`?YCsXXKDbCDNZh0o zV44X<6uK4?V{pQQ9k|%@vFGiLH}DjS)*7{BAOS~!tj1_-6JHQx9l}XFRG*n>Jbgqu2eg}mptl&YSRz3Ov^vox)`46`A zpG4L>WM@Ii0UYRm9u?F0EFg|3w3(n1WStG<^_KfQGb+vZB;v1HE zD>P;68R7I1kS!}^7i2FL0M5B@Y?oiuHB&EhB76tluKCq^?da>6`eikPksq%2ZQ7oX zX6~NO#gjZNwOr1-v_CiU(2FC@>1MSBFIIb`ku5BXu&64vLREA`O&`tp(#^WavZ=n* zUSG0Q39c_+*D`~rN+Fy^e;alOYUW1LZkf>ObE;3De2ZAVT}Y+k@ft$scj?czihVI()pGYb+0nn?u>& z>HX2Xz$ySqhu^>ZtN!p_-IAAZVa9aFC6^GlT(92up05VuYFxkV+@37(BNoE6`sVYp zpKFsWN!#2n(}#vMOJnFLOeGFBc-(|_WeMBFdn)0Lc*p0?d6vzT;$Kqtc`hx_HC{_@o8R2$~_KrCq& zJ=x7*#|Q<7_j*@6>3)cpKpJjEJhV0c)8pdbyk_(5R!dH6C+JsotVtK^nkgv2qRMdIGcAhLxVe(xnyQ-DRY~G zLqbZi$SDN@0eQtd$cm&vz4FmZeFjX>O>?OQQK@1^K+@Y)zVzRf@&&pH+L_uOa0Jd@ChEoSz|E|L>jRQKH;G2Ty)^oJW z++43a^(NKt*7q?jueqy(k%>FjpY74lyd?lg=wLiH5lVeD`qsdAc=VvEs3DKmn$Nlh z>o2!XKz68L3^wpW2KmB3P8;lCOR8eSB#ZuS1uqcZP;LZM`UcB91fa+_4&!Lzg6HM> zKIJkzLgZmp7yua*gb<_&0g+Xx7vdjK{*z7VRAWBaaa#as@-zo0jusOh>xwgI=^*;7 zPj^IhouXG2GMKIZ)cRc$1J?RLY-QlpGMI)-Wh{#-E|#wA>MhpDj}FTxcI&&^-|sJ9^g28{N45^fZF2s;fYZ(>B~!2c71T93){K*CXGc8VB6K{ zy@^GGQ^|{o73YQPXbiU-MnxcZfjRg(-GhkePN*=S3bqUWsn-DXx3T?)*x|uh%YC(L z+`o}TVKV(^O!yw|XQ~h#NUgaK}bwhIR z*1kT@a}Z zvPaV~f~s)XV3sle%Gvki_u=dM;P-gL+mR`RwLd zAuyk=jXidP+|VZa<(+t9qmwn<&5T?S3y3zKf8cJH|Hxa*`#Ea)oLA-_ead2^;Ya=^y+zI@|@UfZxj=Tp?aE7F^JB+!)>-@kj2w?ln&CNZzpMnJw?+{9KH*;-hg{!P01TR&?vLqw3pgdCtgZAy`R;5dPxx3a1oTIDd_=6M9XFxCV@DPDPTCE zg49@SzchZh+e#XQlW?3wD&X>NUVe@^2EKsA;Z`+bVP0T++0U_4Q5T^|1-vMlLq=gk z8g|TF)up;Y5Xh(Q}=vcntFxVR&FYxN6a{3hqex~Y18DF0Zj;s zRpCxW-x7mFMslXW!#K!@(Amc-$_igT@7G_Bg`oL=_el zhMD3B1|~Ms3W~s(foM0^v}P449W|zd05E7$Mgi@rHiMh0#85AYSERfFGPSF_!UwD>s)-&vu6JVw!2E=EvRRGg9rLAN&A7c;Mwqx9l&3SRq^^`+ zMJ*_e25;a+UXmQn_(h)ajl%T8nQX`fNGw-8H&=ji-(OIdCmGc9ck5W#ebkGW(@(fi1b(_KRm zQh^*;aP7H!yADP*-&dcxr>tHoOnU7XLISg2hW%|6zUb<)iTK%mCYh^8##|s~>o{4s z>Km((^f<9YzCB4y8UzQa;!t&Ie9kBYiHgLCz)(4seD`jOHWe#8VR#sq>RU(4%BQ+w zd?79G7Iv{o=&9;3b6xVTf&X_uS~EX!bw@W3iK`-QB4izOMj3L!jC^V9m&f(f`#sX2 za-at;zWWbe$^UJf;X7$FRSs;2u%|aS`(nICuJKG6x~XUjT4Cx43aQ6r&jXHsFqf)w z)&@#eTW*kE$-z^g5O+m!}All)9+V zw|5)8OTb!f`|MM7O=B+( z7O*zcc*6CXw4k?PEJYJkBU?fQLf`DBtuS1g(gtJ!mxkf$HVlMy;(q%v|1-kd!w$1u zv2yYr*g1_SY0~etxx?N{UH3G$WyOI7=On%z-%la9Bpi6K6ez*rB_Sfy1RWOUsQyp^CTnWch@#8GBTFC{=af}xm zJ#`1pG~8uiy6USsi+UvL8rNGhYJkKff_d}iA)f2D_SJIns&;88Fp-VKK=%nIq(g@g zcT+!)VceXc2tWxT=^p3*lg4yk1okN{)=MMkKPTu2S*3I;Se^II(6e?L0z zsq^a`b?gl@K}Pd%HO?OCX@Y`A8hwcQ@Y0<5?R*fxchF7Qum7IEv{l;JIiGW>U+hPR zzdR3|$HDhDo4o9KsXhx&n2am;D?!PY-t+UhJ=3nfq~_v~e%N?-zp#_TmSilZQkVf0 zSlN!$Yd=s5+pYQ&ddIB@LncE;S=o1fn@4$<1czyE3+phV%Wf1%QQF1LY_yf0ALidE z?!NW@9xSxL;D%>I|9tzY9clWp7;@M$Zr$!W$xe@Rd}>yH(63>?%JKQ!tNo>~gO1$; zjMgxKJ2rxcra20WrC~Ort=Dxo4@q}wk@1;GT~r(?rqHdgEP8ZPOijj4#h)56E9=g{ zkSWpH-a>a~K$2u6)L7h2c+WzeC^!YBPtm%*YO`&PS#;GN35+JCzQUtW60;`gn zuFnec8+|K(JK55xJ8`Y?I$bYkz@B&e6#FQr4{pv?qz5t`3{EY7Ei!Y3Z|$BD=j=|0 zDX^YG?S9tLkQ!BiyQ|JJhOBn)tpBlVDOLAj_Rtct&#l|-#_mD zjeb>!wOXe7q2Fp|ldmSI8p98T z8)gOQj@?)@F=a(;WETc6&;@hG%B*XcJE&koWJKXWOl{a9#hoNaMJ{EBXlo&>qwYQvS1kz*KT}IW;Uh$8nK!AILXbv7j}NRZ%&j0-HSiW!`&CKiYt~CW;}IbWBktZ+<-bJ!13Ulz z@GmAHi{pv0-~mA$;#KXSDyj*nV#O#xtWgJz1&{(!0DD4F5)B|8paf+e&v(PoGN@!B zkgqBfM71hIDRG=H@2aDKR&GP8CfY%7`k~tVri)*_>8?iH+ok7e{~^u&O8I};k{pO5^j6kbqD?WdS%mf_?VpRfcl06e(qXC7C&c5nw>O-= zBE4F<79^J2E4B@D?6PQEj<*?~UW}+gfQ`4mdpE`N21a^7di}emenR&@n|F_bflG32 zKlmf?v%?oKr85t=Mq=64XU8elxhUjv@f8B(BQ{hO4CXPr$v#I5sAW+)FJ}eY!+V7E z%*x1&Y1ojEpl4VRvP3R=Q#XMnc38inJtqU{LRf5y0Em>ZFE?M3|NngX|H0& zEMkXyLCT2c9GPCgwjIYw(#XE!9#CXTf;t=2<=`*PWMlCv3`BQs^P9r^I9l30L0uif z)QwG+6r8AE)|UtNv?4luIM;7h-*2zmp4X_4Vm!m9tnGU2&Aor4-U+3x>Gwp&{>SDo z4~1AFjRbE|mqp18}{np(c(XGdSJe9n^eQ|sTK)3=GG^U$yTCgA! zbSQ)sGIBD01`i4xa$U1qxFQrq8ney|Bk7}ltkakCmE`ao<>i3kOISOFA>9@QV7C%- zNN=|M9(vrot>hs>nSmKZ1RR|0HYV;ZF*?i8GGbdIV9HSDINz$i;hTCXbVzVq>3@H|loU5->cjkB<`}wrZ8}Cg^4G8nIY~BzwhZ6`&p{7T zNi5;KviG_V&yWFNbZSp|w3MW#0Zo=|QCjaBYIes4mv2;(>p48wuX=p{&A+^zld{}e zS2<6{{m?`kF(L(0ZrzvSymDRC+X+=jKSBs+#?C$%`tYSOU%)Sc@f96!7xbORU%@(c zNkyXU<7}w93PV`NuCs@4ep_-3(Sp$~n-$zrZOCqWhSnwmm%GS7+CJN&Z!DJ}k^rK_ zDGz4vq1cJ%e*Ag-c+T6eda}9M{MD!WX(D3|o=$BSFd&S)nf+tq=Okg+ZU;Ovw8%nT zI>Dx%cnMhD_>e8IZw>og^C2lbzIfa-{er&ooY*{^Z4?D^hJMF0PpSuJf;YX7ltcpX#h)lp0>SJjDcmx-sbf zm3wk zoPMl#BRU^?7TX^opKXjdA5_=Gk{ox(YMI!baf$h^&)T{N`hu5WFx0m3&idff988cn z;aG^m7X3&wMl$>g2~ti&)rzPA9-Ml1W-?vYFe=Ah>vl8Y?_r9PfQAel<9WOavr)r& zl41g>Z=8ILFG4|t!347oH(7Ejab7JZb4~k#P}HRnK(G*H z@<;;V6w=~~FbKiGbvU6dX^;WggeJf+qA4TRU??&Vh=yw+P@Z13K-&xj5-~T_O9wF1 z2R{Vj88tTya8*c{D+~xev8vl5e9b=(-YJ(G-ws~a$aKaapnY$9FdD5eGhn)zMauAx zrU8IqEEBOsP^v-(XGH=+Q$3z<9z5~o>!rw|^1(yTUykcP-*?_uRIfp~@S8+mSBt4QIAWbdd8=1DJd&zXeRb~k$OZHCehN4Bj2g7`rJ^Q ztjRe#rB^IhWt)}wcsSwk9B=t96A7}$Ao>+6Zm-NBMd1Uz@3^2f0be<`$aZiG0Qu#b z;Ewg`=M=&euEQ4dLy#q&45|f1rUhzP8#y5(qy-=(2rO``zFUCD`Q+%gdsxhkr><#a z75{o(H>>2uAjB${^Wkfc@Ri!_Qs&jrcY^McnO%9d`UzcjssrwD`Q8fqig0J#x zWQPv8Aq}G`jq|4#krh-muU>qsogw4l;IkU`m!vA7f-gWBE=plgYFOu*U4c}ML&NU1 zR(~XHAVh?+1P;<1vw|!xjVZkgcoVg%bRM9VoZ#RUT9ty zY~d zS1=ZFcp8qtsJK$Vhx>f6vv1&=PSEzLw*qwk=q2pqVS%TCT3~%GsjSf>YU)*#Qa=7<2^j4xzB40T@T} zV<~p^4PGM8!?&t&-MnT+;tEG85h7{L$2>3Ym+gH{_gA~@^9=qvF3*3Oe>!BtS~%aE zub!^*IPc{;@A2>X3O>Na`f_~=yUrZHov)86)Z68)DG#eu3uc&z(AjFHLkrz#mSm&G zIAHLa2U8-ggg*u{ztnH_$KkyTiaU4%=P(5(+)6W7hugCmcUv=ru&T#8OS))#`?AF@ zHJ-eu-9XzoBj|S=(;k*1LFN0Y}c|Uh`1dpSAvXtY8< zhsmDl>PBllJIANy1R|OX&-AY9Yg`{8uZ#f^Zoa{8(NS85V;UGo^PlfzsN8yG1Jvwl7ZK%vFyBpYV_=x=*=Afq?{zsTV&# zil4Od&@cS>cI#TI3!Nvs%zi}ZR+2Q$ARJNWIns-r&;y?Kj(z+1@n6($U#v|pPPy3F zAkO^o{G49n`BTFAt`#IZ^k9loUG<_Kyf*Nq1)@LU*YAIaYVITT7d+xY^-ARxqBe0f z)neZ%-QTzNYL5hyS9Xnn*JXMK<=O+Za?-zLpX=dz+~>XRSLC}?`TAmk5PxwwE-XQ5 zW}vi@@-$m|NZpxkdBJT^;Jc`yta=r7WwpK$3+wg>y60A8-gZXiLi}uWU1&fglOc?~ zP$FYsBqIkS2b7ksge4VTx_-_1cqZj)Gj2%{R;Ug<6tc0tjvl__>m%f_e|VVhu;} z0B_-iN2Cgng2)lBAoAcp;9J{Zn@;Lylho1Aa?R9hKeW4N?)Y_%4^p|t#z2T>ha3(d&-NJrA*1@otF%=CJGQy#?ms;h5 zW7I(;*UVRkZmzX(t3wzApmqh~!O#J%S7}c=`(^uhbI%(K7sGi_)Ex&O3-5} zAp?Me#CCfB;$zp=oxp}gRmE<|Xag*jLK?^yhUT2)>Td7g*zGP5Syg8Xb!~%K(Mb=9`HQ^G z<+5|V58HC{>#OrTeoo(8nHS}AgH)rM^8ZnM(Y^2gfBv~~bvUc~!v`@@J2 zYfRj=_90Xze#hKp@>zWc6OAO^_-@|b;_!X&zs+MAfcaDAMTUK0Z|mtKtfl(B(NaUY zIDo0k=;WCTzw|>RX9F7=+uSDbVTwUwAeUl8cUnSO2RO53WNYPM<-(KG^)bY(Kr2vy zk_U+;)UZr7PN{EhtRFr7XtnyQgM->@k9&?q-=6m?P2$C}9dyh;PUCl<h2HV1#a zXV)O;i^J;P+3IgVi#iu3e8tL z*ci?l-=6Wub+a4K!3-fMLsa zcg0WxmpE~V2-70DO9vUh4K`~w{rt(BuU)Kg6BVGz$%{p8@FY^9F=e%=(S`yn6!0+} zwE2-ZE?8rQ4zswYE)#vjf;W@HY=)>HPEH9FBx;_SiadTy=cgmU2#$!7KH7>-RXJn; zsNlo^`vVz1ys(m#7ZV&V2drj^KH7ra(OmGTFTv8x$R3w-o8!owEaIlsQ*ED zp)c^Isg8h=PmvUskTO*y0jq&igi3~o$;OD+t|k%KWr zTEK|qP#KSZM?kY8Tfu`8#%R_PW#UD1vjLrTrhz-%c45%Gw?d=X^`6;ALi#Gz@E^Q=9?E zwE-VyX2a%yTU9cf<^dQKL0YT1PgL&Hed+5A_NwGx5hE^^{w4HpduG1=nAc;>M{cmG zd@(s2zKr4nuTefkueB2tHNd$@M8$$l|Ne$Q#rLzmR|ik)h_~f#e&8(da(yOnTZQm{AG2TNv1nywgkyU?s?WUR-<)!K|Mj+{7a9lkzN_OEZGjb!k36JO3R1@2o|xxV|MU9e+Il4% zO;`9D9jJq&r%IJ5JiHXg*SnEn+80Ye*|zQSCD2A>`^8xyFHgMI%3szoR^D)PNPkX% zQM3pJ2$#OUe{JWbJS(CDY=D6&#~)FzW(j{*C1fFYs9|LPRegS5z!F#mrRFFVuVB=& zVO?6&{tv$X?1Mk8t-FJVE7HZj+oi(hTVV0T@!q84YguvOCm&fA&zy2)zC4IcV@*k6 zQ+77rUN|e^^3neC{ADp$$$1Sy?<{~$%V(dVtzCNM&S)NH(z+hSHP7Goq70Bi0y6Hs4rEDZx zL{$?hdKF(Vrt<A^Ks1q-Sc<%ADV*%BmoO^h@# zsuh=|zs=7d^tqyX;5Q;R^kTwd9Xdx_t7Ir)C2vt8_|E3L*l<(=A6Yi;KD1#jffN{4 zv;N?H81DyioBQ*F^E~)@Ebh1CRD01sJdgE$AB@yJsNIKNgX~>;vGFp&b9_m0_L|tH zJ*9R&PtK3t{k(SjQP*;2L&*j5Q{IZ8BHd6Gx(q5lJZgOE!dpK-AD5FKY618?%#DM=1Ss&)ROAUgpM{b7jJ^+qvq)MZSQ_{pYuPT@U!l?49{~| z#}JtDLl-a&@BM2a-aaf_r0#@$t$UjV?4aj0Ov}^uNpzOR)Y?WFsBjwJmOrLqZv>Nx zr6NI*Y&Ge`G1vmW8Rqy-95q{Liz)@NBzz3ZXXCah*s&5~4Dr;PVTuY0;7)@Gs6D~l zpD+0V;lS?+_d3`y^%Dwj4L~CiZ|ZuWIK8a98`I`q*@hqH->l8E%&F#|yzaj^+!48| z2vn7k5KfRoVt_ax#Y8ee#u%4b?!Cy~Yr5%ty#}T}lwm!sV)U5~NR{lTwy(bMCRjxZ z0)~8TK?(?LBt4^HM=g@Z$}~CDD+o7Xrf$i$S{5MXDpZzev4klV;Ycfm2*dYr`}rZH zXSwst&=cIs)!}%c#E=OT+X{XE#P{X>G?WC|8lx?9A-!}+{XWk>6!=}0J?>ug`Z|4= z(?u=LYyg7DmFE-bAYp??=Cb@S@(^%aCtk_lQc8H1Itsk&djI_ExgDMa0e1R8 zM&*H45<2it`T_dNHvd}VbFD>sj?bsFt9dA3xxBH+U)>X*OaB|WVEL`OZ#U_FR=^zS z5o+?TDs0A5?E#-%Z|o_FSQNr$&ZXhU)gr$h31U4<&o9}NwjUf5l@|peJqx%T-==cD zmiqz=v-PYW^`96t+=(U9#&(C*b2@EvFZ_fQb1kPIsj zg26Ig%1b$lBq>&28CA)Z7&S+SW9StJOR&Dg$Su+cb?GWeE5Gc_LK$Jxj1W>GRbY{b z5~)^V7$R0J(T z#fx1p-OX4cm2NtBjKx?;rom$l=W~B2Mm5Z5MLg&G%n zxqti3Cq93>$y+VdLfOQGfS{s15JP=kkJ?_}eeWZbMgjqr$n7>(FAh)V)3J@Wu1ch? zWQKkDd!sjZNx%SwE})=HYfzD^`GsP|L@_dU1`QWOP7zfW(EWLQm-}#H)n8xxo_+U6 z(ctAZJvFEyLWMB_0t=&{gd>nf7MKHye(-somK4IJg}Pso`HX$hiFoS6&h^8WE&G59a9~(1- zlLt*oxrUcp%j*b%b=tZ$nJHYM?Seng0h#*-Gdq$^pFN`6%4WG$Hv@{p8iwW-yq0pB z5Wo+HUKVDWPr^^xt0VaX@%A4D@}FMh2X(VLcW^SBIJm!dwn;7uPs2uZ0DO{JQ;F06 zdDy|^`ev;HL8>s%9FSlTl405tI-`BY`(w`UO%sf8F9Dlr65&mGe#-QCj_V-39{Vmb zuhoMgLEX+h1za?48#KPjeEwMe^4z>lA-rfWA5Gn7Ti43BW8?XG>~RC0J9bJlC=2QC zm1Gaxkh+k>CuH~Fg% zuSL?Vt-gE57oNMtI&;R~9`-keOC-97OPPY+fv`ib_Pro-bLx)n(MPU*2uYS)+JRWx zz=nn$PZSI%*Fp8k=+pQ9$>sO(39tG>(p?SQ`>&2ZK)-P5!n-{pD#!ogLS#a@&TaMY zN9PaXUe|tG`emivYDX0AMt$l^X1MhU(Yc`}&u)EZwdf1gcc=9A#Ex4+w_PS{Raaoxa)K8*FM~TJq^}3}#2gXoo~_jJoDBdynTZZTUS$$Ui^oG)_~0WP{z z!_GlTd^h%;qEA&AgvPS_0jY$x`9_e~!+PzPMx+5asvGtFd#FS!W2L0SFtF|SHa}e) z?qO_2Knq{DzMQ+M^HJKs)uC%HF7SsV`oh+EeC9Ky#gHRkm>%2+=qVVca*&cBqX1YD zY(hX~;S|gQ$fypQvfDKj%gLT7IZkj@Xh20Aq`29HbTql4-^oRyAr=vtY&eDw5mF4j z%K8KAbeSwEhdQCPv%-btm+wD( zg6=cPBU5H57DD`3y@i(X4ExfTv}t@_CpAjxxdJR;Oa!8!htd#W0*NG$MuO_`)pRt% zH7XjQInF~)EiW@b<=6u0#1mfeB!j>p_9;& zS&sjJ);3AQmjj#y1eW6-d2ep(C~)Ys3ck>8dqoQvJB~a zO&z%uug6{S?a4cVns+m4ZkPlYVsPi#>pETuARvKKSdWIfKfB(f0|MmDXHAj`ju{2N z4BK=rh}fAuTywqdTj;05Jq}&ifFWIxK4HBCpee}l>DbUV!%fmNBqz46B_K`n^Jo~~ zJO~mb{bi=aEVFgKwYX zlqz8{&a9nTbv>EcUu0OGFRLgHn_`7@8k>>)gGX+jv6}A>_qCtjKi(X*Um?E&pz|oK?8c8cHlx`S|Dv{+`IQ`>{Sq z&U=WwPEKWgjDa87&Cv~_Rri8J2hzB z0fsq^5Ky0}CSH@Gxd5tbAcdxRBy8i%hCo9jEOc~k^oKvGqvhUy`#N;(8iF zB^98{@G}OG$i9^p0H~pX7=e|IEI?o-h-lVdd~fJE$b`-AML01fh*&%g%gCM{YPf02 zESy&0BC)iIM)waJ!D4YnZfU#WoO}*l-TksO!?NDUF7hIcS8x678`ZFr!~!lmh7LV3 zhb|n!9~awR$OZHKcK^=!W{-I+;}(l@Bfj`l)$BWvXOY9cAc8~{hBoa|k-hm!! z^|6pKtPcGJ{krA4>ZQr44D3`S7F7ZPN}f$9gB;H|!|P3GRQ6n{(#b$SoQrRdg{>c6 z^G(h}P1s*<0yWli4$3!Mtb854eRQSj2}SzE-z(O`Nat)mKlLzgn#X1O_Nc+v`96xW zG*;lTCSv^Mp=RJyixrDD)L5Pa6a+9=;;QKmA;>3wlR5kG=JmT7`Vl6+_qSgDhJMtZ zuWxCpCBE_5YO6_CK9Amf_&8waKhNP`0%!QSs-6=c zfAI)9do0q{=TSIrenFiM9rN)fIodmB*93Elqxbza?j1@bef0E`KE>7-1v? zInYBG1(s2Iq})IvD|9VHW;kuHVq=tblP#_kh7NHR6@>sQ;cTv5%MFE%TyO6JsK`hK zjK@Zi9SL6B>PaV0scsAW!Cd=!97pr%SiVH776A+J)5}@j}uNkVadUl3SakceC@xSbCLU3IM17(WIFlb?@+9} zhf*KDwWX@ctZSE$vWxwIhtbFlYKe-7I5JvT0wA|!$0ZI5!nB*s8|%5-0sPs&C;C_> z$W2b zyw^@SkGju;P~~;ocBfgI9XaoW%CYK@M~Ca@&{;N@alPc~ti)<=?ipr^Dj*ZcLL;6a zp(3s^7@zh-D%!~Vl0$tH0ijvEB3{K34&q&Tt3@=?mAT0R4J-*Fs9*;3FYl9`}3c$G#wtrz3iuFlu}eY&}hH9V3W-(}w&YFL>G{37)pQf4YB z&=@M%vOL1{N0|5>k5~c zI2K_#fw(x;%I!6?uj#oRJJJ|tKrW98=BDxh`LbR>pZw8CvSV1tQOipR1-sz$vMKxZ z*5`KTI9b%`)djlVU*->)u{Pgd!jQkAR_$zUM|9z|Q^=AtNnjWOaTI#jI>yFwVT_er z!8YNh6Y3eAP{n;C$c2qmx!SgKGb(dNuZw<#*(8k{+R(*Bdks1qEwW%8CG1@#=(XLR znniE-KOiE7;x0rSBWuXe{i|`Y2Bg>Oj$4V^@hr;~#|cW*A~R>~d7-|LjQO_wsQ1V5 z^R5BUXs!ka6hV+EC{YOq6@XLVKqEB}Cb0}R_}fE&Q93*3d)Bm74tv`SS;oLSPr6@M zw?E{1^33CtBlJb{#{)g&W#tQfgqN6;fc)gG`gBFYO)Vx*Tyks=*Z!y-VJ z7|9hNhHB}kx#bA0r-(Td*E{>mZ@dskLYUrb^oPsgXd}8U3WB+7h~h)y5x=(j4+%`u zJAq4tWD9T-roK&1i7(#YKh?`BkQ5kNrBzY$pwlj>4TS5{7-6p@0M`VdM4qS%I0z3O zbl?1m;-TGdWsZ8}r_gIKS8boj0G_D)s?@@bnGFx~cPxAnLV`o`%{Qv#1qx)eZYp$U zOvyt+C{W#c_LOQVozp z>3|#B6*a-Ggb-F6gt6cbWQG!19VTDA`E{vZ1+&-*^WTr^e<1b0dNIxmW|wuAT)oDv zbPu^D8bb|%VVJn3_LhE@)49W#F!)@o!Kur#(J?q*FplJXBARVabjt*UlJ0?&yeUJq zDJpfXNS^z7N0sO&fdETDw7)+o?iY3WPi-W<#N5j@R|PejvEkuw=;r^k@$gugYKS8U z`u(=z&9Hyg{eR1L2%YKEQAYd0%-1{jc;{a}K7Zk6j=Q(x+^MN_!&TbK%MdP2ZQWV& zY?ecH&`gXMyYCNcW4B32Acd;M-JunHDhO){SnL|D7an2{XjG1ZYozHk(I(zFn(S{C z-V+>l7$nQ2wi7BjsHq1*pTrOz3csbewH2k)kx5{#Jhp0#e*5c~!?^_7kS6vgGc>tf zf^5(V#gk}_Z-@_Afl?yZKvmU7IMkfm)Ejd*hl{VAVKNOxP0w-MlftXfQJ*?CVsL(qWn{}Q&$SK(0_5` zbHsOpMf-B&B556%7?piwxH|lO{q@r``6+dL9UFYJAqV&y#}QkXoqlWktnH7vdY)nu zinbw{rmWz9hw?=Ii@*P>AMDv5AN;&Iy%iEU^Dq_uX!_OK;9IA|H@~!<6E42=rAt#9&zG78s`6pbqCj zfFN$_y~Z%*&pgt+T?vTzkSjBvuuQcLZ!?=dfrOzWTLuf_A>Gs)9n z+D?1xWMIcCFQUhT;Fw@QSI38aoKG;%K3?7)2NiiT^do+)CPTWhUPOLK_g-9MXw!F} zJk6&eiczVjXPpfOW0j#0l!WrW9Y{>BaNtnf%iX?rCs%_@;eg#j=W zjg+?02t_J%uhAx0tUSxg<#+^JS;g= z(ZgvOB_6RdY=N3}D6FaIZm->H1B60wSV#Rtkm$4(YRo6@n4o04e4Z>6f$Z4)FxyWI z?JBJ?f&IL_*nV>5IUOCllB6NT3805Ga+J@rUuL9kFK|KGBQJfdD!|onw!~XV#$pC2 zi5eh8Bt*zi$Sm!%-AcSRpVNYrGcZ+Yqe>cZh>)V~&Au%@g=Ifyt`K=o+X6Ior#f03n8G|qxDjr*a zmta%QEl@L4FqG|=k?&@uo`h-vJCvXlW6EVK7$rFZI**S|VK)*u^X%W8v+tjfA_eV7#dX=CPsWhuvp@GgrO>$n| z%iXOj9k10(ulmVv5VIojivzRt;-h1#LKm21R;{BP@a=_6$Noq{Gwl%+&|KaWYKi;pfEBFv&%2KH$ zzIulrWqPc>X2ap5nT}$13ovDoDILo`DS#DAStgr9VHQnVm-rF<<7a>HZ3M~Tc$ECaS0IMCVU3pZ~DZEG}(P&J~T6f zR|mL?bVP}DiXBD=wL^RCjE^sXSEe5<_t3*5vMMR*w2l=u)wN~Dg1J4LnVPxHkQ4|$ z)_EJ`v$^)k`u9oXv_FG%Dp=nr;oEdFvUKg}IGsEJ+Is$dJXt>DGi>6oEia)Ud z6@*EPW$1Kdb4{*Q#--be^Zpv>9ROa!k|E~s&$Hh3ZF}O}(@cjlT%(d)pvWkgQW^*y zPy2l}evL5)wlxnM<#Iyh*!HEUVOr9tJZRdEJKBYCQmgBA#@vw>s;6HC(CdqBUR9;R z`8mBcGR{I>FOE`J?fvvTfZR~t%JG3l0MB&Hr@0SJ|MO1&3zuH@@4ZXB+rnjtEXqVm zL|ejHXX|l>n_Vropcr&*$(vF^F>^pfBp^bO41FC&x;>Y9A3OUr-d5Nf-A42plYe-G zKXtwHG3<}!Q9C2$xjsi*Z)>b8$K(9$HkOD%;oiJrbM7=T$m9F|=Fb@Ko!)>)FoziX z#n%>=?2`{@dqD)eKH7~Jgt<@T3)KqZhdC#Vy_&F81hlb)JWNMv^&kJLw-CzhdhE4eKK}f z-w*od>U?#}DuYO{OK@#AahKE~SCCoLEKctc9|K|scCusqQom>aKSD=PT$)Cqa7?FY zI5WM0GkWg%OkYD_58#V7L(XWJ1H4=3JH`@hT5&rFsKYe(?4`|t7~`izX&tJ zv89LmSU|(k9U>zNX{=k!Gfsb03p~V2t{6Z)K$2i90x*u`GrolTKE=JvM=9>gYY~?FhA{0im3h3jydTlF)28trL()3E7SqaktsDu_3Uf?Gtc=GyeVt>86^>XIT zF3XEj|I_=qfQM2#J4{D)85Jr$Y8<=iub;TzPbV_RW284zjn~jc>Oe8xrWnzHmi}RF z*DRARmF^7wWcanUXRNAiD$7R1S12rQ>=lui}0%Z<`?kC|4^luRlq_YCxD z#k1`RjG7eV*uLQKT&bK(ba}7tH=kb0eafF5@u>tn7u-$#@Ya3ty=W<%{nf}(&3xqb z_8+Xrp3W10Wv{S>NqPz@6IU_oww?>^o^?vxkEYjTE3)JY-KEAz-rxZd`jL$r2mlnl zcG!rx0wzA2Nsp5D+7_Cc>N{8I%Hp z1``QhyYTSU2VJ z`ARUnXi{*LD%Ko2F^62X+BFk?V~#HMsr|XNe}Z`MDge|)g5roDV*rf93=*X}76vjz ze#CyZ`mC>i3Y4qaKg#{j=X*~1Tg))RUMnMZimEoCDl8yoXvJ~igqRS>$hJ63z)o0^ z$|Chl_PEdMs;Qh*3j2NWz2${g3|V!isKp8tDyT=L_%c^B_?N(94b_AKL$pzohWjtv zhbo8^Q3!xBRkiqXeKp;SfZBFRsEngswi!ZPtEeYoMpLyYxI{rJI#;SFQ-oX z;F_v|a+E+m<3kL?5RG^IfHC065#C9XIYQZ2#CcF}^T}}=#$D?s7l$+uwRT_xo@1csoa3i14`|z4%qgFaNG6MNlNBphgV|k_0JB{7n!M z0wfxy(RK=ILc%9LRexU(Jb$eZsXrccPkOI45kz|QyW0%M+>_Yg$gUX_9sx5#B20@r zBJ!@auh-19ldG0~hhYSpXvzR1w!r@6gh9B)$lUGSUa>e#-kr8H8{C_TdRa?jBLhgD z!5g&n6wa7xj;~G?{eBQ&=1T~zm+K2X6zDNNp?fR7M7fkQ1aHO^SC5{#Hm|UE=i<27 zRcr{SB9gT<9S9B#)EQ*Nd1dU~a(C~f*v&LEY9YE;|1y;Ss)AmcLN5m7s0KrEA@)E^8tA(9C^|1v zz*Bxy721u){`NxD_`>1Wut?eU@GsLMuSly@+QHQUhtz~-oSQ!QO*uw>wN&K;Ru)2s=W_rrfW1Z_;B!6(C>=kl|VRh_)x`xzQsm zx2VqXcpV?+V`{MKQPNHm8t>fk0_s(~ZsBnmUmp6lCTb(1>SiPs z8?)Vc^{7>8NX(Vwll23@YjqfX_|#;{TQ7TJ0kNK_UpXzmck|GzbRaM|`wN$chrjQ| zL{Q8x;hf0p5i-neJ2!}zssiA43rq**73dEdSKmkUlL6n4^>x{;C!R)9pE;2j{PZ?B zZfN&E2A^UcpFFYl)BWk=ud)6W=2Nz1w1F}p;OFYJJ;t#Miz4%UTL`Z#L$%rS%IsJA z2nvy2ZzmI# zsn@mJX`~GGlNN159#nob{i0pmeY2NFx3--BS>5>9e!gSx<@^AN+iK_xb+omH@y7dz z4pqPS;BW6{R!;>AR?Dfd&yGFjiFwY=(;d?YHD=V`fDV`{e7e`(0nuPd5(gjIrbkWr z5xnzJ@7-^IPT&4!={7G1IrHdk4Ue{E7t_}Z!MC1_s@z(MI`}+VC9dT?>3b;{TwnF2 z%N8tiQ+sbAJNnjsNFI?rJ$_w>2YbPX-en#ytz_Z}Qfs?Q+acQ~Ry6NtYb!DVwGF>X z@E&3FIfJ`=i+^Wo|HQBWayamjv1L;z7JQcdL%UA^t(^xeA60#Nyox|l;YUnL=ZmfV zpYkVlHS^i2Z@#(ie9T>R&>MV4vLchwOz=^m@N1{Bij#6+{d)1Pzm@;sF4JsC2l?RPZ5^CS8^!Nm?{-vmtKe9Jn+IlXNcPq&$H{K-1HG z3eu@mP0k5N5KK)jOFeoL)FOWfA|Ht&4pb1~vSJ|Ef@IE&+$e*h$X;_0D}9h2e~2(cou(@yIug(*gHVa3$Yw2)O`3KVofmb&`dy6htXrf` z&bO<#TSHiyLLgcu925kFO=2)(VI1$mg_#N?w3~)7W9*9IIHVel1%r5^2%^63MERN)0%qS=y6f*8rRETCqJm6%q(k&$Ak4td3Y+^V^)#~{;=2ev#L3h zd6<3t1+7CNqb_r&xv^w3iQC3SZnW>#_xpb7pS~Yoe{~VW=U_TuPX*{~+#9F}g@Gr; zVj#j&RL!SNAnVkLt3-0pbdw53GgS@=xsi2Iv9e4F%2IO11-{5x9a0-K8XNokTIVbF zht(z}n#puF1JT~$7JJ;j!ej`=!ob<_f&u4;m0HCk>0O`nxEC%s@Xm^QX>FHDUm0~>pTwS zfRIvIm{9xNA!||1Ld$#AxJ?sqf*M`$+ngI$OCrWv8(C!?tn<&CS;zG)c(_UsKl`+5MWT4GtsvKI8y{M1igfU5^`9` z;6eR;EbkGpEuNJtxH&2V!$AZ0xOk^=d$L$9w^mimu+k~=HQ@*J71{yGsyH{z=+X;X zow`cHFbh$YTC!2l89K~IyD2;a2%U9~!YT@=WNIYmVIUe{!S>RnDC~$OGa%5m2q$j8 z@GKKlBRyJ1ZM(fUTKL5oo-c@wni{; zd}TE3L1TdT>16CC!!cn%_nG!WA{08H^jw0niQ9I>kYV~7AOOt<8Kmcli+4*)C6?r( zFzEscHL#%J=OFc;%kPglDwP#wLmd&BAuOiAN7{OB?AK&zzu`yA61AO7ONfS_@PKoY zlUKFxxb+z$QHD) z`kZDJrl50p{B(bwr*tUj02cjnZ&`ML0!pD6h|GYE5F-hdxI7KJq*uQ9hxOzKo_)OV zBl{n7yu0Ru;@NLBgO?dns-BsFNsasbSwF_v0W}*H`s+;c>YBtPL#BGJZ>s-7l1y)! z(W<7ptR&)X_qnpH6UjSs)Mrd~%YucuJkt|)ffkHN992w1AtAwM)kjs}-XLnC=Ca|EeBP(;(@TnE~+oACX-zAQ;tEj8L>gk9VWHPi6AK7BPzDUwZk>FY}j0q6DTBKkGoRtS4dX3)q z7x%8!JBe-oRddM4S@W9AGFv|l z2r?QodHkb%x$hfx)_aQ(0ktG-IA3xOk~s8Hr8qUJ$qL1)hmIr%h$@r9H`lmN`MrS0 zOW!(e7x*|Fi=wOrY6ZC5O_m=xN%GtghRw*DS)6ar&ObQwIeI0FcJS@#$@H%G_QmPasO)-na3_4uV4lkiAk2?si zOy)J`L-Qt238#fu`Pb&Hu9%t1fx-M?`SHhR=if=`4hYW7($#%ueKQpRNfAI{s8Jin zxF}>W(7_wEKuy*Snw5)~29KNNE($l58BcOgn#d|8*I-w(N45|6l?|WXqYwOtJN_?8 z9i4s)7}0vTN-Qkef=RJWZ$}zHmE+QUtUb?E2F8)?`jIym9T&``j@FMK*8A&=Z!xOK z;I`@?>Hb`MQT-<+XMelLU2!cbgVQzZzNYe_>I=QU>yF87&rdH{d!%={5G`5J=0W|C z2cAHoFClE=I+g2Ceh@ttobEXrd3>Em#1rb=T@_hz-ORmHnONEAt(g*^7wdwCpoa;> z;!a&?3$&v%fMb!tUsNN!>Sr%jKZZu@Mw-L$s$4CJy*bZ+>-^Mw9CcXY5*KX*@dqw( zMT*zmK71RakS#%LgK*_33JG-SR*xa}KUJ5ga*gWKJkMr7LjutE1@T@7{TG~GJ*}Rg zTPnk$Jycxp+aiFF&e+pxWOArjZF-$3ByAohs&}a^%JJ>}0&Y?PjO3o)p12Zs5*nI; zFP+`ws~T#1=ZpRRFLv7mrZ9{C>h{sD%~#C@fVB&1>$a_6sFmP_Pw*}cg}MdAw8cuv zSRsRe6dYxiZGw9$r7haS>(f-5{U!cqr+*FZe&EcPrx{j=F%D44gKf&v1wd7GE^-~O z!#L`B!3v1Cq)2mYQb8{JvfF7lm6}*w(A+jUu#6b>8p>_+Ca*JcwR1#XueO`Qs>W;X zA8}vluX*@ZT1VkXxN#B^W$Z<`60hXh;w8K{Uz28rsyp&$LCf*G2C1)45}xovk_0$a z+VPz26xtl9m6prHx)c59`AzZ5(fP~W23Jo$e63m3g@JLypR}$j*S#N>GZ#}mdVN{X zqPF60YOEO>QE3zV2!|Lr#`H=u#P_4{^b0h{$2c|t$%lVJ#VPS2%HW0AO3wDbw|e( z?0^a&P^*b3AxLsgv<)O^B*lgeh0M#ww*voZx$d#wEq`vm;a(|f47Ud>dea50dG_ze zE|855XwoY}m^nxxLI_^VnbP6Oq%oszTqwbVmEmsYC^fGjh)-*=Fw9KTt2RC(iV7<(b;kQ82xY=A8v?U7IC6 z%v9Tv4ZfGKlQPq-1ZobRv4=25{D4?WuE zGiswE*%Sf#rvag(R*LLJ#v?e6C)VYVkOU^^l_`9m;~P9<6aTHgL02(GCOiUIUr*yF z6KLpDC<>=5(N}>@KQ}v_Y1yLLV-U3U(M)^xN}cpfDTw}+17zLF^5&RvgQN)Ts!EP! zCBv6{zp@U_$?(DTfVDjxuz&(`wUDG~;tVo4O1m$cN8pOF-$D44Tc6oyQweG9p6`?O z=yU_i%;#>+MCV#Oy0l!28{$P;c5SRjZ;p;OFJ_?Gox`jRZF1?u84YYzWHjL{0ArKF z7&MITHulQT(payS1A_EQSa}A8RtpbP91yEGXytr+aO0QgiHx=fRTkchnYqHO!pZjq5*iWiGctqLN z0&Q@D`fAm819PbIL+lT(!kg2dyz%+=eruylNtZSnh+&O${Ea}cHFPTeVGr7Y4vFw{(>$p?Jy;Si?_ZerVzk5tH3P=P+ zuV6hQ-eNu8%JL6&9}Q7z(mz^zgpL6W)3>F4!S?+mxw>ucJD+~!%E&V-{q4KlVvyYR zrKqh7)!y-&fpsFs8Vq%R{BtjUXZmVnJol{rz8WGyJes{Z^x4SbUzrDE;;ZbN^fmCtd*ROm1_@gry!<$E# z6B9q^;~{V9*dc*E)VgBVu~af3f@dcwq|Gd9}j(5tdR{J)1{EdGRCt z&jC#gIE7b{>k88`-TKbm`5`<*(jJakjpyRNwQe{Z&lG^`xId!Cy4c%w^mW@83tUW4 z#H9V&_O#<(W8lwf{EPR$_b1ou+VSaCy>DE$UfVCm$54J2C*C+LTk0@`6?JCk5oo4c z<-*mLJZ9CV&>|%TGbq zMeQ|b!ALUYTKGUX;8KRfI=LP! zVu_(KnVpQzc3+Kn$tZ0odz1`V@=%dMxv1bUZo_`xVa5nnhyspF!I_0bbTu51z)|cX z40v{$W`qT>H@75SquChQwU&Ed2~JM3ay(UE^=4njxcxo`sxLHoeoq$kqxg;wUi z>};-Q&UoV6cQ>@OC#FX1PCy(Bkj1IPV@^1q#c$_|)rmM;5$XDF3+u3w53gO^i6(T3 zl;aX5XA}zPkVq2gM$=LMIS!qMCtRr?X^U4A9oEddRZYp1nVFz!q5S>B_+K0kzmfkf zOrP1eNq-l(5m=s-O0wDw5K+sn64<&E3K5#Nsd??*Hm~8w*U1bqQ0(vT!NUYzyEkN?I6d;ajCetqLD$DLla@Qqsep$QrV#7K~^aF&)9 zvrE*7R9FuHxSrw6FH}uque!D7#3;uN-~toS%&)kAdgi1S66tbp@daL)S5>fznQ^^7 z{^LuZd_JdFDeMX%spmSDc)fy9rp z={<5MD4Gjn_z5wdaVKoRd{#+w+GlCQJvzBxVeM$A8ouv_qfNn+421i5bm{Yt-W_BM zuZmYt5BH}6aR(#=>nV2;pupR6O4Nd) zVGJT3RWYraR}Zl^NfHIo>;6+vx7)E;Xa_dU?m2uu8uQpFKfT>wFK^EERqyxSj&~nC z@&15%V*XF`r>_d>k}%MAkf&45u{@i)H9ACBc@wgsI!JD2LS{pY#yADB{h;c>&xl1d zgdxa!p|`c?L$zugAvDa((qH5E^Lm_fq;sa#_ouJ*HOrAk1_Y5-3P87EMT!g14U#}g zs3aoT7*aDIcizf9>;p<?_ltJD>`=d`xA%ruNd+;ZEA!=iO~Br5%IMY&MP1(PNn92PV|hiv5JE z5xKgFbX`iyXBM`2ffR{AN@V~5NrB|PG83gLvT#_l%c>vZ{$vA3re)4S;EXc{DH6jE zT%0wWLL^Y0C-c^MBJMMKE%70%DWn=MW7}#`x{DOU<|)^how208;4=^uS*xxTXCY&0 zl!7Q<-Rpn#bpAuQyVTMurIK`g?aC~A00DbtFfG2t!RDvt6^nu$&5`&!)FKT)#FPjC zq2GaT;_tI|?9brn*@i(__2GXrEWy9Y-J5;>TR-{RkMH0GcE0}eJpbue{o`G~_y2gk z`$y{qe{avzly958I)<|*)5GlD#P`0jpC6*ik<9^}HhdXg+DkWa;YeBupf`Es*Ph?c z&!s0Y%$FN~ig+-epFYe1AwZD<24v?MkG1&+c>mz(Qp=YN>jm(SDd z?OfarKNFkRoW%3yJpb7|H_v(1&)2wM=2)_w3W8|5GwR@jJi>`#vjInu0+oFfM`}pM z5vni*GWg@XKb2>m+wBc16{8A91k{!b{a_&p37*IhXV~1TU;v7jy|1AOretL4O7aue zzSpcOMw*w0hq_EG&J5WZtVo5zm3d>WNMkC5kWr52zzS%-dAj3q53EU(uku*9HFw0@ zL%qi9QrVU^db-_rbU0?kHtE<*fjmu~>xach^&UtvYs2d5wp`G6$y>}0@=*?1l@t#( z00Y$}gNUuo5ldCuCZEiJ~n$g8R^ z$~CH*D3Axx*IX5wUx5$(7}PnX`f7LiSGOrubPyl(H+E;d-GAE6AO8g%N>8NiS_gnz z=0@uN0#ZFl_Nd+r-yYmr$pfv^5TPe9g|AQp-FPt*hp36Se@rlWRj5SMCTp44l+D

lz4u1ohNJZ~tcZOBe+vsF8E0^m$sTsjP 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


6hTOy3>!(mV)o=*fVX@ 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%0Af1Eo6yy2 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

DNUpN(!^ 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

s;QtfP>{DVWoQTmJ^4G>GtZOMuK`^FWv* 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%0AYYT1GUib;NOfeNbsmV?Y-=*63Xa_Uur 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

lz4u1ohNJZ~tcZOBe+vsF8E0^m$sTsjP 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


6hTOy3>!(mV)o=*fVX@ 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%0Af1Eo6yy2 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

DNUpN(!^ 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

O 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 Date: Tue, 19 Oct 2021 22:03:54 +0200 Subject: [PATCH 2/5] Remove WebP and WebPDemux frameworks --- Extended/WebP.framework/Headers/decode.h | 503 ---------------- Extended/WebP.framework/Headers/encode.h | 546 ------------------ Extended/WebP.framework/Headers/types.h | 68 --- Extended/WebP.framework/WebP | Bin 10234072 -> 0 bytes Extended/WebPDemux.framework/Headers/decode.h | 503 ---------------- Extended/WebPDemux.framework/Headers/demux.h | 363 ------------ .../WebPDemux.framework/Headers/mux_types.h | 98 ---- Extended/WebPDemux.framework/Headers/types.h | 68 --- Extended/WebPDemux.framework/WebPDemux | Bin 235400 -> 0 bytes 9 files changed, 2149 deletions(-) delete mode 100644 Extended/WebP.framework/Headers/decode.h delete mode 100644 Extended/WebP.framework/Headers/encode.h delete mode 100644 Extended/WebP.framework/Headers/types.h delete mode 100644 Extended/WebP.framework/WebP delete mode 100644 Extended/WebPDemux.framework/Headers/decode.h delete mode 100644 Extended/WebPDemux.framework/Headers/demux.h delete mode 100644 Extended/WebPDemux.framework/Headers/mux_types.h delete mode 100644 Extended/WebPDemux.framework/Headers/types.h delete mode 100644 Extended/WebPDemux.framework/WebPDemux diff --git a/Extended/WebP.framework/Headers/decode.h b/Extended/WebP.framework/Headers/decode.h deleted file mode 100644 index 80dd0ef..0000000 --- a/Extended/WebP.framework/Headers/decode.h +++ /dev/null @@ -1,503 +0,0 @@ -// Copyright 2010 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Main decoding functions for WebP images. -// -// Author: Skal (pascal.massimino@gmail.com) - -#ifndef WEBP_WEBP_DECODE_H_ -#define WEBP_WEBP_DECODE_H_ - -#include "./types.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#define WEBP_DECODER_ABI_VERSION 0x0209 // MAJOR(8b) + MINOR(8b) - -// Note: forward declaring enumerations is not allowed in (strict) C and C++, -// the types are left here for reference. -// typedef enum VP8StatusCode VP8StatusCode; -// typedef enum WEBP_CSP_MODE WEBP_CSP_MODE; -typedef struct WebPRGBABuffer WebPRGBABuffer; -typedef struct WebPYUVABuffer WebPYUVABuffer; -typedef struct WebPDecBuffer WebPDecBuffer; -typedef struct WebPIDecoder WebPIDecoder; -typedef struct WebPBitstreamFeatures WebPBitstreamFeatures; -typedef struct WebPDecoderOptions WebPDecoderOptions; -typedef struct WebPDecoderConfig WebPDecoderConfig; - -// Return the decoder's version number, packed in hexadecimal using 8bits for -// each of major/minor/revision. E.g: v2.5.7 is 0x020507. -WEBP_EXTERN int WebPGetDecoderVersion(void); - -// Retrieve basic header information: width, height. -// This function will also validate the header, returning true on success, -// false otherwise. '*width' and '*height' are only valid on successful return. -// Pointers 'width' and 'height' can be passed NULL if deemed irrelevant. -// Note: The following chunk sequences (before the raw VP8/VP8L data) are -// considered valid by this function: -// RIFF + VP8(L) -// RIFF + VP8X + (optional chunks) + VP8(L) -// ALPH + VP8 <-- Not a valid WebP format: only allowed for internal purpose. -// VP8(L) <-- Not a valid WebP format: only allowed for internal purpose. -WEBP_EXTERN int WebPGetInfo(const uint8_t* data, size_t data_size, - int* width, int* height); - -// Decodes WebP images pointed to by 'data' and returns RGBA samples, along -// with the dimensions in *width and *height. The ordering of samples in -// memory is R, G, B, A, R, G, B, A... in scan order (endian-independent). -// The returned pointer should be deleted calling WebPFree(). -// Returns NULL in case of error. -WEBP_EXTERN uint8_t* WebPDecodeRGBA(const uint8_t* data, size_t data_size, - int* width, int* height); - -// Same as WebPDecodeRGBA, but returning A, R, G, B, A, R, G, B... ordered data. -WEBP_EXTERN uint8_t* WebPDecodeARGB(const uint8_t* data, size_t data_size, - int* width, int* height); - -// Same as WebPDecodeRGBA, but returning B, G, R, A, B, G, R, A... ordered data. -WEBP_EXTERN uint8_t* WebPDecodeBGRA(const uint8_t* data, size_t data_size, - int* width, int* height); - -// Same as WebPDecodeRGBA, but returning R, G, B, R, G, B... ordered data. -// If the bitstream contains transparency, it is ignored. -WEBP_EXTERN uint8_t* WebPDecodeRGB(const uint8_t* data, size_t data_size, - int* width, int* height); - -// Same as WebPDecodeRGB, but returning B, G, R, B, G, R... ordered data. -WEBP_EXTERN uint8_t* WebPDecodeBGR(const uint8_t* data, size_t data_size, - int* width, int* height); - - -// Decode WebP images pointed to by 'data' to Y'UV format(*). The pointer -// returned is the Y samples buffer. Upon return, *u and *v will point to -// the U and V chroma data. These U and V buffers need NOT be passed to -// WebPFree(), unlike the returned Y luma one. The dimension of the U and V -// planes are both (*width + 1) / 2 and (*height + 1)/ 2. -// Upon return, the Y buffer has a stride returned as '*stride', while U and V -// have a common stride returned as '*uv_stride'. -// Return NULL in case of error. -// (*) Also named Y'CbCr. See: http://en.wikipedia.org/wiki/YCbCr -WEBP_EXTERN uint8_t* WebPDecodeYUV(const uint8_t* data, size_t data_size, - int* width, int* height, - uint8_t** u, uint8_t** v, - int* stride, int* uv_stride); - -// These five functions are variants of the above ones, that decode the image -// directly into a pre-allocated buffer 'output_buffer'. The maximum storage -// available in this buffer is indicated by 'output_buffer_size'. If this -// storage is not sufficient (or an error occurred), NULL is returned. -// Otherwise, output_buffer is returned, for convenience. -// The parameter 'output_stride' specifies the distance (in bytes) -// between scanlines. Hence, output_buffer_size is expected to be at least -// output_stride x picture-height. -WEBP_EXTERN uint8_t* WebPDecodeRGBAInto( - const uint8_t* data, size_t data_size, - uint8_t* output_buffer, size_t output_buffer_size, int output_stride); -WEBP_EXTERN uint8_t* WebPDecodeARGBInto( - const uint8_t* data, size_t data_size, - uint8_t* output_buffer, size_t output_buffer_size, int output_stride); -WEBP_EXTERN uint8_t* WebPDecodeBGRAInto( - const uint8_t* data, size_t data_size, - uint8_t* output_buffer, size_t output_buffer_size, int output_stride); - -// RGB and BGR variants. Here too the transparency information, if present, -// will be dropped and ignored. -WEBP_EXTERN uint8_t* WebPDecodeRGBInto( - const uint8_t* data, size_t data_size, - uint8_t* output_buffer, size_t output_buffer_size, int output_stride); -WEBP_EXTERN uint8_t* WebPDecodeBGRInto( - const uint8_t* data, size_t data_size, - uint8_t* output_buffer, size_t output_buffer_size, int output_stride); - -// WebPDecodeYUVInto() is a variant of WebPDecodeYUV() that operates directly -// into pre-allocated luma/chroma plane buffers. This function requires the -// strides to be passed: one for the luma plane and one for each of the -// chroma ones. The size of each plane buffer is passed as 'luma_size', -// 'u_size' and 'v_size' respectively. -// Pointer to the luma plane ('*luma') is returned or NULL if an error occurred -// during decoding (or because some buffers were found to be too small). -WEBP_EXTERN uint8_t* WebPDecodeYUVInto( - const uint8_t* data, size_t data_size, - uint8_t* luma, size_t luma_size, int luma_stride, - uint8_t* u, size_t u_size, int u_stride, - uint8_t* v, size_t v_size, int v_stride); - -//------------------------------------------------------------------------------ -// Output colorspaces and buffer - -// Colorspaces -// Note: the naming describes the byte-ordering of packed samples in memory. -// For instance, MODE_BGRA relates to samples ordered as B,G,R,A,B,G,R,A,... -// Non-capital names (e.g.:MODE_Argb) relates to pre-multiplied RGB channels. -// RGBA-4444 and RGB-565 colorspaces are represented by following byte-order: -// RGBA-4444: [r3 r2 r1 r0 g3 g2 g1 g0], [b3 b2 b1 b0 a3 a2 a1 a0], ... -// RGB-565: [r4 r3 r2 r1 r0 g5 g4 g3], [g2 g1 g0 b4 b3 b2 b1 b0], ... -// In the case WEBP_SWAP_16BITS_CSP is defined, the bytes are swapped for -// these two modes: -// RGBA-4444: [b3 b2 b1 b0 a3 a2 a1 a0], [r3 r2 r1 r0 g3 g2 g1 g0], ... -// RGB-565: [g2 g1 g0 b4 b3 b2 b1 b0], [r4 r3 r2 r1 r0 g5 g4 g3], ... - -typedef enum WEBP_CSP_MODE { - MODE_RGB = 0, MODE_RGBA = 1, - MODE_BGR = 2, MODE_BGRA = 3, - MODE_ARGB = 4, MODE_RGBA_4444 = 5, - MODE_RGB_565 = 6, - // RGB-premultiplied transparent modes (alpha value is preserved) - MODE_rgbA = 7, - MODE_bgrA = 8, - MODE_Argb = 9, - MODE_rgbA_4444 = 10, - // YUV modes must come after RGB ones. - MODE_YUV = 11, MODE_YUVA = 12, // yuv 4:2:0 - MODE_LAST = 13 -} WEBP_CSP_MODE; - -// Some useful macros: -static WEBP_INLINE int WebPIsPremultipliedMode(WEBP_CSP_MODE mode) { - return (mode == MODE_rgbA || mode == MODE_bgrA || mode == MODE_Argb || - mode == MODE_rgbA_4444); -} - -static WEBP_INLINE int WebPIsAlphaMode(WEBP_CSP_MODE mode) { - return (mode == MODE_RGBA || mode == MODE_BGRA || mode == MODE_ARGB || - mode == MODE_RGBA_4444 || mode == MODE_YUVA || - WebPIsPremultipliedMode(mode)); -} - -static WEBP_INLINE int WebPIsRGBMode(WEBP_CSP_MODE mode) { - return (mode < MODE_YUV); -} - -//------------------------------------------------------------------------------ -// WebPDecBuffer: Generic structure for describing the output sample buffer. - -struct WebPRGBABuffer { // view as RGBA - uint8_t* rgba; // pointer to RGBA samples - int stride; // stride in bytes from one scanline to the next. - size_t size; // total size of the *rgba buffer. -}; - -struct WebPYUVABuffer { // view as YUVA - uint8_t* y, *u, *v, *a; // pointer to luma, chroma U/V, alpha samples - int y_stride; // luma stride - int u_stride, v_stride; // chroma strides - int a_stride; // alpha stride - size_t y_size; // luma plane size - size_t u_size, v_size; // chroma planes size - size_t a_size; // alpha-plane size -}; - -// Output buffer -struct WebPDecBuffer { - WEBP_CSP_MODE colorspace; // Colorspace. - int width, height; // Dimensions. - int is_external_memory; // If non-zero, 'internal_memory' pointer is not - // used. If value is '2' or more, the external - // memory is considered 'slow' and multiple - // read/write will be avoided. - union { - WebPRGBABuffer RGBA; - WebPYUVABuffer YUVA; - } u; // Nameless union of buffer parameters. - uint32_t pad[4]; // padding for later use - - uint8_t* private_memory; // Internally allocated memory (only when - // is_external_memory is 0). Should not be used - // externally, but accessed via the buffer union. -}; - -// Internal, version-checked, entry point -WEBP_EXTERN int WebPInitDecBufferInternal(WebPDecBuffer*, int); - -// Initialize the structure as empty. Must be called before any other use. -// Returns false in case of version mismatch -static WEBP_INLINE int WebPInitDecBuffer(WebPDecBuffer* buffer) { - return WebPInitDecBufferInternal(buffer, WEBP_DECODER_ABI_VERSION); -} - -// Free any memory associated with the buffer. Must always be called last. -// Note: doesn't free the 'buffer' structure itself. -WEBP_EXTERN void WebPFreeDecBuffer(WebPDecBuffer* buffer); - -//------------------------------------------------------------------------------ -// Enumeration of the status codes - -typedef enum VP8StatusCode { - VP8_STATUS_OK = 0, - VP8_STATUS_OUT_OF_MEMORY, - VP8_STATUS_INVALID_PARAM, - VP8_STATUS_BITSTREAM_ERROR, - VP8_STATUS_UNSUPPORTED_FEATURE, - VP8_STATUS_SUSPENDED, - VP8_STATUS_USER_ABORT, - VP8_STATUS_NOT_ENOUGH_DATA -} VP8StatusCode; - -//------------------------------------------------------------------------------ -// Incremental decoding -// -// This API allows streamlined decoding of partial data. -// Picture can be incrementally decoded as data become available thanks to the -// WebPIDecoder object. This object can be left in a SUSPENDED state if the -// picture is only partially decoded, pending additional input. -// Code example: -// -// WebPInitDecBuffer(&output_buffer); -// output_buffer.colorspace = mode; -// ... -// WebPIDecoder* idec = WebPINewDecoder(&output_buffer); -// while (additional_data_is_available) { -// // ... (get additional data in some new_data[] buffer) -// status = WebPIAppend(idec, new_data, new_data_size); -// if (status != VP8_STATUS_OK && status != VP8_STATUS_SUSPENDED) { -// break; // an error occurred. -// } -// -// // The above call decodes the current available buffer. -// // Part of the image can now be refreshed by calling -// // WebPIDecGetRGB()/WebPIDecGetYUVA() etc. -// } -// WebPIDelete(idec); - -// Creates a new incremental decoder with the supplied buffer parameter. -// This output_buffer can be passed NULL, in which case a default output buffer -// is used (with MODE_RGB). Otherwise, an internal reference to 'output_buffer' -// is kept, which means that the lifespan of 'output_buffer' must be larger than -// that of the returned WebPIDecoder object. -// The supplied 'output_buffer' content MUST NOT be changed between calls to -// WebPIAppend() or WebPIUpdate() unless 'output_buffer.is_external_memory' is -// not set to 0. In such a case, it is allowed to modify the pointers, size and -// stride of output_buffer.u.RGBA or output_buffer.u.YUVA, provided they remain -// within valid bounds. -// All other fields of WebPDecBuffer MUST remain constant between calls. -// Returns NULL if the allocation failed. -WEBP_EXTERN WebPIDecoder* WebPINewDecoder(WebPDecBuffer* output_buffer); - -// This function allocates and initializes an incremental-decoder object, which -// will output the RGB/A samples specified by 'csp' into a preallocated -// buffer 'output_buffer'. The size of this buffer is at least -// 'output_buffer_size' and the stride (distance in bytes between two scanlines) -// is specified by 'output_stride'. -// Additionally, output_buffer can be passed NULL in which case the output -// buffer will be allocated automatically when the decoding starts. The -// colorspace 'csp' is taken into account for allocating this buffer. All other -// parameters are ignored. -// Returns NULL if the allocation failed, or if some parameters are invalid. -WEBP_EXTERN WebPIDecoder* WebPINewRGB( - WEBP_CSP_MODE csp, - uint8_t* output_buffer, size_t output_buffer_size, int output_stride); - -// This function allocates and initializes an incremental-decoder object, which -// will output the raw luma/chroma samples into a preallocated planes if -// supplied. The luma plane is specified by its pointer 'luma', its size -// 'luma_size' and its stride 'luma_stride'. Similarly, the chroma-u plane -// is specified by the 'u', 'u_size' and 'u_stride' parameters, and the chroma-v -// plane by 'v' and 'v_size'. And same for the alpha-plane. The 'a' pointer -// can be pass NULL in case one is not interested in the transparency plane. -// Conversely, 'luma' can be passed NULL if no preallocated planes are supplied. -// In this case, the output buffer will be automatically allocated (using -// MODE_YUVA) when decoding starts. All parameters are then ignored. -// Returns NULL if the allocation failed or if a parameter is invalid. -WEBP_EXTERN WebPIDecoder* WebPINewYUVA( - uint8_t* luma, size_t luma_size, int luma_stride, - uint8_t* u, size_t u_size, int u_stride, - uint8_t* v, size_t v_size, int v_stride, - uint8_t* a, size_t a_size, int a_stride); - -// Deprecated version of the above, without the alpha plane. -// Kept for backward compatibility. -WEBP_EXTERN WebPIDecoder* WebPINewYUV( - uint8_t* luma, size_t luma_size, int luma_stride, - uint8_t* u, size_t u_size, int u_stride, - uint8_t* v, size_t v_size, int v_stride); - -// Deletes the WebPIDecoder object and associated memory. Must always be called -// if WebPINewDecoder, WebPINewRGB or WebPINewYUV succeeded. -WEBP_EXTERN void WebPIDelete(WebPIDecoder* idec); - -// Copies and decodes the next available data. Returns VP8_STATUS_OK when -// the image is successfully decoded. Returns VP8_STATUS_SUSPENDED when more -// data is expected. Returns error in other cases. -WEBP_EXTERN VP8StatusCode WebPIAppend( - WebPIDecoder* idec, const uint8_t* data, size_t data_size); - -// A variant of the above function to be used when data buffer contains -// partial data from the beginning. In this case data buffer is not copied -// to the internal memory. -// Note that the value of the 'data' pointer can change between calls to -// WebPIUpdate, for instance when the data buffer is resized to fit larger data. -WEBP_EXTERN VP8StatusCode WebPIUpdate( - WebPIDecoder* idec, const uint8_t* data, size_t data_size); - -// Returns the RGB/A image decoded so far. Returns NULL if output params -// are not initialized yet. The RGB/A output type corresponds to the colorspace -// specified during call to WebPINewDecoder() or WebPINewRGB(). -// *last_y is the index of last decoded row in raster scan order. Some pointers -// (*last_y, *width etc.) can be NULL if corresponding information is not -// needed. The values in these pointers are only valid on successful (non-NULL) -// return. -WEBP_EXTERN uint8_t* WebPIDecGetRGB( - const WebPIDecoder* idec, int* last_y, - int* width, int* height, int* stride); - -// Same as above function to get a YUVA image. Returns pointer to the luma -// plane or NULL in case of error. If there is no alpha information -// the alpha pointer '*a' will be returned NULL. -WEBP_EXTERN uint8_t* WebPIDecGetYUVA( - const WebPIDecoder* idec, int* last_y, - uint8_t** u, uint8_t** v, uint8_t** a, - int* width, int* height, int* stride, int* uv_stride, int* a_stride); - -// Deprecated alpha-less version of WebPIDecGetYUVA(): it will ignore the -// alpha information (if present). Kept for backward compatibility. -static WEBP_INLINE uint8_t* WebPIDecGetYUV( - const WebPIDecoder* idec, int* last_y, uint8_t** u, uint8_t** v, - int* width, int* height, int* stride, int* uv_stride) { - return WebPIDecGetYUVA(idec, last_y, u, v, NULL, width, height, - stride, uv_stride, NULL); -} - -// Generic call to retrieve information about the displayable area. -// If non NULL, the left/right/width/height pointers are filled with the visible -// rectangular area so far. -// Returns NULL in case the incremental decoder object is in an invalid state. -// Otherwise returns the pointer to the internal representation. This structure -// is read-only, tied to WebPIDecoder's lifespan and should not be modified. -WEBP_EXTERN const WebPDecBuffer* WebPIDecodedArea( - const WebPIDecoder* idec, int* left, int* top, int* width, int* height); - -//------------------------------------------------------------------------------ -// Advanced decoding parametrization -// -// Code sample for using the advanced decoding API -/* - // A) Init a configuration object - WebPDecoderConfig config; - CHECK(WebPInitDecoderConfig(&config)); - - // B) optional: retrieve the bitstream's features. - CHECK(WebPGetFeatures(data, data_size, &config.input) == VP8_STATUS_OK); - - // C) Adjust 'config', if needed - config.no_fancy_upsampling = 1; - config.output.colorspace = MODE_BGRA; - // etc. - - // Note that you can also make config.output point to an externally - // supplied memory buffer, provided it's big enough to store the decoded - // picture. Otherwise, config.output will just be used to allocate memory - // and store the decoded picture. - - // D) Decode! - CHECK(WebPDecode(data, data_size, &config) == VP8_STATUS_OK); - - // E) Decoded image is now in config.output (and config.output.u.RGBA) - - // F) Reclaim memory allocated in config's object. It's safe to call - // this function even if the memory is external and wasn't allocated - // by WebPDecode(). - WebPFreeDecBuffer(&config.output); -*/ - -// Features gathered from the bitstream -struct WebPBitstreamFeatures { - int width; // Width in pixels, as read from the bitstream. - int height; // Height in pixels, as read from the bitstream. - int has_alpha; // True if the bitstream contains an alpha channel. - int has_animation; // True if the bitstream is an animation. - int format; // 0 = undefined (/mixed), 1 = lossy, 2 = lossless - - uint32_t pad[5]; // padding for later use -}; - -// Internal, version-checked, entry point -WEBP_EXTERN VP8StatusCode WebPGetFeaturesInternal( - const uint8_t*, size_t, WebPBitstreamFeatures*, int); - -// Retrieve features from the bitstream. The *features structure is filled -// with information gathered from the bitstream. -// Returns VP8_STATUS_OK when the features are successfully retrieved. Returns -// VP8_STATUS_NOT_ENOUGH_DATA when more data is needed to retrieve the -// features from headers. Returns error in other cases. -// Note: The following chunk sequences (before the raw VP8/VP8L data) are -// considered valid by this function: -// RIFF + VP8(L) -// RIFF + VP8X + (optional chunks) + VP8(L) -// ALPH + VP8 <-- Not a valid WebP format: only allowed for internal purpose. -// VP8(L) <-- Not a valid WebP format: only allowed for internal purpose. -static WEBP_INLINE VP8StatusCode WebPGetFeatures( - const uint8_t* data, size_t data_size, - WebPBitstreamFeatures* features) { - return WebPGetFeaturesInternal(data, data_size, features, - WEBP_DECODER_ABI_VERSION); -} - -// Decoding options -struct WebPDecoderOptions { - int bypass_filtering; // if true, skip the in-loop filtering - int no_fancy_upsampling; // if true, use faster pointwise upsampler - int use_cropping; // if true, cropping is applied _first_ - int crop_left, crop_top; // top-left position for cropping. - // Will be snapped to even values. - int crop_width, crop_height; // dimension of the cropping area - int use_scaling; // if true, scaling is applied _afterward_ - int scaled_width, scaled_height; // final resolution - int use_threads; // if true, use multi-threaded decoding - int dithering_strength; // dithering strength (0=Off, 100=full) - int flip; // flip output vertically - int alpha_dithering_strength; // alpha dithering strength in [0..100] - - uint32_t pad[5]; // padding for later use -}; - -// Main object storing the configuration for advanced decoding. -struct WebPDecoderConfig { - WebPBitstreamFeatures input; // Immutable bitstream features (optional) - WebPDecBuffer output; // Output buffer (can point to external mem) - WebPDecoderOptions options; // Decoding options -}; - -// Internal, version-checked, entry point -WEBP_EXTERN int WebPInitDecoderConfigInternal(WebPDecoderConfig*, int); - -// Initialize the configuration as empty. This function must always be -// called first, unless WebPGetFeatures() is to be called. -// Returns false in case of mismatched version. -static WEBP_INLINE int WebPInitDecoderConfig(WebPDecoderConfig* config) { - return WebPInitDecoderConfigInternal(config, WEBP_DECODER_ABI_VERSION); -} - -// Instantiate a new incremental decoder object with the requested -// configuration. The bitstream can be passed using 'data' and 'data_size' -// parameter, in which case the features will be parsed and stored into -// config->input. Otherwise, 'data' can be NULL and no parsing will occur. -// Note that 'config' can be NULL too, in which case a default configuration -// is used. If 'config' is not NULL, it must outlive the WebPIDecoder object -// as some references to its fields will be used. No internal copy of 'config' -// is made. -// The return WebPIDecoder object must always be deleted calling WebPIDelete(). -// Returns NULL in case of error (and config->status will then reflect -// the error condition, if available). -WEBP_EXTERN WebPIDecoder* WebPIDecode(const uint8_t* data, size_t data_size, - WebPDecoderConfig* config); - -// Non-incremental version. This version decodes the full data at once, taking -// 'config' into account. Returns decoding status (which should be VP8_STATUS_OK -// if the decoding was successful). Note that 'config' cannot be NULL. -WEBP_EXTERN VP8StatusCode WebPDecode(const uint8_t* data, size_t data_size, - WebPDecoderConfig* config); - -#ifdef __cplusplus -} // extern "C" -#endif - -#endif // WEBP_WEBP_DECODE_H_ diff --git a/Extended/WebP.framework/Headers/encode.h b/Extended/WebP.framework/Headers/encode.h deleted file mode 100644 index 655166e..0000000 --- a/Extended/WebP.framework/Headers/encode.h +++ /dev/null @@ -1,546 +0,0 @@ -// Copyright 2011 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// WebP encoder: main interface -// -// Author: Skal (pascal.massimino@gmail.com) - -#ifndef WEBP_WEBP_ENCODE_H_ -#define WEBP_WEBP_ENCODE_H_ - -#include "./types.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#define WEBP_ENCODER_ABI_VERSION 0x020f // MAJOR(8b) + MINOR(8b) - -// Note: forward declaring enumerations is not allowed in (strict) C and C++, -// the types are left here for reference. -// typedef enum WebPImageHint WebPImageHint; -// typedef enum WebPEncCSP WebPEncCSP; -// typedef enum WebPPreset WebPPreset; -// typedef enum WebPEncodingError WebPEncodingError; -typedef struct WebPConfig WebPConfig; -typedef struct WebPPicture WebPPicture; // main structure for I/O -typedef struct WebPAuxStats WebPAuxStats; -typedef struct WebPMemoryWriter WebPMemoryWriter; - -// Return the encoder's version number, packed in hexadecimal using 8bits for -// each of major/minor/revision. E.g: v2.5.7 is 0x020507. -WEBP_EXTERN int WebPGetEncoderVersion(void); - -//------------------------------------------------------------------------------ -// One-stop-shop call! No questions asked: - -// Returns the size of the compressed data (pointed to by *output), or 0 if -// an error occurred. The compressed data must be released by the caller -// using the call 'WebPFree(*output)'. -// These functions compress using the lossy format, and the quality_factor -// can go from 0 (smaller output, lower quality) to 100 (best quality, -// larger output). -WEBP_EXTERN size_t WebPEncodeRGB(const uint8_t* rgb, - int width, int height, int stride, - float quality_factor, uint8_t** output); -WEBP_EXTERN size_t WebPEncodeBGR(const uint8_t* bgr, - int width, int height, int stride, - float quality_factor, uint8_t** output); -WEBP_EXTERN size_t WebPEncodeRGBA(const uint8_t* rgba, - int width, int height, int stride, - float quality_factor, uint8_t** output); -WEBP_EXTERN size_t WebPEncodeBGRA(const uint8_t* bgra, - int width, int height, int stride, - float quality_factor, uint8_t** output); - -// These functions are the equivalent of the above, but compressing in a -// lossless manner. Files are usually larger than lossy format, but will -// not suffer any compression loss. -// Note these functions, like the lossy versions, use the library's default -// settings. For lossless this means 'exact' is disabled. RGB values in -// transparent areas will be modified to improve compression. To avoid this, -// use WebPEncode() and set WebPConfig::exact to 1. -WEBP_EXTERN size_t WebPEncodeLosslessRGB(const uint8_t* rgb, - int width, int height, int stride, - uint8_t** output); -WEBP_EXTERN size_t WebPEncodeLosslessBGR(const uint8_t* bgr, - int width, int height, int stride, - uint8_t** output); -WEBP_EXTERN size_t WebPEncodeLosslessRGBA(const uint8_t* rgba, - int width, int height, int stride, - uint8_t** output); -WEBP_EXTERN size_t WebPEncodeLosslessBGRA(const uint8_t* bgra, - int width, int height, int stride, - uint8_t** output); - -//------------------------------------------------------------------------------ -// Coding parameters - -// Image characteristics hint for the underlying encoder. -typedef enum WebPImageHint { - WEBP_HINT_DEFAULT = 0, // default preset. - WEBP_HINT_PICTURE, // digital picture, like portrait, inner shot - WEBP_HINT_PHOTO, // outdoor photograph, with natural lighting - WEBP_HINT_GRAPH, // Discrete tone image (graph, map-tile etc). - WEBP_HINT_LAST -} WebPImageHint; - -// Compression parameters. -struct WebPConfig { - int lossless; // Lossless encoding (0=lossy(default), 1=lossless). - float quality; // between 0 and 100. For lossy, 0 gives the smallest - // size and 100 the largest. For lossless, this - // parameter is the amount of effort put into the - // compression: 0 is the fastest but gives larger - // files compared to the slowest, but best, 100. - int method; // quality/speed trade-off (0=fast, 6=slower-better) - - WebPImageHint image_hint; // Hint for image type (lossless only for now). - - int target_size; // if non-zero, set the desired target size in bytes. - // Takes precedence over the 'compression' parameter. - float target_PSNR; // if non-zero, specifies the minimal distortion to - // try to achieve. Takes precedence over target_size. - int segments; // maximum number of segments to use, in [1..4] - int sns_strength; // Spatial Noise Shaping. 0=off, 100=maximum. - int filter_strength; // range: [0 = off .. 100 = strongest] - int filter_sharpness; // range: [0 = off .. 7 = least sharp] - int filter_type; // filtering type: 0 = simple, 1 = strong (only used - // if filter_strength > 0 or autofilter > 0) - int autofilter; // Auto adjust filter's strength [0 = off, 1 = on] - int alpha_compression; // Algorithm for encoding the alpha plane (0 = none, - // 1 = compressed with WebP lossless). Default is 1. - int alpha_filtering; // Predictive filtering method for alpha plane. - // 0: none, 1: fast, 2: best. Default if 1. - int alpha_quality; // Between 0 (smallest size) and 100 (lossless). - // Default is 100. - int pass; // number of entropy-analysis passes (in [1..10]). - - int show_compressed; // if true, export the compressed picture back. - // In-loop filtering is not applied. - int preprocessing; // preprocessing filter: - // 0=none, 1=segment-smooth, 2=pseudo-random dithering - int partitions; // log2(number of token partitions) in [0..3]. Default - // is set to 0 for easier progressive decoding. - int partition_limit; // quality degradation allowed to fit the 512k limit - // on prediction modes coding (0: no degradation, - // 100: maximum possible degradation). - int emulate_jpeg_size; // If true, compression parameters will be remapped - // to better match the expected output size from - // JPEG compression. Generally, the output size will - // be similar but the degradation will be lower. - int thread_level; // If non-zero, try and use multi-threaded encoding. - int low_memory; // If set, reduce memory usage (but increase CPU use). - - int near_lossless; // Near lossless encoding [0 = max loss .. 100 = off - // (default)]. - int exact; // if non-zero, preserve the exact RGB values under - // transparent area. Otherwise, discard this invisible - // RGB information for better compression. The default - // value is 0. - - int use_delta_palette; // reserved for future lossless feature - int use_sharp_yuv; // if needed, use sharp (and slow) RGB->YUV conversion - - uint32_t pad[2]; // padding for later use -}; - -// Enumerate some predefined settings for WebPConfig, depending on the type -// of source picture. These presets are used when calling WebPConfigPreset(). -typedef enum WebPPreset { - WEBP_PRESET_DEFAULT = 0, // default preset. - WEBP_PRESET_PICTURE, // digital picture, like portrait, inner shot - WEBP_PRESET_PHOTO, // outdoor photograph, with natural lighting - WEBP_PRESET_DRAWING, // hand or line drawing, with high-contrast details - WEBP_PRESET_ICON, // small-sized colorful images - WEBP_PRESET_TEXT // text-like -} WebPPreset; - -// Internal, version-checked, entry point -WEBP_EXTERN int WebPConfigInitInternal(WebPConfig*, WebPPreset, float, int); - -// Should always be called, to initialize a fresh WebPConfig structure before -// modification. Returns false in case of version mismatch. WebPConfigInit() -// must have succeeded before using the 'config' object. -// Note that the default values are lossless=0 and quality=75. -static WEBP_INLINE int WebPConfigInit(WebPConfig* config) { - return WebPConfigInitInternal(config, WEBP_PRESET_DEFAULT, 75.f, - WEBP_ENCODER_ABI_VERSION); -} - -// This function will initialize the configuration according to a predefined -// set of parameters (referred to by 'preset') and a given quality factor. -// This function can be called as a replacement to WebPConfigInit(). Will -// return false in case of error. -static WEBP_INLINE int WebPConfigPreset(WebPConfig* config, - WebPPreset preset, float quality) { - return WebPConfigInitInternal(config, preset, quality, - WEBP_ENCODER_ABI_VERSION); -} - -// Activate the lossless compression mode with the desired efficiency level -// between 0 (fastest, lowest compression) and 9 (slower, best compression). -// A good default level is '6', providing a fair tradeoff between compression -// speed and final compressed size. -// This function will overwrite several fields from config: 'method', 'quality' -// and 'lossless'. Returns false in case of parameter error. -WEBP_EXTERN int WebPConfigLosslessPreset(WebPConfig* config, int level); - -// Returns true if 'config' is non-NULL and all configuration parameters are -// within their valid ranges. -WEBP_EXTERN int WebPValidateConfig(const WebPConfig* config); - -//------------------------------------------------------------------------------ -// Input / Output -// Structure for storing auxiliary statistics. - -struct WebPAuxStats { - int coded_size; // final size - - float PSNR[5]; // peak-signal-to-noise ratio for Y/U/V/All/Alpha - int block_count[3]; // number of intra4/intra16/skipped macroblocks - int header_bytes[2]; // approximate number of bytes spent for header - // and mode-partition #0 - int residual_bytes[3][4]; // approximate number of bytes spent for - // DC/AC/uv coefficients for each (0..3) segments. - int segment_size[4]; // number of macroblocks in each segments - int segment_quant[4]; // quantizer values for each segments - int segment_level[4]; // filtering strength for each segments [0..63] - - int alpha_data_size; // size of the transparency data - int layer_data_size; // size of the enhancement layer data - - // lossless encoder statistics - uint32_t lossless_features; // bit0:predictor bit1:cross-color transform - // bit2:subtract-green bit3:color indexing - int histogram_bits; // number of precision bits of histogram - int transform_bits; // precision bits for transform - int cache_bits; // number of bits for color cache lookup - int palette_size; // number of color in palette, if used - int lossless_size; // final lossless size - int lossless_hdr_size; // lossless header (transform, huffman etc) size - int lossless_data_size; // lossless image data size - - uint32_t pad[2]; // padding for later use -}; - -// Signature for output function. Should return true if writing was successful. -// data/data_size is the segment of data to write, and 'picture' is for -// reference (and so one can make use of picture->custom_ptr). -typedef int (*WebPWriterFunction)(const uint8_t* data, size_t data_size, - const WebPPicture* picture); - -// WebPMemoryWrite: a special WebPWriterFunction that writes to memory using -// the following WebPMemoryWriter object (to be set as a custom_ptr). -struct WebPMemoryWriter { - uint8_t* mem; // final buffer (of size 'max_size', larger than 'size'). - size_t size; // final size - size_t max_size; // total capacity - uint32_t pad[1]; // padding for later use -}; - -// The following must be called first before any use. -WEBP_EXTERN void WebPMemoryWriterInit(WebPMemoryWriter* writer); - -// The following must be called to deallocate writer->mem memory. The 'writer' -// object itself is not deallocated. -WEBP_EXTERN void WebPMemoryWriterClear(WebPMemoryWriter* writer); -// The custom writer to be used with WebPMemoryWriter as custom_ptr. Upon -// completion, writer.mem and writer.size will hold the coded data. -// writer.mem must be freed by calling WebPMemoryWriterClear. -WEBP_EXTERN int WebPMemoryWrite(const uint8_t* data, size_t data_size, - const WebPPicture* picture); - -// Progress hook, called from time to time to report progress. It can return -// false to request an abort of the encoding process, or true otherwise if -// everything is OK. -typedef int (*WebPProgressHook)(int percent, const WebPPicture* picture); - -// Color spaces. -typedef enum WebPEncCSP { - // chroma sampling - WEBP_YUV420 = 0, // 4:2:0 - WEBP_YUV420A = 4, // alpha channel variant - WEBP_CSP_UV_MASK = 3, // bit-mask to get the UV sampling factors - WEBP_CSP_ALPHA_BIT = 4 // bit that is set if alpha is present -} WebPEncCSP; - -// Encoding error conditions. -typedef enum WebPEncodingError { - VP8_ENC_OK = 0, - VP8_ENC_ERROR_OUT_OF_MEMORY, // memory error allocating objects - VP8_ENC_ERROR_BITSTREAM_OUT_OF_MEMORY, // memory error while flushing bits - VP8_ENC_ERROR_NULL_PARAMETER, // a pointer parameter is NULL - VP8_ENC_ERROR_INVALID_CONFIGURATION, // configuration is invalid - VP8_ENC_ERROR_BAD_DIMENSION, // picture has invalid width/height - VP8_ENC_ERROR_PARTITION0_OVERFLOW, // partition is bigger than 512k - VP8_ENC_ERROR_PARTITION_OVERFLOW, // partition is bigger than 16M - VP8_ENC_ERROR_BAD_WRITE, // error while flushing bytes - VP8_ENC_ERROR_FILE_TOO_BIG, // file is bigger than 4G - VP8_ENC_ERROR_USER_ABORT, // abort request by user - VP8_ENC_ERROR_LAST // list terminator. always last. -} WebPEncodingError; - -// maximum width/height allowed (inclusive), in pixels -#define WEBP_MAX_DIMENSION 16383 - -// Main exchange structure (input samples, output bytes, statistics) -struct WebPPicture { - // INPUT - ////////////// - // Main flag for encoder selecting between ARGB or YUV input. - // It is recommended to use ARGB input (*argb, argb_stride) for lossless - // compression, and YUV input (*y, *u, *v, etc.) for lossy compression - // since these are the respective native colorspace for these formats. - int use_argb; - - // YUV input (mostly used for input to lossy compression) - WebPEncCSP colorspace; // colorspace: should be YUV420 for now (=Y'CbCr). - int width, height; // dimensions (less or equal to WEBP_MAX_DIMENSION) - uint8_t* y, *u, *v; // pointers to luma/chroma planes. - int y_stride, uv_stride; // luma/chroma strides. - uint8_t* a; // pointer to the alpha plane - int a_stride; // stride of the alpha plane - uint32_t pad1[2]; // padding for later use - - // ARGB input (mostly used for input to lossless compression) - uint32_t* argb; // Pointer to argb (32 bit) plane. - int argb_stride; // This is stride in pixels units, not bytes. - uint32_t pad2[3]; // padding for later use - - // OUTPUT - /////////////// - // Byte-emission hook, to store compressed bytes as they are ready. - WebPWriterFunction writer; // can be NULL - void* custom_ptr; // can be used by the writer. - - // map for extra information (only for lossy compression mode) - int extra_info_type; // 1: intra type, 2: segment, 3: quant - // 4: intra-16 prediction mode, - // 5: chroma prediction mode, - // 6: bit cost, 7: distortion - uint8_t* extra_info; // if not NULL, points to an array of size - // ((width + 15) / 16) * ((height + 15) / 16) that - // will be filled with a macroblock map, depending - // on extra_info_type. - - // STATS AND REPORTS - /////////////////////////// - // Pointer to side statistics (updated only if not NULL) - WebPAuxStats* stats; - - // Error code for the latest error encountered during encoding - WebPEncodingError error_code; - - // If not NULL, report progress during encoding. - WebPProgressHook progress_hook; - - void* user_data; // this field is free to be set to any value and - // used during callbacks (like progress-report e.g.). - - uint32_t pad3[3]; // padding for later use - - // Unused for now - uint8_t* pad4, *pad5; - uint32_t pad6[8]; // padding for later use - - // PRIVATE FIELDS - //////////////////// - void* memory_; // row chunk of memory for yuva planes - void* memory_argb_; // and for argb too. - void* pad7[2]; // padding for later use -}; - -// Internal, version-checked, entry point -WEBP_EXTERN int WebPPictureInitInternal(WebPPicture*, int); - -// Should always be called, to initialize the structure. Returns false in case -// of version mismatch. WebPPictureInit() must have succeeded before using the -// 'picture' object. -// Note that, by default, use_argb is false and colorspace is WEBP_YUV420. -static WEBP_INLINE int WebPPictureInit(WebPPicture* picture) { - return WebPPictureInitInternal(picture, WEBP_ENCODER_ABI_VERSION); -} - -//------------------------------------------------------------------------------ -// WebPPicture utils - -// Convenience allocation / deallocation based on picture->width/height: -// Allocate y/u/v buffers as per colorspace/width/height specification. -// Note! This function will free the previous buffer if needed. -// Returns false in case of memory error. -WEBP_EXTERN int WebPPictureAlloc(WebPPicture* picture); - -// Release the memory allocated by WebPPictureAlloc() or WebPPictureImport*(). -// Note that this function does _not_ free the memory used by the 'picture' -// object itself. -// Besides memory (which is reclaimed) all other fields of 'picture' are -// preserved. -WEBP_EXTERN void WebPPictureFree(WebPPicture* picture); - -// Copy the pixels of *src into *dst, using WebPPictureAlloc. Upon return, *dst -// will fully own the copied pixels (this is not a view). The 'dst' picture need -// not be initialized as its content is overwritten. -// Returns false in case of memory allocation error. -WEBP_EXTERN int WebPPictureCopy(const WebPPicture* src, WebPPicture* dst); - -// Compute the single distortion for packed planes of samples. -// 'src' will be compared to 'ref', and the raw distortion stored into -// '*distortion'. The refined metric (log(MSE), log(1 - ssim),...' will be -// stored in '*result'. -// 'x_step' is the horizontal stride (in bytes) between samples. -// 'src/ref_stride' is the byte distance between rows. -// Returns false in case of error (bad parameter, memory allocation error, ...). -WEBP_EXTERN int WebPPlaneDistortion(const uint8_t* src, size_t src_stride, - const uint8_t* ref, size_t ref_stride, - int width, int height, - size_t x_step, - int type, // 0 = PSNR, 1 = SSIM, 2 = LSIM - float* distortion, float* result); - -// Compute PSNR, SSIM or LSIM distortion metric between two pictures. Results -// are in dB, stored in result[] in the B/G/R/A/All order. The distortion is -// always performed using ARGB samples. Hence if the input is YUV(A), the -// picture will be internally converted to ARGB (just for the measurement). -// Warning: this function is rather CPU-intensive. -WEBP_EXTERN int WebPPictureDistortion( - const WebPPicture* src, const WebPPicture* ref, - int metric_type, // 0 = PSNR, 1 = SSIM, 2 = LSIM - float result[5]); - -// self-crops a picture to the rectangle defined by top/left/width/height. -// Returns false in case of memory allocation error, or if the rectangle is -// outside of the source picture. -// The rectangle for the view is defined by the top-left corner pixel -// coordinates (left, top) as well as its width and height. This rectangle -// must be fully be comprised inside the 'src' source picture. If the source -// picture uses the YUV420 colorspace, the top and left coordinates will be -// snapped to even values. -WEBP_EXTERN int WebPPictureCrop(WebPPicture* picture, - int left, int top, int width, int height); - -// Extracts a view from 'src' picture into 'dst'. The rectangle for the view -// is defined by the top-left corner pixel coordinates (left, top) as well -// as its width and height. This rectangle must be fully be comprised inside -// the 'src' source picture. If the source picture uses the YUV420 colorspace, -// the top and left coordinates will be snapped to even values. -// Picture 'src' must out-live 'dst' picture. Self-extraction of view is allowed -// ('src' equal to 'dst') as a mean of fast-cropping (but note that doing so, -// the original dimension will be lost). Picture 'dst' need not be initialized -// with WebPPictureInit() if it is different from 'src', since its content will -// be overwritten. -// Returns false in case of memory allocation error or invalid parameters. -WEBP_EXTERN int WebPPictureView(const WebPPicture* src, - int left, int top, int width, int height, - WebPPicture* dst); - -// Returns true if the 'picture' is actually a view and therefore does -// not own the memory for pixels. -WEBP_EXTERN int WebPPictureIsView(const WebPPicture* picture); - -// Rescale a picture to new dimension width x height. -// If either 'width' or 'height' (but not both) is 0 the corresponding -// dimension will be calculated preserving the aspect ratio. -// No gamma correction is applied. -// Returns false in case of error (invalid parameter or insufficient memory). -WEBP_EXTERN int WebPPictureRescale(WebPPicture* pic, int width, int height); - -// Colorspace conversion function to import RGB samples. -// Previous buffer will be free'd, if any. -// *rgb buffer should have a size of at least height * rgb_stride. -// Returns false in case of memory error. -WEBP_EXTERN int WebPPictureImportRGB( - WebPPicture* picture, const uint8_t* rgb, int rgb_stride); -// Same, but for RGBA buffer. -WEBP_EXTERN int WebPPictureImportRGBA( - WebPPicture* picture, const uint8_t* rgba, int rgba_stride); -// Same, but for RGBA buffer. Imports the RGB direct from the 32-bit format -// input buffer ignoring the alpha channel. Avoids needing to copy the data -// to a temporary 24-bit RGB buffer to import the RGB only. -WEBP_EXTERN int WebPPictureImportRGBX( - WebPPicture* picture, const uint8_t* rgbx, int rgbx_stride); - -// Variants of the above, but taking BGR(A|X) input. -WEBP_EXTERN int WebPPictureImportBGR( - WebPPicture* picture, const uint8_t* bgr, int bgr_stride); -WEBP_EXTERN int WebPPictureImportBGRA( - WebPPicture* picture, const uint8_t* bgra, int bgra_stride); -WEBP_EXTERN int WebPPictureImportBGRX( - WebPPicture* picture, const uint8_t* bgrx, int bgrx_stride); - -// Converts picture->argb data to the YUV420A format. The 'colorspace' -// parameter is deprecated and should be equal to WEBP_YUV420. -// Upon return, picture->use_argb is set to false. The presence of real -// non-opaque transparent values is detected, and 'colorspace' will be -// adjusted accordingly. Note that this method is lossy. -// Returns false in case of error. -WEBP_EXTERN int WebPPictureARGBToYUVA(WebPPicture* picture, - WebPEncCSP /*colorspace = WEBP_YUV420*/); - -// Same as WebPPictureARGBToYUVA(), but the conversion is done using -// pseudo-random dithering with a strength 'dithering' between -// 0.0 (no dithering) and 1.0 (maximum dithering). This is useful -// for photographic picture. -WEBP_EXTERN int WebPPictureARGBToYUVADithered( - WebPPicture* picture, WebPEncCSP colorspace, float dithering); - -// Performs 'sharp' RGBA->YUVA420 downsampling and colorspace conversion. -// Downsampling is handled with extra care in case of color clipping. This -// method is roughly 2x slower than WebPPictureARGBToYUVA() but produces better -// and sharper YUV representation. -// Returns false in case of error. -WEBP_EXTERN int WebPPictureSharpARGBToYUVA(WebPPicture* picture); -// kept for backward compatibility: -WEBP_EXTERN int WebPPictureSmartARGBToYUVA(WebPPicture* picture); - -// Converts picture->yuv to picture->argb and sets picture->use_argb to true. -// The input format must be YUV_420 or YUV_420A. The conversion from YUV420 to -// ARGB incurs a small loss too. -// Note that the use of this colorspace is discouraged if one has access to the -// raw ARGB samples, since using YUV420 is comparatively lossy. -// Returns false in case of error. -WEBP_EXTERN int WebPPictureYUVAToARGB(WebPPicture* picture); - -// Helper function: given a width x height plane of RGBA or YUV(A) samples -// clean-up or smoothen the YUV or RGB samples under fully transparent area, -// to help compressibility (no guarantee, though). -WEBP_EXTERN void WebPCleanupTransparentArea(WebPPicture* picture); - -// Scan the picture 'picture' for the presence of non fully opaque alpha values. -// Returns true in such case. Otherwise returns false (indicating that the -// alpha plane can be ignored altogether e.g.). -WEBP_EXTERN int WebPPictureHasTransparency(const WebPPicture* picture); - -// Remove the transparency information (if present) by blending the color with -// the background color 'background_rgb' (specified as 24bit RGB triplet). -// After this call, all alpha values are reset to 0xff. -WEBP_EXTERN void WebPBlendAlpha(WebPPicture* pic, uint32_t background_rgb); - -//------------------------------------------------------------------------------ -// Main call - -// Main encoding call, after config and picture have been initialized. -// 'picture' must be less than 16384x16384 in dimension (cf WEBP_MAX_DIMENSION), -// and the 'config' object must be a valid one. -// Returns false in case of error, true otherwise. -// In case of error, picture->error_code is updated accordingly. -// 'picture' can hold the source samples in both YUV(A) or ARGB input, depending -// on the value of 'picture->use_argb'. It is highly recommended to use -// the former for lossy encoding, and the latter for lossless encoding -// (when config.lossless is true). Automatic conversion from one format to -// another is provided but they both incur some loss. -WEBP_EXTERN int WebPEncode(const WebPConfig* config, WebPPicture* picture); - -//------------------------------------------------------------------------------ - -#ifdef __cplusplus -} // extern "C" -#endif - -#endif // WEBP_WEBP_ENCODE_H_ diff --git a/Extended/WebP.framework/Headers/types.h b/Extended/WebP.framework/Headers/types.h deleted file mode 100644 index 47f7f2b..0000000 --- a/Extended/WebP.framework/Headers/types.h +++ /dev/null @@ -1,68 +0,0 @@ -// Copyright 2010 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Common types + memory wrappers -// -// Author: Skal (pascal.massimino@gmail.com) - -#ifndef WEBP_WEBP_TYPES_H_ -#define WEBP_WEBP_TYPES_H_ - -#include // for size_t - -#ifndef _MSC_VER -#include -#if defined(__cplusplus) || !defined(__STRICT_ANSI__) || \ - (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) -#define WEBP_INLINE inline -#else -#define WEBP_INLINE -#endif -#else -typedef signed char int8_t; -typedef unsigned char uint8_t; -typedef signed short int16_t; -typedef unsigned short uint16_t; -typedef signed int int32_t; -typedef unsigned int uint32_t; -typedef unsigned long long int uint64_t; -typedef long long int int64_t; -#define WEBP_INLINE __forceinline -#endif /* _MSC_VER */ - -#ifndef WEBP_EXTERN -// This explicitly marks library functions and allows for changing the -// signature for e.g., Windows DLL builds. -# if defined(__GNUC__) && __GNUC__ >= 4 -# define WEBP_EXTERN extern __attribute__ ((visibility ("default"))) -# else -# define WEBP_EXTERN extern -# endif /* __GNUC__ >= 4 */ -#endif /* WEBP_EXTERN */ - -// Macro to check ABI compatibility (same major revision number) -#define WEBP_ABI_IS_INCOMPATIBLE(a, b) (((a) >> 8) != ((b) >> 8)) - -#ifdef __cplusplus -extern "C" { -#endif - -// Allocates 'size' bytes of memory. Returns NULL upon error. Memory -// must be deallocated by calling WebPFree(). This function is made available -// by the core 'libwebp' library. -WEBP_EXTERN void* WebPMalloc(size_t size); - -// Releases memory returned by the WebPDecode*() functions (from decode.h). -WEBP_EXTERN void WebPFree(void* ptr); - -#ifdef __cplusplus -} // extern "C" -#endif - -#endif // WEBP_WEBP_TYPES_H_ diff --git a/Extended/WebP.framework/WebP b/Extended/WebP.framework/WebP deleted file mode 100644 index 2da404345986859cc005befe4ffb1223bd5089b5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10234072 zcmeFa4R}*U_Aowa(j=t$xP<~KP0KB~1R6Wp{O{ivC#F-A!nP3RMG(ZWmd$C}P#F8;})5SN>=2oup~0?z`{* zdH=undH%mV&73=DX3m^BbLPz4d(TNveE-HD5JI8w6~UJe-%50wR1Yu&zEb#3g8TrQ z@!Y{6To}6VkQqg-(_zM05K>X`_{ z{L*s~Dk1fD5d3Q}1MZPfl#Zn)r;rO^!hIB4D?>>67==CrnD!?MJt0S^zb+h2r4TwI zpN4osgszK3=#Mi19~Fy4;RvnTFddZwy@ba@(I24R;NLrLu&x${Zxj2g7Y33dLLlIcQQl)pVyyPpi`uu z{lLfd^EA3h^1mQ*`zOi2O7gFedgoxc-cE#?2!HRAaePVeTBwibGYR-|tq`Nvpg+@M z3RQwU682H(3xIilqtJ68m!ZzdXfK(^7YO_>e;(*N&xWFYl0Qq}7X-GGdH4x|-^2W1 zy}3#F2nRjEc?s}`=QWzZ7=rfz{r+=8GzAnNk7pg>`!)OzE1F0 zB4GY^MIrH24n`4p7lHQ?SVZ7@0=E*ln?M(VuMzkzfu9n1gFp?)v;3eK^#Px0&(1&} z5;zU?r{}_SlmYOFQ;CWRtR`?3Sc$xfNr)lirlPrZ6;EI~fdvHW39KXVpQN8kLT5Y3 zgYw0pR+6W{0(CCoqj&C{geLb(=Wentvj|*8;Bm6fA^@5eg`hhK3+Mz&2Bwt2gCE@2isE_v%73d$f-(bqw^&d;%JOXnF ztS9YCNd6pY|0#jhzz?>QHwb@Wpck0W$4I-4kjMMfGzIVl#^z1}9|F6a*E9{?NAk-F ztRwhxlHW<-UINb$dv~6|&j|b{f%Bjn%Nm64C(sJ>iDt#1Jp{f)U@FXaqbd?DA+QA2 zL0X6uRT8+4w67&_?@U;qpTwhX0+oQr`{^%0zf7+P(5nRY68L8VFA?}Pff4~%KbpWq z0y7BI5xAbfS_0n${r1uE=oygbk(Xv6*K~yR3!~8?0{=+h2LygeU??z(>qQfoNZ<>E zP9o4X?TSMVGR{}Y_?{*C-;?||WWL`d?OF(5KO=Al=$Y?R2`Yp7?XSn9-;nm1px^pL z9$HG^Is#1u?jZ1S0{0X65`k|Jc$~oZ3A{w02{Dklh5i6`Zs-_=>cP%Y z(c$PC=#BRuQ&9_&!$i&(C^3jG4$!8a&02kQ0n!_g4H;mcDHkVKvF)6lO;{h6fx zby5yTF}C~!;pa4&j|?)8g#?xnNE3O?BQTr5|D2>2x0pIvSG&(}cUn1?_Ch%_reodeZ^bq$GN8myN-zM$z3Ec+?{D|O}k$P1G znn<~wu)GTfn1%}D0Cd4 zyK4%X1oFh~I!U`j1injPG%3HAz`ql`0Okw#6GvbXDgTPd_dMjWz4(&A?+ARE=+kz{ z<8@L_?9W?d{{KSY2!ROd<8?KSz&QkJ2wVvK;B!$9fvXAJLSQ%9Ctf9xqT!6VLYJ0h zTwhaVsx{WtX(~XtubvKS8ohTSJ7y!BwglIR+xeb=F}REMk?F`10j&=!j=A6NmRMY)+{@~cZ$Xhsn=WkAVa8!}}YU?G61 zG@AXzONaP+MnQR&S^_k7hxVwT43InjI%-iVjzTv6lj;kS#LS8O@_vZMkv%rs9f?)dq8Y zEhi^!rO^O<6D7k#4qO(3bl40xR=5P2<-s%-sT)Ks$s3MLpx!RSZ|xF+n9 z;P~ZQ1)=k+po?NN%xG0`*{!wNivB7AK@7|nx_KxU)$ zGjof^Wr>1tO`upaL6h;QaUDT+3>BQ8pvibtKvlWEAv;6DO&!c}1-IJ3O4Wjq z#5hhFj9ZMAIbascFp6siV$kYJ0%`#y0?qM-77XWdLusXvtG&rkTF0=oHm!$}B<`|q z{B<&m2U>U~vDd(AFlks!c@^B_6sy+Ww~IetC!bgR@NIe z)n!G-GAt=r#Rb}$%9`5z>M~kQ(MK#+FuEmnXxhgjohNq#zA

~QW%SUmcD!R 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

99M|Cg-z>p0w{3aqLlLo4H%F{RKg}v$Da3AEn85 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

{lG?fSsa$?Eui14eUXw4eCPcly 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%0DGy6pnv^L`;f*QTHA|VfJsW{`WNSS;Qz1 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 zk---olCh87g

oAA5>bH;tXLp*JBZF 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%0DEah;gkD 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Ð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 z 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¥owI{Cd9WnNDHvGqca3rxLs6`n9 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%0AIt*&=zsjL=|k^VSo&IdD5y5Q#I_} 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

q!yS{#y~rY($4jbcpLJdfrU2uS};{#HmwY zC34J(4(hH}$N|r*owF*AkcL~|4hSHg=T|eO2)nXESGuw!U&u2Ea z{ky~MNL!^sX(PoBKzrwu+t^>Go*SQHaf96fV7Bbezxp+PUa61Nlj0|~S2$z*sL#U` zDKL|vry)m*P1o=NaLU@`&eTWD6#E0J`Q6aY2Nt)c$!A+o#x(pk0OU+ACLr@CoQd+z zabAM1@< zG;fIjgJLw=gV~$}8$*aEXp==}fGrd@Sp;dy!c|qQi^;2$)Jkz+ck9 zixKAb!wBd%0rOcp5qbdv{uKe6mLTA} zH1K8`^Kk_HZyIwO!h9qh0ed^=$+!ejfohAmEjFb&S(Jm76Qh=Sl1B7{;7f4X?Bf@+=0|B2vz?yYP+}|KzV>jY+<41_khrIT{ zUYXw*^Sh!fOVAdoubg2Em1d)UO#YZFGVYR|6{hL6bT%@V<;C&fr31>}WGlJ8h@ zia#S^%N27LUEU&7jA$!Y$a1Wp<&>8GScqo+9bDu5@1SU_udo(S0ajBX!&i!Xi4^%Ww}pPn>&Q_%ZEbNNfQy^*wwOd!Y7*QKx;weL>20*3J>YE@ALSFpoO)bZrGq@KmS;JMaTdun*^2e7@vn95S== z3y9$I$wEYM?00(h6VIm?}c2Pk(FD{=aL0L8MV>=y+Q;8KcfjQEvB`ojV3tQAGI;=7bFzsD;zxtC4CAv8=i7g zA%k1QE(T~LwSj(02TkxAf7V_Y0O3zd!f%Sud!rNSJ$@`GV}-~|8T^o{htpsu!8G{2 zm+J~)EV&K^r)(m73uT>9tUJYmAfCp>R>@_0U{hJor2P4D8KOX?3-`Kw&>`}^B6S~H zq@pw#gY&uidcRrH!3+_C!|$g$i-yYe{ux8%{y3D&bB4;b0W1D0&(ILX21#CkfIQ*M zfOL(v2&+6m5Y*!gK9)X_WNo=-)CnJ+sq zBBGc*rN^UbM|l(J1n-TI8-g|F9mMIlDhNQxgG6{oSrE*n670lFlryVYK2l~R`pad` z5yP2qYT@Z&uJs#6J?B~@bI_g5!vu707i1#YaArIi?HGoh6%;lIZFjZ8#MgZ?9R}H3 zL3|}gDP0hbDQ1EHH`VU+hk0{!M>z!HF~Y3?XKs$}O3VOfl<w$UY$A2+Iw2>LDrVYW$T7wMA7Y>m4jJ4Ry#}+GJYUt*`227M>p*tp415t z3o~PYh2?)*whyr|VcQ@J%bO4j$yi_^gi|ykG~X}!We(aH49#|T-7(l~$iQ1aBld$ek9WRVRDX*qBA8s+}yp}Y zkf9;F8QHx&G_IXRBFxUH{$C*_QFox@pX>thBqkohFVa9j_Y_CA0 z+cRXN@R0~}X9B|f7Q$>EfygKc1TvTlX~RWtQZ94_%+d&ixpO*TF8>H&HhUq=${=Lf zmLuT2?TF^%Xh*XmhW0lS(NNV*kF!3=ytg6X))LlnU>5vo$-&>B8o^4X?c3nqTiU)o zGrEm=(-891xD)o`ZUxvgydz1$TT2WX$oi32{$?O$oMNRv7|5urLS!HlCL;qm0hu=1 zK!)&!4CFpAkbor=_GZ(;+dRy9^WcixRi>fdWeB$|Odj}mW8F0r>dnjB_Szt{J_!SJ zq&_xGejmJHn$D&Kb7Wc)m@+WjvL__801``wpWQFsJ}4G(zmcz@(4z*-BZfF4othRj#E}pw zvyv7?atCXOiS0YS9%74rW;+%L1KBleKy!^7O!)=+44r3j%R;-;iu%pb)s=;`9fnN? zo1^QJi-+xS#*iKEWW!5~AdIQ^9DZ)%m&4CpDFu3c?+tTBmoRlmVXU4}6wZLkDTjtD ztqDWPts0$I6qSr*m9clYvNIuJ=uXpMrB|~)L+(?|c-iiB28gtN_6kj8CsM|uD;1O{yF|hcZ8nug%>nCigeCs; z4X2~iaE+ z>xTQj_^mBNdA3Z0G;~J{s<4SMR(r)X#juMt#=|P$_@9T3Sl5N3A)RvwqkvPk@xzbZvS{=W zPkyBzt6M^PJ>kFO7+-AY0?z+CYck?|>3zicr>{*O;(T+=5a;umwAKC2GHfuC>wg() zA)bO-m~>;jk_n^2G z$p+7&9S!3;G<1KAyoOBVHP~R*4l`zY!X1Ogc8r4n?$J|8dIp2hF2+6@*qsJeB1a&N z26jfkdC0|R4M#3UUm0>S?8wFFq5Y9YD7IH~`;8&WmaZ@}cb8>;PO( zzhNaB`6CUqKk_B=N7S@GqNDwhLIf<@fq;KRz|wdG+?<5mq5%Y~2|$=11_9>QD&*;? zYcv2HjpBJdbfmBkMGDL5NTF#I0`5YbH|{~08(%}1i`@XTb~eIXITO)5*9m62*0Bh9 z35paNkI=w$r0}d8V%-ANz`7JfMiC0pStAhe4I20y0&agDVg3_g#KS}1Q&0IWgIsq|%p+42G+;{!Ti8EXT~{WS3R2sr(1)WBmSkdwF`VZJvD z8c2MP$Pi7np_h!opO%E*ZH4pjJKy;59pcQp6WH;$i>@gJ1`(j1MO6<%eJ-+X05etQEM&R*WH}~Q!*+twBYJcDM`~Uu5KhKLZ&-1xFpXc^@?uX}-)R2aL$`E=esML*bN8^fJZ@abA)~(v~h$|o!T??Lu+`Cd5zKG3EJ%HQQXZ++vulR@fa(c z(=6q`C9`^h_T%Fd$u)FT?9t*Y>u&Aix<_x07CkXcTo_|dmEh2Gf8BjL zTGqOk(21zk8++qKe3g2y>K*B-?gH66Dur#S#AwVKMThE}Bsl)OH5Esk4J$xc1wt`L zxSI%Th@e`fQuxA}+eVkiBs8b{q&!LA2AoVy zP}BfOUt?<+t7tRXM)$_xlCI4-?b>OM@3y>95PveJc>`M$!yS-n-{B8PeM!55)ab%A zMfhL7ei@D(^r>!1LM-$HeHa>tjMVlNXR?(^X|rYp?ZWg2Q!BB=G^72+Q_J4ZbzRSsWOF!eKb=pd zZJK=5I&=eC39tACEW>mnZDZx>+`2^xzdY{VrEyNWx8cL{w(|F;$9=O8S2^G-YCIhw zN25r`jqTtxVB>FqYfX4!aOP_cVTtC#x^l_}oQ^dBlg*Lmi4i-ye(CrrOX8U|!(C6+ceH~n}Jl8Ugily#WDwej_@jr(` zv3RpkEWT@NYw;lzetfzy*oerY?>=$TKIy*V(PkC*PZ{kKq!Le(K9!}tBxXzkzn5fL zi?2cOKWPQAOV{9_RZjo65o>y6PVED_rjxpx*UapW&6Lsi+wSprugXaQneI z+*T{s0B)zf1ik@y>S#>)FK(a@r=Gu-+e;`XW{ZZR>*ko}Qfq1D_7cA02KrcHev-!S zoxf1sj$KRGnr2}O7;d6QH?ek1hi+BD`08HF0u3G=XnC6YstD~N~s&8X)^@N^r zs=eE)W4;NG+uK+jyCZ-&dg|A(_}a9noF|iDZ&7=5R%8pb|sAmOp*Lf#@~0F zF2Ff(=^=LpUVRWjup17(D7f8lDNSB#w8BGt^qc}M5^e$nlYAPi7<5A403QMPCg5=; zFNasfGt5zZihu zEy(#tfSf0RC%G4a4-@38Vv$z?uaXYOzX?3$i)=s-<_r8E3;blm+AoL7L5{Md^k)Gt zPXBlTpBI2P0#AJ90dg_~{+$8*w+Z-P1>iRVPw8s~p30lblk(*Nek|Z4z>g8|j1jim zfv0%i0^Xl~;(rEsE$|-#uMzkO?*X3Re*zyO!oLbUm5&PbFD{?=1%4KIKR?C$nIL}} z@P7G(mt$i~2RSLgQ~aDh03QZCg})JanmhUP6(itRi1E<3=>mR@7?1R)08i=M0Q_J& z!M|MK-znm!^b`P3ZQy?3DP8_}%YmnK>;-*~E zpLBmvKJZTgPxV248r2&YFYxUG-V}g;6L`|MWqAGiM)J=CPjZX#`s0O{`388ByBY7G zK7dh+woZ6Q0DdCyl%8MV6{lx5@D%S;c*XH967U@X_%*;&I(qQ>%LiU&Bk+`tGkB@I zxq3%>>;nFa0Q}E^r>nSBXuqRG{0{?9=?N9JcPfYHfT#Mp8u-Eb0-l~c5U3wOU)eGN z@Jd{FpH)y{UT-ZfNLnL?W+ZZ8#+J(Rg0+<#1Ci6pHsBKd%B2fZ6K5_jyG4XbU9dC| z1upZ9#N}nVEACoQP+D5BykO1xqKajU?-IbWMI{@G3d(_Ac9-BS^D{0Z(aUh@zV(*e z6}i^Jg32N;w&5tmAm+;~Sr01!OUpKk;~OEmOJcig;f76I9#`ZfEfVsG44IdgQ64CY zoPxD?39$+G0Z?ws%L_JCSPROFHmu#sU;AIOuBfu4v}k%oWkGr6bgQu>X*j-ULm`Ld zM3$_rtST=uLoA9icZE5A!B8+Ur4-SQNFn*l%ZNnm85`D?6_#wc zV_8vUMtONzxk!Y0{ra-Ce!c}ol~ge~1tsM|sT7HM7nWLK)c^%03O|VBi;d6YAad0u zoWl#1X9Vuj&_Hsb7j7uw^)aWsY;93R1+u}1qAX^Xmz4&D<}ySyih5bWx}xj?$|7o- zBrPr2P*_$!ExkbQs`o31yorNW=ZYGs}yLxGJ}nZJxev_RReJ z(xTF})~)$#i|^v_Wozz)Q3x_oF}-9)BBu?nOo9cEvA)}Rm_Ir3gfhj5-yQt?LB6iiKSm?!w$PomP z0&~10XmI|eDl8T|sKXp`NQv`@Y4M=&KsC-Ernh_eBA8|I#3c|Odkj|7Bm#XPSy0B6BmD3A|V5iu_X@X^GI z=5OLSx`7Mib7La*#&yH_Y*>kE0@CN2&oF67k64~B4eL_mS&VaKFwA7+PmH6vCq0sF zOBu;_l|-iwk~bin0XTZYCJYQvnKNdMs#cmBBG23zR4=#7h&B)JanPy!N20F=I+h(6 zpt=}|z8&aF(5VhaqVECvz<1COf_@Qns;`m4_X0gLc3^<&WF-1GK%WMk>Tx8x0p(CR z`SRiCfgXGHzyQ_TNa0t5ejIeF>yhZ&L9d;1`S5!{p9v!rqyvND7Y>#GLC`O*92g*d z7^I8prx*0ox8kx<=*CF&Z$J+#7#JWu8HrA7@_lOt21sWD=_?m7`@%j2o?%*^f?nkW zz*iIe?hxG&0BZtZc>w%o=5YD11;CFIERz4L0QkND_?`fG6~UtPFA0FB1n{!~a6|w+ zCIH@>#_V%{#^=8U?ekXwa3#S){6sGZfHMR5=LEnZ0sLR54wv^X!J_zI4S=5l9CzbT z`W_Ale@_5h5&#zjz$Su4@g)VokpcYb0Qd{@@bK>iz^@W4DzCo;z%c>*5drW8)9~K@F~H*bYA3p=JX!AHwD0R1K?`| z;2V>eeb$A1|MnNmqf!7{MDR4gIU;xhV3PC!iU=}Zbp5RUw+)09amEbA`_p6yazk4RLZ;wz9 zl+WFO{pCuqD*$c)%!=}53!rZWtP|181L$`FW<>PD0D2za{;Z+$SrI^A4A>{4X9dvB zfV)NXxdHSUfIT95d;oni;8qd+#0<{9UC0B1yLJZhFN}LsJ}UsXiSn}$uwF!;2UsV9 zuLG1prhUBBfNdgJ0oW>nznzHmir~)y=ZN5s0GmYc8Nfynd=fA#f?ory6T!JGv#(TC4~c*` zir}fp6xGYc2}AQhs=p5d;6D>A%rlApWB`nf?P2tSfbh2lz}E)wM+Cr{0C;L7v#&&y z?!Vx0#fb8M5-z2`Qa?QXr2+8u1dGxi9{|S$!0(3-m*)$BpCMQzZ%+VxUjV!vhYytA zIict`MD-H~xPQTr{)`9g6Txc0-6Hrd9j}kS*Fuh{{XGcyOHuo6z#$0fXOZCEB)Ag= zS1P#Ya7aRYM+JA22Kpn)mld#oeL(eoX8`;@4$aVXLmmu4K1A`~1GrBFZv*TT!KHwE zL~s${ZV{XZxKjk@0v4y^h?TV;0hci*@6JZ{}OX*(%yubbkkLeGGH}T=+@q()t zT)E)(gAZPLui$nH?g7Dd3vQ#}ZV}uHbC_-P-lN#Lis z*K2|t+K2ly@q>r<=^_O`?ZwTbu#ib}g~fjVXAE;6`BC4rwtJIgqMq4X`F%tUbcca1 zFNAz8_-J4ApFok{2N$Z$`Qb2ih>OER)+T|U_9#CDFX3r#lD=smKkZ322|Of3F5qbo zlD-=t9uMA7!B6|7q+f)m{n5J-AH3YN4?KRqS%iNINI$+qNfrri-nSdjK;V=#+cu6B15;5!f zLzlIsh3j!D>j#TU*Ax{N78On}Ei0_TApn0ofrCyuz~Ld`$okS_yCG)&RCG8yos$kG zZ|Ix^sKDcTKHSh*&TtrqIn1zQAxQ9_xbvLiV;&webnL->Rxk{S(-slZUt7Xg0z9XX z~ZMiychY2v{Ub!1CW5FvAb* zc-rtx4+Y^>d+5}3nEb&L(qY(T!%ts_)94F~!K|8x(JqH3t)T=AV;;=#NN6M%=M z&ScrdIkOWIId)6%`jR!9i`H0iWL{Q?GtYu){)2QnL@z@}g6Gw*Km3-ue{@w`zk;EI z>!%r(ha3GJ5AfnAtAJsszb2Q$(~BX2d-C%ui?&n>0G#~%iPPkz3?PvNP7GIH`T=7D6* z|4tcYrB-|_lwY-BbIFE6$VeB*wFfeaQAP(L1I58u?%=wx?=3ZK{E;vT@x4Al{v z8#sE7m}c@$66e_Vkb~!liE;!-$2*w25=2D;hh}YXVtI!pM~DFOSFUjGP&=zs$kf2| zZjk!I`BWX*Nf13pGWl3DxmfE4?w;?=(A9bFp8dtgcFzR+F$P(^Q@%8(@9!{jhiuk) zDknO)&_wq69GNp6cPDWfyFEXzgEAj<{N-yv1dhYrZznjj)sC0F z|D0g=N*vk!_BR;2N8-phZ-0|Pxj47TDb=l13Vj8TBi9%6m7}WP(f`Fc$E%Ll zkvd1!X+Whql+;h{J9Nz5TkGDwyUMApzNav1T$(LiZeGnk& z4}F~qQnDn+@n+xsuvy3#WtuZv<*24SI&;;IB?f11pJNH@%suT`66Y}MBu5-u!zBM0 zg%oVnR|ZM`;n*6>6}A14;as@5tOu%8eJPyScuv`%VgB+~J9nt+2DG&&D3*McbFG2Oj|+HxT)^w&0$v{% zuoS?415neSUW~6*sSZNTXwUto%rNEPWZt^sPc@Xke0qOQoQJ z3uZdwoue{Vt<%vjmi$y2GN&glCufi=ZZp+YLau6N30X=umtmC(`c%+INEg2v%HFqI~`{x%~6R#pl2J{A$!@A2HpQ@VR}5 zfzj5+qQCxBtIN=TsttwaG}X0I{~;$mP-{UWeV_n+qYwcM64rhS5!#g=?bNzr^pD!9 z8Ets?<88*<0Q43PUAKyNvUn$ncknsEz>$nD5_lw|lXtqwX|g{I`Hng(7@Gb>Y=Zg` zv9IYX1mjXh;E_6_lh2uC=3~{X_NXVRU`}clz`< zSlS&~pZ)~Opgy$%5bE|(3h^V>?q&69-cXzg@c!uf)cY9;{U6n*5=8l*?4Jf8|8n~D z;l&@WPm728xqq{Nsz)p%>r*KxgZg9vAm~#rh4>L`_p`6>r*2q^nX;J zA`s<&QlFlN{LAUnL-;S+AKE_+pfCHs>!0QzmXY--3Y0;8(g6_kDTqS+h_!oJecJQM zV4U~C`=jgAJWl9;SD*BlKgD2G1yO%JeY| z*g4`SeR}Z2 z%juI1ltF!}03hg7F@^XMYxlDHG;n?}&WrH===$_9C)7uZ6F3?FPw7)UqWn+l(_bL} za{API?uYA>cBr5GH}&a8#4_?=X9Q(XpC$ni^hr-4e#F|ntUf*c!C;*G;Qi6{X)!1C ze^j4(&;DoisSH`VoIY6)_Ydu#{(`aU5r#+9(Wb@hGh5!%FAf_=y9a5xfq`xI;+3=BwIOo&Rh#&FUceY(YPxH`HgX2JNU>&x}ZZCjLEi|s$jQkJ`wm5h&Jdrw6n8K+|mCt3_A znCO!+QN7jCN6pbE+=iZ*s1p*ma_fGiO0juM{cNLhtEzreT>WfY{pKv?W_NwLtA2Kz za#L3QrefLVEy~TsGEl8XrOjHux!7K5RaP`ps4d0zO)BL!(@^@`qfWMj9B+v}fi&Bq z+s%fa7Q>mLlv8loW|eaDcLhHa6ZNV$iVD^=0SP`?aGCO?lp_}^nz8h3ua`71hVp9V+pJ$?$>K(A8o%P4yLZ5yd`_QEgKxwyHP31E&G-1gp=N= zc2r*tauNM%i=ht{(SmA<{(!0`+BQqC+}IT?M zm6a@b>dE6#&TEs|_EYw)MpA}M%6QMIC`3A_ zMYGR0Vk$o{AY(({?blpjweJ}<7d@JTm2^N~gK>B#AC>qt3Jol2L+T6B|pueHzHla}0_7TGA9cU08vlQhn) zncbzq%nGW-C~fi_o1#{dpg{(y-c8!`F631EagO#Q6IYlf%~^}~Ec_6z(_Y|&Us|g2 zYL=Nu&CGM#?8)DyW*_8eKV-C}Ce*Knn#@qjuW0FiTT2@!GUIF~ zEP7chbA0EXWE}1c{FFU>D(Ws0%G2=;1%`Ms>CrI$J_IW1`N-kpF}w`W>}09QL-iau{CRJbnMvL^k1^^o$?sV)vARvVysuIUY%jKx<`5OyLXiR z({#qc;+`yoO`O;{iY=^@KQL)uEq>muZE=N-S#)pX=-ShZbj|Gs*hLFv!?Gldq?|E5 zkcw~ZWKrvwXW9GYHp8mk*zC~Bi>_ZJe>^kqynNA^2bp`?ZO^QVhg|NlNoF0zHEn(O zscd1oJ$~krdsJhu3hl(=i>Wr@1~5h@b=!1|T*IW}+UbeX>V0ZPW{Z1Nrvk?6&D)z* zOCPZ8QQ0RIPMnyoVr*fL-_v?a=x@WM)%b2OeAH11zCy9d8`spqJS6krRWcTF8K21W zr*Z20GlSN!8W*sm@CH2Uz7+~s{rlrm#%hz>Ha*&-lCtX0ZhR(G&gj1mkuQ?yYE%cL z%-9zyF=K7D&!*K2Hv(nVZ*EqmSY=80E4FXN(rdqx7FSr;^1@ASS-~o| z8I|RjL0XiRJO~d!n-VLDjjVD@x8ft4avMfAj#_FQO-OfWyXzG@mG2F&tNv^(lui$3 zY)HKcFT+?mD-*`)Xl-rdV2`Ur-KwSn6&_3H0p-h*p=(bh#=^v)d!$k~=-g*Jj6U&f z`->9B0*O>TCPw|scd9Q?Ewa!Jlr6J!(d6nn6fdpzxyR#rd`fcyGfc>%b;}ec?xRE` z22a{!|JB;gsBEMZ++*oHK7N-H@)-%s;6X})wSCwipjas)1`&PoiIoQgAy?~KdU&#l z7?9ueNv}y56Hf-hSU7&{;Sd{_7r&6QrOzP$__I+E#^Z7PgJ&s+r?!0K zJA42W*eIfz*ZtMNNOIt(1mdo`U*gp};W^s8 z>=hIpHbZP23ldZH#N6SDsry+jik4C@X1wYXm{5xOp)2u8QX4+-Jv)mS0@Eo^I z7M$#M%Yx^-eX`&i+}5DrRc=>M@RN)zIKka2D>m-#<|2Lu{oGIBo1wB94xKWr3zN)m zNK2~iXiT*!w{F2U#YQ#1l)zeVhB`I6-5Z6q{5oS0$7YZ0lFjc-n~$YL*Oo?XYy1S8 z09o}`t8$xFwrNYfm93BH3Z=EfDWi6SQHvFKe~xB`?oiZ8tkz?q+6$uB86C7(z-sq^ zY#!Dlv?A^g+hkGxq*ytp7;Ajx99zBB#qIN8N9D^Ph}~?f&sWuN)Yq3|i=eqW9_!qX ze45WZSaHkNVAhJMCbv6b=q)f{Du{LA(E`PrE?Q70W1)xNwvHsMO=#ubaUCN4rY7Y$ zE!)*cO6skv>dUS6%3|dfOMRujzS3PE@#-?|N8I`y+X7h1@hg-WY#ip6w7GFC#(=G% zUY~)c(30qN`XyLl&E11_WlpS+5lcOGfwnX+S#;5*r4op~lbd+Q(0ui73C)eWVxsyB z6wB-ENnIT&t!eX7Am6mlJDrx&0I;L+#bD&Lelya8E-g-3-dw%FxUps%mtso1<0-~Q**MRhp~)7V8tn~K((>DoDV?fQZZcd)nyl7h1Q zt#oW0hn<#yuj_Fo-HaL2lctLP-JxVdWm)Nl5^Gsy(S}Nv1TQNoC0S|LrCob1yFArw zF4(Y@wU&XAzhN-DsI;tn>&o&H!0XF4+(E+d&jIU7?pU|Jte_J4eN4qQP{vrpG3kG_#*3W3<=RY@(1Nh*t#er)vPq8~T?w9=1AW0S-{jl_7q#qOg6=QnM%nn`18){j`yczNr)#k(wn=N%#hqV?zZv3Q8(C^Ku ztC<}9i#W?8uBMvV!M}>L?(J@>nG&2IXYw7%;~KqjE^pkf>bPca+#YY7+Z?yg z8@JyZ_oO+l)f;!f8`oxzJLrw`c;gP4<2t=++0;g9M3>Rk9(RZXQuP38;u?60fdf|0 zQ14@dd%)X(w0I~j&o-w1HF(9ft6OZZ7~9(8kcFqZgWpu!uRYK{tHTuhNRDEL`evX{ znCSUsZkBmh=$aN zhMI_m_J{`Q_=eQ+4K?E%+Q&CYBWr7-x{Td55USgZ4$iHdp?<^|{MSdNtYQuSXHyja zyMKdW;j!F8!QCq=O-lOnDK_{N#lF$_-C$A{yBBX@f)mFyyBm9Y&YxI);$-IsJx5n} z^|ZfwCNt)uMf;^&yR=~K@9(NuIO*DoMc+Mh+ogmfh_>vIECeq#{!U2~I<;Hb5#p7>h?y)D$VI9eNs#7N7`X_8A&D7k>?|L2 z*NndA6&nmoq=%_JtrE#rnenC^btSXPt&TUZ*Xd;Z?AxE;U6kKNl;7XrruUkqui5nH%$mrI|ZKlbl8m>-0G4gi`M=F-8 zg6=|V-s>sVXPLuZ2tfzX{)Ym#Zb|2C^*&?piJjG9nFViC=dlIysf==zxaL2o@oM=P zwOZHa^Qalu*eqj?$yXCJgFywpH6bTVb-2O&Of9Q#G+zgM*|k2Z*xTZ4sY4Z;RA)IV zD`{(q2!fSwU5#HG%lk76b~DKhVU=w$Mvyin1sPSXj&yc{D^@l}Ef4LK#_F>s8hfpZ zr)`RkkUN;s#n#l;j*wr(yS<~lnmNl4*c4ObDK8s!-iB%~l92ORzhXU%UH7IcHhX2^ z@y0cl_!yO<$fT{FuAU>mgY0M5`K#$UZIx&A@8vKp^?Hb`dx|}(zh*kG2gtzY?$H~` zl0_jYvakBOL$DGaYLNl8E?e^I84vz&clkJR(d-Ojiz?Pn#EGpc5Xl|VEMZm{klP` zI(eM^*{RfAsd?<>TdZpN^|5*h+pc18^BSIxki}FsS-OiaF>gttIa3Q+TXajv5=G87 zcF9l+Y6FYq6K{I8rBNS-Cg9cgr6O0VF6QD(wyz|!kU{dg{>6FSC2?ao>pA zy0OmEE_-~j;^wgQYN-dtOR^*|ie4L|Pe|H>9_+R7>+63x*_5fiXR_RDQ6H)vKbsA^ zlYs$~!tplPJu%iv^c%L^ED6~eX;^NukF9yAh`mS9tNoRF`-a`jOQT|^R?B5(`E(x$ ztI+)&Wut0VAga00LgT%DE!>i0U)4O>gpTq~z0JUEHAi@Yirf*p${t%=jRdtDU&gE( z<*FXXsO8Ty#?*wKcY0VB9r{?5+ig2zV7E3c6vk;!sZd{T`J=5x7HYFe)Mnj2SYTda zgB^!!VU9r-PEC6>nzkh z+v{bZvpW-^>*<><$_N@%N>E~7yS38yLms?EYDTY2i!9{V1iKQU$cSXrjg;TVD8Dey zJX3NFmm)q7)K!g@^Wz06CX|iIo29~lj9!pcn^uOTjo(jAYQLAM{HtldBogs^$E$6M zL)@AV?Z8TXKWxObs4Sdnb7f=Uqow`}<9L>{r!PM_z1?3G>FAU(c027W{;1sFK`i)N+pEHUQ{!O|ZhU8!f?T zUjbVoiqonW?)0tpUKOWPzr#GDl%r*sY#1dQqop&GWHW`4eom6IB?RhdWEw~JQu9bq zK?)NQC+U@1Mti5J|By6W)ga;iH}W<`Oas*&%CumV1>+0ZGVPJV#)r-9gNi1oR>N$m zLIQ)v$Eft}(1?XT~S7T;szu0dwC5i9}mq#pl3)yT4)=!E7(VI$y=whxW%>Y8uRtG>m#CbTNC3xLW7w{ zrPdMrB$e7<(RP^UYOba6=2~i0_g(902hYKFrcrNDqjNUcWItD|gF<_xFu|lt!+>aF zRf?_F(LbNntLv2N(P_WZ9>Ld>lx9eupeu3zRVq{+hx(MNu6+(V2kRePRCWC!=+C33 z@1q8Mx}Ca?Og(k+w@>%+qyBg(>h)jNdDLrK(5nYeI{Sb`z3Eg)oUSp{z6OP)w{KT{ zU8u9)Zj%Me*B)}OLU|sxOsFZ4r6$=WeGgQt?~c(>F;QutTdGe&LDX3FXeRAh#Nbu8 zOALv+^9_v73uLy<6jBu%+C-q%5?9G6VMeaiKuZ3})a zDVWMM_R88d+;F{5ayZ_bkRw$o)`zu9Jeeq}c_^v^DuPTvz; zL)#BqyWDV4rbE{nqakzmU1lp<x9;ids!bMxT|G{mUtJQ!IX(d{8)!qVk1gqKQ^ zbEye?g30vTtuZ!8zE=KxYf(d;2L^zCuj>KxxEk6H=bi$VVXm~Lf1@pZDZSE`uC%2q zZRy7tm-?@?r7Ppom2v4und9|cX-iky(&gLI8<_3+*Go8A{sHTyoHdP%+-wMu)iin7$Z(Yk5r2!#F8)=g4wWz;*3+wHJI(NdJw0^}OeF~UH&f|89u;N+EjKRXL z`Z;b-D4bg|74Yk)ZCJA#Z?c|_(CwCbvaV;(WBsR+nZ{eX#u#LiZ5B_aB$8Q=J#%5P z6r(8_S}Z+<^E*EwL3vlJ*#u?$|LeNxN}CGYi}(R;>W8eKuC%EuZ3<(~m2ryp_kKW| z`XTG6D{bmZo4V4bggx^g(58OKdg@A>`hT)bZDjd-MiVuLm7MThR0BV)rYy z(GP}n>OQcA+^6khzp-h1wEC9O)nne$WqGfu9yc(yAttYS{G;J*EkCO^yf(hae3U!X zEW$wdF4`t+I3vd zR{_q%OJ}}*IbR9!-U^&QUJ2yW9q7crQN&Mpx_6)ArSDqA@!kMDX8;HCeo_NTubc#8KGy#91jy!F7-f$=H4I=o!IfNut#;7{;UJbwIs zK@L@vUk+V{|0jVz40tjBE5K9wCjl=`{|VqJeb)g`>GI2`ugoYvWIuqy`SITZPkc*& z_s2{1HCE2YR|LGj94I{#fhYMDBKgFh1U&KKNO+ihx?+*!|2#ncZNPKo93cNr;7R@; z0_58Se3uAM>DdiD)ypa1{q;il-wFI*1n_qV{A%ctnEwRuq<<5Er?X!wAIjHz0zch{ z@8>7{H^5WAQh^^VH|TRH+6v)U1mJ;U$j*8;(t|d+ZaiSor?7N|_(J;1bwj~=&Ny^M zQDy#j7>7=;DlHYhgC!|}*UpP1FD-(o)T(vs@MW$DJ$UK&*D=>{xi!6gMOB-!Kwh6lfq^9ACazH!pANS)`rZ_4ZuZi44n&@4Of5rx-t| zpnNpzOV$-tmXsDv7g;2yGV!Y@7gS^ddt@cOBm&aXOORp&XYQIJ5-DXl6$!^ALh?l; z*mMsh^18}lc|C%1h+`Sl*5NF}k~YZ0V+Zx|QaR8ZksQ*a5qZRN{7UCf7cX6e9f^5( zJbvcE_;?vy)R$^5U#kJCI|6b>BK4d@&yQ`>+5*vHJIe%9|BnYfHUC)Q+{SwcaovFL z#XFgi4&vx@vQoTadEFQX$kvV+$6)NJM%W-m0t)}Qfa7j-7RB2N+)E&f!`d*u7=aUq zZ3S*I;t})FM|FX?9AqpI=f;>6i0j8dz9>MR36q&XoNMf*I3EVTKt38D>A9Tk>R$K2 zfQ1+WY**8KjsBU%&@wQ<)rp@D9MM+c)q%#vw%kRHAoZLnJxz1^_$DnX>R6u{POhup!fgw^7Ky7 z*{22usD4L^zYp}B*2~jX2xoit^7J^+TMvv({}(2Ck(gTU7u<&gcc$P@6B^!)J<{$0Ejj}26`f5A)fJOcZ5{&)zV zhL_^$R`T+HBDhw;RSNDmSg=$4AH$`1{tB1s=U0lMc)aNU%YdhNmcc%qKOVw=ikITK zA1=vR0~c%i5VHW!6yR}i(Z__)9rnaGPH<`6NOE6?i{>3fcEpHp9bDp*3hqU;U4p%E ziJ$fwi0@YjMEGTJ2|ocY;ooC;{9?F-H^W|?KiyCrTr0uZh6`B^e*AI&_De4HkL2RB zZ_fRnwp+IX=_0#vl-8HYk9?9XorB~@S&&Vf)u3zf(s(Nco%}S;W(as1H$M>kK2&P8 z;HPnSs=!a(&6X-R1`Ku#6xsH z5834L`-j_U6V17~i8x2a0%(|FDepuXMIdJKhYdgvg5u>qnF1S@8ZLd`YXofg+Jlx8;sgxAfyo@kCQ9cpJd$LFYB8`2 zM&`Z-pYO8^mM}X>up?%Hu#V{ z|MPt|#(a>$#9>bmGQ{Eh;mQ3z8)H7CZz1>^Qoc)u@Gs&OyyX1+h1ofamoDca^r^}G z9_j0lA$~Aq4n9c7ciJgSf{a3N`yhj=Y~Bt0|C7KwScBhZr)&>ov>`w`>SHhvU`$1d z;c(An{8F(6+9|UlJ`^Lf+{7>@bc_fyc-I8Feyj(1nWQTiYA*W}LXNmT{fvG)C3}GA zBjoMQyja+Hvj0=kw38+mP4`}h;Y^#}S@(9+?$;2VHsf`&-lMJE4S%fEf@C;zbxq5qI!ErlrgWvwk+I*I zaXiaWwQFj>BV!Nlvu#=~GdglTP0R3m$XTUpS^?fCn^xktwJBYO*xQ=Y@O#ji!8XYm z-V9H|+m0Pwj;d~4JnyUuJ2xreCHs!!u)%a%TSs@Toc$0#gBG25kK-TOr@wN%rG2{7 zk=^TfXgiXoefp#$&u8250rLVCtG1TbZz#?twbIc6D`gU|Gq*!V-b_nCj2#Y$UFh{lbzv#?3klaI7q;}YnchqX{Ka$+9 zz2B4kHD&Mqj(c*?*XEw%6I>UL1mBbU5u5v=fKULzmVPWiUm{oRR|0U3fF1!j3BbN% z7xL`IJ$MPI*F7*_wZr4gJ0z5wv#M3AOIP%3b!r9dIgRethAtZIb5=bm#%c+x1$Ms} zJGx&RsvhmE+9yV838}SvO)}1`lf7M9wMVG5O0%O=`*a2ju=S!0U<*vElaJHt7LC(M zzH;UwoIDuO1nXq5Xq2l1Q3|3|=gjB>Td|U9wP5i2Rn0n8q{;`FH0OJQ!*MVtDL#|sTZ8k zy?I7w#=$1JvFUaR*K*%-W_LHKBOKX2SzebTuUGqY70aO#9NDL3Rb2^h^987VULD<# zHQ>xX4PQjVV)%MFpURo-<2+jX5vkoHl|58Rt+oBzsxBv|matBzmt=b+*=P=7lB#`B za!JO1N!62*j8;i@noxtSAq3mE9V-8(3FtzWQ35X`%`?4}X^T!>%bIT@vIrRRe7)^->uQ?{Xq znCe5+o%`)Xa&{==xz2r+v&sOQcpG4skPD-0cmbXJI_=c#PNywp2Kvd2)38h_v=wrY z%ZxtszXMhJmCKwNrw4S%?KuP(dqf_4=OHIzKMj6PYOTDBwX z=BhuRlW|dnX7v0W^>%2`q97j$KmORyZ%4&ILF`}2U!Y-1y9k|n7w5HqDc3IQcI2Mt za&Rk3)KlkaGJV5YRP52-OJ+2wo4+1ID-jbuch*!VQdasAMZ(+89eO@0?w9i88>lj@ zT(NARDr}%iH&6wgfswQR0o152!v|gZd!7w>$*`p*|D)=)%#^D0+y9tS)vImF=hRQ% zv;c7*#|U`u86cV#{L=wjXI1@8ng4QPqk?gGMoO+Uz$Hl$_Wr8d(MTS>8-hhk~f(+f?^V}rEox0%Ws@I%V$DMfw z#|ac$^0z3K9ciM}^7`Ogx-w^lxbz%v!0IJQ1piRN_LI>4naN*N9W|jVk!6RW8-`k- zVp1}CwRI9G_SwBC!i3MMcpF>LWe-OE=8ggw#mp0xTR)eMgn?nn;q=qD6un~33YY~P zs!&Q2s&p`usMJS zEVXE=+}tqK%j;CZ7|xe#{xwv=|8l%FSj1%2vzyDtxv@xU!sp4~Zol*FqtIzC;m*9{ zb#FT|Xq3PET^K5L92p@$$Otl{Ucr^>P%Sl31{xM*-cVuc((De?y^Q%+)*I8mcLj;;IZ6)s)BV%;=J3ggL9aWmW1F^zC&wBKsI(lHb%e z-buxA7(YX4_P5_f$TEyZ-W!8fD0DTsddHhzyy>VqfanYdJ$>EN=z#q zRXtyvbX4_Gi>1j!`GBL!XF~V$XNVsds^z-RY2;(H3lBqW9ADYJ-|}!)XVU^1<`auM z>W-l-9XpO|?{z_!Fr!NLYMW+}7o8ercTb}u$~)~K-;OZMuM%DwO1;bVUvy98)R$pJ zFu6m!sK@b|{fIw?FCE$En>Naj@x>RCzrb+tmbU32($YpLoQhdtoBdPC)PFki4xr4O z;8kP1(P0c!q0`3*^Ez6iBLj1gerFzf%DA^E-p?}*NUDMzUnTEotD14{4i`6st7X|L zgiFTQfN-bKqrQXj0RFspo!RJV<9fkfIhVp~pHB}S;Q4%FKJD|EO{{zy!Fzy4)4m1% zyk5Ikn*7Q3qiM2SbxPjB?bWF04kXo#c|h{(+PZI%m2;~}uK%&`@F|@cz2)%&0s+vw zU;edwR8?==cl0ooS2;8KsDD`HHC27(7w2;BIKBYNlnM1n{)e`18bv6lN+(6#|M!gj z_Ct&OHfAZ1e?8KO3gqrtly`7CUB3FJ1bWWEb9=zwr{$y=DHX4ve95Y5KPC+ro9c+}Y~rMzk~)7*p`3r>WWO&p zr8@J%nr?&XRn@YlJQ|J$BUrg~NlsrIZbr8s;>2zei|zexv6v)cy3C1&P3e(E=M9OD z6pQwKpJNN)$&l>7pjngQ=BGQT0inUcUB$g9qwF3`9AARY zqEW9p3Pe#a5NMsNP7&1y;4Fai1fV!?#q4s`D|kDwIF@MZ?&D;GUDtda*0q=owj+W! zxJf2;3$FunqKQ)(?amG`gVRQwXvgjT>7e6q-%^-1pqXY~HyCp9bIa~Iv`)?rJL^U$ zUV=!UCUX4pWqlERKr*pKt%_@HlnTt|AjuWZ3)!>^Ipn6myrfMx6LA8Uj$7Ih8{XSH z`Shq`k)C!k8kQZ#B?$oxYENK@Kj>ogg#JRpQ zQ)=!f=i>82JsiyRW7mS7SP$ng#x!zS&&MVX{sG~{c2#`X;HG_&)PKXS%F`~= zRrw6HbH%R86}u|``|PUd+tF4Bw5CYrm|~62R@8A`M~EA6RFq{3DmLkLxc&8iiM^F{ zGO$ASDLTjk%Yo|oyE>A(J5pe8r8jM^3pXXgga>c^omelrL!HwFpR?SD8Asd)efw7hEu>T@KE|NSl?v}_)t)F~~+is1TbDV9F zk6{V~wsKI3-HLZ|v}Y_DvJ8T_+%R+FlbB!ur?Vp&_e{bFjwfwC^A&F8)oJ<|9ddEO z3Zo}vKLv(qF6NL)luwx_y-B__Lysi#$?9ZZ$GlG1YB8rAkX!93!=(!z z$@M;O6qAn2FJToW8Mbn83HT+3W|nBl$c|C_u|-2>Vmz9U5$T{k5!_&k>))RU*_ptM z&MEEu<-4S%%Kt^ysW`I~6}a)3Zavq}`5CHmMYLoa6{1XiDL-SKx> z*4TzD*pypf4=d?XBTZ+jquUD%Z?=%3u9MZ=Wyml`(h_p0CA!ONATwKt%RJ$z#3Qr8 zwuq~~B2Kvt=0$Av+n5W;SB#-s!uG`=4X_|aIl?{9eJym6@)^l0`$kVaY~;*dC9Ck% zZ*`GLsZGVo?S7L|f`us;7&uc?&BVFgV^3ikwjui}Wd#hHjAWc^FD#3ZNtBab&YD#< z-D2H0Xb;6As}T$eFhR$?iixmrPqxoy>uzNBcol0xZ8LgIMuk-o*>JVwRg3IYoF`&E z`)f%ORv|dY((~UI;@;01Ry|g+*Lb!3NGVDsFD0rixXs~re|>qhp7cVz|d@KWV%9a zsSy*$NV1O>z<2<|*sht}(EX@dI?9%q(V!}RK*~r@GqzQA_~L*KE;3IV#Uz_vSm-wn z(DXvjsOH$2lFWy1cBD__q>|*QMEcM_^qNp+Dx2hIJ{A^w^)(Y+H06?3)A82aXwQOJ zMs>4omv548zq}@QD#PkL=HHbwCK9rDWhlemb5)FV?=7Kf#S@Sy?Ji|4_p;4WeWp$N z&VBXr|4(cKT(s$8VhTI6LPJfHY6~7!Qm(#TaOd8Ki{<$}5{WK`@t_zf2j^{WRVZV@ zQ5`{>Oa<Tn(D=t#_-x%{Qd84L7@t7tMBFyLEl;!X~wK$1a#-PS~w3(r-KE#{4zSB>Rt7jSeW zW9szg5Kd7{90nEx!gKMd4#h&z;vDgph3{^a4HL3#%kqs#14ObM3zGV?J2W;9qNLHa z_mkf_F5&Lr=U~cjX7gM|>gGZG>J$IfS)~-Gc1)x^_~nT>VXY=6e6PjeZhZYncjLPX z<^PSl@%PW5EAg+~hyVZPefZhXtM9uHznM+u?!)g-e^L4$zYG8SZolU)wHIB1kM!d@ z`~IxztJBJXcw6yOmZc_f4c$Xt@{>uwU3+as!rIX(zlyB0O)R;wuIZJhUYXqV zWLMLMT{bE6pSqj;0J@Q}@>{w4HmS|a<6Obl)LoeBma6yHjAs{)qWiYhYvrt}hWnV!dwOx{m&8Gj-P;AwQpB^IGjexZU;d{lQP^7R@=7YE;j$nPs?$`e7M&?X)Y% zTlFxmm0ru@3f^Dp)N@p8SWy2iC2B9D2+^-*af$eBT!>N|T4S-k*KU5D{e_WCToY(HuJP*uT^H~sfpO5>x;K1 z1cfXA$b@%Q8=?+KR(C5J%-4Bvb9q!-wO&1^$9tX4JF5EE(OuQI$7tsES{r0~Ura6N zCXL0|oAZrCZ;0Dt*UXW>&nW6Odv(8;A29{BPPu=*KHODvz~&B`(kwk-^921Nv|Cye z-dkiE4KoO;EF(;7V4e_(&FZg@9j zPL?`CJ!f7hrPrGFoC^h+b{|p|9eUoH_B?_1L2&kc0P6<9IRw5afbsSRmeKVO%JKHU*xkeswaTD&q zxtHmam>cTV+fs0sLMF3%hN4?0y#d7C(%bta1#O_*B)JZ9MlVwQDGJwkPhz&2bYDUg zZUi-lGQT<7al3I$d9?vodtVz`*nL~@mKJ4gb!=kaw4j5wQPDQw-_;d%zl|$)lB8~> z+&nq4??e1wv|eHjnE>Lf!9bF$xj@~r_PItragCI?{SH2H8BDLCQ%*1H|4|9l$vFm@ zjekIYG(N4Pu_Ne)nD92~MVocpV2(W#xg0llOH~(b{ZtajK@FFKE|BO>(@^GbJ_OQ* z4+iSt1I=gm$R9A5)rT~ARJh5!wyo3s2VCo#BlpCcXS~cNe{JlRd>Qi2ocf>63_lR` zTB7M^*Y9zKmrLd%Pc5OaURAtbhFEjP(gm<;iS;lM_7Pz|+moJv(oSUz9nmQ_F(J#D z_D7OCLb4a)CUkpPknAc`WV*c4ThbZyIWwOEFyHHs{?QPtdb5;kELMHg}{XsM_{o78U;ny5rTWWA1Q)&`ktLx(!$Fr?YbA z)~lsb+|6IcN8K}aid5DSBH044qf#!5s(DNO(b6{O%1~z+2B&QD&gEXs-_R*qkvd_1P@-kGN3mX}}Gc&qkF_9||> zXN&5owP3iYTYUr!AH}q3W}8k}UT)EPt6C+;6t@MtcnOn2ISDsU6eP5a5hMivf|rmG z%1J1mC`i~iR*rkHWwDz|s{-uRkxCi}Dnx61!^pP~UV_6P!Rl7xG!p7ics zGri{AD*LqhJo(?eimb@>$rtgX)lHmv0RfoswJfd*GX_uKu4VNt4i~ zO-c)-kd_n>3ZkZ^LJI|x{-X%hsuXd;O!+6wY71?lAeARgLlZ+>bl|#)?}EdvdtWx{ z28>O8P1*|Ok65tdt$r1#!)&pqedd(Zvz zJh|r{b)lJ;56g}#fVF)I?pDTh9nfjApRn!tNR5I2P7fa_H~mVk$L;b4(Z_+Wxr@7w zT@+92+P%uLoe0>c#3-Kej#DgRYbrf-;*S35jSBHn_m*g-P5D~%>{vs#zg)h?7pTms zRs7OmI@8oen&KKJ*zU|W@szBznmZM<7jl$VeYZVYAW@m zT$9ZgFHgj=&YxQ2TcT~0Qy;IHR=v}T*pQ)`X^WmkOmW;CQJ&HUHk!zaqeIitZb=!h z*4igwP0I1&qICOKw59*IXKYi7N(@H~8SydB)FpmB#@B4W@&TW6mC3lWTsci4~jUTeZMq-t^UOHj2Gd%4Pz zXc)>(dXef97)1lW1>Cv&#?1wHzhzB&uC||huj-L@)kah4!#)+bM`RNBa=8CE(w-GC zJ4&+RrxfveZI-De+LGeKobimJCEAgMn7mt&q4aSw{q|b5&l)+#G}n*G`VYS2vb3U- zj@r#pZIkU)&j!r(JED}=r~J+rUCI5?+G}stoW;)T$F1t z+3e%cE2raq^P`Lcf0L7oeBLPgoubq1uqp4@jA?k>&>ay|&*(17Mq+pIJyQ|ya~7A# zhbavUV>f5tBydW#+9wFyC#_2^3PMbdR{fr7i{1!5x236jblY2!dEbShq%U=H>`xXg z1ck{7>!RoDXDgK>eiE@{i{3dKL z8@0874apH>9@^R#^+d{ic9S;QM%=5M*tt(rsw=&B^9=RA8*)+>NIJqSx|c=Y3NuEXQkNQlFs9@y`@s2 zqJ7@LZnEm3HD#rxH!fRMQL?0T`SpsAPwOgaA2`H7^MNj+C3-GmsY4e1yf<@=uO+(0 z;0;)^HPbZfP&Y-hIfBz#R+{C*HV?ZPQCF*=g(s;2z61O!es~*7=qysc&}i#H3VbO}AljEZ1R0PSF2gKR>bE`eY!Z z_JK8)`cbuuIQgQrymIrXe^YD7u|;Idh)2^F-WJ9E;Xc83cC%4S?h+=|+9JE|Eehxx zP5UAeHSt%>iVbG9!}_FU&XY;H+DB{6ZT_MWxvMQkOd8o>I>$8Ehf%P^+r?uP=v)qT zc7C(AZE{QVJhX~$J8#!!QMc=8hzSNZz%@Uo0p5}_(`c4O*u1tKH*)stu~Iiekp>q?t(A5`p?_R~MpUd8pjk(;S<>ING_Dnc>E>CM z?cS(z+l~H+=eZHRvPJDk+~kjVi5nrv7mbNQE4`qA24@svqI4=tFkvYd=?bPC;buM$ zNc<1GP>Yw}8F6gLd)$O3Iao}k{aAaPW~+W%#O6M^_+un7ny)gQcHTuS>ou{l7 z@>$jP=$L&O`@5}A**!78ncjKc`n)|#yDzKrV%I5qbk68rUSF#Jib%C!LgyZ&_(_UC zH4;_E{iUT`5&S*`l-$jcQ(~jdp6nR-oHFTfo#v2XKNT-8Rb%ej8hM-Pj5Ps|N!CPb zd3Mw9H1lJfI=_PMSS!LhC;NJ}4HNf%_S^`s1io>&qqD3$s%(Sf#A}a9474wJm1)0|oZ)H`xSwK!3gj7U_aMVlR~`Pq+Seo>@)mL@71I;KM04r+ve zug&!3q|Y@SPfR}`k-FrKIUz-_cw>g<39I=m!yI9?4S#Eo%d<_|aYL~DTV`I|%td`} zTGBNcWVE;HoYq~oksbEQb=Vr|&M+p$Cd1=6oZDwV9@(sJeIGIHX7;zWGN&sN-duVk zTPL@SjZj5p!=sTB&*6#A-15NnZIf;3hFF|U?z3B>n#*&~Q_1`r*p6K{C!lWa2XxkM zF?Z7L#Hyg3KANJ#a;suQXYJ9U1=zn|Y;%mwUBhGl{-&;tzmA-I=!JV~SNW8_*aP|F zM&7Yfu_M-=|7fiJZO&q9us8S}{n7o7dt^WGDRtvV4JplSiuLEKMkym7zyu!YpYlOsNBDw8~<20XS&hr8k?!xlBARU z)F_5e1*7?-hnBSZ?|~PNq&-GmU|~dY`0a9jdB09*Dmqx zcxL=%;VTgBa*e$OE@(Es-KJIiTvf-77DMys4LM!)HTu+Yy1TaiMs=>~p}_Fw=Fz8; zu~R-EgL9CE>-QI_Bler)ji3325xw$p_xs~y1&4$Q3iB83`UHLNX709<2&rDHZt8qy z_~uay$J~fDDqyP>Xbn%n_g>}rp#27W+{M6?mdMN2Bj$)lnwE2RACBpj=q?4GOpdO- zr8CWM=~dmUEK-|Gju<2Pl+uKPWHr3ZOjPV>TE5U>Je{^bn}f@Zg$yCe0)&->AkR{~ z{-kAeZRwGAEtR^G%%M~PmD0P6@WU}NcGXG_nmuGpix1rg=0b?Ohv=#%j-E@V;t!5sUh_V%IKcJvfPqgI z@aR6Udk_vqxJQCh9^ui4Y&~IT%(-C?``} z;xJ(TI+%F)T~s0C*|3etfJ|Y)1*?{?3rmu9>ijaYTnz(~Nv^b^zdzM<;|l4LrP8wd zDISIxZVUW3+_}_mH@Z~3sAq5k{^bjh2HFX|a$k6APGMM*8u7ltt;qNcG~-n)Lhaa( z)qe|;w8a}}Nm1ZcODn6^ET^UnPY<+ZIF!*E+?o=5u{pzW!`qW;5MIT+P?ZMsFbqO^ z9RB&AzBeeGb{7Uo_}x2{{xJ~3VFD)FeVDMrVP*`xIT(lGFfRuC$5-Leyh@+Hbbn6n zfxbTCd96EHU~0-Kj`sDDJpK7$_uMQ3xDNRw+qLpH0z9t0uaD%sR{nN?=bz~7Bbod2 zr8{Z9r{i|gy(9SS*nxT#A>9_1o{l)?r0CIr`@`U}tIEBD2@-Qv^eHKP5qFSuhT;D^ z;F#m0e++ng82rJj(qChO#k3jmGbzlK!VfXg68x740g8T93hzfq|IJbuhY;0>zKA~* zcHs|xDUYti9U@H<-+R!fr-pDlQ(@~%^=?AH7b1N_Sb8V!0twH5Uo|+t6zTB%lep6( zJROBJ*)$XVkEq{~Zj|^_`h^H?ry!+i&i^ga-mvsffJ5yr0PYNfKX6sKdyw{p<(pBC z+W98H8^Yj3$BP(<{Xp55Ndc{Obu0eeHs9)f5LMvNMN# z;{6%u*E}hXfWc6deP}HW#m9ujX@3xc|65r6dtq_P58)&u5{mB*gSUspE5hO#VfcgY zRG>+h3r&2|8rh%5)Hn!vVBVI%gIAhCxZ!gzcOTZe|Dn4q1~v=Q?m^@_uo!V+OBd}k z!qc>rg{QIZvC0lw7zR~iU=d=KNHsxE@cEnXe@LG?HN!}sZ@K?r&GL$+C8f*5uYkDL z{SOM7OO0ax(@FemeOl9i0z3*yzv&CrWuL$1{s%b*1eK>j(w&a;G*oiX{SQl4RW2=C zwwzI|82m{W9iI)wufvo=6cir7!O%;DT5~h4Bjc>hoVHapD1IMGF zLCsbkpkW0C+?BOC!%PENBivU;79xThH2v6 zwzOw1!k0coi@ww^)IV4|{^n1}Zcc-{7GOLCo2E;k;a;pEOQ#PJg|$>&7ed(HuH1$2 z?z@6**u>jgVbSqYD6)@5*o6pxAlzHH%JJ^m8DtnVHv?8d?z_~1x5+lBuR?R@9eow) zMSbhidu)s>!TKuj*U(p?>sx2&Tc-=IVDyYIt#Z%Rn2%qw9RCu9?wP-RfW5l8SG?m08Gc4CXH=h3hE}Y3qy_VfGpW?81g4 z2BTcqj=6`pzP7(}g$xp}04MJ)ZQcdfsUa7%&I_Om>nXxt7 zjlX)=Yz+XYSduH?HfLye_Xf_%(+0qdG= zbl*CTkpxSf`_2^Y?hE`UL~xwz?v#O6582(l!0JdUc|u!9msPP_IW(|~eD8{@1#M@a zjvGL})aG@%E)D6_IuA0Gc$kzu_5y2gYPa7a=256-WTVmO!JaOkP{?OwqtSj$NaqzE zhZzdO6dU(?e2lZTP;3!c6zpP2v|GH(Q2;b*HOD+sD6*ELfL>w|@%OwuQY6w<& zi#r=F+8KC9CjTB<^mz;f*GV_Kumj`3T@xR8kBtTxv)|dbmo6wMx+Az6q+AzzPEgIW z4X)RZ_h@(DYII#W{t-^X9?~P++VJaTqx0kGyi|)89_*8!hwA!7n zlfg$BGYxBVsTCIls~Au;$RYzV>V7s3L;7H##;sDP_BlS+*3HC<;9j71e_!Lly&i=c z@NpG)-x<6~q(YrB5-7NRgu3`?dWFf@Ex0SFVJMipIa<3jAP;oOLH-8{SRU>hK;H&**TLXUK-~E>1A^WU zxW2WTzP0M2zP0JWM;Wfsou3X9ZJ@xO*zF)Q77^D|=ycTt@BV?JNV*hYuZG&cstX3x z-FF1%vC<}7o{$$<-YXk0P?qK(SMS72E_SWQ?!)rJ^Dv9_EOy=%93~3LA7r&tiK)yl zHnxYe{sG^&ms+52FEt2^HHmZZ6wa8VzkBMi)QB~gZo;98zsNG##J?T+F5J=Z$T&=O zG(QG?$aLqAqYCDypt9iY$#aq|Dj2ahKH{|pdoNS_i#03?{(zCB8csp&LiNE6g!=S` z>XRq(mFhE1OtJdl4uyQ0>l3MOq;~IHi`jmyp>M4&s9~sRecY7;u?$y>b&={Xi4`QV zYPw*^+FcZU?GiPE36}w6rG7pz;kz#3rkzjR#aGGqEW_6E2UvUmSWLkJAMH(*g?y7q zzCjHxwh5Y@$*`BW2N$!FMqGJ=A&e%%H7UoxrV(Bp?=~Arf%0g5bQkK_5{WA$SmRzo zS*(_O&m)AzIU5~l`l4X8REy6a$-w;-i+jDU&H?%PFR6J6?c5hsSy6lj_>&08d~@S5 z#$Er{aPI|oHkEWU8jmv?CRlcJk4zW2d;bFe6<6~w9^j7_g$S+#ML{zI!o)ZjyqQHq zlL`&^q6I;tSm-589oz@7zs0zY7D28{wpN-^*c5}@fls)drV0B`+E-=&4R)G8Qvctx z(Y;OLjH7hXL;D%~_{W`B|eMTffVgLPiAp^Hy~sok+1 z(Wl5jERm~FtJb2{oD$#IwLvM1-c_I3w-_To<)NPAC=}SDtkM6Wa zpF;~HX(ju$ZXmG8IYhY8y$t8K7vUsY+#FG&U<4%Y*zx|qju%_qL{PR7}0zf+|QZF?iI$o zAHoV%h!M!*_-Kw~2;7)6a}O+7`I&Y0jHaB-qXUwkjrkY^buk}(Tk)eg)3@7aP{Z10 z!Q%LZZ!-!;Ep#!xoE9Rz_YGlMvtYfurDZzom)lxqw6nfLC+@Ljbl5W+a$wzz{+b?y z*wx|oyr!7mBCUBA&fe9@r*jI_B5Qk2W;@Jsb5PBh9n>{h+ykbVOFGqB9K5u~Trz1d zAkrT5p`a~oQhsXEzKf)ZEOys~A{B@T+G<>PeTNp+M`OMVGhR;nV0+A2>avEMj3#uq z+}y!B{brYJMUQM%9`-bG4 z$c*=`o_91r8iA7$fRn>=v^_gmxR3c;}O%(%kX>*mdxr}$O= z;`54mLx0LW+AKV`a5Ct!kHFu27(WLGA6ECL-b<`ZDz z8N=n`*xneKZKsB_+fwp4eOsEWC}s<11m@O>Dn9~Fc`9CRrO5ltKGZatw>>JPdRIPX zOo_-ha^A-IYJul`cTEI}&HSr0^(^jt+qj%xkFhE)_FIRZ*ydGOlgH5A-QgbvC$lZd z3$%%EK6NV>L<$-sSM+N&m+(epZ7h4wX#T?zE4^ED zl7gz-r&?`PRbvDSstwRxmiwS7ih#b@X78Wu)Q+2S3uH~YTaK&$)3i*M6v+uB9KIav zHZPioGmA=rrTyNX2hxnJ7Odhza@?p~oE<<%gb;qE{kP~r6j~#1#|{_hMn=N4>{NtC zBe0Vv48U!k_o>x3*qn0WbxEn5%#3^;zUcq7v$+eDW_B!q0bu;O-%Bs4@I+{45Nlid z$ooceyb&pEknz#{q_yQ9`Cw@`E_#qt2*@&woD`JuBS(H+x6v!gRAj> zyWVO0EB`Ow!H?W;8|AZ&5`H@G54KT=hyCB87@snB>eT0_{&?TC-%j6`He$-Yrr-VH z4)wHZd4|(Izq9lFsYNH+4xb6;59uad`bXLR{sy$;6a@qJ6)E;RQ=CguT+gIzIgwJz zkMVHK`gbhwTB2{`aD4bNjv2?6D{!b;0sEhpWJSV|sS^T^>5a2-xHiFCt4lfLwAf&< zedwha@MC2wQUp&Mqe_j;HvX&G@mH>of)N{b{K-And@t~TMu)S8# zXl%Dk+QLT&$0x`~?y5~-phnB}+X2GiYpX8GSZJncHj*;I}U~r_V z1Cs-&@uVhu%Cg>jBNactee;59)tx@hWNN673;yWrux@@>+NB#r}MSFbiVd0>3nTd?X1o;t8H{?!XCOydJ)dfZoY{Q)an(_;ApI!j>az6 zIh&shXz29qP758bou(n8VI?;P88Pagyttpw6Z%p(=J=gpjM>5 zwd9B?(lU{b>Rz(bQC(lt@*;;Hly~X2H^aa}c2{RwTXs2+zo))pg|P*n0(t3EVr0H+ zpuag`c6LuSCkL>T%_n`$Bjw80T|8vvh4Fi?W&i|7}-jtootI0_ba=FnMO6b%T(mI-F`eYGx$0xMh(4E6Z)2ZZ?vlc#NbUB&PuRM#V3h zmbW{)fc%oKq4~*VL+xD<2A>im$DKqN(qY>C!>$ek!d9E&kmi2h?IlsVRSH2dmf6it ziH);*vXx|3gOmPplR09n{-H)CYzG$B`U;g%+Fn8C$C3YwoF?Yy7n^SV$RPkCGLc?e}cXQ*R!XafjJ{R{2nTdsm(H{)8u!{qM+avl0&Y;%~E2alLE`2s*i8 zsT{z^jKi84RT2EC@lWQau}ZbP)>@=|zC2=ClSdy9vmTqiLw0h4{AA>A>dIBrIm>=y zRicl*N;xcK$N*(Q=1LgDOr|M$iDD}cLvAA()s&Be_N_KWJx5Ah?&6dQ>P4HQIw#l@ zyJ|<#%&Hkvo^%sT3Dg%4HK|_olh(s1<-~-RkwVK&Y+2c3%Mj$^L<>Im%!+TZD$ zmW}Ob(>A%YCjT<6#uJ;?9OS*73DJ z(ZFy@R%_*y%Tik^%-JLAGRVq9rRizP6|{ZA-QhW2cywEPo^ov_;8SvRbaE zCClp&Fn0Fowl+U$89__d#q1)iLgngtSh8XQ7-%PxO;`+PD1M3ctv(w^EyYiXk>kkw zdz|84wnhvASV21~d-HI%PBf=Pe-*#aJY*~Xcs^HPl9@N-5u5DTR&xts#}=y+$d2tA z37$Kdax|A?*%*(Qe^Qspq4nxcZke$&R=yOrLY(~W>e{oL3wirJ${W;QE$h0>#iwvv zW+h}5wIPg^w*sj^ez(3>k?@c@pNEM~dU8Rk?!1$4hB9moOde;M9U57CYO^&^-lhiG zByr;Fpp9Adq&iv_)S=OJ@}>+ZA6dQGr$YI51}5!dOOy_Gp%g{v6E-e;(&kfYn!6PF znk{776kVMxI5g@RXN+~UM#aPGjSbT!rkK|!+fGif8`_&kF_q>MXw0sG0b4FqqFs5` zY==Bn)qbP6NBr519oSo0mU8-ZC3b5q`b)AT3|!a1OyyNAQ0Hq#65E*ezbg@MFQOl?MuX=My&hj~`M zW_W}mVAOsTFg{^XpDTIN+Vi92;pZ$#41L9pq;o(I{>TOdfHblQzp;pV&s;M40&)uO zLPy!2Lq`dLxjSKj*iO@1MbXe-_Nr>E@pZl0QrsS(x?;s5I4=&%del3kqpnzVvXseV zaC1r=#vg{FC2^usZiIxHfR?28x;u<^U2E&)z-triGyJWY z=*WzyDZFe%d+ytlI~3|g*0|Rv$Y*vcW}v5P(k{wwdqIvqJd63Z7rE_mbKXJpGNRn@ z*C*s;3XYjTJj84|+2Z4i`f-1kc07}4oSmt*O(7Pt53Gjc-Q*gA=zBSY*;im zqL&otx<>mxXMM6@N-jv9_BQfZkgi72KUa5h`x_#lY3m0>CSPA8B45WooMxrTpGJYpH7yhhRZJ( zYz^qg9WZt~GLNPe{3r=s;a1!f`vi4GI=Z5{zbl*v=4b-pUGekBhqgr5jzm}3(<4G% z(e&K#Lz69=KjCP8wUUYG1OAcxN^D(CWWKy@SZI=MQ{H-X=*o$@wXH${>Uqk4^H(b(+IN{J!m^hihu59;=o4{oJ(Mj0dx^9*dgNlR7fswAi7SM+0TvyxY#S zmc%zdIKL%&nr#&Jski~f9MQCB&C-(F6v;yNSZv750ViJz{Ek5N&X;vr`go%>39K_G zJ&=0Fcv%7Sd0ayvHLh;-t{p|=^xY8r-PPT3f@S7_;5~O}vdfcxr+D4$@I^NKlpZ-z zA*1s1J4TLG<{{dv>_yKQwY2hd99+2T<@-8co@|?1B;S8q#EhSO5dRxQx~4Zv1B-to z7;$f@PAA8ld^f)LD#tZp-5J^$c=GHJJc8&V@Ql(FIg_4^5~XLOd#%{8-3YTmyI!#o zn>4#WW}l`^=f&er46Pj<7Fs)Is0-MR4y7&_L9-=E@hn*;(n7PFwtvaPY5Uj47MgqL zamS3uozjHzWLm;*q$RA&K{k&s>L5&DgltA!WOPk zfsh`@HsBALDdbA&B82pzkj@Ghh%df50eG-!;GRZEa0_*;^r19;=!m3FjP~0Ra^pCz z8E{&hX>q4~`W-7|*GT7#N8?K(hTvy`KNM+trlxWPCpw=>^k)J_v_fz>WF)%tu7bw_ zo&ear_|o}jMju4Uu94ouSKy1^H2UE=5*-&{A^IfeU4V}StN~x57ozhZ;BiPlhcC$+ zl1BjCh;$3SR5ykXIzGUO?%ViMy+iQbfRlW^_>x>9_(8y_T~w$yx~?DIA>orfWjOwM zz^T0^N$nJ(^Jl?}JFLbrC1 zK83x^%_%EiAC_c}Gbv5*A~MUQq!Ltsx|0O>xQQFx;gpfkSMF!l3knm3Nk{V{%ZO z>^v#`H`r>f3A6E#%r!;pN9vkz+eOxA4A9?c;n`xZg+s13pQL`f$}n@F`#Qc zkp|UOpZ{sQPd&zQxV@$kX|f%`2Ql$egxIXB@VuB$bohps^(kQIj&C?DUZU}rY(3jw z>FXmI`fV*GTTYq_v+!*{*4M}6vBaqBWZBUmk25aZ@~BB@xDHi_v-wQ@gfIvUi2A+kUtt1#n7A?{elGlB|^;I(N7}8niKs1Ld=QL z6D0U>3H~vD3Mcr_5WGM`WA$k ztE0yt#ItbpXE4+u{Pz$NeiK5%C+DP;zYrmn%STA%Mj#}+(=SnH%@%-+=y=~zRa&V>Ue_$C%uot7ysGk9sCW&H;2VZ*Fx~hF#No*IO$smhwhFD#h(j{ z-x(HP5f)z%MrT=AoYwIWok2E&G(it`GA^w-;v_u?SG2eM=JFyUg=SCD@Ag$N%yJ?m zG=UAI`e!gUr(I*k8%*jNle35*m87LZ1YBc&<|HTNA)n-oW&au#%KbJMll*X}PGz90{cuxx zD{?xrso1~=^H~4qyZmssn=!^KIW9eCFpYi!hj@4uDCx7u<}MjK{< zh8Hx@q}(pF2c{hQP?CMV%a(H`Xwdv|RH7jjqj_*;D1IFxnBVcCo*J;_Yz04pXka5L zAVisO*m9CQnDz(e3B>=}Psmov30;D%6j@5`PeU|c?SgCH1sYf}Y3t6S7wuoEwOgL1 zth_E)07gB5oYzuC4yV%3ARZG*(>3`dr6uOChSC!Mm!xz^gxz8~yu#Z7>gWGM zmXMg&vIOJ2ZoO>-W4W$es_44=rAn^*zEr_=#kP&LOhebrMU2&Godq#QZrwD*L|Qi> zCK4Nq7?XTm0%D@fn|}`*&9E`ZrWp9mJ&(!FUEHp9Ja8EXdUrxk^>OcHiw^@@>MyUrC9tDDkzF z_?i-zrNm`Q{8>u;nG#o|#1%^PNr^rrW^k2CP}cHo@|rX9#qGCNJ?@?@>FR5@ zb9q*VAX^yZMJ9pA%M$xto;@sr9S17m+0PP9F3(mL+2rzAL#1C}khLyPX$aE5Ak{99 zpGC@D9&)Ve(WqRWR*EQ;F6O!w9)UeMDwo5Eg6_hj9t+~_gpdQ5!3`b@?{ZWU&Dt(+{1FbZU=RlhjJX{B%*^ljb%CvqFh?heA}Z)70tIH96)3|>rt$B zImiOGUqWP%O{yfM0z@woUhebAAd^{-;yD+y&vox*4HA+V*&O4}gr;&dx%G>UY?|UE z$tj!WxqjJ^O|zXOJ7v?9$0me>jx%6O{d>@HG!zqeS_d6%62Mi6NutBeCMe7{J$a)r z_xMu}!GyNh@2=_f#7}o^OD7J+9V}kN;z7rWN`sqa2w9O_WpuuK8|C2Vi%1^M;e*Uu zvIQHjiO1=dfWqzW;$BZyth;clCq9jr8So~A_>^0pw*W&Z8!p;h{yQ-mwen@j2b{BSGQg9cxdD0W)#Yg2;y_qK~ zj0}o&8(uj>l+0DQ=Qsx8yRuFzJ(;q)ViJ`eEP zx-T&Kxfgdh6>*=x3@_E6&{}sS@PY307Gz$MGIQf(fgU~KGlUh|mtU6+AQW~ub7K{s z9}LTtUzMvIl&iQZS3M{<;;P)pLAlDSay5f;RafQ4^yk`}b@l_;qke(b?)en;@_MPl zby`vn)IT?l@2@voPNWKp2&{_o{(3V6A{~|+LAk8n*UD8&vX^hHkhQpRZiy`s#}lP#^vo_R#VnWMy(yLqu2d zPDQ5uRo?BX1bjwuZ)JwOrdQaQiTOW)&~UxSL0M)^SJej}B#DC?f1SCrL>lin6|zcj)ner-^2GsjnzYROqX-E>o7M%~xk#p)66A2WOEw zg=#q-J)BtxMJ9c!EO#A-A}{XZPhsRkk)IYfH&LX>Pt%UWsfe;4;?X{&#o4&Rre9sL zzoPXB`iwa|k!`51*5?@LvzDuZKF3J;qCV>?pwB*Rr+OBX9&TgLBc#%_%fE(73l$UH z+t{N3A?+fhZ)&wqTdNJzYT81Fw3>F&A*~*e|6lq&pr-!|^_%qToBAzomPP%h9qd0& zzjtDLF6p-wjM$V-&$ZXk?>f@&7nqVlze|CA4gKCZSijkmpfqc<$3SV;{+E7--c$WA zpT9}JzNz2h!%W_q`C4gGeKe(wqC_kKe9=KS3_Sik9o zMri)N%!-P;l7H##|Dd|`uKybIx0m$0F{IziNOQkAe>V-*Z#7{_`mJH~|E1smRQgT& z^-cZ8TSrm9={=yR-*~d5cPjsr`mL?Kojq92XNm{K7Ott-#oZN&@~3wqPyS*xQ00s9 z^Wssws==+{wb7v9I?mpZ=#UrE<#Oaf-60L*Y`-M-|n2-L~?YFg# ziBJu^EYa58H-ugz4|-Lym)=$jSuymgWba1A=`9CdmEaxQ1#R7pQ~+0m4{TSx?!EN> zT-X?cwY;eyFGpQecio{-nBb(BSot3NNGi+^zP)Pp4WjjKv4Y6AHOVuH~T4{ z{pzRn)ZrCYDqiZex)!%)7I$eMdxnVTbxmy7KK5foT_?Xd=?d7-^75)KS5+r&)^_D} zy9$Hay5-&YX&Gk)a4m0xCrjrRe>{!Xi9grR^nAGzFB-92~XFr-t)6x%TYzj!#ad0`V+ImWRBa=^@y z%o1{86WBSDSVAFe0z=0rmWU8Gfu%#w5=vncm^y~BgsLZ+LK#zUi4HH2hD&siLmWgp za)I<*qN89Gm8VeF*iHTTR zVj`B7n24n%Cc$tf?}jsZTVxU%Ada_?cGsM7DyD;(I8q!ZC0OosUIdbw9qk9gj|E|p zx;6I$eAp%Lkf71_)5P_uVJNto35lHIzQvw#A!E&w&8*Gjr0W7VL_L}`% zx74qTT0T<>&En zSrjfFzp=aUYqCob>(Ruzaw8Fo{5xWbY1(~9RvltwH4vwiR&R}rZx8*^?qdghM9yvx ziR)6NdNirv#~%;kxeE7dANw=zvX^!!Km0!8Zg#SbFZ8>& zb%GmTES(v`E`*W?dGUDM)3n|3z;M_t}S54rp{dQ{*&^pJqVeVN#CE%+RJDjd1|5VLHL z^CT%nm;LM|I=WsMq|H{V_Oav0qw|-C5ZY^6;ritznv?VVbYw6d?ru6f>G<2~I%t27 z#~#yF_=2luKRjjRVRPiFf(HkjJwBM%i8&o-*h4!+s7z*6SCu~XbEavx3R!7fW$tY4 zzVuYS_k$VUa6b@KhUKe}Z%D;ysf{?~Td78BQ7Vt~Ne5(^RX8t2l&bd0i`(UeXYdXn z$6d9@wYW3$)2b(MO7$^XH{FG;@V1lrs@C&07Vn>Yf%*o&I4&Fi=iR2HJ}Ii3sROmJWDw!OA(%>9+VXko)tMLOBtS}8I+|8&x+~K zq91y{(y|kKJ?}u`P~{O4PMraoiCTpn)}WyqI;49Y$p-vv61v@R5UeT8<#85~@C9hy_M25ozURJp2}V$^L_nqZPgeLeM%$&5r$QweJ}b%a#SY)hkj2tkhX*P90i*rkC9PvE)T@V1<9iR1@emCm z#<$XWFdw^35kN#LZ3pw|v5#Sh3c~zV<*+hZWjBgL4(bGZNj zO4uLPV4i=Fp>_qjU_sOtIIA9Vd`JN6f_tvoeOG$w;Q0|x={WBH7_6{xewGdzYHD4t zV&n>6!a#tGTI&wEtMF`Ei>T{sS52>W-xsb|ZC}s6z&lYw(;&(`6DrQKHrXK9~kch@-iE3Qu15TbXa01hZ&k6A?(pE7J#{cKmdVJ>YiQ~ThkrlS zMqAKq`;tkP9YCwBIzYG>%Bu>U?fbC)238$3)nDoJ)Ip!5vI8aE#m=z8{?Bt13OrTg zb&dPsab#)%_p?&xv=cB#jg#Z63cC(kAZB53)!}&D$05h&tNHj>tMb~$+HgVofD|_r!bTPsw-x9-r`xv1%Wpf_|6Z4#|fbDE=U*9HIVI7Rk z^15Md)&=~B^8C#141dml=AH}7k2CJM@pRC6t{(G&3+LArFw)pbJFM+4oc!73X@GJf zWH0IwK26&ggwO65L$+T-`q#9(auv2>y7}Qxpz1xB@rU%EHfixHS8*d$!lRJ6*co?s z)lN_P6jxPS=0WWfk{h|k%x1(FqVs0dv>`_OqRbXV*gOBcAeB*=@a87-po>b;3ggae z%%q&4_KCd48O11;*Cw8#XC+gBf_3W&M+QX>AOcnBd-PdiQuk~D{%Re0m_HtUmUtMS zC6-#p6oM>oG(Jll@Q}(7h?H@88y-0+$q0^N)Lfl-%?yDYa%7|)!h0`waUB7BsrGEX zG~9*>bJ=Z}G0R%`YygOIV{V%9b&vlt%F46?IiG<5Dr40#x#HWOT@nh>@CQ6Xoa=}f?EME`vCEt z71}HBBMzCZR51uzg76A>Z~8U0G+=p+E3~TsT!lhcIstgF4HBc|N>DC)S){UwfMp*` zBq_1#EYPvUtOP&SNW_?!F1H?yc+qkeX2`KQ(}#>gW$bo(lwe4u6gj{1Cwp zQQZ$w-H97h2!yEUwaUK@+-_<+Kee6I=mbOgvMQ4B0tlhT_d`;V2tvTGU<9o?jPO-R zUf75_VeDQ(MK|Rk*ZQ`Iy$Zk*#ILjS*p)q{;l{5nG{{|Zn^{7(q= z6(+v=D!!kr&_3`iwF>l7p%!_54Bl2$jE2m+P@+E_MI7}jc>_%;)o~SQUqJ_y(b#&R zn7C4G@TU?FG5Yq+k^Pig0?D?y82=p0IZAAN1LdoW$f`8ZF>Yc)Td?4FbjZi)UscT zy?7DwmNC;S3E|HuAriz0EAxnb#c1^~T2dDgE$ZVXbgI`71yqPfvjdw2aD?^UUbHby zd%!HA#-VYr3XS`5H#!2t`U-UboBJ>Z-hBty*c8&lSki&a{{k{0p#{s3x8|Z6kzWT{ zix7||hB6dn8PpS3P>No7_RQ0@$ z9S#X})%MQ|6AdLywvk(TJ>GReKoxdtwollOXm{ZY{9)H|+M8{OrL9q*N9WY2K-iqw zzOnU#k?>XcC5%nwIq(^IMqZJE9JUGA)PN^;+WnjH^wK(GuEzC6RUVx>-!5}i1vlR6 z`Wjn|JfHoNPHR6!uW9h>5PmUw%hl5JJo6}~C&TuIHcAo$Cdm@CK`4`aLeHRQFm(sn)M zI8gvj_!pZwuK(MIy>0kEk~aKHjKjagF#H?ti}7-Wc=yHM;)`)Lo>`(~$?S56;h?Ru zjeXqGrkJDDrDZG&8xORB?j3kw3ZhZ|<%{v}^o`fCBk2@; z!U>X-zjFg_;mYgRt(3zR+`5Kqy9R7dd~-+ix#YxSfyBc$!zuIV!02u{bnGs8GiU`QH!KwI}AZMy4wNDN$*>d4wobeH|td!o$?u0 z`^_fR#s<}TL{`?X^{b{Xw6BNXJ|yA4Fh!LqMd~TyS7q&&3vid%P+tx|e9WWa)Rpz{ z997xx8_)PY9PdG}vx!G-NvHgV&a>oNuiqWuROX9u$^DnG&*p1n!6D)f_;=KQhkwT%(Lgw}BN~n* z;fauA$^-64zfEC^>Nl)}%yKwHTunYE2P9|3|K-;4zvI@?s^gouKW%=Rj*0Yb;>Im8 zV7PU&ao3qV`jk28%^gW+Yz7+Ig5g9U=>+052H|*;RK4pP&M(z#pk`uEQJ2+MTI;9k z>&vZhjXBV9wTT#y=XOMQ(ZD3%qLNR_WJB9kGtd7Ul`F3=FRzEgPPi}q#<(L5wj>1(Z zrathpj6Tf!cNfhmZli>qhpXUM}S1bZ{U z=2%f{6dH~Xa!tEM?m?uIPZC}OmlOvPSciy{3#kWt#!Tzoj$Hs&bf@Z zgC6j-G0q{zWe!E$*qwFw^G@9kZ~V}CTed{iwa(Ku1=M~6E^UuBj@xNATVfQs!^Y@q z?cM}oa?umUHvZiBRgb2WTqqe+aP#|1CRm?nkDshOZi3fFi;n&)GMB4s?Y>;~oz{#w zKOJ*x!^Q^niTK#@lg4;QC@dyTj!whhp~z2Dw8Z7wQ#B_{^YXZue?QC__{GoaHyhO{ zPmNXI8ml?IFLs*F6k)|hF|IluSNa8rzW;DRpm61(}188MtNSvLatSNY|OeAK7N=OT9))CNAKt~OU?C6wEp*cFGOURB%2@2WTluJUhHf51bHauk+Kjy$t zTsHU|^yOjjn4%U8t!E7@;`y1*oQ%4bE!kMns#O&Yt2O61t>|)fiY6Q0ZQ+jBu)-9< z(Cnj*%4fFa%!G&9qt!U5ta@0jf~UxGtX$>twbfVz>l2Q~l2_NWChbEe?K{0Oy+tuo zbgiV%oym#KB}pqxt{L!q3RkIc;0jl%)F23FJGJK7tAkTljin4DR{W}hx_FVyT|r#bI~_%!SXe^We=9DdPux% zxvZ@G##I$-moKd>TeE7z@?{+N3*4g;j^ZR%|A7NcNGtL2nO z)H1zktlHX6fGGgH3V;~^odibC>tKr&Pr(ADTt~V*G&C2yf z%Jo*|x^m@uLAl*F_%qVAwR)D>#*8%S4r?r%;Af(as>Sw&)#s3vv_4twS z-zEK*{O^%_J)iA%(Xn3pAm4hU+6t_-X-k&=?tzL`50CwirPo)aE{&S;)F_8w&+yta z3ml$Te)Gz8o?S;h4{a52f#W~Qx89y%Sbr2VhDTx2*Fvx2w_3jJ>$_!Zc4~a?s`&gn zwzg`_wyk-qx6Y29UodRzeR*D!%zRpHj`n8A5qnq7MUUkww=kXj#KduVh+VHJUbsO0 zAHK-z6$^?S!?Lg6*&G=d_T;c;%;}N*@I@sKUDU6dvb~Pw4pY=`o3eco_bg2A$ey%I zS6XsU^8aD%P2ifkw)WvnBmn{hL<#c=BH{oBL`_u}<+i#i4Bis3>YvixyjKgCi=n=tYZ`>bKSoqVK)`_x*kO5t4Jxde*d`z0V#_ z&S_Tp9p=joeWr2GmVkyipb8$=HHbCW2&#slDko4iq!U!RtpQcGpo(7rs%-CR!zs>^ zc;WU4P<0JdmFI*V<{J%e)3{Gi)iO}^Ok+EUwOm@zJA4GHa*s{OYex-=g1C5L9ReQ+ zdr#y38|7C;fyGfM<`J6^p|x^lOl#s_sL7}G31*$p3N?8)2ETN!91dB#GUhh%yWo&p zFzdcnNEO%^!qT}$IArU}SPnUA~urqD2$9w4i2rw4laAYF6V*)QCXM1V^GqW<}IYHZm)sIYdpRim2(;A=ZbI z9a^%Z26hM@nDrhbdTAD;_`KCbuW~Ta8!55N&Fw?6Gov1OI)yxEMHdvCN^ky}Ez#Eg0xu&|>r{*(|h} z2+=s0r(hyPIT3S9(5F_jxn)F%LLr|JBBU@2Ek&Q&%|fe*kQjv~n4>e9g_faDHD+@a zL`a50MLtB6*oBx|fj%{wg$@uQ1@UPV5z?52R-#YwW}zcQNJD%YO@wH!MAK^YNoE#0 zL4@?gCv$W%v(Q@f>7`ldED%sot#V zArYcb$Y(4OQkaGIp-)D$&@&<=MxhDj=uBpz{peGo+1v{vB(s7BZb1`QFe#**oyJi>$P|T9Q zL$asEb|HlU>v{F6!&f>SAa0WM{RFv--L~T`W*f7N~6m>g)4^zrK@| zT3dEKHF)QpnXvdcj8hb%C08|Z@m+l$}GE{6ukLPP-?CEdSdX#JKm`|>gx%? z?AznY^m=)O*aM!zsIVFbr`dX&gmT7n_RgN&a<53^!IsFI4<`9?#~sLboYBjnf)ea@ znN~S@956g~VS_FnE-UjYaS%C_~XkbzKYWlUVIDgn;;f79V9s@(Mo zgGG&P2=$K6c7o^5DHL46Y^rT=?S|@bQM1-FLE5i#HqS+&6ONzpLw&hO*`(g|x?I8=4RJtnl~J?@;cnFO%$Q zzF0^b&tBv;oh{EC-;O^0N<*u45UoQ1uv4R@7BGpU(ihi*94SlEn59Pt;7s{RbJjOT8 zZzSI|pW1M~RUTpTm&q41h751!>#YT|%j-A6Lu6kv*dhHp_QEqSzf~A+ZTJ?%WJ6@~ z6)F@nf!NorDE5}YKGVMo#lDBf?9m7D;#hA_SuJ|x#O$q{b)=^3%|-E8)4W64A?u(& zq-Yx0ylEbYc%8QT_dO6{#vHCG29b-VUWc?vAQDh=abU9=M0g92TMd2Wbf(`;R!bjM zL~r^|>Or`CZr{oLg~HHj_8Q9?Kh_HNmf2w}Ba7~)nwSFug%R?FvMXf~w8{K+!q8xW z#xgvVHJ`J~%>#ra?y6c8(niQ(?2@^PFYc9_#f`CJr>V5IhO%(y`igJ>whBYz0H_+p zDzI8e9k8MYNz?_VxCDg{_Z7d~?}F0JACwt9RkeAbOc5#9i8-0)P}w?ej1wqpw=VBNKlsT6}lajO<@%{{EIr^0Lq#+nBo#a*(m#Kfo;n=ch;rO@<))5IKp0{I@x`w6A!VDz@gSt44ZIxVqp^-o>(Yr>CJGf=dfD& z;cSVv*Av;W7qofYvd8q5U8+HpJaz3vHBTIFY?=LM9usM zHqO`JsbzkwzWm3qPCka!ivRh}TyZHs-&OT3Jc}}ah9*zeq|oKl)crJh{@kW6DV5uj zuV1W}l}chBc?&jY{|x$s)t>N7S*^t!cv!4nzYY$z^pOk20eVlKx?jD;)7%mXKc4+} z4t);)xlkkKIv*54vjL8J?Qr2h0_$jkKqsLE;^%+@9O(8uN9!oCw ztz;klY538hi3&%2I=0mjW%~$;6Dzp2*q&L*m55B!d<)&1HtaTU)z6Ibt?S>a5-Bcs zH9Ws=ELTN8 z5JB(kvh6f)NiIb&dXJGf<+h9($1Cw-85GYdWNYf?uQ6{?e+ygo?$KB?V$%DvqwG~O zy>hB-^uwgl=B<(qTePpFMvDaXm)&7s@{RKBn6Rfi?5k1jdS3{;=|kA5j@lpIYJcbs zJIy=SAg}<>yShF1FIN4vWY1sSo~IYH0!8~Y*5NbC;Yoia?dgv7Q@ZLu;4{265*Nh3 z{}6ex>TSiIw;v+koI6Yg_!`Qq+xaU~6=VL&8Po0jk6TRa#g35n=;ZFS54UQmPrO+*gE2=?&28J;r(Wm;BeidC+rgZ{b}aP$^sT zsrA=nr3p?mg#dbx*IPiq-JcyFJ_BSHcZ_*0?Dv)+taR$~YE>DXpo)Ae5akx~p;kp+ zfm*f7Fhu1l?E73T{LaD3l>gby7Iw>aB)i)hp)R~|hH4(zNDgezJL%T>g~m&BMelSo z({v1c^I^^tG$_9Zck7&Pz%GC84Y3mIksAZ*k(^dQ+Z4}G`g4DjDEWb0##b~}s$~tt zBGoJ3LTm~e=MSf&hW&r2N-P|?2|6Lw7pj!$*gsaFaUO3~f;Z=#OEp&?(3-b}m^L%Z z<%uQI%B&PK7%K!3qDc!&Tii`T-NVY$)~W$4=-$dKpk*9c zB=mj|)WElU$uIvb=2r`0Z&d=*tDYe%6?7J_dw-=nJ>cgQ!%1Y#ehn=E) z=|%8xbZdls=OplOCVHshp)t=(eC>*zDNUSp+@m=M{!l5b(U?X;yXMedE2w!CbAtDe z$wJAN7*F+m+EPd82Z)uP1>^PU-ye*WA6->tNQhq?O9tcg2E zHP(_U!zclsvA@dR0PV;q0oasVfz5V@6%TIRaL~gUm%6~JgQu;I9|Qd#=H$9aIDxd? z(U6+zOv8FF`9eKGXdrRUG+Qsx!-lyrYbzk`N*Le zq1j%7jJAhEMoo3@M^Bw#g+a%Q8%n=bC$AOuf>W<%$X^aY655WkG?l)85IiQe&C;0{ z!mS8r_h$`nkoFp3KRamJ@QM0f%--~0*(0{tuKCddc+b1GU&DjBrzuKcuJ;PNUSVEdmwLmK)&M0?ZFYVbYtc2Uo3KBZATg@yfHYx zOZ?zlJ5#c)bzEECG{7Auxc-Qf2jrX10&aHwSb0)A*faD)d(sVHuLSIg(!kHNnoXu_ z`cn|!B#h7Kfblscag(Kx%Vh~phW*M#U~(s#r1_vp|4aNE)ETJPj3KHd=3NLe#2!PO zgdxr?5>`tVT@QSaH<$Gn`!u8!m;x!?g(>}35RsPiD^zXk@3=9xa`3i;cpHY^u33_0 zoCQ6uCRlQewUD$cotop{(37@o8-%xKZ%9)F7;Ca0?m;Mg2MfO5bbIGii zdBFc8_AUl_jwUHp!CbdnKe#rnFkgOQ+1%k1jV{nB_0_WfW>+9p4;wB^(y}B`(9&*# z6v07><*hteeAe2-iptAuXf%Ar=dkcw6(NJS-gBdgYa2wXoghP5P>U288Q zU!7da`K^PQ3$^1!4Ey_VZi%4qKXZ!`a(NJZd0P_Tbe){WT871VhdM^wV|@P8 zXVVrHxK0~P%jugh$e?E0@KP;hNgA*CykAXEOvBg%^QY--+VC?@XY(9BRiEo@j@!-! z5%|#%^~^L3TF1V@CCZJ|u)H0y2#uPYu-`abQLNl33(DIOh`T~zmv2+6O3ou)1i?_~ zBB*WdaJ5at_^m4aCnt1SFq~J%23I#hcZGY$n0Vi1$*=z0Sab6l0tw3B5qnUk@hW*t z3%(Q^e-Jt#Uo)Eo6BG6WE=*CZb)2>k`dNR_f@{c8y^SoXf8LIrDZ1icTF+5w4AOqK z@gPeXwZRPUW*gQyY7N^Wyq@C5G5G3!x?*VP_t{(wuKWdB)1Y6dbmk!_hh$mw9R4-g z4lVDw4I6kf4^9#6W<@caBJ?3c^~1RwdqDyV^aR?+=C$isG4;icQn-tkE6Ec=<-Anm`3VHq& zBW$iia;ag=@`$saTf>lU6zgXzW{^Z*V48a!hI4=OXAh=~tO`#Rkc5KA#ph5ty%@Vw z+URSQh*@qYOvRJ>nx`>AY3r zskrsBAl$VXyj|BmUY@B~3Q;cgPA(YEkmSXj*nfTWy64~3a|ZGQ|_7D5XbUMPAO z&@8g%K+~qKFJwWxbe97^@``d|P3MwXqCWqmgXh6X42 z=FxQewkRD%Q%w$&E%Z=XR&pq~H6$!e11XxV7?_;Uej)68t?0RB68NX~ndo$5qeD2IG(0s`37mhtg zJ-GCaG_-$e|a}hT?cOl~B_TK=mXnZHZiC+UwI8NrR54S*^ z!sFp5xJ1Osa#tZvVgD3xCkx&ZoZ>IQC5%h<)~ncvqdcE~f=fkQa_&aNmDmp)caCc2 z*s@7{qA?I(wY`g_w%tI3ytH%d-~fz^_+(r(4w}Qfan;U{AFfM9YNd5}VbgS{T>Cpi z9JdVRVUc9pW0Bb0ghrr#ybBwurq~mzro8VQ{(~eNCOO$PdIBR%QJZ1Lpsm&>2Uw{8 z5?ELdd464?GWSJa+ClkbC69+Q&f6bV*o|u+4>WEA^8BNyHFs+N;lN3K#kVf;F8NP^c;0gjtCKpixEnI++GapsxlgH+fNQA|*S zLzC**=#Y2|IKB_{q7S`~mY`Q|?M8dixz`-ZufRl*+VXQB=u0H{#Fb@9^asMsfl&Dv zNTuaYR(xwBjWLJ+_K7X%gziTnc0Wo0qEz`bmO;oO>D(+y=)onR6Xwz=oJ%w81jxpn(gol+e_{Ck2~Moif#?)3gtZ(l`WPIsOFKc4 zH-b$WEreCEsMDFHjKWwKVXW!lN5E^b*7B6k9De%M?m!iZ80g}A5NIa}boc)V^a2K| zv%H0Yw)n*D%979qtuqIz*@%JGS(dZn3zIR>t5)8h1j_FZfin6x?!rLJrHdiZBUwkR z8MFRzIeIIa6j4bM+CFZwf)SB!;T0s$nt?!`N0rt!v%gI?lV>)PM;Y@J$RnK|=!_?f zco;uRc4tX+gI1VbF>XRvny%~y^1K}Af#eY#0`lm9JgdiUGn1z#0Le4*3Xms!-rZy* z&%)k7o|QK(T8_1vi$D^FMWE@w8d^i{k<~oth3k*tC~XR~2e(I=>u1zu95{AXPJw!{ zfB%n)&|zO;HM|C^YQ4cuP)2j|@|sl7TyYI}AN{VfQFTysdnOvwgT zLZ-C)m4t(@Q8fiK2JpxjJ9`2 z|4w$n4ES4m;W9~-IU$M^WYjlXAt5?U2_T_4Tb)6SsmN@QdtPJxOu3^yzAw_ z{+@;LPPxgXIWa825~2njcaXiRjo++}20kZt)(p~J)p5L_AdJdGxvPm6w$?`-%tu$52A=mQY?9|Z+KcEWt0Pbu z&zXsFo}}kUW3=L85fX#W`@|L5ASA}1=p)jTn3WUZjT^@en!~>#`{x{0PVaKhc##Ig zICF6ys%^V^gmqvR5W|GTXuf)g;|>0F9+wX~=23#gxEuWq*+reX`INq)hZwr~NQ`q^ z2hsbay8I_G&LJ_*hPNOw9&F4X^z+FDABpjX5Cfh}2gJ~5WrG$FJDM8Rk;;`~LX4)X zWyGZVgly1!^HI)ehez}cK#XNBSS60NetphBu26bhFI(nLG$|Jg^-PR!@j|66g3=UIVD0i6b+D#uIOTp4`f4ovVG7n4>e}v zpR1e5F6#Th`^t~mXiURw+;i}!_c`)k*|>+N^$Ncw*Sw@g&(saBk^q5f!S#K zmub+S?r2BRpgMM8g^XmQGkP^KX*^{b^anYr;e40*n-a5efuPTpOzf#9B~=)Qdg57D zeC`+jm5oQ3jr)7ITaWcej`&BOO?!aZcuBIcPEcNU@C(RBO4U)+a=76vs~{B{4a`P) zLk7neve9~4?tk80LmG{Vi^wkO@z!7I8+*9Xz5uiFbSq?|Ck=<6EZCs`>HyRDIiOE8p%zr64s^L7kd7HiwveDNS zxp7|mF&nf)7>91+c~-n8{lBvD9JBFk?@8;6n2j_3k>}IeFdHxd58QYtn0@GCI%MN; zpA)F%TEltPUkf1{dd$X!iSe9)kPXe*cK-zTYRtyB4KZXF_2_9=6d?}HYZ-#q|} z!rO&74m*WCV5hY_@NXC1f0YKr;} z4ae(0+oU>oJ)8%93GYPg8S9{PWB9&E$orQo^oJ+avkIQ>a*}JmyRCN^gW*+r{-b~-2`6b3hFro|W*Q@-qGlu1ov@O`Ny6K0bx>TO> z%3bJ-C&&2cqE_U<=(I0(U$nEJ`%->QP?K{8GIF(Yl05D=I2|O6!_jH>8OTah8LTcW zhW^uz8D*xU-`c>KzZl2-)M6M|XakeDpLYUl2LBXjSa8o3dKqq(&~?)M23;pj3M?>u z4?)g;l%jej4r%h|j@zr#QqiiGLwAW;3JYb*|XJwiPZD*GLvR4S}7{0PwG)KnP3 z|A5@b$(?@>J>^#Ok{ZV-5F*SQkR9yjVz+wrrQBzfBw(P9uh| zpyBI9!g9$o@HuqbP{VQMGYoe!h8uboNdVyvi-Jr^<}dfrg-9{Ux(S%%fliR*5kvEh z>_gyo`=lRO{W*ux?NAc&LyUO-X4}LNm=@C8;<#u2+kS$KcK8_%%y6A}Qzp~&Tp@f|o5kIO^;>;e8T zP8huMnXu#_8))truL?oeoN|tv(n56K!noWRLP1I2mh6H_sgdlnKeG((%)71`{9gia z8Y;nq85jz4VeH!zc9}MJ*uaX}A{dg6bi3)}9(TaHW@pce*-MClC*GdU|hLVs~y~@X32BuLvkZCbPfN346Jo=^<2y$_!k1i%3YL$E-)~f2c5NJCD%C3b# zfA5?um+@->DkadF2<=Mc8TJ9RWwE%wE}$B%o+MVaXjL;5meGcS!?~MVVUj8cV~r=V zzQ$OyF7fMS1(2p6g}Y5R6$M~eGzbkhq2ZDnu#(m#hl?zRSM_ppRV;yU)B7O_nlap; zoFk+;?vSY%&N9_%rUxeZD4E4u4M|oEhs87_y8W~|MxJRxw@t+Db?A27<5pP_6PVJ5 zBcW;I7pYpa_Uaz`m&)0+#8w95ybI=OvTR~2andE#(EF544mjQs3KY-p zI=CAsK9~K4AV{KZP}l&wEBr|-{yNayir0JoYWckBKD6Q)^EFxShwTh^VUnxa3n z;yO?bt@ujFq`dzMh~*q<#Vv6zv}8mQH)j-3_1uXO2H{^&e7SS6_)ILEo^0A3z>3%d z745etyG^BQp#T^fpXf3Nc3O<3x?HiU>>%gJ9No@c*8nSmIb8wjgZC-7mH16peN!AoC1Z#}RM=)MB8eTAG#@-f?uKfuiFg{3f{9rIVOayR`_ zJmdOcWeFv5uiI?!)F+5s$G&fA^zj zn9Vur!ZmY?z6#F<3F|xI0wDfSYzW&Du&}z8j-SODG0`{%##;I@(s#TNw-;nKhx=v< zbfgX^i<2VX!(2z1xzp0+2A!7L_X@b&MmQfkErN@f9x->*Ib=NJ2Q%ZjPq22S7F|-+ zK9+eRt*dLvU8drScmyq5KUgggqp{_%xn!<=MP237bam6{e$w`b<1E)GF;^7_UbkizJ?V3)c~B%7q~=}n1-uU3Wd&A z&o@2;;x$h~#!(hmtn~(@`3T^Ak>BR`Ko7a!+~|9 zdSSRDNVpM6T-P}eZb)u~K`EI7KGW0D=fcZaDDpI(q4pV^#tX81bpiEgxM(sO?jVM3 zi-oxcM31P8FqF~fV#EZkBj{|1nD-9cZWVf3`P+y`fb9ju_Gq+i0^9RNzd*k1lvCyD z;$I+W*)C-KTN1R$1sMN5cwQ4#1dKOgwtvNJ)3#!^3x5R0=PnmDh{h#5mb(>V+z&|H zTS(kRn{8u8d|-SdzWc0WMwl9&0pr=jhWFh9jBmYe zX8cdcczW?oxb{mQf{Z_zjD@uz>+*VFyk;CQzGPg9vrUNGJ~BbzdSogv{^Xuw`-P1b zk}L+9DXxl#+d6R_7>vF)p>FIRkqPZpA|0aF1(&#;NWW z1#Q`o#YZHIr!b3}&6oH*PrFp-w${z6S?fkZ2`(okI15WqK0b+SxgN?td;54p*gsHN zaxaj|;*SB=?+al0T!Sh*>X&^cuK+t}uzttl6Mu!p*Y=~JhItSAzMik9%Hs-wIxUNl zc)A88-rF>u#Nmak)bQmyU)>jVP+6$qSXo+AF#qd=@}>J%!rFXvg=2ZuBjAniZo->D zJUvKVBJ?p3Du4e}tD_MwfU}wysu^L_knOrVh31o*!?}g=Ub#l5`;ec?hjy1 zxd=XgHhjP7lI$WFHW9;WvZ8n(2>LSv0Ii7~XfdBX5YbH};$eu60(4*@xGmW+ZGbMQ z1Z^9M?Zd?Oz+&jK7el@dH%1$dD~mDcCGLp}|7)hSKB^n3x{TBnw*dk=T=-`LF#N>zX%sl~DUGEUc!R z?#Df#*X{?Cbt*r}iJ)e=c?RZu?nHxlZ2Q8{am}$#xv$N=cG@HCwLjSE50^ClR)FWA zew@rFp&K|br45*CwUeq(=T}L3vA(jY z3xYA}%wW=Shk+~UxR*TLZ`vGcmsP6&3OeqM9;*hpcOA5@`J<=f9t^5^!l=JM|5y3} zFajBYwYPOXvd0vZFVe0SHSlBZIlA3^4q0qBvj?-tSmF{PGL2HF2>NGQWo-BhN-%c{ zvWIek%0dq-7J46r^54EK%;NEdRZv;#`(uFiF7+TEa88XGs|AgzxF3V z_^CgkGdtq!XL6VCv6Ws&c=IFjrg;I6-tY=S-EA76i}@KiD;k59r9KVAZ4b)Vwyc71 zr@VA@6Ffkl+lbFD=(G517@^JupC4`b8b+vd(eOJotk{Q!jbK>N259M&*N)}R?TGFq zXm=7ZpzCGL;P&d81JHwS2HWk#b|1Itha|LeRqm zP)G@TItS=ND9rYDDP}vFWP41p@TBA{r0kyuQw&#>XEE+Pj63uvjJxYetL$!1C;r`) zuX;N1?ban$(1{=6nSJF(!5me=`g0)o-CR59#8U@L9PUFmgJ(lJ@zTGrn-RIN61o9_ z$=Hc6$HEfDt|(foJ;CyZbp&o-3uU9cb_toH>l`})=9DF~p9mzebNF&!b0_`+cH(8R z{d;Fgj6&?hzr?EyRNHD2|G;soF~U4feLf0nm)lRr!M+RoR0sr`NxF{FEzd8mr7>Uy zZ3J1A@apTJ8O+Y~#1)Yxyu|L6uu}qDhS0{sS!Zu-#(-;=U~Z~<`z)&y$_IkhwKQhP zX82hmUIw%lPdF#-U4aBslMcILuXy4zi8kOnJ2I-4zr^~fYn%x6Q{MI`E;cFdVnXMB zW3Aepx6WKUcVO+LS0%!Vxjw1V6H-I}15?BQYz}`7ug$#5cwr5i3LN$soZCdMe`6yo z55dsOo~o$SDo^v7?GYJR9oz|Lo{||)IlwOcd1O~(oD*y4(7(<7!VpiKOq_f-4rbS{ z-y99KiqVc7GgZOD`ix&Vq_~>iU~$O@9)RLXzw{beUa}Zj9(K#Za6NI1dEMX#EDp_Q zBcM1GLw~UYzR}hq-5lFXjE;6l3(@&LAbI+S8P2c;T&h$awjW z#G&=*kl>I%x8#jEH1*#YTKzYNA+*@HBuU?6lD2>D#JbvHPIogY+0!e2Rv-=gQ*&u3Y{&(-ub=+H@UNcG zNyMSwz##{f`GTftW6&YpMsz4#RRcw4Bn~YBhv?l79U~6SzK#w#6Nlu)p|jvnnZ``W zJ4i_7(WgL2YQF|siIHwd?K#UNnrq$V^#_)hZ2Af)FYQfIULsrM(9v_0>`8Zd{e|VF zKXd`gE3J)`mor{|TQYqPUng)RHKhG-jJoyKTqv)RE{;f`VnQG&FImZNNOt+3W&%AR z1e*8ib0knYacCYANNT3y8$zJz>j{CRNT5*S&@muTg0H!H{6h$I#E1k+_Qi_kjt=o> z0)hD54!t7;x}AmuvL_CGNeFZV2;^)<>W2C~5-94>NhFYq71pxLgh11PKr9Q=7j0gT z|jXxbNqKvxNYz#)~L*`aa`I&}0EI&|L-9a0d7=7K{G z8@mZ4MFKT#M2EsR5&{v2jw6A(9U9_`tw;KGbjX=FBqt8tK?3bH6Uf;S33PhlASBRU zB+vy?UW<@G-Q{Itg#?;)h7gF9mzX&}&o?(*VTAc2lFBZ1OMd4&-I%>n|&cb8WV zM%{Wl0|_*fl-F)TASf?c$scg^TcB=-Y|tUvv34ZT1LDvqLZG=oAZfQl`RGvL&)G+FdIud9+A<%Fn&@0jc5dux`CeTJgpy{g#fo>84fkP_KZUXH^hn~Me zhwgh40uhIPLjrB>CeTzQQ0GQ;D10j+5OL@Q5~$muW5l5~*U=$o;*gv;^acr3X(rGN zLZI)S5&~6{7RVi2ptVS#?(*^@1e*63ArL7qEh(?>fIv^W%gc!n=vWtNfk=7HAOxBR z1X6dG*Cs-s>3%TtJ#r^0uOnDq)fSEqY5gtmDy{~JFPu5xsw(aF9K3K0e>)?6-O#T< z4%ep^{*!q{=vGq7)H=d_v%_TL=`b+RqW==Nbwcs$UK8nXVOG-;?K+~O{T~KgU)m18 zxe-4Z^1?0>7JR6;6T6sGCGS6*NM|2?-!>J7(qcb!T+mx;+5W02mIh;2(_^@z4P21E zMm+5};NJ{6X%~n1ch-L}KR2}R1H5gQI2P~38LFaI6!BE$~}_{X*m@zImMXD*TK*amq2 zhieco4kqzC$t~qSrxAQx)fWVB{2B3L#D@hKZ5t6E!#l}bW>|h7@SE=%N&F!sey1!; z;}2^H{@CsL1TShtycF>h0=C&cKz!`AO6E#Q{Lm?M_VZg0NcprwOo5#`^v*u&sL`<~$rjZ*EMlF6{n{eJdBXy3(H8yLoFvr$H=={a6c(0d+gxlUQ0w zEM0pmRSLK_motk-o0Ts#=J@5mYuQ&sl{4tijgs&#lO zO^MGj!3}^H^ScbC3AQQ_XqL2dX629KzLPbyb5MAk5QPU2;XD*RMuhti;cyh5Lxin~ zW+EI$gbPskPa^C=gdPX!Wts{nh5Vf;Z`ENjtEadVMR1*mJ-baiO>B|^Fb8$-GOdY z5#cx#))3)1qL~O!Bf^JJIE@G&CBmPhu$~CVqp)!h-8bENT|aJ~UxbdeSDPaEO6GW) z_t2rFrnF_YDz+)Ga-z&?R=%56OhSV(!Z0A+x!yN4&yVS9aX_1rz0U-~nU3W(r3qiE zK5Gi>nku)N#h!}7iqBAZ)j$xAn1RBILnyqgHwcHHR(%%Qme88`I76;_b%tX6cn>(yxT6CN`kJD~{0&0m};i&Ymr-MTC?tAc8H)Xa>ms?#P zMZMNOQU%s{XyZFJ|7fb9sEJz;Tazk7M}Q^P&(gXP`dM5 zknxMC#wetxFp8r9FO}TJkUM5V$oX>Xn1qP|i@|!Q_M!d^z}JY|6B=4@&l`oQwlwDf z`16u(DDW$|3jRD`s_bUjs=*)liMHoyw_vC8nk{zR(dl8?{-Jq&J^5>zG7IO(t;Ub0 zK%w}2kHY0W3ZM5V{H;f!u}5K5kHYvN9~9Ql?N*qg9c9_)G_Mn6N|o<1iXs^wzSG$` z7~N0-3nJATC@g3XHkRXC5f{o-x>16`PUj)Sn1~RSH$ZIHHf2^O!{%|jLI`1QAUCF^ zi4zHN4RdB4khd}SLTT;>ROoB^j|G0?<3Xp}--_1S())t}zIm;A|bY6HvXQ$IrNqe#5%piP@n zk4OC?){}U{gD_tGUJ|df4aRFq!+2Z969`P|03`k=lA>|~d2WUrAdsm9qFG2FpA*PQ z0-^nkkXjvq+!%&dG)ED_UO^yrUm&DnE`f9sh{+83o@b$?D-qIigFx1JpcU#Bv2ut&(ncYK|D0IKB#_G02nqik zAhzq8GP`i|M?3DA^swmBP(fNbxllm{c|ry0VAendQ3ERUExiTW!0VvX?H@%uG>ne{ zzImOvGoc~iH7FlHhU(HjjQSf)@AKq?+6!xY)IR;FcJ)WK#*b>Bd{q1DquRfF)Ykv= zL2Y2iI;sVD*hS)f0@}1GCGRoboPS8X9b+KgiN{spa;pM}NG64dIyrUNl=(tLUCevX zzIix8MDOS?pwSapK}7ErowcP*n>>hUy|@dS$9#Za9z(s;KGZ}Ap&j<*uW!n1t$>JL z*cF0W@zfr*RUg$(`>1yCN3~8L)o$uhOO5YQTfOgtTIc4eCD~Akz67yZ?6sf`8o)|8 zTH4|bN>1|z4S;y}n3!NQ0XF5iEQZ6Z%_q=wID@{yZ~QDYEmSJ%N|XH2bctA; z*s$d*&^bPeqK-f8oCxr~-u#lL%Q~zzQ8^ z*@nSp=s1S`20zZ%Xu7Ymu&%Ur3Yy*`j!bNjd;_S0f%Sedm!azt=5z7nIF8QeT+()%@KB_&|qt-aRN3G&;kJ?Godejac^g%6K z-P=18nqm|yRn7-(r+F!G6gp8;|Z#D*8= zFqso5@8b`v=KyM-H-9U1Cys*7sSex;>0vd~0q$#=3lTj=)7x3$Q1q`cqG*N?)OLMT zyZ)ov?|anxCiJL1tnE>o7~i8dWN?pKk3JvNMhL7OhNnB<1TpAqT>@>h*dyR*Q()_H zjMwlb#_MFp`rnkIf3#y{*X2wOyBqBZ)?g_p8(VnheC*`X$F`M zwXB1PULw4ll?Y|D22IB>0yg*+jIoA9^;e?W%8zPq_NY}X=uz8rvPW(9%pSFgem!bW zepEZFN3G@z*5cLWI`IbOB2*mU!fs_!)_6x+yLjoB*1jEl>Ng&q< zBz-PArujF4d`%#^-x4cr1d>J|@v8~sR|0uJAhN#*#_vfi?+K)fKswD3t}PN~lAOe% zia^5jal@jlGZ8E70whdmD2Cr;AXe-Mq>eyj`2-R~ASYXh6J~h)#{5d4XfzFc?Zuism=B+p@P_-^O16(n zh>INH7(r(+!b?K?&{Y&yNpZs|u8Pl9Q7jtXzZT`a#@CljWwV^&D@_LPkN09;mXWzQ zJ>5TZSw_}^MJfKt3zjA%rl$^88n3=_Hmgbt4m0`({WYa+MoR zeS%iBs7O$KDR)S-yvsGW1 zh<1n-z>H85FTpo&Mn2OrBOvb&r3sggRA4#M@OzJ{=Gw4?ZYagix50hSuJ z2jo70>8CzEIu{Y{kw=G%X)p210R?y>ALKaR;ka?&G7o2OzCi76s$ZU}v3gnWhrO$BYMQgQnV7hZ6 zPAxJ0P*`uVp!aFsS$-$EJ3iP+plGxp2J$eGkM~y|3HuzkzlZxNQ<5!?ltki4Mbf>7 zJ5rQ)l(XZzh%gVU?Eykb#n#@i0wsR9u2)>(!tlJ!L*haYiYMS5na3*Oz7S&^$1QN2 zL}%O^6Gu@L%W{~=d_!jGaJV6}s1J*qtMn~mPS~Eepgg3HBk$st!Pk3DzO`e~UD)yx zI{d%>0{gI3bS|3`C}gz%{fnrN_k^uIe?fif)^}b0fBlVr%A?tQxG6N&DZH=rf87(h z8t(}mmyp+Pg?C@hi)#|K8r-F>s?VE5y6{2TntXllVD1q;JTH~@Gy4mL(@EuTu9ft; z?d(-cXq@5AA`TnoA9E%Atc4opEUo$WxF(#L=gxpTGTLS);C+iNE|lm_DtVflY?yy? zt*5aU(U=0hNI|DFojT}ySsX8gy;~t|+$st#2B7m~Vz@Cfi#waL3Tx&UGT^2)yk`pb zPd04|D?=93p4U{Y;!y_xRPIqoWACRi1bhl~F`Q0@!;K1$h~XxVIioa&tlCl6!bNw* ztcU~ov+6l(;r6~xtvSmV8ZFlOT3F@7Z{|Ch0=Oa05*pkPXG8;^9RVIYg{#cBG8Q?& zy-mcq65~OMTU4Sq-ZGM%DYBfd!COXNqxYMuR3&6B6mxcP3u0`ZXdRA=nkkN70<IOn(fLnQNRBohs7nT{|3Z4xxM zI0x95Efv%+$*zFrVlFN%CR(&UvEWHPSV=kw7pJ~wFgE7MV2&Mbtd^=t%+xN)jygFfj?iY1D-wuh@!>>SB$8-f_ldM}#Nx;?_b+D=D}5i#j-X7J|H zW;cdIfZKD;H!-LHkA1;o`z_Y*nEnF$Yhne&X33!apqY&KASkg3g3BeVAjz6ug(daD zKov1u{?=jO{sdR{#}ozZ7WIc)h+e~A>CgUL5wW`&eyzI;Zb<<@cZbV>I4bf}eKw0H zGxiTr3~|V%v5yPkXS8)S736pA<0xi4i;^q9thX4!aO&cwQg9RAEiAgiI=v7s`#GgI z|8U;1p4NxXovrZ6l$1f+uX5(X`OjNIldfYWm74Z8a>qI4p69~N7xEOVmkbiYMVU5P ztTnMOEc?a7ugX3%FvbqNExs%pvg2E6;V@%B>%{#-9FvL#lo;-y_;}D7W#150-|qVe zDksh}S=#d#1I1goMyO2IIf~@If;s%CzSOU1=SObTSV)7^RMd6FMpM*&#iqQ7wc4QF z?J~(?&g)##2YH$Z6=Xgqr|{MIjw|YGN+X8A5H*!vk>__g4F;Ik7~$5l z*guubh5@n*js+6?Vqba@z*FjrvGf1EJ#?O1MiN`&aRmK_bg(^d!ZiN#zR-(d7NW3V z3knZ(0Aa~E6mE>d(S(O3cHsLeJ<^@^-moT8yOXsVy5HMqAS`z%1mPIQsHVUN6SNS; zXzU8n2BL5*uC~;k!%mI-D={q1ymaV<6{5MSQIIhjZ3$(5HdCN2-z%5a$`P2tav1s` zax8^MqYZ;^4$SS<*bl;Y2E5tuj_lr+!Y97)(*oZ0xB;&$c)P=U3%q;5+v!6`3cjNp zzAEAEO1{x(@Yo-C{5m{7%9}>}9=`X5H}3Q5-cN`9_uxDBKd|owkJ0Fne*xcZ;2jNb zaGC7qg8V!9j(x;w@P=he^Zvo`1zvMNZ~}ZnY$4FCqfJjqlt!edBxEd;$7LpDER`o@ zretJEGE)-%_al=QFI}3RvUDj*gr}!uBumoeX$kY@ElOFmG$m_ZQrZ_}w6QpGAw2YD zDLnJVf5Ff|f4OKuXh49!$X~QzXlSrsf?S@S;w{*dxW$6jX3O?$KynYF!(Nbv49!8j8`v=(ibe|R|sD~%bf4a}H z8&6*qOQWyh()m0KRw3ZrU_ZXIqu;+r-86|UHy2{!A%x?kWcj876v>#1&M|Z6H&uNA`wLeh(y6bK@>GCY}hcf zyv!eyz%yrcO3YHbdk6*iSf8WnYT?? z+5aD}`d^{V0y+FdJic+fg0Fe=vQo0M%-_x1abx4-K5pZ;L1WE$v^Vm1c=|8yWYHA( zfvX3~yx8;q{IDU%5_V&YT-n^v68B0GVbZrcM4RYy=(rZE&6e9iRH~Q37-Nft}{P|Ea@t$K1xp-Tl9G$QQ$N zy;3rle$X*tvUEypPw5W$#oV^+1|6Ti@ErKzh51+{Pe{s|w=84Df{bMFBl5#B{EPw} zMeun6bYR&=J~ZUw zAv@=Fy`JY>=lOb_`|E7imv9Tg*~=Ag%$PCb&YWKG25jEtaQAThDiT(fcF?%2%OYCO z{%)Blw@&EWdiGbopzvgC>p_x;cbxr^FDM1kO>U6Jn~EWB(UUie^QM{bKx@HIXYevaPa#JwDJrYjz?+iEWe;DjBhcqsc~crhqR)5>0GYxaFZ1W4ZdeY}8=m6E z+>N&LxA^iyfHeKdZL{;HCWyw-0&&|MrZY!P%iscGa@3^9m?cZipIsPiDIhnn26yN7 z58Ei@sXF?M`MAYIva?u8PEk(YR7+4|jyKsMVmwUPLxoa728@+h1R1P?49K1MqQUTK zDJNLrO}-$LNCh+t`C1F3Zq0y;lyZL>DHl__#}FuWpjE8oO$(_=ieeQ@dDB*ifXk>W ziOaI7n%K-Lw(+KXh>$nShw-Kcsu=~J%oxN(QV;?x zv{amRI9wtX=>W8BziX+Bc~b=-E!KMYw1x%pMb!}DUHk=Ts@&eQyva!v!(>9BIaMB8 zXQ8e}xqe}UE#LPB7f z+GjMo3%vc=`6H^IRL}49@ zY+Hv&JEgT~y!+DA|5}0mzqe#&9iEoJQbgL^c=vgzmHc@ykcHCuuV(rUYJ=DHG{ly7 zgU%UXu%&~ndjQOexyi?FaW6P$aFgvfxilvXz_jA9VcJr79_A6oYtRJTP>9q?tzDs2 zd|#vlf#gCg1gT6+?#z0@)ucb+t)!Z^zunP+WWaxc+y_fFNUq^~O{sam_T{*~TJ z^|xCw*>@}Gu>S2d#wX z!d%e$5@en7UTTwY(NW%NCMY_*^5q*KPG(#rU;YTo^nFsh4-<_wk2ub1bweEHOU4Rl zW*~uIVo!0#k3l*hfI*br-?D)tVBv-!q6bOLq-#u)G0DRuIg@UKWOOLAs;q0sIAblK zSs&+&&%??QB=AbCi!%-esls<7ti_fMQj$ivp#y<|BxcezCdruOVUnClw?Q)6$^G(( z2k{P-obfu7z)7*EIb#Dzeqz4+aU>1l2Qb2qN!OSpW0HqSawgpd$;%IB$8bNm5DWa) zbpgrhhQU16$r*D&`X|49DVb3V^E(ijC0{CL(lsW@m_+6Spp!G{Hb|7;m1tP9V8JoC z#m$q#-x%c#?g4GO5L%nTu`{@pD6gb4fQG9HQcIAsQv~tAs-odalvh%jAaw+pN{|{v z#vqc(E3HH($aI3tB* z&4_0*SR3(b#A^{RbD_;?2sUS-RRtl*Ux)Zq#A^^AgLo!`)6ML!=uSLA$zXqw2|gY1nTStDd>Z1J4E9I79`QEBXCOWs@k|E$Bfc2%rHD5p zz7X+D2Kyu4j(8X1OAudycqW7W5#NA#58|DOuR}bO!TuosZ6wXv4}&?e0U4ViT%&}L z`ULZ6#ys3Cv=W)%)ri+3UUn9JLPPKg3#}>$30{ZzRK#l#AA@)%gHI5jj`&Q(CnG)$ z@k|DvAYPAn8{#t%pN)7XgHI4&jQCQ-n-O1#cqW5S5N}7k3-Kk0uRuJL!6%4sK)eU> zPQ=$Cp2^@7#FOWB)cz1s`y;*?@opAciA?Q}crD^(wP=4Dg8f-&RY6GYkN8x?YY-oU zcqW7W5uc9uOvEQ6J`M3q2Kyskk9Zs6GZ3GRcqW7W5nqh>QpB4PUx;`ngZ&Y2N4yL1 zC5W#;Jd?rxh;Kl=2k}nC*CC$CV1LAu=dINK5K{Xiz8Udu7Fvl+?T>gZ;$`2W{b>mH zXQ5REA+JF2t80z5?+~2Kytv0r4KhI}u-pcqW7W5l@~4QTszk?T`3o#JgE& zB{H=?;FRS;62AU+lG z8pOvSp2^@7#HS-Z6YzX2cgFp2=W;#M=??LVOA0D-h3Qus`A(5br^}6Y+J3XEN9y@#NVwwLgT^{)lfz zyqkqqB2)V#UW<6yd9*(b!Tv0?svxBHM|>*cHHeQvJd?rxh)+j+CgPJ3pN4oQgZ&Y& zN4yR38HmqDJd?rxh%ZKbDdNqDFGM_(!TyN1Bi@Dh62w;^p2=W;#5W+`gLo(6>k!Xm zus`C-b5d%52&w%M-;8)S3#~+^_D8%H@iN#=q5TgH!Tv0?svxBHM|>*cHHeQvJd?rx zh)+j+CgPJ3pN4oQgZ&Y&N4yR38HmqDJd?rxh%ZKbDdNqDFGM_(!TyN1Bi@Dh62w;^ zp2=W;#5W+`gLo(6>k!Xmus_JKPEfYlk;<9-8?zbN z#LF(CPiP1}VWCw8A@vF3QxUI0d<^253_d}8I^r`CpN#l4#4{Ouf_OdRZHUi6d^X~l z3_d}8G2%-RZ$^9};+YISLA)LDF2t80z5?+~2A?3l0r4KhI}u-pcqW5S5KqqFQTszk z?T`3o#JgE&B{H=?;qSM&p>=O;+YKgM|?5jOA&8Id?DhQ4E9I79q}&2mmt0Z@k|E$BfbIg9>hBl zUx#=mgZ&Xt&O}oCLrCq9_-4erS!g9PwLjvuh?jkj_NO7(pM_Qxgw+0sPer^2@iB;J zGT0yS>4?und@|zG5YJ?=KjQU>w;?_Q@!5!HGT0yS#fUFOyczL@h-Wg`AMtj?yAWT3 z_zJ``8SIbv2E=<1??ikZ;+YKgM?5*3O6?CJwLjvU5$|T9mB`foh}R-s23z2e&Z?pz z*q?<|ruIjCD&jSWk3l?>!Tulx?~_D8%O@h-%dAie_eOa}WSz5($b#5)mRhj=D~{Xw=ICXa?3zsL-yV5b|N z5$Qm*6byz>t2n@tqUHx15-jwzQ0zU<)E!)4p$BhtJPqRLksr=vfVKfAZA^B{#4rmz zV#KY!40~7BQSZXxAMz-i96sW5Ww4)X9SP5+*>h)hp2tca?2>1>#pLFEBRRFip64%D zwSA(&pR@|AF)hCVNY=QeNxAV~&~|H&ii$vi#sFv-0W#wmE*X1ciW*~znnmbT|1 zEal{wKBASvs`Gkbl z(O!PwUEVz|ogBRWjDfF;-?y;vt44xt(F^gIB6f-?;uPp^-|zN%IHE;$j!&Y!^H z9Fme-y%H?M9}!-Prn#i3z@T0m@U(=MasuS(`5nHXj>IeZW;nKF?QgJ-f#>(UwG1v& z>j>-6I6Ngji5(Pi8)0?@MdoQ?t-}N2lH|)Z>|hV%!%jPaN%`~q1^PhS4*8|JgF2H_ z3}9DFlA2rnF4PzPh=rD#9D8zedrc*zF!XE^J#fNT62(1H!6CTL?H>h4n5e98s_=q@+dCGg}g;XxLqbogO5qpW8oN8WX zvK%Hh06)YYWrsqTKUh^{r%rfU?btaepv;+y9)M$_!Td+*$pPR8XV~Bvj?V>XZOD<- z6y8N_PL73qlLi)zFVHxYKy*8WoyyG%hEW3$$(}1;Q zIh+YBxdWN#b^E{`rX3_sjw{k{Uw^ocpN-m31K;e!LDf1rFrgCub00 zHiM_#% zImuf;At~>2dr$CI8$_evTq425p5(^d;LA&i_B6NG$y*Caw4e+=tU;co?@jn~e1VIA<$>@Re+*<`CSZCKtDJ-5H6WVo{Na3(&{_?jT<&h5&pUgY z2pvmG7=O<)*udX+T$S+;9M|C-l#JVNBBbF+8^P~45nI3!J|++o@h0*K&$;2VHA}_3 zk;+^JhuGw;S#?m$mKypbQBf`=AHDK| z#YF04tcg@LOOlMU{siTIV%(Z z`~%CfZ7m?SFuXi(p_=5%pK|=JF#N&}G!7w7KNT!P>K$kLumuj>NNE1Y6Zq3{1;udLLYq8i3IQcdh{zQI z_I{*yW4&J(JXj;?y#KuYUp?uAPQH@@FN_DPkR!^nvklPEg$=T#^oc#ejX6(y$0;yc z0S62J$R~ieenR3M`4o>3&LeB#G|rg2QD>u$a(k2dz#uP58f=x@W*mjRdA__1phuny zfZmVE9v}@`q~xHJLAR zK``Fk#0FR65iv}$;0m`o5(>^~oY5Dfk9o;KSfPeH!PE{QXWjhKJ3sIa-gFJ5*yiP3 zIgR7W8PK=ETd2}1hEBf@P&PP~WOYKs+CL783WekL+hGa{PK484a2>iN8h6vUipCGo zcrcCIX?9cdNFJ@_BsCnHrJp1PocE-kgmP;+VeG!e#zQ!tPRj$Quejlt zZgEo`qQj)1afb;h;Loid0cl`50b+cdmD&cbnr^|Ecr^fKv?k&SvkJ~srf7_J`@->W zMM?0liiJQP6QgIrJUA)Re?|gNV}Z{LtSgRzoc|_ zMm!3g9ek2wW@^i-E))$NZOmlosqwn@=)It-$8NMgTIlj}7XjLrLHHb{))Rr%^ zv`Ug;Jk`~UOk%1#(>Bi$R97c5$*8Vfo@1%5R%DX@GtVhh=MtHe|IBk5)zyeh!T-#2 zCe=AbCe=Ule2eO;MW(QS=DCFG;KZ@|pLrUn?vTjT>z{e@R97J~Y5tk#TB<7(nfm-Q z&&{9%+YcphrTo9D29|8sZBnUhZh1LR1CHEMYJAgv#-mOt#Is-fK8W}ap* zJOv#G_ABt+3eZk+8&A-=@+AInHOQ0U;QPOHDX=a9CFxRB(34Dp!5c;BNwz}tf9y%H z8?mYYM0yTiSAty*)M%5MWRQeC34k2F9%G7C<4fo3P3)|vnPSq?bpPl{9FQm0yfl|3 z>F>SC6qAmo!=8jRt2Xyb_TA6doA~aRO4Ipz5^v8%@0Z5X!To%_i7#C`O@}?n-|m;; zyWih?lPRW5n$Fjgw7Xxn?|#1C#CJbEO@}?n-|lC|`+<$DHi%OjYVl)rAq#0OeN`QXl(;Et&Wx=Qj09C=H+(#3##-9E;kfH zUj@(Y0TQj;xji9fy2$z@?kN{H`~)}roQ2kC<9!*o&YoyI8jwpT1Tf-OLQCRIB9a$v zan{5ZV{-tv$q4m`xBsk3i(AX+y6$p2zH zZq#wm))KS+2-@4Dx&5{LQGoo(XEjBg<2`rkxKT%7#k~I}r}1zTZUX25$%3qxm)Az! zu?#ErTM6YrE0u^ukP155Li8+?|_GSN-GfvK{j)JHjZC&|YFweBn{m8DGqxc%Sp zmn>78qR#Rc?p)wTo#k(F`)~30qi*p(-1&hUbsx@rr#N8;HRT@c4yD|+O!TzL`6Rjj z4frD2X?~)|;Red^HK&HCD$I-9|24_FimxM9spIxTC9U-pDE1teaxS)tOQ`~0f4Sk~ zPx8?OAJcC`t@?>O^2-?rA8NSJA_W-W_FoT=_QxDiXzdwWf9sV+Z z0K3flWd=8cRKJ!P+z$|51v#_+XHb9_W?TgY#D9SB>b2NPE(P}ZT$B@7^a^Y>q(H}_ zoa*6@)Y-TrRjXk=n{w1L(P<7yuw>Oh6}F^QkKjyWp+&=v6K#mT3gT@~qxe&_6}<=p zFjVL;vQEsBFB}@>gs-XQ_Jm0d|AS?!*0L#N8%&Frt6>WC0=YP`nm=WguZFL3S%VLb zPaQWF)-!Os)?mYxB%)t_2q55z)fb@;uoxeL)RvTB{WsU)AwTUEN|wW zP>K1Z+6VT*LN1To(vnrjLrqgfCDroHr0;NDnGCZRpC?!ZcF@CN;oWleF(zALyi9V* zCiYeCE6A$Ngvk>89`B;XB|Qr*tCK(dUrTF%ZWX?WnHLR(h9r=k;TLj+n3in$4StWy zRe=s{WKu$Ck$`tC;7IYoD*_^C)j6)KEJ?Ld&>z|Pqz1#EU>exrqogcJ4LtOONv=rp zS^ErCWqD#f6@U@ISYyd*fKI}a)zmxd8bo?0HCVE)S^GcBXSs!**rcZAk6Dr+yvDn} zq$!3Uu|V>y1|~gsLz&j@%jP6yyS98H zy-z(1K9mlWfgA22U{d5J-?iu1wQHiJdj5!Uc^{~(K>FIkK|&9IB&vIJD&+`>*oWRN2))kYFRSE0iN*QCoRYT-o zQj6Xi3YvhL)B_j>!by{HAHAI9hr4fdo64BW5U__eiPpjMMGa)4 z?%kk*lG}Z|Qy`G7DNAo43cW$wt*I&N`@u!v2Mf)=Z%s`x#xdP#XzhR7nwnxsWIAYC ze_v2eSwGU3=RX#c#__&9|GqUf#qy#rPv2q^7jaY8zv|1=x1jVc;EZqj^7Jhxz58*N z1-?B0zBM&v{oB4g|FM`f8hv^C7L>j`ExtT`i%DNO*ZcBpzcs}-gA0sXFjufR*_<+d zKxMW$MI1ONNeMGRiv{*97Df(A3S0Q7$qrv?#d{;K@ zMVKGF@T~jWgD@dDesjcI0zoFslXQ0W2frixpW%&5gRc+mNB@a*f!}?QIVAAT(DNtn zjQ?rp)uA~*9xeQ0W5dv`^}nYEyUz~&LNCU>pnX!=8wxrBu< zesbOtne?sny!jcTrLw$*>3IWGd70^;mDiWiT zC`MCc*oEz37X%TPBE#zq5y#^rE)<8=MTTDx7E70uK&d2)v-1XMrAuUai!^xy^m&Vu zrHhO6=G*cHXrzmh^A=@@7H3NrXNW+Xsg>$8^A=|q7iLNq6p~cg8OB92=~A7){FULC zwg=U2kGKG3)<;yvht+KlyX-GHNiJF}lP>;m$uCESpLB#1!|HlKfiF$_AM8m=4lHES zY&|i^f`1fddW1VN?8vlmpx@LO?xwy2CtlEn{ptv-*&fzJ{1tv1%syBkTPl+-iOHK^ z3{H_|mq^t;E;+(0!F@TvBI4xsFgG}2JGd$0SK^uo{WB`*GP5Wy-S~`Fx~x#T1R@!E zi|oQFO#^eCNiuJ+$~i9N}YbW zF}%h=h}SiS!%cm)Xn?X(*e5iMaj-KnHeWQPH1XLo!{9@SLn=hE8$_{X!q^?gAv++R7+RA!*eM!PW{9;X zhL$D9xI}{lmz9cZTJC3ovdN~nrBwWASN!af+*T^C*cEfMibgxp>SJ?7aW#pt0&(1i zs=+mhp?2fo4OKBass=-zg`&Zbl}(gRz_(Hrf=0#fF3Dvz*XSZyc|3|M4T{^TikmLU z&vwNXI6yeWnK)#FNLx`A2PJVP#*`&OA)&y7Dnvsz7zdZd$Cf4zDoYFnKt*C`X<}@y zF;<$iur_^;t&+OD#le6 z=S&PWCk`nz#u65AFXOWtM0%+po@-QdzoaT|yCgpexIY95Nu*gXT`W-k z0rZuM%c+Vv=?afa@|#j|Td(lBZ`crUA{6Y9G1f(hgGr$dcpYb#^twwb6ZC|ECB~qA zAF!%r7pjHbm6HF1D%fdKqvk+G%_LQBPC8gXaoa;G*d3dqi8$RZr0)JNwM(SqZl*%D zmy>FfuDGdG{02r7aKD4Qbzoa=PO9RXP4Syc0)Xo-$+c8PV>;Gtxcg--_pcVFwX`I0 zNSSDGnQ%z1F$QXHjnBfYXHHm|^8skXIH9QLy>Ck_x@W4W;@CZ04(l7sT zclBVXVEI*ppm9M}chSxPdWkYaOsz4t5b8ha5C%a*5M&FK(ByAsDt^{+(CR&@obK5} zMrag+1Y%$@cxxi9Fwhc3Lu!rC_6G~z)GC^l(nU}w(-qBH?j}TBir@64u97|v!B`IHgE66V__uai3#}CjRuxxB+eK*=X`8-oYPNQxFik&89D zsjoc*0snXG{=Z}Q|1o2?YP7JAu6){}_gLkO5%ek!=&zQW--5}Tjn3lI^Oj|ZmSpEG z&6Lj9NMVLBKUqp9buc$8%*(b(m;U>l!5JBTIWnx;5DwEtnDd-5gkMM}Q%aao_+}0= zn8Lx#WPo0}M3eUx%tawjGKI^_RQu;|?}wjpgkR8yA8#bdFWAW})ZG{kGo|a1;Z8$@ zOQ;voNuX$fEiW^J%we*#VfH0msv+~w`RREJGo*T$C&Nre_5U&j-5vyh`t3n5MXYp$ z3Fy=j?q2iX=6k7mOEaL%Fn^{K={7TGn!G+Ttp2|xFU(sQBV9}lyBrFfowwxQ?MX@w zEF!}igb`4rlmD2^o0k;Bo2v7&fW9q{Oqg*7E_$m(x&WqjFn@-7xnP3r5vai&_{gBi69rhIMYoR9=2(j~+-O9bcA!#t6SYx2@%v-Fb6)8Orim}u; z^Q=qP2}=dvN**Db?ybTMV^D6e;DqGWF8U571C;PBcz8CfFEf;g8{`ARCJDC2D|Mmf z-GYB1Il&vHjdcMH@*I6#dM3;m-Y7M=!yt+Bl4z?#@?)I7U!6{G z5N?GB3h+C!u-1bAg08u`LbbeFJWcbM%n%(fTisFEH!}G#`SHq8%I5T1n)jn1oNMsa854#`1LOLMB24M77pB7ZgGR(rI7Iu_n{osA* zhRs4H-Isve;qJDmp?&%Z0(1~(|5SYs%L*hqQat>Z_+j(`@@OzX5TJuV5RmTN@%T%j zYI`aOq>upKJlnKHq^5}o3xPgzeMS0P0t=^u#1IkpK$w*iW^>0P^!@ zI)V_}ZTyUlaXLLYlSxdY7pVIFHEO3+rqzH%a#9KsA3J!XSs+{m6xDEn6sA|4t%pEp z2Z1Dl$}?N3c}W`}uyqIs1+i~Lp(>>FC|iEV$A%vfCk6z^cgzSv@W&{g|m=j}itMU_ID9eVeh_~c0 zTVxBGe)0t9|DeMTo1yJMVa8BckioJNmcKRG`7lzw4GaC`yi6FfGDVBBVf4!jsp(8+ z^o?3>u9o}B1Cv}uKV^0JC0LP1hF4CDn4#t4V9pEEWSG3eG?^@UJ;968rEh0Q2a+*R zI#8dN3F9H`<-o29W!y!o&VP-y5w)(Q=ZKggn4G~G$|9@q{9j8|dD z+0Z>ra?VDk-fRLMTTvAQD?iv`*iiK}+_WVpu2vLRS|vX^GcPkOZ+@l`M%ru`Z&i5< zi}ONGj_0lmVBw;G#rjV=u2HRkbxA+9CcNH3HZab>z-Wl5Z-9X){8wSb4Aodze~`sQ zO=>SB0;55;G`n!@sM|J}Onp0wjmTl^TbX z8AD;MoDVCZs=*Zwvh1!Ek)P!kEKv&tDG<(&NLDAB3?(8*JJNR_K_+cZ}li(M}XU>~DI&03j*WZ}A0DgcxbsG8gZ}Lmz zi(k!{Hvbj!!idxniRw|WFM54;Jb6om`qkOf=Dwj`#FDDnOC;19diBX@_{Ds9gG9f6 zPsK#R51P-LGk0d@yoK-%3pL4Y{LDEdgT$v3d-qmPNQjT0Hg|~{fB9U{Q)YiAM;SN^ z`qT8DGTne2K?YnJkfW2-%Z*+7^poeiYP4EozbcRNxI8{OQD37Cd$@m9`b#dkXjOba z`LPb)XfwL^ugaWi%NIYU={aD)7Xvo!ANc8@{e8Rj+h6+Gfw3~px(_GR)m^*r(i!LR zdiQf3Ns|`rg7!i-S~~^8v~e+XuxXivu;o)lR-CS?oXcTHV3HV5nhETFxv75zr=bsp zv*7}14eU+CZG}n)yB@HdgYBCt(nm~FLw>O7+Ex5MeNWr7a80Z+=4e_C0a1ksQTdfo z#R*T8R6bFf(7U3tw_Tqg*Esc+a*a!$5TvQoR|aVs^a%=$TVJWrc=QRJrdbb%w{(Vt zU`?{2GFX#pNO(w-W~h8flWs_OSd(F>d{~odNa&`?HdJ=g*bNC`8mFN$Oye>nglp;y zmEoEOLqdecZK#aUcnk?WG|h&}9wml=UK(BTIL+!nu{c-LXL+2r>_pjy(4NJOf9xdx|LXCaAS1SRtwv}Qo=+YAzE~$o zPYma~2tqQ0vU)u)c+C#P$@|(K1OD_Kh=J@Ki0?qxISMM@uz7Q)&7A9h8{*6bi{K?C z^X5aPd#!iw-WMbFj?WWh#(5^SDqdIA;Bu=DdhvTk57|?tE-Je7V4EH!=y6d zvk)mACfS*?r)*cjeolJ*(U;%nq>9JVA31PFF>qLagXC~bcE9MZ%agPF$9L_2I#|=E4m#bN@l^0E!J`T5`v{rmvqM`uWeueUfRNA5LFunEzSOhAqbV_ifq6Pc@x3 zICTe>Cs#YBY)u;RT5)|ZrYbR(r*+y$RrT>NmUS5ESJfFS%$7o`y6t$Wro$+|N@n_^ z!m^pF@)KTe>X71B#hAWyTeeWuj>=bBI*j(KGEAr83rAFSC}HLX$r!(?&{Ugj-9}Zl zm9svPr1@1&(|6g{eN=TVVRp4-ieJ@ix=>>MjH+_0=G04G@T)X=-`82oscLKDyxWo& z{i?J)k8I87R8>}$oiBaKuQKP|idl1js%jFK?vPIPt19yT%vkdURW((;eMtJUU**ob zTe#*hRkb88ua&;ySE=|G=bEpmYD4vkYtjtADw%I>UUQnNJ{e}tmCf|4viUAiYtK?u zbv3_LHp{On;UAi^_FJl|A7&|&z3Erg@hX1pcT{z|I=@CX+pm&YLJzDxPgVIztD9tV z{HhpB#Fe!dscOg9Yg%M;{i+O0bjbSesp?SD<_#U^`BjCM{v+1^KvlJ0zxzqYY`@BB z8MtKq4XV19w6(h962Ge1GHBQOTU3>Mq^Q2*Qol-L9ddsCA5^vVxox*QzU^0~SyMX} z+@Y$nBPIEP%ls;{b$o2WU8<^i?&BSS%l)bf>!g_l_o=Gs$nHadEBq?Ab;{;~zo@F^ zxjnUkEBz|fnwO3hv{KcEqyM=UX!fg;*SsR!^vW^Ph&~x!VeVAnS7oo6AKh&NRaGB7 zP&{&%UsbXuYg)HSR8>Fxi;7OW{i?b(*=skYQPu6Ehg_XL@vCHO-*#-8LRI<6U%ET( z@vCCiuDG%3MXK82{7NtXk6)Fsc5US5sZ@0+`Bg4XSBe$K z{i>3JZ>JR%P*wf&S1S}J{HnTwy0t}{sOt9dYc55NUnSdg(NVOSs`5u(cPqZ}t70}? zx>2-+s&<_CUC*8Lt1>p-h}>30Rfk62E#yx5RfU^wkKMM7s%lT%E9L6^D(9ve|Q_CwJbjYTk5j-?q=FD!1mZ2JV7irP=&fwt-~I(vHNo4tm6!Y~_vVoIw;!gemQg|Hl|T4Z zsx4t>wtq!c8@^H8P`dr9aM~!lDT;>|}+nJ^4g=mo|lW7EOL<{i?KWncY7cNL6L0 zVhXy3`Bmm^3!eWdma1yT4BFE*+^?$GwrJ@`aa7fGD(>s95q_0>+meqz8bVbqV}^X+ zwTEA&+P>_b4iYyK6F4-FA)oHn@*pCHr8@@m*7>Du3+g--4g?t71NQ z@7}H#scOgRF{X!}@~bjF*!RTlsZ@1n?3AL1p7yH>KPY=)_bXIYd-{d)hhqFH=Les^ zv->Tox;FNuZyt*EtC~MJcyRXus>(ex_2-8M`Bj>ohkxCjMO9nJz4F&Xaeh_WPFMFm zi>a#YOh&=OgZ(P=&a=<&SwdAc<7Vx7c!*zBvGd&0J#SN0)0sEFe)w6x%Dwaa$9tAj zRm-?J-#c_wR^}}!aRdpXVf4rxTs&1cM_Wi@N{VLh6`xo|{r>gu3 zEB<(Rj$akC>p|e&i&V9vcBQr3T)!$~SLe9B-&5703H;7(^Zcs9UBPeeWreS;edlnu zHidWY>b7O?4VvoOg#2&2E%B#n-qroY-dj|a`>pl2ZcF_t&F=8~d;g%StrORnRB!uL zX}h((_uZkYvTqBERLlG-^X`5x?z>A>H51=0S1tFeDs~UB?7L4@P2X<$MzzAPa_^4) zV&7j>)iSZ@XVpr-O0{S3)qSm0wc*@*f2quVRq~#pp`Ud=LHol=B?Te8UzNRQ+{n+m zQdRZ2U3)^_@vBPqOnm#Zhp4K4((bQAEPhqpp0wScb)%}==RWy9B;T)+?S1j$XCYLT zKlwj@gjoHmn7uD|Di5Wq9pCM>c351}wRFzwI__yxw`c;~J%kP&zLseVTzA}Yw z@vGAI*?NCIkgCe+oJFBq{VMam^)G%NOI0;#$IC;D{Hlt58!ey5QB_mjiEl#R^Q+wZ zHh=N?5UOfP`{w7+ZGM&Nv#nP@A4*jl&Y%1%w8X1=1Kyq;Xg?)-e}Hsg;p^~j?xRno zA4uHPDIvWg{+j@J8MpFWANwQU3~R`l056fQx@H%wohTB@FN_ke3SC#$Pc-4BAhFgN z+gUX?x$Y#qi+i;pQ1_kagQxNaROo(Dy#18S&?p()sV4nkyz?`7>$EMdpHraB5J&2B z1p!q-dD}L}OZ4_g_(Fl?vESik*pcx$ySuvu)2;;s3VsSGt?FbS{YJ-ikf(0gkeC@E z4<}W16d4rCGfx!@U@Iu@kp0@ijp-pJ0`b@18eglnXXupjn&LmJpFH)PJYOPq*yXdv z)O%+86qS2U4$|r4c8PNJCyL94@3}P9w$$}#<+iC6OVrwWd-;1IHC?puHr_9!C#-sh zF3Enz(YI&1Hg#X=qS8+~spJ!ibCRVe4uGn|6NL*)^T{Q_j2?Y{36O{$5?qju+^dgQ z>rrAFJrth$e{Zc#2ACkg*qZ7W47d@ow zGhtZ|ovKABTd3ES#!Gg7E&Ov>u_*T`*i*>-m66n~Z{2@wSRqJ|e(pZlGaL9Mv_ zbmW1xJr8siRSV;_g~q$%6_KjB85g*q>)P07BkQKD8WH%Myo*%gC{|qiU9ogcr0Bwy zM+={mKO&Pj8Wg|oy^}rW-6Pgcrf7Zr9#~g?H=|>TAuv5i^8@$c%VB>8J)mwoU-eX2 zWjcwAME6C8X`<;eNy9rAt2)ge^F^lC*wRTOkjww%#PBlhNR@v4GVW>5kl!k&1wD8g zysCxwN}}fNYQSe3Z&G}+R={!+?Cv5buhlN@0I$_9{#bCjK`c_K=E|JHAb4f^(}k~B zlnsG*yRXWR_yk@L?Q}c3mk1_Beh}}dOb^!;i^Kul`f8q3v^*XVuHKPgi=TPgMs66I z)0$|M3k+W=_4W<}RrO}!kFbGK?cgLG>ko(5!+Wm5Q;x8f^y07t?Q~^4yjps3gVE4Y z@~CRC@CdRy)gyd=yKzO2qMENb)wPA5Q#lKmvB&ri0hFf71!x%)Na)mr)Gw$Nobvc|srUo-j_Y z)pk<41%^T%3Q!d;dBi0Q7$FYX@UV4~Tn8?9RSAOn3dFw-69jZ~PS0fRMJYX~>UH&_ z6;}sN*ONW41;rM_e3>ING0`IIUVnPUvV_vlUBUwa^DRgZ%1 z3qi8_rKvH+xlc(Bs`6D~a2rE}{#B)Cx@Sd5lP92A^zqT+Xx1U=JHGSn33c9ZvCAYH zmH(=GwZrV_>`<%R!a)*YtmMw7c*Po-{$6xOerHi)K)g0RC*jY&&c@Edg^l{I*Hk61 zYNuxogSxj=uqNKV+R^&Dt*U20@j7|;SF7zd===(cormS~vxf<$#^_B?N^X+!bSC9# zcvb0oH8Uq(5k)!9aD>bR19>bD{YRG@YaP5tZ9PJt3xv5qvNw^k+yp;`RdEm+r05tb&240)~irNDI`bjq98N3>SnH}$Cw z$Kvm8>a$_xv78)XfJRAL<+W|8f+|VwgAN^BCSwQ;lk4Iota!=B{qhNY*{$xvtyIS>j1A41W-6r8ENr+}sPLsQGn&Nt2o0nBi{HLihNt?Unr>ldZq>(xCgqYj#iX_HY z$Y*8W=pHx9H;jy*Z|f*Imhh;mR~v3Q23pRJl6a^Zy1^ zx3#fkpoCiG36+>I?CqSP-{@s%HeHa{BEtias20jwoURuHib?nKv`R*NP?4@A_N=gP z5x(Rj*=K4>Nd+T0h>;xPenbDRm!vcAfqX(gbR!`N<@J*s%1AadlIr;P zg|mGmdyVdI`vys_0+On>B=e^+Pp+aQOL8re3LnXh=F_@?NHPRSzTS@HDn>Gdd9rIv zcl{e)l5?jI7u`UTvxq0Bwe@6oMsgM-ImSFw|DKnm%+fcg7D*m}M72;}KgoIM$!XM+ z8IBKy%X}oCywu-z3Q6Vx$*{I0Ymj6fCFwL3Nt%5m4?554h9b#uAeq&UWF8|K&OF(z zxVt{XOY*_=38KzHtTiqro@_@lf{|RxNX{&orGMW`GTAyQXhMJVBq0gq^^;tQo@69T z<97@5eIy6Wea3bgNxlOlHEl`ePiLNdhmv%!+AE3a?(H}($-dJKN0L!Ma%Ve|?=X^4 z%##uB?)sTtk|$rCDvCyu9}`bbZ|lh?7|D+r$+w+v>Ob_7G_P42REs1JK%!bGub<>z z^yGBv$!5o1;Z`5Xp%0$1okfxsAlaua$r>bSp(M@bW0Gti$u1+#>&76-CxK*nJCYVg z@=4~&N3@~(SzeMazcxcO7D>XG-0A0bB%fj=4>FQg_iX*gUXsqW?*&bG20ckgLV5ip zzd}zklIaQig`fCHjygHO_AQcJ4J2dQl7#V<_O7cb$rApeq{2sX0Dn<88A-+h$)DSi zT+K+vGEY999jbrROY-__^F(hU$zO>lUv2BjL5$?DjN~@+T>XE%BxMC>f@+cE0Z3E} z<@J;N9X(S-s?$_p)e&Nsw z_32tR*%W84b4xCos{Ye5mrOL_LBX5KFXNjfA~IXWIj3OyPoZQkssB`{s_AQUsKhBT z<`Z`%mqYtEYM;6ix^*5bpgxY*NveWGyCrOJpOGqo^8Zr#rQ@F0WARfj4b1p~c`SH+ z{HMxMZ9V3Eje4x}dg`%i%U_a;P;7hBrN@4-FJc}`O#zSf4{0+VPFqhsHY|mDtn_Jh zn0}tuV=b@e8a?Q-SV+|PS{sk$j%FT<4I$%U;<1uU+m~LC={7&CI5Ut{%ReAdHI&!y zv1dc*czF9Y+V-AKta9A1-8kGvxi_U~Z+h1=>@&!h6CL?*#`BrA7m!y8nAjP;C zMzS0dRYQ6GBr=0I!SS66F=`kjJXj#xd}+V)Rv?ZNp7Mfb5}=62Znh) zd1l1V>O3Sl6-X{@M{*M*IhA>GP-$38rq`1%y|K}#MUqR1C)<&HnUP$=NdD%YpLxVf z(q8nk;tZ1fgOG&s`bn-pPco8UC7yJI`baK28EgItNxlmtGuo0g&tRT>my+DECQiE8 zNAgep7xfw>ITJ|kXh-s0Msg&aP+%9T-%D~?#wW&1Bzb^%vK`5}jN}1EGGtd) z=1DI}-3R*>XOQF{gd~*LPx4FjBqKR**msUNAIa6%2bq6ClJ5b@?6xG$Z!k~3M@crV zeMNf5NAlUg-_+ZX&SLTNZdpj+$9+v?0kW#FKBd_2g1U@(Lr_ z``Dt)GhUMVofj122B9Y*Q8kp;Px3l?@(t?A&#NywM*2u@S`lZyf+V*A$z^RxI+5fy zN-}r-66wHjZ=0O|{O{_IkmPb8dAl9SZH(k{=E>2X@Ro&MlJzscG?pUCyTp_2NUmTc z?=q4@t}M>q4{K{Mmq z%WTj$d}r7qofpx5(049@LBHbLtx`JZ=e{Cc7*V^V{h+`87Z~()lb1xWL4QZMdr9dp z?FapFh0=>Al_{Q6JM0FL4T&64Ei5_{j1?)ug4woonEN1T_E_Dd=*bPWj2Icj8Y&r9oXC`fX*OPuX?DmoT z^7;_Hm*mGla$8%Hxw9C_k15H9OCwE@ zOY-^IKZ`PvWC(7yN)E_W;Sy+L7GNNbX^t zoRQh1`E4)B3$w3_Y)G<#c(NVI|1gpjjAYT3<>@!QBr87ql1qISJxNGHdHp00qbC{3 z70=x>obZvX9X(Wk7fJpHNbYS*GWSj9$^TH2#qVB~4(Q>nt`jYP34TG62Y}>H?MVKI zkvzaW`DR6r=4D=zv*z3pl_E(u@#LFrJ$aCkbTg8B`IYH^dPz2y-{f3KavvlrgYx=G z{)V1>lX~*Fqcmz-!7{Ej3K1Ib(M zNbY4M4>M2BQ)`-+dr97#105uiY$l#;NAgQXvYC-QwyQY(o|k0Ifro=rhoUD5Nhq(M zi}cn3)y1Cl*M z+YA+BKV>A3F;6ba&@`{`k~}^)sDlSdY9LY3?6#gf&PZxP$xtD>cx-$6124(!F9rp> zkmNo{R0ieslYBCi4i%-dsV5g5&C9v(Bl-J-RDCOw{0vB*XiKshNq$C2>fehB{L@GB z^vEP(E0X*MNcL+-@-s&A8|KNSrJClIUXm}&d$@x#nDwqPkm&n%Bu_GuF^uGISKfzR zY}`bxIQ(*OYASk?kc9I3Ne*EoJ&fd+!&m2Y3iNh7Ehoq7<0I+ruy{X^Jk^$D?i}XH z{gh_)l$D z+xpEum-_9-LF%_d(=ylRq}ey6$su-FZmvdzc`;&Rq97bzPN4@@CZ5onEJpiq0I_*oRdY*LA2a2isN` z#}~A^R9~mn#r017)WA7Ds%di1xNI*~D68%Fwp8`=7}YN*)%xk4O$k$dRJ(~z2VY03 z)_Fkn%eGXT7}flFlxm}D$A_*>UaIP&`e#gEA=O`?teYXZpXxnE^%q8UkmR$d4Ig@` z)<>77H1WyuQIApA=Mwb{vX!f1um*;iyuGpWPpJg5ETSvP&8Du zK}|t4XF!zlHNFt@!JtB7sEANxm@^E69FL<^YTnWt7M0yhF<)ewGr$#ml$hSaM+rU( z9~GKi@sa%3+WVZtU{?3{`~Bx5p0n5ao_*GL?X}n5dz~|9-WI5uk650zU*M_U!B%ZY z^&zEthf*D@yx)7>hXU2i0nHN{hw)S&0@Zu%s2-wJAJSHR!^nF5BvLI`o2KMV;HiSH zC9UpMEm^cx4-u-H(wg6mTP{-VCkyKMGf&l#1yn2DsfLG;h`u_DwCa+e%UkQ-5vZ0P zvy8U4@>HJ)fmVgn+gjDjgWSV;A_PZ~s@cl9eb#Lis6H5=pWHZ-r|RW#B(4vfF5VM! zRZ^;69(do#^p^2$uYP@mzIs~SFePsyPZe}6@%C`LSLNiXRuZZQ(z8B{bBI(2%Z7Jc zG=*->OgpN+l>m z-~4ghW|8U$*^-Vw^Hd#6fa+m)s`L0(T|!zltV`L)bsq{;btf&e>?3%p&tt2?>20mr zg;ITbL2~=keDxcOkg{RsDs4i$n^)RK{g|_N@#zS78h*U#-3`u!Yd8(jm zNw7OrCr|Y-q55Ec)~9iwh*ZbQ)^}Vqm2Xv~TH{VNhi_F%HKR-Qwz`i6s^(LcbbAU< z^(Ac8c2v7jsxMKho0PGA*L^Hdy)meHdgDxZS$Fd*cp@RHw>5>-aNI)sYQUkGfMW<6AYGwCc_-mp`f7 zAy6&-k7coa1yA)uY*jeDtyTL_svlCS+m-M2UAIl3n*Wr3R^vRLY9FBbuXa?AQmTD` z>T&W^nmLf*C!}>E{Ppwx=-)6+<_jAe(Ug|FwR*TcTWJKEKwQ&vjV z@U&4{U-)7YyavdqpJN^bPhq5Ms|rqd-RiSCFwjR;U=6A+Z{7vw?x7qdD=?dtQIQX} znRis$GtFOA&eHF#?B3s_F~nlaULqyL$9tn`IC|JOlKR59(FV*>)}C@XqDYu(YV4M*y%VtUFLg_ zNw+r^ZS0s%4#w2lO2^2%7uu&6#K0p%%3*aY;(V2Tq!LXylp}0XO$cn6F2k~_P=3?` zzhUS5DLg$C5m^kn_Kd`5Q+z@@;p0fjsSWnCEesz zK4${G&H7_nuccb`6nRxQ%N#!scs8!wqe2T?=cgXGlB?lqw}dc<0-hRjt+vAxZF6qc z5O>IoEX4==8XO93g=L+ce@-acoECOjcE-w_=+Pu=GW8v z>5aD=q%ocRW%%ZUP<&u3x)VNCRxr3zGyDZ;&UVB{f$HbF)E@-5Bx?(NwY}1+b#LL5 zN6rn35uNTOJK>IQr^aQoTx;w@I~6o4E7#(qVs*CRs-oatBRb(@h5@&9701^qs+pG* zej9t%*{rL~jAD6YgBhMjG8lWoR+?)zx&V0AEKJ_ow_=C>xW7gE9UP($J7vjFuluU< zl%(>FucVFSgyidyITrKIUEp3*px@Q#8iCX5tFf)pt^Dgffze7>KA@xUT=COvQlD%on=gheQC9^CGgO2xi?o}`7Y@VUq z3$Utl01NvWV0Fs?W;qD3+Svfhd=g+42>TvjwqFqT0ATu80oLr&)$LWM2g=WGaQWB_ z=LXcLYUj`Jny!}K$g=fI=%4BuIR$&*$4><#%m zP+osiSsa|%J3mTQUgfhlpb;dEfLS79E(w^JAKhgidA+4#m<|@yoQoRF5`y_6=7E5@qCF-O+#nK+-Ji%E!!Tur!C6wSn zQTbN{<$FKi32xyDo)j_f37D9%0|kPc(glL1FZmV(3AW%&5pzJmT!Dvkgcf{TBsiES zh!Si;5wlaoR1Fc8Uo0r^b(1IfGEZ=rh(QS@_?xKwbwT;w=Rq-a(VINMyCUXS0TXjW zRQ~+)0>Qcyd<%jE2|f@p4+P8=?Mac~yCT7nJVBIT3yPSXBBm-qRGt%*_X_f%ebB)Z z93^5p zg40FJE&&sh2^hW)E)WRT{fBQskRZW)5%WO6T+x0j65K8loXHbJ3AUh!*(qYGW{Jvw zE-3HyGEeXzPjI$~K?xwV@kv3-RV1eMKOo5>34Bvtv zA$?H991t*9N&v%0(On|JbekKnuu1}|Gb#Y3pG+O=WM3b@Ke^D);U&?MUelJ`(@nPF}HJX9W%7i%T{ z9y8WxeWf=_WZ}Mh1Hwb(^?n{RR&@YLF<`tzOn`t1i3CiTM`B23%yZGI@_65p==w>{ zEUkHTNM`SJko54~8!|}5ED$i+4S-o0qFYjarM3|a8)LX=9^%6-vW{~(e>Gu zB?3luiN_o>9u}2fEhw+(0*WC)2T!mKgAz(GL{vUnP(C1sCm72U>?UG{37C+4QTcm< z@{=stl;EfsO0Z1CJPQ(HgzQqlP=bk9M1n^t!90*4L8pj;CoHHDjv0@M1UCrEEBf;U z-{c9lVNgN|MvKa43Cagt<_Rw42@Vx8IRYl+hN%2mLHS9}rIg?gJi*%{=9+-XZU7A5 zf0!DRJB>1&RuuM>1@hng9eV$+&1|^i>SW)?ng7N`_x>6T?nG4RlV(1PEJ z1h)&yD`xWqckl$;Fesq}=ZnhM3CahQ@dQut1Q&>y(*h=Bo2dMAu>wKoi+mph2@>2b zVipLP>;}N_E%=j2@EqTQAR#UIl7LbDA`<*wBzQnjUa^cPc#tR9hCvA>m@g{dA}Akl znaOrFiJ4Io6yS7f`spbfZ<#4rbzH2-+~|^Ehu7& z1L7rfah`A222XIih?yy1LJo+^FB>knsO1&D4}t_;^se{|?vMAi0bKXmLIapvu=ZFo0&=!U1&B z(=dQm9Yt`~T?Fex0c`vM!Kd?e>tX5lBh>kWd5qtG;VMhZuW0XsZbJ<}!153!IhNzF zZoL7RCgvZoZao7Asgn%wnBlbt46+f{w&y^Cn4d%pN(jdHGr*L}=7B+$!gY-vwJ?(2 z0F~y#i2O20qC95!9uzUJ2$+}$fU)_O#MEa$SgtjDbk!{_e_#7Mm?)-x(z;h+8UthW z*bxF|6G#Z=iU}}O`JML!;2jZz5=!u< zsQe{C`QFDtF(i1EC-|F)xh`O0&Wp+)SRoKBX{7{Dg9HiQ5HaTk%#}L8@B~{01c8CD=<;ew?7Z*JhsJ1fJj%A_gUt;7(EbxxED!Jr0UtAIty=y67Ge^MZhh zIWH=I;C+E$$r!!`K|=bVh&eA{uG9gBC-|nIeC3lo!M7+u?KlAwg%V0|kf?lypuE?A zc!DqR1fLQyD4_(;h|2F0l<%E6nG*brC-|L+`CP!n4PHXynwk<2N<5n%Vmskh}+D^bHYnR={LC0YjB9p2jOb#<+tLtN;lTY!ETE z0_K>V6rWr2n1C#M1p%M!Dx_>78Egw0_KtJ2_}IA32qZH&k2}pCt&y%oFx+c zoD!@6328wQQ!8MOxe!AMz9cBGfE%R5Me})rUx*l#P=fbF78Egw0_Kk00C6u5qU}zr<=_K^QVUg5DLqURlFi^zk1x(01!0>%AS!}_bd>;e}wqT}+ zIV)hYoq*w6aIQ$Oh7zm*328wQQ!8MOxe!AMt`(G5MDPUH@dS^G7?eQ^ZsVn2;P%`D=pmlN$E$eUK-ZFJkTqm~6{lfuL$3Pw<%O zERKoeXTSg&zrY&?P%|9btKJT$Z;E$%464`h6}@UNZGj1X-3{LH?H6ouRE{l-VCo}|k1UpAp;~F) zk~LrdokBY^%cbb_y~U*nOrLbtPxc6n52E*X>(_z1qXL zY^JQ^>!I>1c(7DkhzHrYy5MgktFjVa+U-g$x8j2l9_jk;v>tJmW4+*AM5}vSBwt(o zV9yv>>dLX{l<*FbQm=H&v)ziFSyct_4iHI{Nzzo^-1!@WeV($aOEO#|Nd3GSu92=^ zZG~(6!c4z zamgFr?^{9+zZ+hb<@G_9GF|VrOYWguti?wV;^2G0^K{k@agu>0PQMQSz z;5i>NKIhY{DKGVaH)eFx%i!%0mtFqw`V4uu2&v@@ryWR_dV#m-w#Dg>St2qlp(!H4h%N~yh%c_Tj^qE&m5^Yh21P-I)Ed}yGh4^ zBl^FriiX$zBsPUv?BJz4S2CUOV5l@Xd8;N@04u=48{|0IMQYgY&}5%vUx zFlYD*2k>-O$=c=SeU@vth;*z(@*3$OLbcnjd#qeEKvkKp!Q0{HH-F>9U-{-%Emz@Pm7 z{(qla`NP@!Q2W_)uQt7vd+yppsQv8rLsf&k&+P+v)3%r&@!$O?>3hz-!8YVQ=Sn%g z1|DoSpsAN?UcG#H+MKl<s((Csft_|9|JFc zF$T#E7u37WzCS`Im#1r)97j@po{=h~S^_@=Z z%8@Nm<%MI18I%q^PVF-M`=X*29+)dJTGSDCIX-y6S^qQ}@70zR$+;-NDk~LwH0_7X&YE>ry|`;&sLBRo&qqC+)JX zTMM6E9T?d~RUqlL$r`)O+GShyv-0px4(LcDAykglmCJnKyBb4_4a%77l}3%Zd#?y) zb^nkSL$A|Tsncm@tm^C+C6ToXRZgSMD|$-@cwa+j-?GvUH}N%J@PwZ-=JSS5mrI!a zStdn!lZO}cp0`Jm);k~Hn-*x$**48;@Xk(zR|(ZhpWCE>7ec_x!?yl=1jZP(uEh9N zfA|s1a7+J?97+Gg0;#j9(%Sj*yW#jcHl?;!_k8DaTZlir+~=aDb04F`oYQFVUAEI7 zLy=51uVk0^4@O_lQg4r3#^(@RaetQC<79~^yyeX%kq@XnqqwJA3GcPC4J$304p*EN zU1wWxSx7_I`SK}kuxw5ieM(l!o$6_gNYKU*6HkEHATD~z28?eHzZX`qBa zyC;H(|T}sFzGyl7`ZJ$t~VG;Cl{Mi-*|6aL`k8VDUgIq1NA!L zDPE?}FRyj#p-fcb#O>ABJ2ju|{{br`8R5Lp!4C-(T%FLj`Y_PpGX zDhZT#vRJK*6r4xu|Jp!l={t=2mZ#HcApOL+sy0Ysn!qS;%3&r#`i3*%@@i)O6O1iK zs@H2tf6({H9>uKdU@=C6Mk>+=oPIGqnEjqk-P@vCw~IIVG5?X9wc|v!sz-ua>7Z6G zQLX2@gIZCbRtHh7!Kl`oj5@nbtxc%b7)H6XO|9{$R!_z@MO3T&2~ewZGdr)mLbj3_ z&@~)FRf~7vd2L^qk!mZmWQ|Xnv!tImbK>=?&wTyi^@fQ`^&)3Sa4J=5g;f`%k4~M& zzozXKZ7{s1O(-pkfKu2@a*Usr%RZ0ltPfhG8d(6Z^BmQEBsz!`Qu6 zc%0RoR@)%mP&d6u=2_C~dj-4>QTmymZQz=&i&U3;sTZj_Eq!+pKIEL$VL*ksZo0CE z=j*TGd&~M7nX(@6TE@7f0;bLq$S|{DT$-VbU~K(t0fnv&R&f`)i8<#YPaQ%~ouo#4OMVK$bRw67OV7Cy~im(!d zJ%g~G2=hl6&PUGUd?Xv^BO`D=QjW0c2nG7@Stb%)yYuK{dZBEXWv0T$&C zupm!>IS@7)V0AqJ){L;#&j73zVHpT}3Sn;}Y&_QX1i;GQ0N4$LwIFN@!X_f@BZN%_ zSk{w9uTLx9#Sn@67_6Y$>H@K$M8w@imvghNm5%FRx)pK@Na)RM4r_RYXWT6__4V4=Artd`x_R#b56l%3V$Q@ia~1_parpqfMxP{ji*5^{4BxF-6exu=w8c7^XAaxYB{d3W z%yEo*NK%O@lta8#;duM1cy< z%=hk8=*%-n{$>&R%_m%o$)RW83awtT)e!e!WtWJJ(#srqOtde`MzXQvk{i_ z%H_Bs_V72^;HwT>B~kD-h%l9Mr8ZF+HKtBEJgPw&Q6^CopOnM}Lk8f0WB>)gmm0hV z0AREJwzT(diNY3jzD~Kw3{^cF4BxF-nB`@L_mC(*V&LUt*(F})ENl5_IrnlYd4uh7 zNuVyY9Nv&Sq}Byr9LlnFb;bqeSn51h=*N`966AL2ZgnuM2X>)qt53nIf1IU&d>5${ zSN*%>ry{FleuKO$QDd}QQay0_-y7el;-UJm1isw_Cb4FD!n#>@odBm%-DLm^f0i`af_{FRj9|MAG|)Us>rB@+H*~H@a@cosoT-JU@n= z*fAx_uDXWGQ84*tOT4=(UN4d8ih|{nb++k6N4>Uhv>$w-)9pf??`!tqKjF?Ar((FV z^X)?O^PY9^ot22llcmrTls@BIR&GkGh-~aW+o=xM9}iOm^)`QC=^E4`y$EY8N44KB z`T5PpXk8a0tlNB-$%Zy>k#`s(UuBg^YszJsA#z2~JVrHgmDUjEY4uhUpAKAP-Y@{Z zM>9CJ!kAj!P-y-zc)>+4{d@xi>EK24bpxY&mqKb_+#-@~~dw$Va^h1Sii^g# ziY?QR!jPsuYzSPG97xqWTVZEp9-v;Wxx!^V-muybbyk74=?=ER_va?43!@TWDuI-c zHi)?>eXZC#E`G5(v3vhOpM#Q)0kRxMGR)RP-apz0CShI!;LAoE1H-b4{PEj)=k@aW z;P8=Y`eP<#x=uX=zB9B*dm~4dUmI_MCfp@|UVpy9ke)TFH1Lc}HFk*nHT{?@$eCFt zDGP$m_pduV>xtl(jG0Z2xP|8x`?frPyXc?h8;XC=*57dadvVii33*MC5_~hk;7Oj( z!wR`2F>Mp{WnGW;*~-o(D`)GSK0j^=4Af`ImNj`^+X8-@X?QSF&+L+C0J`>Qcq#V$ zz8xxXYv|L#4*k;hatVBmuS>bHPEz@5%fEfDZJAcO(wDrodPtYjExXh&IF*v$J6My=X-tWYzBa!9kavncpQw3V94kF-EN5NUO4%A-Sod9x%mx zwsc|8zYOOF%(p^f3cqr68Xx#-#)rJfQ($=GT86oHSEqu7$ILi&v*4WUI8NQ><76ww z-we@}&ZqXkwu9VA=2IPEA7k#t&bAK;AtH6v z?KXB1*S0^aF2Bz7-&rP;56zRo%2+0kwZN8NlXtbw^mq1r2gBWV$RR-X(<84fm(ZhR zjI=`T1Lsa|rsqy+dGy>RItavZy~%Z}3vf$Q3G})rWmg$V=Q_wd`g=C`r4Cp8{Eu6ziq+O;W?ujMVNP$!EN3RE?hO4@Lmvvm~#VKaMk3*nZu6=%R$&MtgRcs zN-#ZJkE^C))FH85-c?2B6V$ikiErEBX3%3ZuJDVFuSeXmz8mph>!%UFSt}!MTfdI@ z)p{}Fmi1P|O-WnE)xbqbwQ{3>NW_p)dXl}2`B9g++HY&#@_*sKR!Dt*HvG_vv$xWA zKw{OJc9kc&(%crS7 z6#%^X;=#o`a_4V92=HwOe_FYH`o2$o2KXmG-HRQ&t9&`+VXZVj{MG(eDW5xqUk4b? z|Bgid7WiQVn0mQ%K6zo~4VHJaEs(iWCR^-&vNV}dpI11d+4gjUZKz7s6<@|)j4xw1 zY=z%#mdRqZkk|Xh9zVx>A39`Xd4sf@*pK?RT$alBXBFp5LP%DuSC(5BRHT!XT70_i zR(j?ZTU!t8KVKGu$-GKu*R$9GD^t}CTRMsz0eU6LYGs%;pVE_+E&8@D=>1=VFC_C; zMmKxRgr2uQYon~BRw4ET#k=&%-8Raf0bOTB-;g|OY3qXpQ%Eu|EMVrlRP9lcUdP*d zKjbhmnOEX9c&9H(=6wuruLmWBWFF077AxKUf5>63%xmV>QQ97Lra$B`ohgo3=54Zh$^9XrKZWydCEbz|!qPHzqi!9orVAU6ltwW9!S8{=i8obX# zX&Eg=>APsn~f^B8M%67v>`ThijXWeAxtB{NT1T{N=&DAN(`{t}AR6P}acK7c1aD zh{I0+9P@{59sK#hAACQ&RT9oHy+9rWGu>Ol6$9mU+9Pj<0J}CbgMK$Z=ESQpVB!o+26CL=?SMbjOQ`>MkfVMs_(L9~ z9yB<7W`W^6fG_xBe-tH|qQ{!D)8=L14*)N1Uz(gd2Lt%W*GZTI}IDT>F;_OLj^QL5{E?SztID6sJ(P=qxX-jiPXQ!nt!UK!rGIP`V zFHTQinwInUWAoB7b5c_>b8{Z87td^~7>|l2a^3z5(-uOlDOssG@cY?|5HKliX~w+V z)XZlVraqrWf95zNJuN3=VOsyCIjPw>{j>BL(e34Fi{`aSX^o`ZKV#qkUZcg?le1Fi zw&}w2AWDcTjar;NB_lH}C56{&?)(?Xg%;0Q0EWV!^~M@W)dVv)>*W-{j7!ZMnE}>; z(z1?_wBBK3)b_Nv`;5{sAFd@R90G;NMBJ>)b z>EpVMV1&o_8^IKh?KppOQ0zH>sJeaEA%{grCG9Xa<&oY)LPWd&`sHM2fYUI4=|4=r zw1pWt{h(o(e)BSxrp^H`Lyzf~mAZ6k+ES+9gn{iU{gc8E5inLVGKfy}(+uU?5a-&- z`Z3JEJ=@EiLl|Z>#5{MLHkM(wDcZ}N28OAG+7*mMyhceJ!@LdShWoiV_TfjeY!V~M zS4p&Lg}fNfz*voc>YlBws4HXiRTWC(eB{p*DOSpDGCVd6{?3nUZAHBwcYG#@4@_!p zMGlWUo)6;8nXRqJM?5~Nt^Q3Q-jveXirgMOj`92e{6(geqnR=@&-*O+|5H#daVv*I+2U4~LOIK=e1Ay$^LIiWFlX?2 zc@X8Zb0AaZ6`@9Bacl+c*+1)#7P8*H(DU%p(Wq~)s$dVDj#O@}Sw=EAsv`gMjamb2*`-zN^X$TwU9 z@ic+PBfM?^lnriWIg}&a%100b=Y0%YSQGhdVZhILKgRP@p)ABLEa$-=Twgwq-B*&pnvV{%V;yMi1WVr70g+E+(z|w`ROT3^$U--i@xhEcneH^np^Kz$wVW#l= z&CvcE`F$LlXCq$0FxdB=;`cEw4Mz;vvJUq9<38B8;S9rE08A*9aqf@}TinObYWU-K znQdwC z2n(P;1JXqoy>#20RZyjE{nmc6_{Zbz)_3%9`^ltu%A*S80Ojvyi#k7TU(&o)eo7aEg;(56+FBQ!5*ku@1Nw^SM4z^e3 z`P|g(d8CfNnE%sS+H40Ce8K3#sxxXZG&$2F>dAqFb#0%hr-lp}7_E#xQ0(o!;0`z^^$U6e!CV~eqF z{Csuqr-$I?3{DNvzi^5ffCU{bZ<50PV?JdH38M!bZt;BlgK$PZDJeN=c{zLmHYq7n z5|XF1m2vM&2n={WUhgy{$0O*)EqDw+DJhv5u=Y;Pj26o6>!^eC^YGA2syju|`h@+I zl(~x+Ep1ceQ9Tl;Lv96h$b&lY@{jw7deG+h1DAPlF21;gh(}Nd+T(E_;KDmCJ^E-J4N?j73>?xbC4W&z*5ZssVAZ8U z9nXw2O_(IMOmA2wVT_&*b+~^ZB#Ixj=|ad^^J zj{tuO<3$0Yc~Vl+=BK1*r!M3T@@Tsx!+W&iKx4!Nyfho{zO(;)CIPZ zbj=hvIJGieljOn^x|4%`W5ZRqG=B2%rZJGI`)*bV97-s;o(P)_x9Am5zUYPcN+?|q zglgB^gFU#^8Y!tEnH+&S#F`|eredrK{_{(yv!7#gkF&FCHEVtWZMlSM%`_)agTLuT zSgpVw%U_eSU&2<$ApPXlMz;S?{S&KS=DS#hU zuqo{!vfPMr1SG)T^n~(Tnn>qx3+T2y(C*CZ%6eF9E`vjj$^GbhSN<{;E8wu*`SPVG zXWQXb*sN<&Pj+ntv=cY0)^=Z}Sz8KN$4Zo6_orKT6no*$h5ZmtnBHe?Kgx2V*o1m6 zp*Eu#FUiePId%`kGw)nrtGI-EfhFr3Z#|5N(Yd#6_hfM4?AZMPgGw@fMY&`5kQ*=w z67g%M+-YrP*F?h`TiG=szr+8&*25*>=C;ZQxs9BPTd4<)9fK^6!oe0ey#IQs@3lME z9EI6fVk=$OLR~FNNgX$p6I#*Mu>z+bVX}jl9f&E=Gw$j#e|BDCE z=9&r3`x}=9Y-j65pbUZ93Y?G;VDtW)1Xx$Iau8e{KQ$|(#l2zt9{Z*N_Sk(R;eQUh zgU))_0@%;75j5kDMSX2QqDedo%5w?FHTwz^Uj?slHA%S%T6Sc(oK=T6<%33=9f$X0 zz~;uOICdBqOLFobckbF+44+}o*Nm;TwMh5F9_$|F5>#yQNWj1jX9GH0&LuTmba*d-8 z`uu32rf-(T7wS8POU?4a5*eyY@ye% zc^v=1YNCz^-K!*a@`GGIE?33vMf1iE)D*q~0Hd`E`(n)9>>DNX;+3kf%FYMt#Km}3;w5%aCafz8URahNkjaEXy@tp?uA?bNJ! z3pCX1IQn0gB&RnwRmFXp50>Pn6g^;1xvtA>m(;6fc5QH8QdlmTEf?QWoh^n#iMG2E zun+rHPKrQ)+d$46TkwGW%Js9%_Jdlpcji;ViH+~5&J@EjH0o| z!xbN~uLfq2*y&iU+zqjo9arzztwi43tUBS^xP{P0EHNltw8W7XumlZqF&FZ`2j@h8 z<2_~dHxQLz(8Q7P0QHzPzk>Z7@8I3atDk^X+^a9Cv7LvD!av5gyqeLhH3F)}RxiqG zM`+d#A+iQu1|h}Xk4Vrb$eFDknzcQM=(ZqQUe1748ha2CHw))Fu`8|B5Mhgmtq;|# zk$~)~68>waUJ08}$JuHD$-Rk@P*Q2VX8~nDLkG-P?8lA$>zAcbUu*WR>-6e#F!r-= z=pc6T{kPVB1P&h2>{~q^dv7|+b%%r8T8yO<7mb$r3Q`-7+`HNrtC1W@XT7<#7-=7m zgBl-_%Z-u3phaM|yDvgrxu_DoDqj~|wE={(l^CaqV)+U(PC7VL)$utVg)vha<%BRZ ziYjWm2*RkZo9_1q7Y8RevmcDWG~K}BVfOBRuoTnuJ(RfR5K>zm>J{ubr|Yf<%VC3R zcKp|&evutl&2re5njKDu+Q5#hb=_5hG9Y2^x~>8io6r&PJJiLn%eVHv$A0U&Cu85h zW_0~5Wpm5fU8L=ttPPusn+n&OdVrl;4}%-~#tjhJmOEEy*6abVBM!9Y5ZME_S#t#T zz*!1Up#)rH&3EJwb&SFv@hEYJH8+X8K6HgwjSZ`We~f0I4Q=CUkUHcR)^-|X@GFLR z1U?xFTbp2Fz}g;wz||7U+Hk%~V+xm0m#DG-8>-}R3K^Twtg)BDIkxKj*(oz-RYAPr zqsZ$05W4vYHWFk1YZ&++iC`GNd`SGlkR3ZPCsB-D`Ip#nH*Br4zmHv=f1|MrLe}bW zaM7!YI24Y%0g9k#D2ko}QPa=2TU*=vKg^GlOk{369aN3_+7``xfhNdNa^-qpZ_AV8 ze#tP{=U7b(NN&g{CADS+wEEeq17^>v`rqptdG5+KS;s)?SEhLMHyB0yztgeym*$rm3+C zPm|Xe;Z*PjP!Rq%LaX3LMK=L-Lsl|1#t>Qxq?>SfoE(toR;^J^+tbWvC12xn@$B&`?$tnUR0szXGKH-{mQhc}zrs)x&|~dQU zp*`#o@IMlOiMC@9$`1zM|C@F2e_NY#ezEHjpF5nJDCc(v*j)0qQh2*kCnyd^QOa)AX*Qq$soAgI>jMExKV=T>G>Z%E=c zql%MRdn9boE3}jbbY9MZtn5cvJDH0X-iEHst<0y!bi4`QF$dzcV2(*ili9CWdx%g2 zOeAeh7S`putHKyyFN6cE!vg6*o)zI4rLXS!wu*^fHMZr+NHy&0R8z2IsE)~J)j)nN~6#n#@r#F8s$cAStL)$I6H z@(o9*$Q;;u+*-@3NQ6+Kt-C`XZ@#OWJ5VBmw-sN6WbECB|rDR{ya?8~< zE3wJ2{h*oHdkZ8nI+)&PHYSxD45%R#gXliSDfY+{>5n<@r? z2TWBHljivTs#z>WWB#gHA!V!B&4EbvS*_$|hh+h5Ew_i5^wganG&>yFL}& zDw#JoS>0i>Tq7Fn9y>SWY-yD00m1n8ASJYg*mW@}luV}&Nse@eo z2p~0f25KiE#4aa$pvHLGgK-t8uw9g8e2snBb`S%Wlsn*;1D%#z=LaDgT$uFEgJ?U= z>W6s1nu*a3+&A>96sGev#DUR2YwYO6xFEC!+&(V$DAA z(0FZ4yx^ger!~Fw6Zq#@>Ywqvf4)NelXUt={WDPiSN@4T=1=?+t@D5EpWlOT{EdHB z0|YW69QbUmx~2$i27X97{TcSw0_n7-|2#o$R>a$E8Xu6|jiyASjcV)m)BdL0k5aQR zhzZ?Z&W_U7j1r8Rgxy|ugSui3J1UT^a@`MQXNT0-NtZ|M4q{Jca{4;PyLbN2VM#!R z*vF311y2rN-h<5hIFp()Xj!A0tz#!@*$XtduzL`A9r`~kZt?gXb`Ppbqbb;ykESvc zTh)}`iyBslr;|D2j7jc>eKej1I=Q$lPsmge+yOmH`6 zCLNOP&KyXfF81Kf=>Zua2%sro$UE<&A-O&1>6#rkCATy?$S4KIoS>3vxM}JR)7lwx zf{vXQ&XJKbHc`jAf=%HXM=^RJ*sGE=sKNQ!XVq++mUEC;ouH0!ahoyxY3vIDcXb*3 z7cLtnsla&p8HQAieNGn~u+cYIau(any{O_ioIkJ*Y!4VqU{afevsx_~K{RDGDpvzw z$XM^diG^mL=L=^RNUCh#GEi-6Ys@jWWk1#*RHxbG)a-R8(uq~f8Mrh^TQp^2aZD~8naCVf(P)D^R zbz40Hqw+x=>|P%nvl(%0ZBR=EnNh7ryF+@0B|99cCFT^{5>%@hcbA@|8F!W?6Q>I7 z&oI4~83Xp_!cw+onnYraDq1Zaj`^g=s#qh7*t<@fr54>&Da)}^eXNkA@VI- zkGhS9^oek>_d&i)*1T3 zNCf_6=;Mi?=4|8cnEBX`XxI^2zFKioYMnI|_D|3H*v+s9=x)RDMc3y%4RxZHz| zx)4YniOXbG@VK}vjCOw)mxWLQfn<3Ph`3;l$-*qGj-9M!Pp}SDiI2;^2!J^nL}iq= zkIH9YmJ4zDaMNX7`?#F+N2~E+xn?xA+UWLHdnD{mZklw3TCIK1C02Vh=-#2D?cWDo zI$ip|3%biYKPKR!MPS}41l$~dn8eS|gq}3f)b!eALV&YlJmPlCX5zH;4z5KK)LbG? zcV&rzxSt#V|940Zfx!W0)hA#fAvvkp@xA2O<3|J<+gUO$pu_LO`3LC@q4bInY#B)p zGC~dq2b1Kc@j4XB#-a`wWn(>pC&-tN)f^h#hjraK12-Ksho(icb$9CFh6wEH*>CQA zuNiwQrdBi76?0fK?l2||97rX$&^r;Tc~wJ;j@6{d!jg^7!|57)wG!HwgNcZJHQ2~j zF&`%1jHd7>OkG1wZVT}`oW#>0&p8mx75Ys9n~1!W?9V6r$z(r|>~AD^ zvfQ?3!amI*fW^4+$(%{g9&_E7vbB(@$nka@(2RjLzU~Y0^TlxXTg{I9j{K)#5}^X6 zHT!mte*vzl**n61E=L2d}Y(#!}d95ftZ{WE%-i!AVY%X&Pro*C0nA%4qf`CZD>*Zf*b>^l-=-ARAa7pwH0LNf74_ zVyCdT!W|d>vKHa8=ut_N`AcbbT(DiYxbCa2OQX(lB)`Xz9F}I^phWwToIXIG>PV8_ z3uI02(?Jj-s&AC@v(;dw>z;&R)DcXYf5U!Hay2CU9Yl(lVjxo-x?sh{hl9+&*5hnJ za*`$aGxo6U8%CG|vzsr2lA0aIaEV4nZAik9I%H(&z|m3YU^Srp?rO@;s9cv+l6t?d zYzO5~CzIzNYez>4-b2E=qY$(NYw;}w3nJE02B$W8ULd`fggrX#lT_0Ax8GNEGRdBl zImo1j%*x$VX4SEB-MDB82&47j^k=u=O2wD$ReppF-y9|6)~rUzF0)CveE?4)ZJ zkzN5?VmsJ=f{g>)^=L)dl1VXa-;W^jIj(fgoNMWt%qEDMpI~Q(@_9H;vM(U7!f1+} zmbxnEK%ZnC*sZAxu?}nu%8jGRBH~&`TaA<^N^N(&SYie~pGpj)vHRm`B*t>l?0s+; z$mFfZE2V3)DzBt#UWG?OUOkD0@vsBYJ*)CZTA>6U7(pPC6d@;90WCM zuYw2Q%z1P&+$W32*e!ElERMOE(}A-^k}j;8NaF;6AYsoQ9i)#^Thul*YuFRps~LNH+CH>u^LST$(CyT zJYWxLYy3uQxpDRETFhGfs(F%l~&eL^O0or98!SKx$s*=Sqo}`m;4TM?xQEHn@OV^+z@ohV- zg{2}(Mv9u1GeI+mfxsXUXANXs?^rnxq^z9}mu>m+Un1$G6!PP?9BNjUMqC=#sax^^ zH4m;&6v>C3$0i4D^Pmov^sv854wAIsy0bLs9EM!wJxG?9K&9;Zb;!}N8viE-XUVLF z-Ln-MO47_aaJXXE<21_eBzqV_4lxSJ58Szgse)tF(@|ISX!P`>=+%-_yuYt-;6MU} zBk1keg}(CpMpO1ZiJest@HW@tH8!I=vt*ED_n=c_Gr?U?5~Zn?!JTjfn~(WyhusM` z%}uR)Fr+tCoB{lLV(n_J?Tbh(cDA=s=Rr#>qKr2<)*^@E#alH>1{=QshWh zc3P8(&y6S40|16>3{^B>{?ARqHwL5_|9H<~a#E8oXiC$JBx^%kVKcS@8S#+Req4qu zkT>Z>!QgSQqwJh(^}KX7EqjDTduc+K!yX9VBf>?j^ANkbz^ec7yg1z1E`#i490@MPN_CmJ!?VAkqahlQz8lE$zw)Dq96@z#z@OmDq4J z#HX`HIk%EDAG8-8%E%B&=iy|Y$CBw4O?J>(AzdP}WV(VkW>6~}K+q>S(u3&)^LhYB zb5CSO!ykd0(JF95H&1~?Y9yb0CO*O*#DVw!%~Rx$_ms=u2%bXjmQYVQD0s?dG#xw= z!28O|pf+E@1s(4z-wM7$&V$I0{@l)20?`$2vUZ$Rz`YsbGky;-JJbY{JC`84DtHUr zk$RlB)JRS|-dpagTtBKLHGaR+X;aJzww@zX{h&JbAoUoW0?=V=`7-nwj09~ygLfR! zXCSP$`3xaGnfDpzf2hyos`yS%XXiQKIkrbU$Hse(9UF}L2KA!rsT_@YWP(8_=+qu` zcFU5~8J(l@IVN(aOsIp@=Rm(=`6*x-=z&9;Cz4VV0zM{l0I@&(r%1njL3w zUUcX2K2#-viO(Yu=Y-!0P1yy0l(-YSnOL}mbD+-z)$-%TK^!SG4tyX2{io@%{sS)5 z=0EMm4a=!V{3j=jA2cfYLBlQf6bK%Kv4?Mc8vl6DAr>G#iDr-m&j}!SoRrd=!0dgD zM5wFaBi9ueW{zRFS*~u~hfbf=bm?oN9G|o&z65tbJ!o{3j1J^T$nzT=!jbDsV5USa z?l&4@Sp;0olO$YdT$7B}`N5o!EC@IJ-&Jqo zOs04Pew#q^#hd9+a0EHhlfZ|o;P#+>Jo>DB~;GqhvW!0O{lk@w~ z^E2Ge?@JEP$HP;s(p7Kbu|6A63T2sXxmKDRQ$rq=01+f^LROJ`2Dwjiqrx?Np+zAu zv-eD`FRGhbAc2RYDlzKS?*Y#d?pK$4;+c^0!L}ip6URwn)fxhYdd18M4nmxbW=PO_ zoDEmZ^brEiMzbZPKaYatx@O-dGEH{1NV)Y`w`ND29;T9#T5dcjCzsImKliFiazQp* zO>_95aqEjy;CT|an?KyBWLJX%Ce)6R61X=(hPBz`p0Y!QO035z2u#W+Vj4#_{tqb! z^esoBY$H&n6VkSn1D&x>gq1wfAuVhBg615?z-8NV4oVA{K{j#?$vK?ia}MNLlGfd^ zH0OZpS;#rGlDTSA5ZvU0l*9F&xN0Oh1w2j<^7#&WSCGz{s%Q>>0pu=lEa4Ht>GT#q@NjMh;52@LHkYUe(b?b69doKyP zlBuaEjCh1MX=au>Ll$KE=-o%SB1B9a`!Lf({34fLr-pcnyIYe?54=Z%L&RN)x1h{EI`iAj({g9O?MS1X@D>jSrG9lL!oho;#(81f~N?XzUW zvUE+3`L$D!FLC5_gCrSXb59E?H0TA?WzbmUaVw52IoM;gAIArLhOe)Y)WUISJE956 zjL~+ff$`ZfXm1AbI+9VdBPq>3bvdop5x_bECOV)9$}<$qo~9b7g0 z#_p41HG?L?ojS>3O!i=d$24o+snU#ZrZ?U`Q~gCf6?38j z!aS|&1X~MBW^O%(Jk7p<=eRu>oh9Gc$lX;)v}2@_9OX!O^Q$54jrok?O%hB%umm1M zmcMkM4JKV2Vv1(&ZCY5=_Qijl+V0msCb`Nf21M^%%J|`wqmB81Sl=rTNGP z1j8h!E)Mv>=8T%Y}ixQ=rxN1+Fe>)2zs0vwt!x;vub*hH2jtzaUIy_)oAA-IqK z^Wc70NGN0Vt-C{MaL4LNa7WFWhWXOq-k(ni3W;1Xe~j=}l9%LF;iCziPSBweV?B;s z0)mVi1V^I$kDerrNn*S{UL|IGDi}CjHY$L719LU> zHa+SzkvtGe9z7rl7(R3D`NG{iNlk^8o`gX9#0jLy#YV!Dc=$8Y7jEW3NOZ>B(Tu;N zdB;hEZUwyg#O+T1pPeix7mIoLIj)X0<7o;LVqvbTLJJju)~J9m$UgS^$`_90Nuc+D zxo8L+UqvmRQA^t6Pexf`i0uInY=CXOiEZf+%Q?tgcLG1rggb&!=imnUI;7rWOl9(TW_t#M}f(s*-gLH2)CVh?<*-0z8|P&Pq9;*n}97dTeB~w0@sC6U*EX{ zc>$ef-@4gndf*yh5hR#?Ig+k1L((D@{<7*$r)!qp^2A)mR$OCXf(ml4uYPTXmrG0F zDf4Ew4yyStYqg*u_f3}yHUA1VcelcK!zikSq6z_(&Q6!7vrEERYcVY;q0|c|=g$~e zE8dy_fC@wra2=xw3SLm?gM}$jP($JWWAEMLnmV>e@x7Cf1PFP78sy;)A_kuU6+uwL zLk)@=)T&kV1VluO8j&hmwRu6Z8`1^^MXNQa?V+uw#Z$4^uhs-mQE3|=ZK<^$u-2lr zEm}{j*6MGqz0um9^F8-|e!t)S-22B3VKR?3Gi%mbvu0+^%-%yVFc$)12n@qO4&V+} zWWy;ibG}Hs*g~X`s>W13fXX2dkAZv$gg{^<1_~k28v+R!D8jsMHm?FA6EV_2o9ZD- z@_sg_fX?nKd4E+DB#m*b%b?el&?d%SLuZFWTnfFe)M3IF(k7q+G$T6_qQ}weHqfRc z5MkNa4Lha|@SQYyz{QW`eUkJQoHVucgjVs$6DLh4m=LC}hcgglY{rO1v zJ8Am32lk}t^b_A_PkiT|_%1#1wfFe0e+?c$0IK&eQS@itYkskx#eU}fA+Ufx(8MIK z;?d7{KlgJA8;5uT4fyo)UC;eIkBviY0aGEp@h1HcOL!RjkWIm9(Q`lbWJUDo&!0O# z&wB$(uWW-L{2=;JmyZo0x)6DR{lR8H2=RUH^PX%M**I(sBwdCd@-BBmH+Mo8cf!p- zQK%iL27eZh(A&kcw1}8q@}z4pp2z3uH-I9btJ~n(1Jg(5In40XWtbmY@gf9so_>M| zc4pIV!Fdz9p#@^;>Vue;`s4&UU3LVco%KvKteQONc~#f*{~H z)D6LG*iDBY-ONY5>2A;l&Y407Q@As0w9t7}4U=_%odeqq2t0#6$qp9naC#WbLJ;Sy zh%*8SoYe*vbOvnYAgJz9A1uy-J?sf22AtLPPavzFhD6)q6G#j=tGk~-);tXfx8r|@ z#DKF}4PzQ03bpU-fn<&=J1scCJD8R`D@J3$*)Osi!XtfUlKr6gYuyhv^o7s6digb2b`>~@v=5~~GfO()bolYMFvwMim z5YJJ58#v%_BCDO5D*CdssvlnMLi7QUfoG}Q?EM<71oZ%CX=E0D66*{GQ1qw)W4nw^ ztfFTa?X;>3c_=Z67woE@qc1ylA=n?~4QBrk=Qt9KY~#L=L$}h-I*4&r1$AQrix;z+ zZG0P>>x=%Qm zM$uNLQFOYVtru!cECgK6KJ=cyMl)F)2ibP7&UaRgRsUY+ktCGO|F*HS=X6~K+G0CT z!U_oLrjKx$cD|5Ld+8>lmvjExKQ`7X#1i4Y{ZT|U@F?46w)XTwXt54zr$6p#b46So zz|zh?lKfwr&5-=r9#sC^>_Ymi(aSx5&HrH!Do2sA1t+bESU8~nqtVjDqwkp>p-om& zhS#>Pe*+?4aIy^P&v;M>uoE!4rSS%eD#Jvl22Q2&zzwc#tRHsA!NdM z9cZarP#awAxW@Cp9N5rPrSEa(`ku_F6rRqE@jChp97BV`n0mb(V0rDyE`>O@?LFDG zY<9;{ta}bN74ts|#;O5dVc@REZGD^*_0JPZ8BudU^_UYAbgam*of=l{0sjB+|E1vM z1ehg2%TXOc)&_=5<*k3h98>?0ALcm98cec z;ebgoFm!5gJx*cS&LlA`fF0!DlTgPqNi206YJN{b{;^eI^B*;!QfE=Hp$=#3Vw2pD zlT0U(?90eGP9VUehJBCY9X&%RPFH2DESp+zv}LEPDM$aPAz?h8GrJK=f@`Ugm;V93 zFekToBjX+wSk_%7E&q4~^Zi$jLp+49Jq|ap;jYKw*V*um$Kh%=eDiU*j1B+5hF@F< zWp(%XmxCW(&4cy4m<#?pJ^p9F|8tK&6a063{A0m?zsDa3{s%q&0pNew;}0#cB=va3 zlPz8fn)b?2pdTFH@htqyzrEj=1tg%WF91Wk09SahNBN#(5L4CyG30ccoDp}Xr2<1!e8(;PKkiG*J&9x|>{d9+un>o<0PuE9kUDu9&rG|n92J!}XW>H-;PZSitTo`* zQPz{El*yxE@?@av)S_FK#l+~Cm|5VSWOM|09wq$*21)e52Q)J4fy+iC0)g=VaF$_N zj;T^_C*LW`?7=exB@b=-{-+%bot;&(JAjkJiQI5z#lfNJMreey;-70Ef_C1-hC3M= zR>VyKBGS%-5Eb|H?=?P+g}Mg|dRG@f!BhfH6CfH)CNQ^vUvels&f#PkAbOTQ{mVs3 z)>+5%z|$iOJ%AkC<*H`5S&b;MoRz$vv5*483ub@!BwoLg`Qh%ew@XHs2_bguBLSec z>n>CZ^j}DqT>@Wmz)2<%(JKG`E zaum}zj$N1y_ENwt_G6ae%$)+3aIjeoAt;sv+dsl(?BLO`fI%?Hj)-aR$giS3ZQ+lr?{ z;ikkHyqV}QmqWh*^P9o)FumCCSUNBfPHQ37U=crx>Kb@bN>^h;;K3>5$WI(=c(ThN z@Z??kBwTC!j3HjqUHHMf8*rBfGiyRN27HJy#~=ix?#kb+Ss!;Y9Y*r@dGF z$kW_vRB4h!Rt}@b9;=Hqh7z*daBvS`lTN_-6wGrE+Hw!hC8M8h^3ibcLz|fL*_I`B zhn{AI*5O3al2qUm=3z$?Ag`;y`xLLy`~Q~TXlIq|YlR&S#OKdkcQl~L7W;k3@ct;n zzDYv50ox9|H$35eKTxJ?dBF`>2)4Q%`TsQc>CgUK{`VC2Xa2*EGZgkOQgEK_Sa2Wb zC;BMEgQEz?avx>lKXbo;&U(!I21XAp1gRYVO~F+Mw}Is`niuwMLwMoMKh(z(IatVZ&|lPn&Agno`kE8+4j_b-tX6k2y`lk2=B^U4Nxu+G?~GN{vxS8tY^SNeTAnn+u_%q)eY4koeF4Cw`8XmbXE65M>Qj+Fq`rN zWy`1(XUHLE$ZR-s44^dZP%IR2naLGsBI&c5zG2ClpB;^YzoSkT#O*#*Xw*mEnB&&gu z87AOpU}dHo4uwJ*D>EOmGIIis*c%qq^oH~xO6Z>_}5+V{-=d+g)*As`_7k#iJ z>E!9)*ee1us|=@A%1pDFIZ)isu!Zi#oDQb{f7e^`Ayb@__mbpLM)zH|_e^6uBt{;~ z>E_^r^o$$eIX;q%U)i}7PBd9w70@ZG98*IIB=4rAvJHip)IbI=wktb%>SShK{Nk24 z56p0oAT3C6|KzFN&j*@XaH+>GhKIlN$Hg#k;jw+1T@T{ghCa=#2%mMBTnAtbDZ}N% zQx@vfIXLZ3d&(+}O9R+_L$EYhMqNVBJfR~kgf2r#q#IBwogr!`TncpJgvxO^2TBHZ zfZY^=*)%f|n}NnAdLP0xnL`G$%bjc;T6GaNUEyHXJkBf$Jm>`Z z2T))q#sipOrAE7ksksKrV>$=geVM`$%O`eUtO;%84z?8y*doa2Fyk31*deppVVqlf znXv}L-2|o=FiTF!hdjGebR0?~V!e_N%_@L*hIk9$Ax#Bbb^?5?3Gd4lKq;B61vC>! zKXe@F*Ukmv9>u{h=^nic8Rk3^IhTnvraMZGon{+& zN|NbKy1OaK!N`x~{b_(mD|ed4dmRu-0Hk8O>0cRoF!b%A2bKu87BX8IieLyRa?eqX zH8^>nGGy>MN4CPV;tIG8I!Kos`wXu!GL2~hb#s&v;2w@JY=X8S;HFf^E@X}5{h5G@ zk2_NX%Ua3%VUl+*#e=M;go-GjC`4N!0a&HPA?eE|=z zgeH9{$!vCvhdDH}j0L9l&~g(r;4XKQ#`_~n%U^(&C|S+OR3JP`7M2J1nXti`?F{M| z1E_wv~oR{=fMB{_EXX_{_Id|dHthH|r6$^jE^_f*W#jIDU1 z>v65V@A#}4)!{^HIC*##iimBOd`ROtM5m~gt+M{?eWs#%5=L$%%9 zVpfR9&~ViCVeDN-j32ic#F!Pr=j*Y#STR^%&;I(9%(OEy^Sn=T?Bk~;w19rzw`p9D z0_>@8GSt_~oy^LrT=MSOSeWkueHlrGes-VLGzIiVABrm01{Pljqj=6IzT&85uaQ=LZys4T$XiE>h}1%>L^h3eaB!HX`S1b;VdqY{LZZcL*6_e3?Y zlhu%{(so)}e@{eSKTbp%nwo`B9Tq#2F~Blq!e$9uy#cBRgYp95%*V!bX2H&=UmAB4 zpSJckLUF9MH=Q*&vvoC~%I;CvsH2yWY)uWQotb#pwE!>k%s4n^$_zB{{5d#8h_TEl z;O*pjzvcUX;twWDDSh|pv2Vm*QFw`u+VFF8JW3Kg`B}sK5JooKu~M^RJAS?xKZ5yu z*YkV+@$a!d3rfyT==1%tXPD17J>_&CW6S9p&&GfHIG+9W`~~Wf!jTAgGy@L~p!mTV z5I&DDxSpp@?;2i-qMf4}4;mrXt z@Mb_25lajr1`|Vwp~Ns^IK1{Pj)*5l5F_F3013osB9TZU#=u*6#t|AK4c@LdkL@m5(=C8zC#NUVmL<2nG?I^rq?Kp9Y_=q@5d`f&ld_{B;-w-#5 zABlg$yY(ItT%bS@DJT1o;Uv$GFA(|%1O$qL#1g4YCJzn?>D8-u?>>DLp`m@@rQVVK zC}mXt=m7&_2C8BQ4IVOd*s$U1xcCtxM)SXE@!_fCx zVgXQh5zuxiP zUM61}pR}2@iU#-zLnC>PJR>!MleRf9jVFr_Nfauk1jL)|T0@Jne}>#vAx+)P$!`@N z2%*v^+No1yyxFQ4q#ERk+fbiVNwu~@x!GWF{REH?TR8A8sH;b$iwF{O^TIEuMqaHA zKVgb&SN6N8iM(7JdC3%h+7y1#7=F$hc@F%wLD!U#S51)@J>ea-K^K+bU1S8YS}0gk zV=E?v#ai1sp$ z+(;<1jf{k%T1hnk+t#TB#zI?(!Il8!Bw|cLy{%XwSYIkwS7>=bD=2mgN{9}Ey3`o~ zXk1l>U#tzkNJL&%MqDyQo=%Ot=nijJMqDJ_f^~I(6@P81EkP|xob-WYYVxMYETP|2HV;~ONl|Sx(0KV7FyN_1?x4xxF`KiMC=lFhx*W zC!qRW_C_=T`^?aa$d7BoyMPh3z^2F>$eKvwD1~5yotvz;j8Y3W)Cksrr_i>>BS@HQ zSqJQfU=1=WsmEhOk4KQw$Tiks^9^bggVjb`LZQuoENfGSw*$LL>ITE~Yn>5oCTw_n zX9QIGM2Zp=aFPV(ahfpV96wKLT+B^-fDxd3{4RL;dxb{7x`eA0_)POh+&J-%l;pNf z{Iy1M(Nq*Exe$a@&(TJC8#Mkwb>)`kCf09aWYb49{;%*=Rd#U)2QEW`Ia+BNA zlL%hYzUCCGC9ys|=^#1Qnm(pJJ**-hc*WnSB|rK2-IU}TwfMSP z0%cw!Bv8~wU{#^&UMrli*N#DiE=%8~Rjjoh(SmXw33N%iSt4stbsr{o(# z^h388Fu5%if3FiSCnP_*#6M^x-%yg}I`K`H_laHi_HKr#vHm5-Cp7gMT>4`q>7~+~#d=u~_q*$F=a@`>QK_|ZIH1?6$g$7_4>x6>C3)w+miCiI(y11I$B^PjKwB-o(=ER3<6qH9uIa_t z3aHBs^>&aNUwUF|b5a#|>_Km$Cw(k&585RacM;M%Qt@pA@CaM<4X{Ip9Q=vc?@jDT z4{s;K_M4JAnp0Z2Vf#~)4|2!Vd;7K_g~RrHQ-Ecy0Kj>qj)(TJ^fmW%pmAVA$|Gl)gDkH8b!&^)d zpy;5to-;*U)T1(lzVJlmg`j+(PbC-y>r}Q?phclfR6aHX^}FWT6LHQPanTrYx)ZZs z^q~Ii>WqLs{(~~2)fDLioEi1SUG1_N3bFT1^u@0cX(s%n;%Av4gv+POuu35@>#?%LhY4 zH$eeMu6Dv07YR)1sEsskfU!Ub%IYa?30YtWs6*DQBR!{`=%6#y8|HSiGqx;w!0Y%c8!XxFRI%GkBx$@WFriJE@ObtsHRSU0HiXKV2Ze18w8`k4R1tiZFp;K z5D4B)5DXX`^^sRnBT>DRFgX6HUdmPix>_p0!4c@D6|5<=tbzd@2I42RQ#i%}?_iXH zAqM0b%ESo(6czqNhV5%$U}c6;oDURoUjRvV+tvcL8*L>Nj-fFBXC$F5HL|G|yF*7O zigXt*1K#Vu6kw|{qM!tmH+_k3_&PZO$c$Igxb~rNoF(=H)m$!~hF@X`3*#x!8Rjtmj-CwW&z=XO1pv$-UW1SuJeFj_z8;zn#O%>L zf1dX2L8%7BE_!LaME?IeBG)e2fzs5E@UQzn zX#D-(sJlE7P2T^ca4hSzw$%n(F=b1DaScX2m`nV(iQ70QTf~T|=7xan2Z3BH+ zTqDp2ogn*N@rYrpY$N+!ON|82#oCDO$Af0i7@CRzIGE<5r<;`gKu|EK!6d4!XWaSo z!qdJU)+2yesbDp%Zq$M`rMTjFyyP?nl`kR!b<3&OSfN_VCH+02MTvWeL<>bFglv}b zTFMv6jU$AdJZ`EVB&pt_g!Uj?FJg(52XouL#u4orJ>S3&dwB@)F(rik6@tiwH8gyQ zV6)y#iGn$KW@$(;XHgRs-pW&E#|WpyDfKZTXMC2z+_aq%p0svsr&4^@PI{kzbMVw) zt8E9B@~O46*6rW4XsYzJ=Qy`CeG*Kis;(XClnbMjtuZ2B8QK|W3M_5liH{NnQ2AxN z;OKo;aK5(IxqHJL^xT+BSKsO#7H$qJ;~@wRR)N~VxdWXT4yk50$W^C z;;PFCub+#XMDR1I)L?&wUeha9@8b5cX7gza_nbS3qq4SmQw8gMlQ8obl{MqE&UZF7 zde&yCT#z|4!+*=8H;(vc$%<>6yq#BDOu7K&*|U{tgAUGk$!vL<>%UC7twK%JSk=^a zUI;<$;8_Xk)maLyU-;?mq?V)|`(pQ4PuXbdo1JfHL@k*&wOTFy|Ldn)C&|2OPbUc&+JS?HJ5)FcsP%)ujb_( zrYgA$>F#QtK9lF-=F#e{y!<3zrL-W^ux9g<=D8+LBizwv+=KUvrlzGu`R^Aqgncx1 z-Rj_1n^G+%uixK-$Y|YsdE?pn0Xe!$ERM%we;j2VA(a(#ce`T-LR0?@LzdkZZer4o!Rh2z;!mq>}@*g{FKWg^8`{O641E!?`zSDky_zptt;=wg| zt<}HNB^1ZHp5M|_!mA%^>dnEjx&wcQPq8|s%2nyo>}yHWiUv*g<%I_D2h<%90r~DE zPLfvb>FCfzZH_)eRYs*&z3x)XN^wzV;sI1%po|_99j$#YL?95z7Z zK}wZw1si6K+`K`^JLm4U9{jtXF^$?WbreIEuc{szB-Mx0& z^#k=$F8!yKoaR_f*71>95hX&@J0Fz5TDRVkfYu>q_O1oBFGx0U6XAN+T7zOKLRluY!R|jIG z`;JknjLUD;%4C}U*4#dJ&W`H?`+EDV(P%qtFYsvyzMiaJ&=2oc*xRPiZ-q#(#krb;w! zaulBgb3IeCmpeM>tx7PQBD7a*AK+Rx*QsR760XsVtkk406QPlpAT;&d8#F&`;UYj0 zu{1}x<_&ojZXL0f+UaNj(53FVVUWyDMmeX7asq@|ZMPZ7j)nj_$1 zix5qZxbPWql0yF!+WQkfHuSZys7P-bJ;!S;%v(i~271BOVVfgFNKE)5JzbdzPgPwN z-!||m#FkCWeF|;gCn@XHh%*-p zko8XnVUoh4Np=1p<;_SVLoSSfw`pgMZMn*oB0JcR#}(_`{{q3$ut9JY@xN7O$dSfU z0{J2((%+c71NRR(1V;lA1V`VRF-@L{HL;?oAw=76E`1hm^mBlkAO(cbsGO;d9ZK>v z5TY;>q0XNd`~3hTY=W?IgvczeKE;zF$Jmd@b?RNk4vn!Bg2)vkAoJ$d{9vIPi4G+p zGBKCU29D4O_-G&kc+uLj&_0dw7{QNVh)kEG)1P8qk&T%MqcYf@JC5XeFu;7&`ArAv z{)EiZ0;8W4_8*{H{CHf~KT>TbIBxKxydh?(Xe3zK;u}uv{h+B6DhL;U6jUL6UapA1Sls^L8Ewgq7%*>A^3R!p^!eRj8!Hx{A8^%aeDPp&4QmnM>rx?i_t7n zwHY}a$YEOw%0i?bve6Ll7E)Ia=%sbNFfVZDhoXyK#u4ii-%&+0(38yh{Xt-kh-uI{^pzbsT48ylCDnwkA< z?$TAO)|u$a?X_V;-o-r>kZ&~qr^Glm|?0M_&A2gl5 zc;h}Nxc}f0=`$Ctwrtt^-ubV8;)X^W3pe*ULOhpd5R0aGm%pqw%q>_E zv)xK?gwg;WUnE!b4H5SakF+ltQcDsCU>JM>`t%5)F}$TSydZ=eYfn$KHdmy9aT^wB zHLFDI)(Pywj1Z-PMHEc9;RR|x2Fw!H#)S=tu@&60ZKV}pyM93^fSHT|jMxS)F6$^; zXqyZ-N;=h&6>7=X-QsSYc!abC?NPAn*OVJspr(_LSdx9P3&Tx0VoAY`p6-w}dcg~Y zg3)Ld7mPNdRSowgRf08l{h-*jM%!Ot*{gt6D%jyoLvRbGL;Oz4k7vT77I!_ax^U~NlM=&r&j?BtamkCDap%BPZi>9rfo8@VWMqLN8}_Hh z?6f4e>7siY0s>enD6PrPy5o`{1tOO*hD2oqZ0cVN0a z^_H;*En(K?#ESGJ*p6xRCbc$08&iPQ#5#%~-iDE)A^i%)ymrQ9n_ttY3v9=*anWI9hIs*J{c@0l4>sM+w=^Q9|SOnZL$jKxcqu7;PO z>vHi8H5XG%ycSi@tVa&sRl#QVro%Q?usSU8a68x7dK2jOiihn z*r9Q8Y6uM*F=AL^>}*})gcbOL_u||Y>!_ZWtgl?YVyR(e$>J3y6qY}8>2fSGeR%rd z!PKm@)KqvAJLF4SS~8~?-*jKJa>Ww-r_h0fsktS^OG{T5t}HHznan{F5HOpkn}nQx zo)bdz$bkMrd29uxeH~)AHwn!{ccSA)XCFFs=)N z3+S|?a|xXebgrV)h0aZMy3x6V&RujKpkr(X$BK>}oeFeZ=v1LogU(KL-018>rw*O{ z=+vWg5S>PJj-cZ~rv;r>blTAIp>qM9c62VG(}B)abh^;FiB2~2I2s$2gTF_}lrwtt+Iv3DsN9Phc9q3#|rwg5%=yaoV2c5gXG3ibvU)^BlQq)T&k#5G%rTJU0XOJ{3UHpl!?wrX!aRfMy0pd zTL#E$wE0oBWf_VptD>qUM!ra$zSr8)OFkE)=?sP4s%Z16l&eg<-tuR)g-RJeO35FQ z6`;+bvIUgMWQ{PkL>PII_KZloHPYS^*``i}T77{NwK+o&8 zGF_y$%9~kZ((W{A-KpArCT$%#c|WPGH)#)=w2db15tG(q(zckittM@oN$X3U+)Zll zm?qyfX&;bUBS&jBYwa9ug<0z|YpcxK8nbq%S?f;I?n~3wrD^x4Y3tLp2h+5TY1$)A zqBC51AFYR@ZQ*DyaJ21Bq9yM7mgDmGJ@Q6MewdPfK*|4$k{_YuM=AM-l>8Va@1W$J zl>7=M|C*9trR3jG@@tg*TerMR-AtHTMm2ZHhXG~nR&CA*5k<;B7g;9PL3F)5N*ORh zG*l_?P&fPJQMUq_KqnJW!UzN@*O)*y8@S2@I$5xz7#L&{kEk$5$+v0s%E~fpZ+Wg% zo+p*h*H)xzJ!x8l@~p|)NB$lqUrfjk67mK@e#0&Q&Mm(wm48pkf1u<)Qu6DRyql2U zlFDyO1mxS*F{02@s>qm5dN6W!RSK zR^T@#`!LzsGL{LnH8BB%jp_vS$H_oWFk>ZCRBQ7s9>p)D_<8U(@(cgZ`yyf#e`^`y z_Ms=B(AZ~Kr~HbEzd_-){^&M^HNuyS@cr@YstNO%m@gBL0H&~3t==4;x9Gj+Rxf>_ z|J#cOuZ~+3nEYy3S*u`UyI_;H%=ytf9}RHsZ*#7wa`!`h{U*#)@UT{30Bqo|1!Kot zLrprIBfyg&zGm~a@Ds3A2$pg*JV$gf<0^3$)+@Lu6tpqNBVe$Ha|V_a82DYyxbVuQ z;3=iBHVWpwE)9g=Nf5`=@djx4uj}}J;ksrrIy-8yF5sJfI?*?CxPDrlYQl_=Z?dIj zM|A%G%$EDj(7Yb0i|JLTt02q5bt7J%G31*W>H#ySJ)`SgmL2Y=(ius=-!zr|i4y%3 zlV5x4=Wd2x78{B<3v6 z)1|LmQLuDLLD9HyuMu=9r4c?0FUw53tEXdVPZ z?Yta&#t?f(j@>%MZq2c`z!!oLKh(}!V9!`!w=OWYEGSY;OpiXHZ&vq>itB^b`HyZ_ zAGB(3HkIcN$k-E}*`ofh4pMit%2n-}5D;snuN zrM$jAcdmb>&=QnB#cmx|q?nf$U7CwoYL{bmA7D`#hjJA`l^qG9!Akj8n78Rm_5KX) zzNYepje2E_p6s0$)jLlavrO4Luc!Yse@Ds(Xhu~j4`YRA51frNG2(E(EaCHp@!P5|24XF^+*s@}nCVvZj zA0gW^GGMRoTf5E>lwt@9h@QARY$BPUw{Ui!eW6@~9=bC1)dj{=eu@Q#%(v3Q7S?C~ z7%Km&iyIJq!jSF>)2q+uc&WR?^tGeAj4W{XSwnia|9c{7vr5C8mwN&LA zwA5Zku{5Tuj$=s#g=9*f6zmXSUe!9*B6$?^&OT(Z)8cM zvQVb3S*+g*AY*#JsN)aXwr9?125%YUyXcr$WsOsH|( z=$(GMT!`_7Q^cLan0PR zZfXJ6t=k557rr-)srw&T_YKXHcJIuh^hN=Y?WNnUZI|8KN^60R#xTl|p=k~xKXiKy z7GGGQ`YZL_iR!Oh!@U6bvv1q&j&0p+*Seq68To5o?zEFLM zY7_L$8ZEjb%Nl(oOAUY-`hxLyz8=SPETXR;^mDtsG8C?0fDlXh#)-{K?!2aSZ@&-X z0No^k%MaCN?Cw9Cx1@x>gzb%&M<|lg`vJC)Biu|XR_KFXi?ck-?+UyuFbkyFbU|naYbVA2VX#4e7;2pBw4!%02Ba_ zJGJ|bjF;6{%}39Il&hxh7mkW8vYCZa#?wC^VtA%{|*@66D6}wQM zo5&p9z_sMAt^p-`2J(`NG-@x=CNJdnlK0i;BwV5nh(Q|~=BstejbXL9)Idtp`^&E9 z(y1e2KmOMooi|W3VT8**E^eprdmd0mBT(du)*gb+Iqqv98 zeqOHWiU<&$@O#JHr}3o%O13etPIk*5S{17B_#G_n)ArKB_`&Pb>YMqzV3EgQ*)k63 zQoqVuPkQ^WR}*!DcR8GmFLzh}^FTFavFsYq#UB*CvE$`;K9O}^8FyHoZ>aCj7lxSi zRB%j)^qm<46I&!mqrV%0M!WieZV(I2-myn?_u89=ct3|BrE>Q(&_Mv?!#n`dOZj9q z{Ylr@bp7}{>86&N0YZx@Ad}$U{k3o^N{f3u;6w3OOF>b;rxg6$hrjXV(moH9wt+tG zJ~zHAswU7+Zkd-3s>|pxq`QWpaMeu#;i_lB|H}%5u zyh6|xJd*kc^f4U;Roo1Ot|fdRht`bB=bsNU2l*Y%bG;rGpi&D%2_ApYYVO8&4BI2( zL)9I%FQ@TRTGCTS!ob%|=+MYkmtmCa&QHWjFBqV!8iU4q|yi&>_v!uN-$vmJcE6NUqqh!ugL)_Lb~w>{i`WaVdLBPrkul! zQl7rWW6zU{3a?aO)x0uMRH5Q~jWK$E(cQwHgs823$A6IP3iM4J*0uNM>f@J;=Pp*I zwPW8?6H64udJpPaRb6>TXzhD7R9s$6plAPF;1>WVXM$6G(=iJYU8&iL9 zbVL1U7!)ZHvG6d(>2q`H&xe~z3Qnywn0oYBC*QHer{9_@YNbFG51QZC_$()0v7)BP zKd2z|v`1vl<>r0xI$1LSUSm*RhoGGzAA(Xj2s%=+qI8A7s37#5CI~>UoI+5YrIY{d z3M@6K9YOmpK+puxk;Mpl(SxAoFA&rKr7qrvr3Q5%Xzzsxny6Tz>*50fS2SV(jk=DY zF76ILW2GrWFC7yP+VYEg13py>j)gK)GiYpb$H6h*bWDN9N~duR`G$ners_L~o7S8- z^}MgPgr!TCt=MepEH_4gn#vWoP`+`KuD+afTs-EVhtt-6oVn)Qsps$K97ygOnS3K8 z8Pv+N<}r#oSK$b^rArJ$RPuNE$>jIU@MtHXAvZh3oG~!B9o+Kmu9CmjM?BHQ&5@T< zjjbtO=#09)Fs0H7N~L$`&Z4eUuK^-@n9G%)ZyX2{HJ>F#ct5;y+|ME7>MFh7H%gvp zlHmh*?|(h|J>Gib+qKix>M0(<#=OF?jaU8(Lc6};rb)`f);Dix({HVn z?00`6>pnldYxTH|@7VjjIJw`Q*xlpiw0<)F&FS~u5dHZWyTX*y~2r$&UEnh9a!u#pKFibpQ`UWzdS)W zZP6L2fLvA-`hZe9hc>HtZyZ>xD(e_|Nc4AU4dm(_eXKpcI}L&VBFtKJh7y~W7KNTx z0&w~m1TM5`MjaCUCf$ExYiB>sXYKLU3?Bej3Ud~n(aF8f6@^ZVGD68yc*CG-no2k% zN|3ce$pg(_w8tAKK*{{~ggJRZgAHus{q4YF-*(S{L!y*m0Ipra`5dS*l?a~CKj@F7OF%kzAh6{U z(%JW_9!lO6?1Pd^%sT*$X?g(u)PF_Z8Q&OkT2ZKeV25)k_j_Iv(0Nw}l>A@8M_RUa zt~CQ171ObSKlv}rJ5xUn8+dsjP^0+)Lyg^t#=YP!DEUS6E+E}>Pw@Qm-~f<~`ZQ!p zj;aPq7Wp9uYq8|9vw#|@6Q8J!)#oTt3gSF|@!oRK9839lHIs2Gu|GpJ!$j^TOrvE>?; zCdi)od`jvVYLQkP-)a)JVF@e^rolrZgL%0!wC|0DxO^S|bu~xFnE+eiI_Ys8wKzL! zK(=C(F5q~!k>fWj60Cgc2@$$(azb|BvKeNpU0SU(3Mb4Qvv_7o*;l%Uk8Dyup-`Be z;rC{C{Dc`3{p{Ixg&&<=qwsqvyH4Tf$Zk~l)n(iJ`U$h$Qa^3BJH+oL&1@zs9%y~^ zqF;FS8{D#3v8bN>JLfnPUl$SFCnOs6C{*aaPn!TCJm}4$za)V_YsjS7BhKA<$JCSZNHbvCV&_$&N0F0E5 zXRKix5Z-?U+P%T#bqy?Lc?gpo05+vqr86zIEn}Z`WWej{;7;vcDqw_cGZ>oG!IkoJ zs;Z_eYk#L%)s~?>r>aQn6TZTfGS9^M0Bks(l*wq!2^K8SyfO!78Rk0*<7VU@UtpOYKAaSQu zV9^f9)vX4Je;Fj6ka6-AD;fpCB#h)6wdPL#2CXcvRTK3=hes025wo+v?c`ToX3O~f z+L!V*{}mE0!e!AzV;`dxmqqVr@_GHtFEECuv|8Cl#SNsIpRKB17GB$-zZwyK({AcC zQi@C5*ILqCrBvl9xqSNzxcn*Sn)L?B3+Dc0FPM1K9%E#*zTJ4&qGzpUr(W6oacEuQ zzUb9}tUn+-IiiUGQKQc_1tMKz%5 zVnEZ?*KIMzZ2^1GRG4klt~0NoqKC%i8L}uLUvC=d-4fFr>_-E51MAf%56S~8-H2A?Z_3|IA5B*lXq%vG=DD!EOf+sybGF1S$A7o`paL*xG=Yu zNFntYgEEXQp0}inC#a>G4$fbaL;=z+nwwb_co_0*F}K@+jh z;0Ec9tUE(gD5zkO*);V|;L4j5-NTysRxOXK$$KvjsKMuXHGze>t)9v2uXKlfe-2V% z-J_Wv?rC0d8C%=Fn9vUFq2n$4wsq{%;V~U2zmd|~pP}PA-L#R(f7+BEO(*qyZuMhZ+A!Ke4Jf%e2JXt5q03xOANm!O{`m~F-yiz~)O8`?VK!6&OL}DrQH(h@P5#W!; z&o7tG z5pVQFY{v)}M7-4#(Ht}(4@@HEU>p&dz!D=(gN5sPV?^@3z|R>25X82{mu!*(v$%24 zVK(`K9W%B^jN88Ji_o~lCLmRvMvJ1N?3+#XB}P;P$b~T7IO{{dLJxj zu!YbjH+nU;mJKD}o{gAr14yG4NIjaN8OAH#Wx5ogBTw3BTr0M4c;!LD--LYQ1Mgd~ zi9+^mi?^pLco}^Ji?-@Ts$tRm<7F*C&1+E#V=gysn3dFaYL@t)(7UflTL^!&N)@#b zMNP1~AP(!7g$||mfuhTji4;1Ak8^BYj2 z2%&tz0=2%jS6{~5Fhdm5Fi>m?Y>@iRUes7C1p5UU^f5(s<2-$-=BP5RZgljCdh%A7 zmw+~Ws1#`e1Y@SS_}pHDlz~f#TCe7K?M~7J;myN#lEd7vZqXxm33}U{C(~EBc$RR+c0gQ^FRtc(7X^^klru=5V1AkW8w~y?*LU=(4mJhhgWj=^n&t!Ucr>5YE7}k?#mDSTRQA|si=grkMrfKzjl^)?1CwlSA2tN{eE_AeT1UoBmaGC-)7}xh$%u;qRonM zFVP6PLfgnuKuA7MP4$vdA1#wEW_kWX56?sI1dnHVPBT33*!}lEUr@Ptj-bakmIFIGA8 zy1SHaXxPhKmns}rljZ7Crik7Ubg6Dbe{`w#%|11oe|*v1rLGQ9#x$c#o$*1J>eU1o zuX0MP`emPTb6=P0c6X_!ut3Xscb780=@hRZqUC{wPVp}1#LK+)&DK8g+Pw;tcVbi8 zi>OQSQn@bm57(te6l*dehdi61`dDvp;_Btsu|7`bL@Qg`iu(dEdy7?KO zNaGKD+)rFopRYzJ-1hPF*v%7jTLbdhl)P2`V%vFJ-px@RE?e5`-(Np(`PlEnvQsiR z8(U%$lgJVfVV!eDKmO3?xe$qNfe7PM�tNBT|%!7>C|2NNU|#u;S5;S1jY3URVGW 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 un_s^5my{ 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%0D>xL7)t{1kcQ!4y%U4;vL%27txeot6t821_1m!-t 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 X!;bmvF-z*WEGgw*} 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νz%kq{K7o?S?aaBm=LaI9F+Lx0ujDi2r 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 e$8k1t73G=ARbq?Wc<>` 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
    b;}X9#hce5DzS3 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�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
  1. `#luO4_%#%Ig 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%0Dp5-#5w+8s+aA3~wMO|KqrBQE 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�`Egp+zf&r|OxKCUI4nc_vj%5m$~If< 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

    &{xRJ5gP-p6aUaH1zq4~7$EW$~9iApzb(}Pq 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

      dzYzoL!>{#6}= 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 z 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%0AU>0*3%@t+o$)ovhPI^Q&nLWB6RBm1RoD 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�<{#dd!gQNSI-`!tJmio*8Yr0UedzBsi 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
        C%ea1B%oiolFX8ck@?y!ARRD=XlTHcoWBd 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≤tty+VytyC2tMG+_9(Zwi1 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

        @n?u}`aKxD5l5qRs4M(CrGhNy% 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 v)y9!_$N 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

        UnENa4TU<5yKgWtf>t& ziv&&DpXC^|bGd*418_kn?(3E-fYHoGr8|7$ksHk#aX_nVzRy|#2gY@Yl4=edgQDj2OQsG1_Q8i>^xOv`+$c(iQ{H5oe;XAKDI~{>w;uD7}uRmMd6d z;ale;aXu?1@iVRx&P{%=NMN6pR=%Tp{^5T5d6;{r!_AKcTm4**jgY)c`*nBvJoU04 z&BKkS7Gocn8>6(-6f1n|hg5yVYWGfCKwk^6+A{#-y#X*&6u^{a0IN#@*z$0I#SQ@2 zM*!3OgkZ}7CWr=@Tc)y02Id2V^dA^L0B$Wq;)}&L@o#uzdV-e$_j% zLbLqGT#0ebd7Q#nzz%df7RrWo((^iHiojf@!MMAoNZp~-j7Z|T{E7o$v;$Bw(+;RD zQFjzmY3#28miVMi4j>ejhh!g{Cz$2au1Jk*poH2T4!|lq;CC$mZec3Ti0=bje)VE7 z1C|f#^Qyzzqq7`z z-nY?-w9$FZ0jPHXYIi%V{n|mtbjU_$nvKo}4nVbo4(AgGomdB*`e7uUgR@CGvVOn> z2c0H|wfCkw=&ZNVd0?Z{=>X);aL{?vVQnWAYxB;28=Yhuol*y&WRAl-2OZW99q91R z5gVOZHadqKfKhh9?^*!Zyp!UfvpmA)9VixgrynrgL1$Bhz47nOcF;L)qqBG*8Eo|q zK<-=zol_2LkG|@l^SO;qnvKpk4nVyFPoJq|ie4r}jaIp~bH(OF}o)9C=@E^*MA=&-gE zinV#?CmWp#8=aXBK*@ZEcdj|C{lq~>cFIO)sg2Ih4!{=64m!CuI=|cK)H?vVD;;#!IIKOoz(J?kM(3=J&Uy!+-T|n+;js3R zgO2HI8=X})IyW7FJ_jAnHx4>=4mv3#ZQe<Ot`kD9YU>%lqaCK`q0~f*G*Wn^4oDrcJv8CPR*O`n3Z~x+c>|?kRRSr%o z3MAIRLd@sP6FRXYaG~jP`8A!99JqXZ-l!^eoUmQ~qhaGLKUm#+6kJ1F2B$69dJl}$ zJf5<&@{qFHJfT}YZS-d2nkKk@Jy&-asI5@!)RCRiU%EdrCK3z)#yjShCojlvDEEQ<&F9(#d+x^8pfGF={~fvdAVlaslCzMG|9 z{-b55NQ)j|fdA473_A#qI62mdn*ztsGYrCFKYno(dXC|U`c^Ri4^>Stf6Iwr{?-G* z{Kx2df^B)h{I@fL`P*j&^Gn3R{2fuj{C7fv`R{rM^UFep>!l?QL|c7%5BkSepXaLH{`C{|?@^yXs=a>y=_ex=K75i;;#EBM z`H7<&uZKPNTttgs-#5~4d)th@TCVYpx3i9%zGM9!;HIy>c>Y`ar@QY0ylQ0M?Kt<# z!=3_s^svj{zVXwdvgfs2k@e$0R;X9EVocxZgzaDd2Jn*yr@b@E|Cf`qb8*=82g2vHln2Fbu&X@9AOov2NT#l4*64lCCQgmBcMrAfbQqBl9&mfbZ=ZyqAGUbJus%VLABeax z$xn~ai5_{RL>v@9@+gU@pq#E5RcvrMqJ`%an5}afyZtNX6>RDDk4P01b^9MpmBaUu zuO-9x%GXlid(?a-Y){Td$D90d)-$ndN~_2f#AN>N~wmv@mdScz_fc*E#S<}FtK7+h>nP(!`tN{tt# zprR1&kSVjX_j0*Zq z;g*B+TJ9$5z@2`qC4c{1*Kj^v=#K6&N%(GO6NX^VS+-qWVTW$c{6f0HH zrW;)Ag_Oxnv@8PFvRkAVdsD@HdPLY5LYtu%&!W~0t5k{M2Jt9A`(0gu$L7i{Fw~=< zNV{6OWi!|PE&VUb5-;i@I8;DMA3-0@cVD3YH5(35;gDRtpv|Sm#b8iICK8&xr6V!= z9g18|D24QxGxD%j3bk%9rrCrG1RNpAUsrnPNwF}tQgjRBa+!qIcxhy|>-bPCieVsD z!wpRur_P);xUO)Y7j}dy*G_;tcob%);!F3H;>%2B6E3I=g!`d5Evo9@F7do2G+__M z4fBK>fEdNMsZ(949YY~DVyqJkgF%R?SS#16UaRxPwUfXsYQI?{T1&9HU`+F@-z;n} zGRs>j3c(#_Rk$OwTn)r~{bsdoL1xk9+Nu3!Jx6AxQ3SA}ki)El$gC)w8#bWdtZQIa zm2g~`=0adBP0*zDyoJ+;TInev1FR~g=F9Q-AVQ9Gd4^OJwTak=l%7GFZ51ulhq1$j_MvtX=U(zlLUCd#3$^n|Z zGw7o5!mY61%Jne8XP>AsepLVcQpguRC||Vxu++qO=R9MZTV@HDKai<54rrq4%(bsD zKNB6i$_=H{VQ^}o9p(97^HZus?-YYqKmHYCZSZh3FaB1Y3*EFFqhF#snpd9y&D$1@ zX;xAlUME7Jc~AN)MQ8e(H`WW9_lbu=f3v@ND~q9dcQE9pg8t^sNQCCSOck`n_cw2J z2sCd8&OI5_-@JjPV<`GZV3udUSvv5#X%m>m=r=0`nKcR1boZO34@YJND@9NH%_lllVadXMDGp(&%xL z@-GjZ7d9bTUWLa~1XcJv`Dq?e*g{`R_zGgv(H^(Z{(uGbr0WOqzAKq#6+9?%i>F&z z%-F!u26f^vV?udT0Fz!xuJnjO&xD-CaO2UFHq#PZM~68p%1n6JgH8t-CKyw)_`D$% z9+aq;ul!~49JuT326vr3Ze`7BaLKy5r8|6#lr_kmX2jfYP?wm0OUjgHNw-)J_uny1 z9`b6%9E=LjdcfHu{e;5Jk8rdzrJ&TErGFJ?%^&D!XVE#-&YxlQb8e1y7A}N#&Yp{D zvRoYQw~T^z&L6H6eNAzkU4$>RbK^jR{&ko^vz_z@OQ4=FV2=}LlWD#%!=BK#=kgVGa1+}xnOfp?*K{dTG)9JN<%WYlz^6`b*o8jzazhh* z9w+MGjc<-RS?cQQlPsoVzAO2gn5>mcDCdNm3U(WOE3k^g(tYr}(9(?auu~w&&VtX> zimar4(|H!=RvPz!&^roa(zi3^@G$x(oHyr4zW19+xcXu=YBEhA7s~B{qkOlmXpJLq zdW+Yz4=rjf5)SJR9LtcB9+xF-)tZW3ev8f{hG|8G=@N6;(0*=r^P8nl~jkX z>w>>Az|T<)L}P!WTHl36ZDGqf-TjR!O$J{VFa*Wx`hCq017Dk|T-qduuhoNgLW1wX zSs}p=U#nO@_~M)=7`@!n;cN3&@OANj2_eK4OfOjZ6^V9l}}s^=B;n2?`&0a zyo167O_h`2*SMVN5Ko*Mg=Er6ABZQkhazvH0rnKOJ$t&xUq3Z_mi0H zdtK$_no`QTU7!mm!0qa|eN z=8}w2$!pIWs!%#2zLLHDZj`X55;smZV*1w~%it+7T2CRYid+-#@+IraK`B?diUxDF z4X;864W0wqa&Wt7tjsIG+pAnQj}V^w-8Yo}Jcmv5J<2#kAr(r@B6}H+_T{- znuea>H7pprW$Kr#YlA0K2O35dJmaQti+3~Sl~O_>_A@Fp9GDuHpa*+|k@@tW@tSNG zm}^(mY8Svt$?|mE`%QGOV&7c2U&D&=L9@PTsmkIU6->*2HV|$=)p|@p^XY+uSTTaH z3*lSZAo-&C1U!MW915a~zZyv4Rt$m;m~a7fz(zO8Xy_(SEoTB z(82WHK&MPcpBw3v8R&Bpo$?y$fF|x&33sCoY0DBqyVz2maD*%&7nP7s&_e0oQPgrd zJ%+wOG0r{|Q7oz)IM0tmg`Z`idFs_Ll&y^?ZthkEX;)2~=_%T}X#sts@Y@j=CenO+ zR`^=*$6xt8=A_kqeaKv77JoY;DS)br7($9i6m8)kSg-+q{;$PrPWr;U{d8QsnTjw z8AYmWCRKxmfJMQG z_0}iAddr(+Aw6Uv<-w?sxBJLKl*y=&1Bqn4;ogW{YALGMWjm>o5r*pJg_0`%uBbuG zHkHYw$|O>S`yQ!MMygyTRm#Ijl^9aRFompTI;pajRB5oO>?c*kL&#bpNR`>7ihe4o z@+zrv45=(;4sN|3Rpk!uyWs-9uy|)8)^KoE-87Q*8;JENvXG57Q>T%IEF=qgZZoxv zH1!9v-dW+O-ts6?$wKG&ov5KL&<@l74z#L1_&{Lx#g&kEv_yon5Xj*JENGacaR(MU7ZZoo3WLwH`WKS ztFx(ik}7YJDk3SV5=E+1%p_HIkSYpNrTAmAmOxUa+g8hDQe_gUQap=P*+r^UkSfWC zNR{EF${WLwVWMfI%6w9#&8G4JQeizVgtK+88%%7y=JM~|<;T$M+dPk^G)WE%9u6ls?S^1Sv@1*o^RPI|Z$dxL0 zzjK9G2B<$A!lg&d5pj;1>oCn|8qWHTLyyx9A?Ojx9~4FDdP zK3rs_4jFixt8N*5n=4L#ZOizrN@kHikPv{0(eV2rZiUR{0OoS55gTY}(hsz#Q%xFb zs=+-=G=rTj`VTi1KMqQAc0-GLj$!=PdC7UOa=da&szJ^~cR>f4upAMSe5#RM>T*^; zDF2<7K_4l&nM?(5uz(BCtn(UN#tPryh{-{UW-UId4Oz7%A`sS?S1=i@tsHo~@jKk( z|6=dmPWhrXdL_Dps_%4{dD?7Hzbm0nwuEjNzhS zYdb+{CwQCSI30Q&Y@K;&r}Gf-@=&WCw9Y)#Y6m;Ej}ohZVvl0$@4J(LXlQ$?BE)(hTQH{xwTWA@(8vFq^M@wrZ_Dx{9Z>!|U~;{W6XC^{C41tSK(p zN8PdE2Y4^fV>`+9A)bS;fg#zUNi>3w?<6?}UuHfHHW~H>QucKL8SZU<_RmT;XIEX= zv{bPP`#ge&+IVb6&VmQ7*3!}#NO|b3Os&@6cbF5ms8@1q8lpDwqJXl^T*UWu^@4#Y z?>}kGwYRA&le-QjAIO%|wvN72_QWO)s>0)_6CXnB?Q|e_c^uvwrbi)9$U@YDF!4(7 zdu8<9?c2KFL=`_$>txS8;H?IFeJv|SmC)m+9~0;pZ`F@ENhCwBZ0Ycs6z?lrM;YI% zT1OcRgL*KUHp?@)?!z15(mg}hqgXKbcbY;)A)OWI%FDwr&n$l0(N&Q-JAVYEC|~+q z^RdwI7=Fcb=xbqB!ePCH4}S;?1h80FfrSJ1@LyqFful_ZVzSWuDs>G1HbdvZHF9YU zmn%)3-6@@s+F7Y?VkC4XJPOX4o1x3_f$$%^Sdj*VUAl9XV_FzVRqE+(=_)!rIg7p> zwbFs%G(i49qz8glH%l$HislE!FRgb;>F8D`qqdA~X5h#i&BkZEYzJaGuz<XmKz>}Xov9D8LnT}9Ez!CiY_{8{n=QHV)lPo2#*7Rumw84|I& z!Yq?FIneRSlUG*Q0@{+{Wiq;7lVfRlC(4e$cOYnvSUOrh?GxR+Hhq9SH`f%rw{SCUwnG}jpKCWWma@&Rz!=F^2g7fQ5|BJ>wIy(XX{Q0dij^-9ZYX;@I6S=f?Yc(A+L@`tEPXB9fD-tw9~YNeG= z&l;Csok{C3UkJ!~(oNDu$CQ7rP}x;F^SD1hFM0vY*!H-B%Z<6`1L7JBlo}f|^L)_w zwm-;UtcbL`W3+7;@mCojzSLtD6?A4D|u5z*YQ`>ed!4k>bn!vOUJv-V~BAR<%GNbK% zaUlk0$5`|U|I|zL_KM%WFgkEb#hBb~HtyZ%a`s^&mKx*>EfFuuL)g)-jbC<3U(B9h zCutAL7rG;+p60@fP$IfiL$`9gPK`GfsNrd8eC!CC4CP_HdS!vy$KGFBHWHBx>~)}n zR&lg@i$3*~gvurkvQfhJ<|wOEbDwj#B^GWB`HHQp4Kx^6DRbje)Ion`Mum&Y2s6EE zoH!*bC}yQxk%pxvPPN9iDO9b5QtL2Sce*oqiSCnp=~7;KfASWL4_qv(TG3&&qX^#@ zKZE+9UurYE)SrvwdH0L!bhB+3rnb+QR*pHH(s}sF`=Xx9UUB|qL-A?J|7v{Z>ZaY6 zi;_c6=`Ox}Xw~_;obvO@Oe7svo*(cG>adWzWGCLX;m5sNDjn^pc}nLF`maW{T4xij zKOfN32)$jQziFaN1eXE3<4C*<*!BrwE%d5S3fqW!S+&kV7q~TNqocDyI26>=_;0Qn zRTO8`k^3WEjqfX;bxWBFxdm&-_l79l$xM{8jC4fu%e(h7TMuujMt!^yg2*->PL;wGUNhg=@_Wet(^f^}Pp`F?$>}nqy&$~(jzQ?W4AJ^r_4_D&Wuy>Ib}8K6j8_M`k%B09j6+Rq4%gavrWDvs^I?1Gr!CJR0@! zDBCBbRPjtutu4^83@BSU{96kgT?RA02k6u^5pYVk9B}%L0s34DuLGR&T?IJhcL@Fm zz-j)SfOCGh9Q?HS=>s%OUoIx(KLDq4qt6_Y8-;%kIDLtIEKd3*5K5oIuL2&6@D!Xe zBjBMZ6B>RLXS5$q8JGk(k8mkYO3TY9;Bx_|;X0g@-VptjfK&VXN1T+eA$SGgl)pBd zR8C$xRIoUngn-WD3f)Sh-?V)+KPxZ4bV<=N`T>B|cZMEbvzP*mtBMydTe+m@VQb;a zm8(|ftSl>CWn1TqS+N3N4lvS5_W4VShUeK=`)Al6EM2l>C5>2RSg~eF%BrPHS1&2M zcU;ku6=j8sR;($zn=Vaxn=p+X4tbxOQoN)XR2SI_%kWK$l@wwAlGV$K))cOoSzP$c z65nSImMvXUwybzb%IdPh(y|nrZduly@FgpYZbN+(z2TH)>1lqBR+T<%D}4GkFN+rW zpZv7-Sue3wi z!$ZoJ6|T55SE-r4kA9R{*Ay>ad;jW*h4i~16PK-8or!OM=xjp;h%bmdo$~ae9|>X6 zow>a&g}Wk##NY$pB?m8Augvcj#0W|FQr=S(6w5D*MRy8g(FkcQx~DjXp5QO#)J!ik zw-xuUAT-y{?Y&fYC?ogQUCInyI&x3t{fWq7?fntyJJr`4eW(8BExJpCX)W~~6U$1M zp_s`}lscJ+kH(ZugsjQLqGhWK7egaxIZw0|u3o)lHJJ!qe`ZP9#KOhPNTKcN)f1mt zxrR)fn?6MTp4asW zqR9ufXcwcEWSC~W(m9C+fL<4)p`zE0 zQ1Zdsc;0Cn*>@CxgQ4UN8m8%J_}>waz79Eo_;!RpL_7`Ccp7#f-i5HdgzT$Fcnjib zn8wp^IpTLB9F6!F5H3SJ4bylU&cKQPVy*vrEyO2}_ke!`#=9TO6^7(N!$)z#mKVGH zc=A%RZ!ch&^%};b;gvYioGrP5b_2J?E?j9i&VOb7@UR)3cg)l zH2gRk37S5|e`WpGlW;~Tyv2X5^k0|aO6kV=!{_nM85({HSBjtDzbgFj`DiC8JRDbw zcU0uN{ux&)9~0w~^MXpUFBgb<=C+(^_#Y4`#d{Z5w1vg56X2u#`|l(B-UMt9J~>3g zI2vg<4e?a2YpckHUjXqE1(K^6IXM#N^F`^sS_2=-4{uH&WHQBve?WEhDgQmy>lqXWJT&7zh2BF> zdhq*C;EV;GP6%lM;PjpzTW})iJ>DL1Phmsw7e?H#2XF}f$q2YG;{KTtIMh!W!hdwc z{mUb8$j{hX;A5Pi;s@6os0fgx6I`z3c8;2+1|;kWpr?=;ZE zN$z$4$f8Ay(2_p=EN$HvEiGKO!prMWvrg{al93g@Ci3axq80F}hJs6q7cVI)T2ho! zysBsoY`#~dL!`Wp%$<*WW=&yfkq_&3?$PWGiEYRqN`+D@aEwcxl%C1oK2j&&e}8(G zE-iC1&u8e;C+qmhI-QQ^@ino`j0~R7Oq-H{AP$RS#j?fEEm>@XZ?URq$)Xj76HC?< zt}OHV8mpiZ-s967-~K@B0j&>IU!b<60QyaMU$}Efi2xdTT!dnm0gqm(KT1!S4)3vO zQQ4C6GJgP^#Hq>?^Ij4JCt7A<;u)ymbkiQG+trjJD8 z>S?$2d?@YEbXt&jWe!D~&JuZW=nsumDke&;A^Zl`9slURS($)rv*7vQp&5 zl)WJP_Ty?nqX@y9paHQCA46qA0poE}JLfB@Ad=`0+b*F!#63+%yBntwMs~=-KJw{r1~OKKbsFTj9R6C6FYtj<8O0 zEji!uE%ELS{LgRa&ThZ77kj?UoqhGvxe0xjxEs-D{`u`gvs1e9OZOj{V8f0tw=NOv z*!ueHYnSBDUcK~9AjQjV?Y*>k_PmQ3*r~)E`0z#D1U1s+4AWVDIWjx&sMbK!=6*tONt5Ym$o2H*6g@TdtZ_a z)LQ@7CGysz7j;kk_S?yyU_U7PXJ+-cEX_lp^%5Vr{*uMZf!3UgUE(cXiWFu+uK#+e z8@pd|iVfPP)(t%0({1ZOlR)>vk`GKN|Kd2i>+gbId`Qp+oihKWPlUbNm3Hi6}Uemv0N9l3#0bhYVruSaESLuEGmwNpBvV8u)Bi`d{|Ml+=_~Jhs zy0(sfvg~-y=xLT9N%NeGb=lRS;`Eu^V_gTI6F|gn6ofb*nugfH;$i1uKzCRV(^|V zGxwT({@pFnU>0DW@G>S<jbmU%*@$q&i9o;Y;apcd@QASca7nK{pq1YVXbIx`r9pw*a1i72$ z?zC_|`ZlGOR;e#n2}gzA6{iK0_^6;HwEQZT@4Hcf(wG-=RFHG}zx1)e?*1)y zV}Gv=(j(<2%k{r0g8DesL%5z6)b*w||fq{dH zkD27eF9P~ahR+3k2GNLiX{}WT(Q(eY(%Njm+rz1nfhlVm4OhN+NSMGa%n9lY7&uxY z9#pu=z)>63xizSFd%u6zOmoC!(A^>riw-~=@oMr3m8dk>|>Zqr}0Fa zco3gdE_4mNz6Lz3rTaiqK5l(i_&t*$9hkD#lymh9%1zES3t0%+iM8@Cs0`i97zd<6 z7_IEo`EJ4wh1~sL*_8vaYebH}3mqY+g^VD%X#=!lgP3Y4(Hi^r&xCvfuA63IXEfFn zTK@aKZZclzPTr6REViXpVUFwhs?^xOB@=kkUzsw6P=37dW%6kuYofxm0reuzOp<0J zb(kr#d~T0{O|qXBrVq#YQh#bhYSHtibfjL6cs=6RAnlsC+i4|z-HP7}-8^(-Vu)!2 zYNf`k={Z}HDTHvp7rx@KcUW)TttzwD%;0XzEwMS@%;K)*R^VXZ4=T??%-o){p@)Ri znj)jvV-g(_x>5=Dw#Ux#?A)F`5r>5C!nr+Pst*b0Dn9jms+il;BRwQs1*~2Pje)i7 zZNom}0fz*kj&TMKl52B&mU4%Li_C_^u2#^^CKKqjEBk>YdhO1pd!Na1cP{(GJ{c?n zsAYfThxKNEfIC`N6fR_sO`+F|*^`BCCGpr{3GC#MfU#ZvkkE;}%GcXe;B{_KcgZ2) zCUZ!@ke`#uq8hs4D*wj-=bUT18OV@XXY%cY$+Z5VPe*sZyvV+U^DVX&zn}PaTD$e# z%$tmrB!;(k3c3)YF<40wy`QcjadWOoMZU6#vPN0;%hV4JVP=fL)Kkpm*k93lOn5=u z1zm*>GdTrBb6Bv1Vdp?yy4fi3!K!WU%lSlS)?a^Fp}+oX#oTMRo_F_e2-KOQUpp+s zH+MnXiB{d(g`6q3b_wvlwBZPO^VXj<{2YgA_bTZvsx&o`KAs)3mGr6EDExA4%vQN>w1e<0>IY%4Kdh!hP=|C0ay|0I zcL~v4KzSQ#IqGdm($Hrf zhjkLYzzqbU z3w^p`dY4!yI^@=5$DIDO;k-_8*e}nk1sz3n19qlwPOtky;Pi)u+}{*!3pogDDNUM!Rlq53d21P1+}C zQ@8e7_E{!4bwVVWY|at5V8Yu9Dg9gD-MB$%H5c|3(i%kbLwd_9q{) z)clgPuYiV=25woHg3Gq-fm@5|RYUdT>aBB9X`hwG&k_Uo>aDL3F8AXXWfxp7qxhPF z%cUA0ZtY#T&Y!_;x(m1EXK*|2!tMGQ-1B$g3O|iIP+f9I-UhbNFl2F$ybaXfg}d`- zaQEJY`}WV^?!OE7qo2V&co*)`pTRwO7w+kw!98~u?!}+My?Ph!&7Z+#@4}V-46foX zT-8tFQau!Ib+ekwE;;=3NRlW!y%big?Q*ZgOsyGe@T8q{d(M?4S)a9rs*Rp*+nz!3 zWOk65M+U_qI%}ylbyu=^qP57XA7k){(Q>hIh8}Kln1}EN4ol4u@X$@QUnT0EqqmD_6}7j+wkZ_0X?5tJh&>^c zWu$LAA(Y3bZe=IB`+r@Nb8Q8qFGzIITAbt{y}xOl)34%vHj>(s6xfj-Zpda%9I_*U z(GBT!X}gk_!G^p~`zvwgCtyQ9yh&|H3bi55krqUUeL(esd~B+t&oU7fB8t3co&^h0 zQt0dJ^a%fBAE-V1AN%07>jVFn*@s}g;NYnxvoo4=6|fd&1J~q2oIyt zdsw2{9%9M2bP2g(Y0e+M>-zzI9`)Uj(h^2`7}DHl-w?NZ!g1=qff{#G$csmBd^H!j z+QX2sr&_Kjk(TSpe9LtmN3^-EdIL$yZJlo*iMg#a4V8wDR?b|3U%7XjA!?9mJTBzM zI}8U~nSsrPatoW{?*E`Nt)X_=$IHAPTWHQTD`PAm6G-nnm1(=)vIcJZyTCQywv`Jq zCc;)0Wh88qn`90We@w8Ms4rq_(qBIYU-fT_7$;*kSw7?CmJ`Cl@QOjgu>A`SimhX| z&$DnAt@(%Ve)+@nHx2##QsfkUsl02y()(;_-Zf`7?%>^XX=Aq%YXE#Uxg+mdsXv}r z$0JlQj9u!-&bwA_KsxwfSn!23@ea;94wwyuk!9mfQ9^P9`wC`QkU zggzV6D+<6Ei8QEQ(mBB_M;jyQpFLUJJ;7YOoE?-t!psQVDK_cqUloXpq=-ASP0Yaj z5~o?*?KD5O{0$GwhM1J)fgU2E9(R|pfFlFPmj-MPwK^V@J3BPtgV_7r^CCk$734nb zfqqMu0_hPx7+!QZ&Jdg&&Ip{NaE9Rw#i{n90+qdWYwzU9?3r z^#8kG0;%ym4%?&cYmkb;&8xN0_dY(ajoq>;=X`evNpbyd6B@|#7 zSH$qWA|l5K(#OSmQ>S1jM)lu?72;zT7`=!mj(qcD=IL)Ty#<4k?np1C>2Jh=iq`R% zIo>I;>dfi8)68UC6X+I@M8`O^ca&55M8|`b=7gOjS=AZq=fTk5vDjB)&Ic_%pE=R% z(+Aw=Ox>vy!rdf!Z0GbQI^Hql36FJJZu`N^kY5Yk(_g*SZHA3B3%AY<`5X$dR{RB0 zs%UCTd5dap&xJJ;chBwl=J{BUlH~Rg#x*D%M+O6R%%D^>#-orP6PjE(o}LoygO0t= zBbJAHq#C0~!P34(z!%BRfXE5XQV(H7UrgF{=0ckNk?vy`_{Zk0TEN&t+o6ouB9e z-*xQ5gtTK9LU%^gYn&kt-g)douqAb8O8q1!Ee$3^kt{WDxcbj`-!v<*^LYezf6sG| z@+g_cK~e?lwidETJtHiDmgRQO^r%FlK@xgKFf|A74EF?*@ZDU4*~5tD_K3zAd$_07 zUVjW*TyGB@le5FG!P0;R?2D^|KrbZuEjh<^$G1Yvn z$t~Eqref3tBEiT++Y&7_{)g}GyGgVgu6o{)4?J9w%bVUVx^7pP&1U?@Kp%gt5IbrA z9K47-;N^{RvSwnPZ&mGh+@ki{I@!(h*2HBOEZRaHdW&+#IW6(OCOYT& zd)d$=X0+36k$U^jY7*1%kVS6cF&g;8cMAur&Cu3$Q5YL0Znq$I&_47r;i&7FaIl&5 zzHd+RmJWK*&nD8lpX@(V-%9JnV1audy_+>;TZa0X6o>Yo6Nd4||0G`gFb+*I?kDkR zY}_!e=4bKvVLWOB@6BKAFb<_0`IC4wRy~Xx@w0d%`fv(XD?c4Quw?}-S-@?nr_f%U zEv6yJdR!2@s2!Q*31Axs#hJ_?v9N<;VtPY!{ck<7mmHC?m$;;{m$>Cy$Bez?Sf1^X zGCn&SS{UYGCuDnwbPO%cX0wHsWk{#a`4`mkNzS$SReX^OOLf#m66Adh#=2>b?##QX zu#-0NC`UBXEv!0oAq?%Ez4Vyib`(KJX59$9#Ld<@CtTtJ(=b|}%qT8#Pb6L9-XdCQ zX9#Mly*9L=*3Mbw7HT&qJ)3g*sWy^uMmXrY{ggM~jot~*FN|7bJ*bYoQH1(#yL?nW z_iBMnW6p*p5K}1vc0{hnRc;-%oioZUs_mS0o>jNQt)8?a+aqE)3;dskHw^O5y#8_> zY?ODzjm0RE18rt9+Tskf#h9e@RIv3zQF^VQO|8GaG+pE|!rpEZ)e4EJ^}>>LB4~8= z!cvh_NDR?O=G%O}VR8rqt5q*N6ILrEh16eP7RF!(Xl_p(Q!7jesTZta6}Ea|S(sCp zpxKOfla)?ZJL)*YW898`2LWcN<-@m|dcUoNzsh$B@kCUvhs`3rk9{vOzxc0{uy3R{ z^&!At^-PdlM~}JU_4hH1EqJ{1mQJAb=8{=9T); zzLMt(^ZNJ1`TT$gYg+B{agQ5AJtRIGt>yl{Td6irAf7JymTV=*wMw(N<3?r1t(~qB~d#x1Xeal7cpy&!6Nx*ZM#2wosleU-k z5mxyH8&!ff3-mGK&tObG*87x~%wqE~;q7KG&m zk|C^t1H)MReuO0*!s?G6#_IbKmTU-XpmP{2^~JmSk`H0^R}W*A{0J)mSee2oGHFMY zI%T)Hk4R~`)3SsQ_i%bcz?jtS2G6aqL3M)2Un2 z>%98X|E7QLCRN~|MI5v!T<7maSwc(`>!KSNug9J2$nIb6_l|UUexzDAvPbp0bl~Wk zcyDiJn>oas@iy%X{r5epfB1S-`Mw^N#+C`n>!HKfQqX>AJfv7)k@kutb9-JFr!)jSE5=C3!iCxWS%toosX_$zh&jN+ zC_+rBbrTyDsA&s0Uo8V)7TS*m4L*8@$YTi2O`EheyZ`)rq(#4;_Gwwu9evto1JS3Y zvoQJQH_f`OA!aJO|Gosi7}2NI!G29b30y*-HpxqAQUfhVsX2Yu1SejcgD;wj5^#a8 z(pv)3;Sz}QmcR>t^hrIMqqAa^zY3Aw9KBNmpEg0z8V{n){7rYGT3u#M5Q++6~!#LE!z!C*+!Wa8aIil`d1^eOOT*0}o_iCfTj zZ|pI|?Rf9K!7Kgf3GxjBqc_xkG}wQ|2uxEV)}S~x_L#=+eD6<#S8uw7YImi*s@g5& zI^067yWM^O_j$PA;$|yE8%bZj#86?}SXoiEvAx1|$+6?W#vJ&DdoDRXA$<-B?vvO` z(I(Pokr*nCn<^`-HnmqC*hFzipUW3tC8}`?HqdN#Hw&!8B}6)mTZ}b1D{`K33;W$J zA=*(@v+YZKAGJ*+!~t7LPc ziS!+jgqZI9n`xqdZsD}fEp+MVm|hO%A(=ioX6ZSu`L9eZY656}>@O=Eh_+JKY9aUFpo_%fcu%|(+dmZS1=bu6gkG{7ZeQyr--anI@CWLuM&}R4F z^tTptEG^2Rw2rd|^*I9R{0tpI8)ub3I+*8W0{irAKwaooAIuJz9WXm9uM6?R@HMx- zTEN__td8@+2JAK|Ry_p{*h{5#!G2gZVAX)RN+oqFKgP-<&mekJ>=PALO%Q*HF_kZce_0tJ@xOu``w^q;AKmcL)>R47@LeMfVWKo)vuw~ z_4=_35o~Yq<3b=8sE%){P&-UmW5!0og0l5vb}_FKj326CL)6O9&*rOOQIC z3AKmZ2<(k$kQ*Z$x|Kc(;y#{{_gUGfoxGJrpMt!q#@svUjq;|{E%l|eIxuq2kQLK;cEFGm(kS;ig$!&*E@p4HM@V0zg?AB zCqUM@OnlRrowS`XoAo_`@^^$@;B~qtSgD4DI%!O9j~#Gb<2wS^NZ}n!h#yX(-Vtno z=TkT|h4aE^_t*h%2HfF=?=1=T!-*F30q^v}50<-Cr;wjk&JnMlCGLyx7P$)TyKDN@`~s(Qj7H?my*kYXhv} zx)1?75qfeXi07~vJ?jv*USonsD-{h&L+XUQztS;_Y_qpFntDtqfCdDMv-?>Ec*Cm4 z1aqVy&YyC9RQ@Q`qa`_PS6S@ZoGV?&gbc@$oZ8k@b8sU1oT;+9+5L9^8naX@o`+RZ zTOuCnc}ODlY?MkpRnnaPi#cl_!~D!vQ61Y!#*y*T?w5LRiBg3y-PC1OgY0Cgk8S42 zH>_sLgT8SphhE>URF(HPxGrL+yT7zb)Q~DfaZ{I746>oeE(B^K-C1u zwf21jexJ{3MR<0EqnU5VQA-lrL4uFUQEmkpMa*Y|`i zf6Xk#Y<@KVQJ)b!8YL0VtX2uN(vHtDi}yKt;=eP0j+Igw!YF;XiSvl~Y>$HZPl2-^ z9F#N7eYY}7JSs6Ph!`3XPm(_u!u`0P!-tf&mVj0f^y}7Sd8^hO>Jg3q9Q_!BM-hPZ zk4=bNN5|)fQzyJ7@_Zr++y1!icLM7cK|?2)M{j2Zah?+QdFD?AvHnwm=;(^QjLvqm zmZm2XC)NvcEP7ecaR%$R2q-cRAumX@Jq>*e_ny9!ciFt?Je>khHRnYf!fqnz=e(i7@^W;ZY*`YYV3Otksiej|uVi zA&q~?Zv_>v`gH!7z`Lm4=fX-3kK|FU2NyoAcTxF?BO0<=l|y>ZK?2jD`}vTgB~u8u zNIk451bvkp=>Cjl2L>gDf9|`L4$Y^!D}pACBNL$cx^$e8RF1kK&6l@6Wv1h7kfRQ> zbE5V^iKsFP^Wk)a&0lAz&FWyoc0FR-1FcVkrnBbJyCi!`)KL;VuG3Ca4@*qB zCDEwrf^lWc!PKtmOe6GJ0h=OkqO)gXcAKHe zrIrY%+eoz-I?O zPsDUauv(C~&)VO|7%b{0eBcet8V@r<9{IFHIK-79PAqR7@7M5g<`567@!2C43o8-Y z5n1Yy49k{i#n8hfvuanVCDo$b{Zdrm&QgzfM478w!_9&9>QDFI!`tL{Y4&N!yw8SdYWev54F%7q_{TX#k+#CdpHk77A+&VT^VLFUW_m5vd{k%c+T zDUxts_Z#r}NrJT7_#We_Vnc-tvN$%Jw()#`rwZ>%92C8Ooy~s&ql@MqiB#QMY|vtr z$e;_~eO}DX@6LTcDleAYFse{2EkbE6`x z>FCku?8iR}MU7Q#e%CQP&fQa$xDNYRz@mwIObgn-EVM`KzGg z7*DsDe~)Mxb8c(40iLP;w9vI}X3pp{itVAbPnf^Nyb#`fd2a`1{pK4m=Ap;j(iL_v zJcQs4j3;OcT?xc_gr*LMVE;LRj*21!j{lR)p~}Hw+}s`udF{GrM7ebSs9ZYvpQW7w+7Uk5 zouIwePrH+IUY{_6@7}xQhIbiID!n6VV@| zN7DuFk_?2FD4S?sQGrodqLU27m7Ed6vEGKl0{pNvz?80hFO2wM2EfFa%cOX-`cq)t zY40h}5rp2G%&B}sKBD(#XQj@^M)c*x7!e)n%hkf=%JzoxoU{6+emX<%Wt_PX!0CG` z2x-vwFdWkwh-(ETNc3}>#jQhjt$fh?Rwm1_M9hhagp&}dSSpv|V^-2|sahH>wM(n< z8mAbG;g!Trs!1(h)goB+Jv9tg}Jyw@HK;bCPLUWyOL z7jz=HWHH`I zU5XbymXj4^C9&cAIA!EHvYz}Bxu_zW$Y$i@*JLZcndBrp$Zpa|_L4u4H_1C>ANdpc z0N*cdBZtVxI@&JV*P#L5O z=0ZY3!@|Qyjf#jEJz70xOeDUK7(15N#Epv|KR)3;ZDP`d+D{ZA^ zYuCTF4T+hvgKD#&#WrmkNg8%QPD2<>=@ zyn=5I)sx@cCDmr~K56kv^)UH_{EeLS%JeJp4e{XRsHCT@og1~*7g zL^!{6j}D}8%uJG#dwkz;i+}aC*MI-re{Oj4v;A`izx(#e0~1Y5 zngnqgyzKsIJl<($HC}r39cEd@xVr2P@k}X~Hf1YQtsF0rkBJq(wAjw)u!gOH260GQ zc$Qo}Tai{-n`=9$8D|Qu*}`RSWs5rG`@(snxt9N!Nvo_@Cux%$sV_7ytm8X6KzE)R z`y7GcsP*>=^jl7hgS@P+dCnnQr>!Y*$<}t%WIAe|Ymz<3*Oc-#nS4!Ib4?lUtySx4 zW$RounL1gywQ8+gwqB2KkhWLEeA5_BDx*&n#7G3a7r z^x=xwFSBD$b;q8lh(6E6pt8%KE2nI%lh>@()@0gip39Xz=c*}n)MRR9YjbPXlJnWI zJ&pKKXv~+5K}WM=+Z$t!GzN8_jXBX4bG|Y9Tw~CYikK6PF{j)yU$(`Zvd0|JL?31N z(`RE&@iC{{qQ5~ZCiavoroAGz^EUssn&+&dHBB{Z?KPRM8XG6W)7RbRoF;e2w6{SZ zKbgF0U2e^4n^&-%l;P)`_m*cnCi;MHBmJWAu3x3KQGIIBTBIm92Kk?8t?q2FUAC5ZW4> zt7bil#woJ|0smB6>?KQVmnEp9Ft)oQ=pQ8JQbqKMHVWxH8{46Yx!CAMLzFw_$k~|F zxUt7}HpZUHrrds65q*S4#X^$j3Eu;;K*&%JcXW4S&?$|#C|Ap6YoP|Dc0E;wDr97} zSHaengPCFNvIlMIrJ5@0l-l=KsKu7g?Hmn1KtlD*n&vhwYhm6DYJK`91(IC5dCP%m z9aYoo4`g+UrkyiJbsU&>vTB;cIK^R%au}y}8K>fYf7|qfRnt3-QBKkH{n^v1MKfF? zi|VXfbtPX#vQ-y!!Do5Z#e7w;J#kSxJdev3C zN*~?9#NvYyAAysq>D9(*^~NaofoXfIrga*pbQq)RMbq{gr;)3C@Ib!G-L1OZDgA~I zKHI7Kx>MTQtGdvwx|*-*@05P+R$b^+6$7DLRqR%M&8fa2+@)SsF&MC@t{@c&F78yF z)d!!yorRVI)AmJLo6%{)!stvcKNbIIGL?>#W3#VgzMVEDka zqxTl+S;{$bah3%4f+d^kN6Z`*&8R+*^)|9!HT@&e3|f3BM`Kj2afY*MN`2LI6xrUY zU(}22GLntb3I4Bq)m4-W2_7Iv56swGHKkLeM=m-JOsN;mKv~oqvpS74P&!9N%~Ifh zYYBc%7rdfbdQKPI>y|!iSAC~fU9eEdd0X%~hw56V7Y$L}s;_%hmv94d#}M}VUg6b@+O%j_L3&%XhrNubBZKrBYJ2F#@Z(X z-zs~)rD~m}YBFE5&MwO=5S6vaN^@n;1EQ~a-rJaFdeIQ|oVMmU8^u|#uUT)Em4MrF zS*eyno<}3=64}uTqi}WphBDJitzy~jV(meT35L&7t{{-Ev$Vk)F3?PMF5J186}nKS zz`p#zWi2(255VL7Kg>eHYx^JbDANDmWFDo91MEu7xTfF z^MfzJ8tc(IQv;5c6s_SEF1TMGd{1jEp0fAA^y;cCG}-%^8P&$A&BmxLXvblzhix)x zQ+=%qMnl=l2Y;=j4ghGv)Wfi!yQ{@SyPUP3lA8XJacT>iDzr`6Q<{xa_lxx46Yai| zHk}q#Kd1T@4Fn0kj3!SX{59JBeAPvV>f25!5PXioS&IrgV4-nDQ~r(a-u!#@zr~o< za$vgG$B5cbTa&4Gw$!@d3pUlIeAT&5=?%C9y+7A#GiVmG+#tvMC}TE9-YeL z6~$$+ty5j?r9Q@2`N7{q4RHJ6x5H`AMbF6B1*oy{!yYg3`u{)Eb0Kil*K1`K zZ}T(;WRZ$e*5SA$*{dR{-`|9`qL z|NnJio+g3$#k$>oWpib6o%A*sJ(^l^w=y$&KG~VgaZxYMl(UNuWCys%h?#vAO)R3q zALYacrC&wb)4TK*sZAR7N;3JBmx~FRiM~Ak3AXg88Je^oa+!b9^MTLP=abGVNV zM>F+e67Eot3>~X`(C*0AC{!wyydv~SzRji&Jm}!aIftDg;?xI;bS9r27NEB1MY<~Lh(yt7)zH;BUtzg=8S_#F$>xsvE34NNYx z`K7&yd#XRK+01{v^L4%Q;LMA;xw-WG@zI+fJoB7goI1+zl|HVv`aR2ivV@geU#|^K z7@JVJ;CCr&*@S>Op(g$GoUpL4(BWfx(E@3}X5KJMyg588Yv%U2SwLBmo zVDo2Qt~WgV<+I|~bm~0~23B1w55hC=_lxA_raW79o~fFn*dm;!@~OG>**EY1`iTcM zk;}Famv-xiL!d8SPEy1fHl18hQ(b*9=S29t_HzeJj`oN4av^D|_)L{5{u{aeY|^q9 zwT1ovtbZn;O0#|D3WaQrR;wM(sPE>{nYLF&(hpFEk8f^%RlM*6zE1Si=H6GumYHIQ zXz^yp#09*q@(T9WoOP?icC=?#Rxs}b zG4c6Ngti=iLa{Law2#Hs#LJT_)47mR(QjP|_aUbNoA1*mA-|iGl4%IX=8VY`HplV4 zK)|1?ep@BVnzDU@kvXIK`>T!a9{Z&uo&WfUdEM3e@zMsc`smE=-xNr%zfov=b(lH+ zA(J@oq3U+M;j8ZMZu=|6m%D2&>-YTe^52dq9x{O4hb{r$O>_?NOZmFo>VUHjxhm1I zW}BbFj!*T?m0=-G``*J*s+(T#sB`G|9yH`ClV)`;9;1+sZ`!AX^sZ(-$kp%Z?$*a` zjsJwNi_5P6y+gfVx`Y2D4XB|@6H$5M<8$8+50%x`)g63Hjv5lspIj?`^1+&F(~IJY z*S_l38w{1Enh^OiHNzay&w6~;>j&hO6T_KT>*s&Mr*>t(wZx&G?)pbsxH7i$*+hj( z`F335THgM`>*V~4T^%o~YG0XE6XI~H&GNm4)$WK*A>z&XGhfO5xHrOE_H&=%J1rLC zU=Ie&%R4;Ut89N$JY;GP(}m%BS#0^GC?h10UQo9$^B`e`&<>;lm zWatSYIff_buPzY3vx4Ozp~g*H!b6x0gL-X+*46NF6M{i*qDP3V)t|Lx z8J7{3qhq%EW|2WAj?8}=3FU~bjNzu+K66EW?8C-$3)nX{{ap=I{M#)uQ&>R8-ow1_ zN#bd)-PY!_lQ$s>iTN((jYIDRU?iRZfskpg4{g6-=+HBaKC#F$B5Tu~G%Y=l_V0Fl zsT5JZ*!@wjsO2NlUbP?56PR6sf6~Q#UGpa?ivevfn{L(loHr+PBQjOgUtcjI%iFgd z4jLg4t|{53qxrXk7P)AD^lL{IlX;u%k6-+k@(-yH0A;03C0`gl6^pZcGJwP`#eLr9 z6#!%ad9n>fVIv-$c;JN*j5RF{H;-WZ`=i@rcn^Mv?T+He)RAmIpZ?BBwo7A{jHKLh zMLZ(y`4=K?Q&y*a{I>084m$7gyAWK(G|V;`_1u$@c5&`;K`=EbMbY!6%(-?03vofKHmM>tAx0S z-KTFvowl+5M5x}|s8bOUF!Sn(r&u`=`DF-Z7ChRJM;Mzon*JyoZob$UAXak(ba2S+ znr+KxW>yd*0swlM`D&v4K08$kFEa$pTs(9h@16zt6A`x~pjEe&EQI3FGz#>5sBu{X=m9Jk?XePypzBG2>ZAY)6Qv0MP0G%NrB# z%+x;FUnLx^D0VN3+mU!PatHQ^LWuHbhlD>ETNQRkrV_q?>G3-yyuXqeHCm4;u%RO~ zO02kl8$M=RL9PIn7VG54guw9$NOo*si=H(ly(I!Zzl??Dk>$Twb&8OARVneX{%sWqqXO36_vPLL@0Q)_9{ZS+(amR zwANHoQHe`lNd-G)+k>>-c7sZL-rla#>MPi2ZFdDb zU2EBBcvNfM*#4;2w$bo!+VYL<|E6_sG%VD1Y;0es?c8X1Qroq${YkC9l1vwkOHco>u&?sh34nI<6{}uS(NZrR%FQ@~b9Wsxoa= z_uH$o992_XRa2X*reQp~Q}l~oQ9dV`uahjumpp2d6gVW0H%k_FN}lSKU?!+kCo9XB zt+mN$->^mY%kwgaI$&FFz-#3J4NU<%y8?bI4}32x@K4s4TAE(^==@8a+LupSU+!vp z`Skghd$qv><-fks5qwJ>622^C%m*Q{V*=y3_<7E6HpjpDp|05T3(BKbL>Vj)WuhIe z1#6;dEk3@g9*|4s@f+u7fwhf~SU3KgUGkW7Bjv7R<5Q%jL|0R0p;JTa-LhW^vN~-* zeL=u)Y6G^nY~IzoxtV|I{rs2yY=7wk_e=jS5BjX&<^ObnDJ(tu^?*H?GR4(}6^4vy z3mL1~HhJ^5X&1K5n>VUp->9cTMz5*+%`XEQ>Nhv+WTN(0M19n_d7qr;q;KXrc&#o= zpPQdwV6ocD?X|TIr_0sU)ZEE0BPYF`C50)G66B=RH=qtfXXJ#pb$( z#y9qT(Dw21&(B`yyUr*=Bjb|NrW$6=e|+)c<)!N@U);KV&ztXk*nZ?x&kZ(g+=O)F z!%wfS+V;EmKl|4eQFwfYX+hBoTlRi*^5Wi?!riCmlc#656~Cgh6)atu&`?cSIj0ay zm7(g$a8*QfZ0$42jW8u-9~%4TaZQ)oqYs{qUK-BKs5NF)AJ}5>&aAC=mMDFrKp5Un zR~lk5!H21|r8B) zmAc@6^{RUFRq5Qpm@hHEsflSXj9seRJPkt}nC{sx!hFGWI)l&~zSbgp-YUDF_UmQ$ z+vz-=%>sW)wpNgU>~r>-MVS6mduLRg70GlosarMR#;lWQF{TVK&hH(~jy_!&jmb?q zB2g&)2Zl{B8{+i-wj9X9{D^nPXA&NIvvS%=(X{3R%KunaV=JgBwN;f_W#t${z(lR9 zX3VD#2VWv|00*-qn85N)jivKi%$Cx*#S@z7(-pC&yQAs+1rxheJr6@|Q+HNPJDMNw z&j?hoTvqO!mv_|>OeGMz+&k-`p);_*V(7%gQB6#5p>)Bljpz>rk*h-gZW-USoVI9sYMS8{hvs+k z>?Y==6Y(ou$#ca@WnDa-tAE%un}2jk>1yn-^ZzjS=3z}8U)*@sn*@>&0zz25VNq1T zun34CH-H$IYOpS-ND~A^ix`zET9+&=K~Q6B5nHPPH`-boToJJ*BwDIeqqQw<(FVj8 zEwyN=wbs_(naiTz=XwA5{qg?s_Mu~Pb7sz&&n#!=%sF${FU?o3c>}$pXXWxjxWWFd zmE;%sv=n@1?z-FpDSEFCzO+DDxC~!6kOd!j^$s3FJ`Ib28}i|uJ5f>Labw^;J5$I@ z@z*E|H{hyO%M0O}_*E+lm#bD4_YvnXjq$vKoXq2xSD zno)8AC7+|@B1#-6=|o8vO75bh8zuKp@-s?)K}iov?xW-ZN`6I2FG_wx$wQRo< zJVME1l>C8`ew6%)k|!wn3nfoc@;6GJq2wQwJV(jDDESX1FHnLrql1VHGfMa;-t~DDKz9SCYA@ z(JAsaK~NM|pOg{B{Q@OdAqko;%Mh7mBY05n^SjZGe@NgzBg5H<^h7X-r31;UF0p+g|-6bQQn z!n*=tw?KGLApF@N{6%7={HvQ_wF|?PUr9<*WdQGsK9_H~Dbo*?Ot2b-VppdqZm6s9 zqQq(ziaVXjFAnmHD<~cK>h!04??#Oe{Mo5~|NB>Qj_TJ){-Nh2L8GRMF)Ac5Cgyz1o-?s0 z;?G2SMx8O8JeSVi)XLi2UOuk{Np=IjKg4(q}Gk)f(d zfujy|h-J5GfA+mR;2~szBL}}8Qjbz@z-|xrJ``3Pd9nlU9N^ZXO8`Z0u%fk&5{Gwa z!A{bRv4MOC^;CGqkTZe_?64eT`pT`;pa_~g;ND2NQ?8tQZ-JUoIwxpKx<50W^Jlt{ zIj7Zmf}A+)FCR5eu5r2~lDASPygv5QoN(srk@x0$l&1SKL*!~I^Iu|DAiUFShK5+V zl=11rUyi}wxffOum953$PyYiB!R6#fw)S~am8%*(g}$>~Mt@6VUQ{Kpf5pB(I$wSZB;)K)_}KNY=>kuqILr7XzJmZz*L%v-)J zuV9t3XyAQ#t5&JPm#%&y>Q!>Viyi^ueAn0ZG0vR=IK6^{8_qdXa^6fm`^pcV@N;$`1 zis7z&kRhfWNvcTh~#W%PIyq0p)a}1xgvsHahA== zU~?MT6&dV`MmFaho3oJ3iDXxRWf49%u`8OMvd*_ls?ub7OPMk{IXOIrJJwaW(xg;W z80@8pHN&Sslo1f5QtBKYUzbUPlUsNs%_@^pUSUw{5KXFYfoN_(P`3ijY!NJ5M9n$C@!C5>6xp2zn% z;Oj>C`bJ|`7ks6Z{~Fu^UsuDgzQ_0A@bwCOT?@bZnrcWMv0;C0Uo=>eZ?@rWMv0CC?9RZ1V{B)0@!t`3(DUnRH}-pI_p zFKeZOlMEX%b&@(6=bpgfJ>|35TIu8(y<3}5WaZ5k30S3?Om}RJRAer)3Iu^z8Jq(_ zB&ASq3Drc%Z}9nIcPmd}a?X=nRr^X0jBC|+uG4s~(a3+)dmY%iDc(rvrqnXgyT8&@vxwLZ$>};Evk}TjprcSMPJi+zOcZf)Xv9rwKYgaT$ ziE>4wID-{cQz&Q`_pF_gc#1wL?t!F$V6;#iQ2~;Hcel4i2FdKdIBfz?O>p-#650Ld zq$9hJ8hbs-9(9gh3HPsSI9BEsdsx^swPI^Ne^J zyh+~fW(bPNZeF52Ko0 z=A(T_qPve-g0!D7Hv>>aFaj#00wj@f5Kwaide)|7beALnL(MEMalprxJo>p3Bwm+I zdDbEEnAGWF#Zt{~bo(#Z2?u8@w2~J6BKJrne=%{1-@RHaqjR*h3XOEOo;VPAGa&R~ z_pCCXXcM8kUltY$wN;0<0pE~HV+!|awg;67FDO3??{3!$Dagj*w?(2#f-0cMXub<$9pQ9jFnC5N+mr& zfC2Vfl%8)jj9n|$*r1_$5dtOW0Rh?tgn)9qmLJi`eFKi+^v*JRl!5&$=(1kZS%Qn2 zQ_nMKpz?ut#`YTmUgkNH_m)B4{Uq-?#M_z=ygx>~YqozQ=cyvL5Ai-_@%}^{{?P#M z3_9ZdE#lpdc#C6zw_$q$$-4;g{+K>o?}$jKw?Du(t|c&5b$7`RrGO)KrP}OD<;61o z&|+2|t@)N~k?+OE>DL7C*hb3i<+Yd<2+d$^^jN zoPaQo+X%c^w5sTq0GM@%T$puM9Ga3*B6o!eFjP80F8*6EV#(&? zW>?XMUB)RP2AIiGDKOT)9U%yafUy`D9T|A3k_5Jl0wS8m5hW`XFnH8<7{*t$lOxnq zcMvc>Oy~vkv2r;5&B@%HE!gR|YiK%ILDMZPd(HWoZ~CajmcV%!>w|ABJ4ARoTdSFQ zY=@v(wxvy2p#O%)ZWF5LBi`{}+?);tZ1?GS9rmt1vhm%=cN zjd(W#8mj*sb(TG6CP*#f1^^nzDgcd5NZ^eE=uZe15P$eCXK2)MwDq>hM zn?8rG{{DS64DXqjWIU>jGKhT7jg7TQvU6$`j?WhYm&5^}N4I~w0xu=+h{@J8CW&jL<4 zF@?Iv$=M2A4KU*4Ptm7=84aem{0qPlcaoI$tJ!%@|#xFbG^735$(dFFCzGW~58C3im zXahM8EDX-xz~Y_|>fDnJGe&X~<3hGQ@GVY=gzZIPV2{_(Hy<~7u3zpc5!LQUX8is* z{P##uP*#e3rHsopQy4IWi=}AN$U@U*78=6!dteA3&KVCwxbC_it{eYX9TrwHJ}eqC zYANznkntwUs9lRPQkOtR;~OYr-yY)v?q~gw5fjtZFjHL7&uq0*`ER)gi1zOC+6%Ln z2vc86$yN|7QhF|uKG+SU4_S(&zryg#b_Bo2384r!KQww(FZ4=R(g4>;hld>OU3=+TTUFcc_4i*_IkSlNOVkc^VGlgzG$=>RP+GtT>%`-MH&+C?gr&ZFk zA0MRF1ZU_v%k+p;!}|e|8j}!djHs~q76$V~hXavzQ4a%Yv91&QWf>}!--Srumm|_R zQK6z8k#;NiK&o{`q%~0Ll-;OQ{sTl>osLN3MTPQp7zohoK%@a;MA}GypQ+xZNmUqP zB4IUiVb=$ZV%AA7atQ^Mja?fUdrvVPDoe!DRXL8xcQo(ypKDpwd!*1_yK(@RnXLI* z4fHWTSdvg(uHkmIhyv$-l*O3%X=NDQReibI!cJRy)xkK_kZaK1Y>zx9Rd_Ehi($`N zdR4%pt|;(&j!U+OSwk2{8gfHQ9nojFrv){T%Y*iHdt|rvmgizj#h$tJs)YZ}8wFmi zVj!l+Gd^y}HJ2+UoZ&tbm@ZdqMryxpk9?Zq@Lr4=*jY=j;zDXcf!ExC{ED!Y8H|R8 zTzv%*bA~(7we51Xax^NrWQtw57(2nvUV2sSp#fq?K+X0rT_zI4TxkqG!+qP;cDcH9 zJnj4T$bD%NpT%XjkQja5(isI_Ie~g0UdcGoklVLi0VQ8VC5sbiKeR{cr&2(S$LtkQ zvcG0!f!D3TMyTLMQjDFB@n^XIxnQ8A-CoO z^Qbf2b#5KDYVj)Co%YE7*VJx{F*_$S`zjHSDkvWf6{P>l2ye($e`to1Pq{VPs;TQ~ zdq9j?P(kb`BnCcNIt!Y6v>k|_F(#qCKKf6IQy_X0?L()8f@uI9B2&-~Kl=gO&?J%kPx1}HNm4vB`u|cKCuakES;-GPW;QE z)Cl=%Hhq+!IH)Q-ZsyGti$xR>w-1&MIc)c2diKC^>*6xJ2l|xjQ>Y(jOZHVeLjm>B zn%W~}nhcNy{inqL&oahb`oATkebxUT8LKW0$(Zwhlo4Lx3^+ zgU)(v+P(B!ROUPda{*Xe zyx?YVrjOiAW%|h-)G6uSrE|0;dI58c+(=`NlbdPGFu8-q94}YXnG@wkI&+fTOlKy_ z9du@roWsJnR;D+K znDyy;Zzen4C}7Icjqc2C#Qb~6ml6J3(9X+^m)FpkzEUs&O&|^hQs&0fi25kXQjQcV zcOj6nlu7lgqR79Hm;Vv>PNA$R;+89W=OLeW3b}7FS_1Evr8=efX>e@lr)>PyM+YT9 zjUL_d0jfS(lX!cJd@7y*)EA^{0uiprW)lMcf>EUv8C80aQRN9Ts%%2Gm(P*y<&A>& z-MdY5Xfrqx87C|_t8--IR(4hYUtT5(VD z4G*8P{S=O*UD7&bdWH{nPR1#K=VPcC`FSO2@o)kfu&a<}gknTru@V_PcddkSg6?D^ z8mSZ562^#kwS=^#9x4Hwg2b&;b_jQha(##VvP&o&Q`IuFByg7&C}i*@+0(bT)~{Vd zYr64EnFAs|U=#0FzDZxc4zw0+gGjwUu1A-!PxjD?*1E5Qr6AKJQ@I=$V^$2VuA|$T z2VsGpif4tZ*l+7e2SV8AR< zu_c4~a@3Dy7medUrw7|mKk@3o*ZQNm#J~`>MT(}_nXEk_oQ33cB7*4zI-zt2+9=MU zff6r295+~jc#nr$g@Hj8ofG|?^JDp#EqdJ9oP@hbBv=n4j9+3E2PY+6QL zOXWry^x<*6B{S_-6V;VXC-R8cCWqZES~JS4JDkbV!D5>_+rgY%ix%7C3?G^*jH947 zn~%#k(ngogNtU}@s4Rk zskD^{kPsXW0R0~>0uw~8Fl|p#J)a*!*#tKAdi1K;lRtT<5&z0|27^i6WU|FK#g^nqmW0no> z;xtR_Cts+I?eJBDJzh6+QL^z+T)x2hN zE?`@s3sNV@2DZh<555+If~%K)o~fR2?NW#{c-rG5#g{n5`@$3^s;@c zdF3?9F3r4to2G(SG_Z(*1uchRp^Sc#8~Z-@*rCyUmzB25WGhQLh;J|eZ)UpPt+F*{ zg*B!iPuV)a>~O?j{zs8*Lq$=eps30T>Yab7cmC0;SU)CY#9FR&OWV}hp?B1if7VU54KU!w z3bILYR93|$Nrgkzm4YdOqcX5C2^oOzA1_T{HB}pWVWk-v+KzK z11rzAm=vc&Vw-~G8vtJ6vE0fX`nbZ4o!Ah<95Kyx#78>^YV(DlO;*`&3mB1kXi6p{ zX$UTh=OA2L{s*qx66+vxmu@qXXNTr=rWJIj5kW)9E9wFh8%(8sH+K1X?HYpXP}(3| zD_(^wB7PVyX*`1K4gB2*@w+3w9D?hEebZ)#UZ%cwjqzIM00V&Q%phE9pI6~B!%^2D za<*9jm)5U~F{{g#HUyV(bP>Q+T<;eD(Yw(D3;?d;LAZ8LeHE??FX8$e!PUx2y6={> z;oTv)_D!$vx7CeI4W64iW#$lE)RBX5J^mlKp1p+Y8G>tO_Pn{d^KK2pb*gJ@VuQQ_ zw#^Hc4>IT=`blx1cWr$YuGLAyaA}edTzk#$Ew;QDKMYr6@ATQBh1vz{N*DAE!!=fj zI=jkh4tNzVgJ2l0-E!2sLa&r&USZB1g3A%!18|*?c@|CElRgaB_CdJ1Wv{{&VH@sU zk?sIjzVn6(&kYOT8-lBM#s%nI;k}2mdN0izf=fDT5UxB@zM;YB5;5GnT$lh?f7ct& z@4ZnFJk+~F0wWU}`YLz1?%nm}AcGFVHf^wX?RyojhO}Y0ENKX?uN8aWQ|?s_!}V43 z%-Nyy>3LaLUh4n@=v`X|;i8Ov6)uPCFkIc~sCUJz!IrHlTQUR}9+U93n{!8x*Z%u^ z*AK(>@gQ8MroRf;;g@h7ac2i&r7$-dJdU_?BN+`{W4)d~#I2HXpS@%GJxgL1C7WZw z0Qh4Kn4p4~=lspnsSnKff?4=&dPX^ECts*tZcNdBNd%nLci=*oPc+hEH3j=yOgrR1 zUw6y80vTVJ9~X(-al0GqpLU-NZ*pr|=JQmy3Yoy`v>h&JCU?Z1Ox1iNDwNQ`=w5$J zotBzy*UPGu^tx0n6?B{|73sJ)jmg4Vr;>WGeV2?C)|pb*aWJrVECJgZ=Hi5nJ>>Hs z^C4K!?;NEcTxLw(R=eZ9{Tio_O5-y&hNSV+oVNYoR&IQ2KC;&Apn_G=SHz%yU_Sbz zYuUlkeCw~rt_`T~$)_V=+GjB=gmagz)jWM;m#Xbr?|@;!eg4R$HirsKlg-9iyEj=V zvr{SbTU3p6!RRQ{JNx6}n&`7h+XCStYFn{B#EFuM&A;Ks`f~k)<)m#x6d?(M9mzgo zO#j|Ulw)q^-AQB)vr0E=GU!#KQaU^I_#@W?kGu{Hbz;-bzx!?3lSckA@xbGu22TBI zuz@>fzS_X!4@V7kV&+WLiCZaK?y$Dp96i*D|BgyZY#`{*_KtiuZID3+p?__l6Vtzc zwG&%jAMV6AUPqlcu4m+b_eVY(>ckq3Mm{_A0bW9cl-wC$0G)W1+rXF?#J<{z4~-b^ z#P#!_6Sug`4Jn=5vt_6gOH#saxjCn+YCYD7{~f9$+T?2^2x8l)$cJ3*VFj`SF-=}`kl}7tA^lGO|J#G-WD8|3xg*OFtG9% z&j;aZo&9Q;c<>UgUlCkS%jeBGJg@8E5M1_m#{Fr_4$AuSy{!A&hv2%AGziy=|AA}s zOSrZmxH4#a3ORco4#U-XYDQv%nv?ZIaMsO11|3Abd=M_@(pT0i((GZl(z6j<`$9&q z89O?C7_LdRug?zM81SKe%!kv*knI6*#kvplEYAUxrKDxE#@DNmBulOI|QU3VO z5%9?5Eh=HL6^i5lqE9(NmUs-qXzWbYo8?j}EpfHO<<^7KTvnwOtr{0jM*VXbC zFm9vW3=s=^pT6U8ut5vF+7l_i1?OmIk%5%^IbKfp1Jwa@`2MG7*F=8wPUJ_fbQ@JF zu~!(PMr)2~7t$m>YcGwtKYyj>oq}{cVq+JP)%@OKkY#^d&7M`?_%P?wbyUVplhB>! z+EZcOxc$50bj5^?UG}Vdr&qaW@ZdhPM*Jtfj?O6Ku{Swk>Mj{NsuRNgd4|n*GxN}F z;a%GKn;_D05J}8!#f_I%^qQb2lr6Q?hkFFHuXz@{n|!dfmiph|gPZ_F zp|7Rxs2QN(#=2L)F^UKdR3r>I86ntks@6N^lC1Z`jXRL_4n4gp!EywkH|Y_SlZ+hL zn~>YuzV%y9&$99og4Y3s9IF)wGH&p$9MwrR(nj^=KAO+h+@QMaBQ95+%TT@HE~}cn z0H1&@wN?O>>;ru4@0%9cx%hTh`dz@hvHZKGpBk_8w(qF$gj1qMu_FQ+j>3#$Z|qVm zNUUB8n$@wCZg(p`|G43tPXsYmz|b`|PD*Ke{ORe9UFro%dF#;za50=~Z{xJBYqLba zIoNF9C)3-ugfhojjAv4fqxoCr<>h|sR(>%u>T{nM{2e7Fjq3!vLUqtgmupQ9%Ccog zvX`jzQPFNE!{b^PzF)d<+qaf=<;qjv7JL{Z43Wt?m1c5wq=Zr>xwfIshn*~$VaN1;irD?Bb>A-f?UoiDVARJ|O%SxJX*z=@ zwTLcuImHcnC+AlMd~9!kkKalZqHc^dD#A+0qn4e=>40i<-8b@91iHYGI>-OP81qhTe?_@qYf($N!9_weEg;Of>JXyol-ST11u@X68((r&0C1Mn-t7v~$BO_2359SYt zgGXD$tXNHLzRwva%JB?({^^}-uOSB+%LYpJ;BxZvJ&G^USIzKihqv z^Vt;V6auc9#-;N-ay0g{;+kMRy~V1??f*pl?Ce&bh&TyM8WRM0wH|wi z=bUYpFTlu+rlaxt(y06>ZVz+^N35WcxVNTS!H2ex@{1DmIxt@R;{J)Kxnrae0t_j5 zq-k4cS%P6A43~O(JUica`X%2KU^#3KeIk*Z zR)QrN8of>Hq9a5RA;4L8%3;MtIqX^6Z$&=6EiDs&Gd)cA(*=b(qJ-#$gG^HtoP9&k zilW*K@)TJ7O5=%N)qIIjLD9V}ptiwrr=->DV5ryx%;Fxm_`EV7#(YBOru{G%;z`)R z9qdwyu=x?DNxNV@uHq0BoeM)E;JBIzDmuIJuse1umU+P~8MHMVut8QXIC;Lwxi?&= zgQ*%VxA#B2giFq@i8|{_F9FM#y+Xw;*`q$MsK#Be_@E{;{hWz@u2HAqSA_SO!+Xu) z4;4nMM@WL*d6K|iEHc#|aCfyTsKW2S#& zqJKmFU}Pnzc#~A<2SX0sCEv==zYEtCSHZTz;olq4W5Gwu{nkXNL43+@FpW!HI&k9& zgQytC4chmN0zD;w!_G8SS~?*t^uy9`%xbCzlvbFQik||Vn1F*rQ~eYPrP~9v2?uG4 zMmDDYxn+fd(3nlsbWaP#zC>2#Z1Ri29|wpiEzX~4W>RQic+FzaiJ$W(KqFJ&H1P?= zUE2{vxe-923VASZ<7nQdIBgOHdHIHPmfCvw^d*?X6ZIH_z7Ri_2FKeXWc_1p78o)x zE;?9%?odtf>KPB-6q=D>s}qc5Z#Lv9D2coD7yEsZkQ-46MO2ti{}Xyukal`Xb|&$T zbe**8zmDsFp|eaJQ_JC@eajC_&cBrxA31}8&LL8}(o>+Z@+Ntzz#q-}^M8>u6m-S?_FE47Rq>)g@`ifCod3!h=Ne-3Bq&T?U;u|8g8 z%LR4U^rMBs((TV^_jAEiUVRF)PMS9VrW>pI4~rsPw_mnT*{8E)Vo4(K)kxgceqO?T z5XrXUF9(eLD}_F>z4AhM+$kkdrg`?Kt&XRQ2Ft@IwyypkBAkHqy>IcuvPC&2U|w?}fx9TG)v6d|e)?>=VSqy)q!UtUWrzj{>VU)aUJ)Bkz)WSLKo=CBX~#?hyn3@>KHDp z^uSGrWud?_>uuG33#DJJnL=O06_JJqu#WdjC6ob$qIP@arCuu7N@nRqSz=SqiQqUT z1x|8^HS+kMMOqbiT?9Tc#1Fj9oUp+S%~;W^dt7my)EOHxFkI4O8e%=lNqdXi8eyD- zawc z+ks&%$#4s|H^L}K3|mA)40Hd7;f;eY89oJuIZlXS$d`_h^vF`g(4-t>=qURihIua; zUfK%`KOq_J;mRY8^T-A4d zpFFveGJ!D{W^nZi1uP&B6He4C$>A8%CFWEKEYc54>`Lc6u@h}f&7}~-OxTMs1ZI3x zs@hI{t4hpJc~yzoN4-g_-XU*a3}ZvLi*@CKgO!<|ueu=U4b_b?CKC!V^6G0)!+?z- zLO}n1NcoO3x}a{P?tSC?1|P5~hG7cH7xEpJlY1<_DS|IofH$zyQ3;&mpkt<4yWdp1 z#ai}gUTYH?TZr-!|08Puql7<5Czc+ed`R24d-$mtJykltKPLYuWh8vmc;qRZ@>EU_ z(w*pj`JFY|wdmu}lIkz-_N5MwR+lDkepf7dM>nqWn%81`WT_o866kuDd|?lsces)SDs9dHQ|< zr*g;mMUCQU8Z5CgnDf~BTzVNC)u27l3`y1HP|H|DX6trv#`UKIMLu&rTklJ+xN%o6 zZv6_6)rDtNEi--q^H!5rPad&ODF78OW~=vS7?znopsvK4z1rR+G;j`>EOC5AFv1(Z zqeMy6;Tgx4;rlHsu`Vyio5<%mnF5BxMBO9qx+u|g{0+Jjw*@8)29>Cg;w|_-LF&%H zAa){sD-WHCu_Z)3lB?JiK9Af3!O7Dpo8wUNlB!{V+<(Ro0+8GGP$tiW`_f{>)b zG1m)jZr__)m&IBG=hI$HJ$eRO`gPmUSPl~DZQgq}9dn^rG=Bv}emQR8I z!xLepxhhFd{NUN8iJMHkZ|kX;@&T6XZCEbYy`0$KW#>g+btw8Z)Dn6$&wp^k$Otfg zz~y61tdlm8*GG%zMbj&K*4l(esUN)by8Igp_1R55y$X+n6JKYB1?Os=#?YOvlE?5x zBzj?O$;6xBR9^EnFB#lM`8aj zN#Z?@Ry~Y{%~F*p)RU{FW>l>*erZYTUoK&sWSl1c@i|ttWkPD5w|<2rTcv=JumZoO z@oW>`Y9UHX+O&l8p%%?mm^08$FNPhHAfdm`8(K6!j-~vFyXaklF7qr)46GTUUT`Wu zxI+Acmp1{qxz9s=#Nv@7230$k=3!Wb*KpBVO8YubHeN@X7>N1wX2*Q`S42P>*TBUr z=23TId%jUGpa(YM-@}1Jf=&Tl?y0iTl0bjLYl9>H1l<#!-RR8k^meQ;e=fz&%^H zQNSd%B%~Z|khz)0rDD$}hu|}66ZXOfTn|DLLDCJr1yDQWb70p>Vbddd`jdkpOQWOS zqM#htaB~zRG8o8RbKi0`=BZz9_L8+0(QA)bh`#`sLY(o~TQHX81JhbDIR2a>gpnp8 zH#07dO8XitKDeu>`AwYemBI9&vU8Lpth^=2IroX&h5Bhe_+Yk4Z-!nnu~I)$AsXxw$}n&4-0TJ=zKgsMiGvf5_=r zH;%Q^SALSwJ!Fq^T#@>)ZWY1eYfk7xXEdxud@M|Oa1!^0@3EDFp`DsLwPFPk z`>aD?UP)Y`GKF^yXL1$L!+Q)p%L&sLw&rsRWC}769Nj-3uN5BTF z&ZlQ3aaJmsVL%PKnoo;|T?}jiJIgMuLO{#Q-(vSn68(~JgU0|%hk|9xi=k-t%Z?RF znxsErupOGjo$Ff`&;FHEQUUs-^fKvDZ(nY*PB-YV0M328KekwUuw?rQ>Ze5}ICVqY zW5RiIC+%C_@n77>`85|BWS{wvRbq29V+~ZUlfbx;M{bWk;ME_|Z6DOAiwsx`^NdgC z^)V~rTW>46?o2ce^m0cbPKV=1Nr#D%2ga?e2GMknc{vmv4LqyC3H^vqT716tep#(+{StDzHm{^_{8h1Z zVC$#xsM4ya&#~{;Zad5WIX0g@N&S8LzX1qDg&8ym+iAaVy zDHM5YT4F%85$sK|#z%a#Q9+LW`Ibbsr(v}!@u=u`N0m+`FTcPC3$&Mvf#vzOQZOb2 z2ZU|GuJ0na}v)M+dT4ntoD0o74`f6j{}b%m{I&;|t55`|2+0 zQ|R6#`6Zy`5AvWs&xZh0w!zr z#_Wh|mT*>+ulspl`#)Hbt~fSMv{_;L!@NgVIlM9mnKGc#i}-!CxA+4pea$sZ9BXJ! zOWDb)^V^MW-|&h`zd%ga$x@JK-2-^*K&W+6V+wIh91$-2g_w;$0+qh{x@Ho~;X9zx zyVp{#Q{z}KReIZ6$#taCH}daHRQ)jV6_wsyZ2avYWWeFd7`8D%b{_|uY;rv4 z%CcffIm}68{q#lV>lzs=5W~QUt_Gob{u!9E|iuhMSscEO)d#v=^CfO3~-xuI*S$S z2g^fC0;o1^fd2V2$iVS5y`}2DGB7ejeua^VBU>sOnaXeI zXk>~s58}v?**?)&?1Dz76qyjDUTjatTdLhx2eRt_Cu{9zbO^pe{tCKk`=7*Vu;402 zmihdbIuF7Jso&A(!|an>I!&cArNXZ>!nevTvb6MvKSn~mzH zu7vTVF#l@d$m3b$*foAe_i8ndHL(fY`4gDe_8_BVU#CAruUH_CrR*&iqoS!+4Lmj> z9&h7x;ALWV`L~+=d#Xtu0DSU4FL|_*JRA=#9K+-R9*)!h!=s1f(Jvl3#N!cvh{tBc zV-rpXUM6P1$X3e8*8LEq2T@h)k$Y;h$r;?yA52pGj$fcVkqz+&zcp`QbpFln)Bb}- zC#+v1k>RHJZ{tP!fBY(kc1=4hEDyoL5<28N{3}XwfoV*6CuxCT!eYS_Wuv(9cM5VN z9bC^=oODS|V8^ia;56?}L%!NU67ba)+HBPtPIvZI3Ue)r#n|5-nW33o;C0F|`V2RV z;<30)!fwfiQ#VaUf!7t%&E1=^v>{iaLj)>;;Zn7dk38M&QXGgA+1IkKnpv8K1z!K* zL}ggY7)De>Zd@q^h(8h>x>QZ|(1J^UTQZ7SSjXW=!F*YJ% z`uB|WK>Ps;a9Hl$bAvE;!1b{|^6O>HMM`HAht%o>^CCm*FNb(7idGiR6x$`q5bJct#^Gzo}L$OGc z2_Y)uP|0sHCqkUXr$~&GBTm_>YtNuKi+u}>5IXUvQxTw%g>ZI^1Dti6nUPTPX9(xN zM*z;!i(07Q(*;H-+0_}^SCNfmmWLuSDp6baH7Gy~g$IRzZAp0U} zlrB$bl+Ne03lL=V1}gc9GYTZxN;b;)b`aw~R6)l@gvJX`6m`PTq0fOL6pbRY;Ha}X zVN?idStMaY>-TA;&=W8bgpIdH+7yCTKpWE`UQr?j@U6FyQ4l-~u_z>m4;a*;KVT7D zgmaZrV1$0c)2SgSW`&5c97dBBuLrSxFbzaA{VZWaERSHP6m`xGT-2RzEft_1?yp1D ze=0)JI`%JcGYFrAp%IZ2#eNLfejo)junsP*2AV!k02P-e=m^Mi*Nd?g+T}VfM_mQ8 z0GG#6s4nIMWL;j6SxWK+W?Qv1mCO?4jRs@L4ZH>ftH3OP?fhso6*%goMre8w56uzQDjih4ZIi-+liqrWR7M-sFC1^v=2H!1P_h<-OEuH%S;^+c80sm zn~~U%oAEWuLI-;SWa%KY5J$-@lgKO`WESddlFJ5?i(?>5J%$=Rbpo1pBp*xF0PZD-P*=~>p>7}R!+;@R{~qrHkgt=i-x9;NLzXjS>!0P( zKrr)4K@H48g*pX{?qVMl*hRUG%b@jp$Z0t>7PSjRWukfVJ5n%PA>vZIPKRcX3qFjb zhFrl<2;`K%F%5v67stK{QNae^WP=2_^_nVVIIVx zrc`}F_T&UUs($xs!EVU1Q->yp&AtdR_B|W|%2LL#G|>5HO+!<6EKXUT_l@x3-DcGHOQmK7M3idh4MZHb{^Of`z*Ra_>U1SMJFnJfMewn)q>dD87QBT%fA_a@~ zN7IGr5n25mWR`UasQP_($?8j7&~#zgfU2+jimd)he^h<-AE^4)56S93Cb^h@A*(;n z1vRB%fDW_C1$E2kZ=kBtVDj7eq+n9fL?397K7#xfUN0g12%|3EaupS&G2sr(PfL~&& zxKGXRF-HR%wX1qZa<|m4=JIkdBx?ddP`E&a;N60)gEj{^G_ckySRWw{mnlW=TDXPE z89 zIUP4U`IVwOaG3LvIMD)-^;UAIe(E?Rs}~z;T_E+y>2!yR5IhDza#rHpt#JZK)EL4m z)5u(8K%5jLr|?_a4Q+^1y@nDL&{$6TV=iEfPnwQbwLb zC1@#fUs)9(of6mfML5bOK}drUk(Gstj6+54gZmokLdhfP5n;t#}p7|7yq7W z`1P%B{l04jc|9M+7f1_V2u>IsGG)B7}0}pc+d}<4w0JaiJw=Woea53GpnURO)hsKJ%BDY8s zZzZMlg(%c5RMI|OQ^L(uxYbY*QlpEKUu(|+q!?85K{YjiMVi5Jw@8(AwgRKT;6K5x zjH8m5z`!g+!+LxXP8#WJt!8G9#)|@7vYi&z$C!<}q=1s(Bq9v09Ir+^OhTtXAIUs5 z<$&Q5*+}j4o_u<4de`+Lj&A2o<-8J2N7;16r)Kffj)h~|hiJvK|!bZnW0{D4o0uIG#;c=3n=an zQL8q1A6-3eE1J2=C`JRA!DmR23B%z+#g0N&-KPRr)pw3S#I|I#Mp}f3RnCZb4I;LN zBjTP?B-=$&3|}NhRSFVg4N1&L#5cuAjCdr5q8t%FM8utbWXUP0QX7!QCtNf@+>40m zlgYI@N&Fm%Q9BZq{G2S=fJ&AKQOPjcpyX+&ZJhW5YM`-oWWM#@ay zU@#k%+(#0t5V0~G5qF~-49YGbVgY$6L0TX}V+A74*p5nWAWM!x#QkZgMy$Fm4@ShTg7-Uk{Pa$D==8Pa_zU2s^g zrZLCJ)ePn|xjQpoE@Cd12jt5AnXiWgr+XZxM!Aj>laar1!ZCV?{B6Ekr!IuJRqhFR z$;l0R+28GxhYum)Xv1q$kreF7TDo_MB{Roxp0uyEFqf%4_i6HQ*NJ{Z@vQV!y~&2J z!MSR{cdEZk#t0f2aL`Bit@kmD_mGz+yUIN&o#m}?lwiYd6UHBmKEgY`HJ5!MyNC@=o&udfuoY#Wy9%;%`AuRm2HJi7pvh86 zaFYo8wvFPI&@5F~Gyj1d9YT`ewD>Z9WcI2&ML+U5S$ftRdbpD`rav@4^ z%}y(Fu*OrT;nBUX=G{#Ls@G`I}2g3X1B znlMl+zh@S|XQ)=m$*5M7*c_@c9n~tNVryUdmZvXk<)V#gbc_T5mvQv2x@2&C#494x zE4EDNwaBUB=e&z^{O)T@X6#Fy)+h4}%Ay6&OdgrX zDbqMr_?Ijafd`tm>k1{pNn8gDa0eL?*aH4F zAW%jnwUKhpd3U13QE?c2aTu78PNy=O#Jk)IrHxY{IISzJqpsLF8(pKwrU?~ZszEAe~|I87jT zWHnd2Ud8G1+!K+lMlL-o1%0*|&r3g%Uu=YFMvY~GFB6)2eAwYPgw$hp^0EGv$Ds{E z%`tf^qBf+xq#nCVNd44KKCUTy`8Z^?Q1hw$OGItF{POXrbRqS)oqSyX%44`YP;*>< z1yP$`c^u#>q<%K!q}uIV^V~Lgr$EZ*J*U@|{TGn9xR6 zh4zt|XcK=5nM2+{MzTn>12&Mxvkr1+OxhL9ajqoVAj+RqfD zZFDHoT}D!qpGL$=Po%s0NVT6uZu&`0-b$_!CZe5j2C1BTktVP8LnXJ7ntUTFS?+>l zdxD7RNvPzWa?)Cfw4x>mmApF@?bJUY%{*>M?H30$f`xT9(&SGo%%DOQBylKG`@5&0 z1;r_LAynT35w|0?pRyR0tgl4GYg}QCUH&F z0{_CDBu~+uBDdUCNBMjX!()g5hrX522XPmlJ zCJz740y0GXf3&>|Sd&NEKRh{*gb+eF2tff8Kt%-%c*0W+1QC=9T5D~qOM;-Ff)P;B zx9uk3=&6l|wp86VSnFzQyU^M$y0(TxEw$J;y0&Gl>l<3zrE0tA+LpR*{eJh81cGhf z|My+r_2=SwX70n>bI;+Knatsyz{9RF!4a59d0BJWI7d$hM!vK(94;R2KChAMzh1IC zW#GKdCz9>9@xgN*et7u{nq%)YO_#PVfBtdz0zW^zMV|(? zkvaScAgV@xtW8_#TOBARvo0fJlUQ|6y~~@0{S4K#>E|v}SrR86sS9`Qv^pq|l(}|9 zC}jLVEGNb$H54i>`jcuhzNzwesIYvjX6C)I2mdPjK1s}@1?AT=XK`nR7t-GneJRL@$TG_WX@4`j4zlYTNKR&;Zoh(}@ekE6WY9Vpt62}dDNOt4YEiMkrN>)1} zaR!}S>y(JbEnQLRXjC52`}d^Q<=fI8d!cSLqWY#FYJVI~J@49VJc#wGn%{4}Y(o~@ za-Od{_>pW9-;djihhJa9#ICk@PS4nbFDw26yY#89xfHpozCD#z{?c$7AWti};iDEF z9$`sEkZE_*o}A>`0D)hMiA%3qerFG^H_#M=dTo4cK9A{qIGpr0KVq_>Lkb{4R_T2FmbzShX-8TSOzy##glq-;&J_a#o9y zP0JK~A&<6b)WPDZ^$SZXZE-5SDm;14IBs<7Lhi^yPwhWrJM|}9Wx3J4omFwisvB}0 zNz+XVnJaAqp$I2oo}PKglHDn!gLz`1wcjUDi#pL$tLMz5>bKfr0-D$uV_ND5y(~?^ z$(6|Bl~}f%e#_{$i62Ub_NFVe2P4y24I>kLBAEUZj_Ez)v*3VF;(?l%XgVNLsJ(+9 zvtOo-xsVoiA$l=7RjtAlFFQCQY-V%lsix31uGuW`Zq#E-ZB<+o8E1)~XRS}aJxw^_ za(+T~O`=vEaM|KIm$lFEyDy?`*yf@irtHTqo<8g@(V66A=)j2a{ zfAv2%19p2q($*#PiY##_cgZR;-!rSWt&0^z?ygkTM@N0Att*I<9Bi0td0Ri8woN&u zWF+xKP{mc=$g(*!U*=4Nb=An%lZM-Fh8;EgxxR$nPQmQk^Zr!O_ZF(LhLoOQ62N}r zvK-TCZ9uZAS5eJw^66-nQJL=K=hgd(KEz%&<@3S4Q`);aMblmNu%~uIgMV^Esa1SQ zGX0h_=+8ZgAr(91Dxtu&!GoF2vSSBh0w(v2crVrbiQUQL#eSM5%%uZE>K6Y=uwZM9 zfi5|Hey3fd|Ajmh+}2Jx)p zcjnrH54w%;itvCAJkNoC0mpEGHq#u?Pl!$i%3;Miy!uai7Z z1|u(o;`R8c8qMDwBiAQoPYo$g?Fvc}M82a+6kn+Ko9Ix#@R51a*KH_r*d>0iH#`_qBbNUtO%H79=-g`UtUoTvk%Zrk_X&DA zCcqXr#jvOKzvXU&mHC)<(|n|#)vDc^VEnjvX+d-K*~z)l>;HG}Wz}$}8Ho^uV45I* zu?kjq(ldN+0a&?Ml_OR>QIL+aFyGXM8UlmEle8u}P{kq*a~2oO$&e|=V5l75zp^t> z-ODTuwoDPt12OD?o0&Sjb$d(ac8r8zCEC2y^t2-e$A|2(%7 zdvrB#I-s6f(}Q-~h_G30qvxhgN9k|hqe2^H>Sg>FH*n@4i z>&@y&ZGW)Kc4z0jG~>x&Y_+g`+=0Gi^tj$L@9*o~s_FIh5#>Lp9bTH-A4?1Lk6KpS zbYG0Ae<|AR>EIe(`sC3)p5v%L6^Bpx8~aH+E0#SOBjN4#r->@3rrz#zJTOcK^NV`x zj4_Uq+K{wo7tyCnXEKji$Dz2b(pT}dnbRMuc_OY?8L5?Un~j3ZJU(`5&Y2svqU#Iys!-Y^8o9Z1*WJJ{Db7tt zN>n#TN1M`c3d}#X3Om0n!Dx*hxiDw0R#J^GoXzH|{+q{6u5TTGy)7nsQkpB7ej?cqzc%oEKPCp(9~HgC5K0J#70$rQya3a&Tz7^UY!4&v-M#r#a`c2EA{bFFd;|K3s={?g`Wr@u-jO^f!h%syr+UDhG% z?l>FSbDoF2BqRs~b@)+Ckn&Jk*i)K=98P+N61rlGWd*iVYXBeJs|sQsok;{nvGF|f>>D zYst!^AcQPCO0kG%rxovh8onOkCeKp1MJH~Z=LeM$-W*~GnxM!`L80+4Xe1SFpXj&_t7ux{ITS*Q3E@GY$1f5&w zlFpa2G*DwUS;th3OC{z}R!Dx8Bo{qP^I=Uv(7APq1uOs6^J&OkL35nWL`tBOGFkU7 zm%!&Kfj<+op@2(ZHYM;mZlldaN?`tIB(VKslC0!*niK^?=hPA^lv58vXVG7LuVBJ& zDkbm^F$=yCuE$oIKhS#qtHD^?H*6ruEerafMz^nfT8^8SE8@oTk8@*rKa@X>Glh59d6VjrO!jMS8`Q8ak%WwZ9p+Ob}IcIm>4*Q#^2adToo$q%?OK_vb7Os0!)pw z;&u+~9>msiQTO9y3ev2|UT#!XeVdTnxm?O^TC!;Der?)^29MK!-d$tr))m~=S%z07 zDY3~q26HYFL25C-EMOP5`es}gwSD=$jz2?iIt5gkk&y`U75v>C^@!}GSyPibJGNyq z+c_EMl5yg>N~02~RsU9mV_vS!HbN2>ep|6uI$4su6fGkmq3`+cGE)1w)y$l5VcctUIP`yDS!pu{Ft zxml(Pu4b29Ay^@!DTPQO-*iG-ZLiSfX5-3)CZ1XBRN;hGhqfkGvRboDHS%v?)=ySd z{jMQ^JC zxfy@65@sHB24RJm#R#^lW?GexNXpDC%r3YP#dgrxSSvF6rm=sfO3dHX>MN5OrcK(U zLiW9x5H{;d-=_@%zMn6QVWeQfs8K8U(h{B(A_xyOCoZ*h%)Ze+`=W#_NBg#_Vi(Xx z=tQM&Y#vjLb?eomkZ46g$(L0v!r``g5;gYD%GzLYTZ)6krdZzJ`F1pilCan_!z{~G zb{~!TxF4x%S6g|@EDHO6MH+sNDPNQ^%)0e2erhb}+uDwqCqFy?-|D2`{J_wB`WeGx3nUPt;`6v)G{SeZf^K{1-}`wN z&rscT&owYhAFQEORiS;`VH8TvhFj2L4j=L)8M--XfRJ*Fe?O@oyNR@QqjMRFZsm@Q> zsKYix72nT<5lHUROn0R%6KsuV8CV+AsRW%uwaMuUt_^4S0?c7%=B!ju5r+IVo;L}p zd}eq`Sl|2~QVz;GZFzTU=$A*e-Z>%KShFQU%9AX!M|B5m{U2k%ZDRoXTRAhPq4o;{ z-BrRV9EUUx12-sO>-rj1n8av)TJ@}$>akH$z@AqL zHQCivM{CCj7-mSX#VA;8a5VjNPTM!CiN2yV!8OZ!Su(+Uf#zVxRgFUH{s}|j+y-KZLifo z^IFSU&rH63bgOpiamMPIrvI@!C?7}Ko zKX=`)1pDV2bmTM#+DgM0+rS)XF3s7!LGyIWXl~B6X;5T-45JF#bBm=ot)#}|lM%S~$W0ohs_z4auJBj2`-r({4>22wxn}_} zU(F)sS;X8ohM2Rt(c3Xn!^REu{zA-+j}Y_Sc{Fdko`!lh&T9JAQM8rrU6O2no)Y+P zZV;JA!_ytvC_&L)+Enb|b|C+bHWgQO(Nyda>_A3cpuhDh#-wnQ<%;O)*h9hf{FCOf zAC5Q@ecC*}E}}oWvP$!x>6L4DL+0G$wpiLRi-y@zLL0&_dwef*`U3P7|TLSp0qfJ{+(Q28dLb z2`@oHDuAcC;z;0W{nvvx15a^{1s)e<58xYsC%LnM4|3y4{%gQfybFQ%j`y^izu-Rp z3&2x+8-b^^P`o7P3h)Hu_Z^qFoIb#R1N;c!ar}i1ck@et7y7v1SAeJVdGwD0p3?Om z@Sb$ho#NwxC;iR>@6n&|4*(ws{AJ)39yySog3RFT3$Gyzr!F3-FY#9N<0aB7NQmJ{tJPfmg%z zG2;eFGe*&J?0X+J|15f4q9`K&>C4MdNl+N?Od*|Ci z;A!t*5AdWf$szsofG7An;Jx)<3q0vTcm8?j+f%?({`d*K@+Y3LJ#K!G2Kag4c?Eb1 zPmf0*!oTCjQ{H&vKXBudyzmn6ce~}Mx@B?s0Q@!JDf}Wl1Nj5|9pLG6G~l6fCVq;S z4*(a}vm!i1Cp-!813n6{5l@5%kBT(b&A$UUZ~kQ9sjbO$xnC&+7rb44)6pA@Lc8Wk>3S8#TN^_cRpVRp5mJbyeGY+|25z#y;|VC z)B6MPl%Dy(!#j{~KLa4Si-7m&PZ9cqneciqJjss$p6Y!m@B`lq@DqTiaxnq#DHr0O z20ZDv6?oFildcTlNxx@-r*IzpLf|RAF9GkJUIXx?-y6Vtr*|Fj^gaFs_<`>c@m9Iz ze|(?(r`__q@00%`@TA{AfcMTfpxAN{64Ab)uUb78Fm7qiN}BTEx`M)-l`G2&E6Ra* zc*#&WYtm2{_eAHG6&7S~C@~~W0lyp872&>UL&_k67$yOHXoaD4P3nrphWxdKd3h_= zm6lf|a#u+guiX4l;i?i`FI}EkVlb{rcky_5lh>pb8_Ky$q*oM@Vh=quCuvG07w6*i z;_`}h9JJ<E>tR#5|^hoAnz|ec)2198D zuFFhYyKcprUtp6tG{rn1$HkL10K3Gb8A=Pv*F09dYKvi&Tb;#ag=^OqQ`kAB6=my; zn@KG|+|}HJdIEz~O{%1Pa;3@T*CB+PC!cbO{SX#KQG;t&DoHDH4khpOYMYS=dIB5!}!w`l7Vn{BYGRei}73)J(C|m{b zN)puvk6Me?RUkJx4o?EO&(i|1D)uE>KXkT#@N<#7Vn{<2!R2=01yAD5?Mk-+6gJsk zuD*Ha(!)!dnH1+yCL_tK8SGFm-|?_ z)KJfq=jm>;QFy=IIpukJrvd)tydnJ)$@g?n;Rl;#^idpQpfgDx3Zkze z#Qlx@FVXIPikJsvxw!^=Dz_-EtIBitRUXCMHO$2_&|49BUw1_)SARvmfewoRcaKG0 zuOxEWJlJOu_5Sn_&XsW~Lj${NjHlnC(aYdpLPc3I+9LKFO%qEfEGe!?z_-T|3X02V zUS3$v640EkDy&E_?pzbYb1C#=$(KQL4OYL)1VVfbb?brw*l6JJ`?aH&&S3;3vLe^XaSPweEL?<{Kbkb)p!si0c1l^+_!ISV% zIwIVB9pF;|r}W|@7$?WrOz`b?yN^v|C+^I^9EgN9{|>k%6WLLMDPDpXxao&LUj%rb z7oFe-lGzC<1a|nc=CouS5ld!A38wG_AJ@3(3;bAfi-xf#%^;oN7eS}^7K45eFf4%% z#7}VL1XuWNGS>XW1k9&Q7z|HvTY`(Om9yqE3Hbe-Fi0o3Bc7e;qI`afHFw4{W{+n_ zIT-p891Hp}&`qGn0mkIhQG!W-g8Rn1^y4d7^X>7B-55WpAHi>cZUz4(gntw8tDqB1 z;R&t>oyuwHan`&8a5d$GPg?HPA1OW9-7X!TLwA z9rUY+C*p0^+yVF$=me7<1phGBRX-1ceg{7`ZjBwRp9H^y2R~5?H@e*vxBGLP3;zyW zs8O;lj-5CHxuJh%%})bY8^?|kOz{w03VI9RG|AIIScHe<^~Si|GjLJON_M+pO$3&1)O5f@*d@pKzFY3Yc5o`gS((@|lwSb=j-IG3o7mak$FNL$_B_q*3jU1#C z91l9Bcdwl_YXHZA?nytv(V$a$w}3txa1`jC^b;HcI;EGwD*-D&_oSa-KInGP-vM0& z_~$5glwe9f!TnL}L^t4W(C=ab>Ne;E6P@6%L8ttB1N3WvzX08ne*|B_L;2@`i{`WB zjN1*0WG7A`+`%^19Eyo;c_ceZFv%tOMg%+I0DKwrz6jKx2zHcUq7(ck9v<>v0=|0S zE8AJK3^*b92qr#)-y7ko=S6Vw*_5P*W6lh22wVzpRl4eb{0FRguae;oxWW2Qa3$ze z-xq`a1mFtLJ@ubpJ|2?$9VV-&e!Kyf>PJDCt6V$P=>LGzhYgl1!A?w4qWLJ14r3=S zK|tqd)+`53G>jc3nDi(3y%3k4kA=AE*?Y0**MM6RGFZ1wDhIXD~ZT zFv%gf6!aZ{LqRVCyc%?ZiB9lR(5YN2L0<-VG3cIhCU^npRPV|_Uj%p_=$?8=a60Hz z@0Nm|30ModrydeK1$3%+6n;A3WY9hJkYE+)RPP!DqL!J(j2y?P4t;edlc z_tZ0jWuVh{r9wU`082pkd}jpn@lZV+9^|TruVRvt$}J9)WoTwg`utt_eAeGpFRz_v z%^w4I#(%J05_}SLs)zCmXpaED1G=YP5-gFrl z_^93|e~R`2xTnD9`3?v!1^qJUD?u*$0>;qo zl^k%pi`}l&?cU+L^jS28HUG>vHh!C>V)g(W%Q+2@u|W9`@6cp9glCOq<43x5;&Q9c^fub1H;2|3-UE02MH zB;?RIti-dFa8(3{3yx+Im`=x-b?0sFZ_SJ*u6g0H+kQZ1 zpBK*xFFE_Y@XNjUqrLDz56D43KH#TshiKfNd#;xanZjdvm~~{XNr-`I4(6UoY1ozYh6=;D@qF17MB)!z`~OJ!h(Xrg2a+_1sgEiGcXAUpL;=x z6Ek#HaR|yakvIg!mDJEgtlD5GE8v)ZV~!XRx|f+au7O!}HgvwzEyA-3_3#oG!h2SZ z!~6nqe>P$Ij$<5{{qmY6;|K^qODXQjO_$KYH8BqM%tj8;(LL$RF$|fy_Ll0ZGaSZi zE-z^chjCBzasGiBKn`-v402vC(UUlYTVImwLfkjm%rSXIHk8RT-R$BT$i3vjdVn7; zF-a39PEig1B~6|>bz+JpdCFv!YLaH+WQ}UFMx#-wk~EqrlP1BPlrq)Dua~YZ&fip+ zZ!9cbfi<7JwT6W9&7~EFN^W&yox4f-_|CUK%i#CJL+uQ@FeXI1#8fVL$3Wu)oY!Cc zM6iI5Ty#&|gD#Kz%gd`MtgLVYaPsmN&sn;75GLPZ1fuXHJ{uDR3kWG>CUWS{J#Fm* zIC!Xxr3jB&}GFl2!A3B%cmQlJkuY7Y!{<^h!#)>keEj@K{>R@bf$U_R7iF}}}_xxd)IPiyI z3%Bl$5i5ND93OrHGCKxB_-Vl!Fc{J!GpQVN@z5X1q=#fuC@SaQ`a1 z?*43jrp|ud&T_6f*R$&jjc|EO5#Nb>EROYkY!dBdu}d?U`reOC_gwC=d)@s?#*6Db z%>zXZUTisy+u-Q#k5Ev^1K{I23;gNe7lFS5{y6ZHzZ8BM_{m=ce;@eCpASDqNpZ=JhWt1_Dd$_Tx;`1SiQRr zs*=-%HzlIK-V_US`j~9(^)JhhU-uQRxXA{!t`sp^7;9n+!PDeUYGjp z51(`W>y5$J+xQva%DHxdpLR`Gwk^NA{|R+#{|;4m|6=6w-;rZJ4$7m2$RpPGl^N+L zZSB14sZ5_P*6_wgea=6RSbY^vbsx`Haud7GV&-K`Dw@1nl|DY5KV5WFEBf)gGCgaK zuS0S@E2#0hFK=z~qJGs3Wjb%#o%5`Z#}n+5E4%wEcu{H=Cpj%s^RA10#3<<}ctnj$ z$E_YWB|b$FtnWS3xqhKt@_ma@WYykUrg43-$RBNYf2M-%a(v7D&V4KKOTYC|IXL_TH(uk$C$T+{AEYMf ztnZI*+0&3NA@-&FTGM|>)pq=l%OqAxDfD!QA4TC)p(nYVp07cUL_Lnvll56ludVIw zujCUeFf_ExUDCF8ln6gk)^-)AXJZMRYoAL7#ITnkmX@+1^# zpgalX;-Wl}jFz}_CELM!;qB|^bHW{>(HYKwhO{4A79!7io6~)Ze2XN*d8fq9>@6_%*ie}nde^9*M zAH&9R+SrO*x+nmRVNO7Clq-P7a-}78>m@ob8Li4l!q*}E4~rY)5bxWw_V3>?9_6(P zIXsE+$n&p=tAk6H%-3}yTGn%1>Y&JEzY?X6jN@*JMB#)Pg9?E<8zV# zDo=8xVXoN8M*BK>qlHd!gBZ2{!d+1YOGKM9n!d-6?vi|7+~m)LRn~vs`8Vpk5555D zD>p-gV~f~Wse>hkJ09*A%1CCzT!f9IuquRo{Vq!kbcpsTir95Op19%OkB3M$M;9Sh z;@Jkgx1G^c_`};Q{)x94}?s9Rdn3JgjUP$}lS~6ttx1oPMW8?CXijRhfx>K?U~bJY(jl@n$CV@a)@h;l`qr8KKtC^SAP8L z_sjo!Jm=p(e*3T43F*9K8hfe1ya!_$Kb(x9KA+}Z#O9b?shz?sks^88ZeF!)l#e7l zO1M4W6fuXNw%af5sv&hDHHWvvht#xI}x{3zK6qK9lAgYXYf!Pps zmZ!R;j=bFH4>=zL)98PrG2)Cl>Pl+VC1=zHb3`vM5|c-gO_ij^W=Y+~xVkB(x=oql zO}4r+Yu%JMG2Ok+dQ+pWHRASx$SaNhU8zxRjge;?{hd9L7g{5G8zZhZ`kysNUTBQG zWRJYk8hObSc~%|K#Zz7GiM*tWyxbb`HA3;CF4-d6%u$X({f%{-iUb>u)NM4?O|jJ( z6=KA`c~El-ZjWqhMTY!l@T$$3b>&7bV;!XMriNe7&oi#QJ zTy7JakP2%Zn75!H;_8gHx-BT02C?2B{FhpzzSBo_>-{?oQBJe}r!4Y2bHs&K!Z>=O zI@OUk8aXzQ?2%`CA}_;ZigGkYT}mZwub3mw5-AEf*~?VdkS)k$R1bTEv(f*Onk&k3 ziFhNb0ju9am7xj=Dd#HK#!4tNP`gb2wS81m1rCwvxLGOG|IIq3gAf57DW|GtcIu|> z5X@@QJ#gGS^OSB@i(uMb!L;MNX@{z29fDssqDwckQ!wked751};*H? z0={C3t5*5H6!I_Z@~<4C+Y0$Nc6o_L-eV`KX}{dK@IGuTTDsQ+^wF^*BUd+2!9jqdZ~MK_{JH?6vA8mpdhN;l$A)r^Mr znZK_8cYX2_r@Y50{}*Cs0VNK3k2au}HRw{Bpr=4f(Y4Mz)IP06H_fUW(W{%**^WeU z`lrsQ7R<8UmxS9$0t@J~%D*$pe<7_)Fsr&faD%(;Nb=LzmLojxwSWf&Ej54mmTeOVA_& z|F`;pO`3qUO`@xsfIhoujYqx2cuM1+U6vEcp{6LGUTdNTm>9<-I+E*!D zT;ya?$%6U$ZK{wn!XE8tnRs`$LcK;{<=1XMH1=Tihjm+3UmZBC zm34&6MO8g|jZ!A6YV~%6qa@ne2#xiyqPC_r^_lpTShHFjJ2mT}bl*Jz!Ktq<44c8* zQ$1RD$lQ<_8{`SgOWm8Sl*!+WwWxhU$9S0cMYpBT5#B-+hUTS8nV-O7DAI=3&UxSX z=%i4;uKZmmviC*LYq&f0t9LW{t%cDCtxOc1RtPwp~3vc3mlA z$i#|YiqNWUi&X|C`LMD2LtoBu)BicyGEos&Ca77_o`gcweV|KLhSomxk-IE^d^~)# zzpHdweO5HbMUQ>7+Oqq(!nk9h7Y{86l;&7MTWzt$;WD{kp`XF1R2C#u^%Sets--zq z=Hpk#>v}$Xr8F=!=g!B0!dK$rLu)l##r(tUO}=*JW3LEJ7mhO9W3y|H!-0dp;dUW)Kg#)zc$R|o}wX4ZT9HqPKe|&p$QWJ;wNY02D3OY?7a? zDe!}Q_+63f4*$hu znIb5IX2Gp9l1w8=M)-Y<4)amf4(eW-qhhSebO;GMfs{L(6Ph zI1eL$RAXa4QlrfzmiF09!=#Tk+J;FVZ?q4SE^l-Wljb$DFzNb6RhYEAQ5z=R(5MfS zZffk4CfhUu=_FgOKswcC5=f`nYy#;ln^Pd2Z8Q2vm)fjQz^3t$F1F?RNSD}b(AZ}8 zkuEp!Kg=8z9!`a_Y?yEAdA-o2SmBFF%4QVAe*rsDVv6YKiC7uJn^mt%sczqq#*Mnl z8`jIv)42MTiL$gP4E`|8TB-5j*s4aLzeKN((Meb3jtZmrza(Oe|BOcQ7NdZMII6nv zu0Z(>tGq`OP^t;|vQOTZE1#(7h`fTauR5~L5VcaXb;hZx84h$*0(4X}X++W&vQaPo zuOji(B8-{DQ%y96GwShuiZ}NAKV2;NS;X9}Ndm7US@;hnxOXD!S zFB>8-@a-^1o;8R*wPIwTo7TX+TiR35G1m()?wNo{?^9k$ncy;+m?I zuJ##Cx>?AOyKOVC>SojfY~S&|v~F`l-6rURpCxhPvIg_AFEPTys4iFjFHKDAh1964 zJz?EFkyoHVX84Szs#(XYMqntj10#?2nJuj}D!K@xd-&U|V(fdkWl@Rw6(^mD%y_$`@?H6K8ZSgrmnQRw(D1E+aNnu%e@w(DYD~b$d zd32Jaq_`B5_8Uq#AU8{=;#Txh>EMED#act@D%D0;5S8m}gDQ^0CM0210EZeTPE1T0 z>)ND@$#9$=+N?6JD=x)y+`5v|V&l3B99B|MWZVI!LX~cUZv1%F;?uoL&|5+CZ<3^x8zPN_uUk*A{yH7rmaK*OT;mieA5`myKSH^g2kd zm+5tgUa!#WFundruOsw2O0QSx^%}j7(d%_hd!NuD)5T^^l$}?d(`0u{)a7<5VkgS# z<8vpp_X3|^QbBd(5wV$Lt?6)Lg*>Pu2 zTb#`(45l6DLU%a^K25Z<*s4mQeY2-#N`#1hqtTrA_uL z*Z5Uv{5ItJZOrxClyDZAy zHswWr_{Fqvhb8=CTlfwB@UFDs7cIjtwhh0?A8|2l#6`=9i)|w=@*^&$Mf9abby=cr zw?$p#kL*et*<~4dv2A1*Kki~$+(k>=#kRPM{IM6)#yTux9c^PBd|V?x&S4qnXdCC? zkMGj-rzKQi@?(rB;)AVbWxe-5F3|Y@|L+!9*a%VP2~GUrO*NVI)s;4Lq$oM4!M3Bj z`^KeZm#%bP>pr`ztGn&vuQSw38;33H8Mer<;;l91Sux|wUmh{agpD|8&uNmzPg)j- zc2c}$sj&gS7~9bzO>?wczK%HK`qfQ8RwG^Q4?B-8pSo;u7k=8zIDkeGKborW8!*M% zPG6Bh<=PJuEYxwflxR(>K*@{SYKfzt0c_T^kPckU8Un*~O^Tq@9C=1ku3p*h-)ey6 zJF`NzSUHFBW@W`~4cws&nIp0A;v3RU{0HnTycSo*3yU-#DI{i52aN#8K5kzP?qlnB z4LZ2E?_r@RSolW;onNMXIYK4xh?zfj+jM!H`CxRrM4P%db!>=k^WOBWA#=K(Y^QX<@|K--t4{d*S8&v*mh{~Jk63OP2464SCO~yWKTT16S zUB}@bDa_B!EnZQvp{$U+sT(SBs;9zz)NkE7V`6dnMjU=ySB5sT0O_foY^?EZ8-A)y zXzg4mW5TOzTAfz3f|eZ+Q` z*zCmCLu~7bErr-3NSYjMnmVu@Xa}2v*uEjQ4a7E`*dj?9u^EZ&6tOvp?Iy8pCbpTx z7DdtmNH=1;Ol*C`_7kx^No)@sQxxPUE|E-33L7EHv(>C_cly1p6~TYRr-b}XCCakK z&}06(#EWfj8#;ZK^-q!gIoI!EZBOXx#!F46_W0blwDPxdvoZ9G#?Y&cp84hoqqX({N!??%m5s0ZycU}HSYJ`k%Ra|K?Y7WPbLg9oIaV58 zu6ZN0O&@yO9QuPfw7)U*jyd$MIkZC``m;GyYY9!u4^6j(W>`Wq^F!xZLbENQ3-UvA z^V{vA$5o;cwT~U~;quBTLXsm^oA=eM4sCk0bERQ_&F>p(_BPb)KH~H2k(y_Z_&j%{ z=D8z2dydrXIpVYTh|lv!YMwvh)6h`U(5WIbC2z`I+@RgGdxX426_Qx>@PVqZ zvecNc2L4W^lA4jkhKx{L!g`dhb1^G&|Dk+K_({EaA+D2l@>d&Q)8y-^NouhUj~stH zcA?+vP14u3W&=VTGKj*J`5pE+T;FYMo!mjUp%(C9!>U2uo0T87QXQIG#c#*`oZDcJ zbD7nDq6C&~qJ^z2Y~`1-B`aVU)d%-9$JOiIA{wV$uub0brlf9}wPsn9k5smz!%4C$ z3{$#Q#+@(5pD~0L@unEfBs7JDEPp7m)&p$#h)$oYTk z{qT#3r+8so%wchw9f4IZOK^8_&1GwqY08#2F}`-x7<;{=ncA!BuX!>4Q$s{0Z|YNC z(e(PykhC?9*^Z%eUiVI;S2Rxv0xathP2|VC2n@(6|Rr||QFhK7G&soH_?uZ-Egt6N;zUDxjlzsozkePk1bSMd%Q=_i`0s(kMa+X+4`(<>s^U2%BDpfw^h?=SIo*f)sc1kgDh0E7*R%`MQ`#Oeb6s8 zCn&iwNOfyui1JK*D^;dm{B;UYq8a_8K6KW! zQ|~|82g~>d;C|&oNv2zwFPo_}VO+2&TM&U$__K%8(S0AY53`=V; zw&|>0y;p>0YpmeR@Yl$WbQ|oe<<82wn6c)7=m;_mN~}SlS3T?_7$)B?d_s%nX)c~Xw@p(%<^^g?y`iuhe2v}`1ZfG^?ddBHBA2k_T!w)sS zCH$MV#xQm1v;K>f(jN*0!)mYSb2hdgTRT7WA2&z*IkhiierPW*szrTUdf91mk_8VIo!w&EI=skw4k0FzmC9-q5ecnyWNOv{44;x1(n<0Fa;lT|1;>L1-Jbj8UNLIZWyNK& zGJ9&v+)80sh~}fd&AJ?U^udwelL*CxEyCa1eFRvfk8hotYmmJ7SO2NP+w@iH6(U@y zy&k3Muyi^^zwZiaNShxtJ~{e7>nDW7i+XBT+=hkW(fQH1*qLw9JEY@ROlYm=?Zyq~ z^;M^ZUz{I#^}L|H^g!o(v3wX=Oq1}PK_RU&<`A^6J0{sicB2(+mc}IBZtI*JYY8WV zhe``;S(UC4u-o?BsH8N`1hr86nQZ5d;}Rb$eHSW;D93rEbK+&iMTruhu>_Y&jCW># zsC`RjREc;sTwgJj5B=9@M7-DQR@}bb7d35nj7P}_-Wr+OCSFnJU$0LW+5TA9-@WU3 zvi+tBH@z5jwQ6n|8DH*zps-sxa;_)of8-Kt&?XQHl&rD`hqN%}oW z=tQvujypVrFeNwa=QDFV_0RF-ohsF0&5oX0dk)$?ga28TDt!HpQ@h^BtwdaY?_F>i zH@pjQTSda!)r%r|zA3(->ZjS4iAcYEAs0%o571d49> zkyH#bRH#X>vj^Vz@?4M|_1uhDkMsLmo}M}%(*a|)Mq}8A5mb5?J18o+4=3tuEFwg z!yT>K?Yxz^HhcwJxrVJQMpmGqf4>1FLlyk8 zIT4NjIjRUzovDsHWs$DW4dcJ6z^y@}Lhp0dIQCKic>aV;`QSCFGsTN5bSXj)b7 z*gfZOx3kX)r|Y<;CN>65%?7>LqXA#};YYG_LC#b;(+bw6+xCl}3g3^GO;XEJR;)$K zrfSw{9Ond`2OfldO`(n*xHS=9g@PBO?ETtY@abq+!L+EELK>sQw;4OBq0m+}Ly}n~ zi@1~_bl0B1CT+n=-#)#qT~Re%@ttXyU>e4~Ty?d@yl@@{Gf(((V-2fV5GgwOKJR3! z*(8n;&EZ+}%&)Q_d2uo&v3n!!9o`w4KI}}5MxB2 z#tY%U8s2VquGH!~oVoZs)~cVa9NqFlPpy7K8|;6Eh{m<0e)_YP)yQP#PvTnHe|F#} zf`m7`EBOY}gYGx#DlbTirr<_(t5HzdwLrN{)f?X)XH9cVZvWdwOa-&>7|{pFk3L~} z`@CXwC(Z@R0)73X{6(;~U%k+p-m_7+$u>rOt0&Sy-;n_~kknq`!4By|aWx*T8lQKL zF8Oq2i@N_0G&p@rcvzF0-|w%i|J|r9hg5spM7*R^_+9pRZA=4w~ygkZwL-YQ;sn$&!_He~@_r+0N{S(aK2S1I>kwDmxgSRP@8bWeEQz zm}yMw1M@?Yr@$<2#f|q%)%{=|FPza_*ige@iSvZQ1UsE!eAslf>KKexR!Hoy7Afb! zRA(<;HiXOla7}J^ogU0TE3B}{9ZLovkI(oQ z;41~+vtjN zBWL-1dXNJ;&$YY&W9C_uz+_(}&^nqDcqx`a@_xDo*|tXyljEC$x?m17hjQaC$DB*d znsLNDZxk^f73y*0;uLV)oJRaZM0rpB?l%R0}CGZwW)}1D1$qU3hDj3W?1;l(TJD0Pmj=SHT$;4bhX40$9kP@1%K~EV_Pv1w&LEvj ziCOoZ5LeJUIc6s@tDhh>PUVmqcYIOY_SuxrnQ_D{^?_t#BS}sUxrn>C>-c%y$qfs& zxIcN4v<$_ak&4Uh`{HaUlsKRFnhG;tu_2$ELwaf3827hc<=RKj*$CzTBq=hzz~KvJ z=!@WkZ8bVh$1OR|z=S2uWv08~T)6Z{ZXljsn$W~wDqK3hv=lDH;2jiTt+;!?~V3ZNWlLt z@Dz6~9-6ZyJjwqMc#3xy9#6ay;I9Bra$muN^(ZG1S(U z$BLFqD7PR*lfXEGvyLLhaj7|FW$Vfax2Vv#uB;-rY~8A|!g8|SHV}PQX)L0_OA zE-fZAdIKt)>GBC?t`L{LU?X>oaxE9gVTt4a$CAkdY#Uo*P(zuFx0 zI+nv39Yd0a=9%jp*{@k0g8~C-bLZN9%${s>9S~f>r7!Q-GLAzI%{dA)AfB?05JU2A z5K&HEuiPVWX!a3iK$`bU-czQ6yQHkNY5+_zXV z1!u>oP;yJePT=5CV-6;H2!@8c9dY!kKo7fP`sa_4S^~p4!GEUT=E87Y+ZLu6DyXmB59|cf*U^a0*i)<}P!3Acf7Ht#=jET|<*)Mc@A2|eT0Ann&uz~G(u3y?MGmwU?xt-hk{Toq<7$!0J^sPg zg#AjJ#&P|kh2^kAn=20G)u6eA-QV4KB895%?gZWBFHREwvgN~R;NR{}*>5&z)L=pd zPA$)YV$T6Z_i^K2oG~Oa3+*w(Szol%UfT#zx5Y_@ZRwa@I_nne7#oRrf>e9<#nIV zxy=^x3~2@<&Iw6Q8|OB?&BvKhRutFlQ*`gg-g_(|F5{>3s$!;Y)T{Lc`W}6gCtR+| zU@*Mf+oUzl^_(Bw)fAc`%Q)Z9tn-Vu7WwVE*e|pBUO&sj={O!Q-7k8fPO-~S?2A)x zyz3TTPG3Bq{hL3+e^0kA=bB?fQ^wMMSpd$d?)Ck=87Ig(`;iy>(yqOqtnOE+e4NH& zhI3;lYI!Q7;d7#W&t^xT=4saTnbf>%xy3gv@r;jH)aWf!*{cBHc z&b715*DAUhA{X6MumGzjQUpjMNWb-j9w&Zq$~FDgMgx2}$;FBUR!I@xntrQjfR;Z% zqI2Jfow7YRO=;@Gi7-|q#Cbg}pQmE#2XT5SbS| z`uL1NSx3JZDrqz)>F&>iIyGisUp2H^@GFugc}bf0jJm`*TPlhKSU2!%3N?eX##PwLl&>Z;rH>7R( z6=|*iM`=A@`ZZ|!!}XKjWC`&ZnWxvLu|)ZEbefG)L}#qSixm5K$*$U)cI^yTcSX)C zR4b9oyG@kN&vAbB{@Uw{(`_*MdE1nvJdJz_q?#;b!46(L&eHkRpXQBn#Sq2Cz#oXg z^>qw)N*WaXQs(;tFCAZ7pkkNwg{)$n-&63eoBU4RR0N#QX#AY@$=>y7@{U^*$uBfP zjL@QfKnn>A{+sYVEf#TF2=3Ej!F^izB@NL7KgHv5Vx02HbgQb`qseoeCZwabueO@? zojf(PrXA$!?7{zd*V)CWv$JnM`lnyk{>5H(cG^EYarC=WEBi%ik+LDFm9caEA-3SZ zN$*Q>A(vv&eJM6LUx`BLyUWIYYmbS_U-Ex!D&M=#>(N!YE7eye`^`3G9B zXf#?gtlgS!A7}%1dC!_|gy0JMPqtD&{Ry-(=n?z$Ynrj=!(3}S?j$~4P0N2!OKDkm z+bGpFxL@934~a2mZ45n>v6V>w7ZbQrRKe7FQ_iS%0$B6cFjB45P z&v`u|d037-*wf9S8A~&&mw5x$nj;#s&yeAKGJohi8x%roT?!Nj^uYLc5)A$ZAaQSBz1wZD2MLofy z43%R?3H1DD^iTrOf~L)Gj)oM3N+?Zt3T#is)}p5oeAVx1*25p9F}=?B`%?+kK`)ta zqK76PkUV6B&+X3oxyj{&aX3fUl=Iu>*IU=);rL_}flHo%`_F$a3TAIP8HcJKApHH-}PFV^kCvA8teMrFV{fLu+k zgwr~oX>i1Gy|s+;?}(j7AI%2qWl4q8nx*@s@T5{@d?Hk+h_zZMuftCWYpHfkyk$JG zf#^w=1Zd$24%$}QYK9g-Bc~~&8P{EOwHX+4xMA^x#!@~Z*`cjGK)cZPp7cNz&A2rC z*;b)TE5Rpp)%y{{XhW+qP89#(I)w?-iZv5+AxqDn_tP1!&-aX`R`A=(&j}ylKe!Y|P#q%h=+i^lbN=ZJw-B#_oGC@!E5s&~j6TgU{!?Ps) z(^zdQuY~Zt*h=W8#9wc}&!A+|#4)aSr6khCIp1JBp>c-9f9xL7YA0p25HXV;#K+Q6 z5*rui7k~dc=5_HrFCI#a*?g4n>)4LiIt=-CNofMNjqI6_N{a!V)(1Hfg-K;VF!PEZEG zDFEC7+~Wp2I|ObQr&r1i-2=fHJ@ay$%clq8z~^ z5GtY(lV4R+JJcGx0+z%hLDxFOiICA{6hg#Y*p7!=^XR#`MX>1)_M-t7LpE%e%P^C{ zUN!)^aH60h+?oV#R{;=#aK8x<4|4a@fVrT=eScTWEP=p)f>Et;BPcKk$h|(r{V&lI zC^!rW?$^!Dpf6;b%|W1zPRXg{*I^gl-z6_C$_X=@PZ<_4Bf!pp(*f8VAJ`Km2Q36{ zI?^3PI`<)z13-jiITd{Z>I1w5pmIRjK_O<)=Tw-@6;dD_kQabozyuc`N~Ea~a3b8H zP;_PPvIUhzIYP6A1RJzi5LT3pU=T&wu&1vAi)I1w3m^6^c751rbr-=V-0qSlXcQ1* zgs8YmkpWP}^)ffuLI?rC4S7)3wHBmp>%U}SKQzk>Xzpqv4= z7J^h@5ZI^)!gP37gEq1nmtC!8jEw&vD2nrlJuwqDKV~5~#Z0O79idfAGeS|kEU{`r zcnCE~0Ym%^4h3BVJ36iJ5L^V9kXk+ES^WVp3WW7z0EQ4*-{D)&l;FnIKeQ~|UaDom zmd{3MI|>HmephJymzWC_o<&7Wf7s1>knCTez>Qb+bR*`10Yu{w&+5_NC9kJ;k0Qp0 zd;maB9I5#mXbjMTXVpwtgGl#20D!3N2T&9%Y9auJ1Gay{mQvWL3)@`}%EK-x3_D=~ zIwS%hGl*P*2jC!2v#jojtN|aSSz@j3cRePel-{3UfEN8W!}c+NkO0gMdjCtXH>{=~ zF$3teRxh&5o*_hq)ic5b!vbQAz!ozpGJv;uB(Zv|vw{FXR6N&O-3Do!t(qhl^8(N- zL}tVYYcLBK8FtnS*ja=>A;R!K-Fmw zcw7~^-z;;#E{8e@z&!}>0w6n37w!t&o1j+y6;=y78(K(1BZI9?QI51I)QQ@FY|`fB z!=7Syz`@apv7H2Lp!WJDaI5zI>qf5$`m)Dk%xWFRIgE6=3WoYju@Ig_X}c=)1;bi0>`76 zBP&`++--z57Jzb0+DSET*}h+fC3u%iQoz>ld5FOU7}ie*b- z{j5Qs^?)}b2En)#*USdk5H*{)>3qVe>1+~}swI72Quw01jU0OgHZ+|7H6 zQpW5$v?j#)-uaJ;caR>O*+!ro%MCjAhGMp0=*5uH7ehkUmoG@zRkojJc_k!gec1w^ z!S~prGVZ0TyhvUN&9e7FN$@~kBFP(Qe+6~_Pr!m%gIF*&hy^omgIi(7;&PisDP|0R z4Ygd1tD-9U_*E%{3_`em+&~WcNl1tYDuQ?@+dtU}9vm?Oz6UOnW^w7byvv3wwbgyD z+hi&gCUgqAET_Xu;y{XbMSvg^-?$ncs3AEn2=j?0iTl-~As#Mh@PqHCcb}xJrmkor zI1w~yowxN+c!N)3!lX?QPUlmugt-9ni``(!G&qw4$%ku#6i&HqUSuhwR*o?vc=sce zZ9i`+eCLHm;yWpb;bL!s;WB-hlEEo+%jin_6y*D?p!HmrUpC*rjQlTV$^WOACHMlz zzrrl36Q)p@C4~R*5N~*q;NON>^1ntZ8I3QZ%$=J7Z-0Uw>4V`P9Kw8Um=}9?$x436 z&+KSAoX!LKNCKdb2myVBM0}FV5Rn8CS%9=553XruYq>SSqF}Dg`FfsxFyj=Leqm5B zx2VTiq0d(#F_RZv==+(y(`czwuIW?5V|n1ets(I57XFh;&I$`ir=(zR3c>mZx8^A% z&1i;yDAjBIzz_F(6MIeSgA5rs_viSQv~>5 zd=H$W;opW$f$y5wF~k%$1-?6SX$4`=mx`R%(YkpNwJXrf#0_Vj!iCyT?i|>lk5?9_%_^H7EHMC;I%cX z-JGz5&sOxR;T3Dvm$6Su&tx&CsM3=1gBpTD!pXvD)Lk4x7jRZBz@ip z*ia|4RQr=W5(#Sp zs~7A)YClr=@Gd;O5M{^s&IU0$;F1_Un$H(6u&-r{2Cdtx6!o;=T$-OJB553ZrIP65 zMf8y zhPfn&Cc4B{OMViu&pL-p6<+Gii=E3l>&*RxTdUnHp392qO1BA_s@+Tyh}VJd&{KFF ztXew0X9Vx3jZB+6ZOSJpnTWrk4(&ISVA(n)dN5g+r+)U2djP-Cx3$8u##JW%J|&kf zEDhz(CRi7iG+G{;QPcd{g(W0cErKrbo$FOTw?#%vZ<(E|=&kd~h}SO(^HB^?DxKfC z-i0k-vix+ZfYn15P0*Z5QL$$)JvaeNV-nu=#6EvXg9FzE@!yY*E#5p~z$Wit_`eWCb!` zz+Kv8B3m^d{C^dx{Ms4zV0Ph(%ow$fhl1;Az6CL?7gnx3jgSZzMh=m3M+>9nER86x z#y*QDRde{T;Ve@_@QXNovr>7PEM`lzuo!nHGNkKu{N5S3`Q0K_ct+-}F@H!n9;8nc zT0{&f;f@ZWmAg%49aQyT00-DS3C^FPw1BOdT9?7X>q4{rGN=hdW-x9zpOZUgltt1b zT4?>DUYJc%6>%R8)!clkVkDw*D0e=V4*ea z#@2?BL+eYsmH5nn7^yV~)+{2YovkFgKcbb&Z0NrN5`&b!ktmYFPAx=%kd;G~Bj_8^ z(mg3li`-bUexKrw$lkDfvtS^XC=>@Tv1E^hN=J`Qv4c2Au838C4mR(1S;3ojRurd* zm1?DYTeNCzw2(-8Rb!bfnfaborRBSEyZfMGjX!-1vqv#AS?G`}9(>eVQj6%KbZA`qA#zWW1J6S^dA-tW1X`!r4s4;ENv@0z4yapxm>+2L zI%VKUPw+Yk4ZJQi0Q_oXSs+WgUOgn`3OGd4Qc^ieg>5U34%%&|^(MA+&H~i~fs@RN zePR-b`wh=vjvO$DdRhaRBTFhvQ8}PF?#F;Rww(CD9O`Xo4l)_cQDer^nC~VXRji48 z$A}>W3;dzE=gk~Nay`>&Gf%A|pD^jdGkjJGA1tEw3QU(%7C9FS7O5>vCLBe*H7k$V zh~=)z-b0j*HI@fuuBjzryO$P=z&#e11txUg2zwk$m%tv!6(np9wgL|k(Nif??Zo}< zX;K#XeN1qG)8~h!{fvgu^}CCPX+p!)>$uSDrn;YlZKmcI_>`Y016Z=#8h2=eMO+Zl z#=4f^^$(fcAZuMJB_jCtzdL& z=HXl3pALnlbcH&oWX<4hmUv{zKhrUf0KC8qAvnx*<#tUDeRd1W#6koolh3NLe4+M8 z0qq@a--7nhDbkJVMw*u|UyN{d#+TS&3uM1_#(yKeP?`>C0lnh1f*()jS{em(@^|1!+`LNw{ z1`xzPFSVkyS9^f=BC}6;o3p&K$W=OK8)*LtYM-O5 z*W@Vj-kOUf%ZykN_(9bXsIVC13piZ$_d>V-$YlWSsLkMC2ePA3b=6W(9Uj0KwJxB# zkhx|hsy-W4-zMUaXXAqd623UhA7fNqIVRg1RL^37>Ir4`pt@(@@oAv?FahQE(t#}5 zteTF3pW_MzKMPg&Sxu?F7gWCv1&gXnIiR|PGafb(ha~iriG8H19;kXn0;qoD)Ca2T z>?zd=U+j7~J9(Q`ep%#R9kU!%--)VMC^uK#dl|F*bJQL_n|Ofxt&T%p9vB>u^yOjc$42dSAHP8DTTpv| zXTwS#brZEuHE6FK&XPUt)PA)G6nq|PAGVg#{t0N`1O z%Qi9q+}>t;kFy~C^%Efdbd3Wo+a|r<_CD==LNI{NF)zyF{5Ucg0i^5Ys2T$PR0JY90l_&=5 zLU%A&NOa{bD}`Or;50IB>6UKVLOCbCj`^(v%h$!*5pcDH_Z@lAUnF&dhZ4zMT7b`n zKMEyWgo0qJ{lycxeJ`<(6^mJMl07(r@^OX{l&)|hyCSg^0CKDjc1MLIEKq0>=|)Rk zo1V-MoiA@t8{kM(@+);iV3&U_4yWHnhcOQNoh|J~6v>yxw=#D-La!Ym-b9vmb1L#) z-xY>TpE?t3?67Z_Q+@kpC%Wj93oBCSwB&s9zAUTatcn!$&=6D95B=p~IA{vXJpz{J zH;PzCWb(5zXy-=+Xb5SSP{%Cs&zXS*sW=c5gMXY%QI>1eqzytjOs$u$heZkje?ZDf ze{n=f1!~sn45JNU(Oh=M=#6v4H?K1n(7jkEZStjR)@N&j07FI=1U+KK@i98r1`o4O_xcpq@$J3x!lJx~abykmgyuBg6(ymllOfdtD zBrk?WW|=uK6EKqanTV0pRVM)B)Sj3JqY07w$fSADH`JvQ?Bs`r$2U+@7tJMB4#C0I zm*zOQl1IWYwvs_FArBm2JP}GX>}KV@8W>Qh=}sy-Ydgrvs;!6nw@0d(d+A4c%Tj_iJb>~$&!lTzQ$CI_T7(+P zAA*K4{TpILPeDW4XZ%H|p(GNE!n&0wITrG3{>v(hn;jb7y*C>)RL=$tNsp(fVO!c_ z&`|1O&@g%`Q8B4g!*`&eJP|Z3{+`lsL=+U;@pcVgqlT}Pmr=tey3-{(s}VJ1T!;I5 z(C~q&h7AS{*L@BeHpfIUddPUmyy#rbD;PpXfrhjwpEp_LYj_$==JsvYJi^k9s*BaS z3exI|T2WW>EtY0NL99qv1Esl!zX^2}MuDz;TQ3{!SuA3Qy89iEg$;~mjV)Nhp$-!8fgM7Nrk()z9 zMU|!|^KDV~H|Vbx8=y1?SHy~Df`+s&l~t%A5d#{kZ2fI`H^5)}9J097q2cv}JoMK* z&`{oOJZji-awTY}>t@ifbt=K0-Kk+NX!yra^w(#UhU7pft()x{2B3z$%DzSo4>Fv# zGg$o?=&!Hg{zA|&jp0~v{)NeNRyV4-=fy*FPuTUg*{mLzCH81!PTqci(YrS^_rkIx zwam$k1B|TR*JakBu`KA-%~r7Us9t?F^lSBup^VxH=-1TdYqn6mIs;npJ}GwO*Na)ocQN4PZp;r%q zUVWIMUz6EEzm{cpH4*!@p)yUPR5g(5)g?k=LnJd0CQ4pV|M;`D4o(9 zq>I>Rr!hawaBQ}n$R8XrLt!X^H213@CTSA+TyNJk_b~ z(tAVN{*89zx7NYw=C%2^vAE@aa&YqDvN+Mxiz_U&zXgbT0Qku&z~>8<_UOlfJ};66 zC><*Ha_F_x9`jt_8E;<#^<1OfM)Ke6>v*nduoJl7PT z5HY<93V#7nEo~j7T05uvwrpsdw3OXKHYb|W(qM%FAt(AX{ z-I`?cC3uF4Hgs#`1nAbP$7f6hdH6E~7E|S#esX9Q1%u(ft9=%kFw>-0yPAJf35M46 zUkWfv6OP1X-)lSff$0-Nl)gk9v#w^zCluhDs+H|coy_@ACR&Vhp&4jwC5{GP;mKu@yiH+jK ziu7iO3g>l&(^&7oA?#}jouwsTIE3d&?_y6nT1*6|gD!-em@K>xUC~H*)UoNx)HqU-{PKNJ>~L4?21(z=V->?V9sC~``_8$ z4~PC&IUJe^iQ_yQDB4e3#zOxqYwv&Gg%IlocJ{yhJXx~V3g~}p!=W!B%ZhhH`GcjY z{`WBUzlXI=snGvEq;Z>Qimzz$6ng%ad{SibZ2%x!20HEjqfp9g9|3_PKYkQ`ombKY zO1~*CnbF@VY4@JCV(JmMZ4^A>wyaC$jS{`9#Yfx`<1_ofBQCv5HovLxQ6Ws|D4Lk9 zh2)b_Fv6o%2EhpLsBXDTy43jqLn;0Nts(sm8n?2*x1P!g(@!$L{lxL013(-hz@2OD z*x^j*7KTGDQcQXq2j*@WnF;fW;*9O8hcG^Pdx_8nT)}6$ViKyxyroXW)34LPJUwx$ zsUYox{>)4m$XQBTWDa<$M@b zmi4}_9kP%K75ZC&3m87^mAwnhaGV{DqtuJ2!+HKn**VmqLi`8nAo?D42ubwf&j%fv zK5;B@H0q#q{1|l5B%=<~HphbwTDyg)!*qiV4VQ_Mew{irfeyRAK^>%&4$((J#s%#< zNKl7iF|I2?hj2@wlO;FP0(2ie zy!n(mzv!~lEMn))XlSl>^vRd6KlzEGHjjQHPjR{V7C+=|U+GFqS}M$eUWL^;n7hu! zxob7fUEjvJ>ugn8R(?3l@siG&&foE2j(5Bi=6C~r6us!qjC566n1ZnUfjgbILIW6X zw1|eFgJK~N^ku^oaWe~3-NpIv7SBo-}4&NFP*Y1Rt@Xu%CZ+Bg|&!jePC zS?Wl3&2)a`=>!T+L^0}?Bj-pi#p2e7}N@IVH z#7#)7>4%)R4}>Z4B`?|aKe)@$XOVQoKJTL&NbJNbHyg)oQs^rvypSlP?Y&Ra+XFQ=V3k2&JU1t z!WQJb3puBJf}9TyLz%B2XIUh2&gp@6eubPxTaokcl+2$YXZ3KD`3-U|i9*gT$hoEs zIqS9}=XaFMdB|BNL7DA1z*!lMoRfXP>teXLR#IA~2I5eAER-T7ek;MM)SIIP1>(&7U(CB}mZF6#6(a^7JN zHKlPK))eJPs3}WEbHJaKgR!QJ?TKReQDS^81L8`1s41E+QH+97XpK1>G~F;HZs-Y| zYa*E$sx;X*QXqa}uLV1Qg`De0p*0qwg3{qAMk{irCore0(s(MrT)ly1#)iQhjvbJzzSQBj#N4hO&4kb)@V*gN7DI&BgJfHf+Lk2Kx@o(K;Jlr zrfV37rW;@Z*5FM?M~d%-F1i~z=YEfz4&TYt<&SqgaT8JGJKVOUtZMn$2Ldt`T%9vE&6zqikluCnr z7Tt=44ls{O!doInfrGfTkcOajDcIj>xC-=#sZI=#SyaRK0r_31F7Fp18(e}{MCB66 zrS*X_N}+l^dxa9fVem-d6Yy>=u8oeN)`0O{D_EbtBwAq4SBhR)uhZv=oMBxPqG65N ziBZPK;W91_KquKeC(WmkD`;~gd5#Pdmf%uVZ3O= z3g)q=#eY;M!IgJ%Ug7EbW$X?*2h~v@^q=5Gc9>RwO*n>$p$(mTLeq(Ro&u56rR& zmr0eLJw2n?hk_W>0O#Es2FZL_HBCz@l~pTY@CEC0UjB!aB~BsR{HhzxU`q44kcVq* zu`uoo7O@p_H<>7q;i**eoI~b_yXwq8QNlAgOmX|y{K^>EAYbL=2IEYPb7j5>m(Fw@$^fpob2J2_zMdd(ruU4SZ)_`U}P>D z3Xl65v(I2{jB)8)w1`U}Mh%RGcu+5Jy}Jy13Ict;4vVrxtO8F6WrKqmMmSAa^a^(d zv{V4w2qPR7ub6t*3Ck{pPY}c5Y{wWvl`|}d6QkGZajE-Gl!Vm>R=F8WwvVJuPp-o^ z5^gv=Ciz zAQ-LVoMy47aywWWpQL!xg*kD;Iv7kBxq{QCJ97oVW*LAm_-+hK*h6D-84CsWB(tzi zxzr-Gf67Iex8TCCm<)#*3^7-&;|6KD8!Khp+(Tk^@woh^HA1Zwdpb`-6f`c0vsCj7 zy9XrEznaC%PXQOG$WX?J4)xw#?P_o*D+_5Q`3xP7mk*=guEbbgD2)0MbIE99908S? zgEQuMjSibGNj=RDqa(Gk_Lw z-=z2g0v5n7_+h<@ZNHYl84o;THB`2jk_y6zBli>h@O^+~9i?ZWgDBzx`~YT!=mS4Y zi{>Z24Om7zxQ>Az-Z#cSfiU1n5hLLTqEYdP)rWXT`2N8}_}RC|BOg1+6ZvMt57Qa> z2p}Hcfy;v*+6?27j~~P%pJMo#@)1Ei%7HjdMmdpwIK-nIc%Y6H9|n{G#N+#Z7>B-T zjGx>dZ~LeC8SU|Cc2oMf?eY9S#eWL%C{GXgb;twx;(=Iw>2QWJ^TjeV-~>gd%$h>s z*rntILrhFcPKe>u$8ZXz$a1o0XDx`CJr|MjMn`{=o}QN7j+57Z6_c5kLILZIN=Z*c zXgVMqnKpTL_LP{}Y3b>Px2}-Y%xO6t7Y0-&jGdb^ZDvYN8g*wBe3}K(=aAFTl+4W8 zlm8YPFQ)@ph(g9Qkq(iNOvR(1o{aM0%?|{mu#-9@#4Ce{RQ#W1>|kdQlA@V4nX)H_ z!IHu4=aBYupZ0Sop5tb97!^zB{o~(>LHB-6hO6n;MAe>w1Q8KN?3)D+lx|Jz#A`Up z@Y)xCP)}z50!{^gGf%@mypDx4+?v@6zJ+ID`}saNI9`{xpOf0p{!qCv{x(!DJSVrG zS3#w~>)7`5TWCn|`U2B%M!Y(_t^{AkGaDQj&xfGL#`CcDGo$^CxNaDq)qYMSiK+_F z2k<=hNgxierFP;q>W9}6aDO{or^5XKa2*Qw@fz>rwGi$r;W`8EhrqQz+{bIYkJs*S ze=}UqgZqf9=>qrh8t>yZ;KEfQUehAD?*!L8xR2L(AFur(fOa*5Gqw-d_Fy}N?F5*V zSO-7Ea6{~=LJWicB1n(v5T7jr63=cAj|Q5^_V8FZW7~%`hz*B*tr6R;3Br&ybzCzE zW7}(tKV=dgVG_psMjC-hc(+No$|T$lsn+T7SOZL|stHD#fwZF%QkNf8)OLP`+D2WN zR&>MNKiAj)DHxiu?ZH;efauoQ5>cF?W``OBeT;z+V*t?kpzPrIU*o5Rg#?B1@sM&d zr=`wMOU(kjG(Z)dl$iqUL0a1T@M*+f;isYh6MRG2tS}Z33S@E|5d#U(;Tio6e^9-s z<9~vm25>=CdSrhcI^sA?`5u1SqToRbR7986NGRA)BuZ~HR z{vLx(4TAuskRWu>VFJ6qJpL61n-ugIk5qUY zK27BTEufbX8AQgwRyQv5Nf=>P!r6)YesacRJ2|F-TJPOk|^tkIu#T9eNTlJ_sMPugtXk zT=g@;=8M)Ly@a?2U(e6wHPcBzNDv6)S9|JTmH-d>I!A43DV90Bv_V5#ul8^cO z34-xE!7gnj`FJ-H?#94f8g;j{l}5!1^>qghKVez}ZU70WTY}P7Iu-A&*X}#~gw;;V zqT*ciPC#qc9%n|y@$_{-$8L{f^R0D6l0t@0UQ6y?woYkct8HMzn{D(`0?I+oAp8ZC&SqPD;#a|)^KDuC$`FxC z;1iz>*QeTq`x@J?e}rpI8>d45@>m<;L)((q^76Znz-MA!xV2l=Ji|PL?Lr>61plJ7 zqZ{a7e$!_3yQL~wJh7U5Vnq|ZsBiZ?(NlMUp-h-UPH)1CTuXQ{)^v%dt>(r9j$R3K zEm)Fs_BU4CnAk3@oJ_{=91GW04!5@pO35xIe&;akTbceMD3R{`R~ei?)G$UNDETk@mbG zn*sOC_r|`c;1gSVCSmSt-zDt(4P<3|np3`W^nSBQ|FZa~;i~zl>|Y)4ire%}*C?u^ z@~8S=FYEDQ`r=>T{&HTghaj2Ss(*N!3VvVssO`oB{YHo#w&e87lLskUvg(!o8B)q* zmFr*XAL^*!&{+-ohj*zUnf6Bi#6YlX`IEN~4Sc)h)IMv1M?N4S>)Z6t4Fo?cU+W)H zsbuL>@98h@HgG6?t8X?C>??Yvf6z$9O5_*y)j9(KX}Aj)FFJ!AaWdISuRm^S4woxe zZyKQJb@Ij@)%7iJZ;-KpYqVc{bE8~;OGbY2M1Mm^iBq}q!MmH+^*;f#5tF}vsyg=S zG{lqg`|o}^@w66#lNVfged?tCG!QsW*!FbS;g=VXpzekKfg#J8`=99VJ*SxY=bw6a zR!s%Tg2!*Jo!5U2$tD&zzPWmgiglRs-Sb0bRBq%Cuk`nShubpQqR*e`e||RUVGfma2lR!1dX7`P<0}sE^Kai1=UcS5ZBbD;;_?Fif4TZI7Xie*p z8Y-4_di>_K_^;`=Ybl$lHb}VD?ho5p0%q1j!|DjaghC@Y)#c`*8;WiuAX~X{XD-A3AYE< zKg7cH-iwnzy}Ay;MT3t&`%&}y1_Yf3=3m>m>)8)T@I&LPYt2-#e6jxa+lI4xbY{2A zT~B|kZo7p9BksPfKSPzpr|IWk9;wy;1_bt#Hay$@t^N!I$(ybEhRYC;$tw1~c>DWV zNFI)jfogZFZUa@UO@b$y>XvQ#*9qZG&L-Ov-|2%8_Uvc7n^PVHC;I0E^w06xD4Aw4NiKol1fWCIcO2N5-QTFWYY%SOP_6Q#f=?|m3^1PS)IBscb+Vrp2B^;iTzhyRm zh$K4wo5_O*_&kvH>|?(F$x0XYjKO{`YXs9KivA-TvyWm2 z`ez4QA94)rX*KJIAG_F8NB440KXKI2)*&fr?RwvUUbScaQhxkoOn0vX{d@GO`^cq> z-~HWTp1~Q}>0Lh_+QV(k?uf6)r;0osa?Uw=`t2ArBb4tFOpfsLh;^RsAlmKSnC)rT zCB5JXFLBWT+hLQ&ga-+OHECX3|1o=9!0dkOJoa2`>S8-PYtGOy2lU-@vweKY+UMsv z&NGwzx~|x9xtrg{{!#9mVtU1r=ch>6ejCYPmw~H>4ddx$o+ozq^kJr7{E5}q(!;LL4VP^GAiamV_yNtDoHu9) zpBt>!EB%6#JiKDk$MiikCajC&?8vjdx~cnik6$z>o%BroEY&wDW6UReM@|~uXPj)x zoU~p;hJP9uEE}<#47XtpOb_qVvv+ra<$~}*F65Y=oS0=pXN?ccp4)}SN!RaiWTn9? zEMsJ8wJzbdob>d|p7ws9*jsyVlf{xQ>HPZ9lRo++~5!_8^a?8w;Jit_Dx_S13O9V0|^#M^v;<*Xu`_gNu!#d7~A1z89~{ z1kp`+Lq4oak4^oSIi_D8#kCAo>th4m#<+|bBa`vh?6$Qqiz?a8V7%~h<*fN`H`hgW zOyV{9pk#4quQ7`QKT-wvwCAS{ku9IMCPy|Vtf#f=;h1jb0|vU=%%7*Xv0awdz2CCF z@qR9=)_B{w@7AZd+Ar(Xf50_z#1Rp{r~M~iuCnj4Ez6GEzXp&6ouCu^`$P4j=O#h}M^t>|&hBRiZf76lKTa(z%`}&R?^skIgkBLnvIyiI` zYX|o~1xyl|+`)MaQ%t#HnCroL(C8TT%|5UIgL77?T%q?D>vw$p@*jC0UpzSc&C5TY zMM2*bgmWeWAhv)BmH!c@oSOktuBii4F8gmV<+4pN<$kJzybx3FApNl^O7>{t!wJg~|xf4TrMHLDUd5A9;yP_tt4uQqOwDicP7+1h6yQGLL zi3u->aV?37Xo!h`@Ig(#S_NR5xt0RDni%1~l=Kd0HL=xifF8z&4>DTK6j?WxSUuFT ze&ty`R0A|wX-t?3(8K5=L}LRuHNZmyFtnJ6df+J!SH}RW@D3y~-oHSEBeaTsmjE+O z5qSh8QS>W_i3D6Sbxq`U1!An##kj7cM{bXaJSdMmqKG_5!rib^I)z6kj;K_G*Z;Nr zjaH8VYwo|$aQ_BqIMFh6GQc}h$|4#{Lg6tST<$*z&yXtmyL{_LEn?p_HzT}Ziv;lu z@2IVQ(^?Vz>tgz^qYEo*z^TB&!VZGplKqavL{!rI147_Iakwfb;$Vy`5LCvvf|D00 z!U+nB5PY%}93GwA^*%D?m87Epn( zZUzL!EUTGXt42g(?5KLMt*W3VY!B2FfHVZLp{7HXk8v%I>0hb{M=c;P#ej8mnHeF5 zifnyPV$}jwn6Q3M)YtUit_auCMSy2mR};RD0sw?+rHuj00KTG%1@wPNt>+67gs@3y z-E4wD2r>7wteZ-#UT7&YxTUkY1E7u&00|}5fACS-$0Dmc5F@n)?7E1%D`qoqbm64@)vqq7p(CFarji9Fl1=n}ZUln>t!fpd^&9fiHM7O}V18nL%l z0rpl?BCoavu(vE^Zfx&-zBwxvKEmwlG_p}tY$F4-tx_^Uej@II{fO$On%I);VWar0 z+YT#Eq-v7<9hRR+-Dh%&Q@AmdaaR8KM-?-t^cD$=!$AbW3d8^mL-vqPifP5eWp{Mu0qrt=&;<+g(3&!CsrBYH4vg$6U(y z3;}5kf&dCwO!u(p?w-+gKrM1u9_LwXWyApcWkhkjix*KG`*k?2c$lLRe(dmwIB{&9 z&j!iz6XjeBcEM=F9cw!=CvtUkY@N)1EU(T}FwA^km=T<8sB~G0MVD{apSirzizwXP z4nX!*H|~;*?)!SWg&du@_dV;Wyo>J;d`E|H(U5}iwhe3UucKGS)^(Eym`ThvL-KD9 zqKe>n&&PeDUBXG(8fRJ7wO1g#t=cI3g1L5^s>L)yq!Gv%F5Su1%X$(CaxXz(yK-QU z&GO24`i@}8AZ$2< zQywfWhPS@hkQXlUA|~6cCo(z@mt|!Xjk;uKpzR!jri3d>b`WO6$rvjU^_G}nML1^1 z)vR-n1)ZRYfQ$g#wh;Hh5dhW_;?E4@wwfsU@vY;6M=jMZ`Q<2nI|x zZxc+m@%CbK`{;09CPT^Pl$8iL<93zwXL81kQ7XqUITOYx`5XWR_*%;O2DaZTIlCov zPN*`A&XFifn4Hy0p*iOZrPQ4BrBY_j*`QRKb2cf}=A11`ojGT#lCa?HQ)XFm_GmfZ zNi8@>lv)eUF=ev_N2`=tayITzP2+6dp`FJ0YDe=lj%o*Q250{c-Ek(zAz3NYFgec2 zN=Xfq6PBzjfm1}XQU#}e$x1Dp1|%z+;Uq~`@=h>0Ba@XvIE{t`aC$pI=|97#rE0w9W&m^3ov;uuDWlG z*6Z(G`246&5Qt(WuhuZaijjgau`R`Xm>|Wxc}(Zw{3gP zA;I#sWlxXx{=<;KWUZ)5H~yynfC9)N!G)$J?|z$fXRYU)jF-s z&uc*}%)wUuP(Mj;O(i%JT+wzs((tlKfXS*+6+`+|UxVbB;L|YuUUx$d7Nd17$A#4E zCDH(s^`fe`6fM%z?xyy;(AM>cAIGKYx3y=a%jfj<^Pk@%Z@wtNWYMUKG5Vx_zQQ0< z{x-osVzhdN~M>*Krk(5Hd#^wy{&h(noz~Q2I>5s6Q4rx8wz50+WTLs-`~Q>5D!$z=wPz0ROS71rrz#%Lph9Wy8Y&>J@1B7BB>v@AvGM*0F%X~s*tCE zvur55yS9WJM$+gRV5PvNucF?x>tM3N1m4GEl= z;rf>6$New|ll7!3hBoV(tH-^$kj>rdZ(1VrT=(2U*RVLbTKB__2S@&(e5rF$scQ82 zWzQz})$c`bt=8=D&GUN*^PAvHqIKa>&z?pJF$a^Cr7Fpyv~z2JXbVK=v(>HCfBvzd zPFpl8YK+edFqyKhdZ>rhMZo$MwhB zQ($x7F?U&|d()ZVg1*D9ThHiC`UjIK(yA8Fp#8Y_^!P1fc&i0vQR)(M=*U1{)nrm| zPfdFueV#FKlzA3EW(n6Sy}ncF|s#6@k9UsG; zOBAY<+N^|8^-fklm2|5SUkU0HCYr`d^ zW8DT6IE}a+yR3`N&Z$p4Pp)w3`%6s09}og;>6|dWxKYQg#H|) zIX@!l@}rd*>iXDWUa9NSDx=H#tnJ6GNU`*AQ0_|Pe{P>RcDEodBxuAZRU1SM%Q*v1 zHx<#u!>nLWPrtQ3>zKj`yR6u261lSv*q%6jX>iYA@zrj24;RtL<)4nNdzh1W$}Fy{ zaP7K{j4Q42mIdD@t{WTTy*6=jKt!;4&>;GjvR9?_dd441Q@q~jeQ)#E`jvY*RBbT3 zu{?3&NVn^mv;8~^f^DXs68b$lTB53BSj@OE^2FDLmEmi@P+dFZyLR=JuM&q%FWDR7 zJ68Kqu*PPCcx~|S_ott3D%duC%r~QlaDD7-EF$h%tnPAgd*UydqL6f2`PczLg42=% z#Q1LJU!IAbQeM5H#4&$qpq+>LH+y%vIhSro%s&%9VDGK{$v1-<%icksixdJXHB`#PR|ErJP zz#ct{^F*s}Urrn;;neS#ZB9EBykYfH(Mr~_x{}kePZU!=skv0}b-%S`ep^QG3}3nB zO5);q2Q%g;9$pg?EEexne!9XTe8JhKJLK)LO_4k9gxY;sTrz>a&#dHHVs^5>kf3LJ z4h}M>4choCafHY`$4KL+%wi=~>mt|gUQ+=mC=b2OkPdmup#tDOE!BxF`-yRZV!LvEDeRv|%;@e%1#`vxc+_lkP zw7+uy`o#5Ly_lFzY#U1tIVCrFz=Omc zPA-`;{nCkHK|3#0?4mIktCP>hrZ(!#vcHh22drIf$sF{LF)T}U;-a$nlNn`iGsg$* zeEMls{+2;y#HsC>=2_>5t+7)1+HGEEmh@uR8phVdRsB34J#6#xwh!(Z+&JP$@A2oe z>SNbTsh<2iDpTQUcVfN!)<0xE6P1agkvLuSb3b2c&9bgT ze%N#6K*q)L@_D_k{V?lR^-90_0lqoEUp>0K@7|k77riOJ{W4Ie&Ns6Q$ZQq*7Tftv ztgqbn>rW+K+dLNp-8sEJaPql53xWlb#_Ly}P1Tmgect`!jV_bTVFSfJSUdU@9sq;c zGPl}Bw{&~5e{oD$LCuP2_(o8!+1%1OT$l#?gJ%UF>j>sX!v|#GOE_-nLMBC~aD~Y{ zn39CgiPYz=fKLE@3SYBHfG{16rVs6?{IWQD{9&X#Hz5d{M+Im{*IR zQ-JUPRHwM73zy>TILw#Bmr~%HBn9-y`eyriQuvsISzr9PkXc_@5q$h1OKLXH$826J z6WGp|6-{Cn&2fT{|G?*rA9pPMaM z-DAPpfuAApFPHAL=ohZyUjHE5Qss(QJ$w|jB|fY*tB6a4c**o)TGEB|L7TeGTz_!f1r~u=$2jBT$`ZEv z!ujJtKITt@0Ut)m6@BEee2vfPVlo?mqwDjpF_0tB?k+2WF@r+tjr{u|M1vvr3F z4QG-WrN<#iOJO!U6u3c<7*Z}|m_V&(&Ym@ukN>EBY`8}y8$!|3az4tQmXnr^cTkS7 z``y`Dx}iLsZWH)}6MUh9&xII13vM|n%xP{V8U|@~S_+<%E)>fY!KFavf@GFJrbMzN zBvT>TRV15*WPOp$4auyKn;DRmBAFJ+9w6B~B#T5ccO$Pvy8Sfp5x%HVA8LB9Ca6)V6*V z_*$zQqOdG_(tlD*nPy2Nj+U-)okf%q_atwS2xv5okG} zPwOwzn8`s{A zGYWt1^0cu_zogdG#yWI~bLoI|?LYy6eD*RkKE*2NlnQJ~v^ zIjtufy^8k2bA{W@Mz@3UP%HI(}r#S?oRo7W(`uefLB%KEHz7}S?w zn`5fjZQ3tt9QyYZ&8t->h+X% z?m4~x(0;b!%%SETe&)T^-yQyKa4I(_arU8XKE2oMbaPsCfr3}ZpVAxlh~w^lmf*fd z-a3FoG}40AcJ)M{lzvuf17GB1EqCf2#sjpoIayt2uz@;+Q2e%J5GP;*5_IKrzl|aJ zQ&hz^3OXqk^31M1DF%!(ekL%^4t$lo+w>DK=2!71z2<>5&y<`(iJ zM5PKqlXR|-X$7a2PFJSdEcfoQOU|iFDBeXcNa+HajLT0`(s=8NT`H0qq6eA#7RKes zq-=XM*Zt!B!g&JzyfQlDq>|u)#j@E7u7j9qVx=PcWrYGj$~#Gd>3zC8%?i6J;07hd z4z%wJxY2W?DMm)S%LK`M*nKbRiui%k^BY+M-K+VExSZI=m_LN$0%J|hU*!6liFnet zDaJjVW>q{A8yKg>T90?MevfgpU@kHyJb-cIQeYh5ZD6d4f5T%e?2^ z_eoBYlK}{W7)DQ+41yR26^FJVKtx3eR9o8G8W3%?4pedKpeF$Z9NK8D4T`{1jYC6efRf!-}k=%|Nnh2diJpP-fOSD z_TFm`=djiX226w|3KOvpLer|1rH-<>TS#!Af|<_sZ@OBSA_$HUlDY#%vlK1uQ==EB%pjMZ5GGD7t2|hn zKt)sv*4{FY8p!(&39*)(wy)YqIv&p$s$h>tE)(OT*(!4dxD->Q^-|cznt6_*%l3{}_Y^LIbvb;3-wS zwF(abYY-L}dXs~jC}V$9rHNOGL{P0JByFq*bSLtFj!l`V9|}50d!&`J6i&HR>Z6DH zszELVw)n{Q{q&I5oIgBRlZ=s?f$qZMNy#CAG9fucfU10VT-?Y`N@gc!KrF8|k8%!k z{jq6l;CliS_n{a~<%1Y4Jzvkp^Y|7fv@$AVF-SsJjsNyJj|gq?NgiC^krLYSR&Wy$ ze39TV7QU+g1`*Pt3%&+1Fp@y#!DO6TpZuq%%*E4c!0rSRC*(Gj)mOnDuPoJWU|~jo zfW@iB_t0?=-?-k4Qrna*jNcNzX=qwzmEWenc?~dLuR)VL$nZ^b3BMt;*CvQP;&{ss z;|vY5vIhHOOs{%VgD18AS%R^%+$Q&0Aim+47=OB7;s75Vm6_F-e{$YlL6g zgu^ms4_@bF(jupz3x;m5Kcb&EJUXwdm0e;}W329{&81ThHB#lN$qbvyM$`e#Im=W- zV{%zBjy)XTJAz*0fi>ARa;X6H<6wC(3(JEh@e^XuM<~Z;BbXOc#^Lo9>MbrRt9qU4 z$lHs$>Ka2kuWY$k71FK?g@(_SH*|zr!4hsgj$PRbvmC@J|Fq;L9IT6{cRZB4FlH6O zuTc?YFsAK17}J*H^tOM>GDtdpw(0J_OMRrrQU?rPb~9cN#!6Ns`8=rc8n8mF zp|DY00xN0<`RmTPtcaodF=_e{1D^I=+T@c4s<4leFhvVr7%@f9c0{uFg4TN&_T_t% z!{3qdcPI0m!+!c}{5{G1cQPP0V%X0}toMnj@)@7vUcOwzerf|B5Brta9Ky-C5yO7% z2@t|9J{u_C)g&9#NzR47FODaP_;`>(FKi75VU~*3)>ZLA!fCL)G-I(>h((>nc@haC z^Ff=FQ;2TBa#81nGwe}fx%f1ei!}nAS?d&{&%180_i5dA_l7OVRsqHyNsG@N-q&TR9=nH#XgO?7G=EZmMW7vjviI6a)qT)$Uo z*WYV9b=$Bjyo`kp7>^oXXX0WI(d!`u`cZ1&l{*44jRxW2!jtBXtHH-V?2F;C;7srX zQ*KV3Hi6({y$$jBAn5+#eE1guY2M&ZfCt0yD*z$_bldDf-Ugs698rHt^P=n4eeD2~6SVxcZ9PXkK zVy;|R%a1EGf9298t5&c0uhr@dE1Ym@)p@Md3;%huN3`3O>mN28=W@6FKj0c}x>HdO zbj72#W5{qLvFaflf25peI0ZK!r;KR-ql{}F1>GFLfRX*baO41ZlsIAp;6dd6{ZH!X zxdDR{hU$u+!H2oBVuw4>y9hj@g#RV)E)P6#~*+|!}x6Azr zCP7~g5Y)m)$66rX1nD@A({cP$cwla?*aP`$Q(#U%g^n2kW`KM+j`QI-0}sfe6|aGh z+qKN?KkxPxZr{i44}mPf`7XNsX19OB?c?u4ar#!buXX!Rg8m)}RCJbyjwt~)74-Mu zIHm)~A3(r~*X^Hi`!#Og==PU@51)Lkn2TKP%1=SZasW09J!%(@$HD`0ZABR5!+iUm zM8~2477F=>`H16KuAaj_v=7sB1c#vy%peE%<1m!fq`=?JKzIy6p{d~8aTxMrJXhUe z%=`K7Jm8_1-QnYq592>-p5 zAM`V#U463SVaEV$#Ls*Z^k6|g?DGJQA6ypy{!jD_K({Bs=twcem=z=8K} z?SKQbe)z{74uBsC4@_hDVWJFRyP(}9N)RX<)4S&9y^rq+?gUVB-SIxe+N%2TW z(B}r&?$SuAxV=XSdSo0N6_UkSPT7%ZrRIjl(f5-h7V8mlpx9VT>vcZWdfjsw?_FAZ z&Q6-n+o_uKc9B@Pi(_E4Tm#vY#!;)HA^(>SMpbi{*-WcE_JqIde+e|ch??vQ^Ci2) z@YWT%ijX?`svRi8(f1)>KHC-nI%rIeEE@uEAoii!mNF9w`0 zs_h}XL>DlgzxIIOwP|&=J(L&sEDD2JA^pLMQ(n9xv+y&KC~EitR3Ju5q-Sig0}YtFqfxU*PEc zAivutvpKFte&G=L+;fD5Q2@W^@J!Hl+sbT?jxF~b;||_)$n*t{8;$cFlj83=VjChH zEjV0t&mr3VtmCPA-);l3p!>LVR(D}N#CK8PkLxb1j_4K>HI6eMe&G-(pYPsPCF?E( zI-9pV*Ilc-=b#cW&L!Pb0gn@Bv8Fpg`h|mHJ?r?Uei`H$?f3@p?x_mv{xU_~ohYTI z$-0l{ZSGz8*^+KQ!q#ny&~zUs?m6gK>>F;?1TpE8Exxx5<2?4WyBKzL7o5}*S-qQ8 zPYvkr25OZy2YDz+3GsD7S)G27r|>dkB7g`j>5ZOyej+h|T_(n}Yl@}au0Ud0 za~;qnfQOA_;Iio5?REQ9m+eW4%l2e7rZK_dEt8)oBmUaM^-|aZi#bNaO+o;2CGt-< zOUIqKr4;ns5)UYBUd4ZU_X7jaf<6Y9jXnXFyvuw$L5E_Ht%^Yrt=GMujE2$k)Ij;|m+TRSnKp+vKX7L6W(5-{ zwK;sA8es1JS%PfE%+vM=dRO`;OIBw>8vSm=oOLZ~HpL_Dk0J3nwl{1lWA7!j|(!;?z(KW&%NL_#XK^~Xn#hyf)j zRbA22Z;$(rfF5>2MvZ`Eb&i63k&w@C1k`)KsVkB;ANSptW2eD>s}fv(*DnfmUj!Q7 z3~J!6nudOU$qtG%?pz-NEJP@C*ZV%i#^4&v(DZ`!roiI3vpU=9ZUKM*5QPSR84h6 zI6DH353=xkXbwAUVQ1qSNu9R})(O^6P#Q|Gf4qredT&{WYhdFtez1a39KG`QACC`C(;OTRR+)by~9)-6sZADqJ7;_6|ih>_pcN;MHN8?nn=; zCY{z-QI~fi)kRCVx6>3UkiK|;dwYR1q=8V8GxWkhL^Y-s!7g<^ln=6a8Bb$qJJ`v59goO-=@Lqp)hnWilgv4i~E@i4+_I84pj?lW5J)7Rl^Fc^604+%z%(y z+5oW$wo zeiAr|LtjCt$Qk;g-@{0#6w5UEW$^6)wVW=1GXe^)$a1dTANSL$usu;Kj@3mc(1v)G zXY3*c-$-a>sZf+h$ZRm*dzt;4aa#99is$fi=nG;p}M~qMRX5BR=6w z?uQ-}peTI0i3d)=*$Q~+=!@y+0M8tKW5HhlemM9=;E(CAUh3!z?net&PE(|^qsZ?pAqPHwGC;Qs6gGn!W{f?Yqn6}#B+3TTP7 z+|tCU!mZU1#?UwwVXI{^Gt*hZJyv@BV0C1nXS)~`6O^#WWqPCdU~ zr7U`)>iR1k8WbI;qAe4btKl|)2pfX)zgoqXvLLkI@nH`kRI8o?&7nhmdmKlddv4{Q z&9{wA66lBBj+DzmU#?fu*<96nD+~H`Z1K;o`v?a2y&P@~!c>IqStl)RTWwkb@{B4b zV!bb%w0&stMzgr)GLLU{WU$5mN@qay?2%W@pOd3MJVnw)}5 zD*LyN`=#x>bcqE<vWjci%`9_2+M)_i-S{!5rmiaWD(K`#-7ox}SPde}nv?wKAYzfqEQxa_`LSQ|z9EXSqj^NZN(O1<_5Xln^vYj(MH?7;jHnY^3H{L=V|lrIv4E*pq-b&K@b2+BT=;rNW%gcF~*eruTrd+fDCgH@!1~Uh)yW zk&o!D06pY?qyol7OnH@(X929r=K*U@&J??kT7>CWV-DZ?zo7qzwv>nTA0518uQ6br zkFP)x9(SuW*>EZjgIXH88dgI+PfxV_0=IM8BJI8kA}KTdmYaIoO}*%!QtzUfa?MUo$$XP_fJ6)RPm&7K9quoO`Vt3;@g8?eHbq~E1#D^&l3ub??_x=&L#fLv(qTl?qpZLQ zZLU3*-lx>4JS`|fql!JSPZYcXdAlGo;tJ8n^hg_5zxm^rbZX6!L5}0Rrj-6~%4)gKA2tHPZ zt7>MXrA^#JJaMNj{$J*x|78xZf0-i}dT99rHl6goO%rZJGJ!?D9PX)CanIwmnX!#Q zggl~xdMNwFmZW9F>y!F{TE%j%PqQD4GP1Na+L(&GRKtuKSSRLM614JVCzkzePXZb1 zh=wm0vi-@OhuSV_I@HzI{HBzXmNL~j@}PICOK;tJ*Wzmsn{S7?;~DyHx*)bE4W z&PZqdf4@K6_Os3qUYlF*SB1hl4WZ`yxOTjK6qZv+I@CAE33*jN`du34 zFDdpka8=LPMP4jf(gEs%S_S#?hWe&Db1l`&Vdr7K{i1$?k(JDYH!Z@wo=~a;DYVfQ zoL%E8$X#PA*t;SsU`-}u&~Nd^6qS5mpHxN2}S}|e2guoLgK`B+j$C()<{6_wVFry05{$?(I?3RMewE`Q7HI zTWy-|t6W>RRfhcs4oxf#K0ZAVT`4TGOV7%&i>4XjUS6Ui;9mZ@^m}lRV0{(OC%C-_ zo@;?K1Xz1$u};4Lyc7t!W^p{bwvchgi4{s!IJBt)R?QZ;D~7vIxDi33hzqnzZ6}|q zf}IMAs(2Aavn*(Qz(ryrF=?;z-i2a2GS9P96Aps^iyhIdal#8k7@;NXEVEQAwfmTf z1b~aTDSIyndI-V!^rj1Ol}ofHtq0r(ir`E^T1Nv{X;pm1gnbg2%PL2)>YSZ2U(x#S zL*pbCxvHv5#Ln0964+f=*_Z61^hgPG--$Ww!j_2P@lfvzmiCjYfF@u>_-{Lz06M!;d8jqdFw=>2t*I{ z74}brS+v5Lf0+}<%W%5pSZV-Ee!m>BEbNzoyPzM>^`XApe%I)!g);?(@O#dv_fcG+ zg$jhzrkEEGCqdyDV==V4fC;XIK4Fjgu@+92&s>;ZjpioVP3ub|WfV)?lwh&ET34wYBU5fwyf9_G;v7Y_K0iKH%1%R{I+@nA+;| zE*h^^Pqbnf3dhji3zdIh{w)L-fz)>O#}9Vr8>)v~9ep6jnF~eDb^D_a%yfoCPVPfl z;Jvf=M#M)SNPK_NACsIs`Uu|_2)Wi`7#*-GS2SyIt&^&U`YP-}Mzei+4Zah&Y!~ro z-fJFlQ-E!fd+a8)z!F>2VC zxh>>)!w#DNF1)a}`RKN*P~2?G1$z?QXUqVfVlKd0(xzo6R|(Iv+YEr z@pJx>T#$)FeQ9<)gRd|k!%HsMbDj55Vv7PK-$|I?6YW$F+)Y;H^>+&t{cj5p-E{jj z-E8+mPy;+7IwkZV+-Q09hy-etCzJ@bV@ZZXqwSPYb__T|eQwQ#v++rALH^qbxCs;q zFx+*rVnYceWrq!d;tvW|HHEE`!PIf2gMD|Mr|#Vh`-mLQ(?s}SADA?Ncl-+5HfNsa zA+9qha0AXVg}n;-70!SEK5;&xF;@$kOFBRs#qQGj|p1o{15V+C+u;lWZu z$Ty6wO6_kD?6k+4vN{99cG}0&;4639{UTX-^izdl*QY0x)k#n~MFsfWiy* z4EZSO^D3~mCVL6^pCJd?qjJTcvEY?X=!7cnEp~suK)7?yu;A7fKub0`tjC}ako=ec zEbg$hf;5)KY_Aqyu+KxapA!{c@mZZxZ`M99kV9cUvr_R0g@+jI%X8qdjg=SS*;lQ? zym;1uYb7nY&>w?+Y6pt+HqN}KczCCeZ`O!9nd;Gf8dYcedJyagW!Wg|7d&^UpZ~xk z(ftpdR-zFP3#{u9^fo2DHwK$eg)@f7tFER@#ZkeVgaPIi^|7o@Q1%Bmtr-OB+68}f z!s4SS5m-k8?0n}PjPte_w*nrv*iyaBwF5;x-=-2>6gzwX-SLLq6|%AKqaG9vZ&Nxu zR|j_Sx$2bifZP;s_~t>;gUITovSZhmmIq->RVky+w%UGO%gLC6>WFNl>Liu4kP$77`t);#c6=M$m(Oa{zY9PS+q?f{qJ$(uZoa zgqDVoVn}dU4l8vu-1-s}#*TC@yHj}2JJ=^55*R%y#QS{r)1B7BGT04JDg(G;m1}3< zU*Uq`UH)KSfV1v@XIL=TWiZd5Q*n2v0`_bD0=Rhyx`4uj6)3!Q!KhU7(oRqnty?i3iqk!iS~ury%7;F*tZMz1yqlS?ZmbZKJ9`#X?VMF359w7 z6I@<^%fpS!6L5LCae26LNgm=d_KV$gdH)k!K7dQ?#^nvTeB8LiZd?%$ajow6b>s5; zC%8rdE?+k;KfpE0jmy`KOa2g7X1~81*XVzO3-+UozZ=(Rz$J0x@^|7=+`d}qS}$O1 zKtJ?rQ5fEj)eSHzZiN?K*Wlfj!0qFa!5I-oQVK>!;$SYg@%-$Pt+;?lO*vUgmD^m@sHuzvIQhVu?p_BOkcuIHtqsmL#Q4J3*oON_*uQorYxIG z^fasnus3|+C;OoV`~l8AG(M|$$J*vP?%f@0m3GO3f`F8+-(FSPMK>Dk$O`Y#;E|a9 z?#?Po=|KcBjny-qb-9hO!oEpL!&z^z@9YD(`85PvaINtDMNRMpj!FPCo&#?JVSQtv za1@neCo|`3yfpyhNYg%oksYNX5=9Bc%AO0DC-Avj6pDBm-iG1#PYJ+_j~^7P*!0%> zpiL6$Fg@U^hS&5j2DUoyuBlYUMv!&y z(7ZopK>8o zm8(S&)Dhq)#eNaRaA9pEyxQxOc9{ad8^imzi*-cOQMmQP>z54DSza+0@!0&T$Ke%q zkzeVE4Zr9*(GB)pyI&1w61%i&zzE{}0;0rqjxDI=mT70(bZ{8MhnCKC+Sp7e2LlM4VoZVqzVDIf1(ciF*)QB{# z_D>bA)8k;@hxg?wvSJ)?&vai5rR2_1L=WxuU09}v2~}(;&4zFD1V>m<1EccO5Hi69 z(x_C4;k1}-57!WrQm{MqUK^(x8N}6sBRna4|6t#m`}lola5~Im&YNizoWXp#oH*`} z(US5vz-Aikz|gom7S!VfT)?e*;XXbqq6pcGL2yFCXIeH3*8lrN(nrePHV(*>V35CD zkSE_SKyh&HdMJVKIVCU;BnrnZQMe#ccy5WpaY_{EH$LvMF+jUM6u2BtM4E4NIVzQp z-CyAoJF1;MK-y$VZwv7x*o{L(nolgp;vEa`z~fQejf)&BoITa8n_*acAmxu`|b>&@uMxQI5wQ1k(3kWWo11HGtA~C)pe?!Uu@zz zZXICJs4JbNhF#Ynoc}S65kR9V*xycMPTX+mI+uvI`-xdEsv-T`0iReQP{px`V?}^B zTEzvU}U3{gdr$ ze9JJ{w{HNCItoJX0tS|s6>5+=<2wh=|1sFN4KxI>KO27?dF-t5R8aF&ZLPP9PNXH^y&M8e2=?0`!DzU}f&B)zLeNPdqEkrl_ia;>b-aCg=r8vE*#qp` zvj*6ASe2~%WWrZkxO=7>x>!E z@D86c8m!ul{{aTK5QBX_1JwW*Lta03UJT_8$N(A)PZizMR@D*RXJ@#Qr zzIACCqHDUcC&0HE`&eBm$fw_%HuS?sTEt=V>WU=6TNT5&-REzg7h`0NQMbKvN)CLI!^6s1d6L-;O;dugXx!@a-em}IU zpAd6)p$h(s5~)hm?uK@LBp}c2An&TXk4#{;%ww61R zo`jq?hg_}?InRXruicaXf7v}Txb2?&uMrAtY~_EAQ2dV=q4)syZKh(6tx~x2T#>sU zESNeRJVn^)DXv``F+`AR35N((c1>$JtMQoMDLidsOyUtZ`Lf^M%0 z{yi`BJPHM^e5a)$zXMKlu(b+M1*0{P*;u+7QR_k3lbpAaD#fUn()Ag<^`_F*hSEu( z@-L%w9RfudomIh1eaK~?Bqg+=D&$O+2PjN9TOZPaHT`*<(S@9?`frKB^%QTt5!b#! zTfC0qy{6!qgBx_1PSk*_`&}CHeSOFoUGRCum@_G%m!U0~evk9g;0_|>@g|s{3A_zV zX;ES6n*W3?KeR&{d^#@#v*HRS`?N0fa!TlVMQ~@mOJ5j;Pl_kz#V`YE$VX z32#F+PZN4e3YtGckv_B`B@{F;;vT62Izu~g4~8-mA-|UQdTsGWP4Ps!bR)x?l*=xv z<*m-(y$%pX>Fdy0HKmiB*&u1XtaN=L&hwh0^ffK-RiJhQZ?z0VUI$i~*i1EMOQ9Sz zFtXP$rIWN^Oo~_Zs9QUsbAdTmFjc^i_A7X7JmkhCx)~2LFNRbrLYBjyDdbL)Y=b{4 z{Wo1MrTIntWQ#Ku1tT9d5g6~;O?%x|d;Y5Mx?%8IL3?$py>5XK76sUE^1QC`x(;Cr z_m0@>w!-Tl8et))9BQ0iQk)F-ZcY$Sl%!6rNe$YOnp^{_B-z8JSWvy^Z*ng%aATvr zev^A%mwN$Dmukyvk8IPN082VfyE&CmJT<62bqc7q1g(@O>Yq5o2D>v;Q6c(&(=1dc z$Orfw0?b-D?OTm7Xyr5sG_9ogzqHG9$Kd$~n7jeTn!J7kKFj|xKb;1Hz_?Wjd%77I z(m3Tm+1QHr>J@wbTI0C_dEK^Q6GhN>(1|N(&$}9ID+eqVL0toCPxymj@`;k->6NM2 zKF$vI^mA;vSD(T2cZJtT<33OXj0D}qUE^gAg#0IppSV~*y{10U&^X=94mwIqy~v(& zsQ3whm>QpO8UhQ#*&s;=N<634;yh27QlB_coD9^SWP@!WNO}Scgjom$SP*Lg+gmU^ z{-OP&yUxLI$A+nb0d~WNiD9N-Rivp?P|%Jjm1kkD%mYnw}KA7geT+#X;L=Wp&I6L@tOLcXplRr*&5Hw#c_hOT`3 zu-&5HDnC+)n&yZzGc)n?pMP(NGdwdbv!ziHQL3^CA+=i*#+$p+X?AB!lz!d^aqC!7 z{5if+VPj-t$By-V_#3k)XKQ)6_wzGL%KZ$L_|bUANl!8!{dD;5@#R* zv}u=VUqWU^hNbnP38#j+hs53q5mAMZTlO*KJ@v%XCH#=iDRbP_=d_pmh576+FB2$e zL;bJ6Ha0e-WrxmuAnKmzKG> ztgKx6aadZDcwRu1Qk8K;^ts@bjJbObNxGI&BuF>cQmSz7vB*Fl6BJ{e1U4vz7mE{O7-N zCHei;Qnn^^`3u1*0pX~6=fzvYrkqx@$y2O@d65EsfUob$RV!DL&u%TN##+GjZI`&tyu213{;9@{gX5J=(qH_g%AKI{$UF5*Hu0Q7_4Q<@)vX`W z=Y>GW}(Bg3s(>V%hQo;^J zW+O!^{?UY_iGVxPqia;{Lf3P)mc27QHTrt#6 z?9v6$#WO|t59XbzIh?8Lt?$6Q5PYA)Xn5DWvJ;U4f;jyK^HTonT&&SU3^69e@O;Kz zr*Z;ZyoP;s`vhO40W=Up>l9zbuVBx@^}-M8UG4R0P)-=%sSpI|rSEK0tafH4Xqd81UV*mo{Q>*j0u*3-TdoWIb*}$KFFdMNn5W@t3K7fSZW-SpYMifeo+PF*o zxGAi(gdO7$p@!^0IQ&Ev8tx(v?YwAm0vM_9c?GESXmru)B&H$glm9@>r@nuEoS5tD zWx0PL47l-cYv##o_Q#2tc_6CraboU1E%j75QD9=gNLbXatGA%63kCGA zruo{_SyLV-=KQuPJld%i!A;E5FQvm@PMV=S4G$(JXZ)@dkBbep#YG) zAmJ}m#N)*D?JXxCBZmKb&AX3trs~C?d>$j_qi;TciS@YowATaX&}K8#f!PI_E84xz z@*g9{*D+^0e0dC`(>WGl0KZnxEaN}My&omqce5UElud3oKVDbSc3pwL0wqI5ZsvSc zB#JxnIL*2OOEpLQNMQw7Vv8&;8~=FQpA1;Ak{~hFG(4C;N50eOg^!WsyNvtpg2zdE zEz#WZI7##Vlu|JIF&0JndPJOjoTMvS`E?-a;q+vhxVnaHxQ%^|o(7eJ4L5p(4Yz$V zy^pM9wS;cm-N~X~%{be^8mX|D3#~LM@r_+y;X>|?$vO=A5v@ESm zNk*p`m3yPL6%Bi%iz*u4i*BlDsEpQynHWDxlp{;dAX21TN;p1dmRwyZHi%UyL;5kr zXONE2v#4Tr3Au%{m0QX?FCk2C9X+&r#}3TWPq&qrj+zRMIQ&w_qSz|uJUIq)^L2py zuU!N7w3r9zQ%dj3w zxMnyj4Zf%gy=V=_H$z0|5=l0kiKkY=SxOz@Hqf9cUB7|1!I+)dYw*IB9YU8m?~_35 zb$!St0$=&GNJDIS+<9AylUo|6)ucWFh8`X?Ouv>otqh`#J5C9}fM_Adphp@jWj}= zp!ffkU4xA5MAr7R5i3z_R+^~wpr5})!ht#SKWF1$gyQ;tW$plLt_PC`_;pN1-WvFW z!Mvp_pIw}>${mn>hESLD)zw`x^k+|o7cK)>Ir)u7<7;1P7~ z%GIluFOOTjcBNB4V8PNgdHKs17pz(f?i%f?)kPRz%GwQ27v&YLLEH}K)IoB+d`kn> z@SaaN^^R-@o%sO(b~R9}kV@>BuyY7I)z~?Tof_<%z)mf8PGZN5ohIxwW2Xf>7VMnE zPCIrkV#kV|YuM?)&JFC?u+xhjJ9ZvmhiL?-1UqHe*?}DccJ^S$h@DF8n6Lx7TY*08 z9Brf;<_VxB(K~1hF%6s)?C7vlj~!wM6`U6}_JC7-8;7vNVGH-gE>Aq9BZPsm%WKSED|y1uSoqwOdrZtdPIHgTxyKdU z<7)144fl8<_c+5nZr~m_aX+i!erD!=Zs8`1P9WiV5qrG3VN#<)_?e~E!rK|E{jBC& z)>vUk?1ma!JxkK8lr-xl<_1YKE8wIuz}yhf%nCfI3^eP5%nd=!tYEV;*sKpe*$`|7 zzAHmc>Vf+qW>)A)WvE#nYHkQU$r{rlx9VdH6GgSO@RF$U4iLZ5+N}RVxIeb=Gt0O7 zzX<;n%jjZDbg^Z+*d4l9gD!TD4*n7+wo(^s(#0Oq#a8QLkLqG;b+IRPv1VOtlP0;aKV|wdF>K-7r?TmKLtF3Eo7)P4Y&I=W#VJQ3QV!dtQ_}4RaG9)>iq6VjxY#jsyO*$WO3i z?e#brh_ratSRlC(lf4tZD8t=X58d~E>>G(9JA$g&PvU%x*YTQGxrG(W0GjblN=b{{ z%!&n?p-Eb2lQgbgya>tAO)c`w&rGfI9Zeb9L~1hU=6g?CfG;|t7zdtTKEAiJVXm$ zqlK^2!Z&E)hqUk`TKKU|P%Uq?`W#n7wRT$g?;&el&`BX=Hc z*|~BLGwOfL7E1@bKldfS5({DHnGNd%DQBr!>1r`2hapDE6u!SbrRH)naD1rP?vcDwP zEH%4mx_{3Y2mFs`$^8i*8ve)o6IVB*;s0{~c=48a|DHdY91q5JJmugI{IFR+l;}^S zh?D$vG?l=s_nltv`=OlYEtmwsc%D=M@#!he;b@U}ikMvFt*5C)-jtqR01zP7T@Oo%x|$2P)#6 zI_5*ck0C4UTShfzGK~|KOIqrKPk4X`Q3fy1IMF(Kl4r=5;3jcnwKX;MES^gqu8^!` z`JeFENeIu!JesmWTPv9@D;o{IHP#i9)hz#7kH$IXhA;AJ`MDjFM3V{O<*iquG`b7& zi)8E@P;a95oAKqW=$16*bcEmox$iC>EOiZ;X`z`1<$^@-gYo4JvX-xlwptRXShUoLBz3eE|=76)V!O=d{b0D z)ABV6n&PgthA#IWk=WhlKOzy0nLIMFM>n!0J!ZXlM9Dkeqw8H2m+0RRO^yfwMc?9d zdA>Rgs;Q|7Jr}EsD>|9-i?Gh5Dd>Gq+OZuBFX#8ZmuDBQhd|LuLa@_fq6>-)QpwIA z0Rn2~KP0#zZ&znFhGc&5tH;kvTN=xB#1>k@u-}k36s8t>Es=kx39hdp;;T=i79UL` zw}}=he4uSihLqx7rN`7;0()NF8f`0N*9R^s)R{gPQU0RIlKTo!U!Uo7@rrQjY?EkS zrskcJk_7dufl<5C&L}v`%FKo?z+=*(qKH@{5Xd?10S4)u~gdA3eHEo()Bf)2P$& z^>ZgTH5LZ@-q<)~`eP86b2!Uo;BtfyE>}WAIZNYoD0f%k1?8S}mFsnu(FRqAUz=^r$gFj;%;g9sivozCm#+ZAMuQaCKdY zwJAYO7(EWgeonS3PVLF$CaUA_))&axqZFZ;+#h?&)+66@Vwq7gy7~0`*@3Sq#WN~T zzvL4H0Z`=eQeMyo{mPEQ)S4(Dz?NKJSj+?#$S=u5uX-=A-H5GEgc~4FNfH=t^PEh+ z%7Q-i_7hE}K272N=UhII>@E|te)LGCH5#*de58JKbs1#7 zm%^nwH!K7|iH_0K#K}RH zlyG1sE_lY$Q+854IzS5C4tcv>xUOnf5}ss1;xsvGf<}HxJz=VkMm$<7pKSm}u+}Z^2(RZau!X;ofkulr ze2Yd)Hl)(P?ro-e&Om)YCK*RiEeYCy_={o_KQMDLwbTbDw`>t~lkyB1vZ~tSoxFGQ z*kNL>rZz7rhwHI5C?j>TS@WfI&NETQm4)wUK()Up$+%Mdmg!fIlWhr85<_ zewjP2aFfgxa>+`ylH)O#D%wkUehHS5Hh?vV4OK;jX;}%T_AA`HG%)2rj6MklfhNCk z8cYj3Ig!e!kTiN+B_=Jg5M(OO=1J49?A@W*dtzW) zlBC+$VU2kYeAB!u;2Xi3OH%t*u*F7zg^YMvvBs1?OPFB(iyU$a5)=)lEUH9N-&Cu4 z@gDVRo3B3k;DUQ^t;d0@3wp_o5C~aG%^H#Zh0C1#B{nX>@%@$6uFGTRQ(SB4 zoAtt>^!p`NCs=>p4VD?|g&C^*C1Rd4_a!$tVNctW(v}olrFp%kossB?8#S7W}YfnTJ^^PZg9dio84uS<@?jdQ##?#Ksh78 zl@Nky|_UXWz~P(COo$U+VACT ze}F5yW-lW$_%ETjV6@~p=#s5TV%#OK36tnX8aneMmPbdJXrRO-WZ}9kzl7UVS=80C zuYZ{~YX%N{)8?y&z&bFzA;rdI*oo9Y3FGO>@m*9~#mA%1<9j-pw-z`m^Tr&_2zPOG z?!J(dXgzRrtP@=52H!dpa?*ssc>1yYvUOQ^(EdVZXg6(dw z&nWHH9BGN1z0a&+2+^h)+&D{Qi-r|vl76iz`67!t;>?~q)`evW--1@@4q&4_8f>&D zqd0-$PK{bkuop<#Unq*7ls2cYFuiE@1sO`NWW!3b3~^Jwd8_Fyi9}54Q$ngoP2q$n zsy)2VF!|B2UbXvzlCxg{(zao@kP>w}r&Z4~og+)n%V3-d2fr$jEwA z@HN5t4?O9XzXdE-z{XGI2OB@nwWI89Wjb%zKmuZqU3(Y2OxHu%w-_<&PYFF zWe2)ZSz?y$nab3RS+<8b1uV!07EI}#ubDNBYSR|($57s(9a;VaYyNO~@%W_N4?SUR z3LH`YhofrG7B%M9=WMHts(+DKfKs|cW>p_Ov#gz=NLKBq`X5=f8vW&Iht$s>`>9+< z_Hhc;=#I1dd8&pEk-K^rasSjzh|xIUgrhuj`>pg;?#G1Yc=oLZ;fSy z=g96&+*)RiZL1=ImUT+?uj=Rk!iy`#iNJ&l8-20x&jM> z_eViPhp8n2KQkV;3rzWEel{;>PXs}HWFmb|V>;+}aH0bI{8>MvoMPQJ{&Q?Uk8?o! zx`G!tfcMKhdfVk`*Rof-urcC~g8U;D+>|mu;=$=I{ z`GL`^C>GoJrS3_oX_kdUO^lhq{#u48SY){q*RtPKYTwoDHG6CYT}KYbW@F(tkn|U= z9(vuj^7ZUV8_vV}kO5P;!&e!PrHKRtPuT>y`GapX8n6y_Spn3yPu8;UcwB_lkWq+5 zo#qzHClM;qHW*gc;KJBvm+-C7CZEgZH`yyq`T50@3;&%7T4@MBzyk3H7AsA~qP0Z} z2hxdpShUU2#>Ix>Db!T?uGs@0E*zK$>-PPLD8y*_aPanLgMn~*aRf4+nKyhk>m-{! z;P_JJq2NVrI9%6$qz>eX>Carv-aO9^^8)Uys3DI@V$W;L=Hg`Qzavio^qfyiHn7Ke z%916rip=D8#Y6+!*Ym2m1pW$HR*{z6o;1aBRZ(25+dXqjaqC~Mng4Rt{1>ZSEgsB}70K1{$H3lZb1>{#^WFaMkq~e3IR`e%{4VK)ydwE*4G(sABHmg%SKufK)Sy(G-+>lz^ z2DL4=wgt5o9or^=N|mv(%_cC0^anU3RF`~RLN0dd}W-_M_qk02bq^71XMWEUt8RuYtv#7S8^}khiBNjtQr|d`cT48k|%cPFDRkze19bW z#R<+?|98h~6?CZnASiT>^l<)&otn49pL#Dml%2J_=a~;JeU+I{{VQl~^`D&+y*r~t zF!Mt6_3tm_tm|>g24#3=Vk&-$@u4z5UE&+olJ-dPILJh+V5&H++rB*St;M7t)#!VA z(Dq)BdPOV&DRs)cjCTziFEIOn+;RZsu|{j8$q)utlKhnoXUW8V%$Rue0lX`BN=p}n~ebYN9u1V7R)eASp9g(+<%DPj>NioQSnz(1( zRL}p(KVS>nytEByW+bY>@bzmy-?|RnvX>LIKKH&<`c|ki@v8Arievv9)l0tH)Ah?6 zH;*Vit`@mvYAsO_>IvfN7qhAj61T-Bb$jh1%!KSTarK_8YBa@FD5KhAU8A9bzT4_^ zreAjO+EI)j8%AqjIDgUd4cq~8sJ?l7 zQTBUKaF_C+`mKnswzzx!;n-iUwQ{^q{)xf&0KM>$z_Itg-f{XX?3k87hu28nrtbv8 zxWY*^hc$eAErFACTYVO7uE^&>drki;MR5Z~Sim@Ae0Ei^`VKPdzlO|Y$jmTyZG`HKzfVTA_$$^ zs_(cpS6Am%FwKWQzzT&bqSg4d;FsU6`ej0%ei1AX?=a7CBl>c&Ws&gweG)9(Yr?~L4e)2&(Y>AV(nYsT zAr|AbhV;PjpB#U^o?!Z(3@dp|ykF({I+ZuFyQ8v;rmpVe?b>!i+VUJ2dZ=MGU+x#h ztS&=?wyxya%Z2Lr(|bel+}Thjta`7>fNyX5cjFU)ev9zU&UV3GcSy+JRaWD(^sW2K z5@s1b4@!=Y!pc2OY+nb(WHLJm7mNG+7oEqhdlkCSA$d=Ru^ug~6Bsq<&;83eO>Mmi zhA|a4wI6HV{~V)B{+$pRw)>Y`W^x8IoGNy#YjpTO_}sF5+>&y?{swPT6xzPmr1|8* z=ho#D_LuwJcj5X>7U24qr`E0>M#p?w6s&0uh#9@bRs8{#epTkdfoVOCRfV(G1*;Qqw^JHf zv#Df1=Uk2=d58E=r!@BbrVX5$(_(Ad5W5oecfU&1Zyu zb8KCyQFWf~U|GRovwC zWR1OnE%OO}yZI;cM*s?Y+?C8kdsSjznOQWxO)@^xeZ0zje6ss^Z}&4{O~xeAYf12i zhJR#*Leo!i5m+ht4?y`{ONT78KVF8jzqv=cwu zqIR!KbZjw;QX`HTdql_OKXVehw-v;bkRTrW+HT>hwkN?0@4$-dob{{>@C z`HN7~WvRqWy=;4QwWM8jlok+s^$Ky?jn9tDjGC> zCI#JD_R4mbO5d)rKUXwy&cosN{^{1jCX+tklysx4zk@y-xUx6pzRK>tyk?1b zv-XnQT{X5Ocyap6^@$nt`5(6yG9I(zPDwxT9_VO{oJPbwvp_6-K*Z_@A|8lF&YfE+ zXY(#5?36Ukr>e8jHjDdgZ;E-g!gINBoLjf{l58Xq7svL2w|2@|zTXmfO4{dxoK??I z&h2w3=Snx^tQbqgKM*nR6C$>=#E*!WQ$WP#Y$D!6#O4&1=QtwnA!73@l=DPiB3@0z z14LZ&2AlIlBEHBHUuTJ5CF0FQe6xaxTjx>EUlFnVDVFDvl=EGdjn|0yW0v?iBCeZH z#6JO<~EG~Hqgy8A21RqZ9sazk24aMu`O<9Wf~ zTMKhPuwc~v=Ru82h#`8yikvqFob7D9 zd6`>@3NDp-Ef-F8zm4&{+BT&m_)&tTHj#H!@H3k3Lw)!uX={MJqfz^%aanIl?=lUV zZiV|=G~GH*Qb}-SVmEs5tiXYsKcXQz5P%_i^M+B^o8nk5M{B(3-i7g8rkYw3oSoEO zpJ=)$n2gpqtsHquniO~kP4^x5b+EBQ4mMid?_g|fQq3<3?n&wg&({RgLHv6r;gobk z;KQ!Q$h+Lu-js*W=s|qN{U_wS*)R>$YOJ+3(e!u0ztDppDLh4gD*ZH8Z{wwZ7%DLmGldrt*|N z(aez)uJTz_CY7sv8P%E0hNaPWnn$6YQM0AqTWo6e`?r7A)*lv{xk@7E(dpWX{G`&TVyvuMeM}ePq$q}<^AV)SXP0zT$Wi|}tm?x#_749wYs6j(X(`($f znhig1VmN`>k-V4RgtLm#2Husse%by zbVndw!FbiHINVX9A*Y=_Vw3lg5ZVCc(FVx)qS!XMHT|+-$XwMYTFHm42Ks?Qa$hB~ zKnJQ4LI=7%LnfWnpjy*}kKigmK^{T9tzH<|2Ex9`kfvO9kH>~6B z&EI(FbRqw+->XSgZm+;s=S^1`(~e0!hP8JxE`;`JCVbiajrT@t$iJ*1BX+i$zO;*a z`{ca%_L)yXXYg8Sib=a+7PYEEUy=BHeXnM!*<%-UkBFZ0vwLQK6q;+8SPb{xR(0qP zC}4W)_UnC>y!h)gpFWb1RdUhTwdwcTfQpPsKD&B%%-YM{VC~ufg~4xgbX-S%yTNY@ zPnvc^FZopKGh#!Qpr6^fV^T|cWy7osp^H^hRvh}qzqcTRf*UlN(tMb3W zOW1s|RnmXccWR-g`o6jT^^}vwE%wa$!7H@W&L4VP`hhZ{_{xtpn_9dc7FTwS?X6wb zJF7F)dUM+4TgwbFm5mncCvVr@|JsoRlg@+4M-$t(8D9QuYn{&HZk{EtBjV5!)9?E} z%}AC0sP&Er)hV`$I7Fi1WkjLUh4N}>@LPy<)(Vru^z!E z`ZG^8RzIFiDq%v`@@{!8Dqsfnt}na1hJGILs`G*`Cqo%n3^jK==amjBa2X%ldo$UK zA6aL>>SB#t$d2A^^ugrad~9;!t=;gl)^*m|R5p1~AMfC8Q>wmGmm!OWy4-quhVrli z4j5x7*}-evy8YsW`?%-uk?L@0ht+q8_%XODwhW_-WzK`mT=( zSG^(Qe(7`!o205$ch1RqK8|yOt!WBRN-astM9BWyrbj(+XueQXxaZs5;3mKky9;?~x4E~VIZ z@rdYYbkS+*q9rT&nLcD2u)Y6K!rBHhKIj&+KhAw%6$|`uYgYSNU`%<)e-d9|gu~jn z!ve4Cj+QxaJl_$+mFo>xr+UTj`Ood#X%%o+C>?b+ZyH*rOV?*I9+UY0kIKqj$>#_7 znJV(~j?9RLEu2Sj5(?kmOBlfs7eaFM()-sRL(uVN z2|4@Dbv4EI2}id~4&qIAIN{5oEluBPq<6Lfc4(yi1kWU^+m~`TSn_UtuwL2)3s=gS zx#W{O{QE9gPP<__#UR2dKF~4c@#M zZ1-EZcD-J|k6hTQV-CR!hko7MyQ|eLK2_G~VR)a`h>(NGOs~O4@lpSzV^_u; z^%;pxvbme=?U{0>$>KpSmBV_pQju8*%jxKY+k<;jT5O5vpJV!o2;pcIJ}WbqW;ZP5 zPK2NH2IEi=8b(D0^vc2ij#RZfIRSR0Y9>#R`yLVpDG62wC#ehToD|G+)WGwz!snSy zWVzn>yq?lmh0iOIW{uQ)7KlQ_VNjhpVnrn=jy^M@qS8K+ALERv;gc!EHiAFW+^|wP zwoLVz=F{+!>gTu;&rG3j@*F)`xhq7CC^frlMDZpwhpAw0j$p+Gml^RhRhNk+A?|fY zE>C$}y`L>Uzv}+s#)+<<7OD9~|K$UUC1~}*1l753l%Wo_;r0t;Vy_MFy%A;)SvoXI zU#xT6O{27*=XsAErP*lr&cr?yrnPT>K1L3#9T+)tyLMva4A|oN1JS@ zb)PTS2g?JxgNq(W=lB_YznD4J8hlz=+Pcc?-#+OafhfvU-xMpZMh0BL-%)BD*YD)? zZhS6Tuk`%`3=v|E{<6e|>e?xELN0kprXKycdIu}r+gjk%eRIYevSY6)-D_x)>)kQQ z+Xd6%;AzSCdsu~B-^%y1DjYmx?6%}QJq1nuuHSdlu7Hd;WHpE(WuIzgpQ>IUo+*{m zX!Klpv?Qz0<*0G&yI3=SUQ$^fhN^^bQ~EDHI{%j#-K*ZbOb7#+X!=jSXS$oGg{-%1 z3r)eu%TZT5e#onB{n{gCPX@YQf;17_W#DaUmrFGR9Z13b5^k~BG>jmQoj;a^zmuish=seX% zjkevO?$(@9$&KIF7-ecPOr5zG*H1dQV~l|Hx5(i@bLNxpbIIXB`B4Lo&<$&Gg$Dh(b^Z z|8-?#RdTLZ7*A)Ud7O!PYztTxNn&eR|7*V^v9*l(gT`NcEa7||$HyQKT4Z~nDQl|~ zfp52XqH=o5>U?S~8CvDAUZ=GmeV~2Co5!Oi$Motu5eHt0ZLc0mA9|zlmDqk_eu8OS zO9eIxALP$V^CRzL6Zz_Ib3;0|PTl)?ngF61u9gPyqzWuU?n(s|$Ct83y*l}D@U=IV z8lUODO+MNv8MElN8%10MsK^syricrl&*g!mSN2tQ-R<5JOzr8uHEXOc@-)+cS$wa2 zK4x(qW?eL9okNf#PMHh^*(l~S{x4CL?g(2_na@>TAVcLq?T>7 z4d{`yx(sFMxReJttnByn0tEt*6irvd@dLW7SZGs5*hg=zfn3NMMT>v!S#j|Onj?-J z%r(8|ZKySV35Ae^-|9S7F9q*y{3%)zFZ|WxTzmCf?|&+tm;LLN1jA%Z$byi)8HJua z|Ghb$yO35tJvre!v!Uxd@*#AS<|KJH)_f&s*OfZXPcVbGq_6Yf`V6==TjE~{dNEze zU9?p~OOre1++|xB!ar_p>{!bne8RAPHI4k~0xSwoQi%s zQlsBJe(0|kgJPcYf0O-^ zW<<-Dc;TNs&snZD2aPC5?Ux+H#yMJenW`J`){LX(+v$SjAlvvn9oe&Ws%1r2m%ybu zlsd9xYxVB225X(|9-72DW6f&|nE893^2_hCe5R4%4bmUk<5MH?&Fi?#D9{@!W6rmod_nyG@3I>Xd^-W({jf3_nUF6(|qa^IHt^K}Ml z^Y$5~qtf=)?SgMEjC^)0?2RKnT)b}kuvFtZ?X7uog^R@n%b)Yp`@QLfy;N~Z5TCbI zId+QVuBhtK-{QN)4VVXClH{oD-lpktkWJpf{b->3!@O+|Yx87}vZZU^s5iv;AG8W$ z&&}fNIEE!Nc`Gyy4?}~?Wq5V}2csixK~pI7b%LWw}pMk?_q5;d^_ZHiQ@!gfw5lc4R(jI|099wu;yBg~8dG z7oxjHecChHGU)&YB*}?ZpK&vVoO4$&dE#kbd|J_lm`D3aL?X)WyGiGXH#Oc&co->v ziXQM388ynl(Gx|-ulDUu{7j|uD+2H6rJj_7=cebktek0=FMtSQK(QTl3xZU{iw27%O>Tb1dG%}%_R|Ao^7)GOGoig}t;XI(ND zT3P)rbj=RxnxwLlHwv=P*X@lvk1ZOO1#9(=dkf|HC-^bRc{);7bj|q>`T64}&Qbbw zdR%IF1tzb-JGT5seph=FGG@0_Vc$V>@N9okr7|D>W}Qj75N)Oji1Y4Av2@Ko2vv5` zYgHklxMX$mjFGnUhS>u=trwqFP7R!Oe^I_6ljYNH2|j(C08(;$G@3IUH~yk7DHo$- z5v|30Q|oC(_|_WJuxC(4X~yk8VEQ`5HG%ra?ccm?l*j#U|6J7@ch+=SXoy|DdG*lE z8ch%Bwy_tZtejJsnnqbnwl|J@V zW4qz)N&6b`**K&KQcT zz8410i4l@&>0B$9dVA3jcIh;vFC9aOOc zo{Q6U#M)b?eRkgdrdT}^YYc9;aPuueT;2Y@-5I0!@57H9v|i4o0Nj_EZOh29ZS}y4 z$%)I0!rZo}soi*SDVAMMLGP%3-n}Bx)H7neOh@ytJ3Y?0wC0swx5=RWMLF_znz=q{ zR98B-jZ+ke!n?Qr?O2~odu*-dt4-UDBvA(rV0PN8=JB5?YpIU99&d*Gb>fxS+U2R; zrM-GtSppMZ7Y40IpU+iZp!whP2b5EmJ`!P0ZXfavRO(<-%lT0s7k;ph>F`!FGAwBd z3Y$3CUeCC1;u&rVGya0;7S%`{RiN%wT?u#Rb5t*RI;dW4p#ik4Ed8wMfF%po-bfkD zZt_2H^@qBzcvb14B^by1G6{D)gz>M!!kbRJ+sVzooK63t5ELA3!vxE|lc{`bLUP^7 zIAQ&lP|^RYbQn`FjY%Jq6n_gJk&*886x#G7i*|f`i<`9Am~dCyels@RQz||cCp`US z7u1yc*MsUlj1vmuMBKnTOE3G}@AA)-mCTh&7kToN?w`nvVmMLn)~oU-B+nBYyVvGv zWaV<5;b^Q62LUv44w~?O*L*%C*ahE3^RMq+{;bVEQ2i{21G_MS2^^AlmgJ3{IH%ti z6eI3e9UJIUp35Z2{}XG;*m@alYK=;8$y8nS$A{beUX2xRbGm6$Ywb@}d&;kNz5Aq_ z_6zqx#VN~cq&@Mxr?7Y|R&kRIZNi&gHv=;E^jeG8B9gJkL;86Bkgt_d?2fNS4*RrX`;yFx?3>PM~E$vU<|JwT#!<5IgS!;XkbJ8m9KI)qCy8wO`7G zJ;*+1seRj0yZdzeoay#$)9sh0ORvs#gjjj)!U2T2Pt~u}csW8Grs#lylz@TsfPtKV zfxLi$4zGbPyasN04gBQA+vt-d>epZ5Om&p0z1qWic}b%C`b&mf%f(!aWU1xprIweM zI?AlLHGo@>^p|WX;}84H@G7*On8@maI^so!7H zY#wFC8g>qgp3d`h;9y?2SEkG{2Mpog4jl|*`1YeAkNe-g+SH1WH}-szZfj}a@=lK# zf5D<KYTIU&=iVIU{SA-7+pJAw9ZH1d&mZ9BA{1`3R>ko)_>GbCiMnRlZo< z6d!1qmQTnku3c$k%rDPv(DFLYf&(828yj^G7Y7;ws z;D5G3ExaTX{G+wdLXPMH@>I9W;c#B1@LFD@5ZkqvltK<%?skf>FojSYM6rp1cULF7 z-HA9+?u+pJt9HTHZ5G2ZuJAF;D+!(#)mxv~`85AgYhh)*1H=mNez@G@jBqmdW?Fog z*BlfhcB9qT09Wvqs8)E1T)z1)dD;v%6(5C@aE-;q&rX0*B;wHBT z@Ys)|oO>uhBjam+bX%e2RR`Fp^d0DIjI5xXk5Pa|&DWH(<0;Dd;>gt6#Eb|0UlIE8 zh6RloNs$rFRa8L>g;CUmuwfJ#lyf(QQSibjexZpCqu4~m+Py4s4#iw7pPLqMc2r1?WNbM?{ubfsG(Ly0z_Nkf4rL40J+oRcG7BO_j@LOwH- z#mLk0vI>vXER`A&-(k;_-S5OnEECP&vq5}qTjBk4a+=qvLRButaI&}}?~-MQN*1tO zxJgP)dNN;DcdpSk!X!r>|6dS4AH9D;?m!616d`9RCR8#_WW`REI$(LtW+`_+q(Q!{ z>0IN@aFYXF85hj|1)&e@pH|K=Yay$A`AZY%EkI$o5d9%oAo+HIpCBi0f;#NY9L0>B zpz5*elbkmfNMm!lahQ5Edx+Y3g833oFe5O2Wy(IhI3i<2Xf4hx@9PjV3viyfTg+^4 zV9XcA%*LHF^z!cGS{!-C17c%Bs8B9GUJ``zC@w<;7%E&@i8IN1_g06HjfN9S?Scu722p~J;iYo8U#wQ%=6B41jg_rU&0 zuSY7+cy%z=TUsZ(y;*+64B4-q^S0Q6EjVgSwiE|-}tXEc&vv_vc(PBg60@(H~rXzmT1RoBK>Z_ z64*}o)&q#Mq|NETp^*+tr}SB~?{QaDN{>=Bg%iLA)P7SZPwUZ(G|2&e*;46wEZ#qa~Ii1fd~4fKo@_230#IH@PrFYMrqWArzY+qutN zg-QZfi2bRWB`w=3Fs5NP1;w5lPKuuNl~tWC3Lzv|Me5&2D0mF^QZ;g%52P$NUogAB z6zRp?3#0lmY)@LKG5J*a_? zd*M)$5^vYe#`{@u?>)NL=w~0(0$Y}51k3`41IE`=#I2lAYGzLvv5p|{i|U@4G|*Hj zI83tWrQj9DiJ3-(&%#DbeuCWJ>A$u6U}v^Irm=I5-YPh|D@YoJ&954jI>toL%F<_M z!MsKzDd~v#i_mm<@jOn>9pBbJ_uQnteX=5-SKRXBUVg>zkg0B7N1Vs2sU_TvO*g~0 zcE+)zR8Nx%_4tb0>Fj zD5TyBeK_b3)<=JH#VeHG1zD1aYk5r+=?1Tl%hJYybtWfcKVHFvaDA`?c`H(Z@TzHLt+?MyCgTf%b!0O3 z$afx~4z_nCaFW$3QLjD}&b2C!Pa>s@?1tq28vS)dstNgGjY6+PfR;Y|qMrLQ##;j? z2!is2bY^75S*>S(WCU_XE;^o19ptS6^7b5FGJ&@aEWmKh3X$UByZVR+bad%~7NJ57 zBM}%LSdsp(TKHi+$PPByxZ*KqwHP?SOX9g|wqv-KSi6s+!M zXqqk$G(q63LM_Yq7<<~p4Cg_nG4IXmQ&26-y}9z(r@xrLkw2(g`?Ep zAwU#=%MGC_HN@)n4Y6634v8z4tE|IMscq5 zY^#_19^1EgQ-eDORVqR&EQFS~c`f_!nScq`WpyM{QeiuDG(bHtWc6p%Z2T%UTl~=) zELU{0?6S<90;f^~!lg8^4FquZGSdR>tzYGVi+#r{q&rtH%x0WOk=(7HH^nwq5LR3 z8+@Oab^i%MX>lG-V3KMq^T-LX0rXT zkGxqpjdMTK;cJ|aZ=>pg8@IhS#4b^e;k+k4nPQiy#>}`7COoNx)s8(zQTrv019YV$ zY+1g)^QR^Dm%Khl*O((SmYtj-{No&h%Q;~x*KZ#>1v=@ATOfBv9c;-TsnKrpoY&1= ze)imQwH!`&3l5krd3{z0LUO)+{)nes$`LSFh2wuA!BtNN*J4Rp>P`2`w!kgu9>w1WyC+w~k+as4t<>a;{L$p@-;VX2;d7WLHjwza zCu1rycWjmOyU^I(CPt$QQ7APO%~8d86a}}8?sJ&Z%)+&pe}xR(#J;CFKHteCs{LWc zFXBDeC21*ew_-Zwf{nw2Q7;J+4C-Hti8JlBf&d?_d?99#4TL zf1&ZY-5nGq}E^RpH~G4afNzHk>W*wYwYyzh5g{9b>Z7lmJh;GGlw9r8X$)m*D6 z*N%$V8fGwR*<^@oO#)wkh*flIF-q%f@J;&vF-myXSNM1e9GSt`y$7d&C4j3JyfkbI zsHEqSwJEp1_NAddN;U>g+vP=l^r+9v87UHhmR1Va$|`gn3ChgOnN?7)=BO!3&25*h z9B>Z{M<|215(aMu(g#BM(Fu!Wn&v3E;=0CC2mV@Y!DJ2B3g-nou0+wBQN|!q%SSuF1P(7Qn6|HYuS#70R&Dj`W}{{7DsdQkYbh{MZ~j-SXocR3Es!BRgWdb>};kLY&3~sgi-hs8)Z?jB;e>0ED5r0q{Wqb zLyNN|QqE^*kj18*cvc3ICE-pKRKCtzN}`F4 zQewlpo!B_bvN4I+csP^T=x5moCpNx_CN^FmHq1MTjbB+drV|?vXAv7RH)11-*vO6{ zHtLCutX;&$7@rnCyMAls4D)yV^5xHEbwFCx$1eykgzA^2ZsiMdDg`sf7pm>jMT>aR zObj$Z=bk*6eJ0IP>xP$5cJd9LceF;O=${Ieg}0>%?|__^jdwdm#EC0fy?ps;4k8=q ztm)AUe)K=J#9Y6mseXyYZE1_!(pI!7;~GxgcZ zVnYC{OBxap)|w%Q1K7M?8yK$)JHhW!3P!XG>;XN_SBCX-XY;?nJfQt+3f_>L6tx#` z;E@S;pX0-yDo!!?E;YhOc2ROgE*yQNMP6rkxv5xEirWU{>WoAFrEZAxx|gG2E+V#r)cG&0$euXq{GKsS}b zQQg>Xk_$p?8fhlh688N%oH*mSZbw;ds3e&|hY0d+P)N~)oV1OD0{46s<=)W_N!VfmUzyZ6vo{xcY~FpPW2PL^Q>zw z|0T`rnUi9Kd$Qd2^zH6w_K6mL7EHG?=ZTy33sjS0BzrY(d;4~$e=&5cYo7S9WhriX z?vn}j;i(jC^j%NQ7r$xM;+9XN&aDwo{rvc;`Qo=7YdGo29CG@FQ(GJPyb(U}K@a45 zZi+qfp26nDjgaG5VrWo7REt{*{3X!l{-z7;s8i7^+75O;BgKxE;vG%Lht%`RX3_T& zpBF58NlKm`AH@|OvxMLs%G^;9k@IPn*l=Fwi(O*tF*wO>vt=T-^Jm+IQc0Vf`%F$t zwIxDwM5)%Lp1CQzpPA^?idq$>X!n~*?SiKDVx1O_-SmJ0thW3P=7=)-D?ZwFW+FP= zB3MR7ld)3ee!qjKKxPS8OJp|{%riOq^UZTSIm=sVr{B=YRLoXw-iGC8{mlUAH!@G2 z?z6E>UO6=fXDrpp%I75eV}2~Jkt;Dry{!;D63j(285DbsnEKaM49t^Lu>XK;jVLDj7{aIFT$6MJ+Z&$~}=Ey6c zzxx)dVVl$Q1q-sPgVk=;3naf&hi5K~JC}(AR`?sVsbOOF*LqarEv#d@yK1y?D^*`B zdb-ARlVlj@ebH%C3*Qr8*O6V7?R=Ntw@zh0eouT=M|RgF95gDR7%QiBWg5p*CF!F# z^?ie8E9<-19L7#u+hm%!dib>&UPZ1*5`(A|D2-QUDuS_wmGXB&6;N3iIW)>bvW1;T zB#G>2@-An35A3uVYDqKL!D)((w_8LAD^S3P->l)n4}zT8Jg?3(}SvOfw zBDdFvrFT7Xx6=c6ZwhN;NEb1h26NAgy>F>BE#;>6NqE6kWFT?Aho@fBTknxtaZw+WMeTS;!<@OT5yl#PFnHBc zWkiJC8k2o!j%TsXXN+@Z3`S^mcg0(}o_3l0avglU);y?y&R;q0P@FYA88GM^p&i-u zy)$HzO%CBR+AQ8ab^Tx%a2ax1chrP&;)07>}tvPd`otc zFJK}~^?l#+!mOF-iFQkz^Ic2U&Nzx2)}WcRyNxTST~*D!+Eu4IL>9bh&j#4$Dq3~0 zWID%Ri%o=ufVGiv);`P_H%AFoHYwTvPk3>OZyuDMr5s5M!+l2EyZs>TaS*ArBC{ z3q_iwG>J30vY_u6X^P%0xw1alYK>6RYr@nz56oD($*`kd#?wk05b>3}vXf#gEK;Lk zhg;mV25G7ysIRH(yK&um9=*hFVvnX>)h8O48fnLwg)=stKQDJIMp|C-2GO^r1gxc zUvI!1MVzMIeW2Sd8arli&^3vIWIS%rmSEbX{#VEMHD%1>JJ0~Aa@u!R->T=GRen%S zfiV_~Ly1E@i#(~VRp~6%kl`RY@nuaDzxcX5?n@@F*AaV-raCtF4({|XqIT_E%AGVA zt7YAJGRvBWw-^n3cK1J5&6rDydTYHNi`gV^DC(S% zlyiS3<@^RIz5TwNIq)4v!D$QE^XRt1+--C;d;{sRoC)IH@PEz3(eRqD$|($v%9n&ax2t&F$|z@svq$R)zbtEM${goiKue-@(xS7pbfwF}QgfdR;s=U#s+tpg7%*e_Eu63q|5DMJ$`_T2qWtUe z-ZC~EfZ3+Q$ZeRws1%BAn{&_3OH24plo=} zb47cz*y=ER{R2iuNpHOgsadu8nlQP6K~#g?(OLELQlyUd~F3=vs`ZFm?r809Rr} zZ^h;rjonz*o3X58Zv3j0%bX`|T*1Bfd|PF*+lW`sbA;dV)iV`;5^Z6TPYS_i#snkVVPSN#5>z`(-8Q* zOjaSpOCO)H#!WtJ8`~og_#B??`K-)y)BjzheEVi`-BM$5d$Z?tj`TpEL-NACK#In$ z$qdFjI%Hrw;{J?cn1l}8?iX29A+WQ-7$k5mY9g*dt&`(e>!76hb5Om$DYouRU#ojd zTZr>$R=cWSL@z&UvP_aCc7$-(q4t}3_oCicbqSG8t=nvE`h!k+^l^i;S(X}w`}Yh9 zxo!7I$nDlh7jgMJ#Qnw_>XQ1K{3M;*v>5f2j&FqTBf!=Y+|tx~PJ@x7$c-toq(egpLy18pYNKvDF?IF|Bp1SSMuF2TOK*IK7A*`8Aib;CZA;Zf@&Bd|l zhKcEnAc6xso^2u>mtgI9OQO=jlSRBMe(cOyf&Rwi;ED2IqJo%rwp}4B2q_Z3b2+9g zGY(pW|2Wsz6pMLzp8E=aEffLPOIHWa=1pzfN6wSa_81Df8Wh$Qh+z?1PKTOvk=V!@|qVyz*+e1F944n69E3B-wLOlO0 z!_v_lPG*MdB=})RfoY`Q%Qm+pco7MH(;Qh$TVa2_27+JXjgSXb0<98zS<}cFVnZLu zhdW|kG|V{}Ysn^&3t4_j`aZ1^hKa^kdsC`rk>I~4#tTH0;T(i-*rS_J!58>rA#&Nj zXXQ>`SBj@Bs!H;SSG?hxA>f^)``Tbr?4jhQsL>|H;fX=KdQ-|(`dknDR|p5kYskQd zx3`bh4$5ncfMLk*MeR&!H7@!isKQlDH}RJYx8Z2mVdqLy%qyJmoi- z&!@oqB3%YNJvT`I1@In7R{@Wz58?j`JUx#?j!*D&A9yOS1^7Y!89Bqap$(|+?Z6N5 z3H~uW+43#}Kb+4L;A#K+SK$2s2l<%=Jmvc{@Ln!Fwa*e4Jr^6?;q)cIQ@sL!A6~DQ zfTw!J13$c84Zw#2KOT5$r@?aH2A;~B2RyCygZNV}{EGj;p97xwSPMLrKS=*);PH=n z5qLD!5dN<~jzHQ7JdG=&XXFg?5O}KZ>%b4zSB&~f5w$}6zX$wq{)2(1dY%S;czcck zp4#&w@Wb0j2|V@34dChiAfJnYr*ZZ(@YHWCKMICf@5)EQdomvr@Kn!m;D@(!Bk;sG z;uW4~w>Mq+OdFODgZ$69@HxZqG|oQ z-Veq}s&5PM!|OX5c&g{ezz>a2(5rx_{Qo#Cf8ujF@WjU*;HiHG+ouG0YTt*z5B59J z)4On}JTLx}?Y0kiDlZ!N;rzS{yd3yc;3EJB`{fewl=|GB_Z z`~L;_;qCt{@Ko+UfFEA233$pEipmr9Y6PCj4FZ06x$gi^^OXJu=P7l>IpE2bMK}_# zY<*Fd9r%$*$KZ-{;Q^R`0zU!pXd?KG|z|;KPiHph~%zqj1 z#NRu(hWZ8crNGO9JBw?mAA#QvJk{%KT!Zz(Po^38aKO8`hU5S>ApV}gL_dM~h_&aX zM5I;gwI$DQE}XHxqHKfi`J{DOYsxD&sI_a#%GYIYSe>$nzAZIleg1}m!r7(T)rIpm zWNj=eD%Gw}Dkj3!W!lnJ<oG`~fp3F>D<|Em{Nixqbr=hk^K(Yur8(g zu*o&+S1&BAm{C@?p^R`jg*tppOkIXfE-Wu+c`PriARg(i>)U1cp4p-@?fP<^wybb{ z{_}Kap|+?nLt9d^A>Y-andLfa5W0tUV>?f+Eh((1D15e@N^t(p*icHDu(!)+ZYWzo z_gwWUcMZ?M>}R60>DJKK)F^+JR-3=>Ic*twzo`7b;WA1JwPh;eO!ImMIa2EmFN$y(m=P7jXZK?ybsUY5!h&J*oo*8^85_&ckAq$D7&EW1 zvLYSb;2g*K6(yT#q&uG~UsJGATf*|imO`_Ap$>CwsKW@Y-dI7Rft`SmVTAf0?M6sy z4H8vsehZzVitta=k`P1vGt{(06KCd{^=rzDlarGaNs5Z%jiq^;CY2{@F<1%{*K8=C zNa#(v)RI-`!KD0El$mp2I0eb7|4ovta!rZ<5G8B|LuFIjIdk}L!sJO>moynBPMlBv z7kRR3IEN%q{)5XwiSlFtBvPKlxMT{8bY{smG+Q+`Jxr>w$o~{8#H>rMu=oGFU}0}P zmMnwCxkL+l_djIIDpt6x`oE;hU`+eyj3mX$EhJRVQua(48r z8XSs4L)Ix{i28pBnL##&Ntq!|oMOh+S!~M=$(f-+F4Xhs(M-((Mab{Cov}Uo1m;P7jjh&`3LA_1KQy*g>=a-J z$dJmGz3Tr`+E|^I{!6SVTLXE_{4e5}Nh~Z~Q;`Tk$RxVHn3_mpIZ>y@%2kfXwPmXd zD-yMNYZ$FAzdUjE`i)HD{BcA1|L2bYD9_jem41i+Mgv}VLA?v|UGVN0=lxz6%pSv> zJ_|*@co);A1}HM?zbbo9`|P=Jq`CMP4_7sj|=}w`%q{q;4MHZ{|guF zcEKZ~nbWO!j=!5}YXQzOnmI~o%7@Zs7u{MHeA)%4xL|+_t{COaf2Iq{M=_@}QTH%D z(-s3<*eK>Gr72%Z2jIdUrSxn(y9X&f4v4HubuPHV1#?_b>4M{3@bX9}-`DmsZC_xs zb#dflzA0_NH4XWh0kP*Q-RgpsF1P}a%FlAa@h&KLK~EPviw)dF(7o@1xq#TamD*#S z?Rq@c$;U5^Oxr2o-j99E2c=tZQTc}eqW}-O(v2>-77*s8!d&E&j`q1FV%k;!w+Q)A zn%axfJ}$cR*i;hzW*1Cy!CTQz{6#?G_aGp(XO#=T1rSYMS_X(FEX@PN-m!EZApVuc z<3CibloIrON0hT(-@U@Lod@HeL_Mw-rHgS9T@E1CuO`yj9>tN)=ajE9Z6&}JL_U6w z(kpO{1^qlg?3+u|0I8oCK+K}jALPvGC8#%SpKW*L4D+3wIZA122TJGRelF5?alZ)Z zmAFr7{54ZL9ajMInFvVv#Q<`UosTQc08+dBg3c#+8!!d%vMb%?g1Z5UuL?lQrw9MLJ#Y8-=AEm{(XudhZopjxxyNylu_3+1Zl)i|I>fZ_o+ePV07d#Hb z9Hkoou@x`P1|+&nKx*e{E|}_qNq}g&(s)30MQM}^ALfGh!<^6ks;vy7tC`(H6ZczG$8Rc4UqCp0;Ks9 z1c;$qdK-nq=23bbkjCRhKn%gsIzWHGJV0u9H6V@8AHXz~+v|cYfW(g(kn*QPc$Cg_ z!CV)d2Z$yql>rjnU1ZAkzYAV-!OMUcPNhYz^a>Y@0i(=BH)PmVz@c|k6DF-Iv){873E_m3g{5ciKEeFXO@ zP4_9Cf(unB4F^QkOHX+^$Ma9`F>PmHds<9U!`_)YJ9cf%lm< zAK)azo})A$*96c#@NmKbK&rIxqcsm(E6C@fxm`<^jFlIe!q`SBfkLs zz5^ydqu+Rj)*u1V;5V&T`L42P4UeKcagqL$Lo|3shu<0W8MzV%1cUDdl28go;SN-#SU!6w#UY{r>Os|DNZ2 zPkXZWUT5vS*WPRG%h_kIwaHJ{XrzOG;p##fLH{X0g8oGz@WmnU8q`Tu3_Tn|kpnUNA0w0}A>-3-Q;7=2xnL*hb>us8jx5d7yu;LAejyfLf~pT76uU$|mJaIopG4<3?cLI^$|f^#q= zZe9p{LkJBwhxp?|aOm4gkcKlM{*DlQ3>m#R2SfbRLi~*X^$IIsfwfU4u*y;bT5_v61GSdw2@P*7Mfs$@~Y zGAyWstStpg7P3(02l;DTs3t$)S8I2n;Hxg)`N^ggUgBnd;iZ)(&~fFr!rqczv3}m4 zxeqSG_aJ}vzq9hxm%V?*wJ+@dl*J4kedCz1T;DbNrg7uOr0Y}1-o$Zf`Y|`@xtsKQ zJ;#mK>&K?0!A&1C+K!ePQysFddSQ=ETh-;LQev-qu%$C=2Hr$n#gUbns;ugfX%UR6$5PD>%98{pOD^jv7^ zVRUM5y@l1uzc^!IQo_Eh|Is#m_uifOReur2iF{&?@kzL@LM9pe3G3fGDO!j7_4hiM z$gcP5OBkKl%Ovd?(sSXJ9-W2J#d@s|F*?aXJ<@&wX@Be0EyT7ZA-ttWmjjjcerded z(Pikluy(H=aha}8TOF_!2Q9^OI}MAahv#20pHoJ|+HH(WP)s?=&zG_|241dZrxhUc>pp;-^osiWg7) zWB9Jq4T>|TH5Vmk1~cKCK0YoxD*62QL!y-3dqGQh#B(2aOX@%FRywoK|AmdoGH3y1 zjb|8Eb3)0GYt#Be5kg3FB3y8%cd?@9b3X2tyL&ENzRc)Kypo(Rk4rRiQ`Jx?(noy~uR&^P0MKt}nY8m$b&0FMBp=UiSG% zn5=H5KB8uJ7MsP6-rvn=*k|Qg%$dQgWJvxG5_W&LL?a47sI=O>NnL~G+2@^XRyS*t z_@6Myk;y(^&GLES&$3zB=husB^Tf|F!{yIv_hxFd&u?aiBx)vN! z`}9SO?&fm?-m(g=>aBXXtIs98CI1)89XclBzUk$Y2bwhb)pDz<~ibomwc|8}dzsw=!LR|#O@w3*8TyduXYmi7S#0XJ3;uM%p+5h`k#6)W!wlV$;+_j9f1zBD|3Xsf z`950B^ynjBJe4xsc3Px3f0~K-;CqeQ@I4nP`SFca(>vEO?*PV})+m1NK?*&8iu_v- zC)1qP#O5KDeL`A|zc4zfms0)vFVY-F2OgpZ${21oqmy}=QOUxydSJ;8Ci<9B@j|!` z;X#7$CHMviz88Aq^A>OSY@t;~9^BfF{)uVIM0?F-hV?yRx}5fpkB2Wf+?^$9?tX+h z+--nc3^_;Yk{N69r!ueA5KqEMRpho4c#wo`hS5Cwk#YI(!DfmkVE>;F}F!JagUb z?DJY?*zD}Hm#nkU{<6<@lUsjRXBZ=MzIf_SkJq2hRSfao*QsF0m*Casq@bq5e=(la zM|^$il^eLz+g_iYGXt=mO9b10nv0kLx97qIA$<0<A~7=H*19FGl|_r26%# zY9VJ`&OLxNT#@s;LO3O-U*70{?(LK^)u%+rUn!JaE>Pjm={}U0e3aAULQc;Fa#|QD zBb9r@6*;XD!ZZ5iRDDXU2&*w@rO!&9GoBEk|BOIe7BdmgZTp!KWuIWfzU=1eBTn4P zMrF%Pi6DaW4{In}5$P&V#C9OUsQOMAzp_g(E z-kW_sS}3aqT-NR-z9x7hYN*z(52QYpQeWp!Jwbpq_ww+XD^p)reJbqn?DL!;LkwhS zmf+LEH(T(x>o1| z3_Y62eLb2R(bh*&dqH63!kmN|C3$Qf4*?) zhnq)cv8iFeO9JwDh#etH66Q(Q0w%K$-Dqr<+#=Paj^D&qD6b2X$0SPD<=f)3MVXr- zGLLFfqtoTuTNSBGs&lPPNkg*+RIS$-H;D?GD;R_zru*+1kjX?FpTpgy!1#=Gw^S zq=b`6v& z#d6tlJY`yv;#5li+BB^+0DUfTbmN3=Jb7difip`$kbXl>+v zd%~gG1ZI`9YL!mLTdR=NQfHObQnkb)E-R}lwaNfrX>ly!t4b|ZV}W3;8p~HLk;|4c z@)c!OW0AYQY9(UXs>WKXtS(t;AN_6Z2}cYGowW(R+Q^Qi_$GV8esf|k3uZcNkPi!#9e~RK86Th+xyaN+!Bb#ay zTRidmjfvpbA>-ivtXpgYN1Rnlb+T1pimhrDbF4k_kSD%_#HWz$i~hVFR8)N&W@W5RS$#9^#m#1EnAW+d)OkN;gPj!NttW~JgBa^ zs^uD@b_G|p1dw{!QkyJ;sa}O@K_x>x^s+LGW4WAI>5gx(lNd1D5=j{N#IHaVD#V`f z6^QATF5c8FCuzNzu`;KSUOZ`!W8yB)r0wGIUU3F!)|~EAfsC^n)u}vH38VhrsXA>?f5)jy@>D0Cs#A>D zG4U{{a!lA`imP!LC_8rvNcyr%KZrnt@G3ENE*cG)NFaZK37;%Rz~*s!~C z!Y*URZpZi*#1c>3Wt>nUp5*GIzg_jcSK67UKEmq``*I&IpD~NKGqCz~;jS6WT|0`lftIugv-_}#{&vvQK3A_UnOE}e! zyy{q<>MZ!>R9!^1Co+;r6^@BpP2;^_ig@B-v0i<_sXAs*Ge(p`{jWULIWQtm)ovim zTi}s97WlgyliEBJ>pii~#))om+#760n|S2M>?q8BObq*9!)|`dRfC^s+RN`h=+Z=+Z4CUluoQXrcs@Q7%-Y21!4H1i>Lx; zPj(S8z0ws|oy2U3e9v@=gccH;v%Yacvt#1sMkF%fs41?waRSnJn#Ma#aROl(@bB_W zY;sIQk*~%|BZ;4%gTzXw>ZDitEr@}j_AwMf*wQ$07dx>TLTJi>oD0N5D#rIwehRYZ zl|mB!h3H=C`Cdj?snwv3;M zb=<2e0fJ9e;#Pg9Q62NQ0_4uC(5BFiO1xBQ9ewl*0-15xGyxUvHKkXJ!KR6Qlv5+} zsoH(N7u_>)d*k@sLdABV;WYlPY@-zIjJgXXSyjIxrbRrdqA~pqG(*S4J>p5kJ224{ zS8bY9;~2jgf`q&rlQ)ZPvQV-7mQnx6v@}lI?m*i&pcKuGkgG{x1lp|EGzqL}5!Xv0 z#;17o3cb3xUV2oo?s7{XvZ*czeHS1dR`pS*>bzG#!y`1nF4bvxP+e%w98vo{x;Q|1 zHEOaH0*PutCFfB;^Xu*|YZ3{AXW|}EMFNJ_3Q-JpbnePsDVHIstGWO0Oap|$R4-d8 zuc8@+t!f1ZL08ohOapYX<+)YMnGR!OXKlRA^KWJXN8AZtc@mD;5-_^8upEuxTtb^C z{`ZF66>`~%nyZgf!o=fPQo;dG!hU=F5yN1NvtMCKL(`bZBQ$0u^q&v7Py|_-4HJ*5 zrN0{W@^MU1{62F6&4}7*0<+Ja_!S0jLwu(vzD1bNATP`ln2C&hm0Y$my=sZ8YOGdP zRwv^VPbVd`*b|xZ#0F#Hfm&hQti^bm*hv$)MB7ckx5yse?O2IXn5$Z83mLcp35@1d zV+Ayf=__=Y3lYvLL)9vaY%!=UlP%E^Q0OsnpeGN1d4C)kYp`C#p~( zt?e{L?5&NlZ)`Y2-JzI^`nF4TRv1#xxm7=Tr5Fw%y+`v@N4-)Kdnfrz^y)L5n)>;x zbQI__(K%E9AaoSl#S?aU(lN4QMDFV@Xt2X*h2aKWoRbE0p=qGc>6-@p-|XoAcjWz_ z7`54kft!4LB-U~lw(2D)uc3BJ7N>#6mNKbd&;(o53AO4|Eyd02iq-~18s|S z>9HGVEnK+rTvK9b>3jg|6jeMGM7}M`ylseRB`{z;0W0V(o{5jf9u1LGqmndK7+jlK z8{>Rg!${nQnsvcg-)-GtP&To6hva|#&T11C?Z?)V>N_Ov%84&is*L@ZynH4jAF{DJ zC!68wX2}^*z3UUXA!??4=KaHNi@I*w<>${nF!Yh;)TkM`j5sQZR`PFuYDe{eVLi94 zd@E{p17AH~5zcc%((pyXU((fgJZ2h}o;hqtCRHOH zMb+~M-Ev1(_)|SQ9{JmhY-3h)^@kRQaVZ&*z1aUmJn zxgk?)E{*%{HvVyE#5I52diyia4`tT8F4Vy4J6^a>S!o%zGbKLl)N;Ey?j-2v(^jCRG>dWh#L%gdvUSUg?B#B1mPL=*?=9aM)+8mDAKTu664ICBdx#_))`t>rK z@H(DbwW3Bg!75J2f2&)Dnc69r3=_95mux9ssP(cX=w*3XsXqu0W`$P-HL@i(0n;U0 z%*o0yF>%T8YK-WZk80I%2#J+bzRCD+TGv`uY;tJun1ykOS&Wb9%^61hqb{(NsYzU*uoUcYFt09gM9|6EOmqsYH44a1#$rTn^p54dB zi8*1hMF1d?$(BM?G?L^5h`!*pwWpOfAw=JwV8MOblG;~Uw3@z**4`BR03)*DA+-p6 z&`SMI+7w|BLR125E!uG|uMAs=LWoHltiF+94R{zNCM)@yFir?ji5L*Ge#D;s#GH-V zKj;c#WvmqvjT9Jc2vc32g4PQ`2Wia+`kZ*gM97?(k; zxXHzf72{ksv0}W-C00yw`NWEwUDhzgY?m`k@dhJSjCR$F74Nv*5sLR*z6ix$7Za)Y z)a5EtJio(Tr1--QUyVlIu$EA5cOfhqgOAlujBEZRWF)~G& zi%~0P*E+9J+*@0J4NlMYUZZ%Rw(A;&wN^7ov7}Z%NKsmwH%PI();dUWhszMAxYNah z4p)7c0$GIB>9=?pW+%p}hf(cg7_L(p~0LuU%!^t8?XYgON>_syxdP{>55*?W8p_Oj#kuU<7~9B zWaZJ%$d-49A=wqSs=4y2#oDSRHB~EX>?82fcG{=<(T(?JaXuCivAiTqY~$O^wBRHx zp-Df*>n~o6@V1TL-HqvZRT5tQZbYV+$|oGAnVs^3qAKg`swGxOsRheXRi)ahQdd>X zfjiWvg()6pj#v%yzao#}beQAQy!cR3e49P7%||P3ov@&!osnK|%Gm0d(2|!NCOaWtPrb<4A95oKSC?gbKOTF!88qLN$Vo z>)%(Pq*W_G57xAFvL!Y4IsRAk?`Q@()N{y)+5I3)hra>=xiJ&!9hmsU;pK9@@V>s= zL+`1F#k9SWS;;XB?I&E4n9G@}l`-K_ebIUI+mPHfQ}rE-4sx+95ZHAdJ1jn3hZhtT3EWMWMPqYQEB1AQjT)D zqo{<^GTmsp;RbG2rqO6#xRSFj0%GA3^t4-uGVDt&XUc}k*Gyf{F<;9?jC82npk2>( z+3CkaKWq$sjPzrt9}oSou>_+ZJNcKY$q z51U9Z`mxiGhkn?>1fw52{dfkq=tr<)8olxZO4FG1F-rB$7ESaR$%jgDs?4iwG~&mR ziJwRL!)%spMndi~{pW0$S(WdSYAIIIl6TMc>9II6X>J!eO>_5o67FueEDkZ0vvj zUv1aofA+N$r9L{LIhQX_&7b%7LraSu9{T#c8xH55i?wSoBzxnZX z8{TNyuy8Yn4dm!&=;K9%VhLUWG0xAn)|e)t8Dc%j+gN@qejir5vDWTMz{_Zd&@PyR z7%6G~Dr>BO(xknZ(>dg=O0j9*izjcm@o-xrwDO#1bc6krUY@H&P-9H;zXeW0LZQz#fz&% zb4z8I#>gtN&z7yxi0FtL5&Ua3u%Wm=71`;-GwlViJ}QNw^Jv(#w>M;S%49(j+wg3v#+{hbx)P2JbAW9t*b7-W{|GiYR^o0#J(+Mo;kd$JX59fA+l8NNLh99@F^yTk&hM`){PcvB=?L}?vood6`$+1Lm8u{X>XK`z{c)D1kMV8 zXL)SgP-a&Q>pHH5iBV2op4{<$(&!u<5+#IEa-GX0wm%K^^LjFbZpf5o=Zs;^H&DG# zt!0!Ola&m0U#3M1=NCOVzj%?E)cO6J=E&?o@0LIqgLsf`j(+gqHZ!yu%P6XGS=k+> z=F+9$-(+S@xM*-igT$`RGMBq$FX@dw@yr@@ASu%{-R|gN@<*%+pcx2lJE6@YwATsk zE<(G3(5?Ym7oph*t%=YI2<>e`yO+>L656$tS_IJCgm#qBN(t?6g!TZT-AHJIC^bT3 zU|@T21?+IEn+WY&LR&&;;|VREQd1Fagtnc~4inl5LR(H~69_GVQX@1Qp*0cOQ9}EH z&{h%JBtlE1)L_+nvYXJ3652UJ`~Keq zRgRt^^HN3(GO{P+2^lSDwBl=Ji8gHy!U8MrJ@5m#AbTWb;gQuyn{#pH(xNZ{;= zG)+6~`AgDqM~1DFdrkbRYDeUh!H3ydG%mzd-s}=vOh;wQn132)$z~=@TW(mBea*FZ zCCrI?ZgRc2Sv6#Wvy*>K{F>^u$lC_DVl>&9kh>hC$(^!)R=$cg@onP!T#jnhLc7Xp zS1qYkmDZ}3*Q(0Qjf|ocTBu<{BHLbcx*J{#seys(o>1-MN8Dbk%Bxk)^r&Xls_wFn zm~B_xTdSH=t9qbT#n-CxYgGlcs`<4lORZ`_?TA%&)gzt}kJYN&c2$F2)l{q6XIC}X zs`l5aT544XYE|A^)gh1Sut)W&N7d?49r38zJgToeDxbO0dhIfIiT1!Y)vn0Kdk%Zv zF{iJ~(5`{M)t*tTJ{?_8#+ivh z1~5o8>@^~Z1sP!0KAuQ*f(#_}P$P5gGH5Qjx2d*8if13T?=ri@8Md(_Y7H_?0$*xS zlxozaoI36R4(t`r+^{k)a#fvURh{_ZI>*Cx;z#NnkJO1Dt#dqDCw{EX@mQUBb)92% zo!D9DaMp=8);TunBQ~|_-^fYuHCCE$>hvX2Nw3{oZ`Mb=jgsowfsnlsolN}Lt#%zv zB%%^#mpTu6a%2St*$#tjL7wco8M0wBWY^D->1N0t%99o6$x8BMDKlilXUJ|a%0}!o zJ2!w}gry}pPAN4pN={4^S;>m5|iFphTw6ljHV#|Q-hSn&t zL~hh;#Zlp2pVABK(6_)yx7(H_dCXG9Z?PSJu6^*u+QB*or;qst!|Zcy${N?*l};wy z>0b1{w$rQ}Dq8@L1rC}H{#<6En4iSud>m2d5YjJJ} z0gczZ=~E0i*k0+Tkmt4XH)EE3Gi+)_`TM(V>W*^5s8;d#Bxl5BW`6h^_Q$j9F4<#8 zr#m$g#~5y4eK(FyPhuiKY~Gq1I-WC+Xc%(6P*8pZ5@SCKIYkC>OcOa(M#|sNZst(d)Gln%#yeo5-t&*EMB8xPH7n!dfgbUeqVT`Ip#H=8Pb z(B^xjB@yq=*KY8-BNPnkw|XG#R=4g3cjD@p7Ty#yGUkDTrga5n8znc+{3dK{DJzcY z5;;UtJ;yT+iBzAHK)$o^{yPL zZI5BBPxQH0DbL8aahQ6|V@6fqvbo|GSpLt2<$rDUt=r<>j4J)u8}~QZR%Q16ajNxE zE^Ws~yBX&m@><(u%?qD2yX(oIxlHVpWmd$-XqUIz(xiu$mAGbc6J7=$#b#Amj z>M!U?$Ir;zxE^hqwV6-Ft{$}$eS!qA=Dazbp5_W4UL5WBgd zxxhwbHE(1)#O=|?{Lk!9C=H(}CvF>>Vq*Eyk9|WY&Kw%eNWYn)5k1Q77ClzL)6vFy z9Bu6Bj)E9y9eSLPrP9Mfaph=@gWt_=j2Y9+Xx^60(|cLh0IfXVHs1^$jO?Bwt;7jx zn(Vt=MA%fEgeh(tG3mXF?~&>%H_rhItQ^(!(xbePqiqyh#;dQ-J^OmT@)lG-7z zO?V(#U_C0}{xQ{xI=4K`1{>+s3e59s*jPzpHVplKf+sX%RQXH*hS1lWZ ze$1lJHzY$Szv&tm=sY7HGpRSro*a~ex5d|0Pu5hr)RN4*p!SZ2=eh

        u@ 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

        XVQwze1t$y<% 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 z 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

        9l+KL?*Xh|;Lmxd+9llK!VaqwUzyf%fXkRD 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 z%0D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

        d9@10fXnE=D3>fO${i0cuXcK9QSPK~J=i?B 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%0Af0Q^Ef&U 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

  2. sXM| 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 z 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

hXnLO;>W3NxA6QBeV|jvz~_ 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 z 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

O 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¨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%0AH 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 z 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

- WebP decoder in JavaScript, using libwebp compiled with - Emscripten. -