mirror of
https://github.com/zoriya/Kyoo.git
synced 2026-05-20 22:32:30 -04:00
Transcoder: Quality -> VideoQuality
This commit is contained in:
@@ -88,7 +88,7 @@ func (h *shandler) GetVideoIndex(c echo.Context) error {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
quality, err := src.QualityFromString(c.Param("quality"))
|
||||
quality, err := src.VideoQualityFromString(c.Param("quality"))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -154,7 +154,7 @@ func (h *shandler) GetVideoSegment(c echo.Context) error {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
quality, err := src.QualityFromString(c.Param("quality"))
|
||||
quality, err := src.VideoQualityFromString(c.Param("quality"))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -24,7 +24,7 @@ type FileStream struct {
|
||||
|
||||
type VideoKey struct {
|
||||
idx uint32
|
||||
quality Quality
|
||||
quality VideoQuality
|
||||
}
|
||||
|
||||
func (t *Transcoder) newFileStream(path string, sha string) *FileStream {
|
||||
@@ -110,7 +110,7 @@ func (fs *FileStream) GetMaster(client string) string {
|
||||
}
|
||||
|
||||
if def_video != nil {
|
||||
qualities := utils.Filter(Qualities, func(quality Quality) bool {
|
||||
qualities := utils.Filter(VideoQualities, func(quality VideoQuality) bool {
|
||||
return quality.Height() < def_video.Height
|
||||
})
|
||||
transcode_count := len(qualities)
|
||||
@@ -179,7 +179,7 @@ func (fs *FileStream) GetMaster(client string) string {
|
||||
return master
|
||||
}
|
||||
|
||||
func (fs *FileStream) getVideoStream(idx uint32, quality Quality) (*VideoStream, error) {
|
||||
func (fs *FileStream) getVideoStream(idx uint32, quality VideoQuality) (*VideoStream, error) {
|
||||
stream, _ := fs.videos.GetOrCreate(VideoKey{idx, quality}, func() *VideoStream {
|
||||
ret, _ := fs.transcoder.NewVideoStream(fs, idx, quality)
|
||||
return ret
|
||||
@@ -188,7 +188,7 @@ func (fs *FileStream) getVideoStream(idx uint32, quality Quality) (*VideoStream,
|
||||
return stream, nil
|
||||
}
|
||||
|
||||
func (fs *FileStream) GetVideoIndex(idx uint32, quality Quality, client string) (string, error) {
|
||||
func (fs *FileStream) GetVideoIndex(idx uint32, quality VideoQuality, client string) (string, error) {
|
||||
stream, err := fs.getVideoStream(idx, quality)
|
||||
if err != nil {
|
||||
return "", err
|
||||
@@ -196,7 +196,7 @@ func (fs *FileStream) GetVideoIndex(idx uint32, quality Quality, client string)
|
||||
return stream.GetIndex(client)
|
||||
}
|
||||
|
||||
func (fs *FileStream) GetVideoSegment(idx uint32, quality Quality, segment int32) (string, error) {
|
||||
func (fs *FileStream) GetVideoSegment(idx uint32, quality VideoQuality, segment int32) (string, error) {
|
||||
stream, err := fs.getVideoStream(idx, quality)
|
||||
if err != nil {
|
||||
return "", err
|
||||
|
||||
@@ -70,7 +70,7 @@ func (t *Transcoder) GetVideoIndex(
|
||||
ctx context.Context,
|
||||
path string,
|
||||
video uint32,
|
||||
quality Quality,
|
||||
quality VideoQuality,
|
||||
client string,
|
||||
sha string,
|
||||
) (string, error) {
|
||||
|
||||
@@ -6,25 +6,25 @@ import (
|
||||
"github.com/labstack/echo/v4"
|
||||
)
|
||||
|
||||
type Quality string
|
||||
type VideoQuality string
|
||||
|
||||
const (
|
||||
P240 Quality = "240p"
|
||||
P360 Quality = "360p"
|
||||
P480 Quality = "480p"
|
||||
P720 Quality = "720p"
|
||||
P1080 Quality = "1080p"
|
||||
P1440 Quality = "1440p"
|
||||
P4k Quality = "4k"
|
||||
P8k Quality = "8k"
|
||||
NoResize Quality = "transcode"
|
||||
Original Quality = "original"
|
||||
P240 VideoQuality = "240p"
|
||||
P360 VideoQuality = "360p"
|
||||
P480 VideoQuality = "480p"
|
||||
P720 VideoQuality = "720p"
|
||||
P1080 VideoQuality = "1080p"
|
||||
P1440 VideoQuality = "1440p"
|
||||
P4k VideoQuality = "4k"
|
||||
P8k VideoQuality = "8k"
|
||||
NoResize VideoQuality = "transcode"
|
||||
Original VideoQuality = "original"
|
||||
)
|
||||
|
||||
// Purposfully removing Original from this list (since it require special treatments anyways)
|
||||
var Qualities = []Quality{P240, P360, P480, P720, P1080, P1440, P4k, P8k}
|
||||
var VideoQualities = []VideoQuality{P240, P360, P480, P720, P1080, P1440, P4k, P8k}
|
||||
|
||||
func QualityFromString(str string) (Quality, error) {
|
||||
func VideoQualityFromString(str string) (VideoQuality, error) {
|
||||
if str == string(Original) {
|
||||
return Original, nil
|
||||
}
|
||||
@@ -32,7 +32,7 @@ func QualityFromString(str string) (Quality, error) {
|
||||
return NoResize, nil
|
||||
}
|
||||
|
||||
for _, quality := range Qualities {
|
||||
for _, quality := range VideoQualities {
|
||||
if string(quality) == str {
|
||||
return quality, nil
|
||||
}
|
||||
@@ -41,7 +41,7 @@ func QualityFromString(str string) (Quality, error) {
|
||||
}
|
||||
|
||||
// I'm not entierly sure about the values for bitrates. Double checking would be nice.
|
||||
func (v Quality) AverageBitrate() uint32 {
|
||||
func (v VideoQuality) AverageBitrate() uint32 {
|
||||
switch v {
|
||||
case P240:
|
||||
return 400_000
|
||||
@@ -65,7 +65,7 @@ func (v Quality) AverageBitrate() uint32 {
|
||||
panic("Invalid quality value")
|
||||
}
|
||||
|
||||
func (v Quality) MaxBitrate() uint32 {
|
||||
func (v VideoQuality) MaxBitrate() uint32 {
|
||||
switch v {
|
||||
case P240:
|
||||
return 700_000
|
||||
@@ -89,7 +89,7 @@ func (v Quality) MaxBitrate() uint32 {
|
||||
panic("Invalid quality value")
|
||||
}
|
||||
|
||||
func (q Quality) Height() uint32 {
|
||||
func (q VideoQuality) Height() uint32 {
|
||||
switch q {
|
||||
case P240:
|
||||
return 240
|
||||
@@ -113,8 +113,8 @@ func (q Quality) Height() uint32 {
|
||||
panic("Invalid quality value")
|
||||
}
|
||||
|
||||
func (video *Video) Quality() Quality {
|
||||
for _, quality := range Qualities {
|
||||
func (video *Video) Quality() VideoQuality {
|
||||
for _, quality := range VideoQualities {
|
||||
if quality.Height() >= video.Height || quality.AverageBitrate() >= video.Bitrate {
|
||||
return quality
|
||||
}
|
||||
@@ -8,10 +8,10 @@ import (
|
||||
type VideoStream struct {
|
||||
Stream
|
||||
video *Video
|
||||
quality Quality
|
||||
quality VideoQuality
|
||||
}
|
||||
|
||||
func (t *Transcoder) NewVideoStream(file *FileStream, idx uint32, quality Quality) (*VideoStream, error) {
|
||||
func (t *Transcoder) NewVideoStream(file *FileStream, idx uint32, quality VideoQuality) (*VideoStream, error) {
|
||||
log.Printf(
|
||||
"Creating a new video stream for %s (n %d) in quality %s",
|
||||
file.Info.Path,
|
||||
@@ -84,7 +84,7 @@ func (vs *VideoStream) getTranscodeArgs(segments string) []string {
|
||||
args = append(args, "-vf", Settings.HwAccel.NoResizeFilter)
|
||||
|
||||
// NoResize doesn't have bitrate info, fallback to a know quality higher or equal.
|
||||
for _, q := range Qualities {
|
||||
for _, q := range VideoQualities {
|
||||
if q.Height() >= vs.video.Height {
|
||||
quality = q
|
||||
break
|
||||
|
||||
Reference in New Issue
Block a user