Commit Graph

1883 Commits

Author SHA1 Message Date
Kim Woelders 58f2fcb4c7 scaling: Correct scaling up
When scaling up it worked like there was a 1 pixel border right and
bottom.

This change may affect applications that rely on the old behavior.
Setting the environment variable IMLIB2_LEGACY_SCALING to any value will
make imlib2 use the old algorithm.

When using e16 with the new (default) algorithm a few themes have
incorrectly rendered elements (unintended window border fading, opaque
pager highligt frame, more?).

Hopefully this change should go mostly unnoticed but if it turns out it
causes grief the default will probably have to be changed back.
2023-06-24 17:32:05 +02:00
Kim Woelders a72fe3796b scaling: Minor refactoring 2023-06-24 17:01:15 +02:00
Kim Woelders 166de6a93e scaling: Cosmetics 2023-06-24 17:00:21 +02:00
Kim Woelders ee61df6877 scaling: Change ypoints[] from pointers to indices
Now the calculation of ypoints[] and xpoints[] can be done by the same
function and we can avoid some essentially duplicated code.
May be slightly less optimal although I doubt it makes any significant
difference.
2023-06-24 16:58:42 +02:00
Kim Woelders eafaa11ff3 scaling: Simplify scaling points calculation (eliminate j) 2023-06-24 16:58:42 +02:00
Kim Woelders a75fc4c5c8 scaling: Cosmetics (comments) 2023-06-24 16:57:56 +02:00
Kim Woelders 61a180f3b0 scaling: Move scaling function call sequence into common __imlib_Scale() 2023-06-24 09:42:58 +02:00
Kim Woelders 5c0c98428d scaling: Correct scaleinfo array length
The +1 length may have been used in the old OLD_SCALE_DOWN case.
2023-06-24 09:42:58 +02:00
Kim Woelders 41a6517319 scaling: Unifdef OLD_SCALE_DOWN
And adjust some comments.
2023-06-24 09:42:58 +02:00
Kim Woelders fea92d74b5 test_scale: Test scaling some more 2023-06-24 09:42:58 +02:00
NRK f8bb5eb256 test_load: allow y4m memory loading
the new y4m loader can load from memory.
2023-06-22 19:49:27 +02:00
NRK 336e9374ff Y4M loader: use custom y4m parser
avoid dependency on liby4m, which has some quality issues and isn't
available on any distros according to repology.

additionally, the new loader now supports:

* loading from memory
* multi-frame images
* mono colourspace y4m images

Fixes: #13
2023-06-21 17:49:20 +02:00
Kim Woelders 38b422b8de test: Add basic qoi checks 2023-06-20 13:59:55 +02:00
NRK bb53bcfb9d loading: check for alloc failure
free(NULL) is no-op, so goto bail works here.
2023-06-20 13:55:12 +02:00
NRK 3dfef024c9 loading: add some debug logs 2023-06-20 13:55:12 +02:00
Kim Woelders 36c1daef60 TGA loader: Fix TGA v2.0 signature check
With normal struct padding the footer pointer was not calculated correctly.
Now also checking the last two bytes ('.', '\0').
2023-06-20 10:56:06 +02:00
Kim Woelders 924bf0c527 Loaders: Static constify some data that may as well be 2023-06-18 07:12:51 +02:00
NRK 28d9c6b7d2 Y4M loader: check file size before magic check 2023-06-18 07:02:10 +02:00
NRK 29d3204a16 QOI loader: use memcmp for magic and endmarker check
original code didn't use memcmp to avoid libc, but that shouldn't be an
issue in imlib2.
2023-06-16 06:41:36 +02:00
NRK 3bcd40dd16 QOI loader: fix build on non-gnu compilers 2023-06-16 06:37:52 +02:00
Kim Woelders bcf88d4431 QOI loader: Add progress calback, indent, cosmetics 2023-06-15 23:03:52 +02:00
NRK 285dc8bd05 add a new QOI decoder 2023-06-15 23:03:52 +02:00
Kim Woelders 16496a3cb2 autofoo: Don't check for freetype if we are building without text
#11
2023-05-23 09:46:09 +02:00
Kim Woelders 4b4f72c7ff HEIF loader: Call heif_[de]init() on loader load/unload
Seems to be required as of libheif-1.16.

Note - Running the tests with valgrind shows no problems, but with asan
enabled I get a bunch of messages like:

Direct leak of 8 byte(s) in 1 object(s) allocated from:
    #0 0x7f186d98ee38 in operator new(unsigned long) (/lib64/libasan.so.8+0xd9e38) (BuildId: bac59ca9f1e357781008d7f6982314d30ca62672)
    #1 0x7f186c4acec9 in ColorConversionPipeline::init_ops() [clone .part.0] (/lib64/libheif.so.1+0x6fec9) (BuildId: 2823b8c3a24fbf4262672d27ed3bf5a338d185b5)
    #2 0x7f186c4a2dec in heif_init (/lib64/libheif.so.1+0x65dec) (BuildId: 2823b8c3a24fbf4262672d27ed3bf5a338d185b5)
    #3 0x7f186d824d4e in __imlib_ProduceLoader ../../../../src/lib/loaders.c:209
