mirror of
				https://github.com/superseriousbusiness/gotosocial.git
				synced 2025-11-04 02:32:25 -06:00 
			
		
		
		
	* 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
		
	
			
		
			
				
	
	
		
			164 lines
		
	
	
	
		
			4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			164 lines
		
	
	
	
		
			4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package wasip1
 | 
						|
 | 
						|
import (
 | 
						|
	"fmt"
 | 
						|
)
 | 
						|
 | 
						|
const (
 | 
						|
	FdAdviseName           = "fd_advise"
 | 
						|
	FdAllocateName         = "fd_allocate"
 | 
						|
	FdCloseName            = "fd_close"
 | 
						|
	FdDatasyncName         = "fd_datasync"
 | 
						|
	FdFdstatGetName        = "fd_fdstat_get"
 | 
						|
	FdFdstatSetFlagsName   = "fd_fdstat_set_flags"
 | 
						|
	FdFdstatSetRightsName  = "fd_fdstat_set_rights"
 | 
						|
	FdFilestatGetName      = "fd_filestat_get"
 | 
						|
	FdFilestatSetSizeName  = "fd_filestat_set_size"
 | 
						|
	FdFilestatSetTimesName = "fd_filestat_set_times"
 | 
						|
	FdPreadName            = "fd_pread"
 | 
						|
	FdPrestatGetName       = "fd_prestat_get"
 | 
						|
	FdPrestatDirNameName   = "fd_prestat_dir_name"
 | 
						|
	FdPwriteName           = "fd_pwrite"
 | 
						|
	FdReadName             = "fd_read"
 | 
						|
	FdReaddirName          = "fd_readdir"
 | 
						|
	FdRenumberName         = "fd_renumber"
 | 
						|
	FdSeekName             = "fd_seek"
 | 
						|
	FdSyncName             = "fd_sync"
 | 
						|
	FdTellName             = "fd_tell"
 | 
						|
	FdWriteName            = "fd_write"
 | 
						|
 | 
						|
	PathCreateDirectoryName  = "path_create_directory"
 | 
						|
	PathFilestatGetName      = "path_filestat_get"
 | 
						|
	PathFilestatSetTimesName = "path_filestat_set_times"
 | 
						|
	PathLinkName             = "path_link"
 | 
						|
	PathOpenName             = "path_open"
 | 
						|
	PathReadlinkName         = "path_readlink"
 | 
						|
	PathRemoveDirectoryName  = "path_remove_directory"
 | 
						|
	PathRenameName           = "path_rename"
 | 
						|
	PathSymlinkName          = "path_symlink"
 | 
						|
	PathUnlinkFileName       = "path_unlink_file"
 | 
						|
)
 | 
						|
 | 
						|
// oflags are open flags used by path_open
 | 
						|
// See https://github.com/WebAssembly/WASI/blob/snapshot-01/phases/snapshot/docs.md#-oflags-flagsu16
 | 
						|
const (
 | 
						|
	// O_CREAT creates a file if it does not exist.
 | 
						|
	O_CREAT uint16 = 1 << iota //nolint
 | 
						|
	// O_DIRECTORY fails if not a directory.
 | 
						|
	O_DIRECTORY
 | 
						|
	// O_EXCL fails if file already exists.
 | 
						|
	O_EXCL //nolint
 | 
						|
	// O_TRUNC truncates the file to size 0.
 | 
						|
	O_TRUNC //nolint
 | 
						|
)
 | 
						|
 | 
						|
func OflagsString(oflags int) string {
 | 
						|
	return flagsString(oflagNames[:], oflags)
 | 
						|
}
 | 
						|
 | 
						|
var oflagNames = [...]string{
 | 
						|
	"CREAT",
 | 
						|
	"DIRECTORY",
 | 
						|
	"EXCL",
 | 
						|
	"TRUNC",
 | 
						|
}
 | 
						|
 | 
						|
// file descriptor flags
 | 
						|
// See https://github.com/WebAssembly/WASI/blob/snapshot-01/phases/snapshot/docs.md#fdflags
 | 
						|
const (
 | 
						|
	FD_APPEND uint16 = 1 << iota //nolint
 | 
						|
	FD_DSYNC
 | 
						|
	FD_NONBLOCK
 | 
						|
	FD_RSYNC
 | 
						|
	FD_SYNC
 | 
						|
)
 | 
						|
 | 
						|
