Coverage Report

Created: 2024-05-20 07:14

/src/skia/src/codec/SkImageGenerator_FromEncoded.cpp
Line
Count
Source (jump to first uncovered line)
1
/*
2
 * Copyright 2023 Google LLC
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
8
#include "include/codec/SkCodec.h"
9
#include "include/core/SkAlphaType.h"
10
#include "include/core/SkData.h"
11
#include "include/core/SkGraphics.h"
12
#include "include/core/SkImage.h"
13
#include "include/core/SkImageGenerator.h"
14
#include "include/core/SkRefCnt.h"
15
#include "include/core/SkTypes.h"
16
#include "src/codec/SkCodecImageGenerator.h"
17
#include "src/image/SkImageGeneratorPriv.h"
18
19
#include <memory>
20
#include <optional>
21
#include <utility>
22
23
static SkGraphics::ImageGeneratorFromEncodedDataFactory gFactory;
24
25
SkGraphics::ImageGeneratorFromEncodedDataFactory
26
SkGraphics::SetImageGeneratorFromEncodedDataFactory(ImageGeneratorFromEncodedDataFactory factory)
27
0
{
28
0
    ImageGeneratorFromEncodedDataFactory prev = gFactory;
29
0
    gFactory = factory;
30
0
    return prev;
31
0
}
32
33
namespace SkImageGenerators {
34
35
std::unique_ptr<SkImageGenerator> MakeFromEncoded(sk_sp<SkData> data,
36
124k
                                                  std::optional<SkAlphaType> at) {
37
124k
    if (!data || at == kOpaque_SkAlphaType) {
38
0
        return nullptr;
39
0
    }
40
124k
    if (gFactory) {
41
0
        if (std::unique_ptr<SkImageGenerator> generator = gFactory(data)) {
42
0
            return generator;
43
0
        }
44
0
    }
45
124k
    return SkCodecImageGenerator::MakeFromEncodedCodec(std::move(data), at);
46
124k
}
47
48
}  // namespace SkImageGenerators
49
50
namespace SkImages {
51
52
sk_sp<SkImage> DeferredFromEncodedData(sk_sp<SkData> encoded,
53
420k
                                       std::optional<SkAlphaType> alphaType) {
54
420k
    if (nullptr == encoded || encoded->isEmpty()) {
55
295k
        return nullptr;
56
295k
    }
57
124k
    return DeferredFromGenerator(SkImageGenerators::MakeFromEncoded(std::move(encoded), alphaType));
58
420k
}
59
60
}  // namespace SkImages
61
62
namespace SkCodecs {
63
64
0
sk_sp<SkImage> DeferredImage(std::unique_ptr<SkCodec> codec, std::optional<SkAlphaType> alphaType) {
65
0
    return SkImages::DeferredFromGenerator(
66
0
            SkCodecImageGenerator::MakeFromCodec(std::move(codec), alphaType));
67
0
}
68
69
}  // namespace SkCodecs