rc-1
This commit is contained in:
@@ -0,0 +1,78 @@
|
||||
package tools
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strconv"
|
||||
"strings"
|
||||
)
|
||||
|
||||
type StringInteger float64
|
||||
|
||||
func (d *StringInteger) UnmarshalJSON(data []byte) error {
|
||||
s := strings.Trim(string(data), `"`)
|
||||
v, err := strconv.ParseInt(s, 10, 64)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
*d = StringInteger(v)
|
||||
return nil
|
||||
}
|
||||
|
||||
type StringFloat float64
|
||||
|
||||
func (d *StringFloat) UnmarshalJSON(data []byte) error {
|
||||
s := strings.Trim(string(data), `"`)
|
||||
v, err := strconv.ParseFloat(s, 64)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
*d = StringFloat(v)
|
||||
return nil
|
||||
}
|
||||
|
||||
type StringFramerate float64
|
||||
|
||||
func (d *StringFramerate) UnmarshalJSON(data []byte) error {
|
||||
s := strings.Trim(string(data), `"`)
|
||||
|
||||
if parts := strings.SplitN(s, "/", 2); len(parts) == 2 {
|
||||
|
||||
num, err := strconv.ParseFloat(parts[0], 64)
|
||||
if err != nil {
|
||||
return fmt.Errorf("invalid numerator: %s", err)
|
||||
}
|
||||
den, err := strconv.ParseFloat(parts[1], 64)
|
||||
if err != nil {
|
||||
return fmt.Errorf("invalid denominator: %s", err)
|
||||
}
|
||||
|
||||
if den == 0 {
|
||||
den = 1
|
||||
}
|
||||
|
||||
*d = StringFramerate(num / den)
|
||||
return nil
|
||||
}
|
||||
|
||||
f, err := strconv.ParseFloat(s, 64)
|
||||
if err != nil {
|
||||
return fmt.Errorf("cannot parse framerate")
|
||||
}
|
||||
*d = StringFramerate(f)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
type ProbeStream struct {
|
||||
Index int `json:"index"` // 0
|
||||
CodecType string `json:"codec_type"` // video
|
||||
Width int `json:"width"` // 1920
|
||||
Height int `json:"height"` // 1080
|
||||
NumberFrames StringInteger `json:"nb_frames"` // 1
|
||||
RFrameRate StringFramerate `json:"r_frame_rate"` // 15/1
|
||||
Duration StringFloat `json:"duration"` // 251.800
|
||||
}
|
||||
|
||||
type ProbeResults struct {
|
||||
Streams []ProbeStream `json:"streams"`
|
||||
}
|
||||
Reference in New Issue
Block a user