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
21 ImageHalfScaler(uint8_t *aData
, int32_t aStride
, const IntSize
&aSize
)
22 : mOrigData(aData
), mOrigStride(aStride
), mOrigSize(aSize
)
23 , mDataStorage(nullptr)
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
; }
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
);
66 uint8_t *mDataStorage
;
67 // Guaranteed 16-byte aligned
70 // Guaranteed 16-byte aligned
75 } // namespace mozilla