add SkStubHeifDecoderAPI.h

This should let us build SkHeifCodec even without libheif.

I didn't look at libheif itself, so this stub may disagree
a bit with the actual interface... just flailed around until
it compiled and linked.

This turns on the stub in most of our internal builds.

Change-Id: I62ed4993198118b2a8217ec846d92ff637cc8ab9
Reviewed-on: https://skia-review.googlesource.com/62321
Reviewed-by: Leon Scroggins <scroggo@google.com>
Commit-Queue: Mike Klein <mtklein@chromium.org>
This commit is contained in:
Mike Klein 2017-10-20 12:33:53 -04:00 committed by Skia Commit-Bot
parent 6d6d603c81
commit 36f182faa7
3 changed files with 81 additions and 2 deletions

View File

@ -31,7 +31,7 @@ declare_args() {
skia_use_piex = !is_win
skia_use_zlib = true
skia_use_metal = false
skia_use_libheif = false
skia_use_libheif = is_skia_dev_build
skia_android_serial = ""
skia_enable_discrete_gpu = true

View File

@ -15,7 +15,16 @@
#include "SkImageInfo.h"
#include "SkSwizzler.h"
#include "SkStream.h"
#include "HeifDecoderAPI.h"
#if !defined(__has_include)
#define __has_include(x) 0
#endif
#if __has_include("HeifDecoderAPI.h")
#include "HeifDecoderAPI.h"
#else
#include "SkStubHeifDecoderAPI.h"
#endif
class SkHeifCodec : public SkCodec {
public:

View File

@ -0,0 +1,70 @@
/*
* Copyright 2017 Google Inc.
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#ifndef SkStubHeifDecoderAPI_DEFINED
#define SkStubHeifDecoderAPI_DEFINED
// This stub implementation of HeifDecoderAPI.h lets us compile SkHeifCodec.cpp
// even when libheif is not available. It, of course, does nothing and fails to decode.
#include <memory>
#include <stddef.h>
#include <stdint.h>
using off64_t = int64_t;
enum HeifColorFormat {
kHeifColorFormat_RGB565,
kHeifColorFormat_RGBA_8888,
kHeifColorFormat_BGRA_8888,
};
struct HeifStream {
virtual ~HeifStream() {}
virtual size_t read(void*, size_t) = 0;
virtual bool rewind() = 0;
virtual bool seek(size_t) = 0;
virtual bool hasLength() const = 0;
virtual size_t getLength() const = 0;
};
struct HeifFrameInfo {
int mRotationAngle;
int mWidth;
int mHeight;
int mBytesPerPixel;
size_t mIccSize;
std::unique_ptr<char[]> mIccData;
};
struct HeifDecoder {
bool init(HeifStream* stream, HeifFrameInfo*) {
delete stream;
return false;
}
bool decode(HeifFrameInfo*) {
return false;
}
bool setOutputColor(HeifColorFormat) {
return false;
}
bool getScanline(uint8_t*) {
return false;
}
int skipScanlines(int) {
return 0;
}
};
static inline HeifDecoder* createHeifDecoder() { return new HeifDecoder; }
#endif//SkStubHeifDecoderAPI_DEFINED