From 5f8de423f190bbb79a62f804151bc24824fa32d8 Mon Sep 17 00:00:00 2001 From: "Matt A. Tobin" Date: Fri, 2 Feb 2018 04:16:08 -0500 Subject: Add m-esr52 at 52.6.0 --- dom/canvas/ImageBitmapUtils.h | 99 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 99 insertions(+) create mode 100644 dom/canvas/ImageBitmapUtils.h (limited to 'dom/canvas/ImageBitmapUtils.h') diff --git a/dom/canvas/ImageBitmapUtils.h b/dom/canvas/ImageBitmapUtils.h new file mode 100644 index 000000000..39be43d8a --- /dev/null +++ b/dom/canvas/ImageBitmapUtils.h @@ -0,0 +1,99 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim:set ts=2 sw=2 sts=2 et cindent: */ +/* 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/. */ + +#ifndef mozilla_dom_ImageBitmapUtils_h +#define mozilla_dom_ImageBitmapUtils_h + +#include "mozilla/UniquePtr.h" +#include "nsTArrayForwardDeclare.h" + +namespace mozilla { + +namespace layers { +class Image; +struct PlanarYCbCrData; +} + +namespace dom { + +struct ChannelPixelLayout; +template class Sequence; + +typedef nsTArray ImagePixelLayout; + +/* + * This function creates an ImagePixelLayout object which describes the + * default layout of the given ImageBitmapFormat with the given width, height + * and stride. + */ +UniquePtr +CreateDefaultPixelLayout(ImageBitmapFormat aFormat, + uint32_t aWidth, uint32_t aHeight, uint32_t aStride); + +/* + * This function extracts information from the aImage parameter to customize + * the ImagePixelLayout object, that is, this function creates a customized + * ImagePixelLayout object which exactly describes the pixel layout of the + * given aImage. + */ +UniquePtr +CreatePixelLayoutFromPlanarYCbCrData(const layers::PlanarYCbCrData* aData); + +/* + * Get the number of channels of the given ImageBitmapFormat. + */ +uint8_t +GetChannelCountOfImageFormat(ImageBitmapFormat aFormat); + +/* + * Get the needed buffer size to store the image data in the given + * ImageBitmapFormat with the given width and height. + */ +uint32_t +CalculateImageBufferSize(ImageBitmapFormat aFormat, + uint32_t aWidth, uint32_t aHeight); + +/* + * This function always copies the image data in _aSrcBuffer_ into _aDstBuffer_ + * and it also performs color conversion if the _aSrcFormat_ and the + * _aDstFormat_ are different. + * + * The source image is stored in the _aSrcBuffer_ and the corresponding pixel + * layout is described by the _aSrcLayout_. + * + * The copied and converted image will be stored in the _aDstBuffer_, which + * should be allocated with enough size before invoking this function and the + * needed size could be found by the CalculateImageBufferSize() method. + * + * The returned ImagePixelLayout object describes the pixel layout of the result + * image and will be null if on failure. + */ +UniquePtr +CopyAndConvertImageData(ImageBitmapFormat aSrcFormat, + const uint8_t* aSrcBuffer, + const ImagePixelLayout* aSrcLayout, + ImageBitmapFormat aDstFormat, + uint8_t* aDstBuffer); + +/* + * This function tries to find the best ImageBitmapFormat, from the aCandiates, + * which can be converted from the aSrcFormat. The algorithm now merely returns + * the FIRST one, from the aCandidates, which can be converted from the + * aSrcFormat. + * + * TODO: The algorithm should be updated after we implement optimizations for + * different platforms (different kinds of layers::Image), considering + * that some conversion might be cheaper through hardware. + */ +ImageBitmapFormat +FindBestMatchingFromat(ImageBitmapFormat aSrcFormat, + const Sequence& aCandidates); + +} // namespace dom +} // namespace mozilla + + +#endif // mozilla_dom_ImageBitmapUtils_h -- cgit v1.2.3