1/*
2 * Copyright 2017 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 SkStubHeifDecoderAPI_DEFINED
9#define SkStubHeifDecoderAPI_DEFINED
10
11// This stub implementation of HeifDecoderAPI.h lets us compile SkHeifCodec.cpp
12// even when libheif is not available. It, of course, does nothing and fails to decode.
13
14#include <memory>
15#include <stddef.h>
16#include <stdint.h>
17
18enum HeifColorFormat {
19 kHeifColorFormat_RGB565,
20 kHeifColorFormat_RGBA_8888,
21 kHeifColorFormat_BGRA_8888,
22};
23
24struct HeifStream {
25 virtual ~HeifStream() {}
26
27 virtual size_t read(void*, size_t) = 0;
28 virtual bool rewind() = 0;
29 virtual bool seek(size_t) = 0;
30 virtual bool hasLength() const = 0;
31 virtual size_t getLength() const = 0;
32};
33
34struct HeifFrameInfo {
35 uint32_t mWidth;
36 uint32_t mHeight;
37 int32_t mRotationAngle; // Rotation angle, clockwise, should be multiple of 90
38 uint32_t mBytesPerPixel; // Number of bytes for one pixel
39 int64_t mDurationUs; // Duration of the frame in us
40 std::vector<uint8_t> mIccData; // ICC data array
41};
42
43struct HeifDecoder {
44 bool init(HeifStream* stream, HeifFrameInfo*) {
45 delete stream;
46 return false;
47 }
48
49 bool getSequenceInfo(HeifFrameInfo* frameInfo, size_t *frameCount) {
50 return false;
51 }
52
53 bool decode(HeifFrameInfo*) {
54 return false;
55 }
56
57 bool decodeSequence(int frameIndex, HeifFrameInfo* frameInfo) {
58 return false;
59 }
60
61 bool setOutputColor(HeifColorFormat) {
62 return false;
63 }
64
65 bool getScanline(uint8_t*) {
66 return false;
67 }
68
69 int skipScanlines(int) {
70 return 0;
71 }
72};
73
74static inline HeifDecoder* createHeifDecoder() { return new HeifDecoder; }
75
76#endif//SkStubHeifDecoderAPI_DEFINED
77