Files
core/http/api/skills.go
Jan Stabenow eb1cc37456 Add GoSRT & improvements (repo-merge)
Commits (Ingo Oppermann):
- Add experimental SRT connection stats and logs
- Hide /config/reload endpoint in reade-only mode
- Add SRT server
- Create v16 in go.mod
- Fix data races, tests, lint, and update dependencies
- Add trailing slash for routed directories (datarhei/restreamer#340)
- Allow relative URLs in content in static routes

Co-Authored-By: Ingo Oppermann <57445+ioppermann@users.noreply.github.com>
2022-06-23 22:13:58 +02:00

218 lines
5.9 KiB
Go

package api
import (
"github.com/datarhei/core/v16/ffmpeg/skills"
)
// SkillsFilter represents an ffmpeg filter
type SkillsFilter struct {
ID string `json:"id"`
Name string `json:"name"`
}
// Unmarshal converts a skills filter to its API representation
func (s *SkillsFilter) Unmarshal(filter skills.Filter) {
s.ID = filter.Id
s.Name = filter.Name
}
// SkillsHWAccel represents an ffmpeg HW accelerator
type SkillsHWAccel struct {
ID string `json:"id"`
Name string `json:"name"`
}
// Unmarshal converts a skills HWAccel to its API representation
func (s *SkillsHWAccel) Unmarshal(hwaccel skills.HWAccel) {
s.ID = hwaccel.Id
s.Name = hwaccel.Name
}
// SkillsCodec represents an ffmpeg codec
type SkillsCodec struct {
ID string `json:"id"`
Name string `json:"name"`
Encoders []string `json:"encoders"`
Decoders []string `json:"decoders"`
}
// Unmarshal converts a skills codec to its API representation
func (s *SkillsCodec) Unmarshal(codec skills.Codec) {
s.ID = codec.Id
s.Name = codec.Name
s.Encoders = codec.Encoders
s.Decoders = codec.Decoders
}
// SkillsHWDevice represents an ffmpeg hardware device
type SkillsHWDevice struct {
ID string `json:"id"`
Name string `json:"name"`
Extra string `json:"extra"`
Media string `json:"media"`
}
// Unmarshal converts a skills HW device to its API representation
func (s *SkillsHWDevice) Unmarshal(hwdevice skills.HWDevice) {
s.ID = hwdevice.Id
s.Name = hwdevice.Name
s.Extra = hwdevice.Extra
s.Media = hwdevice.Media
}
// SkillsDevice represents a group of ffmpeg hardware devices
type SkillsDevice struct {
ID string `json:"id"`
Name string `json:"name"`
Devices []SkillsHWDevice `json:"devices"`
}
// Unmarshal converts a skills device to its API representation
func (s *SkillsDevice) Unmarshal(device skills.Device) {
s.ID = device.Id
s.Name = device.Name
s.Devices = make([]SkillsHWDevice, len(device.Devices))
for i, dev := range device.Devices {
s.Devices[i].Unmarshal(dev)
}
}
// SkillsFormat represents an ffmpeg format
type SkillsFormat struct {
ID string `json:"id"`
Name string `json:"name"`
}
// Unmarshal converts a skills format to its API representation
func (s *SkillsFormat) Unmarshal(format skills.Format) {
s.ID = format.Id
s.Name = format.Name
}
// SkillsProtocol represents an ffmpeg protocol
type SkillsProtocol struct {
ID string `json:"id"`
Name string `json:"name"`
}
// Unmarshal converts a skills protocol to its API representation
func (s *SkillsProtocol) Unmarshal(proto skills.Protocol) {
s.ID = proto.Id
s.Name = proto.Name
}
// SkillsLibrary represents an avlib ffmpeg is compiled and linked with
type SkillsLibrary struct {
Name string `json:"name"`
Compiled string `json:"compiled"`
Linked string `json:"linked"`
}
// Unmarshal converts a skills library to its API representation
func (s *SkillsLibrary) Unmarshal(lib skills.Library) {
s.Name = lib.Name
s.Compiled = lib.Compiled
s.Linked = lib.Linked
}
// Skills represents a set of ffmpeg capabilities
type Skills struct {
FFmpeg struct {
Version string `json:"version"`
Compiler string `json:"compiler"`
Configuration string `json:"configuration"`
Libraries []SkillsLibrary `json:"libraries"`
} `json:"ffmpeg"`
Filters []SkillsFilter `json:"filter"`
HWAccels []SkillsHWAccel `json:"hwaccels"`
Codecs struct {
Audio []SkillsCodec `json:"audio"`
Video []SkillsCodec `json:"video"`
Subtitle []SkillsCodec `json:"subtitle"`
} `json:"codecs"`
Devices struct {
Demuxers []SkillsDevice `json:"demuxers"`
Muxers []SkillsDevice `json:"muxers"`
} `json:"devices"`
Formats struct {
Demuxers []SkillsFormat `json:"demuxers"`
Muxers []SkillsFormat `json:"muxers"`
} `json:"formats"`
Protocols struct {
Input []SkillsProtocol `json:"input"`
Output []SkillsProtocol `json:"output"`
} `json:"protocols"`
}
// Unmarshal converts skills to their API representation
func (s *Skills) Unmarshal(skills skills.Skills) {
s.FFmpeg.Version = skills.FFmpeg.Version
s.FFmpeg.Compiler = skills.FFmpeg.Compiler
s.FFmpeg.Configuration = skills.FFmpeg.Configuration
s.FFmpeg.Libraries = make([]SkillsLibrary, len(skills.FFmpeg.Libraries))
for id, x := range skills.FFmpeg.Libraries {
s.FFmpeg.Libraries[id].Unmarshal(x)
}
s.Filters = make([]SkillsFilter, len(skills.Filters))
for id, x := range skills.Filters {
s.Filters[id].Unmarshal(x)
}
s.HWAccels = make([]SkillsHWAccel, len(skills.HWAccels))
for id, x := range skills.HWAccels {
s.HWAccels[id].Unmarshal(x)
}
s.Codecs.Audio = make([]SkillsCodec, len(skills.Codecs.Audio))
for id, x := range skills.Codecs.Audio {
s.Codecs.Audio[id].Unmarshal(x)
}
s.Codecs.Video = make([]SkillsCodec, len(skills.Codecs.Video))
for id, x := range skills.Codecs.Video {
s.Codecs.Video[id].Unmarshal(x)
}
s.Codecs.Subtitle = make([]SkillsCodec, len(skills.Codecs.Subtitle))
for id, x := range skills.Codecs.Subtitle {
s.Codecs.Subtitle[id].Unmarshal(x)
}
s.Devices.Demuxers = make([]SkillsDevice, len(skills.Devices.Demuxers))
for id, x := range skills.Devices.Demuxers {
s.Devices.Demuxers[id].Unmarshal(x)
}
s.Devices.Muxers = make([]SkillsDevice, len(skills.Devices.Muxers))
for id, x := range skills.Devices.Muxers {
s.Devices.Muxers[id].Unmarshal(x)
}
s.Formats.Demuxers = make([]SkillsFormat, len(skills.Formats.Demuxers))
for id, x := range skills.Formats.Demuxers {
s.Formats.Demuxers[id].Unmarshal(x)
}
s.Formats.Muxers = make([]SkillsFormat, len(skills.Formats.Muxers))
for id, x := range skills.Formats.Muxers {
s.Formats.Muxers[id].Unmarshal(x)
}
s.Protocols.Input = make([]SkillsProtocol, len(skills.Protocols.Input))
for id, x := range skills.Protocols.Input {
s.Protocols.Input[id].Unmarshal(x)
}
s.Protocols.Output = make([]SkillsProtocol, len(skills.Protocols.Output))
for id, x := range skills.Protocols.Output {
s.Protocols.Output[id].Unmarshal(x)
}
}