xref: /aosp_15_r20/external/skia/tools/HashAndEncode.h (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1*c8dee2aaSAndroid Build Coastguard Worker // Copyright 2019 Google LLC.
2*c8dee2aaSAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be found in the LICENSE file.
3*c8dee2aaSAndroid Build Coastguard Worker 
4*c8dee2aaSAndroid Build Coastguard Worker #pragma once
5*c8dee2aaSAndroid Build Coastguard Worker 
6*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkBitmap.h"
7*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkStream.h"
8*c8dee2aaSAndroid Build Coastguard Worker #include "tools/flags/CommandLineFlags.h"
9*c8dee2aaSAndroid Build Coastguard Worker 
10*c8dee2aaSAndroid Build Coastguard Worker // HashAndEncode transforms any SkBitmap into a standard format, currently
11*c8dee2aaSAndroid Build Coastguard Worker // 16-bit unpremul RGBA in the Rec. 2020 color space.  This lets us compare
12*c8dee2aaSAndroid Build Coastguard Worker // images from different backends or configurations, using feedHash() for
13*c8dee2aaSAndroid Build Coastguard Worker // direct content-based hashing, or encodePNG() for visual comparison.
14*c8dee2aaSAndroid Build Coastguard Worker class HashAndEncode {
15*c8dee2aaSAndroid Build Coastguard Worker public:
16*c8dee2aaSAndroid Build Coastguard Worker     explicit HashAndEncode(const SkBitmap&);
17*c8dee2aaSAndroid Build Coastguard Worker 
18*c8dee2aaSAndroid Build Coastguard Worker     // Feed uncompressed pixel data into a hash function like MD5.
19*c8dee2aaSAndroid Build Coastguard Worker     void feedHash(SkWStream*) const;
20*c8dee2aaSAndroid Build Coastguard Worker 
21*c8dee2aaSAndroid Build Coastguard Worker     // Encode pixels as a PNG in our standard format, with md5 and key/properties as metadata.
22*c8dee2aaSAndroid Build Coastguard Worker     bool encodePNG(SkWStream*,
23*c8dee2aaSAndroid Build Coastguard Worker                    const char* md5,
24*c8dee2aaSAndroid Build Coastguard Worker                    CommandLineFlags::StringArray key,
25*c8dee2aaSAndroid Build Coastguard Worker                    CommandLineFlags::StringArray properties) const;
26*c8dee2aaSAndroid Build Coastguard Worker 
27*c8dee2aaSAndroid Build Coastguard Worker private:
28*c8dee2aaSAndroid Build Coastguard Worker     const SkISize               fSize;
29*c8dee2aaSAndroid Build Coastguard Worker     std::unique_ptr<uint64_t[]> fPixels;  // In our standard format mentioned above.
30*c8dee2aaSAndroid Build Coastguard Worker };
31*c8dee2aaSAndroid Build Coastguard Worker 
32