mirror of
https://github.com/cwinfo/matterbridge.git
synced 2025-07-08 07:54:04 +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:
51
vendor/github.com/Benau/tgsconverter/libtgsconverter/apng.go
generated
vendored
Normal file
51
vendor/github.com/Benau/tgsconverter/libtgsconverter/apng.go
generated
vendored
Normal file
@ -0,0 +1,51 @@
|
||||
package libtgsconverter
|
||||
|
||||
import "bytes"
|
||||
import "image"
|
||||
|
||||
import "github.com/kettek/apng"
|
||||
import "github.com/av-elier/go-decimal-to-rational"
|
||||
|
||||
type toapng struct {
|
||||
apng apng.APNG
|
||||
prev_frame *image.RGBA
|
||||
}
|
||||
|
||||
func(to_apng *toapng) init(w uint, h uint, options ConverterOptions) {
|
||||
}
|
||||
|
||||
func(to_apng *toapng) SupportsAnimation() bool {
|
||||
return true
|
||||
}
|
||||
|
||||
func (to_apng *toapng) AddFrame(image *image.RGBA, fps uint) error {
|
||||
if to_apng.prev_frame != nil && sameImage(to_apng.prev_frame, image) {
|
||||
var idx = len(to_apng.apng.Frames) - 1
|
||||
var prev_fps = float64(to_apng.apng.Frames[idx].DelayNumerator) / float64(to_apng.apng.Frames[idx].DelayDenominator)
|
||||
prev_fps += 1.0 / float64(fps)
|
||||
rat := dectofrac.NewRatP(prev_fps, 0.001)
|
||||
to_apng.apng.Frames[idx].DelayNumerator = uint16(rat.Num().Int64())
|
||||
to_apng.apng.Frames[idx].DelayDenominator = uint16(rat.Denom().Int64())
|
||||
return nil
|
||||
}
|
||||
f := apng.Frame{}
|
||||
f.Image = image
|
||||
f.DelayNumerator = 1
|
||||
f.DelayDenominator = uint16(fps)
|
||||
f.DisposeOp = apng.DISPOSE_OP_BACKGROUND
|
||||
f.BlendOp = apng.BLEND_OP_SOURCE
|
||||
f.IsDefault = false
|
||||
to_apng.apng.Frames = append(to_apng.apng.Frames, f)
|
||||
to_apng.prev_frame = image
|
||||
return nil
|
||||
}
|
||||
|
||||
func (to_apng *toapng) Result() []byte {
|
||||
var data []byte
|
||||
w := bytes.NewBuffer(data)
|
||||
err := apng.Encode(w, to_apng.apng)
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
return w.Bytes()
|
||||
}
|
Reference in New Issue
Block a user