1cb93a386Sopenharmony_ci/* 2cb93a386Sopenharmony_ci * Copyright 2017 Google Inc. 3cb93a386Sopenharmony_ci * 4cb93a386Sopenharmony_ci * Use of this source code is governed by a BSD-style license that can be 5cb93a386Sopenharmony_ci * found in the LICENSE file. 6cb93a386Sopenharmony_ci */ 7cb93a386Sopenharmony_ci 8cb93a386Sopenharmony_ci#ifndef SkStubHeifDecoderAPI_DEFINED 9cb93a386Sopenharmony_ci#define SkStubHeifDecoderAPI_DEFINED 10cb93a386Sopenharmony_ci 11cb93a386Sopenharmony_ci// This stub implementation of HeifDecoderAPI.h lets us compile SkHeifCodec.cpp 12cb93a386Sopenharmony_ci// even when libheif is not available. It, of course, does nothing and fails to decode. 13cb93a386Sopenharmony_ci 14cb93a386Sopenharmony_ci#include <memory> 15cb93a386Sopenharmony_ci#include <stddef.h> 16cb93a386Sopenharmony_ci#include <stdint.h> 17cb93a386Sopenharmony_ci#include <vector> 18cb93a386Sopenharmony_ci 19cb93a386Sopenharmony_cienum SkHeifColorFormat { 20cb93a386Sopenharmony_ci kHeifColorFormat_RGB565, 21cb93a386Sopenharmony_ci kHeifColorFormat_RGBA_8888, 22cb93a386Sopenharmony_ci kHeifColorFormat_BGRA_8888, 23cb93a386Sopenharmony_ci kHeifColorFormat_NV12, 24cb93a386Sopenharmony_ci kHeifColorFormat_NV21, 25cb93a386Sopenharmony_ci kHeifColorFormat_RGBA_1010102, 26cb93a386Sopenharmony_ci kHeifColorFormat_P010_NV12, 27cb93a386Sopenharmony_ci kHeifColorFormat_P010_NV21, 28cb93a386Sopenharmony_ci}; 29cb93a386Sopenharmony_ci 30cb93a386Sopenharmony_cistruct HeifStream { 31cb93a386Sopenharmony_ci virtual ~HeifStream() {} 32cb93a386Sopenharmony_ci 33cb93a386Sopenharmony_ci virtual size_t read(void*, size_t) = 0; 34cb93a386Sopenharmony_ci virtual bool rewind() = 0; 35cb93a386Sopenharmony_ci virtual bool seek(size_t) = 0; 36cb93a386Sopenharmony_ci virtual bool hasLength() const = 0; 37cb93a386Sopenharmony_ci virtual size_t getLength() const = 0; 38cb93a386Sopenharmony_ci virtual bool hasPosition() const = 0; 39cb93a386Sopenharmony_ci virtual size_t getPosition() const = 0; 40cb93a386Sopenharmony_ci}; 41cb93a386Sopenharmony_ci 42cb93a386Sopenharmony_cistruct HeifNclxColor { 43cb93a386Sopenharmony_ci uint16_t colorPrimaries; 44cb93a386Sopenharmony_ci uint16_t transferCharacteristics; 45cb93a386Sopenharmony_ci uint16_t matrixCoefficients; 46cb93a386Sopenharmony_ci uint8_t fullRangeFlag; 47cb93a386Sopenharmony_ci}; 48cb93a386Sopenharmony_ci 49cb93a386Sopenharmony_cistruct HeifFrameInfo { 50cb93a386Sopenharmony_ci uint32_t mWidth; 51cb93a386Sopenharmony_ci uint32_t mHeight; 52cb93a386Sopenharmony_ci int32_t mRotationAngle; // Rotation angle, clockwise, should be multiple of 90 53cb93a386Sopenharmony_ci uint32_t mBytesPerPixel; // Number of bytes for one pixel 54cb93a386Sopenharmony_ci int64_t mDurationUs; // Duration of the frame in us 55cb93a386Sopenharmony_ci std::vector<uint8_t> mIccData; // ICC data array 56cb93a386Sopenharmony_ci bool hasNclxColor = false; 57cb93a386Sopenharmony_ci HeifNclxColor nclxColor; 58cb93a386Sopenharmony_ci}; 59cb93a386Sopenharmony_ci 60cb93a386Sopenharmony_cienum class HeifImageHdrType { 61cb93a386Sopenharmony_ci UNKNOWN = 0, 62cb93a386Sopenharmony_ci VIVID_DUAL = 1, 63cb93a386Sopenharmony_ci ISO_DUAL, 64cb93a386Sopenharmony_ci VIVID_SINGLE, 65cb93a386Sopenharmony_ci ISO_SINGLE, 66cb93a386Sopenharmony_ci}; 67cb93a386Sopenharmony_ci 68cb93a386Sopenharmony_cistruct HeifDecoder { 69cb93a386Sopenharmony_ci HeifDecoder() {} 70cb93a386Sopenharmony_ci 71cb93a386Sopenharmony_ci virtual ~HeifDecoder() {} 72cb93a386Sopenharmony_ci 73cb93a386Sopenharmony_ci virtual bool init(HeifStream* stream, HeifFrameInfo* frameInfo) = 0; 74cb93a386Sopenharmony_ci 75cb93a386Sopenharmony_ci virtual bool getSequenceInfo(HeifFrameInfo* frameInfo, size_t *frameCount) = 0; 76cb93a386Sopenharmony_ci 77cb93a386Sopenharmony_ci virtual bool decode(HeifFrameInfo* frameInfo) = 0; 78cb93a386Sopenharmony_ci 79cb93a386Sopenharmony_ci virtual bool decodeSequence(int frameIndex, HeifFrameInfo* frameInfo) = 0; 80cb93a386Sopenharmony_ci 81cb93a386Sopenharmony_ci virtual bool setOutputColor(SkHeifColorFormat colorFormat) = 0; 82cb93a386Sopenharmony_ci 83cb93a386Sopenharmony_ci virtual void setDstBuffer(uint8_t *dstBuffer, size_t rowStride, void *context) = 0; 84cb93a386Sopenharmony_ci 85cb93a386Sopenharmony_ci virtual bool getScanline(uint8_t* dst) = 0; 86cb93a386Sopenharmony_ci 87cb93a386Sopenharmony_ci virtual size_t skipScanlines(int count) = 0; 88cb93a386Sopenharmony_ci virtual bool getImageInfo(HeifFrameInfo *frameInfo) = 0; 89cb93a386Sopenharmony_ci virtual bool decodeGainmap() = 0; 90cb93a386Sopenharmony_ci virtual void setGainmapDstBuffer(uint8_t* dstBuffer, size_t rowStride) = 0; 91cb93a386Sopenharmony_ci virtual bool getGainmapInfo(HeifFrameInfo* frameInfo) = 0; 92cb93a386Sopenharmony_ci virtual bool getTmapInfo(HeifFrameInfo* frameInfo) = 0; 93cb93a386Sopenharmony_ci virtual HeifImageHdrType getHdrType() = 0; 94cb93a386Sopenharmony_ci virtual void getVividMetadata(std::vector<uint8_t>& uwaInfo, std::vector<uint8_t>& displayInfo, 95cb93a386Sopenharmony_ci std::vector<uint8_t>& lightInfo) = 0; 96cb93a386Sopenharmony_ci virtual void getISOMetadata(std::vector<uint8_t>& isoMetadata) = 0; 97cb93a386Sopenharmony_ci virtual void getErrMsg(std::string& errMsg) = 0; 98cb93a386Sopenharmony_ci}; 99cb93a386Sopenharmony_ci 100cb93a386Sopenharmony_cistruct StubHeifDecoder : HeifDecoder { 101cb93a386Sopenharmony_ci bool init(HeifStream* stream, HeifFrameInfo* frameInfo) override { 102cb93a386Sopenharmony_ci delete stream; 103cb93a386Sopenharmony_ci return false; 104cb93a386Sopenharmony_ci } 105cb93a386Sopenharmony_ci 106cb93a386Sopenharmony_ci bool getSequenceInfo(HeifFrameInfo* frameInfo, size_t *frameCount) override { 107cb93a386Sopenharmony_ci return false; 108cb93a386Sopenharmony_ci } 109cb93a386Sopenharmony_ci 110cb93a386Sopenharmony_ci bool decode(HeifFrameInfo* frameInfo) override { 111cb93a386Sopenharmony_ci return false; 112cb93a386Sopenharmony_ci } 113cb93a386Sopenharmony_ci 114cb93a386Sopenharmony_ci bool decodeSequence(int frameIndex, HeifFrameInfo* frameInfo) override { 115cb93a386Sopenharmony_ci return false; 116cb93a386Sopenharmony_ci } 117cb93a386Sopenharmony_ci 118cb93a386Sopenharmony_ci bool setOutputColor(SkHeifColorFormat colorFormat) override { 119cb93a386Sopenharmony_ci return false; 120cb93a386Sopenharmony_ci } 121cb93a386Sopenharmony_ci 122cb93a386Sopenharmony_ci void setDstBuffer(uint8_t *dstBuffer, size_t rowStride, void *context) override { 123cb93a386Sopenharmony_ci return; 124cb93a386Sopenharmony_ci } 125cb93a386Sopenharmony_ci 126cb93a386Sopenharmony_ci bool getScanline(uint8_t* dst) override { 127cb93a386Sopenharmony_ci return false; 128cb93a386Sopenharmony_ci } 129cb93a386Sopenharmony_ci 130cb93a386Sopenharmony_ci size_t skipScanlines(int count) override { 131cb93a386Sopenharmony_ci return 0; 132cb93a386Sopenharmony_ci } 133cb93a386Sopenharmony_ci 134cb93a386Sopenharmony_ci bool getImageInfo(HeifFrameInfo *frameInfo) override { 135cb93a386Sopenharmony_ci return false; 136cb93a386Sopenharmony_ci } 137cb93a386Sopenharmony_ci 138cb93a386Sopenharmony_ci bool decodeGainmap() override { 139cb93a386Sopenharmony_ci return false; 140cb93a386Sopenharmony_ci } 141cb93a386Sopenharmony_ci 142cb93a386Sopenharmony_ci void setGainmapDstBuffer(uint8_t* dstBuffer, size_t rowStride) override { 143cb93a386Sopenharmony_ci return; 144cb93a386Sopenharmony_ci } 145cb93a386Sopenharmony_ci 146cb93a386Sopenharmony_ci bool getGainmapInfo(HeifFrameInfo* frameInfo) override { 147cb93a386Sopenharmony_ci return false; 148cb93a386Sopenharmony_ci } 149cb93a386Sopenharmony_ci 150cb93a386Sopenharmony_ci bool getTmapInfo(HeifFrameInfo* frameInfo) override { 151cb93a386Sopenharmony_ci return false; 152cb93a386Sopenharmony_ci } 153cb93a386Sopenharmony_ci 154cb93a386Sopenharmony_ci HeifImageHdrType getHdrType() override { 155cb93a386Sopenharmony_ci return HeifImageHdrType::UNKNOWN; 156cb93a386Sopenharmony_ci } 157cb93a386Sopenharmony_ci 158cb93a386Sopenharmony_ci void getVividMetadata(std::vector<uint8_t>& uwaInfo, std::vector<uint8_t>& displayInfo, 159cb93a386Sopenharmony_ci std::vector<uint8_t>& lightInfo) override { 160cb93a386Sopenharmony_ci return; 161cb93a386Sopenharmony_ci } 162cb93a386Sopenharmony_ci 163cb93a386Sopenharmony_ci void getISOMetadata(std::vector<uint8_t>& isoMetadata) override { 164cb93a386Sopenharmony_ci return; 165cb93a386Sopenharmony_ci } 166cb93a386Sopenharmony_ci 167cb93a386Sopenharmony_ci void getErrMsg(std::string& errMsg) override { 168cb93a386Sopenharmony_ci return; 169cb93a386Sopenharmony_ci } 170cb93a386Sopenharmony_ci}; 171cb93a386Sopenharmony_ci 172cb93a386Sopenharmony_ci#endif//SkStubHeifDecoderAPI_DEFINED 173