blob: 185ec721842e3c48cfa06b4d527b01ad772944ea [file] [log] [blame]
/*
* Copyright 2025 Google LLC
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#ifndef SkCapture_DEFINED
#define SkCapture_DEFINED
#include "include/core/SkAlphaType.h"
#include "include/core/SkRefCnt.h"
#include "include/private/base/SkTArray.h"
#include <optional>
class SkData;
class SkImage;
class SkPicture;
class SkCanvas;
class SkCaptureCanvas;
// TODO(b/412351769): Make this class public.
class SkCapture : public SkRefCnt {
public:
struct Metadata {
uint32_t version;
uint32_t numPictures;
};
static sk_sp<SkCapture> MakeFromData(sk_sp<SkData>);
// TODO: instead of a make from pictures factory, the CaptureManager might just need hooks into
// the to build it over time. Move the SkPictures (fPictures) here and just maintain that in one
// place.
static sk_sp<SkCapture> MakeFromPictures(skia_private::TArray<sk_sp<SkPicture>>);
sk_sp<SkData> serializeCapture();
// TODO: Pictures being grabbed by index is not intuitive and leave the capture disorganized.
// This should be deleted once SkPictures are organized by Surface and grouped by Recording.
sk_sp<SkPicture> getPicture(int i) const;
Metadata getMetadata() const;
private:
// TODO: add more awareness of the image meta data to a SkCaptureContext object
static sk_sp<SkData> serializeImageProc(SkImage* img, void* ctx);
static sk_sp<SkImage> deserializeImageProc(sk_sp<SkData>,
std::optional<SkAlphaType>, void* ctx);
Metadata fMetadata;
//TODO(b/412351769): Replace pictures with SkCapturePicture structs that also include
// picture metadata
skia_private::TArray<sk_sp<SkPicture>> fPictures;
static const uint32_t kVersion = 0; // Until this version is 1 or greater, active development
// will make this unstable.
};
#endif //SkCapture_DEFINED