/* * Copyright 2015 Google Inc. * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #ifndef SkSampledCodec_DEFINED #define SkSampledCodec_DEFINED #include "SkAndroidCodec.h" #include "SkCodec.h" /** * This class implements the functionality of SkAndroidCodec. Scaling will * be provided by sampling if it cannot be provided by fCodec. */ class SkSampledCodec : public SkAndroidCodec { public: explicit SkSampledCodec(SkCodec*); virtual ~SkSampledCodec() {} protected: SkEncodedFormat onGetEncodedFormat() const override { return fCodec->getEncodedFormat(); }; SkISize onGetSampledDimensions(int sampleSize) const override; bool onGetSupportedSubset(SkIRect* desiredSubset) const override { return true; } SkCodec::Result onGetAndroidPixels(const SkImageInfo& info, void* pixels, size_t rowBytes, AndroidOptions& options) override; private: /** * This fulfills the same contract as onGetAndroidPixels(). * * We call this function from onGetAndroidPixels() if we have determined * that fCodec does not support the requested scale, and we need to * provide the scale by sampling. */ SkCodec::Result sampledDecode(const SkImageInfo& info, void* pixels, size_t rowBytes, AndroidOptions& options); SkAutoTDelete fCodec; typedef SkAndroidCodec INHERITED; }; #endif // SkSampledCodec_DEFINED