From: Matthew Leibowitz Date: Mon, 6 Feb 2017 11:16:38 +0000 (-0600) Subject: Added C API for SkCodec scanline decoding X-Git-Tag: accepted/tizen/5.0/unified/20181102.025319~82 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=3f5df178cea6f6c514ebc1091fcec12479c380a2;p=platform%2Fupstream%2FlibSkiaSharp.git Added C API for SkCodec scanline decoding --- diff --git a/include/c/sk_codec.h b/include/c/sk_codec.h index 5245ef5..290a6f5 100644 --- a/include/c/sk_codec.h +++ b/include/c/sk_codec.h @@ -31,6 +31,12 @@ SK_C_API sk_codec_result_t sk_codec_get_pixels(sk_codec_t* codec, const sk_image SK_C_API sk_codec_result_t sk_codec_get_pixels_using_defaults(sk_codec_t* codec, const sk_imageinfo_t* info, void* pixels, size_t rowBytes); SK_C_API sk_codec_result_t sk_codec_start_incremental_decode(sk_codec_t* codec, const sk_imageinfo_t* info, void* pixels, size_t rowBytes, const sk_codec_options_t* options, sk_color_t ctable[], int* ctableCount); SK_C_API sk_codec_result_t sk_codec_incremental_decode(sk_codec_t* codec, int* rowsDecoded); +SK_C_API sk_codec_result_t sk_codec_start_scanline_decode(sk_codec_t* codec, const sk_imageinfo_t* info, const sk_codec_options_t* options, sk_color_t ctable[], int* ctableCount); +SK_C_API int sk_codec_get_scanlines(sk_codec_t* codec, void* dst, int countLines, size_t rowBytes); +SK_C_API bool sk_codec_skip_scanlines(sk_codec_t* codec, int countLines); +SK_C_API sk_codec_scanline_order_t sk_codec_get_scanline_order(sk_codec_t* codec); +SK_C_API int sk_codec_next_scanline(sk_codec_t* codec); +SK_C_API int sk_codec_output_scanline(sk_codec_t* codec, int inputScanline); SK_C_API int sk_codec_get_frame_count(sk_codec_t* codec); SK_C_API void sk_codec_get_frame_info(sk_codec_t* codec, sk_codec_frameinfo_t* frameInfo); SK_C_API int sk_codec_get_repetition_count(sk_codec_t* codec); diff --git a/include/c/sk_types.h b/include/c/sk_types.h index c51194e..db43f1e 100644 --- a/include/c/sk_types.h +++ b/include/c/sk_types.h @@ -468,6 +468,11 @@ typedef struct { bool fHasPriorFrame; } sk_codec_options_t; +typedef enum { + TOP_DOWN_SK_CODEC_SCANLINE_ORDER, + BOTTOM_UP_SK_CODEC_SCANLINE_ORDER, +} sk_codec_scanline_order_t; + // The verbs that can be foudn on a path typedef enum { MOVE_SK_PATH_VERB, diff --git a/src/c/sk_codec.cpp b/src/c/sk_codec.cpp index e4d9a1e..6e49d6f 100644 --- a/src/c/sk_codec.cpp +++ b/src/c/sk_codec.cpp @@ -87,6 +87,38 @@ sk_codec_result_t sk_codec_incremental_decode(sk_codec_t* codec, int* rowsDecode return (sk_codec_result_t)AsCodec(codec)->incrementalDecode(rowsDecoded); } +sk_codec_result_t sk_codec_start_scanline_decode(sk_codec_t* codec, const sk_imageinfo_t* cinfo, const sk_codec_options_t* coptions, sk_color_t ctable[], int* ctableCount) +{ + SkImageInfo info; + from_c(*cinfo, &info); + return (sk_codec_result_t)AsCodec(codec)->startScanlineDecode(info, AsCodecOptions(coptions), ctable, ctableCount); +} + +int sk_codec_get_scanlines(sk_codec_t* codec, void* dst, int countLines, size_t rowBytes) +{ + return AsCodec(codec)->getScanlines(dst, countLines, rowBytes); +} + +bool sk_codec_skip_scanlines(sk_codec_t* codec, int countLines) +{ + return AsCodec(codec)->skipScanlines(countLines); +} + +sk_codec_scanline_order_t sk_codec_get_scanline_order(sk_codec_t* codec) +{ + return (sk_codec_scanline_order_t)AsCodec(codec)->getScanlineOrder(); +} + +int sk_codec_next_scanline(sk_codec_t* codec) +{ + return AsCodec(codec)->nextScanline(); +} + +int sk_codec_output_scanline(sk_codec_t* codec, int inputScanline) +{ + return AsCodec(codec)->outputScanline(inputScanline); +} + int sk_codec_get_frame_count(sk_codec_t* codec) { return AsCodec(codec)->getFrameInfo().size(); } diff --git a/src/c/sk_enums.cpp b/src/c/sk_enums.cpp index 8baac76..42059e5 100644 --- a/src/c/sk_enums.cpp +++ b/src/c/sk_enums.cpp @@ -242,6 +242,10 @@ static_assert ((int)SkCodec::Result::kUnimplemented == (int)UNIMPLEMENTED_ static_assert ((int)SkCodec::ZeroInitialized::kYes_ZeroInitialized == (int)YES_SK_CODEC_ZERO_INITIALIZED, ASSERT_MSG(SkCodec::ZeroInitialized, sk_codec_zero_initialized_t)); static_assert ((int)SkCodec::ZeroInitialized::kNo_ZeroInitialized == (int)NO_SK_CODEC_ZERO_INITIALIZED, ASSERT_MSG(SkCodec::ZeroInitialized, sk_codec_zero_initialized_t)); +// sk_codec_scanline_order_t +static_assert ((int)SkCodec::SkScanlineOrder::kTopDown_SkScanlineOrder == (int)TOP_DOWN_SK_CODEC_SCANLINE_ORDER, ASSERT_MSG(SkCodec::SkScanlineOrder, sk_codec_scanline_order_t)); +static_assert ((int)SkCodec::SkScanlineOrder::kBottomUp_SkScanlineOrder == (int)BOTTOM_UP_SK_CODEC_SCANLINE_ORDER, ASSERT_MSG(SkCodec::SkScanlineOrder, sk_codec_scanline_order_t)); + // sk_path_effect_1d_style_t static_assert ((int)SkPath1DPathEffect::Style::kTranslate_Style == (int)TRANSLATE_SK_PATH_EFFECT_1D_STYLE, ASSERT_MSG(SkPath1DPathEffect::Style, sk_path_effect_1d_style_t)); static_assert ((int)SkPath1DPathEffect::Style::kRotate_Style == (int)ROTATE_SK_PATH_EFFECT_1D_STYLE, ASSERT_MSG(SkPath1DPathEffect::Style, sk_path_effect_1d_style_t));