Bug 1444940 [wpt PR 9917] - Writable streams: test changes to abort() under error...
[gecko.git] / gfx / 2d / ImageScaling.h
blob03ba518595c21ec38f57549a23efc23dba8e18e3
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/. */
7 #ifndef _MOZILLA_GFX_IMAGESCALING_H
8 #define _MOZILLA_GFX_IMAGESCALING_H
10 #include "Types.h"
12 #include <vector>
13 #include "Point.h"
15 namespace mozilla {
16 namespace gfx {
18 class ImageHalfScaler
20 public:
21 ImageHalfScaler(uint8_t *aData, int32_t aStride, const IntSize &aSize)
22 : mOrigData(aData), mOrigStride(aStride), mOrigSize(aSize)
23 , mDataStorage(nullptr)
27 ~ImageHalfScaler()
29 delete [] mDataStorage;
32 void ScaleForSize(const IntSize &aSize);
34 uint8_t *GetScaledData() const { return mData; }
35 IntSize GetSize() const { return mSize; }
36 uint32_t GetStride() const { return mStride; }
38 private:
39 void HalfImage2D(uint8_t *aSource, int32_t aSourceStride, const IntSize &aSourceSize,
40 uint8_t *aDest, uint32_t aDestStride);
41 void HalfImageVertical(uint8_t *aSource, int32_t aSourceStride, const IntSize &aSourceSize,
42 uint8_t *aDest, uint32_t aDestStride);
43 void HalfImageHorizontal(uint8_t *aSource, int32_t aSourceStride, const IntSize &aSourceSize,
44 uint8_t *aDest, uint32_t aDestStride);
46 // This is our SSE2 scaling function. Our destination must always be 16-byte
47 // aligned and use a 16-byte aligned stride.
48 void HalfImage2D_SSE2(uint8_t *aSource, int32_t aSourceStride, const IntSize &aSourceSize,
49 uint8_t *aDest, uint32_t aDestStride);
50 void HalfImageVertical_SSE2(uint8_t *aSource, int32_t aSourceStride, const IntSize &aSourceSize,
51 uint8_t *aDest, uint32_t aDestStride);
52 void HalfImageHorizontal_SSE2(uint8_t *aSource, int32_t aSourceStride, const IntSize &aSourceSize,
53 uint8_t *aDest, uint32_t aDestStride);
55 void HalfImage2D_C(uint8_t *aSource, int32_t aSourceStride, const IntSize &aSourceSize,
56 uint8_t *aDest, uint32_t aDestStride);
57 void HalfImageVertical_C(uint8_t *aSource, int32_t aSourceStride, const IntSize &aSourceSize,
58 uint8_t *aDest, uint32_t aDestStride);
59 void HalfImageHorizontal_C(uint8_t *aSource, int32_t aSourceStride, const IntSize &aSourceSize,
60 uint8_t *aDest, uint32_t aDestStride);
62 uint8_t *mOrigData;
63 int32_t mOrigStride;
64 IntSize mOrigSize;
66 uint8_t *mDataStorage;
67 // Guaranteed 16-byte aligned
68 uint8_t *mData;
69 IntSize mSize;
70 // Guaranteed 16-byte aligned
71 uint32_t mStride;
74 } // namespace gfx
75 } // namespace mozilla
77 #endif