diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 17:32:43 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 17:32:43 +0000 |
commit | 6bf0a5cb5034a7e684dcc3500e841785237ce2dd (patch) | |
tree | a68f146d7fa01f0134297619fbe7e33db084e0aa /image/imgIEncoder.idl | |
parent | Initial commit. (diff) | |
download | thunderbird-6bf0a5cb5034a7e684dcc3500e841785237ce2dd.tar.xz thunderbird-6bf0a5cb5034a7e684dcc3500e841785237ce2dd.zip |
Adding upstream version 1:115.7.0.upstream/1%115.7.0upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to '')
-rw-r--r-- | image/imgIEncoder.idl | 146 |
1 files changed, 146 insertions, 0 deletions
diff --git a/image/imgIEncoder.idl b/image/imgIEncoder.idl new file mode 100644 index 0000000000..c458b9cf4c --- /dev/null +++ b/image/imgIEncoder.idl @@ -0,0 +1,146 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#include "nsISupports.idl" +#include "nsIAsyncInputStream.idl" +#include "nsIEventTarget.idl" + +/** + * imgIEncoder interface + */ +[scriptable, builtinclass, uuid(4baa2d6e-fee7-42df-ae3f-5fbebc0c267c)] +interface imgIEncoder : nsIAsyncInputStream +{ + // Possible values for outputOptions. Multiple values are semicolon-separated. + // + // PNG: + // ---- + // transparency=[yes|no|none] -- default: "yes" + // Overrides default from input format. "no" and "none" are equivalent. + // png-zlib-level=[0-9] -- default: "3" + // Overrides default from compression level for zlib. + // png-filter=[no_filters|none|sub|up|avg|paeth|fast|all] -- default: "sub" + // Overrides default filter. + // + // + // APNG: + // ----- + // The following options can be used with startImageEncode(): + // + // transparency=[yes|no|none] -- default: "yes" + // Overrides default from input format. "no" and "none" are equivalent. + // skipfirstframe=[yes|no] -- default: "no" + // Controls display of the first frame in animations. PNG-only clients + // always display the first frame (and only that frame). + // frames=# -- default: "1" + // Total number of frames in the image. The first frame, even if skipped, + // is always included in the count. + // plays=# -- default: "0" + // Number of times to play the animation sequence. "0" will repeat + // forever. + // + // The following options can be used for each frame, with addImageFrame(): + // + // transparency=[yes|no|none] -- default: "yes" + // Overrides default from input format. "no" and "none" are equivalent. + // delay=# -- default: "500" + // Number of milliseconds to display the frame, before moving to the next + // frame. + // dispose=[none|background|previous] -- default: "none" + // What to do with the image's canvas before rendering the next frame. + // See APNG spec. + // blend=[source|over] -- default: "source" + // How to render the new frame on the canvas. See APNG spec. + // xoffset=# -- default: "0" + // yoffset=# -- default: "0" + // Where to draw the frame, relative to the canvas. + // + // + // JPEG: + // ----- + // + // quality=# -- default: "92" + // Quality of compression, 0-100 (worst-best). + // Quality >= 90 prevents down-sampling of the color channels. + // + // + // WEBP: + // ----- + // + // quality=# -- default: "92" + // Quality of compression, 0-100 (worst-best). + + + // Possible values for input format (note that not all image formats + // support saving alpha channels): + + // Input is RGB each pixel is represented by three bytes: + // R, G, and B (in that order, regardless of host endianness) + const uint32_t INPUT_FORMAT_RGB = 0; + + // Input is RGB each pixel is represented by four bytes: + // R, G, and B (in that order, regardless of host endianness). + // POST-MULTIPLIED alpha us used (50% transparent red is 0xff000080) + const uint32_t INPUT_FORMAT_RGBA = 1; + + // Input is host-endian ARGB: On big-endian machines each pixel is therefore + // ARGB, and for little-endian machiens (Intel) each pixel is BGRA + // (This is used by canvas to match it's internal representation) + // + // PRE-MULTIPLIED alpha is used (That is, 50% transparent red is 0x80800000, + // not 0x80ff0000 + const uint32_t INPUT_FORMAT_HOSTARGB = 2; + + /* data - list of bytes in the format specified by inputFormat + * width - width in pixels + * height - height in pixels + * stride - number of bytes per row in the image + * Normally (width*3) or (width*4), depending on your input format, + * but some data uses padding at the end of each row, which would + * be extra. + * inputFormat - one of INPUT_FORMAT_* specifying the format of data + * outputOptions - semicolon-delimited list of name=value pairs that can + * give options to the output encoder. Options are encoder- + * specific. Just give empty string for default behavior. + */ + void initFromData([array, size_is(length), const] in uint8_t data, + in unsigned long length, + in uint32_t width, + in uint32_t height, + in uint32_t stride, + in uint32_t inputFormat, + in AString outputOptions); + + /* + * For encoding images which may contain multiple frames, the 1-shot + * initFromData() interface is too simplistic. The alternative is to + * use startImageEncode(), call addImageFrame() one or more times, and + * then finish initialization with endImageEncode(). + * + * The arguments are basically the same as in initFromData(). + */ + void startImageEncode(in uint32_t width, + in uint32_t height, + in uint32_t inputFormat, + in AString outputOptions); + + void addImageFrame( [array, size_is(length), const] in uint8_t data, + in unsigned long length, + in uint32_t width, + in uint32_t height, + in uint32_t stride, + in uint32_t frameFormat, + in AString frameOptions); + + void endImageEncode(); + + /* + * Sometimes an encoder can contain another encoder and direct access + * to its buffer is necessary. It is only safe to assume that the buffer + * returned from getImageBuffer() is of size equal to getImageBufferUsed(). + */ + [noscript] unsigned long getImageBufferUsed(); + [noscript] charPtr getImageBuffer(); +}; |