summaryrefslogtreecommitdiffstats
path: root/vendor/github.com/sizeofint/webpanimation/capi.go
diff options
context:
space:
mode:
authorBenau <Benau@users.noreply.github.com>2021-08-25 04:32:50 +0800
committerGitHub <noreply@github.com>2021-08-24 22:32:50 +0200
commit53cafa9f3d0c8be33821fc7338b1da97e91d9cc6 (patch)
tree964a225219099a1a1c282e27913767da588191b4 /vendor/github.com/sizeofint/webpanimation/capi.go
parentd4195deb3a6305c49c50ff30e8af978c7f1bdd92 (diff)
downloadmatterbridge-msglm-53cafa9f3d0c8be33821fc7338b1da97e91d9cc6.tar.gz
matterbridge-msglm-53cafa9f3d0c8be33821fc7338b1da97e91d9cc6.tar.bz2
matterbridge-msglm-53cafa9f3d0c8be33821fc7338b1da97e91d9cc6.zip
Convert .tgs with go libraries (and cgo) (telegram) (#1569)
This commit adds support for go/cgo tgs conversion when building with the -tags `cgo` The default binaries are still "pure" go and uses the old way of converting. * Move lottie_convert.py conversion code to its own file * Add optional libtgsconverter * Update vendor * Apply suggestions from code review * Update bridge/helper/libtgsconverter.go Co-authored-by: Wim <wim@42.be>
Diffstat (limited to 'vendor/github.com/sizeofint/webpanimation/capi.go')
-rw-r--r--vendor/github.com/sizeofint/webpanimation/capi.go362
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)),
+ ))
+}