|
|
veluca
|
2022-05-17 11:26:16
|
it has only 2 nonzeros
|
|
2022-05-17 11:26:36
|
that *has* to have been deliberate
|
|
|
|
dds
|
2022-05-17 11:26:42
|
yes, it's from the 3x3
|
|
|
|
veluca
|
2022-05-17 11:26:47
|
yep
|
|
2022-05-17 11:27:26
|
what I mean is: 0/1/4 are the only rows that touch the 3x3, and 2 make sense, so the 3rd one can't have been hand-picked
|
|
|
|
dds
|
2022-05-17 11:27:51
|
the order of the rows doesn't make sense to me! if you had that 0/1/4 together earlier then the normalisation step would need to do less
|
|
|
|
veluca
|
2022-05-17 11:27:53
|
rather we probably chose various candidates for things that make sense for the other two and picked whatever was left for the 3rd
|
|
2022-05-17 11:28:27
|
I think it's such that in a 4x4 order the two weird pixels are still in pos [0, 1] and [1, 0]
|
|
|
|
dds
|
2022-05-17 11:30:27
|
it's a bit of a shame really
|
|
2022-05-17 11:33:33
|
hand-wavingly, normalisation makes writing a 'fast AFV' implementation more cumbersome, e.g. if you do it by using the structure of the matrix i posted, then multiply by the triangular normalisation matrix. So the fewer off-diagonal entries in the normalisation matrix the better
|
|
|
|
veluca
|
2022-05-17 11:34:27
|
well, permuting rows is very cheap, at least ๐
|
|
|
|
dds
|
2022-05-17 11:37:57
|
actually scratch what I said - it makes no difference as most of the rows are mutually orthogonal anyway. There are only 3 off-diagonal entries when you normalise, which is not a great hardship
|
|
|
|
veluca
|
2022-05-17 11:38:29
|
well, all of the rows are, no? (at least as written in the spec)
|
|
2022-05-17 11:38:48
|
but yeah, you probably can factor the 13x13 part
|
|
|
|
dds
|
2022-05-17 11:41:21
|
i meant pre-normalisation, which is where the structure is - e.g. see both versions of row 5 a few comments ago
|
|
2022-05-17 11:41:55
|
factoring the 13x13 is how i originally found the butterflies / things I thought were sub-transforms to begin with
|
|
2022-05-17 11:44:00
|
less importantly, did you consider doing a graph transform for the whole 8x8 block, rather than a 4x4?
|
|
|
|
veluca
|
2022-05-17 11:44:12
|
consider, yes
|
|
2022-05-17 11:44:23
|
but IIRC we decided it was going to be too slow
|
|
2022-05-17 11:44:40
|
although admittedly we could have implemented it in less than quadratic ๐
|
|
2022-05-17 11:45:22
|
(I'm not sure if a butterfly-ized 4x4 transform would be meaningfully faster than the one we now have)
|
|
|
|
dds
|
2022-05-17 11:48:35
|
i think i'm more sure....! are you trying to incite me to write code? ๐
|
|
2022-05-17 11:48:54
|
c'mon, you're doing a schoolbook matrix multiply which includes multiplies by zero
|
|
|
|
veluca
|
2022-05-17 11:51:00
|
yup but it's SIMDfied and very pipeline-able
|
|
2022-05-17 11:51:12
|
IDK
|
|
2022-05-17 11:51:24
|
I never tried ๐ it's not a significant fraction of the running time anyway
|
|
|
Traneptora
|
2022-05-19 12:31:21
|
What's the status on: https://github.com/libjxl/libjxl/pull/1366
|
|
|
novomesk
|
2022-05-22 08:21:32
|
MSYS2 developer needs help to review his patch for static build:
https://github.com/msys2/MINGW-packages/issues/11697#issuecomment-1133898272
|
|
|
w
|
2022-05-24 05:10:49
|
any 0 duration animated should only be outputting 1 image right?
jxldecoder api only gives 1 image but djxl makes an apng
|
|
|
_wb_
|
2022-05-24 05:13:14
|
coalesced decoding should give only 1 frame, non-coalesced decoding should give all layers
|
|
|
w
|
2022-05-24 05:19:18
|
how would i make it so djxl only makes 1 frame png
|
|
|
_wb_
|
2022-05-24 05:22:53
|
Could be that djxl is a bit buggy and doesn't do the right thing
|
|
|
w
|
|
Traneptora
|
2022-05-24 02:33:30
|
in theory you could always interpret an APNG just as a PNG though, since PNG is forwards compatible, right?
|
|
|
ziemek.z
|
2022-05-24 08:18:35
|
Here's a GIF from Samsung's Smart Select (thanks <@770059673583484928> for attaching it below with Nitro!)
Encode it. Losslessly, lossily, it doesn't matter.
Open the resulting JXL file with GIMP. Everything's OK, right?
But now try opening it with Chrome or Windows Gallery via jxl-winthumb. Well... technically it will work, but watch the animation go nuts in Chrome or view those borked frames individually in Windows Gallery.
Oh, and I almost forgot: try decoding that JXL back to GIF or even to APNG or WebP. GOOD LUCK.
|
|
|
Cool Doggo
|
|
ziemek.z
Here's a GIF from Samsung's Smart Select (thanks <@770059673583484928> for attaching it below with Nitro!)
Encode it. Losslessly, lossily, it doesn't matter.
Open the resulting JXL file with GIMP. Everything's OK, right?
But now try opening it with Chrome or Windows Gallery via jxl-winthumb. Well... technically it will work, but watch the animation go nuts in Chrome or view those borked frames individually in Windows Gallery.
Oh, and I almost forgot: try decoding that JXL back to GIF or even to APNG or WebP. GOOD LUCK.
|
|
2022-05-24 08:26:38
|
|
|
|
_wb_
|
2022-05-24 08:56:50
|
I suppose the implementation of animated jxl could use some more love
|
|
2022-05-24 09:00:24
|
It's just not very appealing to work much on that - it's almost always better to use video codecs than animated image codecs, so it's a somewhat pointless exercise. We don't really want to replace GIF with JXL...
|
|
2022-05-24 09:01:41
|
I mean, GIF is still a thing because it's pretty much supported by anything in the world, being that old. But if you're willing to give up that level of interoperability, you can just as well use av1 or whatever.
|
|
|
ziemek.z
|
2022-05-24 10:36:59
|
I just wanted to be consistent and have *everything* from my screenshot collection (23,318 PNGs + 3,423 JPGs + 5 GIFs) on my backup DVD in JPEG XL. Thankfully I can count all GIFs on the fingers of one hand (literally), so that's not a problem โ I just didn't include them in the backup.
|
|
|
w
|
2022-05-24 11:20:01
|
djxl makes the n layer 0 duration jxl an apng with n frames and some default minimum duration which I assume is wrong
|
|
|
ziemek.z
|
|
ziemek.z
Failing pipelines are: `arm-linux-gnueabihf`, `aarch64-linux-gnu` (both normal and lowprecision), `vcpkg / x64-windows-static`, `vcpkg / x86-windows-static`.
|
|
2022-05-28 12:58:04
|
OH COME ON, VCPKG STILL FAILS
|
|
|
|
veluca
|
2022-05-28 01:12:22
|
with msvc22?
|
|
2022-05-28 01:12:52
|
or do you mean the gh pipeline?
|
|
|
ziemek.z
|
|
veluca
or do you mean the gh pipeline?
|
|
2022-05-28 01:44:19
|
Yes, the latest commit
|
|
2022-05-28 01:47:32
|
Try running the pipeline in your fork
|
|
|
yurume
|
2022-06-01 04:15:45
|
is it possible to disable the palette transform in cjxl? I tried `--palette=0` but it didn't work.
|
|
|
_wb_
|
2022-06-01 05:03:14
|
Try --palette=0 -X 0 -Y 0
|
|
2022-06-01 05:03:39
|
Otherwise it might still do channel palette
|
|
|
|
chafey
|
2022-06-02 07:28:13
|
Has the experimental/fast_lossless been integrated into libjxl yet? if not, is there a plan?
|
|
|
_wb_
|
2022-06-02 08:09:44
|
Probably post 1.0
|
|
2022-06-02 08:10:50
|
Since it requires a totally different code path, which seems to be a bit risky to add at this point if we want to stabilize things...
|
|
2022-06-02 08:11:28
|
But yes, at some point I want the fastest lossless encode settings to do that
|
|
|
Smily
|
2022-06-09 04:22:43
|
Hi! jpeg xl looks really cool, so I've been trying to see if I could use it for a hobby Golang project.
Any idea how feasible that would be?
The ideal solution would be transpiling libjxl into Go with ccgo or cxgo, but maybe that's crazy talk. On the other hand, the transpiled sqlite I've been using works great.
Less ideally a cgo wrapper wiuld make sense, or even just calling cjxl directly, but there's probably more overhead to those approaches ๐ค
|
|
|
|
veluca
|
2022-06-09 04:25:21
|
depending on what you want to do I'd consider just writing a oneshot encoding/decoding in C/C++ and wrapping those
|
|
2022-06-09 04:25:37
|
if you need more fine-grained interactions that could be hard
|
|
2022-06-09 04:25:45
|
transpiling is ... probably not an option
|
|
2022-06-09 04:26:07
|
(happy to be shown otherwise though)
|
|
|
Smily
|
2022-06-09 04:58:36
|
I was thinking of generating thumbnails for a photo gallery / google photos style application.
The idea was to generate e.g. a 1024px or 512px progressive JPEG XL, split it up by the ... progressive uhh boundaries / checkpoints (FF0A in regular jpeg?), and store each of these "levels" next to each other in a sqlite database with an index.
Compared to just e.g. generating 5 separate thumbnail files on the file system as you would normally do, my hypothesis is that it would
1) take up way less space as only one full image would need to be stored,
2) be faster to read for smaller thumbnail sizes as sqlite would do fewer syscalls than reading separate files,
3) be faster to generate due to 1), and
4) be really cool ๐
|
|
2022-06-09 04:59:44
|
This hinges a bit on jxl operations not having a lot of overhead, which is why integrating as directly as possible is probably a good idea ๐
|
|
|
|
veluca
|
2022-06-09 05:10:07
|
I think you're best off writing a couple of specific c wrappers that would allow you to just do ~5 calls for each operation
|
|
2022-06-09 05:11:10
|
(also I had experiences with DBs-as-a-filesystem and i can say I strongly recommend against doing it but up to you :P)
|
|
|
Smily
|
2022-06-09 05:12:36
|
Yeah I might try that first and then fall back to just calling cjxl if I find I'm fighting C compilers too much ๐
|
|
|
veluca
(also I had experiences with DBs-as-a-filesystem and i can say I strongly recommend against doing it but up to you :P)
|
|
2022-06-09 05:13:54
|
It's a hobby project, so the worst that can happen is that I waste some time and learn a lesson ๐
|
|
|
|
veluca
|
2022-06-09 05:14:44
|
Fair enough, fair enough ;)
|
|
|
Smily
|
2022-06-09 05:14:49
|
Banking on this https://www.sqlite.org/fasterthanfs.html
|
|
2022-06-09 05:26:52
|
Thanks for the help! ๐
|
|
|
Pashi
|
2022-06-10 03:19:20
|
For some reason cjxl cannot read a jxl o_O
|
|
2022-06-10 03:21:15
|
Do I really have to decode it into a different format with djxl first before I reencode it? Isnโt that dumb? What if I want to transcode a lossless image to a lossy one? And the source is jxl? Why would libjxl tools not be smart enough to decode a jxl image? 0_o
|
|
|
_wb_
|
2022-06-10 04:42:29
|
cjpeg also doesn't take jpeg input, and cwebp doesn't take webp input
|
|
|
BlueSwordM
|
|
_wb_
cjpeg also doesn't take jpeg input, and cwebp doesn't take webp input
|
|
2022-06-10 05:11:01
|
Actually, mozjpeg can take a JPEG input just fine, and CWebP can take a WebP input just fine ๐
cwebp: `Supported input formats:
WebP, JPEG, PNG, PNM (PGM, PPM, PAM), TIFF`
|
|
2022-06-10 05:11:32
|
So yeah, I do think cjxl should support JXL input ๐
|
|
|
_wb_
|
2022-06-10 05:13:48
|
Ok, but what should it do with it?
|
|
2022-06-10 05:14:08
|
Decode to pixels? Transcode losslessly?
|
|
2022-06-10 05:14:51
|
We don't have code yet to do lossless transcode jpegtran style
|
|
|
BlueSwordM
|
|
_wb_
Decode to pixels? Transcode losslessly?
|
|
2022-06-10 05:17:45
|
Decode to pixels, that's perfectly fine ๐
|
|
2022-06-10 05:18:25
|
Just add that: "JXL input is supported, but lossless transcoding of JXL to JXL is currently not supported", or something similar.
|
|
|
Pashi
|
2022-06-10 02:11:38
|
If someone wants to transcode a lossless image to a lossy one. They should not have to convert the image to another format first...
|
|
2022-06-10 02:12:23
|
Just makes no sense... regardless of what others are doing...
|
|
2022-06-10 02:13:53
|
"X behaves like that too" doesnโt change at all the fact that it's ridiculous
|
|
2022-06-10 02:15:02
|
Can webp even do lossless?
|
|
2022-06-10 02:16:10
|
I don't really have an opinion on whether cjxl should have a webp decoder or not.
|
|
2022-06-10 02:16:31
|
But you would expect it to be able to decode its own format...
|
|
2022-06-10 02:17:05
|
It already has a jxl decoder but it isnโt smart enough to use it.
|
|
2022-06-10 02:18:36
|
Especially with the minimal generation loss being one of its touted features, it's surprising that you have to first turn it into another intermediate format before reencoding like png or ppm
|
|
|
_wb_
|
2022-06-10 02:28:04
|
I'm not opposing this, but please note that cjxl/djxl are just example applications. Eventually, most jxl encoding would not happen using these tools, but directly in whatever application you are using (which probably still uses libjxl behind the scenes, of course)
|
|
|
|
JendaLinda
|
2022-06-10 03:05:21
|
Command line tools will be always useful. Most applications probably won't be exposing more advanced features.
|
|
|
diskorduser
|
2022-06-10 03:16:06
|
Isn't image magick enough?
|
|
|
Pashi
|
2022-06-10 04:35:34
|
Agreed wb and arun
|
|
2022-06-10 04:35:52
|
Also I hear graphicsmagick is maybe better than imagemagick
|
|
2022-06-10 04:37:00
|
It's not a big dealio but it is mildly annoying and bizarre
|
|
2022-06-10 04:38:09
|
Also is cjxl_ng any good? Can that accept jxl input?
|
|
|
_wb_
|
2022-06-10 05:31:41
|
The _ng tools use the api, the current/old tools were made before the api existed
|
|
2022-06-10 05:31:55
|
Eventually cjxl_ng should become cjxl
|
|
|
|
JendaLinda
|
2022-06-10 05:43:48
|
Imagemagick is so overwhelming. In my experience, simple programs built for the task often do a better job (or provide more precise control) than complex programs that are trying to do everything.
|
|
2022-06-10 05:44:44
|
Does cjxl_ng support lossless compression? I was unable to make it working. Or am I doing something wrong?
|
|
2022-06-10 05:46:27
|
"-distance 0" did a lossy compression and "-distanec 0 - modular" produced a very big file, bigger than the original PNG
|
|
|
_wb_
|
2022-06-10 05:48:03
|
Hm, that's not right. Maybe file a bug report
|
|
|
|
JendaLinda
|
2022-06-10 05:59:18
|
A little correction. If I use only either "-distance 0" or "-quality 100", cjxl_ng won't produce any file.
I'm using the version from package v0.7.0 ab775e2
|
|
|
Pashi
|
2022-06-10 06:27:28
|
I noticed there hasnโt been a release in some time so I have been using git. I hope jxl or something that builds on jxl takes over the world soon. Would be nice to have our phones use it instead of heif
|
|
|
BlueSwordM
|
|
Pashi
I noticed there hasnโt been a release in some time so I have been using git. I hope jxl or something that builds on jxl takes over the world soon. Would be nice to have our phones use it instead of heif
|
|
2022-06-10 06:32:46
|
Anyway, if you don't care too much about lossless JPEG transcoding and animation, you can use ffmpeg directly to transcode JXL to JXL ๐
|
|
|
Pashi
|
2022-06-10 06:39:40
|
Are there any good tools for windows I can recommend to people for transcoding and compacting their images with JXL?
|
|
|
diskorduser
|
2022-06-10 07:59:45
|
Xnconvert
|
|
|
Pashi
|
2022-06-11 01:07:46
|
Seems pretty cool.
|
|
2022-06-11 01:11:35
|
What is the next usecase that libjxl will be further optimized for?
|
|
2022-06-12 11:31:22
|
How come the Windows builds do not include the actual shared lib .dll but only has the "example programs?" That's kind of weird for a library to not actually have the library.
|
|
2022-06-12 12:12:12
|
Also for some reason cheetah is giving me smallest files.
|
|
2022-06-12 12:41:31
|
Is there any situation where the default effort level 7 produces smaller files than the faster level 4?
|
|
2022-06-12 12:42:26
|
Level 4 seems to produce the same quality as higher levels at a much smaller filesize
|
|
|
yurume
|
2022-06-12 01:14:38
|
it is definitely possible, mostly because that effort level is not what people normally think of
|
|
|
fab
|
2022-06-12 01:20:55
|
cjxl is not updated
|
|
2022-06-12 01:21:04
|
since 4 months
|
|
2022-06-12 01:21:34
|
no sharpness improvement
|
|
2022-06-12 01:21:57
|
it will be abandoned
|
|
2022-06-12 01:22:20
|
as is not good even fo simple sceenshots
|
|
|
Pashi
|
2022-06-12 01:22:46
|
Ah I see, effort 4:cheetah is a little bit more noticeably blocky in some images. So it's trading filesize for more blockiness.
|
|
|
fab
|
2022-06-12 01:22:48
|
in genal cjxlng with way less effot
|
|
2022-06-12 01:22:59
|
like default is 3
|
|
2022-06-12 01:23:16
|
like cpu 6 aomenc but x2 faster
|
|
2022-06-12 01:23:35
|
the quality is way better
|
|
|
Pashi
|
2022-06-12 01:23:46
|
libjxl is being updated, but apparently not enough for it to have a new "release" in a long time.
|
|
|
fab
|
2022-06-12 01:23:58
|
the image looked from far
|
|
2022-06-12 01:24:11
|
look like they have better bitdepth
|
|
|
Pashi
|
2022-06-12 01:25:11
|
I am using the git version since it seems to have been a long time since the last release. At least, a long time for a piece of experimental software that aims to be the next JPEG.
|
|
|
fab
|
2022-06-12 01:25:33
|
seven month
|
|
|
Pashi
|
2022-06-12 01:25:42
|
New/experimental software like this typically gets new releases often, like dav1d
|
|
|
fab
|
|
Pashi
New/experimental software like this typically gets new releases often, like dav1d
|
|
2022-06-12 01:26:34
|
yes but 0.6.1 is not that good
|
|
|
Pashi
|
2022-06-12 01:27:15
|
I haven't compared 061 with latest git so I can't tell how big the changes are. Apparently not big enough to warrant a release.
|
|
|
fab
|
2022-06-12 01:27:39
|
like at 0.451 0.600 bpp
|
|
|
Cool Doggo
|
|
Pashi
I haven't compared 061 with latest git so I can't tell how big the changes are. Apparently not big enough to warrant a release.
|
|
2022-06-12 01:27:51
|
most of the changes since then don't effect much encoding wise
|
|
|
fab
|
2022-06-12 01:27:52
|
o 0.390 butter
|
|
2022-06-12 01:28:03
|
also ringing
|
|
2022-06-12 01:28:30
|
with xnview the quality at q80 is good
|
|
2022-06-12 01:28:57
|
but jpeg xl in general it tends to produce an heatmap
|
|
2022-06-12 01:29:20
|
and reduce the sharpness
|
|
2022-06-12 01:29:26
|
at least not
|
|
2022-06-12 01:29:55
|
but it gives less hot images if you use nornal effort
|
|
2022-06-12 01:31:16
|
ffmpeg -i input.mp4 output.apng
ffmpeg -i C:\Users\Use\Videos\e\a.mp4 C:\Users\Use\Videos\e\a.apng -f apng output.png
for %i in (C:\Users\Use\Videos\e\*.apng) do cjxl_ng_main "%i" "%i.jxl"
for %i in (C:\Users\Use\Documents\vvvf\*.png) do cjxl_ng_main "%i" "%i.jxl"
for %i in (C:\Users\Use\Videos\l\*.jpg) do cjxl_ng_main --effort 8 --lossless_jpeg=0 "%i" "%i.jxl"
for %i in (D:\video\june\phone\Camera\Camera\jpg\*.png) do cjxl_ng_main "%i" "%i.jxl"
ffmpeg -i input.mp4 output.apng
|
|
|
Pashi
|
2022-06-12 01:31:25
|
Everyone wants a super efficient and responsive image codec like this to replace all legacy formats and be supported in all image viewers and web browsers and cell phones... Especially if it can losslessly crush existing jpeg.
|
|
|
fab
|
2022-06-12 01:31:28
|
|
|
2022-06-12 01:32:31
|
yes but they have to garantee a big enough improvement
|
|
2022-06-12 01:33:07
|
|
|
|
Pashi
|
2022-06-12 01:33:29
|
It's kind of odd, considering, if cjxl is supposed to be an example program demonstrating how to use the library, why doesn't it use the library? And only cjxl_ng uses it, but is less tested and experimental?
|
|
|
fab
|
2022-06-12 01:33:43
|
472x480
|
|
|
Pashi
It's kind of odd, considering, if cjxl is supposed to be an example program demonstrating how to use the library, why doesn't it use the library? And only cjxl_ng uses it, but is less tested and experimental?
|
|
2022-06-12 01:33:51
|
cjxl doesn't use the api
|
|
|
Cool Doggo
|
2022-06-12 01:33:56
|
cjxl (iirc) is eventually being replaced by cjxl_ng
|
|
|
fab
|
2022-06-12 01:33:57
|
jon said it
|
|
2022-06-12 01:34:53
|
even lossless jpg transcode you can get 475 to 400kb
|
|
2022-06-12 01:34:56
|
with cjxlng
|
|
2022-06-12 01:35:03
|
at effort 3
|
|
2022-06-12 01:35:11
|
default one
|
|
2022-06-12 01:35:22
|
i don't know if it also fo losslessjpgxl
|
|
|
Pashi
|
2022-06-12 01:35:33
|
Isn't it strange that cjxl didn't use the api to begin with, if it was meant to be an example of how to use the API?
|
|
2022-06-12 01:35:57
|
Something doesn't add up somewhere
|
|
|
fab
|
2022-06-12 01:37:06
|
they were too bugs
|
|
2022-06-12 01:37:27
|
yurume discovered them
|
|
2022-06-12 01:37:42
|
and joined as sdibaska
|
|
2022-06-12 01:37:52
|
he's very active
|
|
|
Pashi
|
2022-06-12 01:37:54
|
And if such a basic command line program as cjxl_ng can't easily use the API, and is still experimental with bugs and weird behavior, then is it even a reasonable expectation to expect web browsers to be able to adopt it?
|
|
|
fab
|
|
Pashi
And if such a basic command line program as cjxl_ng can't easily use the API, and is still experimental with bugs and weird behavior, then is it even a reasonable expectation to expect web browsers to be able to adopt it?
|
|
2022-06-12 01:38:24
|
like some images fo example this
|
|
2022-06-12 01:38:47
|
effort 8
|
|
2022-06-12 01:39:02
|
it doesn't even look sharp enough
|
|
2022-06-12 01:39:09
|
|
|
2022-06-12 01:39:16
|
no different than avif
|
|
2022-06-12 01:40:06
|
the wood looks weird
|
|
2022-06-12 01:40:56
|
animation are unconposite frames
|
|
|
Pashi
|
2022-06-12 01:42:53
|
Anyways sorry for asking so many questions, just thinking out loud and getting confused.
|
|
|
fab
|
2022-06-12 01:43:41
|
It's not really animated jxl, it's concatenated still files
|
|
|
Pashi
|
2022-06-12 01:44:17
|
Some things just don't add up...
|
|
|
fab
|
2022-06-12 01:45:27
|
JPEG XL thing is not lacking of low bitrate perfomance
|
|
2022-06-12 01:45:45
|
https://ewww.io/2022/06/02/what-in-the-world-is-an-avif/
|
|
|
Pashi
|
2022-06-12 01:47:14
|
Yes, it's just a little bit perplexing to me. Like it seems unfair or unreasonable to demand or expect that other, more complex pieces of software should incorporate libjxl support if even an example program like cjxl has a hard time using the actual libjxl API.
|
|
|
fab
|
2022-06-12 01:47:24
|
|
|
|
Pashi
Yes, it's just a little bit perplexing to me. Like it seems unfair or unreasonable to demand or expect that other, more complex pieces of software should incorporate libjxl support if even an example program like cjxl has a hard time using the actual libjxl API.
|
|
2022-06-12 01:48:02
|
hope for cjxl in android
|
|
2022-06-12 01:48:28
|
and aom 3.4.0 rc1 alreasy exist june1
|
|
2022-06-12 01:49:20
|
https://aomedia.googlesource.com/
|
|
|
Cool Doggo
|
|
Pashi
It's kind of odd, considering, if cjxl is supposed to be an example program demonstrating how to use the library, why doesn't it use the library? And only cjxl_ng uses it, but is less tested and experimental?
|
|
2022-06-12 01:50:01
|
(btw)
|
|
|
fab
|
2022-06-12 01:52:20
|
people will still use compression and so at 1.0 they need to finalize the encoder
|
|
2022-06-12 01:52:36
|
at least without animation tricks
|
|
|
Pashi
|
|
Cool Doggo
(btw)
|
|
2022-06-12 02:01:53
|
Oh now that I'm rereading that it makes more sense
|
|
2022-06-12 02:04:00
|
So the API didn't exist at first and there was no shared lib, only cjxl/djxl it sounds like?
|
|
|
|
tufty
|
2022-06-12 02:05:09
|
hello, I'm trying to fix up libvips jxl write with float data and I have a dumb question!
it looks like the libjxl tools always turn on JxlColorEncodingSetToLinearSRGB() for float data
I guess this assumes 0 - 255, is that right?
|
|
2022-06-12 02:07:35
|
I ask because libvips supports both float sRGB (0 - 255, gamma, float data) and scRGB (0 - 1, linear)
I suppose I should convert everything to float linear 0 - 255, but I wanted to double check
I had a quick look at the docs but I couldn't find this point being discussed (probably missed it)
|
|
2022-06-12 02:19:33
|
Sorry, one more question, I suppose non-linear float JXL is a possibility, looking at the API
Is this something I should allow for?
|
|
|
_wb_
|
|
Pashi
It's kind of odd, considering, if cjxl is supposed to be an example program demonstrating how to use the library, why doesn't it use the library? And only cjxl_ng uses it, but is less tested and experimental?
|
|
2022-06-12 02:59:00
|
The codec was designed first, then the api. So we had a cjxl/djxl a long time before we had an api.
|
|
|
Pashi
Yes, it's just a little bit perplexing to me. Like it seems unfair or unreasonable to demand or expect that other, more complex pieces of software should incorporate libjxl support if even an example program like cjxl has a hard time using the actual libjxl API.
|
|
2022-06-12 03:01:18
|
The decode api is more mature than the encode api. We expect more applications to need decode than encode, including browsers.
|
|
|
tufty
hello, I'm trying to fix up libvips jxl write with float data and I have a dumb question!
it looks like the libjxl tools always turn on JxlColorEncodingSetToLinearSRGB() for float data
I guess this assumes 0 - 255, is that right?
|
|
2022-06-12 03:02:24
|
No float is 0.0 to 1.0
|
|
|
|
tufty
|
|
_wb_
No float is 0.0 to 1.0
|
|
2022-06-12 03:04:08
|
great! thank you
and always linear? or is it an error not to call JxlColorEncodingSetToLinearSRGB with float data?
|
|
|
_wb_
|
2022-06-12 03:04:41
|
Linear by default
|
|
2022-06-12 03:04:57
|
But you can give data with other tf if you want
|
|
|
|
tufty
|
2022-06-12 03:05:24
|
should I allow for that in my decoder? how can I tell if the person doing the encoding wrote linear data?
|
|
|
_wb_
|
2022-06-12 03:06:54
|
Decode side, you get pixel data and a (possibly synthesized) icc profile that describes how to interpret it, including the tf
|
|
|
|
tufty
|
2022-06-12 03:08:00
|
ah I didn't realize it synthesised profiles if necessary
that's great, thank you very much
|
|
|
fab
|
2022-06-12 03:11:46
|
if you look at resolution cjxl will be obsolete by a week
|
|
2022-06-12 03:11:56
|
if you look at bpp not
|
|
2022-06-12 03:12:01
|
you can keep it
|
|
2022-06-12 03:12:38
|
but better using the final version
|
|
2022-06-12 03:15:21
|
https://discord.com/channels/794206087879852103/794206087879852106/985485293991907338
|
|
2022-06-12 03:15:30
|
we continue to chat
|
|
|
_wb_
|
2022-06-12 03:15:32
|
Fab you produce words, but I have a hard time making any sense out of them.
|
|
|
fab
|
2022-06-12 03:16:16
|
the question is
|
|
2022-06-12 03:16:17
|
https://discord.com/channels/794206087879852103/804324493420920833/985516870939574324
|
|
2022-06-12 03:16:22
|
https://discord.com/channels/794206087879852103/794206087879852106/985485293991907338
|
|
|
Pashi
|
2022-06-12 07:56:20
|
-q 92 -e 4 is about the same as -q 90 -e 7
|
|
2022-06-12 07:56:26
|
But much faster obviously.
|
|
2022-06-12 07:57:07
|
Efforts higher than 4 don't seem to be worth it.
|
|
2022-06-12 07:57:23
|
Just a waste of time and CPU
|
|
2022-06-12 08:01:49
|
Without giving any extra benefit in terms of economy of compression at all
|
|
2022-06-12 08:02:26
|
Seems to maybe help a little bit with lossless mode maybe though?
|
|
|
_wb_
|
2022-06-12 08:04:11
|
It depends a lot on the image
|
|
2022-06-12 08:04:52
|
E.g. if your image benefits from patches, like a screenshot with text on it, then e7 will be noticably better than e6
|
|
2022-06-12 08:05:27
|
But if the image doesn't benefit from patches, then yes sure the search for them is just a waste of time
|
|
2022-06-12 08:06:21
|
Higher effort _should_ give better quality per bit _in general_
|
|
2022-06-12 08:07:13
|
And it _should_ also give more consistent results as effort gets higher
|
|
2022-06-12 08:07:42
|
These are hard things to test though, so at the moment the only certainty is that slower settings are slower
|
|
|
Pashi
|
2022-06-12 08:19:13
|
Well if the faster settings only perform a subset of the work the higher settings do, and don't do anything novel that the slower settings don't do, then the slower settings will never produce larger files for the same fidelity
|
|
2022-06-12 08:20:01
|
I compressed a picture of a handwritten note and it didn't seem to benefit from patches.
|
|
2022-06-12 08:20:20
|
Using the lossy dct encoder at least
|
|
|
Pashi
Well if the faster settings only perform a subset of the work the higher settings do, and don't do anything novel that the slower settings don't do, then the slower settings will never produce larger files for the same fidelity
|
|
2022-06-12 08:21:31
|
I'm aware this probably isnโt how it works and the faster settings probably are not a strict subset of the work the slower settings do.
|
|
2022-06-12 08:38:57
|
would be nice if jpegxl.io used https://github.com/chafey/libjxl-js for crippled browsers like Apple and Firefox
|
|
|
_wb_
|
|
Pashi
Well if the faster settings only perform a subset of the work the higher settings do, and don't do anything novel that the slower settings don't do, then the slower settings will never produce larger files for the same fidelity
|
|
2022-06-12 08:52:45
|
They mostly do different things, slower settings are not aiming at smaller filesize but at more accurately reaching the distance target (and also trying to be smaller)
|
|
|
monad
|
|
Pashi
I compressed a picture of a handwritten note and it didn't seem to benefit from patches.
|
|
2022-06-12 10:20:10
|
cjxl looks for recurring, highly similar patterns to encode them just once, like deriving a sprite sheet to reproduce parts of the image content. Currently, it looks for high-contrast patterns, targeting text. Patches like these won't work well on photographs in general, which don't tend to feature such strict repetition.
|
|
|
|
Hello71
|
2022-06-13 12:38:51
|
dumb float question: there are (roughly) the same number of floating-point values in [0.0,1.0] as [1.0,MAX], right?
|
|
|
yurume
|
2022-06-13 12:41:31
|
yeah, for float (IEEE 754 binary32) there are 0x3f800000 numbers >= 0 & < 1 and 0x40000000 (finite) numbers >= 1
|
|
|
|
Hello71
|
2022-06-13 04:19:40
|
hm, that's more than i thought. the "missing" ones are subnormal?
|
|
|
Pashi
|
|
_wb_
But if the image doesn't benefit from patches, then yes sure the search for them is just a waste of time
|
|
2022-06-13 09:37:00
|
Suggestion: something like a 'tune' flag or a "screenshot" mode and/or "synthetic" mode and "photo" mode, some way to provide the encoder with a hint about what sort of image it's encoding, to help it decide how to encode the image. Or maybe just make the encoder smart enough to be able to tell what sort of image it is compressing and make it better at avoiding wasting time on algorithms that won't improve compression density.
|
|
2022-06-13 09:40:49
|
If the default speed is 7, and 7 is a waste of time for the majority of images (photographs), maybe the encoder should try to determine whether it's appropriate to use a potentially expensive algorithm
|
|
2022-06-13 09:41:00
|
Like looking for tiles
|
|
2022-06-13 09:41:25
|
I don't know if tiles are actually expensive though, just hypothetically speaking here
|
|
|
_wb_
|
2022-06-13 09:51:51
|
Shouldn't be that expensive when it's a photo
|
|
|
Pashi
|
2022-06-14 04:31:32
|
Well either way the difference in compression density between 4 and 7 seems to be marginal (but I haven't extensively tested it yet). I have noticed however that cheetah produces more JPEGesque macroblocking
|
|
|
_wb_
|
2022-06-14 07:08:28
|
how are you measuring? you shouldn't just look at filesize โ cheetah will likely produce less consistent quality, so it might be similar size but it could be a worse image...
|
|
|
fab
|
2022-06-14 07:12:02
|
Cjxl is better using 7
|
|
2022-06-14 07:12:19
|
Cjxlng 3 could be enough
|
|
2022-06-14 07:12:31
|
As cjxlng uses faster tools
|
|
2022-06-14 07:12:59
|
Though don't know when patches get enabled in cjxlng
|
|
2022-06-14 07:13:13
|
Does the equivalent of aom have patches
|
|
2022-06-14 07:13:27
|
Or you have to do 4 speeds slower?
|
|
|
_wb_
|
2022-06-14 07:13:50
|
cjxlng and cjxl will just have the same effort settings, no difference there
|
|
2022-06-14 07:14:04
|
```
ClassA_8bit_CAFE_2048x2560_8b_RGB.ppm.png
Encoding kPixels Bytes BPP E MP/s D MP/s Max norm pnorm BPP*pnorm Bugs
------------------------------------------------------------------------------------------------------------
jxl:3 2048 905443 3.5368867 23.042 17.424 1.72588944 0.71976041 2.545711020841 0
jxl:4 2048 905461 3.5369570 23.745 19.899 1.72588944 0.71976041 2.545761628995 0
jxl:5 2048 777557 3.0373320 10.248 19.540 1.80541682 0.77316090 2.348346369324 0
jxl:6 2048 777298 3.0363203 9.616 19.619 1.88469470 0.77710328 2.359534479215 0
jxl:7 2048 777412 3.0367656 4.342 19.388 1.71217620 0.75627939 2.296643264439 0
jxl:8 2048 791701 3.0925820 0.537 21.409 1.50374460 0.69845216 2.160020614894 0
jxl:9 2048 797286 3.1143984 0.083 17.657 1.22554004 0.68475227 2.132591408450 0
Aggregate: 2048 817087 3.1917452 3.754 19.235 1.64053283 0.73197577 2.336280134829 0
```
|
|
2022-06-14 07:14:24
|
these type of results are typical
|
|
2022-06-14 07:14:37
|
note that more effort does not imply less bytes
|
|
|
fab
|
2022-06-14 07:15:12
|
And patches at what Speed get enabled in cjxlng
|
|
|
_wb_
|
2022-06-14 07:15:15
|
it does improve max norm / pnorm per byte
|
|
|
fab
|
2022-06-14 07:15:16
|
Effort sorry
|
|
|
_wb_
|
2022-06-14 07:15:22
|
same as in cjxl
|
|
|
fab
|
2022-06-14 07:15:28
|
7?
|
|
2022-06-14 07:15:51
|
Squurrrll is also a name you consider
|
|
2022-06-14 07:16:29
|
So same speed as same effort
|
|
2022-06-14 07:16:45
|
Wonder what's the difference in tools
|
|
|
_wb_
|
2022-06-14 07:17:20
|
7 for vardct mode, 5 for modular mode, iirc
|
|
2022-06-14 07:17:49
|
there is no difference in the actual encode/decode code between cjxl/djxl and cjxl_ng/djxl_ng
|
|
2022-06-14 07:19:15
|
it's just that cjxl/djxl call the code directly (so their binaries don't depend on libjxl, and effectively contain a kind of statically linked libjxl), while cjxl_ng/djxl_ng use the library api (so their binaries will be very small and dynamically depend on libjxl for all the heavy lifting)
|
|
|
|
f1ac
|
2022-06-14 10:22:15
|
a dummy question, I have a synthetic linear float image, values can sometimes be above 1.0.
I'm trying to convert it to HDR JXL using JxlColorEncodingSetToLinearSRGB() and then overwriting transfer function with JxlTransferFunction::JXL_TRANSFER_FUNCTION_PQ
will converted image be displayed correctly, or do I need to apply inverse PQ to the pixels before conversion?
will values of 1.0 correspond to max HDR brightness?
what will happen to pixels with values above 1.0?
|
|
|
_wb_
|
2022-06-14 11:31:39
|
if you set the tf to pq, the encoder will think you are passing it data in pq
|
|
2022-06-14 11:32:55
|
if your data is linear, why not just encode it as linear?
|
|
2022-06-14 11:33:12
|
are you interested in lossy or lossless compression?
|
|
2022-06-14 11:34:31
|
what happens with values above 1.0 or below 0.0 is they will be outside the sRGB gamut and/or brighter than the nominal max brightness / darker than black
|
|
|
|
f1ac
|
|
_wb_
if your data is linear, why not just encode it as linear?
|
|
2022-06-14 11:45:19
|
Chrome only shows JXL files in HDR if they have PQ/HLG curve, so I'm trying to convert linear files to lossles PQ JXLs
|
|
2022-06-14 11:47:56
|
and this where I'm in doubt, should input be linear, should it have preapplied PQ or inverse PQ
|
|
2022-06-14 11:49:20
|
can't visually determine how to do it correctly because images are synthetic
|
|
2022-06-14 12:05:18
|
if I specify PQ and pass linear data, images look like near-blacks are elevated compared to passing linear data with linear gamma
|
|
2022-06-14 12:10:00
|
I guess I need to apply PQ curve prior to conversion, just wanted to be sure
|
|
|
eddie.zato
|
2022-06-14 04:51:49
|
I'm not sure where to report this, so I commented on it in the exiv2 repo for now:
https://github.com/Exiv2/exiv2/issues/2233#issuecomment-1155447694
|
|
|
Traneptora
|
2022-06-14 08:30:18
|
Why is stuff like `size_t ReadHybridUintClustered(size_t ctx, BitReader* JXL_RESTRICT br) {` defined in a header file?
|
|
2022-06-14 08:30:33
|
It's not inlined, so I don't see why it can't have a stub in a header file and then be defined in the corresponding `.cc` file
|
|
2022-06-14 08:35:51
|
or rather, why is that entire class defined in a header file?
|
|
2022-06-14 08:36:12
|
maybe this is my lack of C++ knowledge getting to me but shouldn't that stuff be defined below in implementation files?
|
|
|
|
veluca
|
2022-06-14 08:37:39
|
it was inlined in the past
|
|
|
Traneptora
|
2022-06-14 08:37:50
|
ah that makes sense
|
|
|
Pashi
|
|
_wb_
how are you measuring? you shouldn't just look at filesize โ cheetah will likely produce less consistent quality, so it might be similar size but it could be a worse image...
|
|
2022-06-15 03:47:15
|
I am using my eyes mostly and the zoom button :) cheetah produces smaller files actually and slightly worse quality but if you just raise the quality setting until the quality matches then the filesize also matches AND you get way faster results! :)
|
|
2022-06-15 03:47:42
|
But I haven't tested a large corpus of images
|
|
2022-06-15 03:49:13
|
But so far it looks like the default effort is a waste of effort for the most part. Could be way faster and still have the same compression density.
|
|
|
eddie.zato
|
2022-06-15 03:53:55
|
It seems that `cjxl` sometimes can't detect exif in png files. Should I fill a bug?
|
|
|
Traneptora
|
|
eddie.zato
It seems that `cjxl` sometimes can't detect exif in png files. Should I fill a bug?
|
|
2022-06-15 04:01:52
|
what's the difference between these two PNG files?
|
|
2022-06-15 04:03:30
|
one uses zTXt and one uses tEXt, but I don't see how cjxl doesn't recognize one but does the other
|
|
2022-06-15 04:04:00
|
since the output length is the same for both
|
|
|
eddie.zato
|
2022-06-15 04:05:28
|
This is the same file, but the exif is written with different tools, `exiv2` and `exiftool`.
|
|
|
|
veluca
|
2022-06-15 05:01:42
|
I don't think we handle compressed text chunks in cjxl, but I might be wrong
|
|
|
eddie.zato
|
2022-06-15 06:05:22
|
So, it should be a "feature request" then? ๐
|
|
|
monad
|
|
Pashi
I am using my eyes mostly and the zoom button :) cheetah produces smaller files actually and slightly worse quality but if you just raise the quality setting until the quality matches then the filesize also matches AND you get way faster results! :)
|
|
2022-06-15 06:29:01
|
These observations aren't guaranteed in general. Decreasing a distance target can help avoid results that are too low-quality, but low efforts can still sacrifice bytes in both coding efficiency and producing too high-quality results.
|
|
|
|
Hello71
|
|
Traneptora
It's not inlined, so I don't see why it can't have a stub in a header file and then be defined in the corresponding `.cc` file
|
|
2022-06-15 01:11:54
|
functions defined in c++ classes are automatically inline (under the language rules), otherwise they would almost certainly be illegal due to multiple definitions. whether they're actually inlined is implementation-specific
|
|
2022-06-15 01:14:35
|
if i were to guess, i would say that gcc probably inlines these kinds of functions too aggressively. it could be a factor in lto being more effective on c++ than c: if a medium-sized function is used once per file in 3 files, it should probably be inlined; if it is used once per file in 100 files, it should probably not be inlined
|
|
2022-06-15 01:18:18
|
also, the inline specifier is neither necessary nor sufficient for gcc to actually inline. putting the function in a header file simply means that gcc *can* inline if it wants to. otherwise, gcc cannot inline it without lto
|
|
2022-06-15 01:19:36
|
example of gcc inlining even without `inline`: https://gcc.godbolt.org/z/3P5Yxzn8n
|
|
|
|
veluca
|
2022-06-15 02:49:11
|
yep but compilers are *more likely* to inline things that are `inline`
|
|
2022-06-15 02:49:32
|
and also, it was actually `__attribute__((always_inline))` or whatever the spelling is ๐
|
|
|
SleepyJoe
|
2022-06-15 04:18:44
|
Hi, I'm not sure if this is the channel to ask this, but I have encoded an apng file with distance 0.0, but when I decoded to a list of png, there seemed to be a loss of information. I assume this is not expected, right?
|
|
|
_wb_
|
2022-06-15 04:22:53
|
how do you decode?
|
|
|
Traneptora
|
2022-06-15 04:26:33
|
iirc djxl only decodes back to `apng`
|
|
|
SleepyJoe
|
2022-06-15 04:27:37
|
I decoded just with: djxl img.jxl img.png
|
|
|
Traneptora
|
2022-06-15 04:28:18
|
also how did you compare the frames?
|
|
|
SleepyJoe
|
2022-06-15 04:28:36
|
It says, at djxl --help, that it just decodes to png, jpg and ppm/pfm
|
|
|
Traneptora
|
2022-06-15 04:28:54
|
that should probably be updated
|
|
|
SleepyJoe
|
2022-06-15 04:29:29
|
Using open-cv with python, it worked with other cases: cv2.imread(img.png, cv2.imread_unchanged)
|
|
|
Traneptora
|
2022-06-15 04:30:02
|
can you post the sample?
|
|
|
SleepyJoe
|
2022-06-15 04:31:24
|
The .jxl file right?
|
|
|
Traneptora
|
2022-06-15 04:31:43
|
no, the original apng
|
|
|
SleepyJoe
|
2022-06-15 04:46:50
|
The file is 70MiB, discord doesn't allow this size, is there anywhere else I can send?
|
|
|
Traneptora
|
|
SleepyJoe
The file is 70MiB, discord doesn't allow this size, is there anywhere else I can send?
|
|
2022-06-15 04:49:53
|
try running this:
```
ffmpeg -i original.png -c rawvideo -f hash - 2>/dev/null
cjxl -d 0 original.png interim.jxl
djxl interim.jxl test.png
ffmpeg -i test.png -c rawvideo -f hash - 2>/dev/null
```
|
|
2022-06-15 04:49:57
|
and let me know what output you get
|
|
|
SleepyJoe
|
2022-06-15 05:21:21
|
Switching original.png by my apng?
|
|
|
Traneptora
|
|
SleepyJoe
Switching original.png by my apng?
|
|
2022-06-15 05:29:04
|
yes
|
|
|
SleepyJoe
|
2022-06-15 05:35:14
|
ffmpeg -i IMG_MONOCHROME2.apng -c rawvideo -f hash - 2>/dev/null
cjxl IMG_MONOCHROME2.apng interim.jxl
djxl interim.jxl IMG_MONOCHROME2.png
ffmpeg -i test.png -c rawvideo -f hash - 2>/dev/null
SHA256=543bd0f74847bf10d83c116cb058639864212568fc81ac02fdbcec41408ab448
JPEG XL encoder v0.6.1 a205468 [AVX2,SSE4,Scalar]
Read 1890x2457 image, 64.4 MP/s
Encoding [VarDCT, d1.000, squirrel], 4 threads.
Compressed to 249739 bytes (0.007 bpp/frame).
1890 x 2457, 0.06 MP/s [0.06, 0.06], 1 reps, 4 threads.
JPEG XL decoder v0.6.1 a205468 [AVX2,SSE4,Scalar]
Read 249739 compressed bytes.
Decoded to pixels.
1890 x 2457, 0.94 MP/s [0.94, 0.94], 1 reps, 4 threads.
Allocations: 36637 (max bytes in use: 4.561156E+09)
|
|
|
_wb_
|
2022-06-15 05:38:07
|
Change that last ffmpeg command, it has the wrong input filename
|
|
|
SleepyJoe
|
2022-06-15 05:41:59
|
ffmpeg -i IMG_MONOCHROME2.apng -c rawvideo -f hash - 2>/dev/null
cjxl IMG_MONOCHROME2.apng interim.jxl
djxl interim.jxl IMG_MONOCHROME2.png
ffmpeg -i IMG_MONOCHROME2.png -c rawvideo -f hash - 2>/dev/null
SHA256=543bd0f74847bf10d83c116cb058639864212568fc81ac02fdbcec41408ab448
JPEG XL encoder v0.6.1 a205468 [AVX2,SSE4,Scalar]
Read 1890x2457 image, 54.0 MP/s
Encoding [VarDCT, d1.000, squirrel], 4 threads.
Compressed to 249739 bytes (0.007 bpp/frame).
1890 x 2457, 0.05 MP/s [0.05, 0.05], 1 reps, 4 threads.
JPEG XL decoder v0.6.1 a205468 [AVX2,SSE4,Scalar]
Read 249739 compressed bytes.
Decoded to pixels.
1890 x 2457, 0.90 MP/s [0.90, 0.90], 1 reps, 4 threads.
Allocations: 36637 (max bytes in use: 4.561156E+09)
|
|
|
|
Hello71
|
|
veluca
yep but compilers are *more likely* to inline things that are `inline`
|
|
2022-06-15 05:49:35
|
after playing with it a little, i think gcc (12) treats functions defined in classes as if they were declared/defined with inline, both for language and for optimization purposes
|
|
|
_wb_
|
|
SleepyJoe
ffmpeg -i IMG_MONOCHROME2.apng -c rawvideo -f hash - 2>/dev/null
cjxl IMG_MONOCHROME2.apng interim.jxl
djxl interim.jxl IMG_MONOCHROME2.png
ffmpeg -i IMG_MONOCHROME2.png -c rawvideo -f hash - 2>/dev/null
SHA256=543bd0f74847bf10d83c116cb058639864212568fc81ac02fdbcec41408ab448
JPEG XL encoder v0.6.1 a205468 [AVX2,SSE4,Scalar]
Read 1890x2457 image, 54.0 MP/s
Encoding [VarDCT, d1.000, squirrel], 4 threads.
Compressed to 249739 bytes (0.007 bpp/frame).
1890 x 2457, 0.05 MP/s [0.05, 0.05], 1 reps, 4 threads.
JPEG XL decoder v0.6.1 a205468 [AVX2,SSE4,Scalar]
Read 249739 compressed bytes.
Decoded to pixels.
1890 x 2457, 0.90 MP/s [0.90, 0.90], 1 reps, 4 threads.
Allocations: 36637 (max bytes in use: 4.561156E+09)
|
|
2022-06-15 05:52:51
|
why are you getting no output from that last ffmpeg command? Also, try cjxl -d 0 -e 2 (when not doing lossless, you cannot expect the hash to match)
|
|
|
|
Hello71
|
2022-06-15 05:55:48
|
interestingly, clang *doesn't*: `class foo { public: static int f() { ... } }` and `class foo { public: static inline int f() { ... } }` are sometimes optimized differently
|
|
|
SleepyJoe
|
|
_wb_
why are you getting no output from that last ffmpeg command? Also, try cjxl -d 0 -e 2 (when not doing lossless, you cannot expect the hash to match)
|
|
2022-06-15 05:57:36
|
You're right, I think it's because each frame is written separately in its own file, like so: img-00.png, ...
|
|
|
Traneptora
|
|
SleepyJoe
You're right, I think it's because each frame is written separately in its own file, like so: img-00.png, ...
|
|
2022-06-15 06:02:07
|
it shouldn't be
|
|
2022-06-15 06:02:44
|
> Encoding [VarDCT, d1.000, squirrel], 4 threads.
you didn't set `-d 0`
|
|
|
_wb_
|
2022-06-15 06:04:33
|
Oh
|
|
2022-06-15 06:04:42
|
This is a really old cjxl/djxl
|
|
|
Traneptora
|
2022-06-15 06:04:49
|
yea, I was about to mention
|
|
|
_wb_
|
2022-06-15 06:04:54
|
The one that doesn't know about apng yet
|
|
|
Traneptora
|
2022-06-15 06:05:02
|
well then, that would do it <:kek:857018203640561677>
|
|
|
SleepyJoe
|
2022-06-15 06:05:16
|
Also, I specified the bits per sample of 10, thus , since my original image is 10 bits, but png only supports either 8 or 16, so that could also be a problem
|
|
|
|
veluca
|
|
Hello71
interestingly, clang *doesn't*: `class foo { public: static int f() { ... } }` and `class foo { public: static inline int f() { ... } }` are sometimes optimized differently
|
|
2022-06-15 06:05:26
|
yeah, I was somewhat more familiar with clang (well, llvm, I think the inliner is there) so that's what I talked about ๐
|
|
|
SleepyJoe
|
2022-06-15 06:06:15
|
Yes, I was using the 0.6.1 version commit, specifically
|
|
2022-06-15 06:10:01
|
Is it better to use a recent commit?
|
|
|
_wb_
|
2022-06-15 06:22:15
|
Yes, best to use the latest git version
|
|
2022-06-16 05:09:46
|
Haha well yes it has been too long since we made a release
|
|
|
SleepyJoe
|
2022-06-16 10:22:51
|
Will you jump to the 1.0.0 in the next release?
|
|
|
Traneptora
|
2022-06-16 11:18:59
|
that's the plan
|
|
|
tr7zw
|
2022-06-17 01:05:21
|
Out of curiosity, with the current release it's not possible to for example re-encode a lossless jxl to a lower quality copy because cjxl can't read in jxl files? (without going jxl -> png -> jxl)
|
|
|
_wb_
|
|
tr7zw
Out of curiosity, with the current release it's not possible to for example re-encode a lossless jxl to a lower quality copy because cjxl can't read in jxl files? (without going jxl -> png -> jxl)
|
|
2022-06-17 05:05:15
|
Sure this is possible, just have to use imagemagick or ffmpeg or gimp or vips or ... ๐
|
|
|
novomesk
|
|
_wb_
Sure this is possible, just have to use imagemagick or ffmpeg or gimp or vips or ... ๐
|
|
2022-06-17 07:35:50
|
or gwenview
|
|
|
SleepyJoe
|
2022-06-17 06:12:21
|
I think there is a bug, decoding a .jxl multi-frame image to .apng (original is also .apng)
|
|
2022-06-17 06:12:47
|
Can I send the output?
|
|
|
Traneptora
|
2022-06-17 07:14:18
|
sure
|
|
|
SleepyJoe
I think there is a bug, decoding a .jxl multi-frame image to .apng (original is also .apng)
|
|
2022-06-17 07:14:39
|
if you've updated to git master libjxl and there's still that issue, feel free to provide a sample
|
|
2022-06-17 07:14:47
|
first try the same thing I suggested earlier
|
|
2022-06-17 07:15:02
|
this, I mean https://discord.com/channels/794206087879852103/804324493420920833/986673916305088512
|
|
|
SleepyJoe
|
2022-06-17 07:40:37
|
It didn't finish decoding
|
|
2022-06-17 07:40:47
|
Or writing
|
|
|
Traneptora
|
|
SleepyJoe
It didn't finish decoding
|
|
2022-06-17 09:31:15
|
wdym it didn't finish? post output
|
|
|
SleepyJoe
|
2022-06-18 12:26:09
|
(Sorry, wasn't able to post earlier)
% djxl img.jxl img.apng
JPEG XL decoder v0.7.0 89215e7 [AVX3,AVX2,SSE4,SSSE3,Emu128]
Read 47746120 compressed bytes.
Decoded to pixels.
./lib/jxl/image_bundle.cc:34: JXL_CHECK: metadata_->color_encoding.IsGray() == c_current.IsGray()
[1] 4053 illegal hardware instruction (core dumped) djxl img.jxl img.apng
|
|
|
Traneptora
|
|
SleepyJoe
(Sorry, wasn't able to post earlier)
% djxl img.jxl img.apng
JPEG XL decoder v0.7.0 89215e7 [AVX3,AVX2,SSE4,SSSE3,Emu128]
Read 47746120 compressed bytes.
Decoded to pixels.
./lib/jxl/image_bundle.cc:34: JXL_CHECK: metadata_->color_encoding.IsGray() == c_current.IsGray()
[1] 4053 illegal hardware instruction (core dumped) djxl img.jxl img.apng
|
|
2022-06-18 03:04:12
|
what's the source of your djxl binary? was it compiled with mingw-w64?
|
|
2022-06-18 03:05:00
|
if I had to guess, it's most likely compiled with MinGW, which incorrectly emits aligned instructions for avx2 when there's no alignment guarantee
|
|
2022-06-18 03:06:20
|
you have to compile highway with `-Wa,-muse-unaligned-vector-move`
|
|
2022-06-18 03:27:23
|
that's done with clang, so I believe so
|
|
|
_wb_
|
|
SleepyJoe
(Sorry, wasn't able to post earlier)
% djxl img.jxl img.apng
JPEG XL decoder v0.7.0 89215e7 [AVX3,AVX2,SSE4,SSSE3,Emu128]
Read 47746120 compressed bytes.
Decoded to pixels.
./lib/jxl/image_bundle.cc:34: JXL_CHECK: metadata_->color_encoding.IsGray() == c_current.IsGray()
[1] 4053 illegal hardware instruction (core dumped) djxl img.jxl img.apng
|
|
2022-06-18 05:47:33
|
Looks like a bug, assert is failing. Is the image grayscale?
|
|
|
SleepyJoe
|
2022-06-18 08:47:38
|
Pretty sure it is, yes, but I can double check
|
|
|
Traneptora
what's the source of your djxl binary? was it compiled with mingw-w64?
|
|
2022-06-18 08:49:20
|
I compiled it with cmake, like the main readme shows
|
|
|
_wb_
|
2022-06-18 10:50:53
|
Does it work if you decode to other formats like jpeg or pgm?
|
|
|
SleepyJoe
|
2022-06-18 11:16:15
|
No, same error message appears
|
|
2022-06-18 11:19:35
|
I can send the file through online file sharing if you want to test
|
|
2022-06-18 11:32:35
|
The os I'm working on is Linux
|
|
|
|
veluca
|
2022-06-18 12:23:13
|
at least you can trust it as much as you trust me ๐
|
|
|
Traneptora
|
|
SleepyJoe
I compiled it with cmake, like the main readme shows
|
|
2022-06-18 02:40:48
|
can you upload a sample?
|
|
|
SleepyJoe
|
2022-06-18 02:43:04
|
It's too big for discord, where do I upload?
|
|
2022-06-18 03:01:29
|
Thank you.
Here https://fileupload.ggc-project.de/download/62b3969e414f2915/#uA1nlC4QulQgL90dHLFRRQ
|
|
|
Traneptora
|
2022-06-18 03:20:31
|
<@388756576824983553> there's also `https://0x0.st`
|
|
2022-06-18 03:20:35
|
which is very helpful
|
|
2022-06-18 03:21:59
|
I can reproduce the assert failure
|
|
|
SleepyJoe
|
|
Traneptora
<@388756576824983553> there's also `https://0x0.st`
|
|
2022-06-18 03:24:06
|
For sharing?
|
|
|
Traneptora
|
2022-06-18 03:24:11
|
yea
|
|
2022-06-18 03:24:22
|
`curl -F'@file.png' https://0x0.st`
|
|
2022-06-18 03:24:30
|
uploads it from the CLI, and it returns a link to the file
|
|
2022-06-18 03:24:45
|
file size is <256 MB, it disallows some stuff like `.exe` and `.jar` but otherwise it works
|
|
2022-06-18 03:24:59
|
it only lasts temporarily, between 30 days and a year depending on file size
|
|
2022-06-18 03:25:09
|
and if you upload the same file again it returns the same link since it keeps track of the hash
|
|
|
SleepyJoe
|
2022-06-18 03:25:31
|
Nice, thanks
|
|
|
Traneptora
|
2022-06-18 03:25:56
|
also, I reproduced your bug
|
|
2022-06-18 03:26:49
|
I'll open a bug report
|
|
|
SleepyJoe
Nice, thanks
|
|
2022-06-18 03:35:04
|
https://github.com/libjxl/libjxl/issues/1517
|
|
|
_wb_
Looks like a bug, assert is failing. Is the image grayscale?
|
|
2022-06-18 03:39:18
|
it is grayscale, and it's a bug in the APNG encoder, since if you discard the decoded pixels it exits without issue
|
|
2022-06-18 03:39:29
|
I reproduced it on a very small sample and opened the above issue
|
|
|
spider-mario
|
2022-06-18 08:16:47
|
FYI, SIGILL is just how our asserts die
|
|
|
Traneptora
|
2022-06-18 08:33:56
|
why not SIGABRT?
|
|
|
spider-mario
|
2022-06-19 09:55:00
|
uh, looking at the code again, I get the impression that it should be SIGTRAP https://github.com/libjxl/libjxl/blob/c4262565e8de611f593bf2c6f4a24aeb55d38afb/lib/jxl/base/status.h#L127-L141
|
|
|
|
veluca
|
2022-06-19 09:59:48
|
Built-in Function: void __builtin_trap (void)
This function causes the program to exit abnormally. GCC implements this function by using a target-dependent mechanism (such as intentionally executing an illegal instruction) or by calling abort. The mechanism used may vary from release to release so you should not rely on any particular implementation.
|
|
2022-06-19 09:59:49
|
well
|
|
2022-06-19 10:00:41
|
maybe we should replace it with a call to `abort()`
|
|
|
spider-mario
|
2022-06-19 10:05:16
|
or maybe `raise(SIGTRAP)`
|
|
2022-06-19 10:05:51
|
(or, yeah, `abort` will do)
|
|
|
|
veluca
|
2022-06-19 10:06:15
|
isn't raise Unix-like specific?
|
|
|
spider-mario
|
2022-06-19 10:32:04
|
probably
|
|
|
BlueSwordM
|
2022-06-20 01:07:17
|
Trying to build libjxl statically is a bit more difficult than I though:
`ld.lld: error: attempted static link of dynamic object libz.so.1.2.11
clang-13: error: linker command failed with exit code 1 (use -v to see invocation)`
It's the only thing that fails.
|
|
|
_wb_
|
2022-06-20 04:03:39
|
I guess you need a libz.a
|
|
|
Traneptora
|
|
BlueSwordM
Trying to build libjxl statically is a bit more difficult than I though:
`ld.lld: error: attempted static link of dynamic object libz.so.1.2.11
clang-13: error: linker command failed with exit code 1 (use -v to see invocation)`
It's the only thing that fails.
|
|
2022-06-20 04:44:39
|
you can always add `-Wl,-Bdynamic -lz -Wl,-Bstatic`
|
|
2022-06-20 04:44:51
|
which will dynamically link libz.so
|
|
|
|
Hello71
|
2022-06-20 07:36:43
|
but you can't dynamically link into a static binary anyways
|
|
|
novomesk
|
2022-06-21 08:08:22
|
Recently, my AVIF Qt plugin got approximately 10% faster by avoiding unnecessary conversion between pixel formats. Beside RGBA, I get pixels as BGRA (on little endian) or ARGB (on big endian) from libavif.
JPEG XL Qt plugin could be faster too when libjxl API supports more pixel formats. I think something like that is planned for 1.0, isn't it?
|
|
|
Traneptora
|
|
Hello71
but you can't dynamically link into a static binary anyways
|
|
2022-06-21 02:30:27
|
well you need to link *some* things dynamically
|
|
2022-06-21 02:30:34
|
like libc.so
|
|
2022-06-21 02:30:56
|
I figured a 'static binary' on linux usually means except for some basics like libc and libz
|
|
|
novomesk
Recently, my AVIF Qt plugin got approximately 10% faster by avoiding unnecessary conversion between pixel formats. Beside RGBA, I get pixels as BGRA (on little endian) or ARGB (on big endian) from libavif.
JPEG XL Qt plugin could be faster too when libjxl API supports more pixel formats. I think something like that is planned for 1.0, isn't it?
|
|
2022-06-21 02:31:27
|
Yea, and they're also planning on supporting planar
|
|
2022-06-21 02:31:34
|
I'm not sure if it's a 1.0 milestone though
|
|
|
BlueSwordM
|
|
Traneptora
I figured a 'static binary' on linux usually means except for some basics like libc and libz
|
|
2022-06-21 02:53:17
|
Yeah, that's about it.
It's only zlib that is being a bit annoying, it'd be nice if it could be built statically since it is downloaded anyway.
|
|
|
_wb_
|
|
novomesk
Recently, my AVIF Qt plugin got approximately 10% faster by avoiding unnecessary conversion between pixel formats. Beside RGBA, I get pixels as BGRA (on little endian) or ARGB (on big endian) from libavif.
JPEG XL Qt plugin could be faster too when libjxl API supports more pixel formats. I think something like that is planned for 1.0, isn't it?
|
|
2022-06-21 03:14:42
|
Feel free to make a header-only api update pull request for this. It should be easy enough to implement any output pixel format, so I think once we know which ones are needed and what the api should be, it shouldn't take too much effort to add things there.
|
|
|
190n
|
|
Traneptora
I figured a 'static binary' on linux usually means except for some basics like libc and libz
|
|
2022-06-21 03:32:43
|
it is possible, and sometimes valuable, to make binaries that are completely static
|
|
|
novomesk
|
|
_wb_
Feel free to make a header-only api update pull request for this. It should be easy enough to implement any output pixel format, so I think once we know which ones are needed and what the api should be, it shouldn't take too much effort to add things there.
|
|
2022-06-21 05:44:42
|
Would it be possible for example to extend JxlPixelFormat to contain new char channel_order[8]; member? (decoding API breaking change)
It would allow generic description of various formats. You can mention that only certain combinations are supported now, but later you can extend the list.
It would be used this way:
pixel_format.num_channels = 5;
pixel_format.channel_order[0] = 'C';
pixel_format.channel_order[1] = 'M';
pixel_format.channel_order[2] = 'Y';
pixel_format.channel_order[3] = 'K';
pixel_format.channel_order[4] = 'A';
|
|
|
|
Hello71
|
2022-06-21 07:55:25
|
is this interleaved only
|
|
|
novomesk
|
2022-06-21 09:52:43
|
I don't know what preferences have those who use planar. Maybe they would like to have multiple output buffers.
|
|
|
|
Hello71
|
2022-06-22 02:54:51
|
i think the idea/hope is to have an API which can be generalized to planar output
|
|
2022-06-22 02:54:54
|
see also https://github.com/libjxl/libjxl/issues/993
|
|
|
_wb_
|
2022-06-22 05:27:51
|
Maybe planar is better added by extending the function to set buffers for extrachannels to also work for individual color channels
|
|
|
novomesk
|
|
_wb_
Maybe planar is better added by extending the function to set buffers for extrachannels to also work for individual color channels
|
|
2022-06-22 08:43:29
|
That would be convenient/comfortable to use. But will it be faster to get data that way than getting pixels as RGBA first and converting on application's side afterwards?
|
|
|
_wb_
|
2022-06-22 10:34:30
|
In jxl the internal data is planar RGB for lossless/non-xyb, planar XYB for lossy/xyb
|
|
2022-06-22 10:36:21
|
It is converted to interleaved only at the end, when doing color conversion and conversion to integers
|
|
2022-06-22 10:39:20
|
CMS color conversion takes an interleaved row and produces an interleaved row, but that's done with floats so we can still choose in the conversion to ints whether to keep it interleaved or go back to planar
|
|
2022-06-22 10:40:55
|
Basically we could just have 3 pointers, 3 row strides, and 3 pixel strides for the final step from interleaved floats to output pixelformats
|
|
2022-06-22 10:43:00
|
So in planar each pointer would point to a different buffer and the pixel strides would be 1, while in interleaved they would point to different offsets in the same buffer and the pixel stride would be 3 (for rgb) or 4 (for rgba).
|
|
2022-06-22 10:44:29
|
<@179701849576833024> <@604964375924834314> does that make sense?
|
|
|
spider-mario
|
2022-06-22 11:42:23
|
at first glance, it seems to
|
|
|
novomesk
|
2022-06-22 11:43:34
|
In some cases, there is a padding at the end of each row (except the last), so the new row starts at aligned address.
|
|
|
spider-mario
|
2022-06-22 11:46:39
|
oh, right
|
|
|
|
veluca
|
2022-06-22 12:15:51
|
but that's what the row stride is for, no?
|
|
|
novomesk
|
2022-06-22 12:25:04
|
yes, actually I like row stride term more than alignment.
|
|
|
Traneptora
|
|
_wb_
Maybe planar is better added by extending the function to set buffers for extrachannels to also work for individual color channels
|
|
2022-06-22 05:57:02
|
my current idea for this is to add `enum JxlColorPlane` with values like `ALL, RED, GREEN, BLUE, LUMA, CB, CR, CYAN, MAGENTA, YELLOW, EXTRA`
|
|
2022-06-22 05:57:45
|
and you'd keep the current SetDecoderOutputBuffer for backward API/ABI compat
|
|
2022-06-22 05:57:58
|
but you'd add an extra SetDecoderOutputBufferPlane, which takes an argument of enum JxlColorPlane
|
|
2022-06-22 05:58:08
|
if you pass *ALL* you'll receieve packed/interleaved output
|
|
2022-06-22 05:58:18
|
which is the current default
|
|
2022-06-22 05:58:46
|
if you pass RED, GREEN, BLUE, etc. you'll receieve only those planes
|
|
2022-06-22 05:59:26
|
the decoder will reject LUMA, CB, and CR unless this is a reconstructed JPEG, or this is grayscale, in which case it will allow LUMA
|
|
2022-06-22 05:59:37
|
You might also simply not want to allow YCbCr
|
|
2022-06-22 06:00:21
|
Does this make sense to anyone else? Should I open an issue for this proposal?
|
|
|
|
Hello71
|
2022-06-23 06:33:20
|
sounds plausible to me, but i know very little about colors. i assume `ALL=0`
|
|
2022-06-23 06:35:23
|
i'm not sure how important it is to disallow nonsensical combinations, such as requesting RED and CB and YELLOW. maybe such cases could also be supported, but just run slower. it could theoretically be useful to get, say, LUMA, RED, GREEN, BLUE. in either case, maybe it would be useful to have an API to query which combinations are supported.
|
|
2022-06-23 06:36:22
|
also, what would be the behavior if you call both SetDecoderOutputBuffer and SetDecoderOutputBufferPlane? do you get both ALL and whatever other colors?
|
|
2022-06-23 06:37:46
|
actually, your proposal does not seem to cover the order of interleaved channels. how would that be integrated? would it use JxlColorPlane?
|
|
|
_wb_
|
2022-06-23 06:53:38
|
RGB and CMY are just the same thing in jxl, the only difference is in the icc profile
|
|
|
Traneptora
|
|
Hello71
actually, your proposal does not seem to cover the order of interleaved channels. how would that be integrated? would it use JxlColorPlane?
|
|
2022-06-25 01:16:17
|
it doesn't, it would be for planar only
|
|
|
_wb_
RGB and CMY are just the same thing in jxl, the only difference is in the icc profile
|
|
2022-06-25 01:17:39
|
I see, so maybe you wouldn't have CMY, just ALL, RED, GREEN, BLUE, EXTRA, and optionally Y, Cb, or Cr
|
|
2022-06-25 01:20:05
|
maybe Y you'd always have for the purpose of grayscale
|
|
|
Hello71
also, what would be the behavior if you call both SetDecoderOutputBuffer and SetDecoderOutputBufferPlane? do you get both ALL and whatever other colors?
|
|
2022-06-25 01:20:33
|
SetDecoderOutputBuffer would become SetDecoderOutputBufferPlane(ALL) externally
|
|
2022-06-25 01:21:30
|
I figure it would error out if you tried to call SetDecoderOutputBufferPlane in invalid ways
|
|
2022-06-25 01:22:47
|
that's one option, another option is if you set a plane incompatible with the previous options, then nothing happens
|
|
2022-06-26 06:10:13
|
I'm getting what I think is a bug in libjxl, but I'm not sure
|
|
2022-06-26 06:11:13
|
if I attempt to encode a 3840x2160 image that's 16-bit RGBA (64-bit total), it fails to set the basic info unless I set the codestream level to 10 first
|
|
2022-06-26 06:13:26
|
but I'm not sure how my client is supposed to be able to know that it's supposed to do this before I set the basic info.
|
|
2022-06-26 06:14:30
|
`JxlEncoderSetCodestreamLevel` doesn't support `-1` yet
|
|
2022-06-26 06:14:55
|
and setting the basic info includes a level verification check
|
|
2022-06-26 06:15:02
|
which will fail
|
|
2022-06-26 06:15:13
|
I feel like the only way to work around this is to set the level to 10 no matter what
|
|
2022-06-26 06:16:48
|
in this case, level10 is required because `alpha_bits > 12` but I don't want to duplicate all of the same checks that libjxl already has
|
|
2022-06-26 06:17:41
|
basically, I'm in a catch-22
|
|
2022-06-26 06:17:55
|
I call JxlEncoderGetRequiredCodestreamLevel requires basic info to be set to provide any meaningful info
|
|
2022-06-26 06:18:22
|
JxlEncoderSetBasicInfo includes a level check, which will cause it to fail if level10 is required and level5 is the current setting
|
|
2022-06-26 06:19:00
|
it sounds like what I actually have to do is set the level to 10, then populate JxlEncoderSetBasicInfo, and then *after that* set the level to what it's actually supposed to be
|
|
|
_wb_
|
2022-06-26 06:43:16
|
I think we just need to implement SetCodestreamLevel -1
|
|
|
Traneptora
|
2022-06-26 06:43:31
|
and let that be the default
|
|
2022-06-26 06:43:47
|
that way you can populate the basic info without setting it first, and then check afterward
|
|
|
_wb_
I think we just need to implement SetCodestreamLevel -1
|
|
2022-06-27 05:51:14
|
https://github.com/libjxl/libjxl/pull/1538
|
|
|
Jyrki Alakuijala
|
|
Traneptora
Does this make sense to anyone else? Should I open an issue for this proposal?
|
|
2022-06-28 08:48:41
|
An issue will make sure that it gets discussed with all the people who understand that domain -- these discord discussions can be missed by some of our experts.
|
|
|
Traneptora
|
|
Jyrki Alakuijala
An issue will make sure that it gets discussed with all the people who understand that domain -- these discord discussions can be missed by some of our experts.
|
|
2022-06-28 06:48:53
|
https://github.com/libjxl/libjxl/issues/1542
|
|
|
|
Deleted User
|
2022-07-01 08:37:35
|
Hello, I am currently working on my bachelor thesis where I am comparing image compression codecs on a system based on the QNX operating system. Unfortunately the proprietary compiler for QNX only supports C++99
Do you think it would be possible to somehow compile libjxl using C++99 for QNX?
|
|
|
|
veluca
|
2022-07-01 11:24:13
|
this is a bit of a crazy idea, but... have you tried compiling libjxl to webassembly and webassembly to c with wasm2c?
|
|
|
|
Hello71
|
2022-07-01 02:15:44
|
give a developer a browser, everything looks like wasm?
|
|
2022-07-01 02:16:29
|
from https://stackoverflow.com/questions/5050349/is-there-a-way-to-compile-c-to-c-code, https://github.com/JuliaComputingOSS/llvm-cbe seems to be maintained
|
|
2022-07-01 02:17:28
|
well, sort of maintained
|
|
|
|
veluca
|
2022-07-01 02:19:43
|
oh I didn't know of llvm-cbe
|
|
|
|
Hello71
|
2022-07-01 02:19:44
|
i'm pretty sure both the original c++ implementation and several after that were implemented using translation to C
|
|
|
|
veluca
|
2022-07-01 02:19:51
|
yes
|
|
2022-07-01 02:19:59
|
it *has* been more than 20 years though ๐
|
|
|
|
Hello71
|
2022-07-01 02:21:51
|
libjxl doesn't use exceptions, so theoretically it should be amenable to C translation. the trouble is that nobody cares about such things anymore because everyone (sensible) uses gcc or llvm for new platforms anyways
|
|
2022-07-01 02:22:34
|
https://stackoverflow.com/questions/34168433/am-i-able-to-use-c11-in-qnx says that c++11 was available on qnx in 2015
|
|
2022-07-01 02:23:11
|
https://www.qnx.com/developers/docs/7.0.0/#com.qnx.doc.qnxsdp.migration/topic/cpp_apps.html says "We support only C++11 and C++14 with libc++. Using older or new standards (C++98, C++03, C++1z (17)) may result in compilation errors. If these are absolutely required, it might be possible to do with some toolchain changes using libstdc++."
|
|
|
|
Deleted User
|
2022-07-01 04:29:44
|
yeah thanks for the help but the system I'm working on only has a really outdated license of QNX that really only supports c++99
|
|
2022-07-01 04:30:18
|
I have looked into it more and it seems I will have to port parts of the system to linux to get it to work
|
|
2022-07-01 04:31:10
|
I also want to add avif and heif to the comparison as well so I guess I would have run into the same problems anyway with these libraries
|
|
|
|
Hello71
|
2022-07-01 11:31:21
|
fwiw, i don't think there exists a c++99. there is c99 and c++98
|
|
2022-07-01 11:31:39
|
and c89 which is also basically c90
|
|
|
w
|
2022-07-03 01:06:43
|
does cjxl save encoder settings in the file
|
|
2022-07-03 01:06:53
|
has someone already asked this
|
|
|
yurume
|
2022-07-03 01:11:23
|
you can _guess_ particular settings, but in general no such metadata exists to my knowledge
|
|
|
w
|
2022-07-03 01:15:33
|
i would like to have the encoder version and parameters
|
|
2022-07-03 01:15:53
|
might be even more useful if/when lossless jxl recompression is added
|
|
|
|
Hello71
|
2022-07-03 02:34:15
|
i think jxl developers tried very hard to minimize header size, even (in hindsight) at significant expense to minimal parsers; adding a bunch of metadata by default would defeat the purpose imo
|
|
2022-07-03 02:35:27
|
it might be okay to have some off-by-default option to store encoder settings; that might also satisfy some people who want to know whether some image was compressed using the lossless setting or not
|
|
2022-07-03 02:36:28
|
otoh this is arguably dubious info to begin with, as explained in the issue. if you want to know if an image could be losslessly recompressed to be smaller, the proper way to do it is to just try to do it and see if it gets smaller, not to make some guess based on the previous parameters
|
|
|
yurume
|
2022-07-03 02:57:33
|
agreed, many compression formats did have some sort of encoder metadata in one way or two, hoping to be useful, and I haven't seen any tool that took advantage of them
|
|
|
|
vtorri
|
2022-07-03 10:51:05
|
hello
|
|
2022-07-03 10:51:20
|
is it possible to disable the build of jxl_emcc.exe ?
|
|
|
Kleis Auke
|
|
vtorri
is it possible to disable the build of jxl_emcc.exe ?
|
|
2022-07-03 11:37:55
|
https://github.com/libjxl/libjxl/commit/3171add7cf986934d15706e586720fdeb9de5f90
|
|
|
|
vtorri
|
2022-07-03 11:48:06
|
<@208917283693789185> and with cmake ?
|
|
|
Kleis Auke
|
|
vtorri
<@208917283693789185> and with cmake ?
|
|
2022-07-03 11:58:30
|
After that commit the `jxl_emcc` executable is no longer build (unless you target Emscripten and build without `-DJPEGXL_ENABLE_TOOLS=0`). Sorry for not being clear.
|
|
|
|
vtorri
|
2022-07-03 12:27:22
|
thank you
|
|
|
_wb_
|
2022-07-03 12:50:57
|
We could invent an isobmf box for encoder version/settings, or invent an exif/xmp field for it...
|
|
2022-07-03 12:51:20
|
No guarantees that it will exist or be correct, of course
|
|
|
Traneptora
|
2022-07-03 04:04:24
|
you could also just have an extension in the codestream too
|
|
2022-07-03 04:04:26
|
if you wanted
|
|
|
_wb_
|
2022-07-03 09:45:00
|
That's also an option, but I guess a new box would be easier to parse
|
|
|
|
JendaLinda
|
2022-07-04 07:45:03
|
jxlinfo can tell if JXL is possibly lossless by checking if the original profile is used. What exactly is original profile? Does it mean that XYB color transformation was not used?
|
|
|
Traneptora
|
|
JendaLinda
jxlinfo can tell if JXL is possibly lossless by checking if the original profile is used. What exactly is original profile? Does it mean that XYB color transformation was not used?
|
|
2022-07-05 03:57:56
|
that's exactly correct
|
|
2022-07-05 03:58:06
|
"uses original profile" means XYB is not used
|
|
2022-07-05 03:58:18
|
"possibly lossless" in this case means it's encoded using settings that can be used in lossless mode
|
|
2022-07-05 03:58:30
|
most importantly, modular mode is used without XYB
|
|
2022-07-05 03:58:55
|
although it's not signalled whether the encoder modified any data when it did the encode, which is why it's *possibly* lossless
|
|
2022-07-05 03:59:46
|
if it's done with VarDCT but the original profile is used, that's still guarnateed lossy since VarDCT cannot be used for bitexact lossless mode
|
|
|
w
|
2022-07-05 12:22:52
|
has there been any decoder improvements since 0.6.1?
|
|
2022-07-05 12:23:17
|
i guess i can keep waiting until 1.0...
|
|
|
Traneptora
|
|
w
has there been any decoder improvements since 0.6.1?
|
|
2022-07-05 05:58:54
|
pretty sure it's much faster now than it was
|
|
2022-07-05 05:59:00
|
the API is a lot better, I can say that for certain
|
|
|
Pashi
|
2022-07-06 05:30:47
|
"A new release needs to be maintained," says who? What? No it doesn't. I don't think anyone expects 0.6 to be maintained after 0.7 or 1.0 comes out. Seems like a terrible excuse. Seems like a very bad idea to wait so long without making a release.
|
|
2022-07-06 05:33:28
|
All that people want right now is a good reliable decoder library that satisfies all of the needs of common web browsers (probably also things like progressive decoding and lqip)
|
|
2022-07-06 05:34:12
|
The decoder is more important than the encoder as far as adoption goes right now, at least at this point.
|
|