Opened 9 years ago
Closed 11 days ago
#4829 closed defect (fixed)
Overflows (?) in xyz -> rgb conversion
Reported by: | Carl Eugen Hoyos | Owned by: | Niklas Haas <git@haasn.dev> |
---|---|---|---|
Priority: | normal | Component: | swscale |
Version: | git-master | Keywords: | xyz |
Cc: | Blocked By: | ||
Blocking: | Reproduced by developer: | no | |
Analyzed by developer: | no |
Description
http://thread.gmane.org/gmane.comp.video.ffmpeg.user/58666
The sample attached to ticket #4827 is in fact decoded fine (at least visually) by the native jpeg 2000 decoder but the colourspace conversion shows posterization artefacts.
This is also reproducible with the libopenjpeg decoder.
$ ffmpeg -i frm_000127.j2c out.png ffmpeg version N-74866-g0cdba4a Copyright (c) 2000-2015 the FFmpeg developers built with gcc 4.7 (SUSE Linux) configuration: --enable-gpl libavutil 54. 31.100 / 54. 31.100 libavcodec 56. 60.100 / 56. 60.100 libavformat 56. 40.101 / 56. 40.101 libavdevice 56. 4.100 / 56. 4.100 libavfilter 5. 40.101 / 5. 40.101 libswscale 3. 1.101 / 3. 1.101 libswresample 1. 2.101 / 1. 2.101 libpostproc 53. 3.100 / 53. 3.100 [jpeg2000 @ 0x33bd940] End mismatch 1 Last message repeated 4 times [jpeg2000 @ 0x33bd940] End mismatch 2 Last message repeated 1 times [jpeg2000 @ 0x33bd940] End mismatch 1 Last message repeated 28 times [jpeg2000 @ 0x33bd940] End mismatch 2 [jpeg2000 @ 0x33bd940] End mismatch 1 Last message repeated 19 times Input #0, j2k_pipe, from 'frm_000127.j2c': Duration: N/A, bitrate: N/A Stream #0:0: Video: jpeg2000 (JPEG 2000 digital cinema 2K), xyz12le, 2048x858, 25 tbr, 25 tbn, 25 tbc Output #0, image2, to 'out.png': Metadata: encoder : Lavf56.40.101 Stream #0:0: Video: png, rgb48be, 2048x858, q=2-31, 200 kb/s, 25 fps, 25 tbn, 25 tbc Metadata: encoder : Lavc56.60.100 png Stream mapping: Stream #0:0 -> #0:0 (jpeg2000 (native) -> png (native)) Press [q] to stop, [?] for help [jpeg2000 @ 0x3655fa0] End mismatch 1 Last message repeated 4 times [jpeg2000 @ 0x3655fa0] End mismatch 2 Last message repeated 1 times [jpeg2000 @ 0x3655fa0] End mismatch 1 Last message repeated 28 times [jpeg2000 @ 0x3655fa0] End mismatch 2 [jpeg2000 @ 0x3655fa0] End mismatch 1 Last message repeated 19 times frame= 1 fps=0.8 q=-0.0 Lsize=N/A time=00:00:00.04 bitrate=N/A video:5354kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown
$ ffmpeg -vcodec libopenjpeg -pix_fmt xyz12le -i frm_000127.j2c out.png ffmpeg version N-74866-g0cdba4a Copyright (c) 2000-2015 the FFmpeg developers built with gcc 4.7 (SUSE Linux) configuration: --enable-gpl --enable-libopenjpeg libavutil 54. 31.100 / 54. 31.100 libavcodec 56. 60.100 / 56. 60.100 libavformat 56. 40.101 / 56. 40.101 libavdevice 56. 4.100 / 56. 4.100 libavfilter 5. 40.101 / 5. 40.101 libswscale 3. 1.101 / 3. 1.101 libswresample 1. 2.101 / 1. 2.101 libpostproc 53. 3.100 / 53. 3.100 Input #0, j2k_pipe, from 'frm_000127.j2c': Duration: N/A, bitrate: N/A Stream #0:0: Video: jpeg2000, xyz12le, 2048x858, 25 tbr, 25 tbn, 25 tbc Output #0, image2, to 'out.png': Metadata: encoder : Lavf56.40.101 Stream #0:0: Video: png, rgb48be, 2048x858, q=2-31, 200 kb/s, 25 fps, 25 tbn, 25 tbc Metadata: encoder : Lavc56.60.100 png Stream mapping: Stream #0:0 -> #0:0 (jpeg2000 (libopenjpeg) -> png (native)) Press [q] to stop, [?] for help frame= 1 fps=0.0 q=-0.0 Lsize=N/A time=00:00:00.04 bitrate=N/A video:5354kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown
I don't know if this ticket is related to ticket #3643.
Change History (11)
comment:1 by , 9 years ago
comment:2 by , 9 years ago
comment:3 by , 4 years ago
Status: | new → open |
---|
in fact decoded fine (at least visually)
Oh really? The only way to preserve the xyz12le stuff is rawvideo (see last comment in #1279) and it is not lossless compared to -c:v libopenjpeg. I.e. file produced by (-pixel_format xyz12le is needed for libopenjpeg before https://github.com/uclouvain/openjpeg/pull/1200 is applied):
ffmpeg -pixel_format xyz12le -c:v libopenjpeg -i frm_000127.j2c -f rawvideo out
is not the same as:
ffmpeg -i frm_000127.j2c -f rawvideo out
has off-by-one error somewhere that breaks every 32 byte if you compare in hex diff. It is kind of hard for me to say what decoder is correct.
a png with massive artefacts (posterization) in the top left
So what? Of course, the artifacts can be in original xyz12le file.
comment:4 by , 4 years ago
So what? Of course, the artifacts can be in original xyz12le file.
And it looks like it is possible. Here in leaked "My little pony" in DNxHD 175x (magnet magnet:?xt=urn:btih:215babe2205786dbc77dd58607fc4490302112c3 /Movie folder) you have the same Posterization in the very same scene even though the file is 10 bit SDR with very high quality.
follow-up: 9 comment:6 by , 3 years ago
has off-by-one error somewhere that breaks every 32 byte if you compare in hex diff
I learnt that lossy jpeg 2000 is not required to be decoded bitperfectly by the standard itself with different jpeg 2000 decoders, in fact that is the case with kakadu vs openjpeg vs our jpeg2000. Sigh. Faceplam. https://github.com/uclouvain/openjpeg/issues/1420
comment:8 by , 3 weeks ago
comment:9 by , 3 weeks ago
Replying to Balling:
has off-by-one error somewhere that breaks every 32 byte if you compare in hex diff
I learnt that lossy jpeg 2000 is not required to be decoded bitperfectly by the standard itself with different jpeg 2000 decoders, in fact that is the case with kakadu vs openjpeg vs our jpeg2000. Sigh. Faceplam. https://github.com/uclouvain/openjpeg/issues/1420
That is no longer true. Since genius patch -flags +bitexact can be used to actually output true lossy decoding. 82467b635efced67c1767cb810af1f3c31a2e493
comment:10 by , 2 weeks ago
Re mailing list:
There is a chance we will move to XYZ media soon, since it is the only level left after PQ 12 bit 8K video. So better to hardcode it, as it will be faster and optimised by compilers better, maybe even -march=native and x86_64-v3 will work cute, see this: https://github.com/zhongfly/mpv-winbuild/releases/tag/2024-12-21-d827019 (ffmpeg-x86_64-v3-git-095f8038f.7z, nice)
comment:11 by , 11 days ago
Owner: | set to |
---|---|
Resolution: | → fixed |
Status: | open → closed |
In af6d52ee/ffmpeg:
The sample attached in ticket looks fine to me, do you have some other samples?