2023-05-20 08:42:05 +02:00
Kim Woelders 875faa3fdc loading: Enable calling function on loader load/unload 2023-05-20 08:42:05 +02:00
Kim Woelders e9de0b1d38 test: Fix pr_info() when not printing to stdout 2023-05-20 08:42:05 +02:00
Kim Woelders 3a9084a7e9 imlib2_conv: Add option to time save operations 2023-05-20 08:42:05 +02:00
Kim Woelders 3adb01befd imlib2_load: Move time_us() to separate file 2023-05-20 08:42:05 +02:00
NRK 4f928f53a7 WEBP saver: allow lossless and respect compression tag
this treats quality == 100 as lossless similar to some other savers.

in case of lossless encoding, compression is derived from "quality" if
compression_tag was not set. in case of lossy encoding, the default is
used when compression_tag isn't set.

additionally, this fixes a bug in the older saver where fwrite might
have been called with a null fdata (which is UB) in case of an error.
2023-05-12 16:21:35 +02:00
Kim Woelders 8a36ae6d8d loaders: Use common function to print error messages
Also:
- gif  loader: Add error about corrupt frame sequence
- tiff loader: Drop OOM message - Not done elsewhere
- webp loader: Drop messages about quality tag outside [0-100] -
               Not done elsewhere
2023-05-08 18:52:57 +02:00
Kim Woelders 11cef49cef Introduce __imlib_perror() to produce error messages 2023-05-08 18:52:57 +02:00
Kim Woelders c44f3a4124 GIF loader: Enable showing animated images even if truncated 2023-05-06 20:59:03 +02:00
Kim Woelders d1d95fb2b1 imlib2_view: Avoid potential use of uninitialized data 2023-05-06 20:59:03 +02:00
Kim Woelders 5d73c53640 v1.11.1 2023-05-01 11:20:27 +02:00
Kim Woelders 41c792bd7e loaders: Cosmetics
- Add missing const
- Consistently use imdata for pointer into imlib image data
- Minor changes
2023-05-01 11:19:24 +02:00
Kim Woelders a55f36133d Add JXL saver
#9
2023-04-30 20:02:15 +02:00
Kim Woelders 9468f7132c loaders: Change method used to not unload loaders
It appears that in certain environments (homebrew on MacOS) the linker
does not like the -z nodelete option, so handle this differently.

#8
2023-04-04 20:53:49 +02:00
Kim Woelders 7c18c9aca1 loaders: Fix loaders potentially being loaded more than once
A new loader instance was created every time it was attempted to save
an image with a loader that doesn't have a save() function.
2023-04-04 20:53:33 +02:00
Kim Woelders adba3ecd0c XPM loader: Add rgb.txt
No longer rely on it being provided by X11.

rgb.txt is copied from https://gitlab.freedesktop.org/xorg/app/rgb
2023-03-23 06:24:31 +01:00
Kim Woelders eb513bc0d0 autofoo: Tweak PACKAGE_DATA_DIR definition 2023-03-23 06:24:31 +01:00
Kim Woelders 6a1bcc2ab7 modules: Drop some disabled code 2023-03-23 06:24:31 +01:00
Kim Woelders 21af0e5a95 test: Print some progress info in a couple of tests 2023-03-21 18:42:16 +01:00
Kim Woelders a83de2e244 test_load: Add some y4m checks 2023-03-21 06:56:47 +01:00
Kim Woelders 5bf590ae7b test_load: Add some missing ifdefs 2023-03-21 06:56:47 +01:00
Kim Woelders 32901e3bab Y4M loader: Various minor changes
- configure.ac: Alphabetic order
- Makefile.am: Alphabetic order, no need for nodelete
- loaders.c: Add to known loaders
- loader_y4m.c: Remove some unneeded headers
2023-03-21 06:48:53 +01:00
Chema Gonzalez 7eda43371a imlib2: add y4m test examples
Prepared using:
```
$ ffmpeg -i test/images/icon-64.png -pix_fmt yuv420p test/images/icon-64.yuv420p.y4m
...
$ ffmpeg -i test/images/icon-64.png -pix_fmt yuv422p test/images/icon-64.yuv422p.y4m
...
$ ffmpeg -i test/images/icon-64.png -pix_fmt yuv444p test/images/icon-64.yuv444p.y4m
...
```

