tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

ImageDataSerializer.h (4233B)


      1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
      2 /* vim: set ts=8 sts=2 et sw=2 tw=80: */
      3 /* This Source Code Form is subject to the terms of the Mozilla Public
      4 * License, v. 2.0. If a copy of the MPL was not distributed with this
      5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
      6 
      7 #ifndef GFX_LAYERS_BLOBSURFACE_H
      8 #define GFX_LAYERS_BLOBSURFACE_H
      9 
     10 #include <stdint.h>                         // for uint8_t, uint32_t
     11 #include "mozilla/Attributes.h"             // for MOZ_STACK_CLASS
     12 #include "mozilla/gfx/Point.h"              // for IntSize
     13 #include "mozilla/gfx/Rect.h"               // for IntRect
     14 #include "mozilla/gfx/Types.h"              // for SurfaceFormat
     15 #include "mozilla/layers/LayersSurfaces.h"  // for SurfaceDescriptor
     16 
     17 namespace mozilla {
     18 namespace gfx {
     19 class DataSourceSurface;
     20 class DrawTarget;
     21 }  // namespace gfx
     22 }  // namespace mozilla
     23 
     24 namespace mozilla {
     25 namespace layers {
     26 
     27 namespace ImageDataSerializer {
     28 
     29 // RGB
     30 
     31 int32_t ComputeRGBStride(gfx::SurfaceFormat aFormat, int32_t aWidth);
     32 
     33 int32_t GetRGBStride(const RGBDescriptor& aDescriptor);
     34 
     35 uint32_t ComputeRGBBufferSize(gfx::IntSize aSize, gfx::SurfaceFormat aFormat);
     36 
     37 // YCbCr
     38 
     39 /// This function is meant as a helper to know how much shared memory we need
     40 /// to allocate in a shmem in order to place a shared YCbCr image blob of
     41 /// given dimensions.
     42 uint32_t ComputeYCbCrBufferSize(const gfx::IntSize& aYSize, int32_t aYStride,
     43                                const gfx::IntSize& aCbCrSize,
     44                                int32_t aCbCrStride);
     45 uint32_t ComputeYCbCrBufferSize(const gfx::IntSize& aYSize, int32_t aYStride,
     46                                const gfx::IntSize& aCbCrSize,
     47                                int32_t aCbCrStride, uint32_t aYOffset,
     48                                uint32_t aCbOffset, uint32_t aCrOffset);
     49 uint32_t ComputeYCbCrBufferSize(uint32_t aBufferSize);
     50 
     51 void ComputeYCbCrOffsets(int32_t yStride, int32_t yHeight, int32_t cbCrStride,
     52                         int32_t cbCrHeight, uint32_t& outYOffset,
     53                         uint32_t& outCbOffset, uint32_t& outCrOffset);
     54 
     55 gfx::SurfaceFormat FormatFromBufferDescriptor(
     56    const BufferDescriptor& aDescriptor);
     57 
     58 gfx::IntSize SizeFromBufferDescriptor(const BufferDescriptor& aDescriptor);
     59 
     60 gfx::IntRect RectFromBufferDescriptor(const BufferDescriptor& aDescriptor);
     61 
     62 Maybe<gfx::IntSize> YSizeFromBufferDescriptor(
     63    const BufferDescriptor& aDescriptor);
     64 
     65 Maybe<gfx::IntSize> CbCrSizeFromBufferDescriptor(
     66    const BufferDescriptor& aDescriptor);
     67 
     68 Maybe<int32_t> YStrideFromBufferDescriptor(const BufferDescriptor& aDescriptor);
     69 
     70 Maybe<int32_t> CbCrStrideFromBufferDescriptor(
     71    const BufferDescriptor& aDescriptor);
     72 
     73 Maybe<gfx::YUVColorSpace> YUVColorSpaceFromBufferDescriptor(
     74    const BufferDescriptor& aDescriptor);
     75 
     76 Maybe<gfx::ColorDepth> ColorDepthFromBufferDescriptor(
     77    const BufferDescriptor& aDescriptor);
     78 
     79 Maybe<gfx::ColorRange> ColorRangeFromBufferDescriptor(
     80    const BufferDescriptor& aDescriptor);
     81 
     82 Maybe<StereoMode> StereoModeFromBufferDescriptor(
     83    const BufferDescriptor& aDescriptor);
     84 
     85 Maybe<gfx::ChromaSubsampling> ChromaSubsamplingFromBufferDescriptor(
     86    const BufferDescriptor& aDescriptor);
     87 
     88 uint8_t* GetYChannel(uint8_t* aBuffer, const YCbCrDescriptor& aDescriptor);
     89 
     90 uint8_t* GetCbChannel(uint8_t* aBuffer, const YCbCrDescriptor& aDescriptor);
     91 
     92 uint8_t* GetCrChannel(uint8_t* aBuffer, const YCbCrDescriptor& aDescriptor);
     93 
     94 already_AddRefed<gfx::DataSourceSurface> DataSourceSurfaceFromYCbCrDescriptor(
     95    uint8_t* aBuffer, const YCbCrDescriptor& aDescriptor,
     96    gfx::DataSourceSurface* aSurface = nullptr);
     97 
     98 void ConvertAndScaleFromYCbCrDescriptor(uint8_t* aBuffer,
     99                                        const YCbCrDescriptor& aDescriptor,
    100                                        const gfx::SurfaceFormat& aDestFormat,
    101                                        const gfx::IntSize& aDestSize,
    102                                        unsigned char* aDestBuffer,
    103                                        int32_t aStride);
    104 
    105 gfx::IntSize GetCroppedCbCrSize(const YCbCrDescriptor& aDescriptor);
    106 
    107 }  // namespace ImageDataSerializer
    108 
    109 }  // namespace layers
    110 }  // namespace mozilla
    111 
    112 #endif