mirror of
https://github.com/superseriousbusiness/gotosocial.git
synced 2025-11-03 00:32:25 -06:00
[feature] support processing of (many) more media types (#3090)
* initial work replacing our media decoding / encoding pipeline with ffprobe + ffmpeg
* specify the video codec to use when generating static image from emoji
* update go-storage library (fixes incompatibility after updating go-iotools)
* maintain image aspect ratio when generating a thumbnail for it
* update readme to show go-ffmpreg
* fix a bunch of media tests, move filesize checking to callers of media manager for more flexibility
* remove extra debug from error message
* fix up incorrect function signatures
* update PutFile to just use regular file copy, as changes are file is on separate partition
* fix remaining tests, remove some unneeded tests now we're working with ffmpeg/ffprobe
* update more tests, add more code comments
* add utilities to generate processed emoji / media outputs
* fix remaining tests
* add test for opus media file, add license header to utility cmds
* limit the number of concurrently available ffmpeg / ffprobe instances
* reduce number of instances
* further reduce number of instances
* fix envparsing test with configuration variables
* update docs and configuration with new media-{local,remote}-max-size variables
This commit is contained in:
parent
5bc567196b
commit
cde2fb6244
376 changed files with 8026 additions and 54091 deletions
0
vendor/github.com/dsoprea/go-photoshop-info-format/.MODULE_ROOT
generated
vendored
0
vendor/github.com/dsoprea/go-photoshop-info-format/.MODULE_ROOT
generated
vendored
14
vendor/github.com/dsoprea/go-photoshop-info-format/.travis.yml
generated
vendored
14
vendor/github.com/dsoprea/go-photoshop-info-format/.travis.yml
generated
vendored
|
|
@ -1,14 +0,0 @@
|
|||
language: go
|
||||
go:
|
||||
- master
|
||||
- stable
|
||||
- "1.13"
|
||||
- "1.12"
|
||||
env:
|
||||
- GO111MODULE=on
|
||||
install:
|
||||
- go get -t ./...
|
||||
- go get github.com/mattn/goveralls
|
||||
script:
|
||||
- go test -v ./...
|
||||
- goveralls -v -service=travis-ci
|
||||
21
vendor/github.com/dsoprea/go-photoshop-info-format/LICENSE
generated
vendored
21
vendor/github.com/dsoprea/go-photoshop-info-format/LICENSE
generated
vendored
|
|
@ -1,21 +0,0 @@
|
|||
MIT License
|
||||
|
||||
Copyright (c) 2020 Dustin Oprea
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
8
vendor/github.com/dsoprea/go-photoshop-info-format/README.md
generated
vendored
8
vendor/github.com/dsoprea/go-photoshop-info-format/README.md
generated
vendored
|
|
@ -1,8 +0,0 @@
|
|||
[](https://travis-ci.org/dsoprea/go-photoshop-info-format)
|
||||
[](https://coveralls.io/github/dsoprea/go-photoshop-info-format?branch=master)
|
||||
[](https://goreportcard.com/report/github.com/dsoprea/go-photoshop-info-format)
|
||||
[](https://godoc.org/github.com/dsoprea/go-photoshop-info-format)
|
||||
|
||||
# Overview
|
||||
|
||||
This is a minimal Photoshop format implementation to allow IPTC data to be extracted from a JPEG image. This project primarily services [go-jpeg-image-structure](https://github.com/dsoprea/go-jpeg-image-structure).
|
||||
119
vendor/github.com/dsoprea/go-photoshop-info-format/info.go
generated
vendored
119
vendor/github.com/dsoprea/go-photoshop-info-format/info.go
generated
vendored
|
|
@ -1,119 +0,0 @@
|
|||
package photoshopinfo
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"io"
|
||||
|
||||
"encoding/binary"
|
||||
|
||||
"github.com/dsoprea/go-logging"
|
||||
)
|
||||
|
||||
var (
|
||||
defaultByteOrder = binary.BigEndian
|
||||
)
|
||||
|
||||
// Photoshop30InfoRecord is the data for one parsed Photoshop-info record.
|
||||
type Photoshop30InfoRecord struct {
|
||||
// RecordType is the record-type.
|
||||
RecordType string
|
||||
|
||||
// ImageResourceId is the image resource-ID.
|
||||
ImageResourceId uint16
|
||||
|
||||
// Name is the name of the record. It is optional and will be an empty-
|
||||
// string if not present.
|
||||
Name string
|
||||
|
||||
// Data is the raw record data.
|
||||
Data []byte
|
||||
}
|
||||
|
||||
// String returns a descriptive string.
|
||||
func (pir Photoshop30InfoRecord) String() string {
|
||||
return fmt.Sprintf("RECORD-TYPE=[%s] IMAGE-RESOURCE-ID=[0x%04x] NAME=[%s] DATA-SIZE=(%d)", pir.RecordType, pir.ImageResourceId, pir.Name, len(pir.Data))
|
||||
}
|
||||
|
||||
// ReadPhotoshop30InfoRecord parses a single photoshop-info record.
|
||||
func ReadPhotoshop30InfoRecord(r io.Reader) (pir Photoshop30InfoRecord, err error) {
|
||||
defer func() {
|
||||
if state := recover(); state != nil {
|
||||
err = log.Wrap(state.(error))
|
||||
}
|
||||
}()
|
||||
|
||||
recordType := make([]byte, 4)
|
||||
_, err = io.ReadFull(r, recordType)
|
||||
if err != nil {
|
||||
if err == io.EOF {
|
||||
return pir, err
|
||||
}
|
||||
|
||||
log.Panic(err)
|
||||
}
|
||||
|
||||
// TODO(dustin): Move BigEndian to constant/config.
|
||||
|
||||
irId := uint16(0)
|
||||
err = binary.Read(r, defaultByteOrder, &irId)
|
||||
log.PanicIf(err)
|
||||
|
||||
nameSize := uint8(0)
|
||||
err = binary.Read(r, defaultByteOrder, &nameSize)
|
||||
log.PanicIf(err)
|
||||
|
||||
// Add an extra byte if the two length+data size is odd to make the total
|
||||
// bytes read even.
|
||||
doAddPadding := (1+nameSize)%2 == 1
|
||||
if doAddPadding == true {
|
||||
nameSize++
|
||||
}
|
||||
|
||||
name := make([]byte, nameSize)
|
||||
_, err = io.ReadFull(r, name)
|
||||
log.PanicIf(err)
|
||||
|
||||
// If the last byte is padding, truncate it.
|
||||
if doAddPadding == true {
|
||||
name = name[:nameSize-1]
|
||||
}
|
||||
|
||||
dataSize := uint32(0)
|
||||
err = binary.Read(r, defaultByteOrder, &dataSize)
|
||||
log.PanicIf(err)
|
||||
|
||||
data := make([]byte, dataSize+dataSize%2)
|
||||
_, err = io.ReadFull(r, data)
|
||||
log.PanicIf(err)
|
||||
|
||||
data = data[:dataSize]
|
||||
|
||||
pir = Photoshop30InfoRecord{
|
||||
RecordType: string(recordType),
|
||||
ImageResourceId: irId,
|
||||
Name: string(name),
|
||||
Data: data,
|
||||
}
|
||||
|
||||
return pir, nil
|
||||
}
|
||||
|
||||
// ReadPhotoshop30Info parses a sequence of photoship-info records from the stream.
|
||||
func ReadPhotoshop30Info(r io.Reader) (pirIndex map[uint16]Photoshop30InfoRecord, err error) {
|
||||
pirIndex = make(map[uint16]Photoshop30InfoRecord)
|
||||
|
||||
for {
|
||||
pir, err := ReadPhotoshop30InfoRecord(r)
|
||||
if err != nil {
|
||||
if err == io.EOF {
|
||||
break
|
||||
}
|
||||
|
||||
log.Panic(err)
|
||||
}
|
||||
|
||||
pirIndex[pir.ImageResourceId] = pir
|
||||
}
|
||||
|
||||
return pirIndex, nil
|
||||
}
|
||||
73
vendor/github.com/dsoprea/go-photoshop-info-format/testing_common.go
generated
vendored
73
vendor/github.com/dsoprea/go-photoshop-info-format/testing_common.go
generated
vendored
|
|
@ -1,73 +0,0 @@
|
|||
package photoshopinfo
|
||||
|
||||
import (
|
||||
"os"
|
||||
"path"
|
||||
|
||||
"github.com/dsoprea/go-logging"
|
||||
)
|
||||
|
||||
var (
|
||||
testDataRelFilepath = "photoshop.data"
|
||||
)
|
||||
|
||||
var (
|
||||
moduleRootPath = ""
|
||||
assetsPath = ""
|
||||
)
|
||||
|
||||
// GetModuleRootPath returns the root-path of the module.
|
||||
func GetModuleRootPath() string {
|
||||
if moduleRootPath == "" {
|
||||
moduleRootPath = os.Getenv("PHOTOSHOPINFO_MODULE_ROOT_PATH")
|
||||
if moduleRootPath != "" {
|
||||
return moduleRootPath
|
||||
}
|
||||
|
||||
currentWd, err := os.Getwd()
|
||||
log.PanicIf(err)
|
||||
|
||||
currentPath := currentWd
|
||||
visited := make([]string, 0)
|
||||
|
||||
for {
|
||||
tryStampFilepath := path.Join(currentPath, ".MODULE_ROOT")
|
||||
|
||||
_, err := os.Stat(tryStampFilepath)
|
||||
if err != nil && os.IsNotExist(err) != true {
|
||||
log.Panic(err)
|
||||
} else if err == nil {
|
||||
break
|
||||
}
|
||||
|
||||
visited = append(visited, tryStampFilepath)
|
||||
|
||||
currentPath = path.Dir(currentPath)
|
||||
if currentPath == "/" {
|
||||
log.Panicf("could not find module-root: %v", visited)
|
||||
}
|
||||
}
|
||||
|
||||
moduleRootPath = currentPath
|
||||
}
|
||||
|
||||
return moduleRootPath
|
||||
}
|
||||
|
||||
// GetTestAssetsPath returns the path of the test-assets.
|
||||
func GetTestAssetsPath() string {
|
||||
if assetsPath == "" {
|
||||
moduleRootPath := GetModuleRootPath()
|
||||
assetsPath = path.Join(moduleRootPath, "assets")
|
||||
}
|
||||
|
||||
return assetsPath
|
||||
}
|
||||
|
||||
// GetTestDataFilepath returns the file-path of the common test-data.
|
||||
func GetTestDataFilepath() string {
|
||||
assetsPath := GetTestAssetsPath()
|
||||
filepath := path.Join(assetsPath, testDataRelFilepath)
|
||||
|
||||
return filepath
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue