/* * Copyright 2016 Google Inc. * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #ifndef SkColorSpaceXform_A2B_DEFINED #define SkColorSpaceXform_A2B_DEFINED #include "SkArenaAlloc.h" #include "SkColorSpaceXform_Base.h" #include "SkColorSpace_Base.h" #include "SkRasterPipeline.h" class SkColorSpace_A2B; class SkColorSpace_XYZ; struct SkTableTransferFn { const float* fData; int fSize; }; class SkColorSpaceXform_A2B : public SkColorSpaceXform_Base { public: bool onApply(ColorFormat dstFormat, void* dst, ColorFormat srcFormat, const void* src, int count, SkAlphaType alphaType) const override; private: SkColorSpaceXform_A2B(SkColorSpace_A2B* srcSpace, SkColorSpace_XYZ* dstSpace); void addTransferFns(const SkColorSpaceTransferFn& fn, int channelCount); void addTransferFn(const SkColorSpaceTransferFn& fn, int channelIndex); void addTableFn(const SkTableTransferFn& table, int channelIndex); void addMatrix(const SkMatrix44& matrix); SkRasterPipeline fElementsPipeline; bool fLinearDstGamma; SkArenaAlloc fAlloc{128}; // TODO: tune? template T* copy(const T& val) { return fAlloc.make(val); } friend class SkColorSpaceXform_Base; }; #endif