diff options
Diffstat (limited to 'vendor/github.com/sizeofint/webpanimation/capi.go')
-rw-r--r-- | vendor/github.com/sizeofint/webpanimation/capi.go | 362 |
1 files changed, 362 insertions, 0 deletions
diff --git a/vendor/github.com/sizeofint/webpanimation/capi.go b/vendor/github.com/sizeofint/webpanimation/capi.go new file mode 100644 index 00000000..eac21b5e --- /dev/null +++ b/vendor/github.com/sizeofint/webpanimation/capi.go @@ -0,0 +1,362 @@ +package webpanimation + +/* +#cgo CFLAGS: -Wno-pointer-sign -DHAVE_CONFIG_H +#cgo !windows LDFLAGS: -lm + +#include "webp_encode.h" +#include "webp_mux.h" +*/ +import "C" +import ( + "errors" + "unsafe" +) + +type WebPMuxError int + +const ( + WebpMuxAbiVersion = 0x0108 + WebpEncoderAbiVersion = 0x020f +) + +const ( + WebpMuxOk = WebPMuxError(C.WEBP_MUX_OK) + WebpMuxNotFound = WebPMuxError(C.WEBP_MUX_NOT_FOUND) + WebpMuxInvalidArgument = WebPMuxError(C.WEBP_MUX_INVALID_ARGUMENT) + WebpMuxBadData = WebPMuxError(C.WEBP_MUX_BAD_DATA) + WebpMuxMemoryError = WebPMuxError(C.WEBP_MUX_MEMORY_ERROR) + WebpMuxNotEnoughData = WebPMuxError(C.WEBP_MUX_NOT_ENOUGH_DATA) +) + +type WebPPicture C.WebPPicture +type WebPAnimEncoder C.WebPAnimEncoder +type WebPAnimEncoderOptions C.WebPAnimEncoderOptions +type WebPData C.WebPData +type WebPMux C.WebPMux +type WebPMuxAnimParams C.WebPMuxAnimParams +type webPConfig struct { + webpConfig *C.WebPConfig +} + +type WebPConfig interface { + getRawPointer() *C.WebPConfig + SetLossless(v int) + GetLossless() int + SetMethod(v int) + SetImageHint(v int) + SetTargetSize(v int) + SetTargetPSNR(v float32) + SetSegments(v int) + SetSnsStrength(v int) + SetFilterStrength(v int) + SetFilterSharpness(v int) + SetAutofilter(v int) + SetAlphaCompression(v int) + SetAlphaFiltering(v int) + SetPass(v int) + SetShowCompressed(v int) + SetPreprocessing(v int) + SetPartitions(v int) + SetPartitionLimit(v int) + SetEmulateJpegSize(v int) + SetThreadLevel(v int) + SetLowMemory(v int) + SetNearLossless(v int) + SetExact(v int) + SetUseDeltaPalette(v int) + SetUseSharpYuv(v int) + SetAlphaQuality(v int) + SetFilterType(v int) + SetQuality(v float32) +} + +func WebPDataClear(webPData *WebPData) { + C.WebPDataClear((*C.WebPData)(unsafe.Pointer(webPData))) +} + +func WebPMuxDelete(webPMux *WebPMux) { + C.WebPMuxDelete((*C.WebPMux)(unsafe.Pointer(webPMux))) +} + +func WebPPictureFree(webPPicture *WebPPicture) { + C.WebPPictureFree((*C.WebPPicture)(unsafe.Pointer(webPPicture))) +} + +func WebPAnimEncoderDelete(webPAnimEncoder *WebPAnimEncoder) { + C.WebPAnimEncoderDelete((*C.WebPAnimEncoder)(unsafe.Pointer(webPAnimEncoder))) +} + +func (wmap *WebPMuxAnimParams) SetBgcolor(v uint32) { + ((*C.WebPMuxAnimParams)(wmap)).bgcolor = (C.uint32_t)(v) +} + +func (wmap *WebPMuxAnimParams) SetLoopCount(v int) { + (*C.WebPMuxAnimParams)(wmap).loop_count = (C.int)(v) +} + +func WebPPictureInit(webPPicture *WebPPicture) int { + return int(C.WebPPictureInit((*C.WebPPicture)(unsafe.Pointer(webPPicture)))) +} + +func (wpp *WebPPicture) SetWidth(v int) { + ((*C.WebPPicture)(wpp)).width = (C.int)(v) +} + +func (wpp *WebPPicture) SetHeight(v int) { + ((*C.WebPPicture)(wpp)).height = (C.int)(v) +} + +func (wpp WebPPicture) GetWidth() int { + return int(((C.WebPPicture)(wpp)).width) +} + +func (wpp WebPPicture) GetHeight() int { + return int(((C.WebPPicture)(wpp)).height) +} + +func (wpp *WebPPicture) SetUseArgb(v int) { + ((*C.WebPPicture)(wpp)).use_argb = (C.int)(v) +} + +func (wpd WebPData) GetBytes() []byte { + return C.GoBytes(unsafe.Pointer(((C.WebPData)(wpd)).bytes), (C.int)(((C.WebPData)(wpd)).size)) +} + +func WebPDataInit(webPData *WebPData) { + C.WebPDataInit((*C.WebPData)(unsafe.Pointer(webPData))) +} + +// NewWebpConfig create webpconfig instance +func NewWebpConfig() WebPConfig { + webpcfg := &webPConfig{} + webpcfg.webpConfig = &C.WebPConfig{} + WebPConfigInitInternal(webpcfg) + return webpcfg +} + +func WebPConfigInitInternal(config WebPConfig) int { + return int(C.WebPConfigInitInternal( + config.getRawPointer(), + (C.WebPPreset)(0), + (C.float)(75.0), + (C.int)(WebpEncoderAbiVersion), + )) +} + +func (webpCfg *webPConfig) getRawPointer() *C.WebPConfig { + return webpCfg.webpConfig +} + +func (webpCfg *webPConfig) SetLossless(v int) { + webpCfg.webpConfig.lossless = (C.int)(v) +} + +func (webpCfg *webPConfig) GetLossless() int { + return int(webpCfg.webpConfig.lossless) +} + +func (webpCfg *webPConfig) SetMethod(v int) { + webpCfg.webpConfig.method = (C.int)(v) +} + +func (webpCfg *webPConfig) SetImageHint(v int) { + webpCfg.webpConfig.image_hint = (C.WebPImageHint)(v) +} + +func (webpCfg *webPConfig) SetTargetSize(v int) { + webpCfg.webpConfig.target_size = (C.int)(v) +} + +func (webpCfg *webPConfig) SetTargetPSNR(v float32) { + webpCfg.webpConfig.target_PSNR = (C.float)(v) +} + +func (webpCfg *webPConfig) SetSegments(v int) { + webpCfg.webpConfig.segments = (C.int)(v) +} + +func (webpCfg *webPConfig) SetSnsStrength(v int) { + webpCfg.webpConfig.sns_strength = (C.int)(v) +} + +func (webpCfg *webPConfig) SetFilterStrength(v int) { + webpCfg.webpConfig.filter_strength = (C.int)(v) +} + +func (webpCfg *webPConfig) SetFilterSharpness(v int) { + webpCfg.webpConfig.filter_sharpness = (C.int)(v) +} + +func (webpCfg *webPConfig) SetAutofilter(v int) { + webpCfg.webpConfig.autofilter = (C.int)(v) +} + +func (webpCfg *webPConfig) SetAlphaCompression(v int) { + webpCfg.webpConfig.alpha_compression = (C.int)(v) +} + +func (webpCfg *webPConfig) SetAlphaFiltering(v int) { + webpCfg.webpConfig.alpha_filtering = (C.int)(v) +} + +func (webpCfg *webPConfig) SetPass(v int) { + webpCfg.webpConfig.pass = (C.int)(v) +} + +func (webpCfg *webPConfig) SetShowCompressed(v int) { + webpCfg.webpConfig.show_compressed = (C.int)(v) +} + +func (webpCfg *webPConfig) SetPreprocessing(v int) { + webpCfg.webpConfig.preprocessing = (C.int)(v) +} + +func (webpCfg *webPConfig) SetPartitions(v int) { + webpCfg.webpConfig.partitions = (C.int)(v) +} + +func (webpCfg *webPConfig) SetPartitionLimit(v int) { + webpCfg.webpConfig.partition_limit = (C.int)(v) +} + +func (webpCfg *webPConfig) SetEmulateJpegSize(v int) { + webpCfg.webpConfig.emulate_jpeg_size = (C.int)(v) +} + +func (webpCfg *webPConfig) SetThreadLevel(v int) { + webpCfg.webpConfig.thread_level = (C.int)(v) +} + +func (webpCfg *webPConfig) SetLowMemory(v int) { + webpCfg.webpConfig.low_memory = (C.int)(v) +} + +func (webpCfg *webPConfig) SetNearLossless(v int) { + webpCfg.webpConfig.near_lossless = (C.int)(v) +} + +func (webpCfg *webPConfig) SetExact(v int) { + webpCfg.webpConfig.exact = (C.int)(v) +} + +func (webpCfg *webPConfig) SetUseDeltaPalette(v int) { + webpCfg.webpConfig.use_delta_palette = (C.int)(v) +} + +func (webpCfg *webPConfig) SetUseSharpYuv(v int) { + webpCfg.webpConfig.use_sharp_yuv = (C.int)(v) +} + +func (webpCfg *webPConfig) SetAlphaQuality(v int) { + webpCfg.webpConfig.alpha_quality = (C.int)(v) +} + +func (webpCfg *webPConfig) SetFilterType(v int) { + webpCfg.webpConfig.filter_type = (C.int)(v) +} + +func (webpCfg *webPConfig) SetQuality(v float32) { + webpCfg.webpConfig.quality = (C.float)(v) +} + +func (encOptions *WebPAnimEncoderOptions) GetAnimParams() WebPMuxAnimParams { + return WebPMuxAnimParams(((*C.WebPAnimEncoderOptions)(encOptions)).anim_params) +} + +func (encOptions *WebPAnimEncoderOptions) SetAnimParams(v WebPMuxAnimParams) { + ((*C.WebPAnimEncoderOptions)(encOptions)).anim_params = (C.WebPMuxAnimParams)(v) +} + +func (encOptions *WebPAnimEncoderOptions) SetMinimizeSize(v int) { + ((*C.WebPAnimEncoderOptions)(encOptions)).minimize_size = (C.int)(v) +} + +func (encOptions *WebPAnimEncoderOptions) SetKmin(v int) { + ((*C.WebPAnimEncoderOptions)(encOptions)).kmin = (C.int)(v) +} + +func (encOptions *WebPAnimEncoderOptions) SetKmax(v int) { + ((*C.WebPAnimEncoderOptions)(encOptions)).kmax = (C.int)(v) +} + +func (encOptions *WebPAnimEncoderOptions) SetAllowMixed(v int) { + ((*C.WebPAnimEncoderOptions)(encOptions)).allow_mixed = (C.int)(v) +} + +func (encOptions *WebPAnimEncoderOptions) SetVerbose(v int) { + ((*C.WebPAnimEncoderOptions)(encOptions)).verbose = (C.int)(v) +} + +func WebPAnimEncoderOptionsInitInternal(webPAnimEncoderOptions *WebPAnimEncoderOptions) int { + return int(C.WebPAnimEncoderOptionsInitInternal( + (*C.WebPAnimEncoderOptions)(unsafe.Pointer(webPAnimEncoderOptions)), + (C.int)(WebpMuxAbiVersion), + )) +} + +func WebPPictureImportRGBA(data []byte, stride int, webPPicture *WebPPicture) error { + res := int(C.WebPPictureImportRGBA( + (*C.WebPPicture)(unsafe.Pointer(webPPicture)), + (*C.uint8_t)(unsafe.Pointer(&data[0])), + (C.int)(stride), + )) + if res == 0 { + return errors.New("error: WebPPictureImportBGRA") + } + return nil +} + +func WebPAnimEncoderNewInternal(width, height int, webPAnimEncoderOptions *WebPAnimEncoderOptions) *WebPAnimEncoder { + return (*WebPAnimEncoder)(C.WebPAnimEncoderNewInternal( + (C.int)(width), + (C.int)(height), + (*C.WebPAnimEncoderOptions)(unsafe.Pointer(webPAnimEncoderOptions)), + (C.int)(WebpMuxAbiVersion), + )) +} + +func WebPAnimEncoderAdd(webPAnimEncoder *WebPAnimEncoder, webPPicture *WebPPicture, timestamp int, webpcfg WebPConfig) int { + return int(C.WebPAnimEncoderAdd( + (*C.WebPAnimEncoder)(unsafe.Pointer(webPAnimEncoder)), + (*C.WebPPicture)(unsafe.Pointer(webPPicture)), + (C.int)(timestamp), + webpcfg.getRawPointer(), + )) +} + +func WebPAnimEncoderAssemble(webPAnimEncoder *WebPAnimEncoder, webPData *WebPData) int { + return int(C.WebPAnimEncoderAssemble( + (*C.WebPAnimEncoder)(unsafe.Pointer(webPAnimEncoder)), + (*C.WebPData)(unsafe.Pointer(webPData)), + )) +} + +func WebPMuxCreateInternal(webPData *WebPData, copyData int) *WebPMux { + return (*WebPMux)(C.WebPMuxCreateInternal( + (*C.WebPData)(unsafe.Pointer(webPData)), + (C.int)(copyData), + (C.int)(WebpMuxAbiVersion), + )) +} + +func WebPMuxSetAnimationParams(webPMux *WebPMux, webPMuxAnimParams *WebPMuxAnimParams) WebPMuxError { + return (WebPMuxError)(C.WebPMuxSetAnimationParams( + (*C.WebPMux)(unsafe.Pointer(webPMux)), + (*C.WebPMuxAnimParams)(unsafe.Pointer(webPMuxAnimParams)), + )) +} + +func WebPMuxGetAnimationParams(webPMux *WebPMux, webPMuxAnimParams *WebPMuxAnimParams) WebPMuxError { + return (WebPMuxError)(C.WebPMuxGetAnimationParams( + (*C.WebPMux)(unsafe.Pointer(webPMux)), + (*C.WebPMuxAnimParams)(unsafe.Pointer(webPMuxAnimParams)), + )) +} + +func WebPMuxAssemble(webPMux *WebPMux, webPData *WebPData) WebPMuxError { + return (WebPMuxError)(C.WebPMuxAssemble( + (*C.WebPMux)(unsafe.Pointer(webPMux)), + (*C.WebPData)(unsafe.Pointer(webPData)), + )) +} |