func FdFlagsString(fdflags int) string {
 | 
						|
	return flagsString(fdflagNames[:], fdflags)
 | 
						|
}
 | 
						|
 | 
						|
var fdflagNames = [...]string{
 | 
						|
	"APPEND",
 | 
						|
	"DSYNC",
 | 
						|
	"NONBLOCK",
 | 
						|
	"RSYNC",
 | 
						|
	"SYNC",
 | 
						|
}
 | 
						|
 | 
						|
// See https://github.com/WebAssembly/WASI/blob/snapshot-01/phases/snapshot/docs.md#lookupflags
 | 
						|
const (
 | 
						|
	// LOOKUP_SYMLINK_FOLLOW expands a path if it resolves into a symbolic
 | 
						|
	// link.
 | 
						|
	LOOKUP_SYMLINK_FOLLOW uint16 = 1 << iota //nolint
 | 
						|
)
 | 
						|
 | 
						|
var lookupflagNames = [...]string{
 | 
						|
	"SYMLINK_FOLLOW",
 | 
						|
}
 | 
						|
 | 
						|
func LookupflagsString(lookupflags int) string {
 | 
						|
	return flagsString(lookupflagNames[:], lookupflags)
 | 
						|
}
 | 
						|
 | 
						|
// DirentSize is the size of the dirent struct, which should be followed by the
 | 
						|
// length of a file name.
 | 
						|
const DirentSize = uint32(24)
 | 
						|
 | 
						|
const (
 | 
						|
	FILETYPE_UNKNOWN uint8 = iota
 | 
						|
	FILETYPE_BLOCK_DEVICE
 | 
						|
	FILETYPE_CHARACTER_DEVICE
 | 
						|
	FILETYPE_DIRECTORY
 | 
						|
	FILETYPE_REGULAR_FILE
 | 
						|
	FILETYPE_SOCKET_DGRAM
 | 
						|
	FILETYPE_SOCKET_STREAM
 | 
						|
	FILETYPE_SYMBOLIC_LINK
 | 
						|
)
 | 
						|
 | 
						|
// FiletypeName returns string name of the file type.
 | 
						|
func FiletypeName(filetype uint8) string {
 | 
						|
	if int(filetype) < len(filetypeToString) {
 | 
						|
		return filetypeToString[filetype]
 | 
						|
	}
 | 
						|
	return fmt.Sprintf("filetype(%d)", filetype)
 | 
						|
}
 | 
						|
 | 
						|
var filetypeToString = [...]string{
 | 
						|
	"UNKNOWN",
 | 
						|
	"BLOCK_DEVICE",
 | 
						|
	"CHARACTER_DEVICE",
 | 
						|
	"DIRECTORY",
 | 
						|
	"REGULAR_FILE",
 | 
						|
	"SOCKET_DGRAM",
 | 
						|
	"SOCKET_STREAM",
 | 
						|
	"SYMBOLIC_LINK",
 | 
						|
}
 | 
						|
 | 
						|
// https://github.com/WebAssembly/WASI/blob/snapshot-01/phases/snapshot/docs.md#fstflags
 | 
						|
const (
 | 
						|
	FstflagsAtim uint16 = 1 << iota
 | 
						|
	FstflagsAtimNow
 | 
						|
	FstflagsMtim
 | 
						|
	FstflagsMtimNow
 | 
						|
)
 | 
						|
 | 
						|
var fstflagNames = [...]string{
 | 
						|
	"ATIM",
 | 
						|
	"ATIM_NOW",
 | 
						|
	"MTIM",
 | 
						|
	"MTIM_NOW",
 | 
						|
}
 | 
						|
 | 
						|
func FstflagsString(fdflags int) string {
 | 
						|
	return flagsString(fstflagNames[:], fdflags)
 | 
						|
}
 | 
						|
 | 
						|
// https://github.com/WebAssembly/WASI/blob/snapshot-01/phases/snapshot/docs.md#-advice-enumu8
 | 
						|
const (
 | 
						|
	FdAdviceNormal byte = iota
 | 
						|
	FdAdviceSequential
 | 
						|
	FdAdviceRandom
 | 
						|
	FdAdviceWillNeed
 | 
						|
	FdAdviceDontNeed
 | 
						|
	FdAdviceNoReuse
 | 
						|
)
 |