summaryrefslogtreecommitdiffstats
path: root/image/imgIEncoder.idl
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--image/imgIEncoder.idl146
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();
+};