В сообщении от Tuesday 24 March 2020 20:35:55 Phyllis Smith написал(а):
Andrew, GG writes here: This is weird. I have looked into this and Little Endian / png / swapping in ffmpeg, libpng. see libpng16-src pnginfo.h, no endian or swap or relevant order params. see ffmpeg-4.2 libavcodec/pngdec.c:618 decode_idat_chunk, only 16be formats.
Well, _on BE machine_, it seems, there will be no need to call this. But I'm on little x86.
Little Endian format is not supported in ffmpg. It is not in any png.h header data. It only seems to be a user specified transform option. In other words, you have to tell it not to use the default of big endian (network byte order). Since this only generates the possibility of a fail, I think that the best idea is to remove it as a possibility. Perhaps you should investigate why it is the default on the machine you are using. I do not see any way it could be normally generated using libpng16 source (the current version used by all os vendors).
I take this code from gimp-2.10 git sources, this works for me. ORDER of calls is important. https://github.com/GNOME/gimp/blob/mainline/plug-ins/common/file-png.c around lines 1823-1828: if (text) png_set_text (pp, info, text, 1); png_write_info (pp, info); if (G_BYTE_ORDER == G_LITTLE_ENDIAN) png_set_swap (pp); Try to save 16 bpp PNG with current git, and with this fix. See the difference :/
On Tue, Mar 24, 2020 at 6:13 AM Andrew Randrianasulu < [email protected]> wrote:
Sorry, I apparently send wrong patch - 16 bit pngs were still broken.
I scratched my head a lot (because it was working!) and realized I swapped order of calls!
diff relative to commit 8c43913b9f18a3856bbff826aef96587a32f0470
diff --git a/cinelerra-5.1/cinelerra/filepng.C b/cinelerra-5.1/cinelerra/filepng.C index 4df95f1e..c2e1cf6c 100644 --- a/cinelerra-5.1/cinelerra/filepng.C +++ b/cinelerra-5.1/cinelerra/filepng.C @@ -229,9 +229,9 @@ int FilePNG::write_frame(VFrame *frame, VFrame *data, FrameWriterUnit *unit) asset->png_use_alpha ? PNG_COLOR_TYPE_RGB_ALPHA : PNG_COLOR_TYPE_RGB, PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT); // does not work (gg 2020/03/17 libpng16 fc31) + png_write_info(png_ptr, info_ptr); if( asset->png_depth == 16 && BC_Resources::little_endian ) png_set_swap(png_ptr); - png_write_info(png_ptr, info_ptr); png_write_image(png_ptr, output_frame->get_rows()); png_write_end(png_ptr, info_ptr); result = 0;
this way it SHOULD work .... Tested!
Also, hint for ccache: in .ccache/ccache.conf set for maximum compression
compression = true compression_level = 8 -- Cin mailing list [email protected] https://lists.cinelerra-gg.org/mailman/listinfo/cin