mirror of
https://github.com/zoriya/Kyoo.git
synced 2025-05-24 02:02:36 -04:00
Fix dual keyframe extractions
This commit is contained in:
parent
45d17fdd2c
commit
b50501907c
@ -9,6 +9,7 @@ import (
|
||||
"path/filepath"
|
||||
"strconv"
|
||||
"strings"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
"golang.org/x/text/language"
|
||||
@ -55,6 +56,9 @@ type MediaInfo struct {
|
||||
Fonts []string `json:"fonts"`
|
||||
/// The list of chapters. See Chapter for more information.
|
||||
Chapters []Chapter `json:"chapters"`
|
||||
|
||||
/// lock used to read/set keyframes of video/audio
|
||||
lock sync.Mutex
|
||||
}
|
||||
|
||||
type Video struct {
|
||||
|
@ -89,11 +89,17 @@ type KeyframeKey struct {
|
||||
}
|
||||
|
||||
func (s *MetadataService) GetKeyframes(info *MediaInfo, isVideo bool, idx uint32) (*Keyframe, error) {
|
||||
info.lock.Lock()
|
||||
var ret *Keyframe
|
||||
if isVideo && info.Videos[idx].Keyframes != nil {
|
||||
return info.Videos[idx].Keyframes, nil
|
||||
ret = info.Videos[idx].Keyframes
|
||||
}
|
||||
if !isVideo && info.Audios[idx].Keyframes != nil {
|
||||
return info.Audios[idx].Keyframes, nil
|
||||
ret = info.Audios[idx].Keyframes
|
||||
}
|
||||
info.lock.Unlock()
|
||||
if ret != nil {
|
||||
return ret, nil
|
||||
}
|
||||
|
||||
get_running, set := s.keyframeLock.Start(KeyframeKey{
|
||||
@ -111,6 +117,14 @@ func (s *MetadataService) GetKeyframes(info *MediaInfo, isVideo bool, idx uint32
|
||||
}
|
||||
kf.info.ready.Add(1)
|
||||
|
||||
info.lock.Lock()
|
||||
if isVideo {
|
||||
info.Videos[idx].Keyframes = kf
|
||||
} else {
|
||||
info.Audios[idx].Keyframes = kf
|
||||
}
|
||||
info.lock.Unlock()
|
||||
|
||||
go func() {
|
||||
var table string
|
||||
var err error
|
||||
|
Loading…
x
Reference in New Issue
Block a user