Coverage Report

Created: 2021-08-22 09:07

/src/skia/src/codec/SkSampledCodec.h
Line
Count
Source (jump to first uncovered line)
1
/*
2
 * Copyright 2015 Google Inc.
3
 *
4
 * Use of this source code is governed by a BSD-style license that can be
5
 * found in the LICENSE file.
6
 */
7
#ifndef SkSampledCodec_DEFINED
8
#define SkSampledCodec_DEFINED
9
10
#include "include/codec/SkAndroidCodec.h"
11
#include "include/codec/SkCodec.h"
12
13
/**
14
 *  This class implements the functionality of SkAndroidCodec.  Scaling will
15
 *  be provided by sampling if it cannot be provided by fCodec.
16
 */
17
class SkSampledCodec : public SkAndroidCodec {
18
public:
19
    explicit SkSampledCodec(SkCodec*);
20
21
0
    ~SkSampledCodec() override {}
22
23
protected:
24
25
    SkISize onGetSampledDimensions(int sampleSize) const override;
26
27
0
    bool onGetSupportedSubset(SkIRect* desiredSubset) const override { return true; }
28
29
    SkCodec::Result onGetAndroidPixels(const SkImageInfo& info, void* pixels, size_t rowBytes,
30
            const AndroidOptions& options) override;
31
32
private:
33
    /**
34
     *  Find the best way to account for native scaling.
35
     *
36
     *  Return a size that fCodec can scale to, and adjust sampleSize to finish scaling.
37
     *
38
     *  @param sampleSize As an input, the requested sample size.
39
     *                    As an output, sampling needed after letting fCodec
40
     *                    scale to the returned dimensions.
41
     *  @param nativeSampleSize Optional output parameter. Will be set to the
42
     *                          effective sample size done by fCodec.
43
     *  @return SkISize The size that fCodec should scale to.
44
     */
45
    SkISize accountForNativeScaling(int* sampleSize, int* nativeSampleSize = nullptr) const;
46
47
    /**
48
     *  This fulfills the same contract as onGetAndroidPixels().
49
     *
50
     *  We call this function from onGetAndroidPixels() if we have determined
51
     *  that fCodec does not support the requested scale, and we need to
52
     *  provide the scale by sampling.
53
     */
54
    SkCodec::Result sampledDecode(const SkImageInfo& info, void* pixels, size_t rowBytes,
55
            const AndroidOptions& options);
56
57
    using INHERITED = SkAndroidCodec;
58
};
59
#endif // SkSampledCodec_DEFINED