Tested:
(1) correct y4m files
```
$ LD_LIBRARY_PATH=~/proj/imlib2/src/lib/.libs/:${LD_LIBRARY_PATH} IMLIB2_MODULE_PATH=~/proj/imlib2/src/modules/loaders/.libs/ valgrind --leak-check=yes /bin/feh ~/proj/imlib2/test/images/icon-*y4m
==391567== Memcheck, a memory error detector
==391567== Copyright (C) 2002-2022, and GNU GPL'd, by Julian Seward et al.
==391567== Using Valgrind-3.20.0 and LibVEX; rerun with -h for copyright info
==391567== Command: /bin/feh /home/chemag/proj/imlib2/test/images/icon-64.yuv420p.y4m /home/chemag/proj/imlib2/test/images/icon-64.yuv422p.y4m /home/chemag/proj/imlib2/test/images/icon-64.yuv444p.y4m
==391567==
==391567==
==391567== HEAP SUMMARY:
==391567==     in use at exit: 297,719 bytes in 1,018 blocks
==391567==   total heap usage: 5,151 allocs, 4,133 frees, 871,023 bytes allocated
==391567==
==391567== LEAK SUMMARY:
==391567==    definitely lost: 0 bytes in 0 blocks
==391567==    indirectly lost: 0 bytes in 0 blocks
==391567==      possibly lost: 0 bytes in 0 blocks
==391567==    still reachable: 295,703 bytes in 997 blocks
==391567==         suppressed: 0 bytes in 0 blocks
==391567== Reachable blocks (those to which a pointer was found) are not shown.
==391567== To see them, rerun with: --leak-check=full --show-leak-kinds=all
==391567==
==391567== For lists of detected and suppressed errors, rerun with: -s
==391567== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
```

(2) broken y4m file
Prepared by copying test/images/icon-64.yuv420p.y4m and replacing the "C420jpeg" item in the first line with "Cfoo" (invalid color space).

```
$ LD_LIBRARY_PATH=~/proj/imlib2/src/lib/.libs/:${LD_LIBRARY_PATH} IMLIB2_MODULE_PATH=~/proj/imlib2/src/modules/loaders/.libs/ valgrind --leak-check=yes /bin/feh ~/proj/imlib2/icon-64.yuv420p.y4m
==391699== Memcheck, a memory error detector
==391699== Copyright (C) 2002-2022, and GNU GPL'd, by Julian Seward et al.
==391699== Using Valgrind-3.20.0 and LibVEX; rerun with -h for copyright info
==391699== Command: /bin/feh /home/chemag/proj/imlib2/icon-64.yuv420p.y4m
==391699==
liby4m: Unrecognized colourspace foo
liby4m: Unable to read file's parameter list
liby4m: Failed to parse file header
***** Imlib2 Developer Warning ***** :
  This program is calling the Imlib call:

  imlib_image_set_changes_on_disk();

  With the parameter:

  image

  being NULL. Please fix your program.
***** Imlib2 Developer Warning ***** :
  This program is calling the Imlib call:

  imlib_image_get_width();

  With the parameter:

  image

  being NULL. Please fix your program.
***** Imlib2 Developer Warning ***** :
  This program is calling the Imlib call:

  imlib_image_get_height();

  With the parameter:

  image

  being NULL. Please fix your program.
X Error of failed request:  BadValue (integer parameter out of range for operation)
  Major opcode of failed request:  1 (X_CreateWindow)
  Value in failed request:  0x0
  Serial number of failed request:  15
  Current serial number in output stream:  16
==391699==
==391699== HEAP SUMMARY:
==391699==     in use at exit: 303,880 bytes in 2,116 blocks
==391699==   total heap usage: 3,405 allocs, 1,289 frees, 670,313 bytes allocated
==391699==
==391699== LEAK SUMMARY:
==391699==    definitely lost: 0 bytes in 0 blocks
==391699==    indirectly lost: 0 bytes in 0 blocks
==391699==      possibly lost: 0 bytes in 0 blocks
==391699==    still reachable: 301,864 bytes in 2,095 blocks
==391699==         suppressed: 0 bytes in 0 blocks
==391699== Reachable blocks (those to which a pointer was found) are not shown.
==391699== To see them, rerun with: --leak-check=full --show-leak-kinds=all
==391699==
==391699== For lists of detected and suppressed errors, rerun with: -s
==391699== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
```
2023-03-21 06:48:53 +01:00
Chema Gonzalez be721b0335 imlib2: added loader for y4m files (uses liby4m and libyuv)
Implemented just `_load()` for now.

Summary:

Implements a loader for y4m images. Uses liby4m and libyuv.
Only implements the `_load()` function as of now

Tested:

```
$ ./configure
...
Configuration Options Summary:

Image loaders:
 Regular image loaders
  GIF.....................: yes
  HEIF....................: yes
  Y4M.....................: yes
...

$ make -j
...

$ sudo make install
...

$ feh image.y4m
-- image shows up
```

Tested with yuv420p, yuv422p, and yuv444p images.
2023-03-21 06:48:53 +01:00
Kim Woelders 531a053d11 HEIF loader: Add some debug 2023-03-21 06:48:53 +01:00
Kim Woelders d13bd60cc4 autofoo: More CLEANFILES 2023-03-21 06:22:54 +01:00
Kim Woelders 251172573d v1.11.0 2023-03-09 18:29:40 +01:00