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:
362
vendor/github.com/sizeofint/webpanimation/capi.go
generated
vendored
Normal file
362
vendor/github.com/sizeofint/webpanimation/capi.go
generated
vendored
Normal 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)),
|
||||
))
|
||||
}
|
Reference in New Issue
Block a user