Coverage Report

Created: 2024-09-14 07:19

/src/skia/include/private/SkJpegMetadataDecoder.h
Line
Count
Source
1
/*
2
 * Copyright 2013 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
8
#ifndef SkJpegMetadataDecoder_DEFINED
9
#define SkJpegMetadataDecoder_DEFINED
10
11
#include "include/core/SkData.h"
12
#include "include/core/SkRefCnt.h"
13
#include "include/core/SkTypes.h"
14
15
#include <memory>
16
#include <vector>
17
18
struct SkGainmapInfo;
19
20
/**
21
 * An interface that can be used to extract metadata from an encoded JPEG file.
22
 */
23
class SK_API SkJpegMetadataDecoder {
24
public:
25
11.1k
    SkJpegMetadataDecoder() {}
26
11.1k
    virtual ~SkJpegMetadataDecoder() {}
27
28
    SkJpegMetadataDecoder(const SkJpegMetadataDecoder&) = delete;
29
    SkJpegMetadataDecoder& operator=(const SkJpegMetadataDecoder&) = delete;
30
31
    /**
32
     * A segment from a JPEG file. This is usually populated from a jpeg_marker_struct.
33
     */
34
    struct SK_API Segment {
35
19.4k
        Segment(uint8_t marker, sk_sp<SkData> data) : fMarker(marker), fData(std::move(data)) {}
36
37
        // The segment's marker.
38
        uint8_t fMarker = 0;
39
40
        // The segment's parameters (not including the marker and parameter length).
41
        sk_sp<SkData> fData;
42
    };
43
44
    /**
45
     * Create metadata for the specified segments from a JPEG file's header (defined as all segments
46
     * before the first StartOfScan). This may return nullptr.
47
     */
48
    static std::unique_ptr<SkJpegMetadataDecoder> Make(std::vector<Segment> headerSegments);
49
50
    /**
51
     * Create metadata for the specified encoded JPEG file. This may return nullptr.
52
     */
53
    static std::unique_ptr<SkJpegMetadataDecoder> Make(sk_sp<SkData> data);
54
55
    /**
56
     * Return the Exif data attached to the image (if any) and nullptr otherwise. If |copyData| is
57
     * false, then the returned SkData may directly reference the data provided when this object was
58
     * created.
59
     */
60
    virtual sk_sp<SkData> getExifMetadata(bool copyData) const = 0;
61
62
    /**
63
     * Return the ICC profile of the image if any, and nullptr otherwise. If |copyData| is false,
64
     * then the returned SkData may directly reference the data provided when this object was
65
     * created.
66
     */
67
    virtual sk_sp<SkData> getICCProfileData(bool copyData) const = 0;
68
69
    /**
70
     * Return the ISO 21496-1 metadata, if any, and nullptr otherwise. If |copyData| is false,
71
     * then the returned SkData may directly reference the data provided when this object was
72
     * created.
73
     */
74
    virtual sk_sp<SkData> getISOGainmapMetadata(bool copyData) const = 0;
75
76
    /**
77
     * Return true if there is a possibility that this image contains a gainmap image.
78
     */
79
    virtual bool mightHaveGainmapImage() const = 0;
80
81
    /**
82
     * Given a JPEG encoded image |baseImageData|, return in |outGainmapImageData| the JPEG encoded
83
     * gainmap image and return in |outGainmapInfo| its gainmap rendering parameters. Return true if
84
     * both output variables were successfully populated, otherwise return false.
85
     */
86
    virtual bool findGainmapImage(sk_sp<SkData> baseImageData,
87
                                  sk_sp<SkData>& outGainmapImagedata,
88
                                  SkGainmapInfo& outGainmapInfo) = 0;
89
};
90
91
#endif