feat: add msgpack decode to MediaFormat

This commit is contained in:
Derrick Hammer 2024-03-01 03:01:30 -05:00
parent 889d327c3a
commit ab37004d16
Signed by: pcfreak30
GPG Key ID: C997C339BE476FF2
1 changed files with 79 additions and 1 deletions

View File

@ -1,6 +1,15 @@
package metadata
import "git.lumeweb.com/LumeWeb/libs5-go/encoding"
import (
"errors"
"git.lumeweb.com/LumeWeb/libs5-go/encoding"
"github.com/vmihailenco/msgpack/v5"
)
var (
_ msgpack.CustomDecoder = (*MediaFormat)(nil)
_ msgpack.CustomEncoder = (*MediaFormat)(nil)
)
type MediaFormat struct {
Subtype string
@ -29,6 +38,10 @@ type MediaFormat struct {
Caption string
}
func (mmd *MediaFormat) EncodeMsgpack(encoder *msgpack.Encoder) error {
return errors.New("Not implemented")
}
func NewMediaFormat(subtype string, role, ext, vcodec, acodec, container, dynamicRange, charset, initRange, indexRange, caption string, cid *encoding.CID, height, width, asr, fps, bitrate, audioChannels, duration, rows, columns, index int, languages []string, value []byte) *MediaFormat {
return &MediaFormat{
Subtype: subtype,
@ -57,3 +70,68 @@ func NewMediaFormat(subtype string, role, ext, vcodec, acodec, container, dynami
Caption: caption,
}
}
func (mmd *MediaFormat) DecodeMsgpack(dec *msgpack.Decoder) error {
intMap, err := decodeIntMap(dec)
if err != nil {
return err
}
for key, value := range intMap {
switch key {
case 1:
mmd.Cid, err = encoding.CIDFromBytes(value.([]byte))
if err != nil {
return err
}
case 2:
mmd.Subtype = value.(string)
case 3:
mmd.Role = value.(string)
case 4:
mmd.Ext = value.(string)
case 10:
mmd.Height = value.(int)
case 11:
mmd.Width = value.(int)
case 12:
mmd.Languages = value.([]string)
case 13:
mmd.Asr = value.(int)
case 14:
mmd.Fps = value.(int)
case 15:
mmd.Bitrate = value.(int)
case 18:
mmd.AudioChannels = value.(int)
case 19:
mmd.Vcodec = value.(string)
case 20:
mmd.Acodec = value.(string)
case 21:
mmd.Container = value.(string)
case 22:
mmd.DynamicRange = value.(string)
case 23:
mmd.Charset = value.(string)
case 24:
mmd.Value = value.([]byte)
case 25:
mmd.Duration = value.(int)
case 26:
mmd.Rows = value.(int)
case 27:
mmd.Columns = value.(int)
case 28:
mmd.Index = value.(int)
case 29:
mmd.InitRange = value.(string)
case 30:
mmd.IndexRange = value.(string)
case 31:
mmd.Caption = value.(string)
}
}
return nil
}