4
0
mirror of https://github.com/cwinfo/matterbridge.git synced 2025-07-04 15:57:44 +00:00

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>
This commit is contained in:
Benau
2021-08-25 04:32:50 +08:00
committed by GitHub
parent d4195deb3a
commit 53cafa9f3d
310 changed files with 121526 additions and 85 deletions

362
vendor/github.com/sizeofint/webpanimation/capi.go generated vendored Normal file
View File

@ -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)),
))
}