From 559dead6d57212457b989be1eae6c13ac8d43274 Mon Sep 17 00:00:00 2001 From: Matthew Leibowitz Date: Fri, 25 Nov 2016 10:54:38 +0200 Subject: [PATCH] Added SkCodec::getEngodedInfo to the C API --- include/c/sk_codec.h | 1 + include/c/sk_types.h | 27 +++++++++++++++++++++++++++ src/c/sk_codec.cpp | 5 +++++ src/c/sk_enums.cpp | 19 +++++++++++++++++++ src/c/sk_types_priv.h | 17 +++++++++++++++++ 5 files changed, 69 insertions(+) diff --git a/include/c/sk_codec.h b/include/c/sk_codec.h index 598e137..4887832 100644 --- a/include/c/sk_codec.h +++ b/include/c/sk_codec.h @@ -22,6 +22,7 @@ SK_API sk_codec_t* sk_codec_new_from_data(sk_data_t* data); SK_API void sk_codec_destroy(sk_codec_t* codec); SK_API void sk_codec_get_info(sk_codec_t* codec, sk_imageinfo_t* info); +SK_API void sk_codec_get_encodedinfo(sk_codec_t* codec, sk_encodedinfo_t* info); SK_API sk_codec_origin_t sk_codec_get_origin(sk_codec_t* codec); SK_API void sk_codec_get_scaled_dimensions(sk_codec_t* codec, float desiredScale, sk_isize_t* dimensions); SK_API bool sk_codec_get_valid_subset(sk_codec_t* codec, sk_irect_t* desiredSubset); diff --git a/include/c/sk_types.h b/include/c/sk_types.h index 27dfb61..d8ce5f2 100644 --- a/include/c/sk_types.h +++ b/include/c/sk_types.h @@ -679,6 +679,33 @@ typedef enum { ALL_SK_SHADOWMASKFILTER_SHADOWFLAGS = 0x07 } sk_shadowmaskfilter_shadowflags_t; +typedef enum { + OPAQUE_SK_ENCODEDINFO_ALPHA, + UNPREMUL_SK_ENCODEDINFO_ALPHA, + BINARY_SK_ENCODEDINFO_ALPHA, +} sk_encodedinfo_alpha_t; + +typedef enum { + GRAY_SK_ENCODEDINFO_COLOR, + GRAY_ALPHA_SK_ENCODEDINFO_COLOR, + PALETTE_SK_ENCODEDINFO_COLOR, + RGB_SK_ENCODEDINFO_COLOR, + RGBA_SK_ENCODEDINFO_COLOR, + BGR_SK_ENCODEDINFO_COLOR, + BGRX_SK_ENCODEDINFO_COLOR, + BGRA_SK_ENCODEDINFO_COLOR, + YUV_SK_ENCODEDINFO_COLOR, + YUVA_SK_ENCODEDINFO_COLOR, + INVERTED_CMYK_SK_ENCODEDINFO_COLOR, + YCCK_SK_ENCODEDINFO_COLOR, +} sk_encodedinfo_color_t; + +typedef struct { + sk_encodedinfo_color_t fColor; + sk_encodedinfo_alpha_t fAlpha; + uint8_t fBitsPerComponent; +} sk_encodedinfo_t; + SK_C_PLUS_PLUS_END_GUARD #endif diff --git a/src/c/sk_codec.cpp b/src/c/sk_codec.cpp index 88bbc5e..e2b49e2 100644 --- a/src/c/sk_codec.cpp +++ b/src/c/sk_codec.cpp @@ -36,6 +36,11 @@ void sk_codec_get_info(sk_codec_t* codec, sk_imageinfo_t* info) from_sk(AsCodec(codec)->getInfo(), info); } +void sk_codec_get_encodedinfo(sk_codec_t* codec, sk_encodedinfo_t* info) +{ + *info = ToEncodedInfo(AsCodec(codec)->getEncodedInfo()); +} + sk_codec_origin_t sk_codec_get_origin(sk_codec_t* codec) { return (sk_codec_origin_t)AsCodec(codec)->getOrigin(); diff --git a/src/c/sk_enums.cpp b/src/c/sk_enums.cpp index ce36d91..8cbb9de 100644 --- a/src/c/sk_enums.cpp +++ b/src/c/sk_enums.cpp @@ -321,4 +321,23 @@ static_assert ((int)SkShadowMaskFilter::ShadowFlags::kLargerUmbra_ShadowFlag static_assert ((int)SkShadowMaskFilter::ShadowFlags::kGaussianEdge_ShadowFlag == (int)GAUSSIAN_EDGE_SK_SHADOWMASKFILTER_SHADOWFLAGS, ASSERT_MSG(SkShadowMaskFilter::ShadowFlags, sk_shadowmaskfilter_shadowflags_t)); static_assert ((int)SkShadowMaskFilter::ShadowFlags::kAll_ShadowFlag == (int)ALL_SK_SHADOWMASKFILTER_SHADOWFLAGS, ASSERT_MSG(SkShadowMaskFilter::ShadowFlags, sk_shadowmaskfilter_shadowflags_t)); +// sk_encodedinfo_alpha_t +static_assert ((int)SkEncodedInfo::Alpha::kOpaque_Alpha == (int)OPAQUE_SK_ENCODEDINFO_ALPHA, ASSERT_MSG(SkEncodedInfo::Alpha, sk_encodedinfo_alpha_t)); +static_assert ((int)SkEncodedInfo::Alpha::kUnpremul_Alpha == (int)UNPREMUL_SK_ENCODEDINFO_ALPHA, ASSERT_MSG(SkEncodedInfo::Alpha, sk_encodedinfo_alpha_t)); +static_assert ((int)SkEncodedInfo::Alpha::kBinary_Alpha == (int)BINARY_SK_ENCODEDINFO_ALPHA, ASSERT_MSG(SkEncodedInfo::Alpha, sk_encodedinfo_alpha_t)); + +// sk_encodedinfo_color_t +static_assert ((int)SkEncodedInfo::Color::kGray_Color == (int)GRAY_SK_ENCODEDINFO_COLOR, ASSERT_MSG(SkEncodedInfo::Color, sk_encodedinfo_color_t)); +static_assert ((int)SkEncodedInfo::Color::kGrayAlpha_Color == (int)GRAY_ALPHA_SK_ENCODEDINFO_COLOR, ASSERT_MSG(SkEncodedInfo::Color, sk_encodedinfo_color_t)); +static_assert ((int)SkEncodedInfo::Color::kPalette_Color == (int)PALETTE_SK_ENCODEDINFO_COLOR, ASSERT_MSG(SkEncodedInfo::Color, sk_encodedinfo_color_t)); +static_assert ((int)SkEncodedInfo::Color::kRGB_Color == (int)RGB_SK_ENCODEDINFO_COLOR, ASSERT_MSG(SkEncodedInfo::Color, sk_encodedinfo_color_t)); +static_assert ((int)SkEncodedInfo::Color::kRGBA_Color == (int)RGBA_SK_ENCODEDINFO_COLOR, ASSERT_MSG(SkEncodedInfo::Color, sk_encodedinfo_color_t)); +static_assert ((int)SkEncodedInfo::Color::kBGR_Color == (int)BGR_SK_ENCODEDINFO_COLOR, ASSERT_MSG(SkEncodedInfo::Color, sk_encodedinfo_color_t)); +static_assert ((int)SkEncodedInfo::Color::kBGRX_Color == (int)BGRX_SK_ENCODEDINFO_COLOR, ASSERT_MSG(SkEncodedInfo::Color, sk_encodedinfo_color_t)); +static_assert ((int)SkEncodedInfo::Color::kBGRA_Color == (int)BGRA_SK_ENCODEDINFO_COLOR, ASSERT_MSG(SkEncodedInfo::Color, sk_encodedinfo_color_t)); +static_assert ((int)SkEncodedInfo::Color::kYUV_Color == (int)YUV_SK_ENCODEDINFO_COLOR, ASSERT_MSG(SkEncodedInfo::Color, sk_encodedinfo_color_t)); +static_assert ((int)SkEncodedInfo::Color::kYUVA_Color == (int)YUVA_SK_ENCODEDINFO_COLOR, ASSERT_MSG(SkEncodedInfo::Color, sk_encodedinfo_color_t)); +static_assert ((int)SkEncodedInfo::Color::kInvertedCMYK_Color == (int)INVERTED_CMYK_SK_ENCODEDINFO_COLOR, ASSERT_MSG(SkEncodedInfo::Color, sk_encodedinfo_color_t)); +static_assert ((int)SkEncodedInfo::Color::kYCCK_Color == (int)YCCK_SK_ENCODEDINFO_COLOR, ASSERT_MSG(SkEncodedInfo::Color, sk_encodedinfo_color_t)); + #endif diff --git a/src/c/sk_types_priv.h b/src/c/sk_types_priv.h index b4e9802..82b2d60 100644 --- a/src/c/sk_types_priv.h +++ b/src/c/sk_types_priv.h @@ -29,6 +29,7 @@ #include "SkPathOps.h" #include "SkRegion.h" #include "SkTypeface.h" +#include "SkEncodedInfo.h" #include "gl/GrGLInterface.h" #include "sk_path.h" @@ -542,6 +543,22 @@ static inline SkPathMeasure* AsPathMeasure(sk_pathmeasure_t* p) { return reinterpret_cast(p); } +static inline sk_encodedinfo_t* ToEncodedInfo(SkEncodedInfo *p) { + return reinterpret_cast(p); +} + +static inline sk_encodedinfo_t& ToEncodedInfo(SkEncodedInfo &p) { + return reinterpret_cast(p); +} + +static inline const sk_encodedinfo_t* ToEncodedInfo(const SkEncodedInfo *p) { + return reinterpret_cast(p); +} + +static inline const sk_encodedinfo_t& ToEncodedInfo(const SkEncodedInfo &p) { + return reinterpret_cast(p); +} + static inline void from_c(const sk_matrix_t* cmatrix, SkMatrix* matrix) { matrix->setAll( cmatrix->mat[0], cmatrix->mat[1], cmatrix->mat[2], -- 2.7.4