| /* | |
| * 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/core/SkSerialProcs.h" | |
| #include "include/private/SkTArray.h" | |
| #include <optional> | |
| class SkData; | |
| class SkImage; | |
| class SkPicture; | |
| class SkCanvas; | |
| class SkCaptureCanvas; | |
| /** | |
| * Binary Serialization Layout (.capt): | |
| * | |
| * +-----------------------------------------------------------------------------+ | |
| * | Magic Bytes 1 ('skia') | 4 Bytes (uint32_t) | | |
| * +-----------------------------------------------------------------------------+ | |
| * | Magic Bytes 2 ('capt') | 4 Bytes (uint32_t) | | |
| * +-----------------------------------------------------------------------------+ | |
| * | Version (kVersion) | 4 Bytes (uint32_t) | | |
| * +-----------------------------------------------------------------------------+ | |
| * | Asset Count (numAssets) | 4 Bytes (uint32_t) | | |
| * +-----------------------------------------------------------------------------+ | |
| * | RecordingCapture Count (numRecCaptures) | 4 Bytes (uint32_t) | | |
| * +=============================================================================+ | |
| * | ASSETS SECTION (N = numAssets) | | |
| * +-----------------------------------------------------------------------------+ | |
| * | Picture 0 Data Size | 4 Bytes (uint32_t) | | |
| * +-----------------------------------------------------------------------------+ | |
| * | Picture 0 Bytes | [Picture 0 Size] bytes | | |
| * +-----------------------------------------------------------------------------+ | |
| * | ... | | | |
| * +-----------------------------------------------------------------------------+ | |
| * | Picture N Data Size | 4 Bytes (uint32_t) | | |
| * +-----------------------------------------------------------------------------+ | |
| * | Picture N Bytes | [Picture N Size] bytes | | |
| * +=============================================================================+ | |
| * | TIMELINE SECTION (K = numRecCaptures) | | |
| * +-----------------------------------------------------------------------------+ | |
| * | Recording 0 Task Count (taskCount) | 4 Bytes (uint32_t) | | |
| * + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + | |
| * | Recording 0 Tasks (fAssetIndex) | taskCount * sizeof(DrawTask) | | |
| * +-----------------------------------------------------------------------------+ | |
| * | ... | | | |
| * +-----------------------------------------------------------------------------+ | |
| * | Recording K Task Count (taskCount) | 4 Bytes (uint32_t) | | |
| * + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + | |
| * | Recording K Tasks (fAssetIndex) | taskCount * sizeof(DrawTask) | | |
| * +-----------------------------------------------------------------------------+ | |
| */ | |
| class SkCapture : public SkRefCnt { | |
| public: | |
| struct DrawTask { | |
| uint32_t fAssetIndex; | |
| }; | |
| struct RecordingCapture { | |
| skia_private::TArray<DrawTask> fDrawTasks; | |
| }; | |
| struct Metadata { | |
| uint32_t version; | |
| uint32_t numAssets; | |
| uint32_t numRecordingCaptures; | |
| }; | |
| static sk_sp<SkCapture> MakeFromData(sk_sp<const SkData>); | |
| static sk_sp<SkCapture> MakeEmpty(); | |
| void addAsset(sk_sp<SkPicture>); | |
| void addRecordingCapture(RecordingCapture); | |
| sk_sp<SkData> serializeCapture(); | |
| sk_sp<SkPicture> getAsset(int i) const; | |
| const RecordingCapture* getRecordingCapture(int i) const; | |
| Metadata getMetadata() const; | |
| private: | |
| static SkSerialReturnType serializeImageProc(SkImage* img, void* ctx); | |
| static sk_sp<SkImage> deserializeImageProc(sk_sp<SkData>, | |
| std::optional<SkAlphaType>, void* ctx); | |
| Metadata fMetadata; | |
| skia_private::TArray<sk_sp<SkPicture>> fAssets; | |
| skia_private::TArray<RecordingCapture> fTimeline; | |
| static const uint32_t kVersion = 0; | |
| }; | |
| #endif //SkCapture_DEFINED |