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